diff options
author | DJ Delorie <dj@redhat.com> | 2014-05-20 15:59:45 -0400 |
---|---|---|
committer | DJ Delorie <dj@gcc.gnu.org> | 2014-05-20 15:59:45 -0400 |
commit | 9c5f620306f1a53d0d0c5d75e77bd9c6af1e6cd1 (patch) | |
tree | b2f3e89e682f8cc940d1f11a2d0d0e9a84d8c600 /gcc | |
parent | cf288ed3b8b0cdfee1c03a7dfb2d371b5b7e3147 (diff) | |
download | gcc-9c5f620306f1a53d0d0c5d75e77bd9c6af1e6cd1.zip gcc-9c5f620306f1a53d0d0c5d75e77bd9c6af1e6cd1.tar.gz gcc-9c5f620306f1a53d0d0c5d75e77bd9c6af1e6cd1.tar.bz2 |
msp430.md (split): Don't allow subregs when splitting SImode adds.
* config/msp430/msp430.md (split): Don't allow subregs when
splitting SImode adds.
(andneghi): Fix subtraction logic.
* config/msp430/predicates.md (msp430_nonsubreg_or_imm_operand): New.
From-SVN: r210655
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/msp430/msp430.md | 8 | ||||
-rw-r--r-- | gcc/config/msp430/predicates.md | 4 |
3 files changed, 15 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e16d69e..9890266 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2014-05-20 DJ Delorie <dj@redhat.com> + + * config/msp430/msp430.md (split): Don't allow subregs when + splitting SImode adds. + (andneghi): Fix subtraction logic. + * config/msp430/predicates.md (msp430_nonsubreg_or_imm_operand): New. + 2014-05-20 Jan Hubicka <hubicka@ucw.cz> * tree.h (DECL_ONE_ONLY): Return true only for externally visible diff --git a/gcc/config/msp430/msp430.md b/gcc/config/msp430/msp430.md index ecdc493..d2cc0d6 100644 --- a/gcc/config/msp430/msp430.md +++ b/gcc/config/msp430/msp430.md @@ -371,8 +371,8 @@ ; halves. (define_split [(set (match_operand:SI 0 "msp430_nonsubreg_operand") - (plus:SI (match_operand:SI 1 "nonimmediate_operand") - (match_operand:SI 2 "general_operand"))) + (plus:SI (match_operand:SI 1 "msp430_nonsubreg_operand") + (match_operand:SI 2 "msp430_nonsubreg_or_imm_operand"))) ] "" [(parallel [(set (match_operand:HI 3 "nonimmediate_operand" "=&rm") @@ -1326,9 +1326,9 @@ "" "* if (REGNO (operands[0]) != REGNO (operands[1])) - return \"MOV.W\t%1, %0 { SUB.W\t#0, %0 { AND.W\t%2, %0\"; + return \"MOV.W\t%1, %0 { INV.W\t%0 { INC.W\t%0 { AND.W\t%2, %0\"; else - return \"SUB.W\t#0, %0 { AND.W\t%2, %0\"; + return \"INV.W\t%0 { INC.W\t%0 { AND.W\t%2, %0\"; " ) diff --git a/gcc/config/msp430/predicates.md b/gcc/config/msp430/predicates.md index 9a8e2da..94a628c 100644 --- a/gcc/config/msp430/predicates.md +++ b/gcc/config/msp430/predicates.md @@ -73,6 +73,10 @@ (define_predicate "msp430_nonsubreg_operand" (match_code "reg,mem")) +(define_predicate "msp430_nonsubreg_or_imm_operand" + (ior (match_operand 0 "msp430_nonsubreg_operand") + (match_operand 0 "immediate_operand"))) + ; TRUE for constants which are bit positions for zero_extract (define_predicate "msp430_bitpos" (and (match_code "const_int") |