aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>1999-09-22 20:10:13 +0000
committerJeff Law <law@gcc.gnu.org>1999-09-22 14:10:13 -0600
commit635d1437cbd05f98760849ae56a87e0e94e6b431 (patch)
treee05570a140c553e4f5ee8a9fbd18e0c6fe54f217
parent06bcc17883649a0c62276adf683da24c71c64eed (diff)
downloadgcc-635d1437cbd05f98760849ae56a87e0e94e6b431.zip
gcc-635d1437cbd05f98760849ae56a87e0e94e6b431.tar.gz
gcc-635d1437cbd05f98760849ae56a87e0e94e6b431.tar.bz2
pa.md (subsi3): Turn into an expander.
* pa.md (subsi3): Turn into an expander. Create two anonymous patterns. One for PA2.0 one for PA1.x. Use mtsarcm for PA2.0. From-SVN: r29596
-rw-r--r--gcc/ChangeLog3
-rw-r--r--gcc/config/pa/pa.md23
2 files changed, 24 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 71ae5ed..46d9677 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -37,6 +37,9 @@ Wed Sep 22 06:25:15 1999 Jim Kingdon <http://developer.redhat.com>
Wed Sep 22 06:06:57 1999 Jeffrey A Law (law@cygnus.com)
+ * pa.md (subsi3): Turn into an expander. Create two anonymous
+ patterns. One for PA2.0 one for PA1.x. Use mtsarcm for PA2.0.
+
* pa.md (floatunssisf2, floatunssidf2): Generate different RTL
for TARGET_PA_20.
(floatunssidf2_pa20, floatunssisf2_pa20): New patterns for PA2.0
diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md
index c6acda9..545d13a 100644
--- a/gcc/config/pa/pa.md
+++ b/gcc/config/pa/pa.md
@@ -3153,17 +3153,36 @@
[(set_attr "type" "binary")
(set_attr "length" "8")])
-(define_insn "subsi3"
+(define_expand "subsi3"
+ [(set (match_operand:SI 0 "register_operand" "")
+ (minus:SI (match_operand:SI 1 "arith11_operand" "")
+ (match_operand:SI 2 "register_operand" "")))]
+ ""
+ "")
+
+(define_insn ""
[(set (match_operand:SI 0 "register_operand" "=r,r")
(minus:SI (match_operand:SI 1 "arith11_operand" "r,I")
(match_operand:SI 2 "register_operand" "r,r")))]
- ""
+ "!TARGET_PA_20"
"@
sub %1,%2,%0
subi %1,%2,%0"
[(set_attr "type" "binary,binary")
(set_attr "length" "4,4")])
+(define_insn ""
+ [(set (match_operand:SI 0 "register_operand" "=r,r,q")
+ (minus:SI (match_operand:SI 1 "arith11_operand" "r,I,S")
+ (match_operand:SI 2 "register_operand" "r,r,r")))]
+ "TARGET_PA_20"
+ "@
+ sub %1,%2,%0
+ subi %1,%2,%0
+ mtsarcm %2"
+ [(set_attr "type" "binary,binary,move")
+ (set_attr "length" "4,4,4")])
+
;; Clobbering a "register_operand" instead of a match_scratch
;; in operand3 of millicode calls avoids spilling %r1 and
;; produces better code.