aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-05-27 14:15:25 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1994-05-27 14:15:25 -0400
commitd0c84fdaa3b80b4ecb0c6f7afa44082b92fa457b (patch)
treeb66db21fe8945b5fb8c108ff15d9bfe289f65657 /gcc
parent7e4dc511b073113b428eaa0bd9d7cc4c2c589329 (diff)
downloadgcc-d0c84fdaa3b80b4ecb0c6f7afa44082b92fa457b.zip
gcc-d0c84fdaa3b80b4ecb0c6f7afa44082b92fa457b.tar.gz
gcc-d0c84fdaa3b80b4ecb0c6f7afa44082b92fa457b.tar.bz2
Add define_split for sign-extended PLUS of a MULT of an SImode
comparison. From-SVN: r7364
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/alpha/alpha.md21
1 files changed, 21 insertions, 0 deletions
diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md
index 41fbe68..4d1a051 100644
--- a/gcc/config/alpha/alpha.md
+++ b/gcc/config/alpha/alpha.md
@@ -238,6 +238,27 @@
s%2subl %r1,%n3,%0"
[(set_attr "type" "iaddlog")])
+(define_split
+ [(set (match_operand:DI 0 "register_operand" "")
+ (sign_extend:DI
+ (plus:SI (mult:SI (match_operator:SI 1 "comparison_operator"
+ [(match_operand 2 "" "")
+ (match_operand 3 "" "")])
+ (match_operand:SI 4 "const48_operand" ""))
+ (match_operand:SI 5 "add_operand" ""))))
+ (clobber (match_operand:DI 6 "register_operand" ""))]
+ ""
+ [(set (match_dup 6) (match_dup 7))
+ (set (match_dup 0)
+ (sign_extend:DI (plus:SI (mult:SI (match_dup 8) (match_dup 4))
+ (match_dup 5))))]
+ "
+{
+ operands[7] = gen_rtx (GET_CODE (operands[1]), DImode,
+ operands[2], operands[3]);
+ operands[8] = gen_lowpart (SImode, operands[6]);
+}")
+
(define_insn ""
[(set (match_operand:DI 0 "register_operand" "=r,r")
(plus:DI (mult:DI (match_operand:DI 1 "reg_or_0_operand" "rJ,rJ")