re PR middle-end/33335 (FAIL: 26_numerics/complex/inserters_extractors/wchar_t/1.cc)
PR middle-end/33335 * optabs.h (optab_table): Change type to struct optab from optab. (convert_optab_table): Similarly. Adjust all _optab macros to expand to addresses of optab_table resp. convert_optab_table elements rather than the values of the elements. * optabs.c (optab_table): Change typype to struct optab from optab. If compiled by recent GCC, initialize all the insn_code fields in the array using designated range initializers. (convert_optab_table): Similarly. (convert_optab_libfunc, optab_libfunc, set_optab_libfunc, set_conv_libfunc): Into libfunc_entry's optab field store index within optab_table resp. convert_optab_table array instead of difference between two separately malloced addresses. (new_optab): Add op argument, don't return anything. Initialize just the insn_code field in handlers array and only when needed. (init_optab, init_optabv): Add op argument, don't return anything. Adjust new_optab caller. (new_convert_optab): Removed. (init_convert_optab): Add op argument, don't return anything, don't call new_convert_optab. If needed, initialize insn_code field in handlers array. (init_optabs): Adjust init_optab, init_optabv and init_convert_optab callers. (debug_optab_libfuncs): Adjust uses of optab_table and convert_optab_table arrays. From-SVN: r130274
This commit is contained in:
parent
3c27955364
commit
33727b5ecb
@ -1,3 +1,32 @@
|
||||
2007-11-18 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/33335
|
||||
* optabs.h (optab_table): Change type to struct optab from optab.
|
||||
(convert_optab_table): Similarly.
|
||||
Adjust all _optab macros to expand to addresses of optab_table
|
||||
resp. convert_optab_table elements rather than the values of the
|
||||
elements.
|
||||
* optabs.c (optab_table): Change typype to struct optab from optab.
|
||||
If compiled by recent GCC, initialize all the insn_code fields in
|
||||
the array using designated range initializers.
|
||||
(convert_optab_table): Similarly.
|
||||
(convert_optab_libfunc, optab_libfunc, set_optab_libfunc,
|
||||
set_conv_libfunc): Into libfunc_entry's optab field store index within
|
||||
optab_table resp. convert_optab_table array instead of difference
|
||||
between two separately malloced addresses.
|
||||
(new_optab): Add op argument, don't return anything. Initialize
|
||||
just the insn_code field in handlers array and only when needed.
|
||||
(init_optab, init_optabv): Add op argument, don't return anything.
|
||||
Adjust new_optab caller.
|
||||
(new_convert_optab): Removed.
|
||||
(init_convert_optab): Add op argument, don't return anything, don't
|
||||
call new_convert_optab. If needed, initialize insn_code field in
|
||||
handlers array.
|
||||
(init_optabs): Adjust init_optab, init_optabv and init_convert_optab
|
||||
callers.
|
||||
(debug_optab_libfuncs): Adjust uses of optab_table and
|
||||
convert_optab_table arrays.
|
||||
|
||||
2007-11-18 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/34127
|
||||
|
433
gcc/optabs.c
433
gcc/optabs.c
@ -54,12 +54,27 @@ along with GCC; see the file COPYING3. If not see
|
||||
|
||||
See expr.h for documentation of these optabs. */
|
||||
|
||||
optab optab_table[OTI_MAX];
|
||||
#if GCC_VERSION >= 4000
|
||||
__extension__ struct optab optab_table[OTI_MAX]
|
||||
= { [0 ... OTI_MAX - 1].handlers[0 ... NUM_MACHINE_MODES - 1].insn_code
|
||||
= CODE_FOR_nothing };
|
||||
#else
|
||||
/* new_optab will do runtime initialization otherwise. */
|
||||
struct optab optab_table[OTI_MAX];
|
||||
#endif
|
||||
|
||||
rtx libfunc_table[LTI_MAX];
|
||||
|
||||
/* Tables of patterns for converting one mode to another. */
|
||||
convert_optab convert_optab_table[COI_MAX];
|
||||
#if GCC_VERSION >= 4000
|
||||
__extension__ struct convert_optab convert_optab_table[COI_MAX]
|
||||
= { [0 ... COI_MAX - 1].handlers[0 ... NUM_MACHINE_MODES - 1]
|
||||
[0 ... NUM_MACHINE_MODES - 1].insn_code
|
||||
= CODE_FOR_nothing };
|
||||
#else
|
||||
/* init_convert_optab will do runtime initialization otherwise. */
|
||||
struct convert_optab convert_optab_table[COI_MAX];
|
||||
#endif
|
||||
|
||||
/* Contains the optab used for each rtx code. */
|
||||
optab code_to_optab[NUM_RTX_CODE + 1];
|
||||
@ -161,7 +176,7 @@ convert_optab_libfunc (convert_optab optab, enum machine_mode mode1,
|
||||
struct libfunc_entry e;
|
||||
struct libfunc_entry **slot;
|
||||
|
||||
e.optab = (size_t) (convert_optab_table[0] - optab);
|
||||
e.optab = (size_t) (optab - &convert_optab_table[0]);
|
||||
e.mode1 = mode1;
|
||||
e.mode2 = mode2;
|
||||
slot = (struct libfunc_entry **) htab_find_slot (libfunc_hash, &e, NO_INSERT);
|
||||
@ -190,7 +205,7 @@ optab_libfunc (optab optab, enum machine_mode mode)
|
||||
struct libfunc_entry e;
|
||||
struct libfunc_entry **slot;
|
||||
|
||||
e.optab = (size_t) (optab_table[0] - optab);
|
||||
e.optab = (size_t) (optab - &optab_table[0]);
|
||||
e.mode1 = mode;
|
||||
e.mode2 = VOIDmode;
|
||||
slot = (struct libfunc_entry **) htab_find_slot (libfunc_hash, &e, NO_INSERT);
|
||||
@ -5550,59 +5565,55 @@ have_insn_for (enum rtx_code code, enum machine_mode mode)
|
||||
}
|
||||
|
||||
/* Create a blank optab. */
|
||||
static optab
|
||||
new_optab (void)
|
||||
#if GCC_VERSION >= 4000
|
||||
static inline void
|
||||
new_optab (optab op ATTRIBUTE_UNUSED)
|
||||
{
|
||||
/* All insn_code fields are already initialized using
|
||||
designated initializers. */
|
||||
}
|
||||
#else
|
||||
static void
|
||||
new_optab (optab op)
|
||||
{
|
||||
int i;
|
||||
optab op = xcalloc (sizeof (struct optab), 1);
|
||||
|
||||
for (i = 0; i < NUM_MACHINE_MODES; i++)
|
||||
optab_handler (op, i)->insn_code = CODE_FOR_nothing;
|
||||
|
||||
return op;
|
||||
}
|
||||
|
||||
static convert_optab
|
||||
new_convert_optab (void)
|
||||
{
|
||||
int i, j;
|
||||
convert_optab op = xcalloc (sizeof (struct convert_optab), 1);
|
||||
|
||||
for (i = 0; i < NUM_MACHINE_MODES; i++)
|
||||
for (j = 0; j < NUM_MACHINE_MODES; j++)
|
||||
convert_optab_handler (op, i, j)->insn_code = CODE_FOR_nothing;
|
||||
|
||||
return op;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Same, but fill in its code as CODE, and write it into the
|
||||
code_to_optab table. */
|
||||
static inline optab
|
||||
init_optab (enum rtx_code code)
|
||||
static inline void
|
||||
init_optab (optab op, enum rtx_code code)
|
||||
{
|
||||
optab op = new_optab ();
|
||||
new_optab (op);
|
||||
op->code = code;
|
||||
code_to_optab[(int) code] = op;
|
||||
return op;
|
||||
}
|
||||
|
||||
/* Same, but fill in its code as CODE, and do _not_ write it into
|
||||
the code_to_optab table. */
|
||||
static inline optab
|
||||
init_optabv (enum rtx_code code)
|
||||
static inline void
|
||||
init_optabv (optab op, enum rtx_code code)
|
||||
{
|
||||
optab op = new_optab ();
|
||||
new_optab (op);
|
||||
op->code = code;
|
||||
return op;
|
||||
}
|
||||
|
||||
/* Conversion optabs never go in the code_to_optab table. */
|
||||
static inline convert_optab
|
||||
init_convert_optab (enum rtx_code code)
|
||||
static void
|
||||
init_convert_optab (convert_optab op, enum rtx_code code)
|
||||
{
|
||||
convert_optab op = new_convert_optab ();
|
||||
#if !(GCC_VERSION >= 4000)
|
||||
int i, j;
|
||||
|
||||
for (i = 0; i < NUM_MACHINE_MODES; i++)
|
||||
for (j = 0; j < NUM_MACHINE_MODES; j++)
|
||||
convert_optab_handler (op, i, j)->insn_code = CODE_FOR_nothing;
|
||||
#endif
|
||||
op->code = code;
|
||||
return op;
|
||||
}
|
||||
|
||||
/* Initialize the libfunc fields of an entire group of entries in some
|
||||
@ -6178,7 +6189,7 @@ set_optab_libfunc (optab optable, enum machine_mode mode, const char *name)
|
||||
rtx val;
|
||||
struct libfunc_entry e;
|
||||
struct libfunc_entry **slot;
|
||||
e.optab = (size_t) (optab_table[0] - optable);
|
||||
e.optab = (size_t) (optable - &optab_table[0]);
|
||||
e.mode1 = mode;
|
||||
e.mode2 = VOIDmode;
|
||||
|
||||
@ -6189,7 +6200,7 @@ set_optab_libfunc (optab optable, enum machine_mode mode, const char *name)
|
||||
slot = (struct libfunc_entry **) htab_find_slot (libfunc_hash, &e, INSERT);
|
||||
if (*slot == NULL)
|
||||
*slot = ggc_alloc (sizeof (struct libfunc_entry));
|
||||
(*slot)->optab = (size_t) (optab_table[0] - optable);
|
||||
(*slot)->optab = (size_t) (optable - &optab_table[0]);
|
||||
(*slot)->mode1 = mode;
|
||||
(*slot)->mode2 = VOIDmode;
|
||||
(*slot)->libfunc = val;
|
||||
@ -6205,7 +6216,7 @@ set_conv_libfunc (convert_optab optable, enum machine_mode tmode,
|
||||
rtx val;
|
||||
struct libfunc_entry e;
|
||||
struct libfunc_entry **slot;
|
||||
e.optab = (size_t) (convert_optab_table[0] - optable);
|
||||
e.optab = (size_t) (optable - &convert_optab_table[0]);
|
||||
e.mode1 = tmode;
|
||||
e.mode2 = fmode;
|
||||
|
||||
@ -6216,7 +6227,7 @@ set_conv_libfunc (convert_optab optable, enum machine_mode tmode,
|
||||
slot = (struct libfunc_entry **) htab_find_slot (libfunc_hash, &e, INSERT);
|
||||
if (*slot == NULL)
|
||||
*slot = ggc_alloc (sizeof (struct libfunc_entry));
|
||||
(*slot)->optab = (size_t) (convert_optab_table[0] - optable);
|
||||
(*slot)->optab = (size_t) (optable - &convert_optab_table[0]);
|
||||
(*slot)->mode1 = tmode;
|
||||
(*slot)->mode2 = fmode;
|
||||
(*slot)->libfunc = val;
|
||||
@ -6248,192 +6259,192 @@ init_optabs (void)
|
||||
vcondu_gen_code[i] = CODE_FOR_nothing;
|
||||
}
|
||||
|
||||
add_optab = init_optab (PLUS);
|
||||
addv_optab = init_optabv (PLUS);
|
||||
sub_optab = init_optab (MINUS);
|
||||
subv_optab = init_optabv (MINUS);
|
||||
ssadd_optab = init_optab (SS_PLUS);
|
||||
usadd_optab = init_optab (US_PLUS);
|
||||
sssub_optab = init_optab (SS_MINUS);
|
||||
ussub_optab = init_optab (US_MINUS);
|
||||
smul_optab = init_optab (MULT);
|
||||
ssmul_optab = init_optab (SS_MULT);
|
||||
usmul_optab = init_optab (US_MULT);
|
||||
smulv_optab = init_optabv (MULT);
|
||||
smul_highpart_optab = init_optab (UNKNOWN);
|
||||
umul_highpart_optab = init_optab (UNKNOWN);
|
||||
smul_widen_optab = init_optab (UNKNOWN);
|
||||
umul_widen_optab = init_optab (UNKNOWN);
|
||||
usmul_widen_optab = init_optab (UNKNOWN);
|
||||
smadd_widen_optab = init_optab (UNKNOWN);
|
||||
umadd_widen_optab = init_optab (UNKNOWN);
|
||||
ssmadd_widen_optab = init_optab (UNKNOWN);
|
||||
usmadd_widen_optab = init_optab (UNKNOWN);
|
||||
smsub_widen_optab = init_optab (UNKNOWN);
|
||||
umsub_widen_optab = init_optab (UNKNOWN);
|
||||
ssmsub_widen_optab = init_optab (UNKNOWN);
|
||||
usmsub_widen_optab = init_optab (UNKNOWN);
|
||||
sdiv_optab = init_optab (DIV);
|
||||
ssdiv_optab = init_optab (SS_DIV);
|
||||
usdiv_optab = init_optab (US_DIV);
|
||||
sdivv_optab = init_optabv (DIV);
|
||||
sdivmod_optab = init_optab (UNKNOWN);
|
||||
udiv_optab = init_optab (UDIV);
|
||||
udivmod_optab = init_optab (UNKNOWN);
|
||||
smod_optab = init_optab (MOD);
|
||||
umod_optab = init_optab (UMOD);
|
||||
fmod_optab = init_optab (UNKNOWN);
|
||||
remainder_optab = init_optab (UNKNOWN);
|
||||
ftrunc_optab = init_optab (UNKNOWN);
|
||||
and_optab = init_optab (AND);
|
||||
ior_optab = init_optab (IOR);
|
||||
xor_optab = init_optab (XOR);
|
||||
ashl_optab = init_optab (ASHIFT);
|
||||
ssashl_optab = init_optab (SS_ASHIFT);
|
||||
usashl_optab = init_optab (US_ASHIFT);
|
||||
ashr_optab = init_optab (ASHIFTRT);
|
||||
lshr_optab = init_optab (LSHIFTRT);
|
||||
rotl_optab = init_optab (ROTATE);
|
||||
rotr_optab = init_optab (ROTATERT);
|
||||
smin_optab = init_optab (SMIN);
|
||||
smax_optab = init_optab (SMAX);
|
||||
umin_optab = init_optab (UMIN);
|
||||
umax_optab = init_optab (UMAX);
|
||||
pow_optab = init_optab (UNKNOWN);
|
||||
atan2_optab = init_optab (UNKNOWN);
|
||||
init_optab (add_optab, PLUS);
|
||||
init_optabv (addv_optab, PLUS);
|
||||
init_optab (sub_optab, MINUS);
|
||||
init_optabv (subv_optab, MINUS);
|
||||
init_optab (ssadd_optab, SS_PLUS);
|
||||
init_optab (usadd_optab, US_PLUS);
|
||||
init_optab (sssub_optab, SS_MINUS);
|
||||
init_optab (ussub_optab, US_MINUS);
|
||||
init_optab (smul_optab, MULT);
|
||||
init_optab (ssmul_optab, SS_MULT);
|
||||
init_optab (usmul_optab, US_MULT);
|
||||
init_optabv (smulv_optab, MULT);
|
||||
init_optab (smul_highpart_optab, UNKNOWN);
|
||||
init_optab (umul_highpart_optab, UNKNOWN);
|
||||
init_optab (smul_widen_optab, UNKNOWN);
|
||||
init_optab (umul_widen_optab, UNKNOWN);
|
||||
init_optab (usmul_widen_optab, UNKNOWN);
|
||||
init_optab (smadd_widen_optab, UNKNOWN);
|
||||
init_optab (umadd_widen_optab, UNKNOWN);
|
||||
init_optab (ssmadd_widen_optab, UNKNOWN);
|
||||
init_optab (usmadd_widen_optab, UNKNOWN);
|
||||
init_optab (smsub_widen_optab, UNKNOWN);
|
||||
init_optab (umsub_widen_optab, UNKNOWN);
|
||||
init_optab (ssmsub_widen_optab, UNKNOWN);
|
||||
init_optab (usmsub_widen_optab, UNKNOWN);
|
||||
init_optab (sdiv_optab, DIV);
|
||||
init_optab (ssdiv_optab, SS_DIV);
|
||||
init_optab (usdiv_optab, US_DIV);
|
||||
init_optabv (sdivv_optab, DIV);
|
||||
init_optab (sdivmod_optab, UNKNOWN);
|
||||
init_optab (udiv_optab, UDIV);
|
||||
init_optab (udivmod_optab, UNKNOWN);
|
||||
init_optab (smod_optab, MOD);
|
||||
init_optab (umod_optab, UMOD);
|
||||
init_optab (fmod_optab, UNKNOWN);
|
||||
init_optab (remainder_optab, UNKNOWN);
|
||||
init_optab (ftrunc_optab, UNKNOWN);
|
||||
init_optab (and_optab, AND);
|
||||
init_optab (ior_optab, IOR);
|
||||
init_optab (xor_optab, XOR);
|
||||
init_optab (ashl_optab, ASHIFT);
|
||||
init_optab (ssashl_optab, SS_ASHIFT);
|
||||
init_optab (usashl_optab, US_ASHIFT);
|
||||
init_optab (ashr_optab, ASHIFTRT);
|
||||
init_optab (lshr_optab, LSHIFTRT);
|
||||
init_optab (rotl_optab, ROTATE);
|
||||
init_optab (rotr_optab, ROTATERT);
|
||||
init_optab (smin_optab, SMIN);
|
||||
init_optab (smax_optab, SMAX);
|
||||
init_optab (umin_optab, UMIN);
|
||||
init_optab (umax_optab, UMAX);
|
||||
init_optab (pow_optab, UNKNOWN);
|
||||
init_optab (atan2_optab, UNKNOWN);
|
||||
|
||||
/* These three have codes assigned exclusively for the sake of
|
||||
have_insn_for. */
|
||||
mov_optab = init_optab (SET);
|
||||
movstrict_optab = init_optab (STRICT_LOW_PART);
|
||||
cmp_optab = init_optab (COMPARE);
|
||||
init_optab (mov_optab, SET);
|
||||
init_optab (movstrict_optab, STRICT_LOW_PART);
|
||||
init_optab (cmp_optab, COMPARE);
|
||||
|
||||
storent_optab = init_optab (UNKNOWN);
|
||||
init_optab (storent_optab, UNKNOWN);
|
||||
|
||||
ucmp_optab = init_optab (UNKNOWN);
|
||||
tst_optab = init_optab (UNKNOWN);
|
||||
init_optab (ucmp_optab, UNKNOWN);
|
||||
init_optab (tst_optab, UNKNOWN);
|
||||
|
||||
eq_optab = init_optab (EQ);
|
||||
ne_optab = init_optab (NE);
|
||||
gt_optab = init_optab (GT);
|
||||
ge_optab = init_optab (GE);
|
||||
lt_optab = init_optab (LT);
|
||||
le_optab = init_optab (LE);
|
||||
unord_optab = init_optab (UNORDERED);
|
||||
init_optab (eq_optab, EQ);
|
||||
init_optab (ne_optab, NE);
|
||||
init_optab (gt_optab, GT);
|
||||
init_optab (ge_optab, GE);
|
||||
init_optab (lt_optab, LT);
|
||||
init_optab (le_optab, LE);
|
||||
init_optab (unord_optab, UNORDERED);
|
||||
|
||||
neg_optab = init_optab (NEG);
|
||||
ssneg_optab = init_optab (SS_NEG);
|
||||
usneg_optab = init_optab (US_NEG);
|
||||
negv_optab = init_optabv (NEG);
|
||||
abs_optab = init_optab (ABS);
|
||||
absv_optab = init_optabv (ABS);
|
||||
addcc_optab = init_optab (UNKNOWN);
|
||||
one_cmpl_optab = init_optab (NOT);
|
||||
bswap_optab = init_optab (BSWAP);
|
||||
ffs_optab = init_optab (FFS);
|
||||
clz_optab = init_optab (CLZ);
|
||||
ctz_optab = init_optab (CTZ);
|
||||
popcount_optab = init_optab (POPCOUNT);
|
||||
parity_optab = init_optab (PARITY);
|
||||
sqrt_optab = init_optab (SQRT);
|
||||
floor_optab = init_optab (UNKNOWN);
|
||||
ceil_optab = init_optab (UNKNOWN);
|
||||
round_optab = init_optab (UNKNOWN);
|
||||
btrunc_optab = init_optab (UNKNOWN);
|
||||
nearbyint_optab = init_optab (UNKNOWN);
|
||||
rint_optab = init_optab (UNKNOWN);
|
||||
sincos_optab = init_optab (UNKNOWN);
|
||||
sin_optab = init_optab (UNKNOWN);
|
||||
asin_optab = init_optab (UNKNOWN);
|
||||
cos_optab = init_optab (UNKNOWN);
|
||||
acos_optab = init_optab (UNKNOWN);
|
||||
exp_optab = init_optab (UNKNOWN);
|
||||
exp10_optab = init_optab (UNKNOWN);
|
||||
exp2_optab = init_optab (UNKNOWN);
|
||||
expm1_optab = init_optab (UNKNOWN);
|
||||
ldexp_optab = init_optab (UNKNOWN);
|
||||
scalb_optab = init_optab (UNKNOWN);
|
||||
logb_optab = init_optab (UNKNOWN);
|
||||
ilogb_optab = init_optab (UNKNOWN);
|
||||
log_optab = init_optab (UNKNOWN);
|
||||
log10_optab = init_optab (UNKNOWN);
|
||||
log2_optab = init_optab (UNKNOWN);
|
||||
log1p_optab = init_optab (UNKNOWN);
|
||||
tan_optab = init_optab (UNKNOWN);
|
||||
atan_optab = init_optab (UNKNOWN);
|
||||
copysign_optab = init_optab (UNKNOWN);
|
||||
signbit_optab = init_optab (UNKNOWN);
|
||||
init_optab (neg_optab, NEG);
|
||||
init_optab (ssneg_optab, SS_NEG);
|
||||
init_optab (usneg_optab, US_NEG);
|
||||
init_optabv (negv_optab, NEG);
|
||||
init_optab (abs_optab, ABS);
|
||||
init_optabv (absv_optab, ABS);
|
||||
init_optab (addcc_optab, UNKNOWN);
|
||||
init_optab (one_cmpl_optab, NOT);
|
||||
init_optab (bswap_optab, BSWAP);
|
||||
init_optab (ffs_optab, FFS);
|
||||
init_optab (clz_optab, CLZ);
|
||||
init_optab (ctz_optab, CTZ);
|
||||
init_optab (popcount_optab, POPCOUNT);
|
||||
init_optab (parity_optab, PARITY);
|
||||
init_optab (sqrt_optab, SQRT);
|
||||
init_optab (floor_optab, UNKNOWN);
|
||||
init_optab (ceil_optab, UNKNOWN);
|
||||
init_optab (round_optab, UNKNOWN);
|
||||
init_optab (btrunc_optab, UNKNOWN);
|
||||
init_optab (nearbyint_optab, UNKNOWN);
|
||||
init_optab (rint_optab, UNKNOWN);
|
||||
init_optab (sincos_optab, UNKNOWN);
|
||||
init_optab (sin_optab, UNKNOWN);
|
||||
init_optab (asin_optab, UNKNOWN);
|
||||
init_optab (cos_optab, UNKNOWN);
|
||||
init_optab (acos_optab, UNKNOWN);
|
||||
init_optab (exp_optab, UNKNOWN);
|
||||
init_optab (exp10_optab, UNKNOWN);
|
||||
init_optab (exp2_optab, UNKNOWN);
|
||||
init_optab (expm1_optab, UNKNOWN);
|
||||
init_optab (ldexp_optab, UNKNOWN);
|
||||
init_optab (scalb_optab, UNKNOWN);
|
||||
init_optab (logb_optab, UNKNOWN);
|
||||
init_optab (ilogb_optab, UNKNOWN);
|
||||
init_optab (log_optab, UNKNOWN);
|
||||
init_optab (log10_optab, UNKNOWN);
|
||||
init_optab (log2_optab, UNKNOWN);
|
||||
init_optab (log1p_optab, UNKNOWN);
|
||||
init_optab (tan_optab, UNKNOWN);
|
||||
init_optab (atan_optab, UNKNOWN);
|
||||
init_optab (copysign_optab, UNKNOWN);
|
||||
init_optab (signbit_optab, UNKNOWN);
|
||||
|
||||
isinf_optab = init_optab (UNKNOWN);
|
||||
init_optab (isinf_optab, UNKNOWN);
|
||||
|
||||
strlen_optab = init_optab (UNKNOWN);
|
||||
cbranch_optab = init_optab (UNKNOWN);
|
||||
cmov_optab = init_optab (UNKNOWN);
|
||||
cstore_optab = init_optab (UNKNOWN);
|
||||
push_optab = init_optab (UNKNOWN);
|
||||
init_optab (strlen_optab, UNKNOWN);
|
||||
init_optab (cbranch_optab, UNKNOWN);
|
||||
init_optab (cmov_optab, UNKNOWN);
|
||||
init_optab (cstore_optab, UNKNOWN);
|
||||
init_optab (push_optab, UNKNOWN);
|
||||
|
||||
reduc_smax_optab = init_optab (UNKNOWN);
|
||||
reduc_umax_optab = init_optab (UNKNOWN);
|
||||
reduc_smin_optab = init_optab (UNKNOWN);
|
||||
reduc_umin_optab = init_optab (UNKNOWN);
|
||||
reduc_splus_optab = init_optab (UNKNOWN);
|
||||
reduc_uplus_optab = init_optab (UNKNOWN);
|
||||
init_optab (reduc_smax_optab, UNKNOWN);
|
||||
init_optab (reduc_umax_optab, UNKNOWN);
|
||||
init_optab (reduc_smin_optab, UNKNOWN);
|
||||
init_optab (reduc_umin_optab, UNKNOWN);
|
||||
init_optab (reduc_splus_optab, UNKNOWN);
|
||||
init_optab (reduc_uplus_optab, UNKNOWN);
|
||||
|
||||
ssum_widen_optab = init_optab (UNKNOWN);
|
||||
usum_widen_optab = init_optab (UNKNOWN);
|
||||
sdot_prod_optab = init_optab (UNKNOWN);
|
||||
udot_prod_optab = init_optab (UNKNOWN);
|
||||
init_optab (ssum_widen_optab, UNKNOWN);
|
||||
init_optab (usum_widen_optab, UNKNOWN);
|
||||
init_optab (sdot_prod_optab, UNKNOWN);
|
||||
init_optab (udot_prod_optab, UNKNOWN);
|
||||
|
||||
vec_extract_optab = init_optab (UNKNOWN);
|
||||
vec_extract_even_optab = init_optab (UNKNOWN);
|
||||
vec_extract_odd_optab = init_optab (UNKNOWN);
|
||||
vec_interleave_high_optab = init_optab (UNKNOWN);
|
||||
vec_interleave_low_optab = init_optab (UNKNOWN);
|
||||
vec_set_optab = init_optab (UNKNOWN);
|
||||
vec_init_optab = init_optab (UNKNOWN);
|
||||
vec_shl_optab = init_optab (UNKNOWN);
|
||||
vec_shr_optab = init_optab (UNKNOWN);
|
||||
vec_realign_load_optab = init_optab (UNKNOWN);
|
||||
movmisalign_optab = init_optab (UNKNOWN);
|
||||
vec_widen_umult_hi_optab = init_optab (UNKNOWN);
|
||||
vec_widen_umult_lo_optab = init_optab (UNKNOWN);
|
||||
vec_widen_smult_hi_optab = init_optab (UNKNOWN);
|
||||
vec_widen_smult_lo_optab = init_optab (UNKNOWN);
|
||||
vec_unpacks_hi_optab = init_optab (UNKNOWN);
|
||||
vec_unpacks_lo_optab = init_optab (UNKNOWN);
|
||||
vec_unpacku_hi_optab = init_optab (UNKNOWN);
|
||||
vec_unpacku_lo_optab = init_optab (UNKNOWN);
|
||||
vec_unpacks_float_hi_optab = init_optab (UNKNOWN);
|
||||
vec_unpacks_float_lo_optab = init_optab (UNKNOWN);
|
||||
vec_unpacku_float_hi_optab = init_optab (UNKNOWN);
|
||||
vec_unpacku_float_lo_optab = init_optab (UNKNOWN);
|
||||
vec_pack_trunc_optab = init_optab (UNKNOWN);
|
||||
vec_pack_usat_optab = init_optab (UNKNOWN);
|
||||
vec_pack_ssat_optab = init_optab (UNKNOWN);
|
||||
vec_pack_ufix_trunc_optab = init_optab (UNKNOWN);
|
||||
vec_pack_sfix_trunc_optab = init_optab (UNKNOWN);
|
||||
init_optab (vec_extract_optab, UNKNOWN);
|
||||
init_optab (vec_extract_even_optab, UNKNOWN);
|
||||
init_optab (vec_extract_odd_optab, UNKNOWN);
|
||||
init_optab (vec_interleave_high_optab, UNKNOWN);
|
||||
init_optab (vec_interleave_low_optab, UNKNOWN);
|
||||
init_optab (vec_set_optab, UNKNOWN);
|
||||
init_optab (vec_init_optab, UNKNOWN);
|
||||
init_optab (vec_shl_optab, UNKNOWN);
|
||||
init_optab (vec_shr_optab, UNKNOWN);
|
||||
init_optab (vec_realign_load_optab, UNKNOWN);
|
||||
init_optab (movmisalign_optab, UNKNOWN);
|
||||
init_optab (vec_widen_umult_hi_optab, UNKNOWN);
|
||||
init_optab (vec_widen_umult_lo_optab, UNKNOWN);
|
||||
init_optab (vec_widen_smult_hi_optab, UNKNOWN);
|
||||
init_optab (vec_widen_smult_lo_optab, UNKNOWN);
|
||||
init_optab (vec_unpacks_hi_optab, UNKNOWN);
|
||||
init_optab (vec_unpacks_lo_optab, UNKNOWN);
|
||||
init_optab (vec_unpacku_hi_optab, UNKNOWN);
|
||||
init_optab (vec_unpacku_lo_optab, UNKNOWN);
|
||||
init_optab (vec_unpacks_float_hi_optab, UNKNOWN);
|
||||
init_optab (vec_unpacks_float_lo_optab, UNKNOWN);
|
||||
init_optab (vec_unpacku_float_hi_optab, UNKNOWN);
|
||||
init_optab (vec_unpacku_float_lo_optab, UNKNOWN);
|
||||
init_optab (vec_pack_trunc_optab, UNKNOWN);
|
||||
init_optab (vec_pack_usat_optab, UNKNOWN);
|
||||
init_optab (vec_pack_ssat_optab, UNKNOWN);
|
||||
init_optab (vec_pack_ufix_trunc_optab, UNKNOWN);
|
||||
init_optab (vec_pack_sfix_trunc_optab, UNKNOWN);
|
||||
|
||||
powi_optab = init_optab (UNKNOWN);
|
||||
init_optab (powi_optab, UNKNOWN);
|
||||
|
||||
/* Conversions. */
|
||||
sext_optab = init_convert_optab (SIGN_EXTEND);
|
||||
zext_optab = init_convert_optab (ZERO_EXTEND);
|
||||
trunc_optab = init_convert_optab (TRUNCATE);
|
||||
sfix_optab = init_convert_optab (FIX);
|
||||
ufix_optab = init_convert_optab (UNSIGNED_FIX);
|
||||
sfixtrunc_optab = init_convert_optab (UNKNOWN);
|
||||
ufixtrunc_optab = init_convert_optab (UNKNOWN);
|
||||
sfloat_optab = init_convert_optab (FLOAT);
|
||||
ufloat_optab = init_convert_optab (UNSIGNED_FLOAT);
|
||||
lrint_optab = init_convert_optab (UNKNOWN);
|
||||
lround_optab = init_convert_optab (UNKNOWN);
|
||||
lfloor_optab = init_convert_optab (UNKNOWN);
|
||||
lceil_optab = init_convert_optab (UNKNOWN);
|
||||
init_convert_optab (sext_optab, SIGN_EXTEND);
|
||||
init_convert_optab (zext_optab, ZERO_EXTEND);
|
||||
init_convert_optab (trunc_optab, TRUNCATE);
|
||||
init_convert_optab (sfix_optab, FIX);
|
||||
init_convert_optab (ufix_optab, UNSIGNED_FIX);
|
||||
init_convert_optab (sfixtrunc_optab, UNKNOWN);
|
||||
init_convert_optab (ufixtrunc_optab, UNKNOWN);
|
||||
init_convert_optab (sfloat_optab, FLOAT);
|
||||
init_convert_optab (ufloat_optab, UNSIGNED_FLOAT);
|
||||
init_convert_optab (lrint_optab, UNKNOWN);
|
||||
init_convert_optab (lround_optab, UNKNOWN);
|
||||
init_convert_optab (lfloor_optab, UNKNOWN);
|
||||
init_convert_optab (lceil_optab, UNKNOWN);
|
||||
|
||||
fract_optab = init_convert_optab (FRACT_CONVERT);
|
||||
fractuns_optab = init_convert_optab (UNSIGNED_FRACT_CONVERT);
|
||||
satfract_optab = init_convert_optab (SAT_FRACT);
|
||||
satfractuns_optab = init_convert_optab (UNSIGNED_SAT_FRACT);
|
||||
init_convert_optab (fract_optab, FRACT_CONVERT);
|
||||
init_convert_optab (fractuns_optab, UNSIGNED_FRACT_CONVERT);
|
||||
init_convert_optab (satfract_optab, SAT_FRACT);
|
||||
init_convert_optab (satfractuns_optab, UNSIGNED_SAT_FRACT);
|
||||
|
||||
for (i = 0; i < NUM_MACHINE_MODES; i++)
|
||||
{
|
||||
@ -6744,8 +6755,8 @@ debug_optab_libfuncs (void)
|
||||
optab o;
|
||||
rtx l;
|
||||
|
||||
o = optab_table[i];
|
||||
l = optab_libfunc (optab_table[i], j);
|
||||
o = &optab_table[i];
|
||||
l = optab_libfunc (o, j);
|
||||
if (l)
|
||||
{
|
||||
gcc_assert (GET_CODE (l) == SYMBOL_REF);
|
||||
@ -6764,7 +6775,7 @@ debug_optab_libfuncs (void)
|
||||
convert_optab o;
|
||||
rtx l;
|
||||
|
||||
o = convert_optab_table[i];
|
||||
o = &convert_optab_table[i];
|
||||
l = convert_optab_libfunc (o, j, k);
|
||||
if (l)
|
||||
{
|
||||
|
344
gcc/optabs.h
344
gcc/optabs.h
@ -360,172 +360,172 @@ enum optab_index
|
||||
OTI_MAX
|
||||
};
|
||||
|
||||
extern optab optab_table[OTI_MAX];
|
||||
extern struct optab optab_table[OTI_MAX];
|
||||
|
||||
#define ssadd_optab (optab_table[OTI_ssadd])
|
||||
#define usadd_optab (optab_table[OTI_usadd])
|
||||
#define sssub_optab (optab_table[OTI_sssub])
|
||||
#define ussub_optab (optab_table[OTI_ussub])
|
||||
#define ssmul_optab (optab_table[OTI_ssmul])
|
||||
#define usmul_optab (optab_table[OTI_usmul])
|
||||
#define ssdiv_optab (optab_table[OTI_ssdiv])
|
||||
#define usdiv_optab (optab_table[OTI_usdiv])
|
||||
#define ssneg_optab (optab_table[OTI_ssneg])
|
||||
#define usneg_optab (optab_table[OTI_usneg])
|
||||
#define ssashl_optab (optab_table[OTI_ssashl])
|
||||
#define usashl_optab (optab_table[OTI_usashl])
|
||||
#define ssadd_optab (&optab_table[OTI_ssadd])
|
||||
#define usadd_optab (&optab_table[OTI_usadd])
|
||||
#define sssub_optab (&optab_table[OTI_sssub])
|
||||
#define ussub_optab (&optab_table[OTI_ussub])
|
||||
#define ssmul_optab (&optab_table[OTI_ssmul])
|
||||
#define usmul_optab (&optab_table[OTI_usmul])
|
||||
#define ssdiv_optab (&optab_table[OTI_ssdiv])
|
||||
#define usdiv_optab (&optab_table[OTI_usdiv])
|
||||
#define ssneg_optab (&optab_table[OTI_ssneg])
|
||||
#define usneg_optab (&optab_table[OTI_usneg])
|
||||
#define ssashl_optab (&optab_table[OTI_ssashl])
|
||||
#define usashl_optab (&optab_table[OTI_usashl])
|
||||
|
||||
#define add_optab (optab_table[OTI_add])
|
||||
#define sub_optab (optab_table[OTI_sub])
|
||||
#define smul_optab (optab_table[OTI_smul])
|
||||
#define addv_optab (optab_table[OTI_addv])
|
||||
#define subv_optab (optab_table[OTI_subv])
|
||||
#define smul_highpart_optab (optab_table[OTI_smul_highpart])
|
||||
#define umul_highpart_optab (optab_table[OTI_umul_highpart])
|
||||
#define smul_widen_optab (optab_table[OTI_smul_widen])
|
||||
#define umul_widen_optab (optab_table[OTI_umul_widen])
|
||||
#define usmul_widen_optab (optab_table[OTI_usmul_widen])
|
||||
#define smadd_widen_optab (optab_table[OTI_smadd_widen])
|
||||
#define umadd_widen_optab (optab_table[OTI_umadd_widen])
|
||||
#define ssmadd_widen_optab (optab_table[OTI_ssmadd_widen])
|
||||
#define usmadd_widen_optab (optab_table[OTI_usmadd_widen])
|
||||
#define smsub_widen_optab (optab_table[OTI_smsub_widen])
|
||||
#define umsub_widen_optab (optab_table[OTI_umsub_widen])
|
||||
#define ssmsub_widen_optab (optab_table[OTI_ssmsub_widen])
|
||||
#define usmsub_widen_optab (optab_table[OTI_usmsub_widen])
|
||||
#define sdiv_optab (optab_table[OTI_sdiv])
|
||||
#define smulv_optab (optab_table[OTI_smulv])
|
||||
#define sdivv_optab (optab_table[OTI_sdivv])
|
||||
#define sdivmod_optab (optab_table[OTI_sdivmod])
|
||||
#define udiv_optab (optab_table[OTI_udiv])
|
||||
#define udivmod_optab (optab_table[OTI_udivmod])
|
||||
#define smod_optab (optab_table[OTI_smod])
|
||||
#define umod_optab (optab_table[OTI_umod])
|
||||
#define fmod_optab (optab_table[OTI_fmod])
|
||||
#define remainder_optab (optab_table[OTI_remainder])
|
||||
#define ftrunc_optab (optab_table[OTI_ftrunc])
|
||||
#define and_optab (optab_table[OTI_and])
|
||||
#define ior_optab (optab_table[OTI_ior])
|
||||
#define xor_optab (optab_table[OTI_xor])
|
||||
#define ashl_optab (optab_table[OTI_ashl])
|
||||
#define lshr_optab (optab_table[OTI_lshr])
|
||||
#define ashr_optab (optab_table[OTI_ashr])
|
||||
#define rotl_optab (optab_table[OTI_rotl])
|
||||
#define rotr_optab (optab_table[OTI_rotr])
|
||||
#define smin_optab (optab_table[OTI_smin])
|
||||
#define smax_optab (optab_table[OTI_smax])
|
||||
#define umin_optab (optab_table[OTI_umin])
|
||||
#define umax_optab (optab_table[OTI_umax])
|
||||
#define pow_optab (optab_table[OTI_pow])
|
||||
#define atan2_optab (optab_table[OTI_atan2])
|
||||
#define add_optab (&optab_table[OTI_add])
|
||||
#define sub_optab (&optab_table[OTI_sub])
|
||||
#define smul_optab (&optab_table[OTI_smul])
|
||||
#define addv_optab (&optab_table[OTI_addv])
|
||||
#define subv_optab (&optab_table[OTI_subv])
|
||||
#define smul_highpart_optab (&optab_table[OTI_smul_highpart])
|
||||
#define umul_highpart_optab (&optab_table[OTI_umul_highpart])
|
||||
#define smul_widen_optab (&optab_table[OTI_smul_widen])
|
||||
#define umul_widen_optab (&optab_table[OTI_umul_widen])
|
||||
#define usmul_widen_optab (&optab_table[OTI_usmul_widen])
|
||||
#define smadd_widen_optab (&optab_table[OTI_smadd_widen])
|
||||
#define umadd_widen_optab (&optab_table[OTI_umadd_widen])
|
||||
#define ssmadd_widen_optab (&optab_table[OTI_ssmadd_widen])
|
||||
#define usmadd_widen_optab (&optab_table[OTI_usmadd_widen])
|
||||
#define smsub_widen_optab (&optab_table[OTI_smsub_widen])
|
||||
#define umsub_widen_optab (&optab_table[OTI_umsub_widen])
|
||||
#define ssmsub_widen_optab (&optab_table[OTI_ssmsub_widen])
|
||||
#define usmsub_widen_optab (&optab_table[OTI_usmsub_widen])
|
||||
#define sdiv_optab (&optab_table[OTI_sdiv])
|
||||
#define smulv_optab (&optab_table[OTI_smulv])
|
||||
#define sdivv_optab (&optab_table[OTI_sdivv])
|
||||
#define sdivmod_optab (&optab_table[OTI_sdivmod])
|
||||
#define udiv_optab (&optab_table[OTI_udiv])
|
||||
#define udivmod_optab (&optab_table[OTI_udivmod])
|
||||
#define smod_optab (&optab_table[OTI_smod])
|
||||
#define umod_optab (&optab_table[OTI_umod])
|
||||
#define fmod_optab (&optab_table[OTI_fmod])
|
||||
#define remainder_optab (&optab_table[OTI_remainder])
|
||||
#define ftrunc_optab (&optab_table[OTI_ftrunc])
|
||||
#define and_optab (&optab_table[OTI_and])
|
||||
#define ior_optab (&optab_table[OTI_ior])
|
||||
#define xor_optab (&optab_table[OTI_xor])
|
||||
#define ashl_optab (&optab_table[OTI_ashl])
|
||||
#define lshr_optab (&optab_table[OTI_lshr])
|
||||
#define ashr_optab (&optab_table[OTI_ashr])
|
||||
#define rotl_optab (&optab_table[OTI_rotl])
|
||||
#define rotr_optab (&optab_table[OTI_rotr])
|
||||
#define smin_optab (&optab_table[OTI_smin])
|
||||
#define smax_optab (&optab_table[OTI_smax])
|
||||
#define umin_optab (&optab_table[OTI_umin])
|
||||
#define umax_optab (&optab_table[OTI_umax])
|
||||
#define pow_optab (&optab_table[OTI_pow])
|
||||
#define atan2_optab (&optab_table[OTI_atan2])
|
||||
|
||||
#define mov_optab (optab_table[OTI_mov])
|
||||
#define movstrict_optab (optab_table[OTI_movstrict])
|
||||
#define movmisalign_optab (optab_table[OTI_movmisalign])
|
||||
#define storent_optab (optab_table[OTI_storent])
|
||||
#define mov_optab (&optab_table[OTI_mov])
|
||||
#define movstrict_optab (&optab_table[OTI_movstrict])
|
||||
#define movmisalign_optab (&optab_table[OTI_movmisalign])
|
||||
#define storent_optab (&optab_table[OTI_storent])
|
||||
|
||||
#define neg_optab (optab_table[OTI_neg])
|
||||
#define negv_optab (optab_table[OTI_negv])
|
||||
#define abs_optab (optab_table[OTI_abs])
|
||||
#define absv_optab (optab_table[OTI_absv])
|
||||
#define one_cmpl_optab (optab_table[OTI_one_cmpl])
|
||||
#define bswap_optab (optab_table[OTI_bswap])
|
||||
#define ffs_optab (optab_table[OTI_ffs])
|
||||
#define clz_optab (optab_table[OTI_clz])
|
||||
#define ctz_optab (optab_table[OTI_ctz])
|
||||
#define popcount_optab (optab_table[OTI_popcount])
|
||||
#define parity_optab (optab_table[OTI_parity])
|
||||
#define sqrt_optab (optab_table[OTI_sqrt])
|
||||
#define sincos_optab (optab_table[OTI_sincos])
|
||||
#define sin_optab (optab_table[OTI_sin])
|
||||
#define asin_optab (optab_table[OTI_asin])
|
||||
#define cos_optab (optab_table[OTI_cos])
|
||||
#define acos_optab (optab_table[OTI_acos])
|
||||
#define exp_optab (optab_table[OTI_exp])
|
||||
#define exp10_optab (optab_table[OTI_exp10])
|
||||
#define exp2_optab (optab_table[OTI_exp2])
|
||||
#define expm1_optab (optab_table[OTI_expm1])
|
||||
#define ldexp_optab (optab_table[OTI_ldexp])
|
||||
#define scalb_optab (optab_table[OTI_scalb])
|
||||
#define logb_optab (optab_table[OTI_logb])
|
||||
#define ilogb_optab (optab_table[OTI_ilogb])
|
||||
#define log_optab (optab_table[OTI_log])
|
||||
#define log10_optab (optab_table[OTI_log10])
|
||||
#define log2_optab (optab_table[OTI_log2])
|
||||
#define log1p_optab (optab_table[OTI_log1p])
|
||||
#define floor_optab (optab_table[OTI_floor])
|
||||
#define ceil_optab (optab_table[OTI_ceil])
|
||||
#define btrunc_optab (optab_table[OTI_btrunc])
|
||||
#define round_optab (optab_table[OTI_round])
|
||||
#define nearbyint_optab (optab_table[OTI_nearbyint])
|
||||
#define rint_optab (optab_table[OTI_rint])
|
||||
#define tan_optab (optab_table[OTI_tan])
|
||||
#define atan_optab (optab_table[OTI_atan])
|
||||
#define copysign_optab (optab_table[OTI_copysign])
|
||||
#define signbit_optab (optab_table[OTI_signbit])
|
||||
#define isinf_optab (optab_table[OTI_isinf])
|
||||
#define neg_optab (&optab_table[OTI_neg])
|
||||
#define negv_optab (&optab_table[OTI_negv])
|
||||
#define abs_optab (&optab_table[OTI_abs])
|
||||
#define absv_optab (&optab_table[OTI_absv])
|
||||
#define one_cmpl_optab (&optab_table[OTI_one_cmpl])
|
||||
#define bswap_optab (&optab_table[OTI_bswap])
|
||||
#define ffs_optab (&optab_table[OTI_ffs])
|
||||
#define clz_optab (&optab_table[OTI_clz])
|
||||
#define ctz_optab (&optab_table[OTI_ctz])
|
||||
#define popcount_optab (&optab_table[OTI_popcount])
|
||||
#define parity_optab (&optab_table[OTI_parity])
|
||||
#define sqrt_optab (&optab_table[OTI_sqrt])
|
||||
#define sincos_optab (&optab_table[OTI_sincos])
|
||||
#define sin_optab (&optab_table[OTI_sin])
|
||||
#define asin_optab (&optab_table[OTI_asin])
|
||||
#define cos_optab (&optab_table[OTI_cos])
|
||||
#define acos_optab (&optab_table[OTI_acos])
|
||||
#define exp_optab (&optab_table[OTI_exp])
|
||||
#define exp10_optab (&optab_table[OTI_exp10])
|
||||
#define exp2_optab (&optab_table[OTI_exp2])
|
||||
#define expm1_optab (&optab_table[OTI_expm1])
|
||||
#define ldexp_optab (&optab_table[OTI_ldexp])
|
||||
#define scalb_optab (&optab_table[OTI_scalb])
|
||||
#define logb_optab (&optab_table[OTI_logb])
|
||||
#define ilogb_optab (&optab_table[OTI_ilogb])
|
||||
#define log_optab (&optab_table[OTI_log])
|
||||
#define log10_optab (&optab_table[OTI_log10])
|
||||
#define log2_optab (&optab_table[OTI_log2])
|
||||
#define log1p_optab (&optab_table[OTI_log1p])
|
||||
#define floor_optab (&optab_table[OTI_floor])
|
||||
#define ceil_optab (&optab_table[OTI_ceil])
|
||||
#define btrunc_optab (&optab_table[OTI_btrunc])
|
||||
#define round_optab (&optab_table[OTI_round])
|
||||
#define nearbyint_optab (&optab_table[OTI_nearbyint])
|
||||
#define rint_optab (&optab_table[OTI_rint])
|
||||
#define tan_optab (&optab_table[OTI_tan])
|
||||
#define atan_optab (&optab_table[OTI_atan])
|
||||
#define copysign_optab (&optab_table[OTI_copysign])
|
||||
#define signbit_optab (&optab_table[OTI_signbit])
|
||||
#define isinf_optab (&optab_table[OTI_isinf])
|
||||
|
||||
#define cmp_optab (optab_table[OTI_cmp])
|
||||
#define ucmp_optab (optab_table[OTI_ucmp])
|
||||
#define tst_optab (optab_table[OTI_tst])
|
||||
#define cmp_optab (&optab_table[OTI_cmp])
|
||||
#define ucmp_optab (&optab_table[OTI_ucmp])
|
||||
#define tst_optab (&optab_table[OTI_tst])
|
||||
|
||||
#define eq_optab (optab_table[OTI_eq])
|
||||
#define ne_optab (optab_table[OTI_ne])
|
||||
#define gt_optab (optab_table[OTI_gt])
|
||||
#define ge_optab (optab_table[OTI_ge])
|
||||
#define lt_optab (optab_table[OTI_lt])
|
||||
#define le_optab (optab_table[OTI_le])
|
||||
#define unord_optab (optab_table[OTI_unord])
|
||||
#define eq_optab (&optab_table[OTI_eq])
|
||||
#define ne_optab (&optab_table[OTI_ne])
|
||||
#define gt_optab (&optab_table[OTI_gt])
|
||||
#define ge_optab (&optab_table[OTI_ge])
|
||||
#define lt_optab (&optab_table[OTI_lt])
|
||||
#define le_optab (&optab_table[OTI_le])
|
||||
#define unord_optab (&optab_table[OTI_unord])
|
||||
|
||||
#define strlen_optab (optab_table[OTI_strlen])
|
||||
#define strlen_optab (&optab_table[OTI_strlen])
|
||||
|
||||
#define cbranch_optab (optab_table[OTI_cbranch])
|
||||
#define cmov_optab (optab_table[OTI_cmov])
|
||||
#define cstore_optab (optab_table[OTI_cstore])
|
||||
#define push_optab (optab_table[OTI_push])
|
||||
#define addcc_optab (optab_table[OTI_addcc])
|
||||
#define cbranch_optab (&optab_table[OTI_cbranch])
|
||||
#define cmov_optab (&optab_table[OTI_cmov])
|
||||
#define cstore_optab (&optab_table[OTI_cstore])
|
||||
#define push_optab (&optab_table[OTI_push])
|
||||
#define addcc_optab (&optab_table[OTI_addcc])
|
||||
|
||||
#define reduc_smax_optab (optab_table[OTI_reduc_smax])
|
||||
#define reduc_umax_optab (optab_table[OTI_reduc_umax])
|
||||
#define reduc_smin_optab (optab_table[OTI_reduc_smin])
|
||||
#define reduc_umin_optab (optab_table[OTI_reduc_umin])
|
||||
#define reduc_splus_optab (optab_table[OTI_reduc_splus])
|
||||
#define reduc_uplus_optab (optab_table[OTI_reduc_uplus])
|
||||
#define reduc_smax_optab (&optab_table[OTI_reduc_smax])
|
||||
#define reduc_umax_optab (&optab_table[OTI_reduc_umax])
|
||||
#define reduc_smin_optab (&optab_table[OTI_reduc_smin])
|
||||
#define reduc_umin_optab (&optab_table[OTI_reduc_umin])
|
||||
#define reduc_splus_optab (&optab_table[OTI_reduc_splus])
|
||||
#define reduc_uplus_optab (&optab_table[OTI_reduc_uplus])
|
||||
|
||||
#define ssum_widen_optab (optab_table[OTI_ssum_widen])
|
||||
#define usum_widen_optab (optab_table[OTI_usum_widen])
|
||||
#define sdot_prod_optab (optab_table[OTI_sdot_prod])
|
||||
#define udot_prod_optab (optab_table[OTI_udot_prod])
|
||||
#define ssum_widen_optab (&optab_table[OTI_ssum_widen])
|
||||
#define usum_widen_optab (&optab_table[OTI_usum_widen])
|
||||
#define sdot_prod_optab (&optab_table[OTI_sdot_prod])
|
||||
#define udot_prod_optab (&optab_table[OTI_udot_prod])
|
||||
|
||||
#define vec_set_optab (optab_table[OTI_vec_set])
|
||||
#define vec_extract_optab (optab_table[OTI_vec_extract])
|
||||
#define vec_extract_even_optab (optab_table[OTI_vec_extract_even])
|
||||
#define vec_extract_odd_optab (optab_table[OTI_vec_extract_odd])
|
||||
#define vec_interleave_high_optab (optab_table[OTI_vec_interleave_high])
|
||||
#define vec_interleave_low_optab (optab_table[OTI_vec_interleave_low])
|
||||
#define vec_init_optab (optab_table[OTI_vec_init])
|
||||
#define vec_shl_optab (optab_table[OTI_vec_shl])
|
||||
#define vec_shr_optab (optab_table[OTI_vec_shr])
|
||||
#define vec_realign_load_optab (optab_table[OTI_vec_realign_load])
|
||||
#define vec_widen_umult_hi_optab (optab_table[OTI_vec_widen_umult_hi])
|
||||
#define vec_widen_umult_lo_optab (optab_table[OTI_vec_widen_umult_lo])
|
||||
#define vec_widen_smult_hi_optab (optab_table[OTI_vec_widen_smult_hi])
|
||||
#define vec_widen_smult_lo_optab (optab_table[OTI_vec_widen_smult_lo])
|
||||
#define vec_unpacks_hi_optab (optab_table[OTI_vec_unpacks_hi])
|
||||
#define vec_unpacks_lo_optab (optab_table[OTI_vec_unpacks_lo])
|
||||
#define vec_unpacku_hi_optab (optab_table[OTI_vec_unpacku_hi])
|
||||
#define vec_unpacku_lo_optab (optab_table[OTI_vec_unpacku_lo])
|
||||
#define vec_unpacks_float_hi_optab (optab_table[OTI_vec_unpacks_float_hi])
|
||||
#define vec_unpacks_float_lo_optab (optab_table[OTI_vec_unpacks_float_lo])
|
||||
#define vec_unpacku_float_hi_optab (optab_table[OTI_vec_unpacku_float_hi])
|
||||
#define vec_unpacku_float_lo_optab (optab_table[OTI_vec_unpacku_float_lo])
|
||||
#define vec_pack_trunc_optab (optab_table[OTI_vec_pack_trunc])
|
||||
#define vec_pack_ssat_optab (optab_table[OTI_vec_pack_ssat])
|
||||
#define vec_pack_usat_optab (optab_table[OTI_vec_pack_usat])
|
||||
#define vec_pack_sfix_trunc_optab (optab_table[OTI_vec_pack_sfix_trunc])
|
||||
#define vec_pack_ufix_trunc_optab (optab_table[OTI_vec_pack_ufix_trunc])
|
||||
#define vec_set_optab (&optab_table[OTI_vec_set])
|
||||
#define vec_extract_optab (&optab_table[OTI_vec_extract])
|
||||
#define vec_extract_even_optab (&optab_table[OTI_vec_extract_even])
|
||||
#define vec_extract_odd_optab (&optab_table[OTI_vec_extract_odd])
|
||||
#define vec_interleave_high_optab (&optab_table[OTI_vec_interleave_high])
|
||||
#define vec_interleave_low_optab (&optab_table[OTI_vec_interleave_low])
|
||||
#define vec_init_optab (&optab_table[OTI_vec_init])
|
||||
#define vec_shl_optab (&optab_table[OTI_vec_shl])
|
||||
#define vec_shr_optab (&optab_table[OTI_vec_shr])
|
||||
#define vec_realign_load_optab (&optab_table[OTI_vec_realign_load])
|
||||
#define vec_widen_umult_hi_optab (&optab_table[OTI_vec_widen_umult_hi])
|
||||
#define vec_widen_umult_lo_optab (&optab_table[OTI_vec_widen_umult_lo])
|
||||
#define vec_widen_smult_hi_optab (&optab_table[OTI_vec_widen_smult_hi])
|
||||
#define vec_widen_smult_lo_optab (&optab_table[OTI_vec_widen_smult_lo])
|
||||
#define vec_unpacks_hi_optab (&optab_table[OTI_vec_unpacks_hi])
|
||||
#define vec_unpacks_lo_optab (&optab_table[OTI_vec_unpacks_lo])
|
||||
#define vec_unpacku_hi_optab (&optab_table[OTI_vec_unpacku_hi])
|
||||
#define vec_unpacku_lo_optab (&optab_table[OTI_vec_unpacku_lo])
|
||||
#define vec_unpacks_float_hi_optab (&optab_table[OTI_vec_unpacks_float_hi])
|
||||
#define vec_unpacks_float_lo_optab (&optab_table[OTI_vec_unpacks_float_lo])
|
||||
#define vec_unpacku_float_hi_optab (&optab_table[OTI_vec_unpacku_float_hi])
|
||||
#define vec_unpacku_float_lo_optab (&optab_table[OTI_vec_unpacku_float_lo])
|
||||
#define vec_pack_trunc_optab (&optab_table[OTI_vec_pack_trunc])
|
||||
#define vec_pack_ssat_optab (&optab_table[OTI_vec_pack_ssat])
|
||||
#define vec_pack_usat_optab (&optab_table[OTI_vec_pack_usat])
|
||||
#define vec_pack_sfix_trunc_optab (&optab_table[OTI_vec_pack_sfix_trunc])
|
||||
#define vec_pack_ufix_trunc_optab (&optab_table[OTI_vec_pack_ufix_trunc])
|
||||
|
||||
#define powi_optab (optab_table[OTI_powi])
|
||||
#define powi_optab (&optab_table[OTI_powi])
|
||||
|
||||
/* Conversion optabs have their own table and indexes. */
|
||||
enum convert_optab_index
|
||||
@ -556,25 +556,25 @@ enum convert_optab_index
|
||||
COI_MAX
|
||||
};
|
||||
|
||||
extern convert_optab convert_optab_table[COI_MAX];
|
||||
extern struct convert_optab convert_optab_table[COI_MAX];
|
||||
|
||||
#define sext_optab (convert_optab_table[COI_sext])
|
||||
#define zext_optab (convert_optab_table[COI_zext])
|
||||
#define trunc_optab (convert_optab_table[COI_trunc])
|
||||
#define sfix_optab (convert_optab_table[COI_sfix])
|
||||
#define ufix_optab (convert_optab_table[COI_ufix])
|
||||
#define sfixtrunc_optab (convert_optab_table[COI_sfixtrunc])
|
||||
#define ufixtrunc_optab (convert_optab_table[COI_ufixtrunc])
|
||||
#define sfloat_optab (convert_optab_table[COI_sfloat])
|
||||
#define ufloat_optab (convert_optab_table[COI_ufloat])
|
||||
#define lrint_optab (convert_optab_table[COI_lrint])
|
||||
#define lround_optab (convert_optab_table[COI_lround])
|
||||
#define lfloor_optab (convert_optab_table[COI_lfloor])
|
||||
#define lceil_optab (convert_optab_table[COI_lceil])
|
||||
#define fract_optab (convert_optab_table[COI_fract])
|
||||
#define fractuns_optab (convert_optab_table[COI_fractuns])
|
||||
#define satfract_optab (convert_optab_table[COI_satfract])
|
||||
#define satfractuns_optab (convert_optab_table[COI_satfractuns])
|
||||
#define sext_optab (&convert_optab_table[COI_sext])
|
||||
#define zext_optab (&convert_optab_table[COI_zext])
|
||||
#define trunc_optab (&convert_optab_table[COI_trunc])
|
||||
#define sfix_optab (&convert_optab_table[COI_sfix])
|
||||
#define ufix_optab (&convert_optab_table[COI_ufix])
|
||||
#define sfixtrunc_optab (&convert_optab_table[COI_sfixtrunc])
|
||||
#define ufixtrunc_optab (&convert_optab_table[COI_ufixtrunc])
|
||||
#define sfloat_optab (&convert_optab_table[COI_sfloat])
|
||||
#define ufloat_optab (&convert_optab_table[COI_ufloat])
|
||||
#define lrint_optab (&convert_optab_table[COI_lrint])
|
||||
#define lround_optab (&convert_optab_table[COI_lround])
|
||||
#define lfloor_optab (&convert_optab_table[COI_lfloor])
|
||||
#define lceil_optab (&convert_optab_table[COI_lceil])
|
||||
#define fract_optab (&convert_optab_table[COI_fract])
|
||||
#define fractuns_optab (&convert_optab_table[COI_fractuns])
|
||||
#define satfract_optab (&convert_optab_table[COI_satfract])
|
||||
#define satfractuns_optab (&convert_optab_table[COI_satfractuns])
|
||||
|
||||
/* These arrays record the insn_code of insns that may be needed to
|
||||
perform input and output reloads of special objects. They provide a
|
||||
|
Loading…
Reference in New Issue
Block a user