+2003-05-09 Kevin Buettner <kevinb@redhat.com>
+
+ * linux-target.c (mips_singlestep): Don't any consider cop0 or cop1x
+ instructions to be conditional branches. Expand set of cop1
+ opcodes considered to be conditional branches.
+
2003-05-08 Kevin Buettner <kevinb@redhat.com>
* linux-target.c (mips_singlestep): Don't interpret all coprocessor
targ |= (insn.j_format.target << 2);
break;
- /* Some cop instructions are conditional... */
- case cop0_op:
+ /* Some cop1 instructions are conditional branches. */
case cop1_op:
+ if (insn.i_format.rs == bc_op
+ || insn.i_format.rs == bc_op + 1 /* e.g, BC1ANY2 on MIPS-3D */
+ || insn.i_format.rs == bc_op + 2 /* e.g, BC1ANY4 on MIPS-3D */)
+ {
+ is_branch = is_cond = 1;
+ targ += 4 + (insn.i_format.simmediate << 2);
+ }
+ break;
+
+ /* Some cop2 instructions are conditional branches. */
case cop2_op:
- if (insn.i_format.rs != bc_op)
- break;
- else
- ; /* fall through... */
+ /* MIPS32 Architecture For Programmers Volume II, rev 1.90 documents
+ bc2f, bc2fl, bc2t, and bc2tl. */
+ if (insn.i_format.rs == bc_op)
+ {
+ is_branch = is_cond = 1;
+ targ += 4 + (insn.i_format.simmediate << 2);
+ }
+ break;
- /*
- * These are conditional.
- */
+ /* Other conditional branches... */
case beq_op:
case beql_op:
case bne_op:
case blezl_op:
case bgtz_op:
case bgtzl_op:
- case cop1x_op:
is_branch = is_cond = 1;
targ += 4 + (insn.i_format.simmediate << 2);
break;