aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2014-05-20 15:59:45 -0400
committerDJ Delorie <dj@gcc.gnu.org>2014-05-20 15:59:45 -0400
commit9c5f620306f1a53d0d0c5d75e77bd9c6af1e6cd1 (patch)
treeb2f3e89e682f8cc940d1f11a2d0d0e9a84d8c600 /gcc
parentcf288ed3b8b0cdfee1c03a7dfb2d371b5b7e3147 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/config/msp430/msp430.md8
-rw-r--r--gcc/config/msp430/predicates.md4
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")