MIPS: Compute branch returns for Cavium OCTEON specific branch instructions.
For Cavium OCTEON, compute the return epc value for OCTEON specific branch instructions. Signed-off-by: Tomaso Paoletti <tpaoletti@caviumnetworks.com> Signed-off-by: David Daney <ddaney@caviumnetworks.com> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
Родитель
2a219b0eaa
Коммит
126336f065
|
@ -205,6 +205,39 @@ int __compute_return_epc(struct pt_regs *regs)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
#ifdef CONFIG_CPU_CAVIUM_OCTEON
|
||||||
|
case lwc2_op: /* This is bbit0 on Octeon */
|
||||||
|
if ((regs->regs[insn.i_format.rs] & (1ull<<insn.i_format.rt))
|
||||||
|
== 0)
|
||||||
|
epc = epc + 4 + (insn.i_format.simmediate << 2);
|
||||||
|
else
|
||||||
|
epc += 8;
|
||||||
|
regs->cp0_epc = epc;
|
||||||
|
break;
|
||||||
|
case ldc2_op: /* This is bbit032 on Octeon */
|
||||||
|
if ((regs->regs[insn.i_format.rs] &
|
||||||
|
(1ull<<(insn.i_format.rt+32))) == 0)
|
||||||
|
epc = epc + 4 + (insn.i_format.simmediate << 2);
|
||||||
|
else
|
||||||
|
epc += 8;
|
||||||
|
regs->cp0_epc = epc;
|
||||||
|
break;
|
||||||
|
case swc2_op: /* This is bbit1 on Octeon */
|
||||||
|
if (regs->regs[insn.i_format.rs] & (1ull<<insn.i_format.rt))
|
||||||
|
epc = epc + 4 + (insn.i_format.simmediate << 2);
|
||||||
|
else
|
||||||
|
epc += 8;
|
||||||
|
regs->cp0_epc = epc;
|
||||||
|
break;
|
||||||
|
case sdc2_op: /* This is bbit132 on Octeon */
|
||||||
|
if (regs->regs[insn.i_format.rs] &
|
||||||
|
(1ull<<(insn.i_format.rt+32)))
|
||||||
|
epc = epc + 4 + (insn.i_format.simmediate << 2);
|
||||||
|
else
|
||||||
|
epc += 8;
|
||||||
|
regs->cp0_epc = epc;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче