]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
MIPS: math-emu: Use helpers to manipulate CAUSEF_BD flag.
authorRalf Baechle <ralf@linux-mips.org>
Tue, 15 Apr 2014 23:59:03 +0000 (01:59 +0200)
committerRalf Baechle <ralf@linux-mips.org>
Wed, 30 Apr 2014 23:32:08 +0000 (01:32 +0200)
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/math-emu/cp1emu.c
arch/mips/math-emu/dsemul.c

index d670e3973bf1fcad815c928cefbf649344188100..eabbbd9ff942da42355c7ab4f300e5640447f5a4 100644 (file)
@@ -933,17 +933,17 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
        int pc_inc;
 
        /* XXX NEC Vr54xx bug workaround */
-       if (xcp->cp0_cause & CAUSEF_BD) {
+       if (delay_slot(xcp)) {
                if (dec_insn.micro_mips_mode) {
                        if (!mm_isBranchInstr(xcp, dec_insn, &contpc))
-                               xcp->cp0_cause &= ~CAUSEF_BD;
+                               clear_delay_slot(xcp);
                } else {
                        if (!isBranchInstr(xcp, dec_insn, &contpc))
-                               xcp->cp0_cause &= ~CAUSEF_BD;
+                               clear_delay_slot(xcp);
                }
        }
 
-       if (xcp->cp0_cause & CAUSEF_BD) {
+       if (delay_slot(xcp)) {
                /*
                 * The instruction to be emulated is in a branch delay slot
                 * which means that we have to  emulate the branch instruction
@@ -1178,7 +1178,7 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                case bc_op:{
                        int likely = 0;
 
-                       if (xcp->cp0_cause & CAUSEF_BD)
+                       if (delay_slot(xcp))
                                return SIGILL;
 
 #if __mips >= 4
@@ -1201,7 +1201,7 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
                                return SIGILL;
                        }
 
-                       xcp->cp0_cause |= CAUSEF_BD;
+                       set_delay_slot(xcp);
                        if (cond) {
                                /* branch taken: emulate dslot
                                 * instruction
@@ -1321,7 +1321,7 @@ sigill:
 
        /* we did it !! */
        xcp->cp0_epc = contpc;
-       xcp->cp0_cause &= ~CAUSEF_BD;
+       clear_delay_slot(xcp);
 
        return 0;
 }
index 7ea622ab8dad32df6bf1fbd8d07bffdbf48c3f72..cd047fe6d9eff87f1b5f3962a6744b88687f6222 100644 (file)
@@ -59,7 +59,7 @@ int mips_dsemul(struct pt_regs *regs, mips_instruction ir, unsigned long cpc)
                (ir == 0)) {
                /* NOP is easy */
                regs->cp0_epc = cpc;
-               regs->cp0_cause &= ~CAUSEF_BD;
+               clear_delay_slot(regs);
                return 0;
        }
 #ifdef DSEMUL_TRACE