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;
|
||||
#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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче