Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys Flatten the floating point register structures bu moving...
details: https://anonhg.NetBSD.org/src/rev/897ca85688ab
branches: trunk
changeset: 792865:897ca85688ab
user: dsl <dsl%NetBSD.org@localhost>
date: Sun Jan 19 14:30:37 2014 +0000
description:
Flatten the floating point register structures bu moving the
'environment' registers into the main strcuture.
There are x87 instructions that only affect the environment, but that
is no real excuse for all the sub-structures.
Rename fields so that there are far fewer collisions between the two
sets of field names.
diffstat:
sys/arch/i386/i386/freebsd_machdep.c | 8 +-
sys/arch/i386/i386/ibcs2_machdep.c | 8 +-
sys/arch/i386/i386/machdep.c | 12 +-
sys/arch/i386/i386/process_machdep.c | 92 +++++++++++++++--------------
sys/arch/i386/i386/svr4_machdep.c | 8 +-
sys/arch/i386/i386/trap.c | 6 +-
sys/arch/i386/include/npx.h | 86 +++++++++++++--------------
sys/arch/i386/isa/npx.c | 44 ++++++--------
sys/compat/linux/arch/i386/linux_machdep.c | 10 +-
9 files changed, 135 insertions(+), 139 deletions(-)
diffs (truncated from 614 to 300 lines):
diff -r 2c81bdebc4a4 -r 897ca85688ab sys/arch/i386/i386/freebsd_machdep.c
--- a/sys/arch/i386/i386/freebsd_machdep.c Sun Jan 19 13:40:59 2014 +0000
+++ b/sys/arch/i386/i386/freebsd_machdep.c Sun Jan 19 14:30:37 2014 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: freebsd_machdep.c,v 1.57 2014/01/19 13:35:58 dsl Exp $ */
+/* $NetBSD: freebsd_machdep.c,v 1.58 2014/01/19 14:30:37 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.57 2014/01/19 13:35:58 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: freebsd_machdep.c,v 1.58 2014/01/19 14:30:37 dsl Exp $");
#if defined(_KERNEL_OPT)
#include "opt_vm86.h"
@@ -64,9 +64,9 @@
setregs(l, epp, stack);
if (i386_use_fxsave)
- pcb->pcb_savefpu.sv_xmm.sv_env.fx_cw = __FreeBSD_NPXCW__;
+ pcb->pcb_savefpu.sv_xmm.fx_cw = __FreeBSD_NPXCW__;
else
- pcb->pcb_savefpu.sv_87.sv_env.en_cw = __FreeBSD_NPXCW__;
+ pcb->pcb_savefpu.sv_87.s87_cw = __FreeBSD_NPXCW__;
}
/*
diff -r 2c81bdebc4a4 -r 897ca85688ab sys/arch/i386/i386/ibcs2_machdep.c
--- a/sys/arch/i386/i386/ibcs2_machdep.c Sun Jan 19 13:40:59 2014 +0000
+++ b/sys/arch/i386/i386/ibcs2_machdep.c Sun Jan 19 14:30:37 2014 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ibcs2_machdep.c,v 1.41 2013/12/08 20:45:30 dsl Exp $ */
+/* $NetBSD: ibcs2_machdep.c,v 1.42 2014/01/19 14:30:37 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.41 2013/12/08 20:45:30 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ibcs2_machdep.c,v 1.42 2014/01/19 14:30:37 dsl Exp $");
#if defined(_KERNEL_OPT)
#include "opt_vm86.h"
@@ -69,9 +69,9 @@
setregs(l, epp, stack);
if (i386_use_fxsave)
- pcb->pcb_savefpu.sv_xmm.sv_env.fx_cw = __iBCS2_NPXCW__;
+ pcb->pcb_savefpu.sv_xmm.fx_cw = __iBCS2_NPXCW__;
else
- pcb->pcb_savefpu.sv_87.sv_env.en_cw = __iBCS2_NPXCW__;
+ pcb->pcb_savefpu.sv_87.s87_cw = __iBCS2_NPXCW__;
tf = l->l_md.md_regs;
tf->tf_eax = 0x2000000; /* XXX base of heap */
tf->tf_cs = GSEL(GUCODEBIG_SEL, SEL_UPL);
diff -r 2c81bdebc4a4 -r 897ca85688ab sys/arch/i386/i386/machdep.c
--- a/sys/arch/i386/i386/machdep.c Sun Jan 19 13:40:59 2014 +0000
+++ b/sys/arch/i386/i386/machdep.c Sun Jan 19 14:30:37 2014 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.741 2014/01/09 00:57:25 dholland Exp $ */
+/* $NetBSD: machdep.c,v 1.742 2014/01/19 14:30:37 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.741 2014/01/09 00:57:25 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.742 2014/01/19 14:30:37 dsl Exp $");
#include "opt_beep.h"
#include "opt_compat_ibcs2.h"
@@ -887,10 +887,10 @@
l->l_md.md_flags &= ~MDL_USEDFPU;
if (i386_use_fxsave) {
- pcb->pcb_savefpu.sv_xmm.sv_env.fx_cw = control;
- pcb->pcb_savefpu.sv_xmm.sv_env.fx_mxcsr = __INITIAL_MXCSR__;
+ pcb->pcb_savefpu.sv_xmm.fx_cw = control;
+ pcb->pcb_savefpu.sv_xmm.fx_mxcsr = __INITIAL_MXCSR__;
} else
- pcb->pcb_savefpu.sv_87.sv_env.en_cw = control;
+ pcb->pcb_savefpu.sv_87.s87_cw = control;
memcpy(&pcb->pcb_fsd, &gdt[GUDATA_SEL], sizeof(pcb->pcb_fsd));
memcpy(&pcb->pcb_gsd, &gdt[GUDATA_SEL], sizeof(pcb->pcb_gsd));
@@ -1761,7 +1761,7 @@
sizeof (pcb->pcb_savefpu.sv_xmm));
} else {
/* This is a weird corner case */
- process_xmm_to_s87((struct savexmm *)
+ process_xmm_to_s87((struct fxsave *)
&mcp->__fpregs.__fp_reg_set.__fp_xmm_state.__fp_xmm,
&pcb->pcb_savefpu.sv_87);
}
diff -r 2c81bdebc4a4 -r 897ca85688ab sys/arch/i386/i386/process_machdep.c
--- a/sys/arch/i386/i386/process_machdep.c Sun Jan 19 13:40:59 2014 +0000
+++ b/sys/arch/i386/i386/process_machdep.c Sun Jan 19 14:30:37 2014 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: process_machdep.c,v 1.76 2014/01/04 00:10:02 dsl Exp $ */
+/* $NetBSD: process_machdep.c,v 1.77 2014/01/19 14:30:37 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.76 2014/01/04 00:10:02 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.77 2014/01/19 14:30:37 dsl Exp $");
#include "opt_vm86.h"
#include "opt_ptrace.h"
@@ -127,69 +127,73 @@
}
void
-process_xmm_to_s87(const struct savexmm *sxmm, struct save87 *s87)
+process_xmm_to_s87(const struct fxsave *sxmm, struct save87 *s87)
{
int i;
+ /* Convert context sent by userspace */
+
/* FPU control/status */
- s87->sv_env.en_cw = sxmm->sv_env.fx_cw;
- s87->sv_env.en_sw = sxmm->sv_env.fx_sw;
+ s87->s87_cw = sxmm->fx_cw;
+ s87->s87_sw = sxmm->fx_sw;
/* tag word handled below */
- 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;
+ s87->s87_ip = sxmm->fx_ip;
+ s87->s87_opcode = sxmm->fx_opcode;
+ s87->s87_dp = sxmm->fx_dp;
/* Tag word and registers. */
- s87->sv_env.en_tw = 0;
- s87->sv_ex_tw = 0;
+ s87->s87_tw = 0;
+ s87->s87_ex_tw = 0;
for (i = 0; i < 8; i++) {
- s87->sv_env.en_tw |=
+ s87->s87_tw |=
(xmm_to_s87_tag(sxmm->sv_ac[i].fp_bytes, i,
- sxmm->sv_env.fx_tw) << (i * 2));
+ sxmm->fx_tw) << (i * 2));
- s87->sv_ex_tw |=
+ s87->s87_ex_tw |=
(xmm_to_s87_tag(sxmm->sv_ac[i].fp_bytes, i,
sxmm->sv_ex_tw) << (i * 2));
- memcpy(&s87->sv_ac[i].fp_bytes, &sxmm->sv_ac[i].fp_bytes,
- sizeof(s87->sv_ac[i].fp_bytes));
+ memcpy(&s87->s87_ac[i].fp_bytes, &sxmm->sv_ac[i].fp_bytes,
+ sizeof(s87->s87_ac[i].fp_bytes));
}
- s87->sv_ex_sw = sxmm->sv_ex_sw;
+ s87->s87_ex_sw = sxmm->sv_ex_sw;
}
void
-process_s87_to_xmm(const struct save87 *s87, struct savexmm *sxmm)
+process_s87_to_xmm(const struct save87 *s87, struct fxsave *sxmm)
{
int i;
+ /* Convert context sent by userspace */
+
/* FPU control/status */
- sxmm->sv_env.fx_cw = s87->sv_env.en_cw;
- sxmm->sv_env.fx_sw = s87->sv_env.en_sw;
+ sxmm->fx_cw = s87->s87_cw;
+ sxmm->fx_sw = s87->s87_sw;
/* tag word handled below */
- 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;
+ sxmm->fx_ip = s87->s87_ip;
+ sxmm->fx_opcode = s87->s87_opcode;
+ sxmm->fx_dp = s87->s87_dp;
/* Tag word and registers. */
for (i = 0; i < 8; i++) {
- if (((s87->sv_env.en_tw >> (i * 2)) & 3) == 3)
- sxmm->sv_env.fx_tw &= ~(1U << i);
+ if (((s87->s87_tw >> (i * 2)) & 3) == 3)
+ sxmm->fx_tw &= ~(1U << i);
else
- sxmm->sv_env.fx_tw |= (1U << i);
+ sxmm->fx_tw |= (1U << i);
#if 0
/*
* Software-only word not provided by the userland fpreg
* structure.
*/
- if (((s87->sv_ex_tw >> (i * 2)) & 3) == 3)
+ if (((s87->s87_ex_tw >> (i * 2)) & 3) == 3)
sxmm->sv_ex_tw &= ~(1U << i);
else
sxmm->sv_ex_tw |= (1U << i);
#endif
- memcpy(&sxmm->sv_ac[i].fp_bytes, &s87->sv_ac[i].fp_bytes,
+ memcpy(&sxmm->sv_ac[i].fp_bytes, &s87->s87_ac[i].fp_bytes,
sizeof(sxmm->sv_ac[i].fp_bytes));
}
#if 0
@@ -197,7 +201,7 @@
* Software-only word not provided by the userland fpreg
* structure.
*/
- sxmm->sv_ex_sw = s87->sv_ex_sw;
+ sxmm->sv_ex_sw = s87->s87_ex_sw;
#endif
}
@@ -253,22 +257,22 @@
* save it temporarily.
*/
if (i386_use_fxsave) {
- uint32_t mxcsr = frame->sv_xmm.sv_env.fx_mxcsr;
- uint16_t cw = frame->sv_xmm.sv_env.fx_cw;
+ uint32_t mxcsr = frame->sv_xmm.fx_mxcsr;
+ uint16_t cw = frame->sv_xmm.fx_cw;
/* XXX Don't zero XMM regs? */
memset(&frame->sv_xmm, 0, sizeof(frame->sv_xmm));
- 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;
+ frame->sv_xmm.fx_cw = cw;
+ frame->sv_xmm.fx_mxcsr = mxcsr;
+ frame->sv_xmm.fx_sw = 0x0000;
+ frame->sv_xmm.fx_tw = 0x00;
} else {
- uint16_t cw = frame->sv_87.sv_env.en_cw;
+ uint16_t cw = frame->sv_87.s87_cw;
memset(&frame->sv_87, 0, sizeof(frame->sv_87));
- frame->sv_87.sv_env.en_cw = cw;
- frame->sv_87.sv_env.en_sw = 0x0000;
- frame->sv_87.sv_env.en_tw = 0xffff;
+ frame->sv_87.s87_cw = cw;
+ frame->sv_87.s87_sw = 0x0000;
+ frame->sv_87.s87_tw = 0xffff;
}
l->l_md.md_flags |= MDL_USEDFPU;
}
@@ -410,15 +414,15 @@
* The initial control word was already set by setregs(),
* so save it temporarily.
*/
- uint32_t mxcsr = frame->sv_xmm.sv_env.fx_mxcsr;
- uint16_t cw = frame->sv_xmm.sv_env.fx_cw;
+ uint32_t mxcsr = frame->sv_xmm.fx_mxcsr;
+ uint16_t cw = frame->sv_xmm.fx_cw;
/* XXX Don't zero XMM regs? */
memset(&frame->sv_xmm, 0, sizeof(frame->sv_xmm));
- 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;
+ frame->sv_xmm.fx_cw = cw;
+ frame->sv_xmm.fx_mxcsr = mxcsr;
+ frame->sv_xmm.fx_sw = 0x0000;
+ frame->sv_xmm.fx_tw = 0x00;
l->l_md.md_flags |= MDL_USEDFPU;
}
diff -r 2c81bdebc4a4 -r 897ca85688ab sys/arch/i386/i386/svr4_machdep.c
--- a/sys/arch/i386/i386/svr4_machdep.c Sun Jan 19 13:40:59 2014 +0000
+++ b/sys/arch/i386/i386/svr4_machdep.c Sun Jan 19 14:30:37 2014 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: svr4_machdep.c,v 1.97 2013/12/08 20:45:30 dsl Exp $ */
+/* $NetBSD: svr4_machdep.c,v 1.98 2014/01/19 14:30:37 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.97 2013/12/08 20:45:30 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: svr4_machdep.c,v 1.98 2014/01/19 14:30:37 dsl Exp $");
#if defined(_KERNEL_OPT)
#include "opt_vm86.h"
Home |
Main Index |
Thread Index |
Old Index