Commit a5f3dd66 by Kelley Cook Committed by Jim Wilson

re PR rtl-optimization/4490 (ICE with -m128bit-long-double)

	PR optimization/4490
	* config/i386/i386.md: Don't use XFMode if TARGET_128BIT_LONG_DOUBLE.
	* doc/invoke.texi (m96bit-long-double, m128bit-long-double):  Reword
	documentation to accurately reflect what these options do.

From-SVN: r67528
parent 25119b21
2003-06-05 Kelley Cook <kelleycook@wideopenwest.com>
PR optimization/4490
* config/i386/i386.md: Don't use XFMode if TARGET_128BIT_LONG_DOUBLE.
* doc/invoke.texi (m96bit-long-double, m128bit-long-double): Reword
documentation to accurately reflect what these options do.
2003-06-06 Kaz Kojima <kkojima@gcc.gnu.org> 2003-06-06 Kaz Kojima <kkojima@gcc.gnu.org>
* config/sh/linux.h (STARTFILE_SPEC): Handle -pie. Simplify. * config/sh/linux.h (STARTFILE_SPEC): Handle -pie. Simplify.
......
...@@ -707,7 +707,7 @@ ...@@ -707,7 +707,7 @@
[(set (reg:CC 17) [(set (reg:CC 17)
(compare:CC (match_operand:XF 0 "cmp_fp_expander_operand" "") (compare:CC (match_operand:XF 0 "cmp_fp_expander_operand" "")
(match_operand:XF 1 "cmp_fp_expander_operand" "")))] (match_operand:XF 1 "cmp_fp_expander_operand" "")))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
{ {
ix86_compare_op0 = operands[0]; ix86_compare_op0 = operands[0];
ix86_compare_op1 = operands[1]; ix86_compare_op1 = operands[1];
...@@ -841,7 +841,7 @@ ...@@ -841,7 +841,7 @@
(compare:CCFP (compare:CCFP
(match_operand:XF 0 "register_operand" "f") (match_operand:XF 0 "register_operand" "f")
(match_operand:XF 1 "register_operand" "f")))] (match_operand:XF 1 "register_operand" "f")))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"* return output_fp_compare (insn, operands, 0, 0);" "* return output_fp_compare (insn, operands, 0, 0);"
[(set_attr "type" "fcmp") [(set_attr "type" "fcmp")
(set_attr "mode" "XF")]) (set_attr "mode" "XF")])
...@@ -863,7 +863,7 @@ ...@@ -863,7 +863,7 @@
(match_operand:XF 1 "register_operand" "f") (match_operand:XF 1 "register_operand" "f")
(match_operand:XF 2 "register_operand" "f"))] (match_operand:XF 2 "register_operand" "f"))]
UNSPEC_FNSTSW))] UNSPEC_FNSTSW))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"* return output_fp_compare (insn, operands, 2, 0);" "* return output_fp_compare (insn, operands, 2, 0);"
[(set_attr "type" "multi") [(set_attr "type" "multi")
(set_attr "mode" "XF")]) (set_attr "mode" "XF")])
...@@ -2740,7 +2740,7 @@ ...@@ -2740,7 +2740,7 @@
(define_expand "movxf" (define_expand "movxf"
[(set (match_operand:XF 0 "nonimmediate_operand" "") [(set (match_operand:XF 0 "nonimmediate_operand" "")
(match_operand:XF 1 "general_operand" ""))] (match_operand:XF 1 "general_operand" ""))]
"!TARGET_64BIT" "!TARGET_128BIT_LONG_DOUBLE"
"ix86_expand_move (XFmode, operands); DONE;") "ix86_expand_move (XFmode, operands); DONE;")
(define_expand "movtf" (define_expand "movtf"
...@@ -2759,7 +2759,7 @@ ...@@ -2759,7 +2759,7 @@
(define_insn "*pushxf_nointeger" (define_insn "*pushxf_nointeger"
[(set (match_operand:XF 0 "push_operand" "=X,X,X") [(set (match_operand:XF 0 "push_operand" "=X,X,X")
(match_operand:XF 1 "general_no_elim_operand" "f,Fo,*r"))] (match_operand:XF 1 "general_no_elim_operand" "f,Fo,*r"))]
"!TARGET_64BIT && optimize_size" "!TARGET_128BIT_LONG_DOUBLE && optimize_size"
{ {
/* This insn should be already splitted before reg-stack. */ /* This insn should be already splitted before reg-stack. */
abort (); abort ();
...@@ -2781,7 +2781,7 @@ ...@@ -2781,7 +2781,7 @@
(define_insn "*pushxf_integer" (define_insn "*pushxf_integer"
[(set (match_operand:XF 0 "push_operand" "=<,<") [(set (match_operand:XF 0 "push_operand" "=<,<")
(match_operand:XF 1 "general_no_elim_operand" "f#r,ro#f"))] (match_operand:XF 1 "general_no_elim_operand" "f#r,ro#f"))]
"!TARGET_64BIT && !optimize_size" "!TARGET_128BIT_LONG_DOUBLE && !optimize_size"
{ {
/* This insn should be already splitted before reg-stack. */ /* This insn should be already splitted before reg-stack. */
abort (); abort ();
...@@ -2814,7 +2814,7 @@ ...@@ -2814,7 +2814,7 @@
(define_split (define_split
[(set (match_operand:XF 0 "push_operand" "") [(set (match_operand:XF 0 "push_operand" "")
(match_operand:XF 1 "any_fp_register_operand" ""))] (match_operand:XF 1 "any_fp_register_operand" ""))]
"!TARGET_64BIT" "!TARGET_128BIT_LONG_DOUBLE"
[(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:XF (reg:SI 7)) (match_dup 1))]) (set (mem:XF (reg:SI 7)) (match_dup 1))])
...@@ -2836,7 +2836,7 @@ ...@@ -2836,7 +2836,7 @@
(define_insn "*movxf_nointeger" (define_insn "*movxf_nointeger"
[(set (match_operand:XF 0 "nonimmediate_operand" "=f,m,f,*r,o") [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m,f,*r,o")
(match_operand:XF 1 "general_operand" "fm,f,G,*roF,F*r"))] (match_operand:XF 1 "general_operand" "fm,f,G,*roF,F*r"))]
"!TARGET_64BIT "!TARGET_128BIT_LONG_DOUBLE
&& optimize_size && optimize_size
&& (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
...@@ -2926,7 +2926,7 @@ ...@@ -2926,7 +2926,7 @@
(define_insn "*movxf_integer" (define_insn "*movxf_integer"
[(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,m,f#r,r#f,o") [(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,m,f#r,r#f,o")
(match_operand:XF 1 "general_operand" "fm#r,f#r,G,roF#f,Fr#f"))] (match_operand:XF 1 "general_operand" "fm#r,f#r,G,roF#f,Fr#f"))]
"!TARGET_64BIT "!TARGET_128BIT_LONG_DOUBLE
&& !optimize_size && !optimize_size
&& (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
...@@ -3593,7 +3593,7 @@ ...@@ -3593,7 +3593,7 @@
(define_split (define_split
[(set (match_operand:XF 0 "push_operand" "") [(set (match_operand:XF 0 "push_operand" "")
(float_extend:XF (match_operand:SF 1 "fp_register_operand" "")))] (float_extend:XF (match_operand:SF 1 "fp_register_operand" "")))]
"!TARGET_64BIT" "!TARGET_128BIT_LONG_DOUBLE"
[(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:XF (reg:SI 7)) (float_extend:XF (match_dup 1)))]) (set (mem:XF (reg:SI 7)) (float_extend:XF (match_dup 1)))])
...@@ -3626,7 +3626,7 @@ ...@@ -3626,7 +3626,7 @@
(define_split (define_split
[(set (match_operand:XF 0 "push_operand" "") [(set (match_operand:XF 0 "push_operand" "")
(float_extend:XF (match_operand:DF 1 "fp_register_operand" "")))] (float_extend:XF (match_operand:DF 1 "fp_register_operand" "")))]
"!TARGET_64BIT" "!TARGET_128BIT_LONG_DOUBLE"
[(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)))])
...@@ -3708,7 +3708,7 @@ ...@@ -3708,7 +3708,7 @@
(define_expand "extendsfxf2" (define_expand "extendsfxf2"
[(set (match_operand:XF 0 "nonimmediate_operand" "") [(set (match_operand:XF 0 "nonimmediate_operand" "")
(float_extend:XF (match_operand:SF 1 "general_operand" "")))] (float_extend:XF (match_operand:SF 1 "general_operand" "")))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
{ {
/* ??? Needed for compress_float_constant since all fp constants /* ??? Needed for compress_float_constant since all fp constants
are LEGITIMATE_CONSTANT_P. */ are LEGITIMATE_CONSTANT_P. */
...@@ -3721,7 +3721,7 @@ ...@@ -3721,7 +3721,7 @@
(define_insn "*extendsfxf2_1" (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_64BIT && TARGET_80387 "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387
&& (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
{ {
switch (which_alternative) switch (which_alternative)
...@@ -3798,7 +3798,7 @@ ...@@ -3798,7 +3798,7 @@
(define_expand "extenddfxf2" (define_expand "extenddfxf2"
[(set (match_operand:XF 0 "nonimmediate_operand" "") [(set (match_operand:XF 0 "nonimmediate_operand" "")
(float_extend:XF (match_operand:DF 1 "general_operand" "")))] (float_extend:XF (match_operand:DF 1 "general_operand" "")))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
{ {
/* ??? Needed for compress_float_constant since all fp constants /* ??? Needed for compress_float_constant since all fp constants
are LEGITIMATE_CONSTANT_P. */ are LEGITIMATE_CONSTANT_P. */
...@@ -3811,7 +3811,7 @@ ...@@ -3811,7 +3811,7 @@
(define_insn "*extenddfxf2_1" (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_64BIT && TARGET_80387 "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387
&& (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
{ {
switch (which_alternative) switch (which_alternative)
...@@ -4130,7 +4130,7 @@ ...@@ -4130,7 +4130,7 @@
(float_truncate:SF (float_truncate:SF
(match_operand:XF 1 "register_operand" ""))) (match_operand:XF 1 "register_operand" "")))
(clobber (match_dup 2))])] (clobber (match_dup 2))])]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"operands[2] = assign_386_stack_local (SFmode, 0);") "operands[2] = assign_386_stack_local (SFmode, 0);")
(define_insn "*truncxfsf2_1" (define_insn "*truncxfsf2_1"
...@@ -4138,7 +4138,7 @@ ...@@ -4138,7 +4138,7 @@
(float_truncate:SF (float_truncate:SF
(match_operand:XF 1 "register_operand" "f,f,f,f"))) (match_operand:XF 1 "register_operand" "f,f,f,f")))
(clobber (match_operand:SF 2 "memory_operand" "=X,m,m,m"))] (clobber (match_operand:SF 2 "memory_operand" "=X,m,m,m"))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
{ {
switch (which_alternative) switch (which_alternative)
{ {
...@@ -4158,7 +4158,7 @@ ...@@ -4158,7 +4158,7 @@
[(set (match_operand:SF 0 "memory_operand" "=m") [(set (match_operand:SF 0 "memory_operand" "=m")
(float_truncate:SF (float_truncate:SF
(match_operand:XF 1 "register_operand" "f")))] (match_operand:XF 1 "register_operand" "f")))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
{ {
if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) if (find_regno_note (insn, REG_DEAD, REGNO (operands[1])))
return "fstp%z0\t%y0"; return "fstp%z0\t%y0";
...@@ -4255,7 +4255,7 @@ ...@@ -4255,7 +4255,7 @@
(float_truncate:DF (float_truncate:DF
(match_operand:XF 1 "register_operand" ""))) (match_operand:XF 1 "register_operand" "")))
(clobber (match_dup 2))])] (clobber (match_dup 2))])]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"operands[2] = assign_386_stack_local (DFmode, 0);") "operands[2] = assign_386_stack_local (DFmode, 0);")
(define_insn "*truncxfdf2_1" (define_insn "*truncxfdf2_1"
...@@ -4263,7 +4263,7 @@ ...@@ -4263,7 +4263,7 @@
(float_truncate:DF (float_truncate:DF
(match_operand:XF 1 "register_operand" "f,f,f,f"))) (match_operand:XF 1 "register_operand" "f,f,f,f")))
(clobber (match_operand:DF 2 "memory_operand" "=X,m,m,m"))] (clobber (match_operand:DF 2 "memory_operand" "=X,m,m,m"))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
{ {
switch (which_alternative) switch (which_alternative)
{ {
...@@ -4284,7 +4284,7 @@ ...@@ -4284,7 +4284,7 @@
[(set (match_operand:DF 0 "memory_operand" "=m") [(set (match_operand:DF 0 "memory_operand" "=m")
(float_truncate:DF (float_truncate:DF
(match_operand:XF 1 "register_operand" "f")))] (match_operand:XF 1 "register_operand" "f")))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
{ {
if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) if (find_regno_note (insn, REG_DEAD, REGNO (operands[1])))
return "fstp%z0\t%y0"; return "fstp%z0\t%y0";
...@@ -4384,7 +4384,7 @@ ...@@ -4384,7 +4384,7 @@
(define_expand "fix_truncxfdi2" (define_expand "fix_truncxfdi2"
[(set (match_operand:DI 0 "nonimmediate_operand" "") [(set (match_operand:DI 0 "nonimmediate_operand" "")
(fix:DI (match_operand:XF 1 "register_operand" "")))] (fix:DI (match_operand:XF 1 "register_operand" "")))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"") "")
(define_expand "fix_trunctfdi2" (define_expand "fix_trunctfdi2"
...@@ -4551,7 +4551,7 @@ ...@@ -4551,7 +4551,7 @@
(define_expand "fix_truncxfsi2" (define_expand "fix_truncxfsi2"
[(set (match_operand:SI 0 "nonimmediate_operand" "") [(set (match_operand:SI 0 "nonimmediate_operand" "")
(fix:SI (match_operand:XF 1 "register_operand" "")))] (fix:SI (match_operand:XF 1 "register_operand" "")))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"") "")
(define_expand "fix_trunctfsi2" (define_expand "fix_trunctfsi2"
...@@ -4712,7 +4712,7 @@ ...@@ -4712,7 +4712,7 @@
(define_expand "fix_truncxfhi2" (define_expand "fix_truncxfhi2"
[(set (match_operand:HI 0 "nonimmediate_operand" "") [(set (match_operand:HI 0 "nonimmediate_operand" "")
(fix:HI (match_operand:XF 1 "register_operand" "")))] (fix:HI (match_operand:XF 1 "register_operand" "")))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"") "")
(define_expand "fix_trunctfhi2" (define_expand "fix_trunctfhi2"
...@@ -5064,7 +5064,7 @@ ...@@ -5064,7 +5064,7 @@
(define_insn "floathixf2" (define_insn "floathixf2"
[(set (match_operand:XF 0 "register_operand" "=f,f") [(set (match_operand:XF 0 "register_operand" "=f,f")
(float:XF (match_operand:HI 1 "nonimmediate_operand" "m,r")))] (float:XF (match_operand:HI 1 "nonimmediate_operand" "m,r")))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"@ "@
fild%z1\t%1 fild%z1\t%1
#" #"
...@@ -5086,7 +5086,7 @@ ...@@ -5086,7 +5086,7 @@
(define_insn "floatsixf2" (define_insn "floatsixf2"
[(set (match_operand:XF 0 "register_operand" "=f,f") [(set (match_operand:XF 0 "register_operand" "=f,f")
(float:XF (match_operand:SI 1 "nonimmediate_operand" "m,r")))] (float:XF (match_operand:SI 1 "nonimmediate_operand" "m,r")))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"@ "@
fild%z1\t%1 fild%z1\t%1
#" #"
...@@ -5108,7 +5108,7 @@ ...@@ -5108,7 +5108,7 @@
(define_insn "floatdixf2" (define_insn "floatdixf2"
[(set (match_operand:XF 0 "register_operand" "=f,f") [(set (match_operand:XF 0 "register_operand" "=f,f")
(float:XF (match_operand:DI 1 "nonimmediate_operand" "m,r")))] (float:XF (match_operand:DI 1 "nonimmediate_operand" "m,r")))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"@ "@
fild%z1\t%1 fild%z1\t%1
#" #"
...@@ -6819,7 +6819,7 @@ ...@@ -6819,7 +6819,7 @@
[(set (match_operand:XF 0 "register_operand" "") [(set (match_operand:XF 0 "register_operand" "")
(plus:XF (match_operand:XF 1 "register_operand" "") (plus:XF (match_operand:XF 1 "register_operand" "")
(match_operand:XF 2 "register_operand" "")))] (match_operand:XF 2 "register_operand" "")))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"") "")
(define_expand "addtf3" (define_expand "addtf3"
...@@ -7172,7 +7172,7 @@ ...@@ -7172,7 +7172,7 @@
[(set (match_operand:XF 0 "register_operand" "") [(set (match_operand:XF 0 "register_operand" "")
(minus:XF (match_operand:XF 1 "register_operand" "") (minus:XF (match_operand:XF 1 "register_operand" "")
(match_operand:XF 2 "register_operand" "")))] (match_operand:XF 2 "register_operand" "")))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"") "")
(define_expand "subtf3" (define_expand "subtf3"
...@@ -7690,7 +7690,7 @@ ...@@ -7690,7 +7690,7 @@
[(set (match_operand:XF 0 "register_operand" "") [(set (match_operand:XF 0 "register_operand" "")
(mult:XF (match_operand:XF 1 "register_operand" "") (mult:XF (match_operand:XF 1 "register_operand" "")
(match_operand:XF 2 "register_operand" "")))] (match_operand:XF 2 "register_operand" "")))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"") "")
(define_expand "multf3" (define_expand "multf3"
...@@ -7744,7 +7744,7 @@ ...@@ -7744,7 +7744,7 @@
[(set (match_operand:XF 0 "register_operand" "") [(set (match_operand:XF 0 "register_operand" "")
(div:XF (match_operand:XF 1 "register_operand" "") (div:XF (match_operand:XF 1 "register_operand" "")
(match_operand:XF 2 "register_operand" "")))] (match_operand:XF 2 "register_operand" "")))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"") "")
(define_expand "divtf3" (define_expand "divtf3"
...@@ -10157,7 +10157,7 @@ ...@@ -10157,7 +10157,7 @@
[(parallel [(set (match_operand:XF 0 "nonimmediate_operand" "") [(parallel [(set (match_operand:XF 0 "nonimmediate_operand" "")
(neg:XF (match_operand:XF 1 "nonimmediate_operand" ""))) (neg:XF (match_operand:XF 1 "nonimmediate_operand" "")))
(clobber (reg:CC 17))])] (clobber (reg:CC 17))])]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"ix86_expand_unary_operator (NEG, XFmode, operands); DONE;") "ix86_expand_unary_operator (NEG, XFmode, operands); DONE;")
(define_expand "negtf2" (define_expand "negtf2"
...@@ -10174,7 +10174,7 @@ ...@@ -10174,7 +10174,7 @@
[(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,rm#f") [(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,rm#f")
(neg:XF (match_operand:XF 1 "nonimmediate_operand" "0,0"))) (neg:XF (match_operand:XF 1 "nonimmediate_operand" "0,0")))
(clobber (reg:CC 17))] (clobber (reg:CC 17))]
"!TARGET_64BIT && TARGET_80387 "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387
&& ix86_unary_operator_ok (NEG, XFmode, operands)" && ix86_unary_operator_ok (NEG, XFmode, operands)"
"#") "#")
...@@ -10262,7 +10262,7 @@ ...@@ -10262,7 +10262,7 @@
(define_insn "*negxf2_1" (define_insn "*negxf2_1"
[(set (match_operand:XF 0 "register_operand" "=f") [(set (match_operand:XF 0 "register_operand" "=f")
(neg:XF (match_operand:XF 1 "register_operand" "0")))] (neg:XF (match_operand:XF 1 "register_operand" "0")))]
"!TARGET_64BIT && TARGET_80387 && reload_completed" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && reload_completed"
"fchs" "fchs"
[(set_attr "type" "fsgn") [(set_attr "type" "fsgn")
(set_attr "mode" "XF") (set_attr "mode" "XF")
...@@ -10272,7 +10272,7 @@ ...@@ -10272,7 +10272,7 @@
[(set (match_operand:XF 0 "register_operand" "=f") [(set (match_operand:XF 0 "register_operand" "=f")
(neg:XF (float_extend:XF (neg:XF (float_extend:XF
(match_operand:DF 1 "register_operand" "0"))))] (match_operand:DF 1 "register_operand" "0"))))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"fchs" "fchs"
[(set_attr "type" "fsgn") [(set_attr "type" "fsgn")
(set_attr "mode" "XF") (set_attr "mode" "XF")
...@@ -10282,7 +10282,7 @@ ...@@ -10282,7 +10282,7 @@
[(set (match_operand:XF 0 "register_operand" "=f") [(set (match_operand:XF 0 "register_operand" "=f")
(neg:XF (float_extend:XF (neg:XF (float_extend:XF
(match_operand:SF 1 "register_operand" "0"))))] (match_operand:SF 1 "register_operand" "0"))))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"fchs" "fchs"
[(set_attr "type" "fsgn") [(set_attr "type" "fsgn")
(set_attr "mode" "XF") (set_attr "mode" "XF")
...@@ -10619,7 +10619,7 @@ ...@@ -10619,7 +10619,7 @@
[(parallel [(set (match_operand:XF 0 "nonimmediate_operand" "") [(parallel [(set (match_operand:XF 0 "nonimmediate_operand" "")
(neg:XF (match_operand:XF 1 "nonimmediate_operand" ""))) (neg:XF (match_operand:XF 1 "nonimmediate_operand" "")))
(clobber (reg:CC 17))])] (clobber (reg:CC 17))])]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"ix86_expand_unary_operator (ABS, XFmode, operands); DONE;") "ix86_expand_unary_operator (ABS, XFmode, operands); DONE;")
(define_expand "abstf2" (define_expand "abstf2"
...@@ -10636,7 +10636,7 @@ ...@@ -10636,7 +10636,7 @@
[(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,rm#f") [(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,rm#f")
(abs:XF (match_operand:XF 1 "nonimmediate_operand" "0,0"))) (abs:XF (match_operand:XF 1 "nonimmediate_operand" "0,0")))
(clobber (reg:CC 17))] (clobber (reg:CC 17))]
"!TARGET_64BIT && TARGET_80387 "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387
&& ix86_unary_operator_ok (ABS, XFmode, operands)" && ix86_unary_operator_ok (ABS, XFmode, operands)"
"#") "#")
...@@ -10715,7 +10715,7 @@ ...@@ -10715,7 +10715,7 @@
(define_insn "*absxf2_1" (define_insn "*absxf2_1"
[(set (match_operand:XF 0 "register_operand" "=f") [(set (match_operand:XF 0 "register_operand" "=f")
(abs:XF (match_operand:XF 1 "register_operand" "0")))] (abs:XF (match_operand:XF 1 "register_operand" "0")))]
"!TARGET_64BIT && TARGET_80387 && reload_completed" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && reload_completed"
"fabs" "fabs"
[(set_attr "type" "fsgn") [(set_attr "type" "fsgn")
(set_attr "mode" "DF")]) (set_attr "mode" "DF")])
...@@ -10724,7 +10724,7 @@ ...@@ -10724,7 +10724,7 @@
[(set (match_operand:XF 0 "register_operand" "=f") [(set (match_operand:XF 0 "register_operand" "=f")
(abs:XF (float_extend:XF (abs:XF (float_extend:XF
(match_operand:DF 1 "register_operand" "0"))))] (match_operand:DF 1 "register_operand" "0"))))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"fabs" "fabs"
[(set_attr "type" "fsgn") [(set_attr "type" "fsgn")
(set_attr "mode" "XF")]) (set_attr "mode" "XF")])
...@@ -10733,7 +10733,7 @@ ...@@ -10733,7 +10733,7 @@
[(set (match_operand:XF 0 "register_operand" "=f") [(set (match_operand:XF 0 "register_operand" "=f")
(abs:XF (float_extend:XF (abs:XF (float_extend:XF
(match_operand:SF 1 "register_operand" "0"))))] (match_operand:SF 1 "register_operand" "0"))))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"fabs" "fabs"
[(set_attr "type" "fsgn") [(set_attr "type" "fsgn")
(set_attr "mode" "XF")]) (set_attr "mode" "XF")])
...@@ -14803,7 +14803,7 @@ ...@@ -14803,7 +14803,7 @@
(match_operator:XF 3 "binary_fp_operator" (match_operator:XF 3 "binary_fp_operator"
[(match_operand:XF 1 "register_operand" "%0") [(match_operand:XF 1 "register_operand" "%0")
(match_operand:XF 2 "register_operand" "f")]))] (match_operand:XF 2 "register_operand" "f")]))]
"!TARGET_64BIT && TARGET_80387 "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387
&& GET_RTX_CLASS (GET_CODE (operands[3])) == 'c'" && GET_RTX_CLASS (GET_CODE (operands[3])) == 'c'"
"* return output_387_binary_op (insn, operands);" "* return output_387_binary_op (insn, operands);"
[(set (attr "type") [(set (attr "type")
...@@ -15079,7 +15079,7 @@ ...@@ -15079,7 +15079,7 @@
(match_operator:XF 3 "binary_fp_operator" (match_operator:XF 3 "binary_fp_operator"
[(match_operand:XF 1 "register_operand" "0,f") [(match_operand:XF 1 "register_operand" "0,f")
(match_operand:XF 2 "register_operand" "f,0")]))] (match_operand:XF 2 "register_operand" "f,0")]))]
"!TARGET_64BIT && TARGET_80387 "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387
&& GET_RTX_CLASS (GET_CODE (operands[3])) != 'c'" && GET_RTX_CLASS (GET_CODE (operands[3])) != 'c'"
"* return output_387_binary_op (insn, operands);" "* return output_387_binary_op (insn, operands);"
[(set (attr "type") [(set (attr "type")
...@@ -15113,7 +15113,7 @@ ...@@ -15113,7 +15113,7 @@
(match_operator:XF 3 "binary_fp_operator" (match_operator:XF 3 "binary_fp_operator"
[(float:XF (match_operand:SI 1 "nonimmediate_operand" "m,?r")) [(float:XF (match_operand:SI 1 "nonimmediate_operand" "m,?r"))
(match_operand:XF 2 "register_operand" "0,0")]))] (match_operand:XF 2 "register_operand" "0,0")]))]
"!TARGET_64BIT && TARGET_80387 && TARGET_USE_FIOP" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && TARGET_USE_FIOP"
"* return which_alternative ? \"#\" : output_387_binary_op (insn, operands);" "* return which_alternative ? \"#\" : output_387_binary_op (insn, operands);"
[(set (attr "type") [(set (attr "type")
(cond [(match_operand:XF 3 "mult_operator" "") (cond [(match_operand:XF 3 "mult_operator" "")
...@@ -15149,7 +15149,7 @@ ...@@ -15149,7 +15149,7 @@
(match_operator:XF 3 "binary_fp_operator" (match_operator:XF 3 "binary_fp_operator"
[(match_operand:XF 1 "register_operand" "0,0") [(match_operand:XF 1 "register_operand" "0,0")
(float:XF (match_operand:SI 2 "nonimmediate_operand" "m,?r"))]))] (float:XF (match_operand:SI 2 "nonimmediate_operand" "m,?r"))]))]
"!TARGET_64BIT && TARGET_80387 && TARGET_USE_FIOP" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && TARGET_USE_FIOP"
"* return which_alternative ? \"#\" : output_387_binary_op (insn, operands);" "* return which_alternative ? \"#\" : output_387_binary_op (insn, operands);"
[(set (attr "type") [(set (attr "type")
(cond [(match_operand:XF 3 "mult_operator" "") (cond [(match_operand:XF 3 "mult_operator" "")
...@@ -15185,7 +15185,7 @@ ...@@ -15185,7 +15185,7 @@
(match_operator:XF 3 "binary_fp_operator" (match_operator:XF 3 "binary_fp_operator"
[(float_extend:XF (match_operand 1 "nonimmediate_operand" "fm,0")) [(float_extend:XF (match_operand 1 "nonimmediate_operand" "fm,0"))
(match_operand:XF 2 "register_operand" "0,f")]))] (match_operand:XF 2 "register_operand" "0,f")]))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"* return output_387_binary_op (insn, operands);" "* return output_387_binary_op (insn, operands);"
[(set (attr "type") [(set (attr "type")
(cond [(match_operand:XF 3 "mult_operator" "") (cond [(match_operand:XF 3 "mult_operator" "")
...@@ -15218,7 +15218,7 @@ ...@@ -15218,7 +15218,7 @@
[(match_operand:XF 1 "register_operand" "0,f") [(match_operand:XF 1 "register_operand" "0,f")
(float_extend:XF (float_extend:XF
(match_operand 2 "nonimmediate_operand" "fm,0"))]))] (match_operand 2 "nonimmediate_operand" "fm,0"))]))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"* return output_387_binary_op (insn, operands);" "* return output_387_binary_op (insn, operands);"
[(set (attr "type") [(set (attr "type")
(cond [(match_operand:XF 3 "mult_operator" "") (cond [(match_operand:XF 3 "mult_operator" "")
...@@ -15253,7 +15253,7 @@ ...@@ -15253,7 +15253,7 @@
(match_operand 1 "register_operand" "0,f")) (match_operand 1 "register_operand" "0,f"))
(float_extend:XF (float_extend:XF
(match_operand 2 "nonimmediate_operand" "fm,0"))]))] (match_operand 2 "nonimmediate_operand" "fm,0"))]))]
"!TARGET_64BIT && TARGET_80387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
"* return output_387_binary_op (insn, operands);" "* return output_387_binary_op (insn, operands);"
[(set (attr "type") [(set (attr "type")
(cond [(match_operand:XF 3 "mult_operator" "") (cond [(match_operand:XF 3 "mult_operator" "")
...@@ -15419,7 +15419,7 @@ ...@@ -15419,7 +15419,7 @@
(define_insn "sqrtxf2" (define_insn "sqrtxf2"
[(set (match_operand:XF 0 "register_operand" "=f") [(set (match_operand:XF 0 "register_operand" "=f")
(sqrt:XF (match_operand:XF 1 "register_operand" "0")))] (sqrt:XF (match_operand:XF 1 "register_operand" "0")))]
"!TARGET_64BIT && TARGET_80387 && !TARGET_NO_FANCY_MATH_387 "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && !TARGET_NO_FANCY_MATH_387
&& (TARGET_IEEE_FP || flag_unsafe_math_optimizations) " && (TARGET_IEEE_FP || flag_unsafe_math_optimizations) "
"fsqrt" "fsqrt"
[(set_attr "type" "fpspc") [(set_attr "type" "fpspc")
...@@ -15440,7 +15440,7 @@ ...@@ -15440,7 +15440,7 @@
[(set (match_operand:XF 0 "register_operand" "=f") [(set (match_operand:XF 0 "register_operand" "=f")
(sqrt:XF (float_extend:XF (sqrt:XF (float_extend:XF
(match_operand:DF 1 "register_operand" "0"))))] (match_operand:DF 1 "register_operand" "0"))))]
"!TARGET_64BIT && TARGET_80387 && !TARGET_NO_FANCY_MATH_387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && !TARGET_NO_FANCY_MATH_387"
"fsqrt" "fsqrt"
[(set_attr "type" "fpspc") [(set_attr "type" "fpspc")
(set_attr "mode" "XF") (set_attr "mode" "XF")
...@@ -15460,7 +15460,7 @@ ...@@ -15460,7 +15460,7 @@
[(set (match_operand:XF 0 "register_operand" "=f") [(set (match_operand:XF 0 "register_operand" "=f")
(sqrt:XF (float_extend:XF (sqrt:XF (float_extend:XF
(match_operand:SF 1 "register_operand" "0"))))] (match_operand:SF 1 "register_operand" "0"))))]
"!TARGET_64BIT && TARGET_80387 && !TARGET_NO_FANCY_MATH_387" "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && !TARGET_NO_FANCY_MATH_387"
"fsqrt" "fsqrt"
[(set_attr "type" "fpspc") [(set_attr "type" "fpspc")
(set_attr "mode" "XF") (set_attr "mode" "XF")
...@@ -15508,7 +15508,7 @@ ...@@ -15508,7 +15508,7 @@
(define_insn "sinxf2" (define_insn "sinxf2"
[(set (match_operand:XF 0 "register_operand" "=f") [(set (match_operand:XF 0 "register_operand" "=f")
(unspec:XF [(match_operand:XF 1 "register_operand" "0")] UNSPEC_SIN))] (unspec:XF [(match_operand:XF 1 "register_operand" "0")] UNSPEC_SIN))]
"!TARGET_64BIT && TARGET_80387 && !TARGET_NO_FANCY_MATH_387 "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && !TARGET_NO_FANCY_MATH_387
&& flag_unsafe_math_optimizations" && flag_unsafe_math_optimizations"
"fsin" "fsin"
[(set_attr "type" "fpspc") [(set_attr "type" "fpspc")
...@@ -15555,7 +15555,7 @@ ...@@ -15555,7 +15555,7 @@
(define_insn "cosxf2" (define_insn "cosxf2"
[(set (match_operand:XF 0 "register_operand" "=f") [(set (match_operand:XF 0 "register_operand" "=f")
(unspec:XF [(match_operand:XF 1 "register_operand" "0")] UNSPEC_COS))] (unspec:XF [(match_operand:XF 1 "register_operand" "0")] UNSPEC_COS))]
"!TARGET_64BIT && ! TARGET_NO_FANCY_MATH_387 && TARGET_80387 "!TARGET_128BIT_LONG_DOUBLE && ! TARGET_NO_FANCY_MATH_387 && TARGET_80387
&& flag_unsafe_math_optimizations" && flag_unsafe_math_optimizations"
"fcos" "fcos"
[(set_attr "type" "fpspc") [(set_attr "type" "fpspc")
...@@ -16975,7 +16975,7 @@ ...@@ -16975,7 +16975,7 @@
(if_then_else:XF (match_operand 1 "comparison_operator" "") (if_then_else:XF (match_operand 1 "comparison_operator" "")
(match_operand:XF 2 "register_operand" "") (match_operand:XF 2 "register_operand" "")
(match_operand:XF 3 "register_operand" "")))] (match_operand:XF 3 "register_operand" "")))]
"!TARGET_64BIT && TARGET_CMOVE" "!TARGET_128BIT_LONG_DOUBLE && TARGET_CMOVE"
"if (! ix86_expand_fp_movcc (operands)) FAIL; DONE;") "if (! ix86_expand_fp_movcc (operands)) FAIL; DONE;")
(define_expand "movtfcc" (define_expand "movtfcc"
...@@ -16992,7 +16992,7 @@ ...@@ -16992,7 +16992,7 @@
[(reg 17) (const_int 0)]) [(reg 17) (const_int 0)])
(match_operand:XF 2 "register_operand" "f,0") (match_operand:XF 2 "register_operand" "f,0")
(match_operand:XF 3 "register_operand" "0,f")))] (match_operand:XF 3 "register_operand" "0,f")))]
"!TARGET_64BIT && TARGET_CMOVE" "!TARGET_128BIT_LONG_DOUBLE && TARGET_CMOVE"
"@ "@
fcmov%F1\t{%2, %0|%0, %2} fcmov%F1\t{%2, %0|%0, %2}
fcmov%f1\t{%3, %0|%0, %3}" fcmov%f1\t{%3, %0|%0, %3}"
......
...@@ -8242,22 +8242,33 @@ the published application binary interface specifications for the 386 ...@@ -8242,22 +8242,33 @@ the published application binary interface specifications for the 386
and will not be binary compatible with structures in code compiled and will not be binary compatible with structures in code compiled
without that switch. without that switch.
@item -m96bit-long-double
@item -m128bit-long-double @item -m128bit-long-double
@opindex m96bit-long-double
@opindex m128bit-long-double @opindex m128bit-long-double
Control the size of @code{long double} type. i386 application binary interface These switches control the size of @code{long double} type. The i386
specify the size to be 12 bytes, while modern architectures (Pentium and newer) application binary interface specifies the size to be 96 bits,
prefer @code{long double} aligned to 8 or 16 byte boundary. This is so @option{-m96bit-long-double} is the default in 32 bit mode.
impossible to reach with 12 byte long doubles in the array accesses.
Modern architectures (Pentium and newer) would prefer @code{long double}
to be aligned to an 8 or 16 byte boundary. In arrays or structures
conforming to the ABI, this would not be possible. So specifying a
@option{-m128bit-long-double} will align @code{long double}
to a 16 byte boundary by padding the @code{long double} with an additional
32 bit zero.
In the x86-64 compiler, @option{-m128bit-long-double} is the default choice as
its ABI specifies that @code{long double} is to be aligned on 16 byte boundary.
Notice that neither of these options enable any extra precision over the x87
standard of 80 bits for a @code{long double}.
@strong{Warning:} if you use the @option{-m128bit-long-double} switch, the @strong{Warning:} if you override the default value for your target ABI, the
structures and arrays containing @code{long double} will change their size as structures and arrays containing @code{long double} will change their size as
well as function calling convention for function taking @code{long double} well as function calling convention for function taking @code{long double}
will be modified. will be modified. Hence they will not be binary compatible with arrays or
structures in code compiled without that switch.
@item -m96bit-long-double
@opindex m96bit-long-double
Set the size of @code{long double} to 96 bits as required by the i386
application binary interface. This is the default.
@item -msvr3-shlib @item -msvr3-shlib
@itemx -mno-svr3-shlib @itemx -mno-svr3-shlib
......
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