aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorbjorn Granlund <tege@gnu.org>1994-06-29 00:19:15 +0000
committerTorbjorn Granlund <tege@gnu.org>1994-06-29 00:19:15 +0000
commit74a6106962459a471c23ea2b9d7823f448918ae1 (patch)
tree5716fbb6e3130fd23fae79cc7b38a04fe96c0f51
parent14edc0e4d37e59b80c686a856f45296448dd3667 (diff)
downloadgcc-74a6106962459a471c23ea2b9d7823f448918ae1.zip
gcc-74a6106962459a471c23ea2b9d7823f448918ae1.tar.gz
gcc-74a6106962459a471c23ea2b9d7823f448918ae1.tar.bz2
(umuldi3_highpart): New expander and matcher.
From-SVN: r7592
-rw-r--r--gcc/config/alpha/alpha.md22
1 files changed, 22 insertions, 0 deletions
diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md
index 8b19099..8497011 100644
--- a/gcc/config/alpha/alpha.md
+++ b/gcc/config/alpha/alpha.md
@@ -417,6 +417,28 @@
""
"mulq %r1,%r2,%0"
[(set_attr "type" "imulq")])
+
+(define_insn "umuldi3_highpart"
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (truncate:DI
+ (lshiftrt:TI
+ (mult:TI (zero_extend:TI (match_operand:DI 1 "register_operand" "r"))
+ (zero_extend:TI (match_operand:DI 2 "register_operand" "r")))
+ (const_int 64))))]
+ ""
+ "umulh %1,%2,%0"
+ [(set_attr "type" "imulq")])
+
+(define_insn ""
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (truncate:DI
+ (lshiftrt:TI
+ (mult:TI (zero_extend:TI (match_operand:DI 1 "register_operand" "r"))
+ (match_operand:TI 2 "cint8_operand" "I"))
+ (const_int 64))))]
+ ""
+ "umulh %1,%2,%0"
+ [(set_attr "type" "imulq")])
;; The divide and remainder operations always take their inputs from
;; r24 and r25, put their output in r27, and clobber r23 and r28.