This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
RFA: Fix optab reinitialisation when $(CC) is GCC 4.0 or above
- From: Richard Sandiford <rsandifo at nildram dot co dot uk>
- To: gcc-patches at gcc dot gnu dot org
- Date: Mon, 26 Nov 2007 09:22:26 +0000
- Subject: RFA: Fix optab reinitialisation when $(CC) is GCC 4.0 or above
After Jakub's recent (and very welcome) patch to speed up optabs
initialisation, target_reinit no longer reinitialises the optab
table properly when compiled with GCC 4.0 or above. This breaks
the mips16 attribute.
In the patch below, I've tried to adjust things so that we still
skip the initialisation for the first call to init_optabs (which
for most targets, and most MIPS users, is the same as "all calls"),
but continue to do it on second and subsequent calls.
I tried using a static "must initialise" variable, but we're not
yet able to detect that the static variable is not changed by
the initialisation code, so every inlined function reloads and
rechecks the variable. I therefore ended up passing an automatic
variable as an "init?" parameter to the three subroutines that need
to know. DOM is then able to thread the checks, so we just have:
if (first_time)
...quick initialisation path for all optabs...
else
...slow initialisation path for all optabs...
(on x86_64-linux-gnu at least).
The change to init_optabs itself was search-and-replace, so I don't
think it makes the function harder to maintain. All lines stay
within the 80-column limit.
Bootstrapped & regression-tested on x86_64-linux-gnu. Also
regression-tested on mipsisa64-elfoabi, where it fixes several
gcc.target/mips failures. I also checked that the file still
works when compiled with gcc 3.4. OK to install?
Richard
gcc/
* optabs.c (new_optab): Unconditionally use the version that
sets the insn_codes.
(init_optab, init_optabv, init_convert_optab): Add init_insn_code
arguments and only initialize the insn_code fields when true.
(init_optabs): Update calls accordingly. Add a static
next_init_insn_codes variable to track the next call's
init_insn_codes argument.
Index: gcc/optabs.c
===================================================================
--- gcc/optabs.c (revision 130407)
+++ gcc/optabs.c (working copy)
@@ -5565,14 +5565,6 @@ have_insn_for (enum rtx_code code, enum
}
/* Create a blank optab. */
-#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)
{
@@ -5581,14 +5573,15 @@ new_optab (optab op)
for (i = 0; i < NUM_MACHINE_MODES; i++)
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. */
+ code_to_optab table. INIT_INSN_CODES is true if we need
+ to initialize the insn_code fields. */
static inline void
-init_optab (optab op, enum rtx_code code)
+init_optab (bool init_insn_codes, optab op, enum rtx_code code)
{
- new_optab (op);
+ if (init_insn_codes)
+ new_optab (op);
op->code = code;
code_to_optab[(int) code] = op;
}
@@ -5596,23 +5589,25 @@ init_optab (optab op, enum rtx_code code
/* Same, but fill in its code as CODE, and do _not_ write it into
the code_to_optab table. */
static inline void
-init_optabv (optab op, enum rtx_code code)
+init_optabv (bool init_insn_codes, optab op, enum rtx_code code)
{
- new_optab (op);
+ if (init_insn_codes)
+ new_optab (op);
op->code = code;
}
-/* Conversion optabs never go in the code_to_optab table. */
+/* Conversion optabs never go in the code_to_optab table.
+ INIT_INSN_CODES is true if we need to initialize the
+ insn_code fields. */
static void
-init_convert_optab (convert_optab op, enum rtx_code code)
+init_convert_optab (bool init_insn_codes, convert_optab op, enum rtx_code code)
{
-#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
+ if (init_insn_codes)
+ 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;
op->code = code;
}
@@ -6241,6 +6236,15 @@ init_optabs (void)
{
unsigned int i;
enum machine_mode int_mode;
+#if GCC_VERSION >= 4000
+ /* The first time round, all insn_code fields are already initialized using
+ designated initializers. */
+ static bool next_init_insn_codes = false;
+ bool init_insn_codes = next_init_insn_codes;
+ next_init_insn_codes = true;
+#else
+ bool init_insn_codes = true;
+#endif
libfunc_hash = htab_create_ggc (10, hash_libfunc, eq_libfunc, NULL);
/* Start by initializing all tables to contain CODE_FOR_nothing. */
@@ -6259,192 +6263,192 @@ init_optabs (void)
vcondu_gen_code[i] = CODE_FOR_nothing;
}
- 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);
+ init_optab (init_insn_codes, add_optab, PLUS);
+ init_optabv (init_insn_codes, addv_optab, PLUS);
+ init_optab (init_insn_codes, sub_optab, MINUS);
+ init_optabv (init_insn_codes, subv_optab, MINUS);
+ init_optab (init_insn_codes, ssadd_optab, SS_PLUS);
+ init_optab (init_insn_codes, usadd_optab, US_PLUS);
+ init_optab (init_insn_codes, sssub_optab, SS_MINUS);
+ init_optab (init_insn_codes, ussub_optab, US_MINUS);
+ init_optab (init_insn_codes, smul_optab, MULT);
+ init_optab (init_insn_codes, ssmul_optab, SS_MULT);
+ init_optab (init_insn_codes, usmul_optab, US_MULT);
+ init_optabv (init_insn_codes, smulv_optab, MULT);
+ init_optab (init_insn_codes, smul_highpart_optab, UNKNOWN);
+ init_optab (init_insn_codes, umul_highpart_optab, UNKNOWN);
+ init_optab (init_insn_codes, smul_widen_optab, UNKNOWN);
+ init_optab (init_insn_codes, umul_widen_optab, UNKNOWN);
+ init_optab (init_insn_codes, usmul_widen_optab, UNKNOWN);
+ init_optab (init_insn_codes, smadd_widen_optab, UNKNOWN);
+ init_optab (init_insn_codes, umadd_widen_optab, UNKNOWN);
+ init_optab (init_insn_codes, ssmadd_widen_optab, UNKNOWN);
+ init_optab (init_insn_codes, usmadd_widen_optab, UNKNOWN);
+ init_optab (init_insn_codes, smsub_widen_optab, UNKNOWN);
+ init_optab (init_insn_codes, umsub_widen_optab, UNKNOWN);
+ init_optab (init_insn_codes, ssmsub_widen_optab, UNKNOWN);
+ init_optab (init_insn_codes, usmsub_widen_optab, UNKNOWN);
+ init_optab (init_insn_codes, sdiv_optab, DIV);
+ init_optab (init_insn_codes, ssdiv_optab, SS_DIV);
+ init_optab (init_insn_codes, usdiv_optab, US_DIV);
+ init_optabv (init_insn_codes, sdivv_optab, DIV);
+ init_optab (init_insn_codes, sdivmod_optab, UNKNOWN);
+ init_optab (init_insn_codes, udiv_optab, UDIV);
+ init_optab (init_insn_codes, udivmod_optab, UNKNOWN);
+ init_optab (init_insn_codes, smod_optab, MOD);
+ init_optab (init_insn_codes, umod_optab, UMOD);
+ init_optab (init_insn_codes, fmod_optab, UNKNOWN);
+ init_optab (init_insn_codes, remainder_optab, UNKNOWN);
+ init_optab (init_insn_codes, ftrunc_optab, UNKNOWN);
+ init_optab (init_insn_codes, and_optab, AND);
+ init_optab (init_insn_codes, ior_optab, IOR);
+ init_optab (init_insn_codes, xor_optab, XOR);
+ init_optab (init_insn_codes, ashl_optab, ASHIFT);
+ init_optab (init_insn_codes, ssashl_optab, SS_ASHIFT);
+ init_optab (init_insn_codes, usashl_optab, US_ASHIFT);
+ init_optab (init_insn_codes, ashr_optab, ASHIFTRT);
+ init_optab (init_insn_codes, lshr_optab, LSHIFTRT);
+ init_optab (init_insn_codes, rotl_optab, ROTATE);
+ init_optab (init_insn_codes, rotr_optab, ROTATERT);
+ init_optab (init_insn_codes, smin_optab, SMIN);
+ init_optab (init_insn_codes, smax_optab, SMAX);
+ init_optab (init_insn_codes, umin_optab, UMIN);
+ init_optab (init_insn_codes, umax_optab, UMAX);
+ init_optab (init_insn_codes, pow_optab, UNKNOWN);
+ init_optab (init_insn_codes, atan2_optab, UNKNOWN);
/* These three have codes assigned exclusively for the sake of
have_insn_for. */
- 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 (init_insn_codes, mov_optab, SET);
+ init_optab (init_insn_codes, movstrict_optab, STRICT_LOW_PART);
+ init_optab (init_insn_codes, cmp_optab, COMPARE);
+
+ init_optab (init_insn_codes, storent_optab, UNKNOWN);
+
+ init_optab (init_insn_codes, ucmp_optab, UNKNOWN);
+ init_optab (init_insn_codes, tst_optab, UNKNOWN);
+
+ init_optab (init_insn_codes, eq_optab, EQ);
+ init_optab (init_insn_codes, ne_optab, NE);
+ init_optab (init_insn_codes, gt_optab, GT);
+ init_optab (init_insn_codes, ge_optab, GE);
+ init_optab (init_insn_codes, lt_optab, LT);
+ init_optab (init_insn_codes, le_optab, LE);
+ init_optab (init_insn_codes, unord_optab, UNORDERED);
+
+ init_optab (init_insn_codes, neg_optab, NEG);
+ init_optab (init_insn_codes, ssneg_optab, SS_NEG);
+ init_optab (init_insn_codes, usneg_optab, US_NEG);
+ init_optabv (init_insn_codes, negv_optab, NEG);
+ init_optab (init_insn_codes, abs_optab, ABS);
+ init_optabv (init_insn_codes, absv_optab, ABS);
+ init_optab (init_insn_codes, addcc_optab, UNKNOWN);
+ init_optab (init_insn_codes, one_cmpl_optab, NOT);
+ init_optab (init_insn_codes, bswap_optab, BSWAP);
+ init_optab (init_insn_codes, ffs_optab, FFS);
+ init_optab (init_insn_codes, clz_optab, CLZ);
+ init_optab (init_insn_codes, ctz_optab, CTZ);
+ init_optab (init_insn_codes, popcount_optab, POPCOUNT);
+ init_optab (init_insn_codes, parity_optab, PARITY);
+ init_optab (init_insn_codes, sqrt_optab, SQRT);
+ init_optab (init_insn_codes, floor_optab, UNKNOWN);
+ init_optab (init_insn_codes, ceil_optab, UNKNOWN);
+ init_optab (init_insn_codes, round_optab, UNKNOWN);
+ init_optab (init_insn_codes, btrunc_optab, UNKNOWN);
+ init_optab (init_insn_codes, nearbyint_optab, UNKNOWN);
+ init_optab (init_insn_codes, rint_optab, UNKNOWN);
+ init_optab (init_insn_codes, sincos_optab, UNKNOWN);
+ init_optab (init_insn_codes, sin_optab, UNKNOWN);
+ init_optab (init_insn_codes, asin_optab, UNKNOWN);
+ init_optab (init_insn_codes, cos_optab, UNKNOWN);
+ init_optab (init_insn_codes, acos_optab, UNKNOWN);
+ init_optab (init_insn_codes, exp_optab, UNKNOWN);
+ init_optab (init_insn_codes, exp10_optab, UNKNOWN);
+ init_optab (init_insn_codes, exp2_optab, UNKNOWN);
+ init_optab (init_insn_codes, expm1_optab, UNKNOWN);
+ init_optab (init_insn_codes, ldexp_optab, UNKNOWN);
+ init_optab (init_insn_codes, scalb_optab, UNKNOWN);
+ init_optab (init_insn_codes, logb_optab, UNKNOWN);
+ init_optab (init_insn_codes, ilogb_optab, UNKNOWN);
+ init_optab (init_insn_codes, log_optab, UNKNOWN);
+ init_optab (init_insn_codes, log10_optab, UNKNOWN);
+ init_optab (init_insn_codes, log2_optab, UNKNOWN);
+ init_optab (init_insn_codes, log1p_optab, UNKNOWN);
+ init_optab (init_insn_codes, tan_optab, UNKNOWN);
+ init_optab (init_insn_codes, atan_optab, UNKNOWN);
+ init_optab (init_insn_codes, copysign_optab, UNKNOWN);
+ init_optab (init_insn_codes, signbit_optab, UNKNOWN);
+
+ init_optab (init_insn_codes, isinf_optab, UNKNOWN);
+
+ init_optab (init_insn_codes, strlen_optab, UNKNOWN);
+ init_optab (init_insn_codes, cbranch_optab, UNKNOWN);
+ init_optab (init_insn_codes, cmov_optab, UNKNOWN);
+ init_optab (init_insn_codes, cstore_optab, UNKNOWN);
+ init_optab (init_insn_codes, push_optab, UNKNOWN);
+
+ init_optab (init_insn_codes, reduc_smax_optab, UNKNOWN);
+ init_optab (init_insn_codes, reduc_umax_optab, UNKNOWN);
+ init_optab (init_insn_codes, reduc_smin_optab, UNKNOWN);
+ init_optab (init_insn_codes, reduc_umin_optab, UNKNOWN);
+ init_optab (init_insn_codes, reduc_splus_optab, UNKNOWN);
+ init_optab (init_insn_codes, reduc_uplus_optab, UNKNOWN);
+
+ init_optab (init_insn_codes, ssum_widen_optab, UNKNOWN);
+ init_optab (init_insn_codes, usum_widen_optab, UNKNOWN);
+ init_optab (init_insn_codes, sdot_prod_optab, UNKNOWN);
+ init_optab (init_insn_codes, udot_prod_optab, UNKNOWN);
+
+ init_optab (init_insn_codes, vec_extract_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_extract_even_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_extract_odd_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_interleave_high_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_interleave_low_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_set_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_init_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_shl_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_shr_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_realign_load_optab, UNKNOWN);
+ init_optab (init_insn_codes, movmisalign_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_widen_umult_hi_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_widen_umult_lo_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_widen_smult_hi_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_widen_smult_lo_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_unpacks_hi_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_unpacks_lo_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_unpacku_hi_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_unpacku_lo_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_unpacks_float_hi_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_unpacks_float_lo_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_unpacku_float_hi_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_unpacku_float_lo_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_pack_trunc_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_pack_usat_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_pack_ssat_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_pack_ufix_trunc_optab, UNKNOWN);
+ init_optab (init_insn_codes, vec_pack_sfix_trunc_optab, UNKNOWN);
- init_optab (powi_optab, UNKNOWN);
+ init_optab (init_insn_codes, powi_optab, UNKNOWN);
/* Conversions. */
- 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);
+ init_convert_optab (init_insn_codes, sext_optab, SIGN_EXTEND);
+ init_convert_optab (init_insn_codes, zext_optab, ZERO_EXTEND);
+ init_convert_optab (init_insn_codes, trunc_optab, TRUNCATE);
+ init_convert_optab (init_insn_codes, sfix_optab, FIX);
+ init_convert_optab (init_insn_codes, ufix_optab, UNSIGNED_FIX);
+ init_convert_optab (init_insn_codes, sfixtrunc_optab, UNKNOWN);
+ init_convert_optab (init_insn_codes, ufixtrunc_optab, UNKNOWN);
+ init_convert_optab (init_insn_codes, sfloat_optab, FLOAT);
+ init_convert_optab (init_insn_codes, ufloat_optab, UNSIGNED_FLOAT);
+ init_convert_optab (init_insn_codes, lrint_optab, UNKNOWN);
+ init_convert_optab (init_insn_codes, lround_optab, UNKNOWN);
+ init_convert_optab (init_insn_codes, lfloor_optab, UNKNOWN);
+ init_convert_optab (init_insn_codes, lceil_optab, UNKNOWN);
+
+ init_convert_optab (init_insn_codes, fract_optab, FRACT_CONVERT);
+ init_convert_optab (init_insn_codes, fractuns_optab, UNSIGNED_FRACT_CONVERT);
+ init_convert_optab (init_insn_codes, satfract_optab, SAT_FRACT);
+ init_convert_optab (init_insn_codes, satfractuns_optab, UNSIGNED_SAT_FRACT);
for (i = 0; i < NUM_MACHINE_MODES; i++)
{