|
@@ -973,9 +973,10 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
|
|
|
struct mm_decoded_insn dec_insn, void *__user *fault_addr)
|
|
|
{
|
|
|
unsigned long contpc = xcp->cp0_epc + dec_insn.pc_inc;
|
|
|
- unsigned int cond, cbit;
|
|
|
+ unsigned int cond, cbit, bit0;
|
|
|
mips_instruction ir;
|
|
|
int likely, pc_inc;
|
|
|
+ union fpureg *fpr;
|
|
|
u32 __user *wva;
|
|
|
u64 __user *dva;
|
|
|
u32 wval;
|
|
@@ -1187,14 +1188,14 @@ emul:
|
|
|
return SIGILL;
|
|
|
|
|
|
cond = likely = 0;
|
|
|
+ fpr = ¤t->thread.fpu.fpr[MIPSInst_RT(ir)];
|
|
|
+ bit0 = get_fpr32(fpr, 0) & 0x1;
|
|
|
switch (MIPSInst_RS(ir)) {
|
|
|
case bc1eqz_op:
|
|
|
- if (get_fpr32(¤t->thread.fpu.fpr[MIPSInst_RT(ir)], 0) & 0x1)
|
|
|
- cond = 1;
|
|
|
+ cond = bit0 == 0;
|
|
|
break;
|
|
|
case bc1nez_op:
|
|
|
- if (!(get_fpr32(¤t->thread.fpu.fpr[MIPSInst_RT(ir)], 0) & 0x1))
|
|
|
- cond = 1;
|
|
|
+ cond = bit0 != 0;
|
|
|
break;
|
|
|
}
|
|
|
goto branch_common;
|