aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/expr.h549
-rw-r--r--gcc/optabs.c170
3 files changed, 396 insertions, 333 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2178ca9..6049ab5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+Sat Sep 4 22:53:13 1999 Bernd Schmidt <bernds@cygnus.co.uk>
+
+ * expr.h: Collapse individual optab and libfunc vars to arrays.
+ (optab_index, libfunc_index): New enumerations.
+ (optab_table, libfunc_table): New arrays.
+ Add accessor macros for both.
+
+ * optabs.c (optab_table, libfunc_table): New.
+ Delete declarations for individual optab and libfunc vars.
+
Sat Sep 4 12:57:17 1999 Richard Henderson <rth@cygnus.com>
* i386/sco5.h (RETURN_POPS_ARGS): Name change ix86_return_pops_args.
diff --git a/gcc/expr.h b/gcc/expr.h
index 54eb327..e27797a 100644
--- a/gcc/expr.h
+++ b/gcc/expr.h
@@ -293,50 +293,141 @@ typedef struct optab
extern rtx (*const insn_gen_function[]) PROTO ((rtx, ...));
-extern optab add_optab;
-extern optab sub_optab;
-extern optab smul_optab; /* Signed and floating-point multiply */
-extern optab smul_highpart_optab; /* Signed multiply, return high word */
-extern optab umul_highpart_optab;
-extern optab smul_widen_optab; /* Signed multiply with result
- one machine mode wider than args */
-extern optab umul_widen_optab;
-extern optab sdiv_optab; /* Signed divide */
-extern optab sdivmod_optab; /* Signed divide-and-remainder in one */
-extern optab udiv_optab;
-extern optab udivmod_optab;
-extern optab smod_optab; /* Signed remainder */
-extern optab umod_optab;
-extern optab flodiv_optab; /* Optab for floating divide. */
-extern optab ftrunc_optab; /* Convert float to integer in float fmt */
-extern optab and_optab; /* Logical and */
-extern optab ior_optab; /* Logical or */
-extern optab xor_optab; /* Logical xor */
-extern optab ashl_optab; /* Arithmetic shift left */
-extern optab ashr_optab; /* Arithmetic shift right */
-extern optab lshr_optab; /* Logical shift right */
-extern optab rotl_optab; /* Rotate left */
-extern optab rotr_optab; /* Rotate right */
-extern optab smin_optab; /* Signed and floating-point minimum value */
-extern optab smax_optab; /* Signed and floating-point maximum value */
-extern optab umin_optab; /* Unsigned minimum value */
-extern optab umax_optab; /* Unsigned maximum value */
-
-extern optab mov_optab; /* Move instruction. */
-extern optab movstrict_optab; /* Move, preserving high part of register. */
-
-extern optab cmp_optab; /* Compare insn; two operands. */
-extern optab tst_optab; /* tst insn; compare one operand against 0 */
-
-/* Unary operations */
-extern optab neg_optab; /* Negation */
-extern optab abs_optab; /* Abs value */
-extern optab one_cmpl_optab; /* Bitwise not */
-extern optab ffs_optab; /* Find first bit set */
-extern optab sqrt_optab; /* Square root */
-extern optab sin_optab; /* Sine */
-extern optab cos_optab; /* Cosine */
-extern optab strlen_optab; /* String length */
+/* Enumeration of valid indexes into optab_table. */
+enum optab_index
+{
+ OTI_add,
+ OTI_sub,
+
+ /* Signed and fp multiply */
+ OTI_smul,
+ /* Signed multiply, return high word */
+ OTI_smul_highpart,
+ OTI_umul_highpart,
+ /* Signed multiply with result one machine mode wider than args */
+ OTI_smul_widen,
+ OTI_umul_widen,
+
+ /* Signed divide */
+ OTI_sdiv,
+ /* Signed divide-and-remainder in one */
+ OTI_sdivmod,
+ OTI_udiv,
+ OTI_udivmod,
+ /* Signed remainder */
+ OTI_smod,
+ OTI_umod,
+ /* Optab for floating divide. */
+ OTI_flodiv,
+ /* Convert float to integer in float fmt */
+ OTI_ftrunc,
+
+ /* Logical and */
+ OTI_and,
+ /* Logical or */
+ OTI_ior,
+ /* Logical xor */
+ OTI_xor,
+
+ /* Arithmetic shift left */
+ OTI_ashl,
+ /* Logical shift right */
+ OTI_lshr,
+ /* Arithmetic shift right */
+ OTI_ashr,
+ /* Rotate left */
+ OTI_rotl,
+ /* Rotate right */
+ OTI_rotr,
+ /* Signed and floating-point minimum value */
+ OTI_smin,
+ /* Signed and floating-point maximum value */
+ OTI_smax,
+ /* Unsigned minimum value */
+ OTI_umin,
+ /* Unsigned maximum value */
+ OTI_umax,
+
+ /* Move instruction. */
+ OTI_mov,
+ /* Move, preserving high part of register. */
+ OTI_movstrict,
+
+ /* Unary operations */
+ /* Negation */
+ OTI_neg,
+ /* Abs value */
+ OTI_abs,
+ /* Bitwise not */
+ OTI_one_cmpl,
+ /* Find first bit set */
+ OTI_ffs,
+ /* Square root */
+ OTI_sqrt,
+ /* Sine */
+ OTI_sin,
+ /* Cosine */
+ OTI_cos,
+
+ /* Compare insn; two operands. */
+ OTI_cmp,
+ /* Used only for libcalls for unsigned comparisons. */
+ OTI_ucmp,
+ /* tst insn; compare one operand against 0 */
+ OTI_tst,
+
+ /* String length */
+ OTI_strlen,
+
+ OTI_MAX
+};
+
+extern optab optab_table[OTI_MAX];
+
+#define add_optab (optab_table[OTI_add])
+#define sub_optab (optab_table[OTI_sub])
+#define smul_optab (optab_table[OTI_smul])
+#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 sdiv_optab (optab_table[OTI_sdiv])
+#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 flodiv_optab (optab_table[OTI_flodiv])
+#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 mov_optab (optab_table[OTI_mov])
+#define movstrict_optab (optab_table[OTI_movstrict])
+
+#define neg_optab (optab_table[OTI_neg])
+#define abs_optab (optab_table[OTI_abs])
+#define one_cmpl_optab (optab_table[OTI_one_cmpl])
+#define ffs_optab (optab_table[OTI_ffs])
+#define sqrt_optab (optab_table[OTI_sqrt])
+#define sin_optab (optab_table[OTI_sin])
+#define cos_optab (optab_table[OTI_cos])
+
+#define cmp_optab (optab_table[OTI_cmp])
+#define ucmp_optab (optab_table[OTI_ucmp])
+#define tst_optab (optab_table[OTI_tst])
+
+#define strlen_optab (optab_table[OTI_strlen])
/* Tables of patterns for extending one integer mode to another. */
extern enum insn_code extendtab[MAX_MACHINE_MODE][MAX_MACHINE_MODE][2];
@@ -364,130 +455,256 @@ enum optab_methods
OPTAB_MUST_WIDEN
};
+/* Enumeration of indexes into libfunc_table. */
+enum libfunc_index
+{
+ LTI_extendsfdf2,
+ LTI_extendsfxf2,
+ LTI_extendsftf2,
+ LTI_extenddfxf2,
+ LTI_extenddftf2,
+
+ LTI_truncdfsf2,
+ LTI_truncxfsf2,
+ LTI_trunctfsf2,
+ LTI_truncxfdf2,
+ LTI_trunctfdf2,
+
+ LTI_memcpy,
+ LTI_bcopy,
+ LTI_memcmp,
+ LTI_bcmp,
+ LTI_memset,
+ LTI_bzero,
+
+ LTI_throw,
+ LTI_rethrow,
+ LTI_sjthrow,
+ LTI_sjpopnthrow,
+ LTI_terminate,
+ LTI_setjmp,
+ LTI_longjmp,
+ LTI_eh_rtime_match,
+
+ LTI_eqhf2,
+ LTI_nehf2,
+ LTI_gthf2,
+ LTI_gehf2,
+ LTI_lthf2,
+ LTI_lehf2,
+
+ LTI_eqsf2,
+ LTI_nesf2,
+ LTI_gtsf2,
+ LTI_gesf2,
+ LTI_ltsf2,
+ LTI_lesf2,
+
+ LTI_eqdf2,
+ LTI_nedf2,
+ LTI_gtdf2,
+ LTI_gedf2,
+ LTI_ltdf2,
+ LTI_ledf2,
+
+ LTI_eqxf2,
+ LTI_nexf2,
+ LTI_gtxf2,
+ LTI_gexf2,
+ LTI_ltxf2,
+ LTI_lexf2,
+
+ LTI_eqtf2,
+ LTI_netf2,
+ LTI_gttf2,
+ LTI_getf2,
+ LTI_lttf2,
+ LTI_letf2,
+
+ LTI_floatsisf,
+ LTI_floatdisf,
+ LTI_floattisf,
+
+ LTI_floatsidf,
+ LTI_floatdidf,
+ LTI_floattidf,
+
+ LTI_floatsixf,
+ LTI_floatdixf,
+ LTI_floattixf,
+
+ LTI_floatsitf,
+ LTI_floatditf,
+ LTI_floattitf,
+
+ LTI_fixsfsi,
+ LTI_fixsfdi,
+ LTI_fixsfti,
+
+ LTI_fixdfsi,
+ LTI_fixdfdi,
+ LTI_fixdfti,
+
+ LTI_fixxfsi,
+ LTI_fixxfdi,
+ LTI_fixxfti,
+
+ LTI_fixtfsi,
+ LTI_fixtfdi,
+ LTI_fixtfti,
+
+ LTI_fixunssfsi,
+ LTI_fixunssfdi,
+ LTI_fixunssfti,
+
+ LTI_fixunsdfsi,
+ LTI_fixunsdfdi,
+ LTI_fixunsdfti,
+
+ LTI_fixunsxfsi,
+ LTI_fixunsxfdi,
+ LTI_fixunsxfti,
+
+ LTI_fixunstfsi,
+ LTI_fixunstfdi,
+ LTI_fixunstfti,
+
+ LTI_chkr_check_addr,
+ LTI_chkr_set_right,
+ LTI_chkr_copy_bitmap,
+ LTI_chkr_check_exec,
+ LTI_chkr_check_str,
+
+ LTI_profile_function_entry,
+ LTI_profile_function_exit,
+
+ LTI_MAX
+};
+
/* SYMBOL_REF rtx's for the library functions that are called
implicitly and not via optabs. */
-
-extern rtx extendsfdf2_libfunc;
-extern rtx extendsfxf2_libfunc;
-extern rtx extendsftf2_libfunc;
-extern rtx extenddfxf2_libfunc;
-extern rtx extenddftf2_libfunc;
-
-extern rtx truncdfsf2_libfunc;
-extern rtx truncxfsf2_libfunc;
-extern rtx trunctfsf2_libfunc;
-extern rtx truncxfdf2_libfunc;
-extern rtx trunctfdf2_libfunc;
-
-extern rtx memcpy_libfunc;
-extern rtx bcopy_libfunc;
-extern rtx memcmp_libfunc;
-extern rtx bcmp_libfunc;
-extern rtx memset_libfunc;
-extern rtx bzero_libfunc;
-
-extern rtx throw_libfunc;
-extern rtx rethrow_libfunc;
-extern rtx sjthrow_libfunc;
-extern rtx sjpopnthrow_libfunc;
-extern rtx terminate_libfunc;
-extern rtx setjmp_libfunc;
-extern rtx longjmp_libfunc;
-extern rtx eh_rtime_match_libfunc;
-
-extern rtx eqhf2_libfunc;
-extern rtx nehf2_libfunc;
-extern rtx gthf2_libfunc;
-extern rtx gehf2_libfunc;
-extern rtx lthf2_libfunc;
-extern rtx lehf2_libfunc;
-
-extern rtx eqsf2_libfunc;
-extern rtx nesf2_libfunc;
-extern rtx gtsf2_libfunc;
-extern rtx gesf2_libfunc;
-extern rtx ltsf2_libfunc;
-extern rtx lesf2_libfunc;
-
-extern rtx eqdf2_libfunc;
-extern rtx nedf2_libfunc;
-extern rtx gtdf2_libfunc;
-extern rtx gedf2_libfunc;
-extern rtx ltdf2_libfunc;
-extern rtx ledf2_libfunc;
-
-extern rtx eqxf2_libfunc;
-extern rtx nexf2_libfunc;
-extern rtx gtxf2_libfunc;
-extern rtx gexf2_libfunc;
-extern rtx ltxf2_libfunc;
-extern rtx lexf2_libfunc;
-
-extern rtx eqtf2_libfunc;
-extern rtx netf2_libfunc;
-extern rtx gttf2_libfunc;
-extern rtx getf2_libfunc;
-extern rtx lttf2_libfunc;
-extern rtx letf2_libfunc;
-
-extern rtx floatsisf_libfunc;
-extern rtx floatdisf_libfunc;
-extern rtx floattisf_libfunc;
-
-extern rtx floatsidf_libfunc;
-extern rtx floatdidf_libfunc;
-extern rtx floattidf_libfunc;
-
-extern rtx floatsixf_libfunc;
-extern rtx floatdixf_libfunc;
-extern rtx floattixf_libfunc;
-
-extern rtx floatsitf_libfunc;
-extern rtx floatditf_libfunc;
-extern rtx floattitf_libfunc;
-
-extern rtx fixsfsi_libfunc;
-extern rtx fixsfdi_libfunc;
-extern rtx fixsfti_libfunc;
-
-extern rtx fixdfsi_libfunc;
-extern rtx fixdfdi_libfunc;
-extern rtx fixdfti_libfunc;
-
-extern rtx fixxfsi_libfunc;
-extern rtx fixxfdi_libfunc;
-extern rtx fixxfti_libfunc;
-
-extern rtx fixtfsi_libfunc;
-extern rtx fixtfdi_libfunc;
-extern rtx fixtfti_libfunc;
-
-extern rtx fixunssfsi_libfunc;
-extern rtx fixunssfdi_libfunc;
-extern rtx fixunssfti_libfunc;
-
-extern rtx fixunsdfsi_libfunc;
-extern rtx fixunsdfdi_libfunc;
-extern rtx fixunsdfti_libfunc;
-
-extern rtx fixunsxfsi_libfunc;
-extern rtx fixunsxfdi_libfunc;
-extern rtx fixunsxfti_libfunc;
-
-extern rtx fixunstfsi_libfunc;
-extern rtx fixunstfdi_libfunc;
-extern rtx fixunstfti_libfunc;
-
-/* For check-memory-usage. */
-extern rtx chkr_check_addr_libfunc;
-extern rtx chkr_set_right_libfunc;
-extern rtx chkr_copy_bitmap_libfunc;
-extern rtx chkr_check_exec_libfunc;
-extern rtx chkr_check_str_libfunc;
-
-/* For instrument-functions. */
-extern rtx profile_function_entry_libfunc;
-extern rtx profile_function_exit_libfunc;
+extern rtx libfunc_table[LTI_MAX];
+
+/* Accessor macros for libfunc_table. */
+#define extendsfdf2_libfunc (libfunc_table[LTI_extendsfdf2])
+#define extendsfxf2_libfunc (libfunc_table[LTI_extendsfxf2])
+#define extendsftf2_libfunc (libfunc_table[LTI_extendsftf2])
+#define extenddfxf2_libfunc (libfunc_table[LTI_extenddfxf2])
+#define extenddftf2_libfunc (libfunc_table[LTI_extenddftf2])
+
+#define truncdfsf2_libfunc (libfunc_table[LTI_truncdfsf2])
+#define truncxfsf2_libfunc (libfunc_table[LTI_truncxfsf2])
+#define trunctfsf2_libfunc (libfunc_table[LTI_trunctfsf2])
+#define truncxfdf2_libfunc (libfunc_table[LTI_truncxfdf2])
+#define trunctfdf2_libfunc (libfunc_table[LTI_trunctfdf2])
+
+#define memcpy_libfunc (libfunc_table[LTI_memcpy])
+#define bcopy_libfunc (libfunc_table[LTI_bcopy])
+#define memcmp_libfunc (libfunc_table[LTI_memcmp])
+#define bcmp_libfunc (libfunc_table[LTI_bcmp])
+#define memset_libfunc (libfunc_table[LTI_memset])
+#define bzero_libfunc (libfunc_table[LTI_bzero])
+
+#define throw_libfunc (libfunc_table[LTI_throw])
+#define rethrow_libfunc (libfunc_table[LTI_rethrow])
+#define sjthrow_libfunc (libfunc_table[LTI_sjthrow])
+#define sjpopnthrow_libfunc (libfunc_table[LTI_sjpopnthrow])
+#define terminate_libfunc (libfunc_table[LTI_terminate])
+#define setjmp_libfunc (libfunc_table[LTI_setjmp])
+#define longjmp_libfunc (libfunc_table[LTI_longjmp])
+#define eh_rtime_match_libfunc (libfunc_table[LTI_eh_rtime_match])
+
+#define eqhf2_libfunc (libfunc_table[LTI_eqhf2])
+#define nehf2_libfunc (libfunc_table[LTI_nehf2])
+#define gthf2_libfunc (libfunc_table[LTI_gthf2])
+#define gehf2_libfunc (libfunc_table[LTI_gehf2])
+#define lthf2_libfunc (libfunc_table[LTI_lthf2])
+#define lehf2_libfunc (libfunc_table[LTI_lehf2])
+
+#define eqsf2_libfunc (libfunc_table[LTI_eqsf2])
+#define nesf2_libfunc (libfunc_table[LTI_nesf2])
+#define gtsf2_libfunc (libfunc_table[LTI_gtsf2])
+#define gesf2_libfunc (libfunc_table[LTI_gesf2])
+#define ltsf2_libfunc (libfunc_table[LTI_ltsf2])
+#define lesf2_libfunc (libfunc_table[LTI_lesf2])
+
+#define eqdf2_libfunc (libfunc_table[LTI_eqdf2])
+#define nedf2_libfunc (libfunc_table[LTI_nedf2])
+#define gtdf2_libfunc (libfunc_table[LTI_gtdf2])
+#define gedf2_libfunc (libfunc_table[LTI_gedf2])
+#define ltdf2_libfunc (libfunc_table[LTI_ltdf2])
+#define ledf2_libfunc (libfunc_table[LTI_ledf2])
+
+#define eqxf2_libfunc (libfunc_table[LTI_eqxf2])
+#define nexf2_libfunc (libfunc_table[LTI_nexf2])
+#define gtxf2_libfunc (libfunc_table[LTI_gtxf2])
+#define gexf2_libfunc (libfunc_table[LTI_gexf2])
+#define ltxf2_libfunc (libfunc_table[LTI_ltxf2])
+#define lexf2_libfunc (libfunc_table[LTI_lexf2])
+
+#define eqtf2_libfunc (libfunc_table[LTI_eqtf2])
+#define netf2_libfunc (libfunc_table[LTI_netf2])
+#define gttf2_libfunc (libfunc_table[LTI_gttf2])
+#define getf2_libfunc (libfunc_table[LTI_getf2])
+#define lttf2_libfunc (libfunc_table[LTI_lttf2])
+#define letf2_libfunc (libfunc_table[LTI_letf2])
+
+#define floatsisf_libfunc (libfunc_table[LTI_floatsisf])
+#define floatdisf_libfunc (libfunc_table[LTI_floatdisf])
+#define floattisf_libfunc (libfunc_table[LTI_floattisf])
+
+#define floatsidf_libfunc (libfunc_table[LTI_floatsidf])
+#define floatdidf_libfunc (libfunc_table[LTI_floatdidf])
+#define floattidf_libfunc (libfunc_table[LTI_floattidf])
+
+#define floatsixf_libfunc (libfunc_table[LTI_floatsixf])
+#define floatdixf_libfunc (libfunc_table[LTI_floatdixf])
+#define floattixf_libfunc (libfunc_table[LTI_floattixf])
+
+#define floatsitf_libfunc (libfunc_table[LTI_floatsitf])
+#define floatditf_libfunc (libfunc_table[LTI_floatditf])
+#define floattitf_libfunc (libfunc_table[LTI_floattitf])
+
+#define fixsfsi_libfunc (libfunc_table[LTI_fixsfsi])
+#define fixsfdi_libfunc (libfunc_table[LTI_fixsfdi])
+#define fixsfti_libfunc (libfunc_table[LTI_fixsfti])
+
+#define fixdfsi_libfunc (libfunc_table[LTI_fixdfsi])
+#define fixdfdi_libfunc (libfunc_table[LTI_fixdfdi])
+#define fixdfti_libfunc (libfunc_table[LTI_fixdfti])
+
+#define fixxfsi_libfunc (libfunc_table[LTI_fixxfsi])
+#define fixxfdi_libfunc (libfunc_table[LTI_fixxfdi])
+#define fixxfti_libfunc (libfunc_table[LTI_fixxfti])
+
+#define fixtfsi_libfunc (libfunc_table[LTI_fixtfsi])
+#define fixtfdi_libfunc (libfunc_table[LTI_fixtfdi])
+#define fixtfti_libfunc (libfunc_table[LTI_fixtfti])
+
+#define fixunssfsi_libfunc (libfunc_table[LTI_fixunssfsi])
+#define fixunssfdi_libfunc (libfunc_table[LTI_fixunssfdi])
+#define fixunssfti_libfunc (libfunc_table[LTI_fixunssfti])
+
+#define fixunsdfsi_libfunc (libfunc_table[LTI_fixunsdfsi])
+#define fixunsdfdi_libfunc (libfunc_table[LTI_fixunsdfdi])
+#define fixunsdfti_libfunc (libfunc_table[LTI_fixunsdfti])
+
+#define fixunsxfsi_libfunc (libfunc_table[LTI_fixunsxfsi])
+#define fixunsxfdi_libfunc (libfunc_table[LTI_fixunsxfdi])
+#define fixunsxfti_libfunc (libfunc_table[LTI_fixunsxfti])
+
+#define fixunstfsi_libfunc (libfunc_table[LTI_fixunstfsi])
+#define fixunstfdi_libfunc (libfunc_table[LTI_fixunstfdi])
+#define fixunstfti_libfunc (libfunc_table[LTI_fixunstfti])
+
+#define chkr_check_addr_libfunc (libfunc_table[LTI_chkr_check_addr])
+#define chkr_set_right_libfunc (libfunc_table[LTI_chkr_set_right])
+#define chkr_copy_bitmap_libfunc (libfunc_table[LTI_chkr_copy_bitmap])
+#define chkr_check_exec_libfunc (libfunc_table[LTI_chkr_check_exec])
+#define chkr_check_str_libfunc (libfunc_table[LTI_chkr_check_str])
+
+#define profile_function_entry_libfunc (libfunc_table[LTI_profile_function_entry])
+#define profile_function_exit_libfunc (libfunc_table[LTI_profile_function_exit])
typedef rtx (*rtxfun) PROTO ((rtx));
diff --git a/gcc/optabs.c b/gcc/optabs.c
index 82bfc6a..ae6a6ff 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -45,50 +45,9 @@ Boston, MA 02111-1307, USA. */
See expr.h for documentation of these optabs. */
-optab add_optab;
-optab sub_optab;
-optab smul_optab;
-optab smul_highpart_optab;
-optab umul_highpart_optab;
-optab smul_widen_optab;
-optab umul_widen_optab;
-optab sdiv_optab;
-optab sdivmod_optab;
-optab udiv_optab;
-optab udivmod_optab;
-optab smod_optab;
-optab umod_optab;
-optab flodiv_optab;
-optab ftrunc_optab;
-optab and_optab;
-optab ior_optab;
-optab xor_optab;
-optab ashl_optab;
-optab lshr_optab;
-optab ashr_optab;
-optab rotl_optab;
-optab rotr_optab;
-optab smin_optab;
-optab smax_optab;
-optab umin_optab;
-optab umax_optab;
-
-optab mov_optab;
-optab movstrict_optab;
-
-optab neg_optab;
-optab abs_optab;
-optab one_cmpl_optab;
-optab ffs_optab;
-optab sqrt_optab;
-optab sin_optab;
-optab cos_optab;
-
-optab cmp_optab;
-optab ucmp_optab; /* Used only for libcalls for unsigned comparisons. */
-optab tst_optab;
-
-optab strlen_optab;
+optab optab_table[OTI_MAX];
+
+rtx libfunc_table[LTI_MAX];
/* Tables of patterns for extending one integer mode to another. */
enum insn_code extendtab[MAX_MACHINE_MODE][MAX_MACHINE_MODE][2];
@@ -101,129 +60,6 @@ enum insn_code floattab[NUM_MACHINE_MODES][NUM_MACHINE_MODES][2];
/* Contains the optab used for each rtx code. */
optab code_to_optab[NUM_RTX_CODE + 1];
-/* SYMBOL_REF rtx's for the library functions that are called
- implicitly and not via optabs. */
-
-rtx extendsfdf2_libfunc;
-rtx extendsfxf2_libfunc;
-rtx extendsftf2_libfunc;
-rtx extenddfxf2_libfunc;
-rtx extenddftf2_libfunc;
-
-rtx truncdfsf2_libfunc;
-rtx truncxfsf2_libfunc;
-rtx trunctfsf2_libfunc;
-rtx truncxfdf2_libfunc;
-rtx trunctfdf2_libfunc;
-
-rtx memcpy_libfunc;
-rtx bcopy_libfunc;
-rtx memcmp_libfunc;
-rtx bcmp_libfunc;
-rtx memset_libfunc;
-rtx bzero_libfunc;
-
-rtx throw_libfunc;
-rtx rethrow_libfunc;
-rtx sjthrow_libfunc;
-rtx sjpopnthrow_libfunc;
-rtx terminate_libfunc;
-rtx setjmp_libfunc;
-rtx longjmp_libfunc;
-rtx eh_rtime_match_libfunc;
-
-rtx eqhf2_libfunc;
-rtx nehf2_libfunc;
-rtx gthf2_libfunc;
-rtx gehf2_libfunc;
-rtx lthf2_libfunc;
-rtx lehf2_libfunc;
-
-rtx eqsf2_libfunc;
-rtx nesf2_libfunc;
-rtx gtsf2_libfunc;
-rtx gesf2_libfunc;
-rtx ltsf2_libfunc;
-rtx lesf2_libfunc;
-
-rtx eqdf2_libfunc;
-rtx nedf2_libfunc;
-rtx gtdf2_libfunc;
-rtx gedf2_libfunc;
-rtx ltdf2_libfunc;
-rtx ledf2_libfunc;
-
-rtx eqxf2_libfunc;
-rtx nexf2_libfunc;
-rtx gtxf2_libfunc;
-rtx gexf2_libfunc;
-rtx ltxf2_libfunc;
-rtx lexf2_libfunc;
-
-rtx eqtf2_libfunc;
-rtx netf2_libfunc;
-rtx gttf2_libfunc;
-rtx getf2_libfunc;
-rtx lttf2_libfunc;
-rtx letf2_libfunc;
-
-rtx floatsisf_libfunc;
-rtx floatdisf_libfunc;
-rtx floattisf_libfunc;
-
-rtx floatsidf_libfunc;
-rtx floatdidf_libfunc;
-rtx floattidf_libfunc;
-
-rtx floatsixf_libfunc;
-rtx floatdixf_libfunc;
-rtx floattixf_libfunc;
-
-rtx floatsitf_libfunc;
-rtx floatditf_libfunc;
-rtx floattitf_libfunc;
-
-rtx fixsfsi_libfunc;
-rtx fixsfdi_libfunc;
-rtx fixsfti_libfunc;
-
-rtx fixdfsi_libfunc;
-rtx fixdfdi_libfunc;
-rtx fixdfti_libfunc;
-
-rtx fixxfsi_libfunc;
-rtx fixxfdi_libfunc;
-rtx fixxfti_libfunc;
-
-rtx fixtfsi_libfunc;
-rtx fixtfdi_libfunc;
-rtx fixtfti_libfunc;
-
-rtx fixunssfsi_libfunc;
-rtx fixunssfdi_libfunc;
-rtx fixunssfti_libfunc;
-
-rtx fixunsdfsi_libfunc;
-rtx fixunsdfdi_libfunc;
-rtx fixunsdfti_libfunc;
-
-rtx fixunsxfsi_libfunc;
-rtx fixunsxfdi_libfunc;
-rtx fixunsxfti_libfunc;
-
-rtx fixunstfsi_libfunc;
-rtx fixunstfdi_libfunc;
-rtx fixunstfti_libfunc;
-
-rtx chkr_check_addr_libfunc;
-rtx chkr_set_right_libfunc;
-rtx chkr_copy_bitmap_libfunc;
-rtx chkr_check_exec_libfunc;
-rtx chkr_check_str_libfunc;
-
-rtx profile_function_entry_libfunc;
-rtx profile_function_exit_libfunc;
-
/* Indexed by the rtx-code for a conditional (eg. EQ, LT,...)
gives the gen_function to make a branch to test that condition. */