+2013-06-25 Nick Clifton <nickc@redhat.com>
+
+ * config/tc-msp430.c (msp430_srcoperand): Do not allow the use of
+ the PC in indirect addressing on 430xv2 parts.
+ (msp430_operands): Add version test to hardware bug encoding
+ restrictions.
+
2013-06-24 Roland McGrath <mcgrathr@google.com>
* config/tc-arm.c (parse_reg_list): Use skip_past_char for '}',
return 0;
}
-
const pseudo_typeS md_pseudo_table[] =
{
{"arch", msp430_set_arch, OPTION_MMCU},
op->am = m ? 3 : 2;
op->ol = 0;
+ /* PC cannot be used in indirect addressing. */
+ if (target_is_430xv2 () && op->reg == 0)
+ {
+ as_bad (_("cannot use indirect addressing with the PC"));
+ return 1;
+ }
return 0;
}
frag = frag_more (insn_length);
where = frag - frag_now->fr_literal;
- /* Issue 3831743. */
- if (op1.mode == OP_REG
+ if (target_is_430xv2 ()
+ && op1.mode == OP_REG
&& op1.reg == 0
&& (is_opcode ("rlax")
|| is_opcode ("rlcx")
return 0;
}
- /* Issue 3831713: CPU21 parts cannot use POPM to restore the SR register. */
- if (target_is_430x ()
+ /* CPU21 parts cannot use POPM to restore the SR register. */
+ if (target_is_430xv2 ()
&& (reg - n + 1 < 3)
&& reg >= 2
&& is_opcode ("popm"))
return 0;
}
- /* Issue 3831743. */
- if (reg == 0)
+ if (target_is_430xv2 () && reg == 0)
{
as_bad (_("%s: attempt to rotate the PC register"), opcode->name);
return 0;
return 0;
}
- /* Issue 3831743. */
- if (reg == 0)
+ if (target_is_430xv2 () && reg == 0)
{
as_bad (_("%s: attempt to rotate the PC register"), opcode->name);
return 0;
if (res)
break; /* Error in operand. */
- /* Issue 3831743. */
- if (op1.mode == OP_REG
+ if (target_is_430xv2 ()
+ && op1.mode == OP_REG
&& op1.reg == 0
&& (is_opcode ("rrax")
|| is_opcode ("rrcx")