diff options
Diffstat (limited to 'arch/mips/math-emu')
-rw-r--r-- | arch/mips/math-emu/cp1emu.c | 4 | ||||
-rw-r--r-- | arch/mips/math-emu/dsemul.c | 7 | ||||
-rw-r--r-- | arch/mips/math-emu/dsemul.h | 17 |
3 files changed, 3 insertions, 25 deletions
diff --git a/arch/mips/math-emu/cp1emu.c b/arch/mips/math-emu/cp1emu.c index 7ec0b217dfd3..890f77927d62 100644 --- a/arch/mips/math-emu/cp1emu.c +++ b/arch/mips/math-emu/cp1emu.c | |||
@@ -48,7 +48,6 @@ | |||
48 | #include <asm/branch.h> | 48 | #include <asm/branch.h> |
49 | 49 | ||
50 | #include "ieee754.h" | 50 | #include "ieee754.h" |
51 | #include "dsemul.h" | ||
52 | 51 | ||
53 | /* Strap kernel emulator for full MIPS IV emulation */ | 52 | /* Strap kernel emulator for full MIPS IV emulation */ |
54 | 53 | ||
@@ -346,9 +345,6 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx) | |||
346 | /* cop control register rd -> gpr[rt] */ | 345 | /* cop control register rd -> gpr[rt] */ |
347 | u32 value; | 346 | u32 value; |
348 | 347 | ||
349 | if (ir == CP1UNDEF) { | ||
350 | return do_dsemulret(xcp); | ||
351 | } | ||
352 | if (MIPSInst_RD(ir) == FPCREG_CSR) { | 348 | if (MIPSInst_RD(ir) == FPCREG_CSR) { |
353 | value = ctx->fcr31; | 349 | value = ctx->fcr31; |
354 | value = (value & ~0x3) | mips_rm[value & 0x3]; | 350 | value = (value & ~0x3) | mips_rm[value & 0x3]; |
diff --git a/arch/mips/math-emu/dsemul.c b/arch/mips/math-emu/dsemul.c index 653e325849e4..df7b9d928efc 100644 --- a/arch/mips/math-emu/dsemul.c +++ b/arch/mips/math-emu/dsemul.c | |||
@@ -18,7 +18,6 @@ | |||
18 | #include <asm/fpu_emulator.h> | 18 | #include <asm/fpu_emulator.h> |
19 | 19 | ||
20 | #include "ieee754.h" | 20 | #include "ieee754.h" |
21 | #include "dsemul.h" | ||
22 | 21 | ||
23 | /* Strap kernel emulator for full MIPS IV emulation */ | 22 | /* Strap kernel emulator for full MIPS IV emulation */ |
24 | 23 | ||
@@ -94,7 +93,7 @@ int mips_dsemul(struct pt_regs *regs, mips_instruction ir, unsigned long cpc) | |||
94 | return SIGBUS; | 93 | return SIGBUS; |
95 | 94 | ||
96 | err = __put_user(ir, &fr->emul); | 95 | err = __put_user(ir, &fr->emul); |
97 | err |= __put_user((mips_instruction)BADINST, &fr->badinst); | 96 | err |= __put_user((mips_instruction)BREAK_MATH, &fr->badinst); |
98 | err |= __put_user((mips_instruction)BD_COOKIE, &fr->cookie); | 97 | err |= __put_user((mips_instruction)BD_COOKIE, &fr->cookie); |
99 | err |= __put_user(cpc, &fr->epc); | 98 | err |= __put_user(cpc, &fr->epc); |
100 | 99 | ||
@@ -130,13 +129,13 @@ int do_dsemulret(struct pt_regs *xcp) | |||
130 | /* | 129 | /* |
131 | * Do some sanity checking on the stackframe: | 130 | * Do some sanity checking on the stackframe: |
132 | * | 131 | * |
133 | * - Is the instruction pointed to by the EPC an BADINST? | 132 | * - Is the instruction pointed to by the EPC an BREAK_MATH? |
134 | * - Is the following memory word the BD_COOKIE? | 133 | * - Is the following memory word the BD_COOKIE? |
135 | */ | 134 | */ |
136 | err = __get_user(insn, &fr->badinst); | 135 | err = __get_user(insn, &fr->badinst); |
137 | err |= __get_user(cookie, &fr->cookie); | 136 | err |= __get_user(cookie, &fr->cookie); |
138 | 137 | ||
139 | if (unlikely(err || (insn != BADINST) || (cookie != BD_COOKIE))) { | 138 | if (unlikely(err || (insn != BREAK_MATH) || (cookie != BD_COOKIE))) { |
140 | fpuemustats.errors++; | 139 | fpuemustats.errors++; |
141 | return 0; | 140 | return 0; |
142 | } | 141 | } |
diff --git a/arch/mips/math-emu/dsemul.h b/arch/mips/math-emu/dsemul.h deleted file mode 100644 index 091f0e76730f..000000000000 --- a/arch/mips/math-emu/dsemul.h +++ /dev/null | |||
@@ -1,17 +0,0 @@ | |||
1 | extern int mips_dsemul(struct pt_regs *regs, mips_instruction ir, unsigned long cpc); | ||
2 | extern int do_dsemulret(struct pt_regs *xcp); | ||
3 | |||
4 | /* Instruction which will always cause an address error */ | ||
5 | #define AdELOAD 0x8c000001 /* lw $0,1($0) */ | ||
6 | /* Instruction which will plainly cause a CP1 exception when FPU is disabled */ | ||
7 | #define CP1UNDEF 0x44400001 /* cfc1 $0,$0 undef */ | ||
8 | |||
9 | /* Instruction inserted following the badinst to further tag the sequence */ | ||
10 | #define BD_COOKIE 0x0000bd36 /* tne $0,$0 with baggage */ | ||
11 | |||
12 | /* Setup which instruction to use for trampoline */ | ||
13 | #ifdef STANDALONE_EMULATOR | ||
14 | #define BADINST CP1UNDEF | ||
15 | #else | ||
16 | #define BADINST AdELOAD | ||
17 | #endif | ||