Commit ee1cca1b authored by Ralf Baechle's avatar Ralf Baechle

[MIPS] Fix branch emulation for floating-point exceptions.

    
In the branch emulation for floating-point exceptions, __compute_return_epc
must determine for bc1f et al which condition code bit to test. This is
based on bits <4:2> of the rt field. The switch statement to distinguish
bc1f et al needs to use only the two low bits of rt, but the old code tests
on the whole rt field.  This patch masks off the proper bits.
Signed-off-by: default avatarWin Treese <treese@acm.org>
Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 79e55bcf
...@@ -184,7 +184,7 @@ int __compute_return_epc(struct pt_regs *regs) ...@@ -184,7 +184,7 @@ int __compute_return_epc(struct pt_regs *regs)
bit = (insn.i_format.rt >> 2); bit = (insn.i_format.rt >> 2);
bit += (bit != 0); bit += (bit != 0);
bit += 23; bit += 23;
switch (insn.i_format.rt) { switch (insn.i_format.rt & 3) {
case 0: /* bc1f */ case 0: /* bc1f */
case 2: /* bc1fl */ case 2: /* bc1fl */
if (~fcr31 & (1 << bit)) if (~fcr31 & (1 << bit))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment