{
NO_REGS,
AREG, DREG, CREG, BREG,
+ AD_REGS, /* %eax/%edx for DImode */
Q_REGS, /* %eax %ebx %ecx %edx */
SIREG, DIREG,
INDEX_REGS, /* %eax %ebx %ecx %edx %esi %edi %ebp */
#define REG_CLASS_NAMES \
{ "NO_REGS", \
"AREG", "DREG", "CREG", "BREG", \
+ "AD_REGS", \
"Q_REGS", \
"SIREG", "DIREG", \
"INDEX_REGS", \
#define REG_CLASS_CONTENTS \
{ 0, \
0x1, 0x2, 0x4, 0x8, /* AREG, DREG, CREG, BREG */ \
+ 0x3, /* AD_REGS */ \
0xf, /* Q_REGS */ \
0x10, 0x20, /* SIREG, DIREG */ \
0x1007f, /* INDEX_REGS */ \
(C) == 'b' ? BREG : \
(C) == 'c' ? CREG : \
(C) == 'd' ? DREG : \
+ (C) == 'A' ? AD_REGS : \
(C) == 'D' ? DIREG : \
(C) == 'S' ? SIREG : NO_REGS)
return AS3 (imul%L0,%2,%1,%0);
}")
-(define_insn ""
+(define_insn "umulqihi3"
[(set (match_operand:HI 0 "general_operand" "=a")
- (mult:HI (zero_extend:HI
- (match_operand:QI 1 "nonimmediate_operand" "%0"))
- (zero_extend:HI
- (match_operand:QI 2 "nonimmediate_operand" "qm"))))]
+ (mult:HI (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "%0"))
+ (zero_extend:HI (match_operand:QI 2 "nonimmediate_operand" "qm"))))]
""
"mul%B0 %2")
+(define_insn "mulqihi3"
+ [(set (match_operand:HI 0 "general_operand" "=a")
+ (mult:HI (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "%0"))
+ (sign_extend:HI (match_operand:QI 2 "nonimmediate_operand" "qm"))))]
+ ""
+ "imul%B0 %2")
+
+(define_insn "umulsidi3"
+ [(set (match_operand:DI 0 "register_operand" "=A")
+ (mult:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "%0"))
+ (zero_extend:DI (match_operand:SI 2 "nonimmediate_operand" "rm"))))]
+ ""
+ "mul%L0 %2")
+
+(define_insn "mulsidi3"
+ [(set (match_operand:DI 0 "register_operand" "=A")
+ (mult:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "%0"))
+ (sign_extend:DI (match_operand:SI 2 "nonimmediate_operand" "rm"))))]
+ ""
+ "imul%L0 %2")
+
;; The patterns that match these are at the end of this file.
(define_expand "mulxf3"