Commit 80df65c9 by Richard Henderson Committed by Richard Henderson

alpha.c (add_operand): Simplify the CONST_INT match.

        * alpha.c (add_operand): Simplify the CONST_INT match.
        (sext_add_operand): Correct typo in comparison by using
        CONST_OK_FOR_LETTER_P.
        * alpha.md (s?addq): Use sext_add_operand to allow the negative
        constant alternatives to be generated.
        (mulsi3, muldi3, umuldi3_highpart): Loosen constraints to allow
        small constants, since the hw instructions do.

From-SVN: r23551
parent d30e8ef0
Fri Nov 6 19:37:33 1998 Richard Henderson <rth@cygnus.com>
* alpha.c (add_operand): Simplify the CONST_INT match.
(sext_add_operand): Correct typo in comparison by using
CONST_OK_FOR_LETTER_P.
* alpha.md (s?addq): Use sext_add_operand to allow the negative
constant alternatives to be generated.
(mulsi3, muldi3, umuldi3_highpart): Loosen constraints to allow
small constants, since the hw instructions do.
Fri Nov 6 20:15:19 1998 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de> Fri Nov 6 20:15:19 1998 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* reload1.c (emit_reload_insns): When rewriting the SET_DEST of a * reload1.c (emit_reload_insns): When rewriting the SET_DEST of a
......
...@@ -386,9 +386,9 @@ add_operand (op, mode) ...@@ -386,9 +386,9 @@ add_operand (op, mode)
enum machine_mode mode; enum machine_mode mode;
{ {
if (GET_CODE (op) == CONST_INT) if (GET_CODE (op) == CONST_INT)
/* Constraints I, J, O and P are covered by K. */
return (CONST_OK_FOR_LETTER_P (INTVAL (op), 'K') return (CONST_OK_FOR_LETTER_P (INTVAL (op), 'K')
|| CONST_OK_FOR_LETTER_P (INTVAL (op), 'L') || CONST_OK_FOR_LETTER_P (INTVAL (op), 'L'));
|| CONST_OK_FOR_LETTER_P (INTVAL (op), 'O'));
else if (GET_CODE (op) == CONSTANT_P_RTX) else if (GET_CODE (op) == CONSTANT_P_RTX)
return 1; return 1;
...@@ -404,8 +404,8 @@ sext_add_operand (op, mode) ...@@ -404,8 +404,8 @@ sext_add_operand (op, mode)
enum machine_mode mode; enum machine_mode mode;
{ {
if (GET_CODE (op) == CONST_INT) if (GET_CODE (op) == CONST_INT)
return ((unsigned HOST_WIDE_INT) INTVAL (op) < 255 return (CONST_OK_FOR_LETTER_P (INTVAL (op), 'I')
|| (unsigned HOST_WIDE_INT) (- INTVAL (op)) < 255); || CONST_OK_FOR_LETTER_P (INTVAL (op), 'O'));
else if (GET_CODE (op) == CONSTANT_P_RTX) else if (GET_CODE (op) == CONSTANT_P_RTX)
return 1; return 1;
......
...@@ -598,7 +598,7 @@ ...@@ -598,7 +598,7 @@
[(set (match_operand:DI 0 "register_operand" "=r,r") [(set (match_operand:DI 0 "register_operand" "=r,r")
(plus:DI (mult:DI (match_operand:DI 1 "reg_or_0_operand" "rJ,rJ") (plus:DI (mult:DI (match_operand:DI 1 "reg_or_0_operand" "rJ,rJ")
(match_operand:DI 2 "const48_operand" "I,I")) (match_operand:DI 2 "const48_operand" "I,I"))
(match_operand:DI 3 "reg_or_8bit_operand" "rI,O")))] (match_operand:DI 3 "sext_add_operand" "rI,O")))]
"" ""
"@ "@
s%2addq %r1,%3,%0 s%2addq %r1,%3,%0
...@@ -784,38 +784,41 @@ ...@@ -784,38 +784,41 @@
(define_insn "mulsi3" (define_insn "mulsi3"
[(set (match_operand:SI 0 "register_operand" "=r") [(set (match_operand:SI 0 "register_operand" "=r")
(mult:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ") (mult:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ")
(match_operand:SI 2 "reg_or_0_operand" "rJ")))] (match_operand:SI 2 "reg_or_8bit_operand" "rI")))]
"" ""
"mull %r1,%r2,%0" "mull %r1,%2,%0"
[(set_attr "type" "imul") [(set_attr "type" "imul")
(set_attr "opsize" "si")]) (set_attr "opsize" "si")])
(define_insn "" (define_insn ""
[(set (match_operand:DI 0 "register_operand" "=r") [(set (match_operand:DI 0 "register_operand" "=r")
(sign_extend:DI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ") (sign_extend:DI
(match_operand:SI 2 "reg_or_0_operand" "rJ"))))] (mult:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ")
(match_operand:SI 2 "reg_or_8bit_operand" "rI"))))]
"" ""
"mull %r1,%r2,%0" "mull %r1,%2,%0"
[(set_attr "type" "imul") [(set_attr "type" "imul")
(set_attr "opsize" "si")]) (set_attr "opsize" "si")])
(define_insn "muldi3" (define_insn "muldi3"
[(set (match_operand:DI 0 "register_operand" "=r") [(set (match_operand:DI 0 "register_operand" "=r")
(mult:DI (match_operand:DI 1 "reg_or_0_operand" "%rJ") (mult:DI (match_operand:DI 1 "reg_or_0_operand" "%rJ")
(match_operand:DI 2 "reg_or_0_operand" "rJ")))] (match_operand:DI 2 "reg_or_8bit_operand" "rI")))]
"" ""
"mulq %r1,%r2,%0" "mulq %r1,%2,%0"
[(set_attr "type" "imul")]) [(set_attr "type" "imul")])
(define_insn "umuldi3_highpart" (define_insn "umuldi3_highpart"
[(set (match_operand:DI 0 "register_operand" "=r") [(set (match_operand:DI 0 "register_operand" "=r")
(truncate:DI (truncate:DI
(lshiftrt:TI (lshiftrt:TI
(mult:TI (zero_extend:TI (match_operand:DI 1 "register_operand" "r")) (mult:TI (zero_extend:TI
(zero_extend:TI (match_operand:DI 2 "register_operand" "r"))) (match_operand:DI 1 "reg_or_0_operand" "%rJ"))
(zero_extend:TI
(match_operand:DI 2 "reg_or_8bit_operand" "rI")))
(const_int 64))))] (const_int 64))))]
"" ""
"umulh %1,%2,%0" "umulh %r1,%2,%0"
[(set_attr "type" "imul") [(set_attr "type" "imul")
(set_attr "opsize" "udi")]) (set_attr "opsize" "udi")])
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment