From 33727b5ecb2653eaa3688a4e9102cb454c1ff6a2 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Sun, 18 Nov 2007 20:18:39 +0100 Subject: [PATCH] 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 --- gcc/ChangeLog | 29 ++++ gcc/optabs.c | 455 ++++++++++++++++++++++++++------------------------ gcc/optabs.h | 370 ++++++++++++++++++++-------------------- 3 files changed, 447 insertions(+), 407 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index da17d5f114a..e3b5f8483ba 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,32 @@ +2007-11-18 Jakub Jelinek + + 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 PR tree-optimization/34127 diff --git a/gcc/optabs.c b/gcc/optabs.c index 69177962b53..1f8442b658b 100644 --- a/gcc/optabs.c +++ b/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) { - 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; + /* All insn_code fields are already initialized using + designated initializers. */ } - -static convert_optab -new_convert_optab (void) +#else +static void +new_optab (optab op) { - int i, j; - convert_optab op = xcalloc (sizeof (struct convert_optab), 1); + int i; 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; + optab_handler (op, i)->insn_code = CODE_FOR_nothing; } +#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); - - storent_optab = init_optab (UNKNOWN); - - ucmp_optab = init_optab (UNKNOWN); - tst_optab = init_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); - - 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); - - isinf_optab = init_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); - - 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); - - ssum_widen_optab = init_optab (UNKNOWN); - usum_widen_optab = init_optab (UNKNOWN); - sdot_prod_optab = init_optab (UNKNOWN); - udot_prod_optab = init_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); - - powi_optab = init_optab (UNKNOWN); + init_optab (mov_optab, SET); + init_optab (movstrict_optab, STRICT_LOW_PART); + init_optab (cmp_optab, COMPARE); + + init_optab (storent_optab, UNKNOWN); + + init_optab (ucmp_optab, UNKNOWN); + init_optab (tst_optab, UNKNOWN); + + 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); + + 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); + + init_optab (isinf_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); + + 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); + + init_optab (ssum_widen_optab, UNKNOWN); + init_optab (usum_widen_optab, UNKNOWN); + init_optab (sdot_prod_optab, UNKNOWN); + init_optab (udot_prod_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); + + 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); - - 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 (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); + + 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) { diff --git a/gcc/optabs.h b/gcc/optabs.h index 9dd98134a0b..91625debb73 100644 --- a/gcc/optabs.h +++ b/gcc/optabs.h @@ -360,172 +360,172 @@ enum optab_index OTI_MAX }; -extern 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 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 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 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 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 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 powi_optab (optab_table[OTI_powi]) +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 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 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 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 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 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 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]; - -#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]) +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]) /* These arrays record the insn_code of insns that may be needed to perform input and output reloads of special objects. They provide a -- 2.30.2