int process_read_fpregs(struct lwp *l, struct fpreg *regs) { struct fpframe *frame = process_fpframe(l); memcpy(regs->r_regs, frame->fpf_regs, sizeof(frame->fpf_regs)); regs->r_fpcr = frame->fpf_fpcr; regs->r_fpsr = frame->fpf_fpsr; regs->r_fpiar = frame->fpf_fpiar; return 0; }
int process_write_fpregs(struct lwp *l, const struct fpreg *regs) { struct fpframe *frame = process_fpframe(l); memcpy(frame->fpf_regs, regs->r_regs, sizeof(frame->fpf_regs)); frame->fpf_fpcr = regs->r_fpcr; frame->fpf_fpsr = regs->r_fpsr; frame->fpf_fpiar = regs->r_fpiar; return 0; }
int process_write_fpregs(struct proc *p, struct fpreg *regs) { struct fxsave64 *frame = process_fpframe(p); if (p->p_md.md_flags & MDP_USEDFPU) { fpusave_proc(p, 0); } else { p->p_md.md_flags |= MDP_USEDFPU; } memcpy(frame, ®s->fxstate, sizeof(*regs)); frame->fx_mxcsr &= fpu_mxcsr_mask; return (0); }
int process_read_fpregs(struct proc *p, struct fpreg *regs) { struct fxsave64 *frame = process_fpframe(p); if (p->p_md.md_flags & MDP_USEDFPU) { fpusave_proc(p, 1); } else { /* Fake a FNINIT. */ memset(frame, 0, sizeof(*regs)); frame->fx_fcw = __INITIAL_NPXCW__; frame->fx_fsw = 0x0000; frame->fx_ftw = 0xff; frame->fx_mxcsr = __INITIAL_MXCSR__; frame->fx_mxcsr_mask = fpu_mxcsr_mask; p->p_md.md_flags |= MDP_USEDFPU; } memcpy(®s->fxstate, frame, sizeof(*regs)); return (0); }