diff options
author | das <das@FreeBSD.org> | 2004-05-06 09:35:57 +0000 |
---|---|---|
committer | das <das@FreeBSD.org> | 2004-05-06 09:35:57 +0000 |
commit | c73ba67e32b4ebf0a32a8a16155706cff113e2dc (patch) | |
tree | 24a61588c22e7d1818a5dc9212c20d0f325b1eec /sys/alpha/alpha/fp_emulate.c | |
parent | 476aac9d4fc503b6e854e9ed7ec8ae1c34ce4bf9 (diff) | |
download | FreeBSD-src-c73ba67e32b4ebf0a32a8a16155706cff113e2dc.zip FreeBSD-src-c73ba67e32b4ebf0a32a8a16155706cff113e2dc.tar.gz |
Don't clear the exception flags after we finish emulating a
floating-point instruction in the kernel. The flags are
supposed to be cumulative.
Thanks to marcel for helping me test this.
Diffstat (limited to 'sys/alpha/alpha/fp_emulate.c')
-rw-r--r-- | sys/alpha/alpha/fp_emulate.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/alpha/alpha/fp_emulate.c b/sys/alpha/alpha/fp_emulate.c index e24ce88..243c172 100644 --- a/sys/alpha/alpha/fp_emulate.c +++ b/sys/alpha/alpha/fp_emulate.c @@ -296,7 +296,7 @@ static int fp_emulate(union alpha_instruction ins, struct thread *td) td->td_pcb->pcb_fp_control = control; /* Regenerate the control register */ - fpcr = fpregs->fpr_cr & FPCR_DYN_MASK; + fpcr = fpregs->fpr_cr & (FPCR_DYN_MASK | FPCR_STATUS_MASK); fpcr |= ((control & IEEE_STATUS_MASK) << IEEE_STATUS_TO_FPCR_SHIFT); if (!(control & IEEE_TRAP_ENABLE_INV)) |