OSDN Git Service

PR optimization/4490
[pf3gnuchains/gcc-fork.git] / gcc / config / i386 / i386.md
index b255df2..9731d19 100644 (file)
   [(set (reg:CC 17)
        (compare:CC (match_operand:XF 0 "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_op1 = operands[1];
        (compare:CCFP
          (match_operand:XF 0 "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);"
   [(set_attr "type" "fcmp")
    (set_attr "mode" "XF")])
             (match_operand:XF 1 "register_operand" "f")
             (match_operand:XF 2 "register_operand" "f"))]
          UNSPEC_FNSTSW))]
-  "!TARGET_64BIT && TARGET_80387"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
   "* return output_fp_compare (insn, operands, 2, 0);"
   [(set_attr "type" "multi")
    (set_attr "mode" "XF")])
 (define_expand "movxf"
   [(set (match_operand:XF 0 "nonimmediate_operand" "")
        (match_operand:XF 1 "general_operand" ""))]
-  "!TARGET_64BIT"
+  "!TARGET_128BIT_LONG_DOUBLE"
   "ix86_expand_move (XFmode, operands); DONE;")
 
 (define_expand "movtf"
 (define_insn "*pushxf_nointeger"
   [(set (match_operand:XF 0 "push_operand" "=X,X,X")
        (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.  */
   abort ();
 (define_insn "*pushxf_integer"
   [(set (match_operand:XF 0 "push_operand" "=<,<")
        (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.  */
   abort ();
 (define_split
   [(set (match_operand:XF 0 "push_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 (mem:XF (reg:SI 7)) (match_dup 1))])
 
 (define_insn "*movxf_nointeger"
   [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m,f,*r,o")
        (match_operand:XF 1 "general_operand" "fm,f,G,*roF,F*r"))]
-  "!TARGET_64BIT
+  "!TARGET_128BIT_LONG_DOUBLE
    && optimize_size
    && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)
    && (reload_in_progress || reload_completed
 (define_insn "*movxf_integer"
   [(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"))]
-  "!TARGET_64BIT
+  "!TARGET_128BIT_LONG_DOUBLE
    && !optimize_size
    && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)
    && (reload_in_progress || reload_completed
 (define_split
   [(set (match_operand:XF 0 "push_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 (mem:XF (reg:SI 7)) (float_extend:XF (match_dup 1)))])
 
 (define_split
   [(set (match_operand:XF 0 "push_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 (mem:DF (reg:SI 7)) (float_extend:XF (match_dup 1)))])
 
 (define_expand "extendsfxf2"
   [(set (match_operand:XF 0 "nonimmediate_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
      are LEGITIMATE_CONSTANT_P.  */
 (define_insn "*extendsfxf2_1"
   [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m")
         (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)"
 {
   switch (which_alternative)
 (define_expand "extenddfxf2"
   [(set (match_operand:XF 0 "nonimmediate_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
      are LEGITIMATE_CONSTANT_P.  */
 (define_insn "*extenddfxf2_1"
   [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m")
         (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)"
 {
   switch (which_alternative)
                   (float_truncate:SF
                    (match_operand:XF 1 "register_operand" "")))
              (clobber (match_dup 2))])]
-  "!TARGET_64BIT && TARGET_80387"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
   "operands[2] = assign_386_stack_local (SFmode, 0);")
 
 (define_insn "*truncxfsf2_1"
        (float_truncate:SF
         (match_operand:XF 1 "register_operand" "f,f,f,f")))
    (clobber (match_operand:SF 2 "memory_operand" "=X,m,m,m"))]
-  "!TARGET_64BIT && TARGET_80387"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
 {
   switch (which_alternative)
     {
   [(set (match_operand:SF 0 "memory_operand" "=m")
        (float_truncate:SF
         (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])))
     return "fstp%z0\t%y0";
                   (float_truncate:DF
                    (match_operand:XF 1 "register_operand" "")))
              (clobber (match_dup 2))])]
-  "!TARGET_64BIT && TARGET_80387"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
   "operands[2] = assign_386_stack_local (DFmode, 0);")
 
 (define_insn "*truncxfdf2_1"
        (float_truncate:DF
         (match_operand:XF 1 "register_operand" "f,f,f,f")))
    (clobber (match_operand:DF 2 "memory_operand" "=X,m,m,m"))]
-  "!TARGET_64BIT && TARGET_80387"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
 {
   switch (which_alternative)
     {
   [(set (match_operand:DF 0 "memory_operand" "=m")
        (float_truncate:DF
          (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])))
     return "fstp%z0\t%y0";
 (define_expand "fix_truncxfdi2"
   [(set (match_operand:DI 0 "nonimmediate_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_truncxfsi2"
   [(set (match_operand:SI 0 "nonimmediate_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_truncxfhi2"
   [(set (match_operand:HI 0 "nonimmediate_operand" "")
         (fix:HI (match_operand:XF 1 "register_operand" "")))]
-  "!TARGET_64BIT && TARGET_80387"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
   "")
 
 (define_expand "fix_trunctfhi2"
 (define_insn "floathixf2"
   [(set (match_operand:XF 0 "register_operand" "=f,f")
        (float:XF (match_operand:HI 1 "nonimmediate_operand" "m,r")))]
-  "!TARGET_64BIT && TARGET_80387"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
   "@
    fild%z1\t%1
    #"
 (define_insn "floatsixf2"
   [(set (match_operand:XF 0 "register_operand" "=f,f")
        (float:XF (match_operand:SI 1 "nonimmediate_operand" "m,r")))]
-  "!TARGET_64BIT && TARGET_80387"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
   "@
    fild%z1\t%1
    #"
 (define_insn "floatdixf2"
   [(set (match_operand:XF 0 "register_operand" "=f,f")
        (float:XF (match_operand:DI 1 "nonimmediate_operand" "m,r")))]
-  "!TARGET_64BIT && TARGET_80387"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
   "@
    fild%z1\t%1
    #"
   [(set (match_operand:XF 0 "register_operand" "")
        (plus:XF (match_operand:XF 1 "register_operand" "")
                 (match_operand:XF 2 "register_operand" "")))]
-  "!TARGET_64BIT && TARGET_80387"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
   "")
 
 (define_expand "addtf3"
   [(set (match_operand:XF 0 "register_operand" "")
        (minus:XF (match_operand:XF 1 "register_operand" "")
                  (match_operand:XF 2 "register_operand" "")))]
-  "!TARGET_64BIT && TARGET_80387"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
   "")
 
 (define_expand "subtf3"
   [(set (match_operand:XF 0 "register_operand" "")
        (mult:XF (match_operand:XF 1 "register_operand" "")
                 (match_operand:XF 2 "register_operand" "")))]
-  "!TARGET_64BIT && TARGET_80387"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
   "")
 
 (define_expand "multf3"
   [(set (match_operand:XF 0 "register_operand" "")
        (div:XF (match_operand:XF 1 "register_operand" "")
                (match_operand:XF 2 "register_operand" "")))]
-  "!TARGET_64BIT && TARGET_80387"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
   "")
 
 (define_expand "divtf3"
   [(parallel [(set (match_operand:XF 0 "nonimmediate_operand" "")
                   (neg:XF (match_operand:XF 1 "nonimmediate_operand" "")))
              (clobber (reg:CC 17))])]
-  "!TARGET_64BIT && TARGET_80387"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
   "ix86_expand_unary_operator (NEG, XFmode, operands); DONE;")
 
 (define_expand "negtf2"
   [(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,rm#f")
        (neg:XF (match_operand:XF 1 "nonimmediate_operand" "0,0")))
    (clobber (reg:CC 17))]
-  "!TARGET_64BIT && TARGET_80387
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387
    && ix86_unary_operator_ok (NEG, XFmode, operands)"
   "#")
 
 (define_insn "*negxf2_1"
   [(set (match_operand:XF 0 "register_operand" "=f")
        (neg:XF (match_operand:XF 1 "register_operand" "0")))]
-  "!TARGET_64BIT && TARGET_80387 && reload_completed"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && reload_completed"
   "fchs"
   [(set_attr "type" "fsgn")
    (set_attr "mode" "XF")
   [(set (match_operand:XF 0 "register_operand" "=f")
        (neg:XF (float_extend:XF
                  (match_operand:DF 1 "register_operand" "0"))))]
-  "!TARGET_64BIT && TARGET_80387"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
   "fchs"
   [(set_attr "type" "fsgn")
    (set_attr "mode" "XF")
   [(set (match_operand:XF 0 "register_operand" "=f")
        (neg:XF (float_extend:XF
                  (match_operand:SF 1 "register_operand" "0"))))]
-  "!TARGET_64BIT && TARGET_80387"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
   "fchs"
   [(set_attr "type" "fsgn")
    (set_attr "mode" "XF")
   [(parallel [(set (match_operand:XF 0 "nonimmediate_operand" "")
                   (neg:XF (match_operand:XF 1 "nonimmediate_operand" "")))
              (clobber (reg:CC 17))])]
-  "!TARGET_64BIT && TARGET_80387"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
   "ix86_expand_unary_operator (ABS, XFmode, operands); DONE;")
 
 (define_expand "abstf2"
   [(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,rm#f")
        (abs:XF (match_operand:XF 1 "nonimmediate_operand" "0,0")))
    (clobber (reg:CC 17))]
-  "!TARGET_64BIT && TARGET_80387
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387
    && ix86_unary_operator_ok (ABS, XFmode, operands)"
   "#")
 
 (define_insn "*absxf2_1"
   [(set (match_operand:XF 0 "register_operand" "=f")
        (abs:XF (match_operand:XF 1 "register_operand" "0")))]
-  "!TARGET_64BIT && TARGET_80387 && reload_completed"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && reload_completed"
   "fabs"
   [(set_attr "type" "fsgn")
    (set_attr "mode" "DF")])
   [(set (match_operand:XF 0 "register_operand" "=f")
        (abs:XF (float_extend:XF
          (match_operand:DF 1 "register_operand" "0"))))]
-  "!TARGET_64BIT && TARGET_80387"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
   "fabs"
   [(set_attr "type" "fsgn")
    (set_attr "mode" "XF")])
   [(set (match_operand:XF 0 "register_operand" "=f")
        (abs:XF (float_extend:XF
          (match_operand:SF 1 "register_operand" "0"))))]
-  "!TARGET_64BIT && TARGET_80387"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
   "fabs"
   [(set_attr "type" "fsgn")
    (set_attr "mode" "XF")])
        (match_operator:XF 3 "binary_fp_operator"
                        [(match_operand:XF 1 "register_operand" "%0")
                         (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'"
   "* return output_387_binary_op (insn, operands);"
   [(set (attr "type") 
        (match_operator:XF 3 "binary_fp_operator"
                        [(match_operand:XF 1 "register_operand" "0,f")
                         (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'"
   "* return output_387_binary_op (insn, operands);"
   [(set (attr "type") 
        (match_operator:XF 3 "binary_fp_operator"
           [(float:XF (match_operand:SI 1 "nonimmediate_operand" "m,?r"))
            (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);"
   [(set (attr "type") 
         (cond [(match_operand:XF 3 "mult_operator" "") 
        (match_operator:XF 3 "binary_fp_operator"
          [(match_operand:XF 1 "register_operand" "0,0")
           (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);"
   [(set (attr "type") 
         (cond [(match_operand:XF 3 "mult_operator" "") 
        (match_operator:XF 3 "binary_fp_operator"
           [(float_extend:XF (match_operand 1 "nonimmediate_operand" "fm,0"))
            (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);"
   [(set (attr "type") 
         (cond [(match_operand:XF 3 "mult_operator" "") 
          [(match_operand:XF 1 "register_operand" "0,f")
           (float_extend:XF
            (match_operand 2 "nonimmediate_operand" "fm,0"))]))]
-  "!TARGET_64BIT && TARGET_80387"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
   "* return output_387_binary_op (insn, operands);"
   [(set (attr "type") 
         (cond [(match_operand:XF 3 "mult_operator" "") 
            (match_operand 1 "register_operand" "0,f"))
           (float_extend:XF
            (match_operand 2 "nonimmediate_operand" "fm,0"))]))]
-  "!TARGET_64BIT && TARGET_80387"
+  "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387"
   "* return output_387_binary_op (insn, operands);"
   [(set (attr "type") 
         (cond [(match_operand:XF 3 "mult_operator" "") 
 (define_insn "sqrtxf2"
   [(set (match_operand:XF 0 "register_operand" "=f")
        (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) "
   "fsqrt"
   [(set_attr "type" "fpspc")
   [(set (match_operand:XF 0 "register_operand" "=f")
        (sqrt:XF (float_extend:XF
                  (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"
   [(set_attr "type" "fpspc")
    (set_attr "mode" "XF")
   [(set (match_operand:XF 0 "register_operand" "=f")
        (sqrt:XF (float_extend:XF
                  (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"
   [(set_attr "type" "fpspc")
    (set_attr "mode" "XF")
 (define_insn "sinxf2"
   [(set (match_operand:XF 0 "register_operand" "=f")
        (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"
   "fsin"
   [(set_attr "type" "fpspc")
 (define_insn "cosxf2"
   [(set (match_operand:XF 0 "register_operand" "=f")
        (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"
   "fcos"
   [(set_attr "type" "fpspc")
        (if_then_else:XF (match_operand 1 "comparison_operator" "")
                         (match_operand:XF 2 "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;")
 
 (define_expand "movtfcc"
                                [(reg 17) (const_int 0)])
                      (match_operand:XF 2 "register_operand" "f,0")
                      (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{%3, %0|%0, %3}"