diff options
author | Nick Clifton <nickc@redhat.com> | 2013-06-25 08:21:43 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2013-06-25 08:21:43 +0000 |
commit | d1706f383db8e648486e0bda24e182d7233d6674 (patch) | |
tree | 7c6987e0ef19da6a80b2467455b2e7f5c779666a /gas/config | |
parent | 586cf74920aadc3bb0c4fb1de26135b3fcdead9c (diff) | |
download | ppe42-binutils-d1706f383db8e648486e0bda24e182d7233d6674.tar.gz ppe42-binutils-d1706f383db8e648486e0bda24e182d7233d6674.zip |
* 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.
Diffstat (limited to 'gas/config')
-rw-r--r-- | gas/config/tc-msp430.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/gas/config/tc-msp430.c b/gas/config/tc-msp430.c index f319b23656..e16fcd9527 100644 --- a/gas/config/tc-msp430.c +++ b/gas/config/tc-msp430.c @@ -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") |