diff options
Diffstat (limited to 'sys/i386')
-rw-r--r-- | sys/i386/i386/vm_machdep.c | 3 | ||||
-rw-r--r-- | sys/i386/include/npx.h | 3 | ||||
-rw-r--r-- | sys/i386/isa/npx.c | 35 |
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; |