diff options
author | Torbjorn Granlund <tege@gnu.org> | 1994-06-29 00:19:15 +0000 |
---|---|---|
committer | Torbjorn Granlund <tege@gnu.org> | 1994-06-29 00:19:15 +0000 |
commit | 74a6106962459a471c23ea2b9d7823f448918ae1 (patch) | |
tree | 5716fbb6e3130fd23fae79cc7b38a04fe96c0f51 | |
parent | 14edc0e4d37e59b80c686a856f45296448dd3667 (diff) | |
download | gcc-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.md | 22 |
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. |