📄 expr.h
字号:
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 *//* 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};/* 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 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;typedef rtx (*rtxfun) ();/* 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 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];/* Define functions given in optabs.c. *//* Expand a binary operation given optab and rtx operands. */extern rtx expand_binop PROTO((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 PROTO((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 PROTO((optab, rtx, rtx, rtx, rtx, int));/* Expand a unary arithmetic operation given optab rtx operand. */extern rtx expand_unop PROTO((enum machine_mode, optab, rtx, rtx, int));/* Expand the absolute value operation. */extern rtx expand_abs PROTO((enum machine_mode, rtx, rtx, int, int));/* Expand the complex absolute value operation. */extern rtx expand_complex_abs PROTO((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 PROTO((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 PROTO((rtx, rtx, rtx, rtx, rtx));/* Emit code to make a call to a constant function or a library call. */extern void emit_libcall_block PROTO((rtx, rtx, rtx, rtx));/* Emit one rtl instruction to store zero in specified rtx. */extern void emit_clr_insn PROTO((rtx));/* Emit one rtl insn to store 1 in specified rtx assuming it contains 0. */extern void emit_0_to_1_insn PROTO((rtx));/* Emit one rtl insn to compare two rtx's. */extern void emit_cmp_insn PROTO((rtx, rtx, enum rtx_code, rtx, enum machine_mode, int, int));/* Nonzero if a compare of mode MODE can be done straightforwardly (without splitting it into pieces). */extern int can_compare_p PROTO((enum machine_mode));/* Emit a library call comparison between floating point X and Y. COMPARISON is the rtl operator to compare with (EQ, NE, GT, etc.). */extern void emit_float_lib_cmp PROTO((rtx, rtx, enum rtx_code));/* Generate code to indirectly jump to a location given in the rtx LOC. */extern void emit_indirect_jump PROTO((rtx));#ifdef HAVE_conditional_move/* Emit a conditional move operation. */rtx emit_conditional_move PROTO((rtx, enum rtx_code, rtx, rtx, enum machine_mode, rtx, rtx, enum machine_mode, int));/* Return non-zero if the conditional move is supported. */int can_conditionally_move_p PROTO((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 PROTO((rtx, rtx));extern rtx gen_sub2_insn PROTO((rtx, rtx));extern rtx gen_move_insn PROTO((rtx, rtx));extern int have_add2_insn PROTO((enum machine_mode));extern int have_sub2_insn PROTO((enum machine_mode));/* Return the INSN_CODE to use for an extend operation. */extern enum insn_code can_extend_p PROTO((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 PROTO((rtx, rtx, enum machine_mode, enum machine_mode, int));/* Initialize the tables that control conversion between fixed and floating values. */extern void init_fixtab PROTO((void));extern void init_floattab PROTO((void));/* Generate code for a FLOAT_EXPR. */extern void expand_float PROTO((rtx, rtx, int));/* Generate code for a FIX_EXPR. */extern void expand_fix PROTO((rtx, rtx, int));/* Call this once to initialize the contents of the optabs appropriately for the current target machine. */extern void init_optabs PROTO((void));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -