summaryrefslogtreecommitdiffstats
path: root/sys/i386
diff options
context:
space:
mode:
Diffstat (limited to 'sys/i386')
-rw-r--r--sys/i386/i386/vm_machdep.c3
-rw-r--r--sys/i386/include/npx.h3
-rw-r--r--sys/i386/isa/npx.c35
3 files changed, 1 insertions, 40 deletions
diff --git a/sys/i386/i386/vm_machdep.c b/sys/i386/i386/vm_machdep.c
index f9b954b..26ed735 100644
--- a/sys/i386/i386/vm_machdep.c
+++ b/sys/i386/i386/vm_machdep.c
@@ -393,8 +393,7 @@ cpu_set_upcall(struct thread *td, struct thread *td0)
* more analysis) (need a good safe default).
*/
bcopy(td0->td_pcb, pcb2, sizeof(*pcb2));
- pcb2->pcb_flags &= ~PCB_NPXTRAP;
- npx_fork_thread(td0, td);
+ pcb2->pcb_flags &= ~(PCB_NPXTRAP|PCB_NPXINITDONE);
/*
* Create a new fresh stack for the new thread.
diff --git a/sys/i386/include/npx.h b/sys/i386/include/npx.h
index 792f75a..86b9af8 100644
--- a/sys/i386/include/npx.h
+++ b/sys/i386/include/npx.h
@@ -138,8 +138,6 @@ union savefpu {
#ifdef _KERNEL
-struct thread;
-
#define IO_NPX 0x0F0 /* Numeric Coprocessor */
#define IO_NPXSIZE 16 /* 80387/80487 NPX registers */
@@ -157,7 +155,6 @@ void npxinit(u_short control);
void npxsave(union savefpu *addr);
void npxsetregs(struct thread *td, union savefpu *addr);
int npxtrap(void);
-void npx_fork_thread(struct thread *td, struct thread *newtd);
#endif
diff --git a/sys/i386/isa/npx.c b/sys/i386/isa/npx.c
index 129a853..bc39629 100644
--- a/sys/i386/isa/npx.c
+++ b/sys/i386/isa/npx.c
@@ -942,41 +942,6 @@ npxsetregs(td, addr)
curthread->td_pcb->pcb_flags |= PCB_NPXINITDONE;
}
-/*
- * POSIX requires new thread to inherit floating-point environment.
- */
-void
-npx_fork_thread(struct thread *td, struct thread *newtd)
-{
- union savefpu *state;
- u_int32_t mxcsr;
- u_int32_t cw;
-
- if (!(td->td_pcb->pcb_flags & PCB_NPXINITDONE)) {
- newtd->td_pcb->pcb_flags &= ~PCB_NPXINITDONE;
- return;
- }
-
- state = &newtd->td_pcb->pcb_save;
- /* get control word */
- if (npxgetregs(td, state))
- return;
- if (cpu_fxsr) {
- mxcsr = state->sv_xmm.sv_env.en_mxcsr;
- cw = state->sv_xmm.sv_env.en_cw;
- } else {
- cw = state->sv_87.sv_env.en_cw;
- mxcsr = 0;
- }
- bcopy(&npx_cleanstate, state, sizeof(*state));
- if (cpu_fxsr) {
- state->sv_xmm.sv_env.en_cw = cw;
- state->sv_xmm.sv_env.en_mxcsr = mxcsr;
- } else
- state->sv_87.sv_env.en_cw = cw;
- newtd->td_pcb->pcb_flags |= PCB_NPXINITDONE;
-}
-
static void
fpusave(addr)
union savefpu *addr;
OpenPOWER on IntegriCloud