* 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.
This commit is contained in:
Nick Clifton 2013-06-25 08:21:43 +00:00
parent 586cf74920
commit d1706f383d
2 changed files with 21 additions and 11 deletions

View file

@ -1,3 +1,10 @@
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 '}',

View file

@ -1215,7 +1215,6 @@ md_parse_option (int c, char * arg)
return 0;
}
const pseudo_typeS md_pseudo_table[] =
{
{"arch", msp430_set_arch, OPTION_MMCU},
@ -1649,6 +1648,12 @@ msp430_srcoperand (struct msp430_operand_s * op,
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;
}
@ -2300,8 +2305,8 @@ msp430_operands (struct msp430_opcode_s * opcode, char * line)
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")
@ -2580,8 +2585,8 @@ msp430_operands (struct msp430_opcode_s * opcode, char * line)
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"))
@ -2640,8 +2645,7 @@ msp430_operands (struct msp430_opcode_s * opcode, char * line)
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;
@ -2681,8 +2685,7 @@ msp430_operands (struct msp430_opcode_s * opcode, char * line)
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;
@ -3060,8 +3063,8 @@ msp430_operands (struct msp430_opcode_s * opcode, char * line)
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")