Disable FP instruction emulation by default on !o32 because of ABI concerns.

Note that in practice this isn't needed because we get a coprocessor unusable
exception first, but that's actually something like a bug.
This commit is contained in:
Juli Mallett 2012-03-29 02:04:15 +00:00
parent 39dec33f2b
commit 5143d82211
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=233638

View File

@ -290,6 +290,20 @@ static int allow_unaligned_acc = 1;
SYSCTL_INT(_vm, OID_AUTO, allow_unaligned_acc, CTLFLAG_RW,
&allow_unaligned_acc, 0, "Allow unaligned accesses");
/*
* FP emulation is assumed to work on O32, but the code is outdated and crufty
* enough that it's a more sensible default to have it disabled when using
* other ABIs. At the very least, it needs a lot of help in using
* type-semantic ABI-oblivious macros for everything it does.
*/
#if defined(__mips_o32)
static int emulate_fp = 1;
#else
static int emulate_fp = 0;
#endif
SYSCTL_INT(_machdep, OID_AUTO, emulate_fp, CTLFLAG_RW,
&allow_unaligned_acc, 0, "Emulate unimplemented FPU instructions");
static int emulate_unaligned_access(struct trapframe *frame, int mode);
extern void fswintrberr(void); /* XXX */
@ -988,6 +1002,11 @@ trap(struct trapframe *trapframe)
#endif
case T_FPE + T_USER:
if (!emulate_fp) {
i = SIGILL;
addr = trapframe->pc;
break;
}
MipsFPTrap(trapframe->sr, trapframe->cause, trapframe->pc);
goto out;