Commit 3987b9db by Jan Hubicka Committed by Jan Hubicka

optabs.c (expand_fix): Look for wider integer modes first.

	* optabs.c (expand_fix): Look for wider integer modes first.

	* i386.md (mov?f): Avoid the fake const double trick for medium
	memory model.
	(min?f*/max?f*): Prohibit memory operands for i387 variant.
	(fop_df_4): Disable for SSE compilation.

From-SVN: r48721
parent bccd793e
Thu Jan 10 11:19:18 CET 2002 Jan Hubicka <jh@suse.cz>
* optabs.c (expand_fix): Look for wider integer modes first.
* i386.md (mov?f): Avoid the fake const double trick for medium
memory model.
(min?f*/max?f*): Prohibit memory operands for i387 variant.
(fop_df_4): Disable for SSE compilation.
2002-01-20 Graham Stott <grahams@redhat.com> 2002-01-20 Graham Stott <grahams@redhat.com>
* dwarf2out.c (indirect_string_alloc, output_indirect_string): * dwarf2out.c (indirect_string_alloc, output_indirect_string):
......
...@@ -2718,6 +2718,7 @@ ...@@ -2718,6 +2718,7 @@
(match_operand:SF 1 "general_operand" "fm#rx,f#rx,G,rmF#fx,Fr#fx,H,x,xm#rf,x#rf"))] (match_operand:SF 1 "general_operand" "fm#rx,f#rx,G,rmF#fx,Fr#fx,H,x,xm#rf,x#rf"))]
"(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) "(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)
&& (reload_in_progress || reload_completed && (reload_in_progress || reload_completed
|| (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
|| GET_CODE (operands[1]) != CONST_DOUBLE || GET_CODE (operands[1]) != CONST_DOUBLE
|| memory_operand (operands[0], SFmode))" || memory_operand (operands[0], SFmode))"
{ {
...@@ -2893,6 +2894,7 @@ ...@@ -2893,6 +2894,7 @@
"(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) "(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)
&& (optimize_size || !TARGET_INTEGER_DFMODE_MOVES) && (optimize_size || !TARGET_INTEGER_DFMODE_MOVES)
&& (reload_in_progress || reload_completed && (reload_in_progress || reload_completed
|| (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
|| GET_CODE (operands[1]) != CONST_DOUBLE || GET_CODE (operands[1]) != CONST_DOUBLE
|| memory_operand (operands[0], DFmode))" || memory_operand (operands[0], DFmode))"
{ {
...@@ -2950,6 +2952,7 @@ ...@@ -2950,6 +2952,7 @@
"(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) "(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)
&& !optimize_size && TARGET_INTEGER_DFMODE_MOVES && !optimize_size && TARGET_INTEGER_DFMODE_MOVES
&& (reload_in_progress || reload_completed && (reload_in_progress || reload_completed
|| (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
|| GET_CODE (operands[1]) != CONST_DOUBLE || GET_CODE (operands[1]) != CONST_DOUBLE
|| memory_operand (operands[0], DFmode))" || memory_operand (operands[0], DFmode))"
{ {
...@@ -3253,6 +3256,7 @@ ...@@ -3253,6 +3256,7 @@
&& optimize_size && optimize_size
&& (reload_in_progress || reload_completed && (reload_in_progress || reload_completed
|| GET_CODE (operands[1]) != CONST_DOUBLE || GET_CODE (operands[1]) != CONST_DOUBLE
|| (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
|| memory_operand (operands[0], TFmode))" || memory_operand (operands[0], TFmode))"
{ {
switch (which_alternative) switch (which_alternative)
...@@ -3346,6 +3350,7 @@ ...@@ -3346,6 +3350,7 @@
&& !optimize_size && !optimize_size
&& (reload_in_progress || reload_completed && (reload_in_progress || reload_completed
|| GET_CODE (operands[1]) != CONST_DOUBLE || GET_CODE (operands[1]) != CONST_DOUBLE
|| (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
|| memory_operand (operands[0], TFmode))" || memory_operand (operands[0], TFmode))"
{ {
switch (which_alternative) switch (which_alternative)
...@@ -14132,7 +14137,7 @@ ...@@ -14132,7 +14137,7 @@
(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 && (!TARGET_SSE2 || !TARGET_SSE_MATH)
&& (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" && (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")
...@@ -15962,7 +15967,7 @@ ...@@ -15962,7 +15967,7 @@
(define_insn "*minsf_nonieee" (define_insn "*minsf_nonieee"
[(set (match_operand:SF 0 "register_operand" "=x#f,f#x") [(set (match_operand:SF 0 "register_operand" "=x#f,f#x")
(if_then_else:SF (lt (match_operand:SF 1 "register_operand" "%0,0") (if_then_else:SF (lt (match_operand:SF 1 "register_operand" "%0,0")
(match_operand:SF 2 "nonimmediate_operand" "xm#f,fm#x")) (match_operand:SF 2 "nonimmediate_operand" "xm#f,f#x"))
(match_dup 1) (match_dup 1)
(match_dup 2))) (match_dup 2)))
(clobber (reg:CC 17))] (clobber (reg:CC 17))]
...@@ -16044,7 +16049,7 @@ ...@@ -16044,7 +16049,7 @@
(define_insn "*mindf_nonieee" (define_insn "*mindf_nonieee"
[(set (match_operand:DF 0 "register_operand" "=Y#f,f#Y") [(set (match_operand:DF 0 "register_operand" "=Y#f,f#Y")
(if_then_else:DF (lt (match_operand:DF 1 "register_operand" "%0,0") (if_then_else:DF (lt (match_operand:DF 1 "register_operand" "%0,0")
(match_operand:DF 2 "nonimmediate_operand" "Ym#f,fm#Y")) (match_operand:DF 2 "nonimmediate_operand" "Ym#f,f#Y"))
(match_dup 1) (match_dup 1)
(match_dup 2))) (match_dup 2)))
(clobber (reg:CC 17))] (clobber (reg:CC 17))]
...@@ -16115,7 +16120,7 @@ ...@@ -16115,7 +16120,7 @@
(define_insn "*maxsf" (define_insn "*maxsf"
[(set (match_operand:SF 0 "register_operand" "=x#f,f#x,f#x") [(set (match_operand:SF 0 "register_operand" "=x#f,f#x,f#x")
(if_then_else:SF (gt (match_operand:SF 1 "register_operand" "0,0,f#x") (if_then_else:SF (gt (match_operand:SF 1 "register_operand" "0,0,f#x")
(match_operand:SF 2 "nonimmediate_operand" "xm#f,fm#x,0")) (match_operand:SF 2 "nonimmediate_operand" "xm#f,f#x,0"))
(match_dup 1) (match_dup 1)
(match_dup 2))) (match_dup 2)))
(clobber (reg:CC 17))] (clobber (reg:CC 17))]
...@@ -16125,7 +16130,7 @@ ...@@ -16125,7 +16130,7 @@
(define_insn "*maxsf_nonieee" (define_insn "*maxsf_nonieee"
[(set (match_operand:SF 0 "register_operand" "=x#f,f#x") [(set (match_operand:SF 0 "register_operand" "=x#f,f#x")
(if_then_else:SF (gt (match_operand:SF 1 "register_operand" "%0,0") (if_then_else:SF (gt (match_operand:SF 1 "register_operand" "%0,0")
(match_operand:SF 2 "nonimmediate_operand" "xm#f,fm#x")) (match_operand:SF 2 "nonimmediate_operand" "xm#f,f#x"))
(match_dup 1) (match_dup 1)
(match_dup 2))) (match_dup 2)))
(clobber (reg:CC 17))] (clobber (reg:CC 17))]
...@@ -16195,7 +16200,7 @@ ...@@ -16195,7 +16200,7 @@
(define_insn "*maxdf" (define_insn "*maxdf"
[(set (match_operand:DF 0 "register_operand" "=Y#f,f#Y,f#Y") [(set (match_operand:DF 0 "register_operand" "=Y#f,f#Y,f#Y")
(if_then_else:DF (gt (match_operand:DF 1 "register_operand" "0,0,f#Y") (if_then_else:DF (gt (match_operand:DF 1 "register_operand" "0,0,f#Y")
(match_operand:DF 2 "nonimmediate_operand" "Ym#f,fm#Y,0")) (match_operand:DF 2 "nonimmediate_operand" "Ym#f,f#Y,0"))
(match_dup 1) (match_dup 1)
(match_dup 2))) (match_dup 2)))
(clobber (reg:CC 17))] (clobber (reg:CC 17))]
...@@ -16205,7 +16210,7 @@ ...@@ -16205,7 +16210,7 @@
(define_insn "*maxdf_nonieee" (define_insn "*maxdf_nonieee"
[(set (match_operand:DF 0 "register_operand" "=Y#f,f#Y") [(set (match_operand:DF 0 "register_operand" "=Y#f,f#Y")
(if_then_else:DF (gt (match_operand:DF 1 "register_operand" "%0,0") (if_then_else:DF (gt (match_operand:DF 1 "register_operand" "%0,0")
(match_operand:DF 2 "nonimmediate_operand" "Ym#f,fm#Y")) (match_operand:DF 2 "nonimmediate_operand" "Ym#f,f#Y"))
(match_dup 1) (match_dup 1)
(match_dup 2))) (match_dup 2)))
(clobber (reg:CC 17))] (clobber (reg:CC 17))]
......
...@@ -4349,10 +4349,10 @@ expand_fix (to, from, unsignedp) ...@@ -4349,10 +4349,10 @@ expand_fix (to, from, unsignedp)
this conversion. If the integer mode is wider than the mode of TO, this conversion. If the integer mode is wider than the mode of TO,
we can do the conversion either signed or unsigned. */ we can do the conversion either signed or unsigned. */
for (imode = GET_MODE (to); imode != VOIDmode; for (fmode = GET_MODE (from); fmode != VOIDmode;
imode = GET_MODE_WIDER_MODE (imode)) fmode = GET_MODE_WIDER_MODE (fmode))
for (fmode = GET_MODE (from); fmode != VOIDmode; for (imode = GET_MODE (to); imode != VOIDmode;
fmode = GET_MODE_WIDER_MODE (fmode)) imode = GET_MODE_WIDER_MODE (imode))
{ {
int doing_unsigned = unsignedp; int doing_unsigned = unsignedp;
......
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