Lines Matching full:fpu

3  * FPU register's regset abstraction, for ptrace, core dumps, etc.
8 #include <asm/fpu/api.h>
9 #include <asm/fpu/signal.h>
10 #include <asm/fpu/regset.h>
39 * owns the FPU then the memory state has to be synchronized and the
40 * FPU register state preserved. Otherwise fpstate is already in sync.
45 static void sync_fpstate(struct fpu *fpu) in sync_fpstate() argument
47 if (fpu == &current->thread.fpu) in sync_fpstate()
48 fpu_sync_fpstate(fpu); in sync_fpstate()
52 * Invalidate cached FPU registers before modifying the stopped target
55 * This forces the target task on resume to restore the FPU registers from
57 * with the cached FPU registers which discards the modifications.
59 static void fpu_force_restore(struct fpu *fpu) in fpu_force_restore() argument
62 * Only stopped child tasks can be used to modify the FPU in fpu_force_restore()
65 WARN_ON_FPU(fpu == &current->thread.fpu); in fpu_force_restore()
67 __fpu_invalidate_fpregs_state(fpu); in fpu_force_restore()
73 struct fpu *fpu = &target->thread.fpu; in xfpregs_get() local
78 sync_fpstate(fpu); in xfpregs_get()
81 return membuf_write(&to, &fpu->fpstate->regs.fxsave, in xfpregs_get()
82 sizeof(fpu->fpstate->regs.fxsave)); in xfpregs_get()
93 struct fpu *fpu = &target->thread.fpu; in xfpregs_set() local
112 fpu_force_restore(fpu); in xfpregs_set()
115 memcpy(&fpu->fpstate->regs.fxsave, &newstate, sizeof(newstate)); in xfpregs_set()
118 BUILD_BUG_ON(sizeof(fpu->__fpstate.regs.fxsave.xmm_space) != 16 * 16); in xfpregs_set()
120 memset(&fpu->fpstate->regs.fxsave.xmm_space[8*4], 0, 8 * 16); in xfpregs_set()
124 fpu->fpstate->regs.xsave.header.xfeatures |= XFEATURE_MASK_FPSSE; in xfpregs_set()
135 sync_fpstate(&target->thread.fpu); in xstateregs_get()
145 struct fpu *fpu = &target->thread.fpu; in xstateregs_set() local
169 fpu_force_restore(fpu); in xstateregs_set()
170 ret = copy_uabi_from_kernel_to_xstate(fpu->fpstate, kbuf ?: tmpbuf); in xstateregs_set()
180 * FPU tag word conversions.
265 * should be actually ds/cs at fpu exception time, but in __convert_from_fxsr()
289 __convert_from_fxsr(env, tsk, &tsk->thread.fpu.fpstate->regs.fxsave); in convert_from_fxsr()
322 struct fpu *fpu = &target->thread.fpu; in fpregs_get() local
326 sync_fpstate(fpu); in fpregs_get()
332 return membuf_write(&to, &fpu->fpstate->regs.fsave, in fpregs_get()
343 fx = &fpu->fpstate->regs.fxsave; in fpregs_get()
354 struct fpu *fpu = &target->thread.fpu; in fpregs_set() local
369 fpu_force_restore(fpu); in fpregs_set()
372 convert_to_fxsr(&fpu->fpstate->regs.fxsave, &env); in fpregs_set()
374 memcpy(&fpu->fpstate->regs.fsave, &env, sizeof(env)); in fpregs_set()
381 fpu->fpstate->regs.xsave.header.xfeatures |= XFEATURE_MASK_FP; in fpregs_set()