aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTorbjorn Granlund <tege@gnu.org>1994-06-29 00:18:12 +0000
committerTorbjorn Granlund <tege@gnu.org>1994-06-29 00:18:12 +0000
commit8abf4d694f7b7f363ef384a5dbd86806c3d39a7d (patch)
tree10176bbcd92fc1a53a7381fd5d086addc392b9d2 /gcc
parent47c95f5005834213e5dcf4766440358d0fdca958 (diff)
downloadgcc-8abf4d694f7b7f363ef384a5dbd86806c3d39a7d.zip
gcc-8abf4d694f7b7f363ef384a5dbd86806c3d39a7d.tar.gz
gcc-8abf4d694f7b7f363ef384a5dbd86806c3d39a7d.tar.bz2
(smulsi3_highpart, umulsi3_highpart): New patterns.
From-SVN: r7590
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/a29k/a29k.md22
1 files changed, 22 insertions, 0 deletions
diff --git a/gcc/config/a29k/a29k.md b/gcc/config/a29k/a29k.md
index ca1decc5..a6dbad1 100644
--- a/gcc/config/a29k/a29k.md
+++ b/gcc/config/a29k/a29k.md
@@ -1193,6 +1193,28 @@
{ operands[3] = operand_subword (operands[0], 1, 1, DImode);
operands[4] = operand_subword (operands[1], 0, 1, DImode); } ")
+(define_insn "smulsi3_highpart"
+ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
+ (truncate:SI
+ (lshiftrt:DI
+ (mult:DI (sign_extend:DI (match_operand:SI 1 "gpc_reg_operand" "%r"))
+ (sign_extend:DI (match_operand:SI 2 "gpc_reg_operand" "r")))
+ (const_int 32))))
+ (clobber (match_scratch:SI 3 "=&q"))]
+ ""
+ "multm %0,%1,%2")
+
+(define_insn "umulsi3_highpart"
+ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
+ (truncate:SI
+ (lshiftrt:DI
+ (mult:DI (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" "%r"))
+ (zero_extend:DI (match_operand:SI 2 "gpc_reg_operand" "r")))
+ (const_int 32))))
+ (clobber (match_scratch:SI 3 "=&q"))]
+ ""
+ "multmu %0,%1,%2")
+
;; NAND
(define_insn ""
[(set (match_operand:SI 0 "gpc_reg_operand" "=r")