Commit f97d9ec3 by Jan Hubicka Committed by Jan Hubicka

i386.md (extend?f?f): Split to expander and pattern, refuse two memory operands in patterns.


	* i386.md (extend?f?f): Split to expander and pattern, refuse two
	memory operands in patterns.
	(fop*): Refuse two memory operands.

From-SVN: r30593
parent c37d59c3
Fri Nov 19 06:32:19 CET 1999 Jan Hubicka <hubicka@freesoft.cz> Fri Nov 19 06:32:19 CET 1999 Jan Hubicka <hubicka@freesoft.cz>
* i386.md (extend?f?f): Split to expander and pattern, refuse two
memory operands in patterns.
(fop*): Refuse two memory operands.
* i386.md (ashrsi3_31): Allow cltd when optimizing for size even * i386.md (ashrsi3_31): Allow cltd when optimizing for size even
on !TARGET_USE_CLTD CPUs. on !TARGET_USE_CLTD CPUs.
......
...@@ -2419,10 +2419,21 @@ ...@@ -2419,10 +2419,21 @@
[(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -12))) [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -12)))
(set (mem:DF (reg:SI 7)) (float_extend:XF (match_dup 1)))]) (set (mem:DF (reg:SI 7)) (float_extend:XF (match_dup 1)))])
(define_insn "extendsfdf2" (define_expand "extendsfdf2"
[(set (match_operand:DF 0 "nonimmediate_operand" "")
(float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "")))]
"TARGET_80387"
"
{
if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
operands[0] = force_reg (DFmode, operands[0]);
}")
(define_insn "*extendsfdf2_1"
[(set (match_operand:DF 0 "nonimmediate_operand" "=f,m") [(set (match_operand:DF 0 "nonimmediate_operand" "=f,m")
(float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "fm,f")))] (float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "fm,f")))]
"TARGET_80387" "TARGET_80387
&& (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
"* "*
{ {
switch (which_alternative) switch (which_alternative)
...@@ -2449,10 +2460,21 @@ ...@@ -2449,10 +2460,21 @@
}" }"
[(set_attr "type" "fmov")]) [(set_attr "type" "fmov")])
(define_insn "extendsfxf2" (define_expand "extendsfxf2"
[(set (match_operand:XF 0 "nonimmediate_operand" "")
(float_extend:XF (match_operand:SF 1 "nonimmediate_operand" "")))]
"TARGET_80387"
"
{
if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
operands[0] = force_reg (XFmode, operands[0]);
}")
(define_insn "*extendsfxf2_1"
[(set (match_operand:XF 0 "nonimmediate_operand" "=f,m") [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m")
(float_extend:XF (match_operand:SF 1 "nonimmediate_operand" "fm,f")))] (float_extend:XF (match_operand:SF 1 "nonimmediate_operand" "fm,f")))]
"TARGET_80387" "TARGET_80387
&& (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
"* "*
{ {
switch (which_alternative) switch (which_alternative)
...@@ -2480,10 +2502,21 @@ ...@@ -2480,10 +2502,21 @@
}" }"
[(set_attr "type" "fmov")]) [(set_attr "type" "fmov")])
(define_insn "extenddfxf2" (define_expand "extenddfxf2"
[(set (match_operand:XF 0 "nonimmediate_operand" "")
(float_extend:XF (match_operand:DF 1 "nonimmediate_operand" "")))]
"TARGET_80387"
"
{
if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
operands[0] = force_reg (XFmode, operands[0]);
}")
(define_insn "*extenddfxf2_1"
[(set (match_operand:XF 0 "nonimmediate_operand" "=f,m") [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m")
(float_extend:XF (match_operand:DF 1 "nonimmediate_operand" "fm,f")))] (float_extend:XF (match_operand:DF 1 "nonimmediate_operand" "fm,f")))]
"TARGET_80387" "TARGET_80387
&& (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
"* "*
{ {
switch (which_alternative) switch (which_alternative)
...@@ -6826,7 +6859,8 @@ ...@@ -6826,7 +6859,8 @@
(match_operator:SF 3 "binary_fp_operator" (match_operator:SF 3 "binary_fp_operator"
[(match_operand:SF 1 "nonimmediate_operand" "0,fm") [(match_operand:SF 1 "nonimmediate_operand" "0,fm")
(match_operand:SF 2 "nonimmediate_operand" "fm,0")]))] (match_operand:SF 2 "nonimmediate_operand" "fm,0")]))]
"TARGET_80387" "TARGET_80387
&& (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)"
"* return output_387_binary_op (insn, operands);" "* return output_387_binary_op (insn, operands);"
[(set (attr "type") [(set (attr "type")
(cond [(match_operand:SF 3 "mult_operator" "") (cond [(match_operand:SF 3 "mult_operator" "")
...@@ -6875,7 +6909,8 @@ ...@@ -6875,7 +6909,8 @@
(match_operator:DF 3 "binary_fp_operator" (match_operator:DF 3 "binary_fp_operator"
[(match_operand:DF 1 "nonimmediate_operand" "0,fm") [(match_operand:DF 1 "nonimmediate_operand" "0,fm")
(match_operand:DF 2 "nonimmediate_operand" "fm,0")]))] (match_operand:DF 2 "nonimmediate_operand" "fm,0")]))]
"TARGET_80387" "TARGET_80387
&& (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)"
"* return output_387_binary_op (insn, operands);" "* return output_387_binary_op (insn, operands);"
[(set (attr "type") [(set (attr "type")
(cond [(match_operand:DF 3 "mult_operator" "") (cond [(match_operand:DF 3 "mult_operator" "")
...@@ -6924,7 +6959,8 @@ ...@@ -6924,7 +6959,8 @@
(match_operator:DF 3 "binary_fp_operator" (match_operator:DF 3 "binary_fp_operator"
[(float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "fm,0")) [(float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "fm,0"))
(match_operand:DF 2 "register_operand" "0,f")]))] (match_operand:DF 2 "register_operand" "0,f")]))]
"TARGET_80387" "TARGET_80387
&& (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)"
"* return output_387_binary_op (insn, operands);" "* return output_387_binary_op (insn, operands);"
[(set (attr "type") [(set (attr "type")
(cond [(match_operand:DF 3 "mult_operator" "") (cond [(match_operand:DF 3 "mult_operator" "")
......
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