PUBLIC void save_local_fpu(struct proc *pr) { if(!is_fpu()) return; /* Save changed FPU context. */ if(osfxsr_feature) { fxsave(pr->p_fpu_state.fpu_save_area_p); fninit(); } else { fnsave(pr->p_fpu_state.fpu_save_area_p); } }
void save_local_fpu(struct proc *pr, int retain) { char *state = pr->p_seg.fpu_state; /* Save process FPU context. If the 'retain' flag is set, keep the FPU * state as is. If the flag is not set, the state is undefined upon * return, and the caller is responsible for reloading a proper state. */ if(!is_fpu()) return; assert(state); if(osfxsr_feature) { fxsave(state); } else { fnsave(state); if (retain) (void) frstor(state); } }