Module Name: src Committed By: dsl Date: Sun Dec 8 20:45:30 UTC 2013
Modified Files: src/sys/arch/i386/i386: freebsd_machdep.c ibcs2_machdep.c machdep.c process_machdep.c svr4_machdep.c trap.c src/sys/arch/i386/include: freebsd_machdep.h npx.h src/sys/arch/i386/isa: npx.c Log Message: Rename the fields of 'struct envxmm' (itself badly named) so that they are different from those used for the x87 fpu. Use a union to describe the 64bit 'address' field so that it correctly spilt for 32bit binaries. The freebsd emulation defined its own 'struct freebsd_env87' that the code just assumed matched the netbsd one. Since this is a hardware structure, just use the netbsd one. This shouldn't change the binaries except that 'en_fos' used to be incorrectly a 32bit field. To generate a diff of this commit: cvs rdiff -u -r1.55 -r1.56 src/sys/arch/i386/i386/freebsd_machdep.c cvs rdiff -u -r1.40 -r1.41 src/sys/arch/i386/i386/ibcs2_machdep.c cvs rdiff -u -r1.739 -r1.740 src/sys/arch/i386/i386/machdep.c cvs rdiff -u -r1.74 -r1.75 src/sys/arch/i386/i386/process_machdep.c cvs rdiff -u -r1.96 -r1.97 src/sys/arch/i386/i386/svr4_machdep.c cvs rdiff -u -r1.266 -r1.267 src/sys/arch/i386/i386/trap.c cvs rdiff -u -r1.9 -r1.10 src/sys/arch/i386/include/freebsd_machdep.h cvs rdiff -u -r1.26 -r1.27 src/sys/arch/i386/include/npx.h cvs rdiff -u -r1.146 -r1.147 src/sys/arch/i386/isa/npx.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/i386/i386/freebsd_machdep.c diff -u src/sys/arch/i386/i386/freebsd_machdep.c:1.55 src/sys/arch/i386/i386/freebsd_machdep.c:1.56 --- src/sys/arch/i386/i386/freebsd_machdep.c:1.55 Thu Dec 10 14:13:50 2009 +++ src/sys/arch/i386/i386/freebsd_machdep.c Sun Dec 8 20:45:30 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: freebsd_machdep.c,v 1.55 2009/12/10 14:13:50 matt Exp $ */ +/* $NetBSD: freebsd_machdep.c,v 1.56 2013/12/08 20:45:30 dsl Exp $ */ /*- * Copyright (c) 1998, 2000 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: freebsd_machdep.c,v 1.55 2009/12/10 14:13:50 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: freebsd_machdep.c,v 1.56 2013/12/08 20:45:30 dsl Exp $"); #if defined(_KERNEL_OPT) #include "opt_vm86.h" @@ -65,7 +65,7 @@ freebsd_setregs(struct lwp *l, struct ex setregs(l, epp, stack); if (i386_use_fxsave) - pcb->pcb_savefpu.sv_xmm.sv_env.en_cw = __FreeBSD_NPXCW__; + pcb->pcb_savefpu.sv_xmm.sv_env.fx_cw = __FreeBSD_NPXCW__; else pcb->pcb_savefpu.sv_87.sv_env.en_cw = __FreeBSD_NPXCW__; } @@ -285,8 +285,7 @@ netbsd_to_freebsd_ptrace_regs(struct reg fregs->freebsd_ptrace_regs.tf_esp = nregs->r_esp; fregs->freebsd_ptrace_regs.tf_ss = nregs->r_ss; - fregs->freebsd_ptrace_fpregs.sv_env = - *(struct freebsd_env87 *)&nframe->sv_env; + fregs->freebsd_ptrace_fpregs.sv_env = nframe->sv_env; memcpy(fregs->freebsd_ptrace_fpregs.sv_ac, nframe->sv_ac, sizeof(fregs->freebsd_ptrace_fpregs.sv_ac)); fregs->freebsd_ptrace_fpregs.sv_ex_sw = @@ -336,8 +335,7 @@ freebsd_to_netbsd_ptrace_regs(struct fre nregs->r_esp = fregs->freebsd_ptrace_regs.tf_esp; nregs->r_ss = fregs->freebsd_ptrace_regs.tf_ss; - nframe->sv_env = - *(struct env87 *)&fregs->freebsd_ptrace_fpregs.sv_env; + nframe->sv_env = fregs->freebsd_ptrace_fpregs.sv_env; memcpy(nframe->sv_ac, fregs->freebsd_ptrace_fpregs.sv_ac, sizeof(nframe->sv_ac)); nframe->sv_ex_sw = Index: src/sys/arch/i386/i386/ibcs2_machdep.c diff -u src/sys/arch/i386/i386/ibcs2_machdep.c:1.40 src/sys/arch/i386/i386/ibcs2_machdep.c:1.41 --- src/sys/arch/i386/i386/ibcs2_machdep.c:1.40 Sun Feb 14 11:09:54 2010 +++ src/sys/arch/i386/i386/ibcs2_machdep.c Sun Dec 8 20:45:30 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: ibcs2_machdep.c,v 1.40 2010/02/14 11:09:54 drochner Exp $ */ +/* $NetBSD: ibcs2_machdep.c,v 1.41 2013/12/08 20:45:30 dsl Exp $ */ /*- * Copyright (c) 1997, 2000 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ibcs2_machdep.c,v 1.40 2010/02/14 11:09:54 drochner Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ibcs2_machdep.c,v 1.41 2013/12/08 20:45:30 dsl Exp $"); #if defined(_KERNEL_OPT) #include "opt_vm86.h" @@ -69,7 +69,7 @@ ibcs2_setregs(struct lwp *l, struct exec setregs(l, epp, stack); if (i386_use_fxsave) - pcb->pcb_savefpu.sv_xmm.sv_env.en_cw = __iBCS2_NPXCW__; + pcb->pcb_savefpu.sv_xmm.sv_env.fx_cw = __iBCS2_NPXCW__; else pcb->pcb_savefpu.sv_87.sv_env.en_cw = __iBCS2_NPXCW__; tf = l->l_md.md_regs; Index: src/sys/arch/i386/i386/machdep.c diff -u src/sys/arch/i386/i386/machdep.c:1.739 src/sys/arch/i386/i386/machdep.c:1.740 --- src/sys/arch/i386/i386/machdep.c:1.739 Sun Dec 1 01:05:16 2013 +++ src/sys/arch/i386/i386/machdep.c Sun Dec 8 20:45:30 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.739 2013/12/01 01:05:16 christos Exp $ */ +/* $NetBSD: machdep.c,v 1.740 2013/12/08 20:45:30 dsl Exp $ */ /*- * Copyright (c) 1996, 1997, 1998, 2000, 2004, 2006, 2008, 2009 @@ -67,7 +67,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.739 2013/12/01 01:05:16 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.740 2013/12/08 20:45:30 dsl Exp $"); #include "opt_beep.h" #include "opt_compat_ibcs2.h" @@ -886,8 +886,8 @@ setregs(struct lwp *l, struct exec_packa l->l_md.md_flags &= ~MDL_USEDFPU; if (i386_use_fxsave) { - pcb->pcb_savefpu.sv_xmm.sv_env.en_cw = control; - pcb->pcb_savefpu.sv_xmm.sv_env.en_mxcsr = __INITIAL_MXCSR__; + pcb->pcb_savefpu.sv_xmm.sv_env.fx_cw = control; + pcb->pcb_savefpu.sv_xmm.sv_env.fx_mxcsr = __INITIAL_MXCSR__; } else pcb->pcb_savefpu.sv_87.sv_env.en_cw = control; memcpy(&pcb->pcb_fsd, &gdt[GUDATA_SEL], sizeof(pcb->pcb_fsd)); Index: src/sys/arch/i386/i386/process_machdep.c diff -u src/sys/arch/i386/i386/process_machdep.c:1.74 src/sys/arch/i386/i386/process_machdep.c:1.75 --- src/sys/arch/i386/i386/process_machdep.c:1.74 Sun Dec 1 01:05:16 2013 +++ src/sys/arch/i386/i386/process_machdep.c Sun Dec 8 20:45:30 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: process_machdep.c,v 1.74 2013/12/01 01:05:16 christos Exp $ */ +/* $NetBSD: process_machdep.c,v 1.75 2013/12/08 20:45:30 dsl Exp $ */ /*- * Copyright (c) 1998, 2000, 2001, 2008 The NetBSD Foundation, Inc. @@ -52,7 +52,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.74 2013/12/01 01:05:16 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.75 2013/12/08 20:45:30 dsl Exp $"); #include "opt_vm86.h" #include "opt_ptrace.h" @@ -132,14 +132,12 @@ process_xmm_to_s87(const struct savexmm int i; /* FPU control/status */ - s87->sv_env.en_cw = sxmm->sv_env.en_cw; - s87->sv_env.en_sw = sxmm->sv_env.en_sw; + s87->sv_env.en_cw = sxmm->sv_env.fx_cw; + s87->sv_env.en_sw = sxmm->sv_env.fx_sw; /* tag word handled below */ - s87->sv_env.en_fip = sxmm->sv_env.en_fip; - s87->sv_env.en_fcs = sxmm->sv_env.en_fcs; - s87->sv_env.en_opcode = sxmm->sv_env.en_opcode; - s87->sv_env.en_foo = sxmm->sv_env.en_foo; - s87->sv_env.en_fos = sxmm->sv_env.en_fos; + s87->sv_env.en_ip = sxmm->sv_env.fx_ip; + s87->sv_env.en_opcode = sxmm->sv_env.fx_opcode; + s87->sv_env.en_dp = sxmm->sv_env.fx_dp; /* Tag word and registers. */ s87->sv_env.en_tw = 0; @@ -147,7 +145,7 @@ process_xmm_to_s87(const struct savexmm for (i = 0; i < 8; i++) { s87->sv_env.en_tw |= (xmm_to_s87_tag(sxmm->sv_ac[i].fp_bytes, i, - sxmm->sv_env.en_tw) << (i * 2)); + sxmm->sv_env.fx_tw) << (i * 2)); s87->sv_ex_tw |= (xmm_to_s87_tag(sxmm->sv_ac[i].fp_bytes, i, @@ -166,21 +164,19 @@ process_s87_to_xmm(const struct save87 * int i; /* FPU control/status */ - sxmm->sv_env.en_cw = s87->sv_env.en_cw; - sxmm->sv_env.en_sw = s87->sv_env.en_sw; + sxmm->sv_env.fx_cw = s87->sv_env.en_cw; + sxmm->sv_env.fx_sw = s87->sv_env.en_sw; /* tag word handled below */ - sxmm->sv_env.en_fip = s87->sv_env.en_fip; - sxmm->sv_env.en_fcs = s87->sv_env.en_fcs; - sxmm->sv_env.en_opcode = s87->sv_env.en_opcode; - sxmm->sv_env.en_foo = s87->sv_env.en_foo; - sxmm->sv_env.en_fos = s87->sv_env.en_fos; + sxmm->sv_env.fx_ip = s87->sv_env.en_ip; + sxmm->sv_env.fx_opcode = s87->sv_env.en_opcode; + sxmm->sv_env.fx_dp = s87->sv_env.en_dp; /* Tag word and registers. */ for (i = 0; i < 8; i++) { if (((s87->sv_env.en_tw >> (i * 2)) & 3) == 3) - sxmm->sv_env.en_tw &= ~(1U << i); + sxmm->sv_env.fx_tw &= ~(1U << i); else - sxmm->sv_env.en_tw |= (1U << i); + sxmm->sv_env.fx_tw |= (1U << i); #if 0 /* @@ -257,15 +253,15 @@ process_read_fpregs(struct lwp *l, struc * save it temporarily. */ if (i386_use_fxsave) { - uint32_t mxcsr = frame->sv_xmm.sv_env.en_mxcsr; - uint16_t cw = frame->sv_xmm.sv_env.en_cw; + uint32_t mxcsr = frame->sv_xmm.sv_env.fx_mxcsr; + uint16_t cw = frame->sv_xmm.sv_env.fx_cw; /* XXX Don't zero XMM regs? */ memset(&frame->sv_xmm, 0, sizeof(frame->sv_xmm)); - frame->sv_xmm.sv_env.en_cw = cw; - frame->sv_xmm.sv_env.en_mxcsr = mxcsr; - frame->sv_xmm.sv_env.en_sw = 0x0000; - frame->sv_xmm.sv_env.en_tw = 0x00; + frame->sv_xmm.sv_env.fx_cw = cw; + frame->sv_xmm.sv_env.fx_mxcsr = mxcsr; + frame->sv_xmm.sv_env.fx_sw = 0x0000; + frame->sv_xmm.sv_env.fx_tw = 0x00; } else { uint16_t cw = frame->sv_87.sv_env.en_cw; @@ -414,15 +410,15 @@ process_machdep_read_xmmregs(struct lwp * The initial control word was already set by setregs(), * so save it temporarily. */ - uint32_t mxcsr = frame->sv_xmm.sv_env.en_mxcsr; - uint16_t cw = frame->sv_xmm.sv_env.en_cw; + uint32_t mxcsr = frame->sv_xmm.sv_env.fx_mxcsr; + uint16_t cw = frame->sv_xmm.sv_env.fx_cw; /* XXX Don't zero XMM regs? */ memset(&frame->sv_xmm, 0, sizeof(frame->sv_xmm)); - frame->sv_xmm.sv_env.en_cw = cw; - frame->sv_xmm.sv_env.en_mxcsr = mxcsr; - frame->sv_xmm.sv_env.en_sw = 0x0000; - frame->sv_xmm.sv_env.en_tw = 0x00; + frame->sv_xmm.sv_env.fx_cw = cw; + frame->sv_xmm.sv_env.fx_mxcsr = mxcsr; + frame->sv_xmm.sv_env.fx_sw = 0x0000; + frame->sv_xmm.sv_env.fx_tw = 0x00; l->l_md.md_flags |= MDL_USEDFPU; } Index: src/sys/arch/i386/i386/svr4_machdep.c diff -u src/sys/arch/i386/i386/svr4_machdep.c:1.96 src/sys/arch/i386/i386/svr4_machdep.c:1.97 --- src/sys/arch/i386/i386/svr4_machdep.c:1.96 Sun Feb 14 11:09:54 2010 +++ src/sys/arch/i386/i386/svr4_machdep.c Sun Dec 8 20:45:30 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: svr4_machdep.c,v 1.96 2010/02/14 11:09:54 drochner Exp $ */ +/* $NetBSD: svr4_machdep.c,v 1.97 2013/12/08 20:45:30 dsl Exp $ */ /*- * Copyright (c) 1994, 2000 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: svr4_machdep.c,v 1.96 2010/02/14 11:09:54 drochner Exp $"); +__KERNEL_RCSID(0, "$NetBSD: svr4_machdep.c,v 1.97 2013/12/08 20:45:30 dsl Exp $"); #if defined(_KERNEL_OPT) #include "opt_vm86.h" @@ -116,7 +116,7 @@ svr4_setregs(struct lwp *l, struct exec_ setregs(l, epp, stack); if (i386_use_fxsave) - pcb->pcb_savefpu.sv_xmm.sv_env.en_cw = __SVR4_NPXCW__; + pcb->pcb_savefpu.sv_xmm.sv_env.fx_cw = __SVR4_NPXCW__; else pcb->pcb_savefpu.sv_87.sv_env.en_cw = __SVR4_NPXCW__; tf->tf_cs = GSEL(GUCODEBIG_SEL, SEL_UPL); Index: src/sys/arch/i386/i386/trap.c diff -u src/sys/arch/i386/i386/trap.c:1.266 src/sys/arch/i386/i386/trap.c:1.267 --- src/sys/arch/i386/i386/trap.c:1.266 Sat Dec 8 12:36:30 2012 +++ src/sys/arch/i386/i386/trap.c Sun Dec 8 20:45:30 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.266 2012/12/08 12:36:30 kiyohara Exp $ */ +/* $NetBSD: trap.c,v 1.267 2013/12/08 20:45:30 dsl Exp $ */ /*- * Copyright (c) 1998, 2000, 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc. @@ -68,7 +68,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.266 2012/12/08 12:36:30 kiyohara Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.267 2013/12/08 20:45:30 dsl Exp $"); #include "opt_ddb.h" #include "opt_kgdb.h" @@ -203,7 +203,7 @@ xmm_si_code(struct lwp *l) return 0; } pcb = lwp_getpcb(l); - mxcsr = pcb->pcb_savefpu.sv_xmm.sv_env.en_mxcsr; + mxcsr = pcb->pcb_savefpu.sv_xmm.sv_env.fx_mxcsr; /* * Since we only have a single status and control register, Index: src/sys/arch/i386/include/freebsd_machdep.h diff -u src/sys/arch/i386/include/freebsd_machdep.h:1.9 src/sys/arch/i386/include/freebsd_machdep.h:1.10 --- src/sys/arch/i386/include/freebsd_machdep.h:1.9 Wed Sep 14 15:00:16 2005 +++ src/sys/arch/i386/include/freebsd_machdep.h Sun Dec 8 20:45:30 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: freebsd_machdep.h,v 1.9 2005/09/14 15:00:16 he Exp $ */ +/* $NetBSD: freebsd_machdep.h,v 1.10 2013/12/08 20:45:30 dsl Exp $ */ /* * Copyright (c) 1986, 1989, 1991, 1993 @@ -143,16 +143,7 @@ struct freebsd_trapframe { }; /* Environment information of floating point unit */ -struct freebsd_env87 { - long en_cw; /* control word (16bits) */ - long en_sw; /* status word (16bits) */ - long en_tw; /* tag word (16bits) */ - long en_fip; /* floating point instruction pointer */ - u_short en_fcs; /* floating code segment selector */ - u_short en_opcode; /* opcode last executed (11 bits ) */ - long en_foo; /* floating operand offset */ - long en_fos; /* floating operand segment selector */ -}; +#define freebsd_env87 env87 /* Contents of each floating point accumulator */ struct freebsd_fpacc87 { Index: src/sys/arch/i386/include/npx.h diff -u src/sys/arch/i386/include/npx.h:1.26 src/sys/arch/i386/include/npx.h:1.27 --- src/sys/arch/i386/include/npx.h:1.26 Mon Nov 11 11:10:45 2013 +++ src/sys/arch/i386/include/npx.h Sun Dec 8 20:45:30 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: npx.h,v 1.26 2013/11/11 11:10:45 joerg Exp $ */ +/* $NetBSD: npx.h,v 1.27 2013/12/08 20:45:30 dsl Exp $ */ /*- * Copyright (c) 1990 The Regents of the University of California. @@ -42,16 +42,28 @@ #ifndef _I386_NPX_H_ #define _I386_NPX_H_ -/* Environment information of floating point unit */ +union fp_addr { + uint64_t fa_64; /* Linear address for 64bit systems */ + struct { + uint32_t fa_off; /* Linear address for 32 bit */ + uint16_t fa_seg; /* Code/data (etc) segment */ + uint16_t fa_pad; + } fa_32; +} __packed; + +/* + * Environment information of floating point unit (fsave instruction). + * Note that the 'tag word' contains 2 bits per register and is relative + * to the stack top. + * The fxsave version is 1 bit per register indexed by register number. + */ struct env87 { long en_cw; /* control word (16bits) */ long en_sw; /* status word (16bits) */ long en_tw; /* tag word (16bits) */ - long en_fip; /* floating point instruction pointer */ - uint16_t en_fcs; /* floating code segment selector */ - uint16_t en_opcode; /* opcode last executed (11 bits ) */ - long en_foo; /* floating operand offset */ - long en_fos; /* floating operand segment selector */ + union fp_addr en_ip; /* floating point instruction pointer */ +#define en_opcode en_ip.fa_32.fa_pad /* opcode last executed (11bits) */ + union fp_addr en_dp; /* floating operand offset */ }; /* Contents of each floating point accumulator */ @@ -77,21 +89,17 @@ struct save87 { #endif }; -/* Environment of FPU/MMX/SSE/SSE2. */ +/* Environment of FPU/MMX/SSE/SSE2 (fxsave instruction). */ struct envxmm { -/*0*/ uint16_t en_cw; /* FPU Control Word */ - uint16_t en_sw; /* FPU Status Word */ - uint8_t en_tw; /* FPU Tag Word (abridged) */ - uint8_t en_rsvd0; - uint16_t en_opcode; /* FPU Opcode */ - uint32_t en_fip; /* FPU Instruction Pointer */ - uint16_t en_fcs; /* FPU IP selector */ - uint16_t en_rsvd1; -/*16*/ uint32_t en_foo; /* FPU Data pointer */ - uint16_t en_fos; /* FPU Data pointer selector */ - uint16_t en_rsvd2; - uint32_t en_mxcsr; /* MXCSR Register State */ - uint32_t en_rsvd3; +/*0*/ uint16_t fx_cw; /* FPU Control Word */ + uint16_t fx_sw; /* FPU Status Word */ + uint8_t fx_tw; /* FPU Tag Word (abridged) */ + uint8_t fx_reserved1; + uint16_t fx_opcode; /* FPU Opcode */ + union fp_addr fx_ip; /* FPU Instruction Pointer */ +/*16*/ union fp_addr fx_dp; /* FPU Data pointer */ + uint32_t fx_mxcsr; /* MXCSR Register State */ + uint32_t fx_mxcsr_mask; }; /* FPU regsters in the extended save format. */ Index: src/sys/arch/i386/isa/npx.c diff -u src/sys/arch/i386/isa/npx.c:1.146 src/sys/arch/i386/isa/npx.c:1.147 --- src/sys/arch/i386/isa/npx.c:1.146 Sun Dec 1 01:05:16 2013 +++ src/sys/arch/i386/isa/npx.c Sun Dec 8 20:45:30 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: npx.c,v 1.146 2013/12/01 01:05:16 christos Exp $ */ +/* $NetBSD: npx.c,v 1.147 2013/12/08 20:45:30 dsl Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -96,7 +96,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: npx.c,v 1.146 2013/12/01 01:05:16 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: npx.c,v 1.147 2013/12/08 20:45:30 dsl Exp $"); #if 0 #define IPRINTF(x) printf x @@ -435,7 +435,7 @@ npxintr(void *arg, struct intrframe *fra fpu_save(addr); fwait(); if (i386_use_fxsave) { - fldcw(&addr->sv_xmm.sv_env.en_cw); + fldcw(&addr->sv_xmm.sv_env.fx_cw); /* * FNINIT doesn't affect MXCSR or the XMM registers; * no need to re-load MXCSR here. @@ -452,8 +452,8 @@ npxintr(void *arg, struct intrframe *fra * words, so the complete exception state can be recovered. */ if (i386_use_fxsave) { - addr->sv_xmm.sv_ex_sw = addr->sv_xmm.sv_env.en_sw; - addr->sv_xmm.sv_ex_tw = addr->sv_xmm.sv_env.en_tw; + addr->sv_xmm.sv_ex_sw = addr->sv_xmm.sv_env.fx_sw; + addr->sv_xmm.sv_ex_tw = addr->sv_xmm.sv_env.fx_tw; } else { addr->sv_87.sv_ex_sw = addr->sv_87.sv_env.en_sw; addr->sv_87.sv_ex_tw = addr->sv_87.sv_env.en_tw; @@ -610,7 +610,7 @@ npxdna(struct cpu_info *ci) fninit(); if (i386_use_fxsave) { fldcw(&pcb->pcb_savefpu. - sv_xmm.sv_env.en_cw); + sv_xmm.sv_env.fx_cw); } else { fldcw(&pcb->pcb_savefpu. sv_87.sv_env.en_cw); @@ -916,11 +916,11 @@ static const uint8_t fpetable[128] = { #define GET_FPU_CW(pcb) \ (i386_use_fxsave ? \ - pcb->pcb_savefpu.sv_xmm.sv_env.en_cw : \ + pcb->pcb_savefpu.sv_xmm.sv_env.fx_cw : \ pcb->pcb_savefpu.sv_87.sv_env.en_cw) #define GET_FPU_SW(pcb) \ (i386_use_fxsave ? \ - pcb->pcb_savefpu.sv_xmm.sv_env.en_sw : \ + pcb->pcb_savefpu.sv_xmm.sv_env.fx_sw : \ pcb->pcb_savefpu.sv_87.sv_env.en_sw) /*