{
if (TARGET_FISTTP)
{
- emit_insn (gen_fix_truncdi_fisttp_i387_1 (operands[0], operands[1]));
+ emit_insn (gen_fix_truncdi_i387_fisttp (operands[0], operands[1]));
DONE;
}
})
if (TARGET_FISTTP
&& !(TARGET_64BIT && SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH))
{
- emit_insn (gen_fix_truncdi_fisttp_i387_1 (operands[0], operands[1]));
+ emit_insn (gen_fix_truncdi_i387_fisttp (operands[0], operands[1]));
DONE;
}
if (TARGET_64BIT && SSE_FLOAT_MODE_P (<MODE>mode))
{
if (TARGET_FISTTP)
{
- emit_insn (gen_fix_truncsi_fisttp_i387_1 (operands[0], operands[1]));
+ emit_insn (gen_fix_truncsi_i387_fisttp (operands[0], operands[1]));
DONE;
}
})
if (TARGET_FISTTP
&& !(SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH))
{
- emit_insn (gen_fix_truncsi_fisttp_i387_1 (operands[0], operands[1]));
+ emit_insn (gen_fix_truncsi_i387_fisttp (operands[0], operands[1]));
DONE;
}
if (SSE_FLOAT_MODE_P (<MODE>mode))
{
if (TARGET_FISTTP)
{
- emit_insn (gen_fix_trunchi_fisttp_i387_1 (operands[0], operands[1]));
+ emit_insn (gen_fix_trunchi_i387_fisttp (operands[0], operands[1]));
DONE;
}
})
(zero_extend:DI
(unsigned_fix:SI
(match_operand:MODEF 1 "nonimmediate_operand" "vm"))))]
- "TARGET_64BIT && TARGET_AVX512F"
+ "TARGET_64BIT && TARGET_AVX512F && TARGET_SSE_MATH"
"vcvtt<ssemodesuffix>2usi\t{%1, %k0|%k0, %1}"
[(set_attr "type" "sseicvt")
(set_attr "prefix" "evex")
[(set (match_dup 2) (match_dup 1))
(set (match_dup 0) (fix:SWI48 (match_dup 2)))])
-(define_insn_and_split "fix_trunc<mode>_fisttp_i387_1"
- [(set (match_operand:SWI248x 0 "nonimmediate_operand")
- (fix:SWI248x (match_operand 1 "register_operand")))]
- "X87_FLOAT_MODE_P (GET_MODE (operands[1]))
- && TARGET_FISTTP
- && !((SSE_FLOAT_MODE_P (GET_MODE (operands[1]))
- && (TARGET_64BIT || <MODE>mode != DImode))
- && TARGET_SSE_MATH)
- && can_create_pseudo_p ()"
- "#"
- "&& 1"
- [(const_int 0)]
-{
- if (memory_operand (operands[0], VOIDmode))
- emit_insn (gen_fix_trunc<mode>_i387_fisttp (operands[0], operands[1]));
- else
- {
- operands[2] = assign_386_stack_local (<MODE>mode, SLOT_TEMP);
- emit_insn (gen_fix_trunc<mode>_i387_fisttp_with_temp (operands[0],
- operands[1],
- operands[2]));
- }
- DONE;
-}
- [(set_attr "type" "fisttp")
- (set_attr "mode" "<MODE>")])
-
(define_insn "fix_trunc<mode>_i387_fisttp"
- [(set (match_operand:SWI248x 0 "memory_operand" "=m")
+ [(set (match_operand:SWI248x 0 "nonimmediate_operand" "=m")
(fix:SWI248x (match_operand 1 "register_operand" "f")))
(clobber (match_scratch:XF 2 "=&1f"))]
"X87_FLOAT_MODE_P (GET_MODE (operands[1]))
[(set_attr "type" "fisttp")
(set_attr "mode" "<MODE>")])
-(define_insn "fix_trunc<mode>_i387_fisttp_with_temp"
- [(set (match_operand:SWI248x 0 "nonimmediate_operand" "=m,?r")
- (fix:SWI248x (match_operand 1 "register_operand" "f,f")))
- (clobber (match_operand:SWI248x 2 "memory_operand" "=X,m"))
- (clobber (match_scratch:XF 3 "=&1f,&1f"))]
- "X87_FLOAT_MODE_P (GET_MODE (operands[1]))
- && TARGET_FISTTP
- && !((SSE_FLOAT_MODE_P (GET_MODE (operands[1]))
- && (TARGET_64BIT || <MODE>mode != DImode))
- && TARGET_SSE_MATH)"
- "#"
- [(set_attr "type" "fisttp")
- (set_attr "mode" "<MODE>")])
-
-(define_split
- [(set (match_operand:SWI248x 0 "register_operand")
- (fix:SWI248x (match_operand 1 "register_operand")))
- (clobber (match_operand:SWI248x 2 "memory_operand"))
- (clobber (match_scratch 3))]
- "reload_completed"
- [(parallel [(set (match_dup 2) (fix:SWI248x (match_dup 1)))
- (clobber (match_dup 3))])
- (set (match_dup 0) (match_dup 2))])
-
-(define_split
- [(set (match_operand:SWI248x 0 "memory_operand")
- (fix:SWI248x (match_operand 1 "register_operand")))
- (clobber (match_operand:SWI248x 2 "memory_operand"))
- (clobber (match_scratch 3))]
- "reload_completed"
- [(parallel [(set (match_dup 0) (fix:SWI248x (match_dup 1)))
- (clobber (match_dup 3))])])
-
;; See the comments in i386.h near OPTIMIZE_MODE_SWITCHING for the description
;; of the machinery. Please note the clobber of FLAGS_REG. In i387 control
;; word calculation (inserted by LCM in mode switching pass) a FLAGS_REG
operands[2] = assign_386_stack_local (HImode, SLOT_CW_STORED);
operands[3] = assign_386_stack_local (HImode, SLOT_CW_TRUNC);
- if (memory_operand (operands[0], VOIDmode))
- emit_insn (gen_fix_trunc<mode>_i387 (operands[0], operands[1],
- operands[2], operands[3]));
- else
- {
- operands[4] = assign_386_stack_local (<MODE>mode, SLOT_TEMP);
- emit_insn (gen_fix_trunc<mode>_i387_with_temp (operands[0], operands[1],
- operands[2], operands[3],
- operands[4]));
- }
+
+ emit_insn (gen_fix_trunc<mode>_i387 (operands[0], operands[1],
+ operands[2], operands[3]));
DONE;
}
[(set_attr "type" "fistp")
(set_attr "mode" "<MODE>")])
(define_insn "fix_truncdi_i387"
- [(set (match_operand:DI 0 "memory_operand" "=m")
+ [(set (match_operand:DI 0 "nonimmediate_operand" "=m")
(fix:DI (match_operand 1 "register_operand" "f")))
(use (match_operand:HI 2 "memory_operand" "m"))
(use (match_operand:HI 3 "memory_operand" "m"))
(set_attr "i387_cw" "trunc")
(set_attr "mode" "DI")])
-(define_insn "fix_truncdi_i387_with_temp"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=m,?r")
- (fix:DI (match_operand 1 "register_operand" "f,f")))
- (use (match_operand:HI 2 "memory_operand" "m,m"))
- (use (match_operand:HI 3 "memory_operand" "m,m"))
- (clobber (match_operand:DI 4 "memory_operand" "=X,m"))
- (clobber (match_scratch:XF 5 "=&1f,&1f"))]
- "X87_FLOAT_MODE_P (GET_MODE (operands[1]))
- && !TARGET_FISTTP
- && !(TARGET_64BIT && SSE_FLOAT_MODE_P (GET_MODE (operands[1])))"
- "#"
- [(set_attr "type" "fistp")
- (set_attr "i387_cw" "trunc")
- (set_attr "mode" "DI")])
-
-(define_split
- [(set (match_operand:DI 0 "register_operand")
- (fix:DI (match_operand 1 "register_operand")))
- (use (match_operand:HI 2 "memory_operand"))
- (use (match_operand:HI 3 "memory_operand"))
- (clobber (match_operand:DI 4 "memory_operand"))
- (clobber (match_scratch 5))]
- "reload_completed"
- [(parallel [(set (match_dup 4) (fix:DI (match_dup 1)))
- (use (match_dup 2))
- (use (match_dup 3))
- (clobber (match_dup 5))])
- (set (match_dup 0) (match_dup 4))])
-
-(define_split
- [(set (match_operand:DI 0 "memory_operand")
- (fix:DI (match_operand 1 "register_operand")))
- (use (match_operand:HI 2 "memory_operand"))
- (use (match_operand:HI 3 "memory_operand"))
- (clobber (match_operand:DI 4 "memory_operand"))
- (clobber (match_scratch 5))]
- "reload_completed"
- [(parallel [(set (match_dup 0) (fix:DI (match_dup 1)))
- (use (match_dup 2))
- (use (match_dup 3))
- (clobber (match_dup 5))])])
-
(define_insn "fix_trunc<mode>_i387"
- [(set (match_operand:SWI24 0 "memory_operand" "=m")
+ [(set (match_operand:SWI24 0 "nonimmediate_operand" "=m")
(fix:SWI24 (match_operand 1 "register_operand" "f")))
(use (match_operand:HI 2 "memory_operand" "m"))
(use (match_operand:HI 3 "memory_operand" "m"))]
(set_attr "i387_cw" "trunc")
(set_attr "mode" "<MODE>")])
-(define_insn "fix_trunc<mode>_i387_with_temp"
- [(set (match_operand:SWI24 0 "nonimmediate_operand" "=m,?r")
- (fix:SWI24 (match_operand 1 "register_operand" "f,f")))
- (use (match_operand:HI 2 "memory_operand" "m,m"))
- (use (match_operand:HI 3 "memory_operand" "m,m"))
- (clobber (match_operand:SWI24 4 "memory_operand" "=X,m"))]
- "X87_FLOAT_MODE_P (GET_MODE (operands[1]))
- && !TARGET_FISTTP
- && !SSE_FLOAT_MODE_P (GET_MODE (operands[1]))"
- "#"
- [(set_attr "type" "fistp")
- (set_attr "i387_cw" "trunc")
- (set_attr "mode" "<MODE>")])
-
-(define_split
- [(set (match_operand:SWI24 0 "register_operand")
- (fix:SWI24 (match_operand 1 "register_operand")))
- (use (match_operand:HI 2 "memory_operand"))
- (use (match_operand:HI 3 "memory_operand"))
- (clobber (match_operand:SWI24 4 "memory_operand"))]
- "reload_completed"
- [(parallel [(set (match_dup 4) (fix:SWI24 (match_dup 1)))
- (use (match_dup 2))
- (use (match_dup 3))])
- (set (match_dup 0) (match_dup 4))])
-
-(define_split
- [(set (match_operand:SWI24 0 "memory_operand")
- (fix:SWI24 (match_operand 1 "register_operand")))
- (use (match_operand:HI 2 "memory_operand"))
- (use (match_operand:HI 3 "memory_operand"))
- (clobber (match_operand:SWI24 4 "memory_operand"))]
- "reload_completed"
- [(parallel [(set (match_dup 0) (fix:SWI24 (match_dup 1)))
- (use (match_dup 2))
- (use (match_dup 3))])])
-
(define_insn "x86_fnstcw_1"
[(set (match_operand:HI 0 "memory_operand" "=m")
(unspec:HI [(reg:HI FPCR_REG)] UNSPEC_FSTCW))]
DONE;
})
-(define_insn_and_split "*fistdi2_1"
- [(set (match_operand:DI 0 "nonimmediate_operand")
- (unspec:DI [(match_operand:XF 1 "register_operand")]
- UNSPEC_FIST))]
- "TARGET_USE_FANCY_MATH_387
- && can_create_pseudo_p ()"
- "#"
- "&& 1"
- [(const_int 0)]
-{
- if (memory_operand (operands[0], VOIDmode))
- emit_insn (gen_fistdi2 (operands[0], operands[1]));
- else
- {
- operands[2] = assign_386_stack_local (DImode, SLOT_TEMP);
- emit_insn (gen_fistdi2_with_temp (operands[0], operands[1],
- operands[2]));
- }
- DONE;
-}
- [(set_attr "type" "fpspc")
- (set_attr "mode" "DI")])
-
-(define_insn "fistdi2"
- [(set (match_operand:DI 0 "memory_operand" "=m")
+(define_insn "lrintxfdi2"
+ [(set (match_operand:DI 0 "nonimmediate_operand" "=m")
(unspec:DI [(match_operand:XF 1 "register_operand" "f")]
UNSPEC_FIST))
(clobber (match_scratch:XF 2 "=&1f"))]
[(set_attr "type" "fpspc")
(set_attr "mode" "DI")])
-(define_insn "fistdi2_with_temp"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=m,?r")
- (unspec:DI [(match_operand:XF 1 "register_operand" "f,f")]
- UNSPEC_FIST))
- (clobber (match_operand:DI 2 "memory_operand" "=X,m"))
- (clobber (match_scratch:XF 3 "=&1f,&1f"))]
- "TARGET_USE_FANCY_MATH_387"
- "#"
- [(set_attr "type" "fpspc")
- (set_attr "mode" "DI")])
-
-(define_split
- [(set (match_operand:DI 0 "register_operand")
- (unspec:DI [(match_operand:XF 1 "register_operand")]
- UNSPEC_FIST))
- (clobber (match_operand:DI 2 "memory_operand"))
- (clobber (match_scratch 3))]
- "reload_completed"
- [(parallel [(set (match_dup 2) (unspec:DI [(match_dup 1)] UNSPEC_FIST))
- (clobber (match_dup 3))])
- (set (match_dup 0) (match_dup 2))])
-
-(define_split
- [(set (match_operand:DI 0 "memory_operand")
- (unspec:DI [(match_operand:XF 1 "register_operand")]
- UNSPEC_FIST))
- (clobber (match_operand:DI 2 "memory_operand"))
- (clobber (match_scratch 3))]
- "reload_completed"
- [(parallel [(set (match_dup 0) (unspec:DI [(match_dup 1)] UNSPEC_FIST))
- (clobber (match_dup 3))])])
-
-(define_insn_and_split "*fist<mode>2_1"
- [(set (match_operand:SWI24 0 "register_operand")
- (unspec:SWI24 [(match_operand:XF 1 "register_operand")]
- UNSPEC_FIST))]
- "TARGET_USE_FANCY_MATH_387
- && can_create_pseudo_p ()"
- "#"
- "&& 1"
- [(const_int 0)]
-{
- operands[2] = assign_386_stack_local (<MODE>mode, SLOT_TEMP);
- emit_insn (gen_fist<mode>2_with_temp (operands[0], operands[1],
- operands[2]));
- DONE;
-}
- [(set_attr "type" "fpspc")
- (set_attr "mode" "<MODE>")])
-
-(define_insn "fist<mode>2"
- [(set (match_operand:SWI24 0 "memory_operand" "=m")
+(define_insn "lrintxf<mode>2"
+ [(set (match_operand:SWI24 0 "nonimmediate_operand" "=m")
(unspec:SWI24 [(match_operand:XF 1 "register_operand" "f")]
UNSPEC_FIST))]
"TARGET_USE_FANCY_MATH_387"
[(set_attr "type" "fpspc")
(set_attr "mode" "<MODE>")])
-(define_insn "fist<mode>2_with_temp"
- [(set (match_operand:SWI24 0 "register_operand" "=r")
- (unspec:SWI24 [(match_operand:XF 1 "register_operand" "f")]
- UNSPEC_FIST))
- (clobber (match_operand:SWI24 2 "memory_operand" "=m"))]
- "TARGET_USE_FANCY_MATH_387"
- "#"
- [(set_attr "type" "fpspc")
- (set_attr "mode" "<MODE>")])
-
-(define_split
- [(set (match_operand:SWI24 0 "register_operand")
- (unspec:SWI24 [(match_operand:XF 1 "register_operand")]
- UNSPEC_FIST))
- (clobber (match_operand:SWI24 2 "memory_operand"))]
- "reload_completed"
- [(set (match_dup 2) (unspec:SWI24 [(match_dup 1)] UNSPEC_FIST))
- (set (match_dup 0) (match_dup 2))])
-
-(define_split
- [(set (match_operand:SWI24 0 "memory_operand")
- (unspec:SWI24 [(match_operand:XF 1 "register_operand")]
- UNSPEC_FIST))
- (clobber (match_operand:SWI24 2 "memory_operand"))]
- "reload_completed"
- [(set (match_dup 0) (unspec:SWI24 [(match_dup 1)] UNSPEC_FIST))])
-
-(define_expand "lrintxf<mode>2"
- [(set (match_operand:SWI248x 0 "nonimmediate_operand")
- (unspec:SWI248x [(match_operand:XF 1 "register_operand")]
- UNSPEC_FIST))]
- "TARGET_USE_FANCY_MATH_387")
-
(define_expand "lrint<MODEF:mode><SWI48:mode>2"
[(set (match_operand:SWI48 0 "nonimmediate_operand")
(unspec:SWI48 [(match_operand:MODEF 1 "register_operand")]
operands[2] = assign_386_stack_local (HImode, SLOT_CW_STORED);
operands[3] = assign_386_stack_local (HImode, SLOT_CW_<ROUNDING>);
- if (memory_operand (operands[0], VOIDmode))
- emit_insn (gen_fist<mode>2_<rounding> (operands[0], operands[1],
- operands[2], operands[3]));
- else
- {
- operands[4] = assign_386_stack_local (<MODE>mode, SLOT_TEMP);
- emit_insn (gen_fist<mode>2_<rounding>_with_temp
- (operands[0], operands[1], operands[2],
- operands[3], operands[4]));
- }
+
+ emit_insn (gen_fist<mode>2_<rounding> (operands[0], operands[1],
+ operands[2], operands[3]));
DONE;
}
[(set_attr "type" "fistp")
(set_attr "mode" "<MODE>")])
(define_insn "fistdi2_<rounding>"
- [(set (match_operand:DI 0 "memory_operand" "=m")
+ [(set (match_operand:DI 0 "nonimmediate_operand" "=m")
(unspec:DI [(match_operand:XF 1 "register_operand" "f")]
FIST_ROUNDING))
(use (match_operand:HI 2 "memory_operand" "m"))
(set_attr "i387_cw" "<rounding>")
(set_attr "mode" "DI")])
-(define_insn "fistdi2_<rounding>_with_temp"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=m,?r")
- (unspec:DI [(match_operand:XF 1 "register_operand" "f,f")]
- FIST_ROUNDING))
- (use (match_operand:HI 2 "memory_operand" "m,m"))
- (use (match_operand:HI 3 "memory_operand" "m,m"))
- (clobber (match_operand:DI 4 "memory_operand" "=X,m"))
- (clobber (match_scratch:XF 5 "=&1f,&1f"))]
- "TARGET_USE_FANCY_MATH_387
- && flag_unsafe_math_optimizations"
- "#"
- [(set_attr "type" "fistp")
- (set_attr "i387_cw" "<rounding>")
- (set_attr "mode" "DI")])
-
-(define_split
- [(set (match_operand:DI 0 "register_operand")
- (unspec:DI [(match_operand:XF 1 "register_operand")]
- FIST_ROUNDING))
- (use (match_operand:HI 2 "memory_operand"))
- (use (match_operand:HI 3 "memory_operand"))
- (clobber (match_operand:DI 4 "memory_operand"))
- (clobber (match_scratch 5))]
- "reload_completed"
- [(parallel [(set (match_dup 4)
- (unspec:DI [(match_dup 1)] FIST_ROUNDING))
- (use (match_dup 2))
- (use (match_dup 3))
- (clobber (match_dup 5))])
- (set (match_dup 0) (match_dup 4))])
-
-(define_split
- [(set (match_operand:DI 0 "memory_operand")
- (unspec:DI [(match_operand:XF 1 "register_operand")]
- FIST_ROUNDING))
- (use (match_operand:HI 2 "memory_operand"))
- (use (match_operand:HI 3 "memory_operand"))
- (clobber (match_operand:DI 4 "memory_operand"))
- (clobber (match_scratch 5))]
- "reload_completed"
- [(parallel [(set (match_dup 0)
- (unspec:DI [(match_dup 1)] FIST_ROUNDING))
- (use (match_dup 2))
- (use (match_dup 3))
- (clobber (match_dup 5))])])
-
(define_insn "fist<mode>2_<rounding>"
- [(set (match_operand:SWI24 0 "memory_operand" "=m")
+ [(set (match_operand:SWI24 0 "nonimmediate_operand" "=m")
(unspec:SWI24 [(match_operand:XF 1 "register_operand" "f")]
FIST_ROUNDING))
(use (match_operand:HI 2 "memory_operand" "m"))
(set_attr "i387_cw" "<rounding>")
(set_attr "mode" "<MODE>")])
-(define_insn "fist<mode>2_<rounding>_with_temp"
- [(set (match_operand:SWI24 0 "nonimmediate_operand" "=m,?r")
- (unspec:SWI24 [(match_operand:XF 1 "register_operand" "f,f")]
- FIST_ROUNDING))
- (use (match_operand:HI 2 "memory_operand" "m,m"))
- (use (match_operand:HI 3 "memory_operand" "m,m"))
- (clobber (match_operand:SWI24 4 "memory_operand" "=X,m"))]
- "TARGET_USE_FANCY_MATH_387
- && flag_unsafe_math_optimizations"
- "#"
- [(set_attr "type" "fistp")
- (set_attr "i387_cw" "<rounding>")
- (set_attr "mode" "<MODE>")])
-
-(define_split
- [(set (match_operand:SWI24 0 "register_operand")
- (unspec:SWI24 [(match_operand:XF 1 "register_operand")]
- FIST_ROUNDING))
- (use (match_operand:HI 2 "memory_operand"))
- (use (match_operand:HI 3 "memory_operand"))
- (clobber (match_operand:SWI24 4 "memory_operand"))]
- "reload_completed"
- [(parallel [(set (match_dup 4)
- (unspec:SWI24 [(match_dup 1)] FIST_ROUNDING))
- (use (match_dup 2))
- (use (match_dup 3))])
- (set (match_dup 0) (match_dup 4))])
-
-(define_split
- [(set (match_operand:SWI24 0 "memory_operand")
- (unspec:SWI24 [(match_operand:XF 1 "register_operand")]
- FIST_ROUNDING))
- (use (match_operand:HI 2 "memory_operand"))
- (use (match_operand:HI 3 "memory_operand"))
- (clobber (match_operand:SWI24 4 "memory_operand"))]
- "reload_completed"
- [(parallel [(set (match_dup 0)
- (unspec:SWI24 [(match_dup 1)] FIST_ROUNDING))
- (use (match_dup 2))
- (use (match_dup 3))])])
-
(define_expand "l<rounding_insn>xf<mode>2"
[(parallel [(set (match_operand:SWI248x 0 "nonimmediate_operand")
(unspec:SWI248x [(match_operand:XF 1 "register_operand")]