This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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++)
     {


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]