diff options
author | Jeffrey A Law <law@cygnus.com> | 1999-09-22 20:10:13 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1999-09-22 14:10:13 -0600 |
commit | 635d1437cbd05f98760849ae56a87e0e94e6b431 (patch) | |
tree | e05570a140c553e4f5ee8a9fbd18e0c6fe54f217 /gcc/config | |
parent | 06bcc17883649a0c62276adf683da24c71c64eed (diff) | |
download | gcc-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
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/pa/pa.md | 23 |
1 files changed, 21 insertions, 2 deletions
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. |