UNSPEC_FPATAN))
(clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
- && flag_unsafe_math_optimizations"
+ && flag_unsafe_math_optimizations && !TARGET_128BIT_LONG_DOUBLE"
"fpatan"
[(set_attr "type" "fpspc")
(set_attr "mode" "XF")])
UNSPEC_FPATAN))
(clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
- && flag_unsafe_math_optimizations"
+ && flag_unsafe_math_optimizations && TARGET_128BIT_LONG_DOUBLE"
"fpatan"
[(set_attr "type" "fpspc")
(set_attr "mode" "XF")])
(define_insn "*fyl2x_sfxf3"
[(parallel [(set (match_operand:SF 0 "register_operand" "=f")
(unspec:SF [(match_operand:SF 2 "register_operand" "0")
- (match_operand:XF 1 "register_operand" "u")]
+ (match_operand 1 "register_operand" "u")]
UNSPEC_FYL2X))
(clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
- && flag_unsafe_math_optimizations"
+ && flag_unsafe_math_optimizations
+ && GET_MODE (operands[1]) == TARGET_128BIT_LONG_DOUBLE ? TFmode : XFmode"
"fyl2x"
[(set_attr "type" "fpspc")
(set_attr "mode" "SF")])
(define_insn "*fyl2x_dfxf3"
[(parallel [(set (match_operand:DF 0 "register_operand" "=f")
(unspec:DF [(match_operand:DF 2 "register_operand" "0")
- (match_operand:XF 1 "register_operand" "u")]
+ (match_operand 1 "register_operand" "u")]
UNSPEC_FYL2X))
(clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
- && flag_unsafe_math_optimizations"
+ && flag_unsafe_math_optimizations
+ && GET_MODE (operands[1]) == TARGET_128BIT_LONG_DOUBLE ? TFmode : XFmode"
"fyl2x"
[(set_attr "type" "fpspc")
(set_attr "mode" "DF")])
UNSPEC_FYL2X))
(clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
- && flag_unsafe_math_optimizations"
+ && flag_unsafe_math_optimizations && !TARGET_128BIT_LONG_DOUBLE"
"fyl2x"
[(set_attr "type" "fpspc")
(set_attr "mode" "XF")])
(define_insn "*fyl2x_tfxf3"
[(parallel [(set (match_operand:TF 0 "register_operand" "=f")
(unspec:TF [(match_operand:TF 2 "register_operand" "0")
- (match_operand:XF 1 "register_operand" "u")]
+ (match_operand:TF 1 "register_operand" "u")]
UNSPEC_FYL2X))
(clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
- && flag_unsafe_math_optimizations"
+ && flag_unsafe_math_optimizations && TARGET_128BIT_LONG_DOUBLE"
"fyl2x"
[(set_attr "type" "fpspc")
(set_attr "mode" "XF")])
{
rtx temp;
- operands[2] = gen_reg_rtx (XFmode);
+ operands[2] = gen_reg_rtx (TARGET_128BIT_LONG_DOUBLE ? TFmode : XFmode);
temp = standard_80387_constant_rtx (4); /* fldln2 */
emit_move_insn (operands[2], temp);
})
{
rtx temp;
- operands[2] = gen_reg_rtx (XFmode);
+ operands[2] = gen_reg_rtx (TARGET_128BIT_LONG_DOUBLE ? TFmode : XFmode);
temp = standard_80387_constant_rtx (4); /* fldln2 */
emit_move_insn (operands[2], temp);
})
(match_dup 2)] UNSPEC_FYL2X))
(clobber (match_dup 2))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
- && flag_unsafe_math_optimizations"
+ && flag_unsafe_math_optimizations && !TARGET_128BIT_LONG_DOUBLE"
{
rtx temp;
(match_dup 2)] UNSPEC_FYL2X))
(clobber (match_dup 2))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
- && flag_unsafe_math_optimizations"
+ && flag_unsafe_math_optimizations && TARGET_128BIT_LONG_DOUBLE"
{
rtx temp;
- operands[2] = gen_reg_rtx (XFmode);
+ operands[2] = gen_reg_rtx (TFmode);
temp = standard_80387_constant_rtx (4); /* fldln2 */
emit_move_insn (operands[2], temp);
})
(define_insn "*fscale_sfxf3"
[(parallel [(set (match_operand:SF 0 "register_operand" "=f")
- (unspec:SF [(match_operand:XF 2 "register_operand" "0")
- (match_operand:XF 1 "register_operand" "u")]
+ (unspec:SF [(match_operand 2 "register_operand" "0")
+ (match_operand 1 "register_operand" "u")]
UNSPEC_FSCALE))
(clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
- && flag_unsafe_math_optimizations"
+ && flag_unsafe_math_optimizations
+ && GET_MODE (operands[1]) == TARGET_128BIT_LONG_DOUBLE ? TFmode : XFmode
+ && GET_MODE (operands[2]) == TARGET_128BIT_LONG_DOUBLE ? TFmode : XFmode"
"fscale\;fstp\t%y1"
[(set_attr "type" "fpspc")
(set_attr "mode" "SF")])
(define_insn "*fscale_dfxf3"
[(parallel [(set (match_operand:DF 0 "register_operand" "=f")
- (unspec:DF [(match_operand:XF 2 "register_operand" "0")
- (match_operand:XF 1 "register_operand" "u")]
+ (unspec:DF [(match_operand 2 "register_operand" "0")
+ (match_operand 1 "register_operand" "u")]
UNSPEC_FSCALE))
(clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
- && flag_unsafe_math_optimizations"
+ && flag_unsafe_math_optimizations
+ && GET_MODE (operands[1]) == TARGET_128BIT_LONG_DOUBLE ? TFmode : XFmode
+ && GET_MODE (operands[2]) == TARGET_128BIT_LONG_DOUBLE ? TFmode : XFmode"
"fscale\;fstp\t%y1"
[(set_attr "type" "fpspc")
(set_attr "mode" "DF")])
UNSPEC_FSCALE))
(clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
- && flag_unsafe_math_optimizations"
+ && flag_unsafe_math_optimizations && !TARGET_128BIT_LONG_DOUBLE"
+ "fscale\;fstp\t%y1"
+ [(set_attr "type" "fpspc")
+ (set_attr "mode" "XF")])
+
+(define_insn "*fscale_tf3"
+ [(parallel [(set (match_operand:TF 0 "register_operand" "=f")
+ (unspec:TF [(match_operand:TF 2 "register_operand" "0")
+ (match_operand:TF 1 "register_operand" "u")]
+ UNSPEC_FSCALE))
+ (clobber (match_dup 1))])]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+ && flag_unsafe_math_optimizations && TARGET_128BIT_LONG_DOUBLE"
"fscale\;fstp\t%y1"
[(set_attr "type" "fpspc")
(set_attr "mode" "XF")])
(unspec:XF [(match_operand:XF 1 "register_operand" "0")]
UNSPEC_FRNDINT))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
- && flag_unsafe_math_optimizations"
+ && flag_unsafe_math_optimizations && !TARGET_128BIT_LONG_DOUBLE"
+ "frndint"
+ [(set_attr "type" "fpspc")
+ (set_attr "mode" "XF")])
+
+(define_insn "*frndinttf2"
+ [(set (match_operand:TF 0 "register_operand" "=f")
+ (unspec:TF [(match_operand:TF 1 "register_operand" "0")]
+ UNSPEC_FRNDINT))]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+ && flag_unsafe_math_optimizations && TARGET_128BIT_LONG_DOUBLE"
"frndint"
[(set_attr "type" "fpspc")
(set_attr "mode" "XF")])
(unspec:XF [(match_operand:XF 1 "register_operand" "0")]
UNSPEC_F2XM1))]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
- && flag_unsafe_math_optimizations"
+ && flag_unsafe_math_optimizations && !TARGET_128BIT_LONG_DOUBLE"
+ "f2xm1"
+ [(set_attr "type" "fpspc")
+ (set_attr "mode" "XF")])
+
+(define_insn "*f2xm1tf2"
+ [(set (match_operand:TF 0 "register_operand" "=f")
+ (unspec:TF [(match_operand:TF 1 "register_operand" "0")]
+ UNSPEC_F2XM1))]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+ && flag_unsafe_math_optimizations && TARGET_128BIT_LONG_DOUBLE"
"f2xm1"
[(set_attr "type" "fpspc")
(set_attr "mode" "XF")])
rtx temp;
int i;
+ if (TARGET_128BIT_LONG_DOUBLE)
+ {
+ emit_insn (gen_expsf2_tf (operands[0], operands[1]));
+ DONE;
+ }
+
for (i=2; i<10; i++)
operands[i] = gen_reg_rtx (XFmode);
temp = standard_80387_constant_rtx (5); /* fldl2e */
emit_move_insn (operands[8], CONST1_RTX (XFmode)); /* fld1 */
})
+(define_expand "expsf2_tf"
+ [(set (match_dup 2)
+ (float_extend:TF (match_operand:SF 1 "register_operand" "")))
+ (set (match_dup 4) (mult:TF (match_dup 2) (match_dup 3)))
+ (set (match_dup 5) (unspec:TF [(match_dup 4)] UNSPEC_FRNDINT))
+ (set (match_dup 6) (minus:TF (match_dup 4) (match_dup 5)))
+ (set (match_dup 7) (unspec:TF [(match_dup 6)] UNSPEC_F2XM1))
+ (set (match_dup 9) (plus:TF (match_dup 7) (match_dup 8)))
+ (parallel [(set (match_operand:SF 0 "register_operand" "")
+ (unspec:SF [(match_dup 9) (match_dup 5)] UNSPEC_FSCALE))
+ (clobber (match_dup 5))])]
+ ""
+{
+ rtx temp;
+ int i;
+
+ for (i=2; i<10; i++)
+ operands[i] = gen_reg_rtx (TFmode);
+ temp = standard_80387_constant_rtx (5); /* fldl2e */
+ emit_move_insn (operands[3], temp);
+ emit_move_insn (operands[8], CONST1_RTX (TFmode)); /* fld1 */
+})
+
(define_expand "expdf2"
[(set (match_dup 2)
(float_extend:XF (match_operand:DF 1 "register_operand" "")))
rtx temp;
int i;
+ if (TARGET_128BIT_LONG_DOUBLE)
+ {
+ emit_insn (gen_expdf2_tf (operands[0], operands[1]));
+ DONE;
+ }
+
for (i=2; i<10; i++)
operands[i] = gen_reg_rtx (XFmode);
temp = standard_80387_constant_rtx (5); /* fldl2e */
emit_move_insn (operands[8], CONST1_RTX (XFmode)); /* fld1 */
})
+
+(define_expand "expdf2_tf"
+ [(set (match_dup 2)
+ (float_extend:TF (match_operand:DF 1 "register_operand" "")))
+ (set (match_dup 4) (mult:TF (match_dup 2) (match_dup 3)))
+ (set (match_dup 5) (unspec:TF [(match_dup 4)] UNSPEC_FRNDINT))
+ (set (match_dup 6) (minus:TF (match_dup 4) (match_dup 5)))
+ (set (match_dup 7) (unspec:TF [(match_dup 6)] UNSPEC_F2XM1))
+ (set (match_dup 9) (plus:TF (match_dup 7) (match_dup 8)))
+ (parallel [(set (match_operand:DF 0 "register_operand" "")
+ (unspec:DF [(match_dup 9) (match_dup 5)] UNSPEC_FSCALE))
+ (clobber (match_dup 5))])]
+ ""
+{
+ rtx temp;
+ int i;
+
+ for (i=2; i<10; i++)
+ operands[i] = gen_reg_rtx (TFmode);
+ temp = standard_80387_constant_rtx (5); /* fldl2e */
+ emit_move_insn (operands[3], temp);
+ emit_move_insn (operands[8], CONST1_RTX (TFmode)); /* fld1 */
+})
+
(define_expand "expxf2"
[(set (match_dup 3) (mult:XF (match_operand:XF 1 "register_operand" "")
(match_dup 2)))
(unspec:XF [(match_dup 8) (match_dup 4)] UNSPEC_FSCALE))
(clobber (match_dup 4))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
- && flag_unsafe_math_optimizations"
+ && flag_unsafe_math_optimizations && !TARGET_128BIT_LONG_DOUBLE"
{
rtx temp;
int i;
emit_move_insn (operands[2], CONST1_RTX (SFmode)); /* fld1 */
})
+(define_expand "exptf2"
+ [(set (match_dup 3) (mult:TF (match_operand:TF 1 "register_operand" "")
+ (match_dup 2)))
+ (set (match_dup 4) (unspec:TF [(match_dup 3)] UNSPEC_FRNDINT))
+ (set (match_dup 5) (minus:TF (match_dup 3) (match_dup 4)))
+ (set (match_dup 6) (unspec:TF [(match_dup 5)] UNSPEC_F2XM1))
+ (set (match_dup 8) (plus:TF (match_dup 6) (match_dup 7)))
+ (parallel [(set (match_operand:TF 0 "register_operand" "")
+ (unspec:TF [(match_dup 8) (match_dup 4)] UNSPEC_FSCALE))
+ (clobber (match_dup 4))])]
+ "! TARGET_NO_FANCY_MATH_387 && TARGET_80387
+ && flag_unsafe_math_optimizations && TARGET_128BIT_LONG_DOUBLE"
+{
+ rtx temp;
+ int i;
+
+ for (i=2; i<9; i++)
+ operands[i] = gen_reg_rtx (TFmode);
+ temp = standard_80387_constant_rtx (5); /* fldl2e */
+ emit_move_insn (operands[2], temp);
+ emit_move_insn (operands[7], CONST1_RTX (TFmode)); /* fld1 */
+})
+
(define_expand "atandf2"
[(parallel [(set (match_operand:DF 0 "register_operand" "")
(unspec:DF [(match_dup 2)
UNSPEC_FPATAN))
(clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
- && flag_unsafe_math_optimizations"
+ && flag_unsafe_math_optimizations && !TARGET_128BIT_LONG_DOUBLE"
{
operands[2] = gen_reg_rtx (XFmode);
emit_move_insn (operands[2], CONST1_RTX (XFmode)); /* fld1 */
UNSPEC_FPATAN))
(clobber (match_dup 1))])]
"! TARGET_NO_FANCY_MATH_387 && TARGET_80387
- && flag_unsafe_math_optimizations"
+ && flag_unsafe_math_optimizations && TARGET_128BIT_LONG_DOUBLE"
{
operands[2] = gen_reg_rtx (TFmode);
emit_move_insn (operands[2], CONST1_RTX (TFmode)); /* fld1 */