diff options
author | Zack Weinberg <zackw@panix.com> | 2001-08-13 15:56:51 +0000 |
---|---|---|
committer | Zack Weinberg <zack@gcc.gnu.org> | 2001-08-13 15:56:51 +0000 |
commit | e78d8e5137ccd2a55617befdc052d1860e7f09f1 (patch) | |
tree | 0bf63396b6452b6ba1bd93f734ade1e7f708db6a /gcc/expr.h | |
parent | 050e4ca284c3028c7df662ba953be93f5b8fb47b (diff) | |
download | gcc-e78d8e5137ccd2a55617befdc052d1860e7f09f1.zip gcc-e78d8e5137ccd2a55617befdc052d1860e7f09f1.tar.gz gcc-e78d8e5137ccd2a55617befdc052d1860e7f09f1.tar.bz2 |
expr.h: Split out optab- and libfunc-related code to...
* expr.h: Split out optab- and libfunc-related code to...
* optabs.h, libfuncs.h: ... these new headers.
* Makefile.in (CONFIG_H, EXPR_H): Take out insn-codes.h.
(OPTABS_H): New.
(various .o rules): Add $(OPTABS_H) and/or libfuncs.h to
dependencies.
* mkconfig.sh: Don't include insn-codes.h from config.h.
* reload.h: Use #ifdef GCC_INSN_CODES_H to decide whether
enum insn_code is available. Move reload_in_optab and
reload_out_optab array declarations to optabs.h.
* regmove.c (gen_add3_insn): Move to optabs.c, export from
there, prototype in expr.h.
* gencodes.c: Cleanup: zap global variables, don't use
printf where puts will do, don't bother defining MAX_INSN_CODE
which nothing uses, let CODE_FOR_nothing get its value implicitly.
* genemit.c, genopinit.c: Include optabs.h in generated file.
* genoutput.c: Include insn-codes.h in generated file.
* builtins.c, caller-save.c, combine.c, doloop.c, explow.c,
expmed.c, expr.c, function.c, ifcvt.c, loop.c, optabs.c, profile.c,
reload1.c, simplify-rtx.c, stmt.c, unroll.c, config/alpha/alpha.c,
config/arm/arm.c, config/c4x/c4x.c, config/clipper/clipper.c,
config/i386/i386.c, config/ia64/ia64.c, config/mn10300/mn10300.c,
config/pj/pj.c, config/sh/sh.c, config/sparc/sparc.c:
Include optabs.h.
* builtins.c, calls.c, dwarf2out.c, except.c, expr.c, function.c,
optabs.c, stmt.c, config/c4x/c4x.c, config/clipper/clipper.c,
config/m88k/m88k.c, config/sparc/sparc.c:
Include libfuncs.h.
* reload.c: Include expr.h and optabs.h before reload.h.
* config/alpha/alpha.c: Include tree.h before reload.h.
* config/pa/pa.c: Include expr.h, optabs.h, libfuncs.h,
and reload.h in that order.
* config/sparc/sparc.c: Include debug.h.
* recog.c: Include insn-codes.h.
cp:
* Make-lang.in (cp/except.o): Add libfuncs.h to dependencies.
* except.c: Include libfuncs.h.
java:
* Make-lang.in (java/decl.o): Update dependencies.
* decl.c: Include libfuncs.h, don't include toplev.h.
From-SVN: r44858
Diffstat (limited to 'gcc/expr.h')
-rw-r--r-- | gcc/expr.h | 615 |
1 files changed, 19 insertions, 596 deletions
@@ -253,549 +253,22 @@ enum direction {none, upward, downward}; /* Value has this type. */ #define STACK_CHECK_MAX_VAR_SIZE (STACK_CHECK_MAX_FRAME_SIZE / 100) #endif -/* Optabs are tables saying how to generate insn bodies - for various machine modes and numbers of operands. - Each optab applies to one operation. - For example, add_optab applies to addition. - - The insn_code slot is the enum insn_code that says how to - generate an insn for this operation on a particular machine mode. - It is CODE_FOR_nothing if there is no such insn on the target machine. - - The `lib_call' slot is the name of the library function that - can be used to perform the operation. - - A few optabs, such as move_optab and cmp_optab, are used - by special code. */ - -typedef struct optab -{ - enum rtx_code code; - struct { - enum insn_code insn_code; - rtx libfunc; - } handlers [NUM_MACHINE_MODES]; -} * optab; - -/* Given an enum insn_code, access the function to construct - the body of that kind of insn. */ -#define GEN_FCN(CODE) (*insn_data[(int) (CODE)].genfun) - -/* Enumeration of valid indexes into optab_table. */ -enum optab_index -{ - OTI_add, - OTI_addv, - OTI_sub, - OTI_subv, - - /* Signed and fp multiply */ - OTI_smul, - OTI_smulv, - /* 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, - OTI_sdivv, - /* 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, - OTI_negv, - /* Abs value */ - OTI_abs, - OTI_absv, - /* 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, - - /* Combined compare & jump/store flags/move operations. */ - OTI_cbranch, - OTI_cmov, - OTI_cstore, - - /* Push instruction. */ - OTI_push, - - 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 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 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 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 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 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]) - -#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]) - -/* Tables of patterns for extending one integer mode to another. */ -extern enum insn_code extendtab[MAX_MACHINE_MODE][MAX_MACHINE_MODE][2]; - -/* Tables of patterns for converting between fixed and floating point. */ -extern enum insn_code fixtab[NUM_MACHINE_MODES][NUM_MACHINE_MODES][2]; -extern enum insn_code fixtrunctab[NUM_MACHINE_MODES][NUM_MACHINE_MODES][2]; -extern enum insn_code floattab[NUM_MACHINE_MODES][NUM_MACHINE_MODES][2]; - -/* Contains the optab used for each rtx code. */ -extern optab code_to_optab[NUM_RTX_CODE + 1]; - -/* Passed to expand_binop and expand_unop to say which options to try to use - if the requested operation can't be open-coded on the requisite mode. - Either OPTAB_LIB or OPTAB_LIB_WIDEN says try using a library call. - Either OPTAB_WIDEN or OPTAB_LIB_WIDEN says try using a wider mode. - OPTAB_MUST_WIDEN says try widening and don't try anything else. */ - -enum optab_methods -{ - OPTAB_DIRECT, - OPTAB_LIB, - OPTAB_WIDEN, - OPTAB_LIB_WIDEN, - 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_memmove, - LTI_bcopy, - LTI_memcmp, - LTI_bcmp, - LTI_memset, - LTI_bzero, - - LTI_unwind_resume, - LTI_eh_personality, - LTI_setjmp, - LTI_longjmp, - LTI_unwind_sjlj_register, - LTI_unwind_sjlj_unregister, - - LTI_eqhf2, - LTI_nehf2, - LTI_gthf2, - LTI_gehf2, - LTI_lthf2, - LTI_lehf2, - LTI_unordhf2, - - LTI_eqsf2, - LTI_nesf2, - LTI_gtsf2, - LTI_gesf2, - LTI_ltsf2, - LTI_lesf2, - LTI_unordsf2, - - LTI_eqdf2, - LTI_nedf2, - LTI_gtdf2, - LTI_gedf2, - LTI_ltdf2, - LTI_ledf2, - LTI_unorddf2, - - LTI_eqxf2, - LTI_nexf2, - LTI_gtxf2, - LTI_gexf2, - LTI_ltxf2, - LTI_lexf2, - LTI_unordxf2, - - LTI_eqtf2, - LTI_netf2, - LTI_gttf2, - LTI_getf2, - LTI_lttf2, - LTI_letf2, - LTI_unordtf2, - - 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 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 memmove_libfunc (libfunc_table[LTI_memmove]) -#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 unwind_resume_libfunc (libfunc_table[LTI_unwind_resume]) -#define eh_personality_libfunc (libfunc_table[LTI_eh_personality]) -#define setjmp_libfunc (libfunc_table[LTI_setjmp]) -#define longjmp_libfunc (libfunc_table[LTI_longjmp]) -#define unwind_sjlj_register_libfunc (libfunc_table[LTI_unwind_sjlj_register]) -#define unwind_sjlj_unregister_libfunc \ - (libfunc_table[LTI_unwind_sjlj_unregister]) - -#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 unordhf2_libfunc (libfunc_table[LTI_unordhf2]) - -#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 unordsf2_libfunc (libfunc_table[LTI_unordsf2]) - -#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 unorddf2_libfunc (libfunc_table[LTI_unorddf2]) - -#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 unordxf2_libfunc (libfunc_table[LTI_unordxf2]) - -#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 unordtf2_libfunc (libfunc_table[LTI_unordtf2]) - -#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) PARAMS ((rtx)); - -/* Indexed by the rtx-code for a conditional (eg. EQ, LT,...) - gives the gen_function to make a branch to test that condition. */ - -extern rtxfun bcc_gen_fctn[NUM_RTX_CODE]; - -/* Indexed by the rtx-code for a conditional (eg. EQ, LT,...) - gives the insn code to make a store-condition insn - to test that condition. */ - -extern enum insn_code setcc_gen_code[NUM_RTX_CODE]; - -#ifdef HAVE_conditional_move -/* Indexed by the machine mode, gives the insn code to make a conditional - move insn. */ - -extern enum insn_code movcc_gen_code[NUM_MACHINE_MODES]; -#endif - -/* This array records the insn_code of insns to perform block moves. */ -extern enum insn_code movstr_optab[NUM_MACHINE_MODES]; - -/* This array records the insn_code of insns to perform block clears. */ -extern enum insn_code clrstr_optab[NUM_MACHINE_MODES]; - -/* Define functions given in optabs.c. */ - -/* Expand a binary operation given optab and rtx operands. */ -extern rtx expand_binop PARAMS ((enum machine_mode, optab, rtx, rtx, rtx, - int, enum optab_methods)); - -/* Expand a binary operation with both signed and unsigned forms. */ -extern rtx sign_expand_binop PARAMS ((enum machine_mode, optab, optab, rtx, - rtx, rtx, int, enum optab_methods)); - -/* Generate code to perform an operation on two operands with two results. */ -extern int expand_twoval_binop PARAMS ((optab, rtx, rtx, rtx, rtx, int)); - -/* Expand a unary arithmetic operation given optab rtx operand. */ -extern rtx expand_unop PARAMS ((enum machine_mode, optab, rtx, rtx, int)); - -/* Expand the absolute value operation. */ -extern rtx expand_abs PARAMS ((enum machine_mode, rtx, rtx, int, int)); - -/* Expand the complex absolute value operation. */ -extern rtx expand_complex_abs PARAMS ((enum machine_mode, rtx, rtx, int)); - -/* Generate an instruction with a given INSN_CODE with an output and - an input. */ -extern void emit_unop_insn PARAMS ((int, rtx, rtx, enum rtx_code)); - -/* Emit code to perform a series of operations on a multi-word quantity, one - word at a time. */ -extern rtx emit_no_conflict_block PARAMS ((rtx, rtx, rtx, rtx, rtx)); +/* Functions from optabs.c, commonly used, and without need for the optabs + tables: */ /* Emit code to make a call to a constant function or a library call. */ extern void emit_libcall_block PARAMS ((rtx, rtx, rtx, rtx)); -/* Emit one rtl instruction to store zero in specified rtx. */ -extern void emit_clr_insn PARAMS ((rtx)); - -/* Emit one rtl insn to store 1 in specified rtx assuming it contains 0. */ -extern void emit_0_to_1_insn PARAMS ((rtx)); - -/* Emit one rtl insn to compare two rtx's. */ -extern void emit_cmp_insn PARAMS ((rtx, rtx, enum rtx_code, rtx, - enum machine_mode, int, unsigned int)); +/* Create but don't emit one rtl instruction to perform certain operations. + Modes must match; operands must meet the operation's predicates. + Likewise for subtraction and for just copying. + These do not call protect_from_queue; caller must do so. */ +extern rtx gen_add2_insn PARAMS ((rtx, rtx)); +extern rtx gen_add3_insn PARAMS ((rtx, rtx, rtx)); +extern rtx gen_sub2_insn PARAMS ((rtx, rtx)); +extern rtx gen_move_insn PARAMS ((rtx, rtx)); +extern int have_add2_insn PARAMS ((rtx, rtx)); +extern int have_sub2_insn PARAMS ((rtx, rtx)); /* Emit a pair of rtl insns to compare two rtx's and to jump to a label if the comparison is true. */ @@ -803,27 +276,6 @@ extern void emit_cmp_and_jump_insns PARAMS ((rtx, rtx, enum rtx_code, rtx, enum machine_mode, int, unsigned int, rtx)); -/* The various uses that a comparison can have; used by can_compare_p: - jumps, conditional moves, store flag operations. */ -enum can_compare_purpose -{ - ccp_jump, - ccp_cmov, - ccp_store_flag -}; - -/* Nonzero if a compare of mode MODE can be done straightforwardly - (without splitting it into pieces). */ -extern int can_compare_p PARAMS ((enum rtx_code, enum machine_mode, - enum can_compare_purpose)); - -extern void prepare_cmp_insn PARAMS ((rtx *, rtx *, enum rtx_code *, rtx, - enum machine_mode *, int *, int, - enum can_compare_purpose)); - -extern rtx prepare_operand PARAMS ((int, rtx, int, enum machine_mode, - enum machine_mode, int)); - /* Generate code to indirectly jump to a location given in the rtx LOC. */ extern void emit_indirect_jump PARAMS ((rtx)); @@ -838,42 +290,6 @@ int can_conditionally_move_p PARAMS ((enum machine_mode mode)); #endif -/* Create but don't emit one rtl instruction to add one rtx into another. - Modes must match; operands must meet the operation's predicates. - Likewise for subtraction and for just copying. - These do not call protect_from_queue; caller must do so. */ -extern rtx gen_add2_insn PARAMS ((rtx, rtx)); -extern rtx gen_sub2_insn PARAMS ((rtx, rtx)); -extern rtx gen_move_insn PARAMS ((rtx, rtx)); -extern int have_add2_insn PARAMS ((rtx, rtx)); -extern int have_sub2_insn PARAMS ((rtx, rtx)); - -/* Return the INSN_CODE to use for an extend operation. */ -extern enum insn_code can_extend_p PARAMS ((enum machine_mode, - enum machine_mode, int)); - -/* Generate the body of an insn to extend Y (with mode MFROM) - into X (with mode MTO). Do zero-extension if UNSIGNEDP is nonzero. */ -extern rtx gen_extend_insn PARAMS ((rtx, rtx, enum machine_mode, - enum machine_mode, int)); - -/* Initialize the tables that control conversion between fixed and - floating values. */ -extern void init_fixtab PARAMS ((void)); -extern void init_floattab PARAMS ((void)); - -/* Generate code for a FLOAT_EXPR. */ -extern void expand_float PARAMS ((rtx, rtx, int)); - -/* Generate code for a FIX_EXPR. */ -extern void expand_fix PARAMS ((rtx, rtx, int)); - -/* Call this to initialize an optab function entry. */ -extern rtx init_one_libfunc PARAMS ((const char *)); - -/* Call this once to initialize the contents of the optabs - appropriately for the current target machine. */ -extern void init_optabs PARAMS ((void)); /* Functions from expmed.c: */ @@ -1304,7 +720,14 @@ extern int safe_from_p PARAMS ((rtx, tree, int)); extern int (*lang_safe_from_p) PARAMS ((rtx, tree)); #endif +/* Call this once to initialize the contents of the optabs + appropriately for the current target machine. */ +extern void init_optabs PARAMS ((void)); extern void init_all_optabs PARAMS ((void)); + +/* Call this to initialize an optab function entry. */ +extern rtx init_one_libfunc PARAMS ((const char *)); + extern void do_jump_by_parts_equality_rtx PARAMS ((rtx, rtx, rtx)); extern void do_jump_by_parts_greater_rtx PARAMS ((enum machine_mode, int, rtx, rtx, rtx, |