summaryrefslogtreecommitdiff
path: root/gcc/config/ia64/ia64.md
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2000-08-11 23:48:26 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2000-08-11 23:48:26 +0000
commiteab36ec230939786a9d5455a1162ab17bf8832f9 (patch)
treeab2c8b37c5e8243770ff8b3ece719c581835f056 /gcc/config/ia64/ia64.md
parentde4f4740afb80c2160256931e34094ed0b80a05a (diff)
downloadgcc-eab36ec230939786a9d5455a1162ab17bf8832f9.tar.gz
* config/ia64/ia64.md (addsi3): Remove expander.
(subsi3, mulsi3, negsi2, one_cmplsi2): Likewise. (*addsi3_shladd): New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@35649 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/ia64/ia64.md')
-rw-r--r--gcc/config/ia64/ia64.md138
1 files changed, 14 insertions, 124 deletions
diff --git a/gcc/config/ia64/ia64.md b/gcc/config/ia64/ia64.md
index 1b72bfdc7fb..6a30393494e 100644
--- a/gcc/config/ia64/ia64.md
+++ b/gcc/config/ia64/ia64.md
@@ -1087,33 +1087,7 @@
;; ::
;; ::::::::::::::::::::
-;; We handle 32-bit arithmetic just like the alpha port does.
-
-(define_expand "addsi3"
- [(set (match_operand:SI 0 "register_operand" "")
- (plus:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "reg_or_22bit_operand" "")))]
- ""
- "
-{
- if (optimize)
- {
- rtx op1 = gen_lowpart (DImode, operands[1]);
- rtx op2 = gen_lowpart (DImode, operands[2]);
-
- if (! cse_not_expected)
- {
- rtx tmp = gen_reg_rtx (DImode);
- emit_insn (gen_adddi3 (tmp, op1, op2));
- emit_move_insn (operands[0], gen_lowpart (SImode, tmp));
- }
- else
- emit_insn (gen_adddi3 (gen_lowpart (DImode, operands[0]), op1, op2));
- DONE;
- }
-}")
-
-(define_insn "*addsi3_internal"
+(define_insn "addsi3"
[(set (match_operand:SI 0 "register_operand" "=r,r,r")
(plus:SI (match_operand:SI 1 "register_operand" "%r,r,a")
(match_operand:SI 2 "reg_or_22bit_operand" "r,I,J")))]
@@ -1142,31 +1116,16 @@
"add %0 = %1, %1, 1"
[(set_attr "type" "A")])
-(define_expand "subsi3"
- [(set (match_operand:SI 0 "register_operand" "")
- (minus:SI (match_operand:SI 1 "reg_or_8bit_operand" "")
- (match_operand:SI 2 "register_operand" "")))]
+(define_insn "*addsi3_shladd"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (plus:SI (mult:SI (match_operand:SI 1 "register_operand" "r")
+ (match_operand:SI 2 "shladd_operand" "n"))
+ (match_operand:SI 3 "register_operand" "r")))]
""
- "
-{
- if (optimize)
- {
- rtx op1 = gen_lowpart (DImode, operands[1]);
- rtx op2 = gen_lowpart (DImode, operands[2]);
-
- if (! cse_not_expected)
- {
- rtx tmp = gen_reg_rtx (DImode);
- emit_insn (gen_subdi3 (tmp, op1, op2));
- emit_move_insn (operands[0], gen_lowpart (SImode, tmp));
- }
- else
- emit_insn (gen_subdi3 (gen_lowpart (DImode, operands[0]), op1, op2));
- DONE;
- }
-}")
+ "shladd %0 = %1, %S2, %3"
+ [(set_attr "type" "A")])
-(define_insn "*subsi3_internal"
+(define_insn "subsi3"
[(set (match_operand:SI 0 "register_operand" "=r")
(minus:SI (match_operand:SI 1 "reg_or_8bit_operand" "rK")
(match_operand:SI 2 "register_operand" "r")))]
@@ -1182,33 +1141,9 @@
"sub %0 = %2, %1, 1"
[(set_attr "type" "A")])
-(define_expand "mulsi3"
- [(set (match_operand:SI 0 "register_operand" "")
- (mult:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "register_operand" "")))]
- ""
- "
-{
- if (optimize)
- {
- rtx op1 = gen_lowpart (DImode, operands[1]);
- rtx op2 = gen_lowpart (DImode, operands[2]);
-
- if (! cse_not_expected)
- {
- rtx tmp = gen_reg_rtx (DImode);
- emit_insn (gen_muldi3 (tmp, op1, op2));
- emit_move_insn (operands[0], gen_lowpart (SImode, tmp));
- }
- else
- emit_insn (gen_muldi3 (gen_lowpart (DImode, operands[0]), op1, op2));
- DONE;
- }
-}")
-
;; ??? Could add maddsi3 patterns patterned after the madddi3 patterns.
-(define_insn "*mulsi3_internal"
+(define_insn "mulsi3"
[(set (match_operand:SI 0 "register_operand" "=f")
(mult:SI (match_operand:SI 1 "register_operand" "f")
(match_operand:SI 2 "nonmemory_operand" "f")))]
@@ -1216,29 +1151,7 @@
"xma.l %0 = %1, %2, f0%B0"
[(set_attr "type" "F")])
-(define_expand "negsi2"
- [(set (match_operand:SI 0 "register_operand" "")
- (neg:SI (match_operand:SI 1 "register_operand" "")))]
- ""
- "
-{
- if (optimize)
- {
- rtx op1 = gen_lowpart (DImode, operands[1]);
-
- if (! cse_not_expected)
- {
- rtx tmp = gen_reg_rtx (DImode);
- emit_insn (gen_negdi2 (tmp, op1));
- emit_move_insn (operands[0], gen_lowpart (SImode, tmp));
- }
- else
- emit_insn (gen_negdi2 (gen_lowpart (DImode, operands[0]), op1));
- DONE;
- }
-}")
-
-(define_insn "*negsi2_internal"
+(define_insn "negsi2"
[(set (match_operand:SI 0 "register_operand" "=r")
(neg:SI (match_operand:SI 1 "register_operand" "r")))]
""
@@ -1970,7 +1883,7 @@
;; ::::::::::::::::::::
;; ::
-;; :: 32 Bit Integer Logical operations
+;; :: 32 bit Integer Logical operations
;; ::
;; ::::::::::::::::::::
@@ -1988,39 +1901,16 @@
;; Or maybe fix this by adding andsi3/iorsi3/xorsi3 patterns like the
;; one_cmplsi2 pattern.
-(define_expand "one_cmplsi2"
- [(set (match_operand:SI 0 "register_operand" "")
- (not:SI (match_operand:SI 1 "register_operand" "")))]
- ""
- "
-{
- if (optimize)
- {
- rtx op1 = gen_lowpart (DImode, operands[1]);
-
- if (! cse_not_expected)
- {
- rtx tmp = gen_reg_rtx (DImode);
- emit_insn (gen_one_cmpldi2 (tmp, op1));
- emit_move_insn (operands[0], gen_lowpart (SImode, tmp));
- }
- else
- emit_insn (gen_one_cmpldi2 (gen_lowpart (DImode, operands[0]), op1));
- DONE;
- }
-}")
-
-(define_insn "*one_cmplsi2_internal"
+(define_insn "one_cmplsi2"
[(set (match_operand:SI 0 "register_operand" "=r")
(not:SI (match_operand:SI 1 "register_operand" "r")))]
""
"andcm %0 = -1, %1"
[(set_attr "type" "A")])
-
;; ::::::::::::::::::::
;; ::
-;; :: 64 Bit Integer Logical operations
+;; :: 64 bit Integer Logical operations
;; ::
;; ::::::::::::::::::::