aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1992-08-06 18:59:27 -0700
committerJim Wilson <wilson@gcc.gnu.org>1992-08-06 18:59:27 -0700
commit5584677eb43bc65eab09f7ea0057acb5f7bc4658 (patch)
tree0e5fe5bd8169373a9e4ac20f756be43457f73e55 /gcc
parenta291e551670918165b4df941d78661f483c287c4 (diff)
downloadgcc-5584677eb43bc65eab09f7ea0057acb5f7bc4658.zip
gcc-5584677eb43bc65eab09f7ea0057acb5f7bc4658.tar.gz
gcc-5584677eb43bc65eab09f7ea0057acb5f7bc4658.tar.bz2
Correct DEFINE_SPLITs added Jul 27.
Correct DEFINE_SPLITs added Jul 27. They would overwrite the input register if it was the same as the result reg. From-SVN: r1776
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/sparc/sparc.md36
1 files changed, 20 insertions, 16 deletions
diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md
index b7a739d..b64f949 100644
--- a/gcc/config/sparc/sparc.md
+++ b/gcc/config/sparc/sparc.md
@@ -1996,15 +1996,16 @@
(define_split
[(set (match_operand:SI 0 "register_operand" "")
(and:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "" "")))]
+ (match_operand:SI 2 "" "")))
+ (clobber (match_operand:SI 3 "register_operand" ""))]
"GET_CODE (operands[2]) == CONST_INT
&& !SMALL_INT (operands[2])
&& (INTVAL (operands[2]) & 0x3ff) == 0x3ff"
- [(set (match_dup 0) (match_dup 3))
- (set (match_dup 0) (and:SI (not:SI (match_dup 0)) (match_dup 1)))]
+ [(set (match_dup 3) (match_dup 4))
+ (set (match_dup 0) (and:SI (not:SI (match_dup 3)) (match_dup 1)))]
"
{
- operands[3] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2]));
+ operands[4] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2]));
}")
(define_insn ""
@@ -2070,15 +2071,16 @@
(define_split
[(set (match_operand:SI 0 "register_operand" "")
(ior:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "" "")))]
+ (match_operand:SI 2 "" "")))
+ (clobber (match_operand:SI 3 "register_operand" ""))]
"GET_CODE (operands[2]) == CONST_INT
&& !SMALL_INT (operands[2])
&& (INTVAL (operands[2]) & 0x3ff) == 0x3ff"
- [(set (match_dup 0) (match_dup 3))
- (set (match_dup 0) (ior:SI (not:SI (match_dup 0)) (match_dup 1)))]
+ [(set (match_dup 3) (match_dup 4))
+ (set (match_dup 0) (ior:SI (not:SI (match_dup 3)) (match_dup 1)))]
"
{
- operands[3] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2]));
+ operands[4] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2]));
}")
(define_insn ""
@@ -2144,29 +2146,31 @@
(define_split
[(set (match_operand:SI 0 "register_operand" "")
(xor:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "" "")))]
+ (match_operand:SI 2 "" "")))
+ (clobber (match_operand:SI 3 "register_operand" ""))]
"GET_CODE (operands[2]) == CONST_INT
&& !SMALL_INT (operands[2])
&& (INTVAL (operands[2]) & 0x3ff) == 0x3ff"
- [(set (match_dup 0) (match_dup 3))
- (set (match_dup 0) (not:SI (xor:SI (match_dup 0) (match_dup 1))))]
+ [(set (match_dup 3) (match_dup 4))
+ (set (match_dup 0) (not:SI (xor:SI (match_dup 3) (match_dup 1))))]
"
{
- operands[3] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2]));
+ operands[4] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2]));
}")
(define_split
[(set (match_operand:SI 0 "register_operand" "")
(not:SI (xor:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "" ""))))]
+ (match_operand:SI 2 "" ""))))
+ (clobber (match_operand:SI 3 "register_operand" ""))]
"GET_CODE (operands[2]) == CONST_INT
&& !SMALL_INT (operands[2])
&& (INTVAL (operands[2]) & 0x3ff) == 0x3ff"
- [(set (match_dup 0) (match_dup 3))
- (set (match_dup 0) (xor:SI (match_dup 0) (match_dup 1)))]
+ [(set (match_dup 3) (match_dup 4))
+ (set (match_dup 0) (xor:SI (match_dup 3) (match_dup 1)))]
"
{
- operands[3] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2]));
+ operands[4] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2]));
}")
;; xnor patterns. Note that (a ^ ~b) == (~a ^ b) == ~(a ^ b).