Commit bb7f0423 by Richard Guenther Committed by Richard Biener

optabs.h (enum optab_index): Remove OTI_lrint.

2006-10-25  Richard Guenther  <rguenther@suse.de>

	* optabs.h (enum optab_index): Remove OTI_lrint.
	(enum convert_optab_index): Add COI_lrint.
	(lrint_optab): Adjust.
	(expand_sfix_optab): Declare.
	* optabs.c (expand_sfix_optab): New function.
	(init_optabs): Init lrint_optab as conversion optab.
	* genopinit.c (lrint_optab): Change to a conversion optab.
	* builtins.c (expand_builtin_int_roundingfn_2): Adjust to
	expansion via conversion optab.
	* config/i386/i386.md (*fistdi2_1): Remove
	flag_unsafe_math_optimizations guard.
	(fistdi2, fistdi2_with_temp, *fist<mode>2_1, fist<mode>2,
	fist<mode>2_with_temp): Likewise.
	(lrint<mode>2): Split into...
	(lrintxf<mode>2): ... x87 part
	(lrint<mode>di2, lrint<mode>si2): ... and SSE parts.
	* config/i386/sse.md (sse_cvtss2si_2, sse_cvtss2_siq_2,
	sse2_cvtsd2si_2, sse2_cvtsd2siq_2): New insns for
	UNSPEC_FIX_NOTRUNC matching non-vector float modes.
	* doc/md.texi (lrintMN2): Document.

From-SVN: r118029
parent ef984648
2006-10-25 Richard Guenther <rguenther@suse.de>
PR target/28803
* optabs.h (enum optab_index): Remove OTI_lrint.
(enum convert_optab_index): Add COI_lrint.
(lrint_optab): Adjust.
(expand_sfix_optab): Declare.
* optabs.c (expand_sfix_optab): New function.
(init_optabs): Init lrint_optab as conversion optab.
* genopinit.c (lrint_optab): Change to a conversion optab.
* builtins.c (expand_builtin_int_roundingfn_2): Adjust to
expansion via conversion optab.
* config/i386/i386.md (*fistdi2_1): Remove
flag_unsafe_math_optimizations guard.
(fistdi2, fistdi2_with_temp, *fist<mode>2_1, fist<mode>2,
fist<mode>2_with_temp): Likewise.
(lrint<mode>2): Split into...
(lrintxf<mode>2): ... x87 part
(lrint<mode>di2, lrint<mode>si2): ... and SSE parts.
* config/i386/sse.md (sse_cvtss2si_2, sse_cvtss2_siq_2,
sse2_cvtsd2si_2, sse2_cvtsd2siq_2): New insns for
UNSPEC_FIX_NOTRUNC matching non-vector float modes.
* doc/md.texi (lrintMN2): Document.
2006-10-25 Uros Bizjak <uros@kss-loka.si> 2006-10-25 Uros Bizjak <uros@kss-loka.si>
PR target/28909 PR target/28909
......
...@@ -2320,7 +2320,7 @@ expand_builtin_int_roundingfn (tree exp, rtx target, rtx subtarget) ...@@ -2320,7 +2320,7 @@ expand_builtin_int_roundingfn (tree exp, rtx target, rtx subtarget)
static rtx static rtx
expand_builtin_int_roundingfn_2 (tree exp, rtx target, rtx subtarget) expand_builtin_int_roundingfn_2 (tree exp, rtx target, rtx subtarget)
{ {
optab builtin_optab; convert_optab builtin_optab;
rtx op0, insns; rtx op0, insns;
tree fndecl = get_callee_fndecl (exp); tree fndecl = get_callee_fndecl (exp);
tree arglist = TREE_OPERAND (exp, 1); tree arglist = TREE_OPERAND (exp, 1);
...@@ -2348,9 +2348,6 @@ expand_builtin_int_roundingfn_2 (tree exp, rtx target, rtx subtarget) ...@@ -2348,9 +2348,6 @@ expand_builtin_int_roundingfn_2 (tree exp, rtx target, rtx subtarget)
/* Make a suitable register to place result in. */ /* Make a suitable register to place result in. */
mode = TYPE_MODE (TREE_TYPE (exp)); mode = TYPE_MODE (TREE_TYPE (exp));
/* Before working hard, check whether the instruction is available. */
if (builtin_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing)
{
target = gen_reg_rtx (mode); target = gen_reg_rtx (mode);
/* Wrap the computation of the argument in a SAVE_EXPR, as we may /* Wrap the computation of the argument in a SAVE_EXPR, as we may
...@@ -2368,11 +2365,7 @@ expand_builtin_int_roundingfn_2 (tree exp, rtx target, rtx subtarget) ...@@ -2368,11 +2365,7 @@ expand_builtin_int_roundingfn_2 (tree exp, rtx target, rtx subtarget)
start_sequence (); start_sequence ();
/* Compute into TARGET. if (expand_sfix_optab (target, op0, builtin_optab))
Set TARGET to wherever the result comes back. */
target = expand_unop (mode, builtin_optab, op0, target, 0);
if (target != 0)
{ {
/* Output the entire sequence. */ /* Output the entire sequence. */
insns = get_insns (); insns = get_insns ();
...@@ -2385,7 +2378,6 @@ expand_builtin_int_roundingfn_2 (tree exp, rtx target, rtx subtarget) ...@@ -2385,7 +2378,6 @@ expand_builtin_int_roundingfn_2 (tree exp, rtx target, rtx subtarget)
(without outputting the insns) and call to the library function (without outputting the insns) and call to the library function
with the stabilized argument list. */ with the stabilized argument list. */
end_sequence (); end_sequence ();
}
target = expand_call (exp, target, target == const0_rtx); target = expand_call (exp, target, target == const0_rtx);
......
...@@ -17205,7 +17205,6 @@ ...@@ -17205,7 +17205,6 @@
(unspec:DI [(match_operand:XF 1 "register_operand" "f,f")] (unspec:DI [(match_operand:XF 1 "register_operand" "f,f")]
UNSPEC_FIST))] UNSPEC_FIST))]
"TARGET_USE_FANCY_MATH_387 "TARGET_USE_FANCY_MATH_387
&& flag_unsafe_math_optimizations
&& !(reload_completed || reload_in_progress)" && !(reload_completed || reload_in_progress)"
"#" "#"
"&& 1" "&& 1"
...@@ -17229,8 +17228,7 @@ ...@@ -17229,8 +17228,7 @@
(unspec:DI [(match_operand:XF 1 "register_operand" "f")] (unspec:DI [(match_operand:XF 1 "register_operand" "f")]
UNSPEC_FIST)) UNSPEC_FIST))
(clobber (match_scratch:XF 2 "=&1f"))] (clobber (match_scratch:XF 2 "=&1f"))]
"TARGET_USE_FANCY_MATH_387 "TARGET_USE_FANCY_MATH_387"
&& flag_unsafe_math_optimizations"
"* return output_fix_trunc (insn, operands, 0);" "* return output_fix_trunc (insn, operands, 0);"
[(set_attr "type" "fpspc") [(set_attr "type" "fpspc")
(set_attr "mode" "DI")]) (set_attr "mode" "DI")])
...@@ -17241,8 +17239,7 @@ ...@@ -17241,8 +17239,7 @@
UNSPEC_FIST)) UNSPEC_FIST))
(clobber (match_operand:DI 2 "memory_operand" "=m,m")) (clobber (match_operand:DI 2 "memory_operand" "=m,m"))
(clobber (match_scratch:XF 3 "=&1f,&1f"))] (clobber (match_scratch:XF 3 "=&1f,&1f"))]
"TARGET_USE_FANCY_MATH_387 "TARGET_USE_FANCY_MATH_387"
&& flag_unsafe_math_optimizations"
"#" "#"
[(set_attr "type" "fpspc") [(set_attr "type" "fpspc")
(set_attr "mode" "DI")]) (set_attr "mode" "DI")])
...@@ -17275,7 +17272,6 @@ ...@@ -17275,7 +17272,6 @@
(unspec:X87MODEI12 [(match_operand:XF 1 "register_operand" "f")] (unspec:X87MODEI12 [(match_operand:XF 1 "register_operand" "f")]
UNSPEC_FIST))] UNSPEC_FIST))]
"TARGET_USE_FANCY_MATH_387 "TARGET_USE_FANCY_MATH_387
&& flag_unsafe_math_optimizations
&& !(reload_completed || reload_in_progress)" && !(reload_completed || reload_in_progress)"
"#" "#"
"&& 1" "&& 1"
...@@ -17293,8 +17289,7 @@ ...@@ -17293,8 +17289,7 @@
[(set (match_operand:X87MODEI12 0 "memory_operand" "=m") [(set (match_operand:X87MODEI12 0 "memory_operand" "=m")
(unspec:X87MODEI12 [(match_operand:XF 1 "register_operand" "f")] (unspec:X87MODEI12 [(match_operand:XF 1 "register_operand" "f")]
UNSPEC_FIST))] UNSPEC_FIST))]
"TARGET_USE_FANCY_MATH_387 "TARGET_USE_FANCY_MATH_387"
&& flag_unsafe_math_optimizations"
"* return output_fix_trunc (insn, operands, 0);" "* return output_fix_trunc (insn, operands, 0);"
[(set_attr "type" "fpspc") [(set_attr "type" "fpspc")
(set_attr "mode" "<MODE>")]) (set_attr "mode" "<MODE>")])
...@@ -17304,8 +17299,7 @@ ...@@ -17304,8 +17299,7 @@
(unspec:X87MODEI12 [(match_operand:XF 1 "register_operand" "f")] (unspec:X87MODEI12 [(match_operand:XF 1 "register_operand" "f")]
UNSPEC_FIST)) UNSPEC_FIST))
(clobber (match_operand:X87MODEI12 2 "memory_operand" "=m"))] (clobber (match_operand:X87MODEI12 2 "memory_operand" "=m"))]
"TARGET_USE_FANCY_MATH_387 "TARGET_USE_FANCY_MATH_387"
&& flag_unsafe_math_optimizations"
"#" "#"
[(set_attr "type" "fpspc") [(set_attr "type" "fpspc")
(set_attr "mode" "<MODE>")]) (set_attr "mode" "<MODE>")])
...@@ -17331,13 +17325,25 @@ ...@@ -17331,13 +17325,25 @@
UNSPEC_FIST))] UNSPEC_FIST))]
"") "")
(define_expand "lrint<mode>2" (define_expand "lrintxf<mode>2"
[(set (match_operand:X87MODEI 0 "nonimmediate_operand" "") [(set (match_operand:X87MODEI 0 "nonimmediate_operand" "")
(unspec:X87MODEI [(match_operand:XF 1 "register_operand" "")] (unspec:X87MODEI [(match_operand:XF 1 "register_operand" "")]
UNSPEC_FIST))] UNSPEC_FIST))]
"TARGET_USE_FANCY_MATH_387 "TARGET_USE_FANCY_MATH_387"
&& (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387) "")
&& flag_unsafe_math_optimizations"
(define_expand "lrint<mode>di2"
[(set (match_operand:DI 0 "nonimmediate_operand" "")
(unspec:DI [(match_operand:SSEMODEF 1 "register_operand" "")]
UNSPEC_FIX_NOTRUNC))]
"SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH && TARGET_64BIT"
"")
(define_expand "lrint<mode>si2"
[(set (match_operand:SI 0 "nonimmediate_operand" "")
(unspec:SI [(match_operand:SSEMODEF 1 "register_operand" "")]
UNSPEC_FIX_NOTRUNC))]
"SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH"
"") "")
;; Rounding mode control word calculation could clobber FLAGS_REG. ;; Rounding mode control word calculation could clobber FLAGS_REG.
......
...@@ -974,6 +974,16 @@ ...@@ -974,6 +974,16 @@
(set_attr "athlon_decode" "double,vector") (set_attr "athlon_decode" "double,vector")
(set_attr "mode" "SI")]) (set_attr "mode" "SI")])
(define_insn "sse_cvtss2si_2"
[(set (match_operand:SI 0 "register_operand" "=r,r")
(unspec:SI [(match_operand:SF 1 "nonimmediate_operand" "x,m")]
UNSPEC_FIX_NOTRUNC))]
"TARGET_SSE"
"cvtss2si\t{%1, %0|%0, %1}"
[(set_attr "type" "sseicvt")
(set_attr "athlon_decode" "double,vector")
(set_attr "mode" "SI")])
(define_insn "sse_cvtss2siq" (define_insn "sse_cvtss2siq"
[(set (match_operand:DI 0 "register_operand" "=r,r") [(set (match_operand:DI 0 "register_operand" "=r,r")
(unspec:DI (unspec:DI
...@@ -987,6 +997,16 @@ ...@@ -987,6 +997,16 @@
(set_attr "athlon_decode" "double,vector") (set_attr "athlon_decode" "double,vector")
(set_attr "mode" "DI")]) (set_attr "mode" "DI")])
(define_insn "sse_cvtss2siq_2"
[(set (match_operand:DI 0 "register_operand" "=r,r")
(unspec:DI [(match_operand:SF 1 "nonimmediate_operand" "x,m")]
UNSPEC_FIX_NOTRUNC))]
"TARGET_SSE && TARGET_64BIT"
"cvtss2siq\t{%1, %0|%0, %1}"
[(set_attr "type" "sseicvt")
(set_attr "athlon_decode" "double,vector")
(set_attr "mode" "DI")])
(define_insn "sse_cvttss2si" (define_insn "sse_cvttss2si"
[(set (match_operand:SI 0 "register_operand" "=r,r") [(set (match_operand:SI 0 "register_operand" "=r,r")
(fix:SI (fix:SI
...@@ -1932,6 +1952,16 @@ ...@@ -1932,6 +1952,16 @@
(set_attr "athlon_decode" "double,vector") (set_attr "athlon_decode" "double,vector")
(set_attr "mode" "SI")]) (set_attr "mode" "SI")])
(define_insn "sse2_cvtsd2si_2"
[(set (match_operand:SI 0 "register_operand" "=r,r")
(unspec:SI [(match_operand:DF 1 "nonimmediate_operand" "x,m")]
UNSPEC_FIX_NOTRUNC))]
"TARGET_SSE2"
"cvtsd2si\t{%1, %0|%0, %1}"
[(set_attr "type" "sseicvt")
(set_attr "athlon_decode" "double,vector")
(set_attr "mode" "SI")])
(define_insn "sse2_cvtsd2siq" (define_insn "sse2_cvtsd2siq"
[(set (match_operand:DI 0 "register_operand" "=r,r") [(set (match_operand:DI 0 "register_operand" "=r,r")
(unspec:DI (unspec:DI
...@@ -1945,6 +1975,16 @@ ...@@ -1945,6 +1975,16 @@
(set_attr "athlon_decode" "double,vector") (set_attr "athlon_decode" "double,vector")
(set_attr "mode" "DI")]) (set_attr "mode" "DI")])
(define_insn "sse2_cvtsd2siq_2"
[(set (match_operand:DI 0 "register_operand" "=r,r")
(unspec:DI [(match_operand:DF 1 "nonimmediate_operand" "x,m")]
UNSPEC_FIX_NOTRUNC))]
"TARGET_SSE2 && TARGET_64BIT"
"cvtsd2siq\t{%1, %0|%0, %1}"
[(set_attr "type" "sseicvt")
(set_attr "athlon_decode" "double,vector")
(set_attr "mode" "DI")])
(define_insn "sse2_cvttsd2si" (define_insn "sse2_cvttsd2si"
[(set (match_operand:SI 0 "register_operand" "=r,r") [(set (match_operand:SI 0 "register_operand" "=r,r")
(fix:SI (fix:SI
......
...@@ -3702,6 +3702,12 @@ corresponds to the C data type @code{double} and the @code{rintf} ...@@ -3702,6 +3702,12 @@ corresponds to the C data type @code{double} and the @code{rintf}
built-in function uses the mode which corresponds to the C data built-in function uses the mode which corresponds to the C data
type @code{float}. type @code{float}.
@cindex @code{lrint@var{m}@var{n}2}
@item @samp{lrint@var{m}@var{n}2}
Convert operand 1 (valid for floating point mode @var{m}) to fixed
point mode @var{n} as a signed number according to the current
rounding mode and store in operand 0 (which has mode @var{n}).
@cindex @code{copysign@var{m}3} instruction pattern @cindex @code{copysign@var{m}3} instruction pattern
@item @samp{copysign@var{m}3} @item @samp{copysign@var{m}3}
Store a value with the magnitude of operand 1 and the sign of operand Store a value with the magnitude of operand 1 and the sign of operand
......
...@@ -127,7 +127,7 @@ static const char * const optabs[] = ...@@ -127,7 +127,7 @@ static const char * const optabs[] =
"btrunc_optab->handlers[$A].insn_code = CODE_FOR_$(btrunc$a2$)", "btrunc_optab->handlers[$A].insn_code = CODE_FOR_$(btrunc$a2$)",
"nearbyint_optab->handlers[$A].insn_code = CODE_FOR_$(nearbyint$a2$)", "nearbyint_optab->handlers[$A].insn_code = CODE_FOR_$(nearbyint$a2$)",
"rint_optab->handlers[$A].insn_code = CODE_FOR_$(rint$a2$)", "rint_optab->handlers[$A].insn_code = CODE_FOR_$(rint$a2$)",
"lrint_optab->handlers[$A].insn_code = CODE_FOR_$(lrint$a2$)", "lrint_optab->handlers[$B][$A].insn_code = CODE_FOR_$(lrint$F$a$I$b2$)",
"sincos_optab->handlers[$A].insn_code = CODE_FOR_$(sincos$a3$)", "sincos_optab->handlers[$A].insn_code = CODE_FOR_$(sincos$a3$)",
"sin_optab->handlers[$A].insn_code = CODE_FOR_$(sin$a2$)", "sin_optab->handlers[$A].insn_code = CODE_FOR_$(sin$a2$)",
"asin_optab->handlers[$A].insn_code = CODE_FOR_$(asin$a2$)", "asin_optab->handlers[$A].insn_code = CODE_FOR_$(asin$a2$)",
......
...@@ -4862,6 +4862,46 @@ expand_fix (rtx to, rtx from, int unsignedp) ...@@ -4862,6 +4862,46 @@ expand_fix (rtx to, rtx from, int unsignedp)
} }
} }
/* Generate code to convert FROM to fixed point and store in TO. FROM
must be floating point, TO must be signed. Use the conversion optab
TAB to do the conversion. */
bool
expand_sfix_optab (rtx to, rtx from, convert_optab tab)
{
enum insn_code icode;
rtx target = to;
enum machine_mode fmode, imode;
/* We first try to find a pair of modes, one real and one integer, at
least as wide as FROM and TO, respectively, in which we can open-code
this conversion. If the integer mode is wider than the mode of TO,
we can do the conversion either signed or unsigned. */
for (fmode = GET_MODE (from); fmode != VOIDmode;
fmode = GET_MODE_WIDER_MODE (fmode))
for (imode = GET_MODE (to); imode != VOIDmode;
imode = GET_MODE_WIDER_MODE (imode))
{
icode = tab->handlers[imode][fmode].insn_code;
if (icode != CODE_FOR_nothing)
{
if (fmode != GET_MODE (from))
from = convert_to_mode (fmode, from, 0);
if (imode != GET_MODE (to))
target = gen_reg_rtx (imode);
emit_unop_insn (icode, target, from, UNKNOWN);
if (target != to)
convert_move (to, target, 0);
return true;
}
}
return false;
}
/* Report whether we have an instruction to perform the operation /* Report whether we have an instruction to perform the operation
specified by CODE on operands of mode MODE. */ specified by CODE on operands of mode MODE. */
int int
...@@ -5266,7 +5306,6 @@ init_optabs (void) ...@@ -5266,7 +5306,6 @@ init_optabs (void)
btrunc_optab = init_optab (UNKNOWN); btrunc_optab = init_optab (UNKNOWN);
nearbyint_optab = init_optab (UNKNOWN); nearbyint_optab = init_optab (UNKNOWN);
rint_optab = init_optab (UNKNOWN); rint_optab = init_optab (UNKNOWN);
lrint_optab = init_optab (UNKNOWN);
sincos_optab = init_optab (UNKNOWN); sincos_optab = init_optab (UNKNOWN);
sin_optab = init_optab (UNKNOWN); sin_optab = init_optab (UNKNOWN);
asin_optab = init_optab (UNKNOWN); asin_optab = init_optab (UNKNOWN);
...@@ -5325,6 +5364,7 @@ init_optabs (void) ...@@ -5325,6 +5364,7 @@ init_optabs (void)
ufixtrunc_optab = init_convert_optab (UNKNOWN); ufixtrunc_optab = init_convert_optab (UNKNOWN);
sfloat_optab = init_convert_optab (FLOAT); sfloat_optab = init_convert_optab (FLOAT);
ufloat_optab = init_convert_optab (UNSIGNED_FLOAT); ufloat_optab = init_convert_optab (UNSIGNED_FLOAT);
lrint_optab = init_convert_optab (UNKNOWN);
for (i = 0; i < NUM_MACHINE_MODES; i++) for (i = 0; i < NUM_MACHINE_MODES; i++)
{ {
...@@ -5444,6 +5484,8 @@ init_optabs (void) ...@@ -5444,6 +5484,8 @@ init_optabs (void)
MODE_DECIMAL_FLOAT, MODE_INT); MODE_DECIMAL_FLOAT, MODE_INT);
init_interclass_conv_libfuncs (ufloat_optab, "floatuns", init_interclass_conv_libfuncs (ufloat_optab, "floatuns",
MODE_INT, MODE_DECIMAL_FLOAT); MODE_INT, MODE_DECIMAL_FLOAT);
init_interclass_conv_libfuncs (lrint_optab, "lrint",
MODE_INT, MODE_FLOAT);
/* sext_optab is also used for FLOAT_EXTEND. */ /* sext_optab is also used for FLOAT_EXTEND. */
init_intraclass_conv_libfuncs (sext_optab, "extend", MODE_FLOAT, true); init_intraclass_conv_libfuncs (sext_optab, "extend", MODE_FLOAT, true);
......
...@@ -196,7 +196,6 @@ enum optab_index ...@@ -196,7 +196,6 @@ enum optab_index
OTI_round, OTI_round,
OTI_nearbyint, OTI_nearbyint,
OTI_rint, OTI_rint,
OTI_lrint,
/* Tangent */ /* Tangent */
OTI_tan, OTI_tan,
/* Inverse tangent */ /* Inverse tangent */
...@@ -345,7 +344,6 @@ extern GTY(()) optab optab_table[OTI_MAX]; ...@@ -345,7 +344,6 @@ extern GTY(()) optab optab_table[OTI_MAX];
#define round_optab (optab_table[OTI_round]) #define round_optab (optab_table[OTI_round])
#define nearbyint_optab (optab_table[OTI_nearbyint]) #define nearbyint_optab (optab_table[OTI_nearbyint])
#define rint_optab (optab_table[OTI_rint]) #define rint_optab (optab_table[OTI_rint])
#define lrint_optab (optab_table[OTI_lrint])
#define tan_optab (optab_table[OTI_tan]) #define tan_optab (optab_table[OTI_tan])
#define atan_optab (optab_table[OTI_atan]) #define atan_optab (optab_table[OTI_atan])
#define copysign_optab (optab_table[OTI_copysign]) #define copysign_optab (optab_table[OTI_copysign])
...@@ -407,6 +405,8 @@ enum convert_optab_index ...@@ -407,6 +405,8 @@ enum convert_optab_index
COI_sfloat, COI_sfloat,
COI_ufloat, COI_ufloat,
COI_lrint,
COI_MAX COI_MAX
}; };
...@@ -421,6 +421,7 @@ extern GTY(()) convert_optab convert_optab_table[COI_MAX]; ...@@ -421,6 +421,7 @@ extern GTY(()) convert_optab convert_optab_table[COI_MAX];
#define ufixtrunc_optab (convert_optab_table[COI_ufixtrunc]) #define ufixtrunc_optab (convert_optab_table[COI_ufixtrunc])
#define sfloat_optab (convert_optab_table[COI_sfloat]) #define sfloat_optab (convert_optab_table[COI_sfloat])
#define ufloat_optab (convert_optab_table[COI_ufloat]) #define ufloat_optab (convert_optab_table[COI_ufloat])
#define lrint_optab (convert_optab_table[COI_lrint])
/* These arrays record the insn_code of insns that may be needed to /* These arrays record the insn_code of insns that may be needed to
perform input and output reloads of special objects. They provide a perform input and output reloads of special objects. They provide a
...@@ -597,6 +598,9 @@ extern void expand_float (rtx, rtx, int); ...@@ -597,6 +598,9 @@ extern void expand_float (rtx, rtx, int);
/* Generate code for a FIX_EXPR. */ /* Generate code for a FIX_EXPR. */
extern void expand_fix (rtx, rtx, int); extern void expand_fix (rtx, rtx, int);
/* Generate code for float to integral conversion. */
extern bool expand_sfix_optab (rtx, rtx, convert_optab);
/* Return tree if target supports vector operations for COND_EXPR. */ /* Return tree if target supports vector operations for COND_EXPR. */
bool expand_vec_cond_expr_p (tree, enum machine_mode); bool expand_vec_cond_expr_p (tree, enum machine_mode);
......
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