diff --git a/src/lisp/NetBSD-os.c b/src/lisp/NetBSD-os.c
index 76de115d251f8113aa6d9aadfad05e44d3ce6a7d..4365b15bf971d96c9511601bcbace536af41b858 100644
--- a/src/lisp/NetBSD-os.c
+++ b/src/lisp/NetBSD-os.c
@@ -27,6 +27,8 @@
 #include <sys/sysctl.h>
 #include <errno.h>
 
+#include <x86/fpu.h>
+
 #include "os.h"
 #include "arch.h"
 #include "globals.h"
@@ -133,19 +135,19 @@ os_sigcontext_fpu_modes(ucontext_t *scp)
 {
     unsigned int modes;
 
-    union savefpu *sv = (union savefpu *) &scp->uc_mcontext.__fpregs.__fp_reg_set;
-    struct env87 *env_87 = (struct env87 *) &sv->sv_87.sv_env;
-    struct envxmm *env_xmm = (struct envxmm *) &sv->sv_xmm.sv_env;
+    union savefpu *sv = &scp->uc_mcontext.__fpregs.__fp_reg_set;
+    struct save87 *env_87 = (struct save87 *) &sv->sv_87;
+    struct fxsave *env_xmm = (struct fxsave *) &sv->sv_xmm;
     u_int16_t cw;
     u_int16_t sw;
 
     if (scp->uc_flags & _UC_FPU) {
 	if (scp->uc_flags & _UC_FXSAVE) {
-	    cw = env_xmm->en_cw;
-	    sw = env_xmm->en_sw;
+	    cw = env_xmm->fx_cw;
+	    sw = env_xmm->fx_sw;
 	} else {
-	    cw = env_87->en_cw & 0xffff;
-	    sw = env_87->en_sw & 0xffff;
+	    cw = env_87->s87_cw & 0xffff;
+	    sw = env_87->s87_sw & 0xffff;
 	}
     } else {
 	cw = 0;
@@ -156,7 +158,7 @@ os_sigcontext_fpu_modes(ucontext_t *scp)
 
 #ifdef FEATURE_SSE2
     if (fpu_mode == SSE2) {
-	u_int32_t mxcsr = env_xmm->en_mxcsr;
+	u_int32_t mxcsr = env_xmm->fx_mxcsr;
 
 	DPRINTF(0, (stderr, "SSE2 modes = %08x\n", (int)mxcsr));
 	modes |= mxcsr;
@@ -347,9 +349,9 @@ sigfpe_handler(HANDLER_ARGS)
     }
 
     if (ucontext->uc_flags & _UC_FXSAVE) {
-	sv->sv_xmm.sv_env.en_sw |= trap;
+	sv->sv_xmm.fx_sw |= trap;
     } else {
-	sv->sv_87.sv_env.en_sw |= trap;
+	sv->sv_87.s87_sw |= trap;
     }
     interrupt_handle_now(signal, code, context);
 }
@@ -385,16 +387,16 @@ os_dlsym(const char *sym_name, lispobj lib_list)
 void
 restore_fpu(ucontext_t *scp)
 {
-    union savefpu *sv = (union savefpu *) &scp->uc_mcontext.__fpregs.__fp_reg_set;
-    struct env87 *env_87 = &sv->sv_87.sv_env;
-    struct envxmm *env_xmm = &sv->sv_xmm.sv_env;
+    union savefpu *sv = &scp->uc_mcontext.__fpregs.__fp_reg_set;
+    struct save87 *env_87 = (struct save87 *) &sv->sv_87;
+    struct fxsave *env_xmm = (struct fxsave *) &sv->sv_xmm;
     u_int16_t cw;
 
     if (scp->uc_flags & _UC_FPU) {
 	if (scp->uc_flags & _UC_FXSAVE) {
-	    cw = env_xmm->en_cw;
+	    cw = env_xmm->fx_cw;
 	} else {
-	    cw = env_87->en_cw & 0xffff;
+	    cw = env_87->s87_cw & 0xffff;
 	}
     } else {
 	return;
@@ -403,7 +405,7 @@ restore_fpu(ucontext_t *scp)
     __asm__ __volatile__ ("fldcw %0"::"m"(*&cw));
 
     if (fpu_mode == SSE2) {
-	u_int32_t mxcsr = env_xmm->en_mxcsr;
+	u_int32_t mxcsr = env_xmm->fx_mxcsr;
 
 	DPRINTF(0, (stderr, "restore_fpu:  mxcsr (raw) = %04x\n", mxcsr));
 	__asm__ __volatile__ ("ldmxcsr %0"::"m"(*&mxcsr));