⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtl.h

📁 早期freebsd实现
💻 H
📖 第 1 页 / 共 3 页
字号:
/* The following functions accept a wide integer argument.  Rather than   having to cast on every function call, we use a macro instead, that is   defined here and in tree.h.  */#ifndef exact_log2#define exact_log2(N) exact_log2_wide ((HOST_WIDE_INT) (N))#define floor_log2(N) floor_log2_wide ((HOST_WIDE_INT) (N))#endif#define plus_constant(X,C) plus_constant_wide (X, (HOST_WIDE_INT) (C))#define plus_constant_for_output(X,C)  \  plus_constant_for_output_wide (X, (HOST_WIDE_INT) (C))extern rtx plus_constant_wide		 PROTO((rtx, HOST_WIDE_INT));extern rtx plus_constant_for_output_wide PROTO((rtx, HOST_WIDE_INT));#define GEN_INT(N) gen_rtx (CONST_INT, VOIDmode, (N))#if 0/* We cannot define prototypes for the variable argument functions,   since they have not been ANSI-fied, and an ANSI compiler would   complain when compiling the definition of these functions.  */extern rtx gen_rtx			PROTO((enum rtx_code, enum machine_mode, ...));extern rtvec gen_rtvec			PROTO((int, ...));#elseextern rtx gen_rtx ();extern rtvec gen_rtvec ();#endif#ifdef BUFSIZ			/* stdio.h has been included */extern rtx read_rtx			PROTO((FILE *));#elseextern rtx read_rtx ();#endif#if 0/* At present, don't prototype xrealloc, since all of the callers don't   cast their pointers to char *, and all of the xrealloc's don't use   void * yet.  */extern char *xrealloc			PROTO((void *, unsigned));#elseextern char *xrealloc ();#endifextern char *xmalloc			PROTO((unsigned));extern char *oballoc			PROTO((int));extern char *permalloc			PROTO((int));extern void free			PROTO((void *));extern rtx rtx_alloc			PROTO((RTX_CODE));extern rtvec rtvec_alloc		PROTO((int));extern rtx find_reg_note		PROTO((rtx, enum reg_note, rtx));extern rtx find_regno_note		PROTO((rtx, enum reg_note, int));extern HOST_WIDE_INT get_integer_term	PROTO((rtx));extern rtx get_related_value		PROTO((rtx));extern rtx single_set			PROTO((rtx));extern rtx find_last_value		PROTO((rtx, rtx *, rtx));extern rtx copy_rtx			PROTO((rtx));extern rtx copy_rtx_if_shared		PROTO((rtx));extern rtx copy_most_rtx		PROTO((rtx, rtx));extern rtx replace_rtx			PROTO((rtx, rtx, rtx));extern rtvec gen_rtvec_v		PROTO((int, rtx *));extern rtx gen_reg_rtx			PROTO((enum machine_mode));extern rtx gen_label_rtx		PROTO((void));extern rtx gen_inline_header_rtx	PROTO((rtx, rtx, int, int, int, int, int, int, rtx, int, int, rtvec, rtx));extern rtx gen_lowpart_common		PROTO((enum machine_mode, rtx));extern rtx gen_lowpart			PROTO((enum machine_mode, rtx));extern rtx gen_lowpart_if_possible	PROTO((enum machine_mode, rtx));extern rtx gen_highpart			PROTO((enum machine_mode, rtx));extern rtx gen_realpart			PROTO((enum machine_mode, rtx));extern rtx gen_imagpart			PROTO((enum machine_mode, rtx));extern rtx operand_subword		PROTO((rtx, int, int, enum machine_mode));extern rtx operand_subword_force	PROTO((rtx, int, enum machine_mode));extern int subreg_lowpart_p		PROTO((rtx));extern rtx make_safe_from		PROTO((rtx, rtx));extern rtx memory_address		PROTO((enum machine_mode, rtx));extern rtx get_insns			PROTO((void));extern rtx get_last_insn		PROTO((void));extern rtx get_last_insn_anywhere	PROTO((void));extern void start_sequence		PROTO((void));extern void push_to_sequence		PROTO((rtx));extern void end_sequence		PROTO((void));extern rtx gen_sequence			PROTO((void));extern rtx immed_double_const		PROTO((HOST_WIDE_INT, HOST_WIDE_INT, enum machine_mode));extern rtx force_const_mem		PROTO((enum machine_mode, rtx));extern rtx force_reg			PROTO((enum machine_mode, rtx));extern rtx get_pool_constant		PROTO((rtx));extern enum machine_mode get_pool_mode	PROTO((rtx));extern int get_pool_offset		PROTO((rtx));extern rtx simplify_subtraction		PROTO((rtx));extern rtx assign_stack_local		PROTO((enum machine_mode, int, int));extern rtx assign_stack_temp		PROTO((enum machine_mode, int, int));extern rtx protect_from_queue		PROTO((rtx, int));extern void emit_queue			PROTO((void));extern rtx emit_move_insn		PROTO((rtx, rtx));extern rtx emit_insn_before		PROTO((rtx, rtx));extern rtx emit_jump_insn_before	PROTO((rtx, rtx));extern rtx emit_call_insn_before	PROTO((rtx, rtx));extern rtx emit_barrier_before		PROTO((rtx));extern rtx emit_note_before		PROTO((int, rtx));extern rtx emit_insn_after		PROTO((rtx, rtx));extern rtx emit_jump_insn_after		PROTO((rtx, rtx));extern rtx emit_barrier_after		PROTO((rtx));extern rtx emit_label_after		PROTO((rtx, rtx));extern rtx emit_note_after		PROTO((int, rtx));extern rtx emit_line_note_after		PROTO((char *, int, rtx));extern rtx emit_insn			PROTO((rtx));extern rtx emit_insns			PROTO((rtx));extern rtx emit_insns_before		PROTO((rtx, rtx));extern rtx emit_jump_insn		PROTO((rtx));extern rtx emit_call_insn		PROTO((rtx));extern rtx emit_label			PROTO((rtx));extern rtx emit_barrier			PROTO((void));extern rtx emit_line_note		PROTO((char *, int));extern rtx emit_note			PROTO((char *, int));extern rtx emit_line_note_force		PROTO((char *, int));extern rtx make_insn_raw		PROTO((rtx));extern rtx previous_insn		PROTO((rtx));extern rtx next_insn			PROTO((rtx));extern rtx prev_nonnote_insn		PROTO((rtx));extern rtx next_nonnote_insn		PROTO((rtx));extern rtx prev_real_insn		PROTO((rtx));extern rtx next_real_insn		PROTO((rtx));extern rtx prev_active_insn		PROTO((rtx));extern rtx next_active_insn		PROTO((rtx));extern rtx prev_label			PROTO((rtx));extern rtx next_label			PROTO((rtx));extern rtx next_cc0_user		PROTO((rtx));extern rtx prev_cc0_setter		PROTO((rtx));extern rtx reg_set_last			PROTO((rtx, rtx));extern rtx next_nondeleted_insn		PROTO((rtx));extern enum rtx_code reverse_condition	PROTO((enum rtx_code));extern enum rtx_code swap_condition	PROTO((enum rtx_code));extern enum rtx_code unsigned_condition	PROTO((enum rtx_code));extern enum rtx_code signed_condition	PROTO((enum rtx_code));extern rtx find_equiv_reg		PROTO((rtx, rtx, enum reg_class, int, short *, int, enum machine_mode));extern rtx squeeze_notes		PROTO((rtx, rtx));extern rtx delete_insn			PROTO((rtx));extern void delete_jump			PROTO((rtx));extern rtx get_label_before		PROTO((rtx));extern rtx get_label_after		PROTO((rtx));extern rtx follow_jumps			PROTO((rtx));extern rtx adj_offsettable_operand	PROTO((rtx, int));extern rtx try_split			PROTO((rtx, rtx, int));extern rtx split_insns			PROTO((rtx, rtx));extern rtx simplify_unary_operation	PROTO((enum rtx_code, enum machine_mode, rtx, enum machine_mode));extern rtx simplify_binary_operation	PROTO((enum rtx_code, enum machine_mode, rtx, rtx));extern rtx simplify_ternary_operation	PROTO((enum rtx_code, enum machine_mode, enum machine_mode, rtx, rtx, rtx));extern rtx simplify_relational_operation PROTO((enum rtx_code, enum machine_mode, rtx, rtx));extern rtx nonlocal_label_rtx_list	PROTO((void));extern rtx gen_move_insn		PROTO((rtx, rtx));extern rtx gen_jump			PROTO((rtx));extern rtx gen_beq			PROTO((rtx));extern rtx gen_bge			PROTO((rtx));extern rtx gen_ble			PROTO((rtx));extern rtx eliminate_constant_term	PROTO((rtx, rtx *));extern rtx expand_complex_abs		PROTO((enum machine_mode, rtx, rtx, int));/* Maximum number of parallel sets and clobbers in any insn in this fn.   Always at least 3, since the combiner could put that many togetherm   and we want this to remain correct for all the remaining passes.  */extern int max_parallel;extern int asm_noperands		PROTO((rtx));extern char *decode_asm_operands	PROTO((rtx, rtx *, rtx **, char **, enum machine_mode *));extern enum reg_class reg_preferred_class PROTO((int));extern enum reg_class reg_alternate_class PROTO((int));extern rtx get_first_nonparm_insn	PROTO((void));/* Standard pieces of rtx, to be substituted directly into things.  */extern rtx pc_rtx;extern rtx cc0_rtx;extern rtx const0_rtx;extern rtx const1_rtx;extern rtx const2_rtx;extern rtx constm1_rtx;extern rtx const_true_rtx;extern rtx const_tiny_rtx[3][(int) MAX_MACHINE_MODE];/* Returns a constant 0 rtx in mode MODE.  Integer modes are treated the    same as VOIDmode.  */#define CONST0_RTX(MODE) (const_tiny_rtx[0][(int) (MODE)])/* Likewise, for the constants 1 and 2.  */#define CONST1_RTX(MODE) (const_tiny_rtx[1][(int) (MODE)])#define CONST2_RTX(MODE) (const_tiny_rtx[2][(int) (MODE)])/* All references to certain hard regs, except those created   by allocating pseudo regs into them (when that's possible),   go through these unique rtx objects.  */extern rtx stack_pointer_rtx;extern rtx frame_pointer_rtx;extern rtx arg_pointer_rtx;extern rtx pic_offset_table_rtx;extern rtx struct_value_rtx;extern rtx struct_value_incoming_rtx;extern rtx static_chain_rtx;extern rtx static_chain_incoming_rtx;/* Virtual registers are used during RTL generation to refer to locations into   the stack frame when the actual location isn't known until RTL generation   is complete.  The routine instantiate_virtual_regs replaces these with   the proper value, which is normally {frame,arg,stack}_pointer_rtx plus   a constant.  */#define FIRST_VIRTUAL_REGISTER	(FIRST_PSEUDO_REGISTER)/* This points to the first word of the incoming arguments passed on the stack,   either by the caller or by the callee when pretending it was passed by the   caller.  */extern rtx virtual_incoming_args_rtx;#define VIRTUAL_INCOMING_ARGS_REGNUM	(FIRST_VIRTUAL_REGISTER)/* If FRAME_GROWS_DOWNWARDS, this points to immediately above the first   variable on the stack.  Otherwise, it points to the first variable on   the stack.  */extern rtx virtual_stack_vars_rtx;#define VIRTUAL_STACK_VARS_REGNUM	((FIRST_VIRTUAL_REGISTER) + 1)/* This points to the location of dynamically-allocated memory on the stack   immediately after the stack pointer has been adjusted by the amount   desired.  */extern rtx virtual_stack_dynamic_rtx;#define VIRTUAL_STACK_DYNAMIC_REGNUM	((FIRST_VIRTUAL_REGISTER) + 2)/* This points to the location in the stack at which outgoing arguments should   be written when the stack is pre-pushed (arguments pushed using push   insns always use sp).  */extern rtx virtual_outgoing_args_rtx;#define VIRTUAL_OUTGOING_ARGS_REGNUM	((FIRST_VIRTUAL_REGISTER) + 3)#define LAST_VIRTUAL_REGISTER	((FIRST_VIRTUAL_REGISTER) + 3)extern rtx find_next_ref		PROTO((rtx, rtx));extern rtx *find_single_use		PROTO((rtx, rtx, rtx *));/* It is hard to write the prototype for expand_expr, since it needs   expr.h to be included for the enumeration.  */extern rtx expand_expr ();extern rtx immed_real_const_1();#ifdef TREE_CODE/* rtl.h and tree.h were included.  */extern rtx  output_constant_def PROTO((tree));extern rtx  immed_real_const	PROTO((tree));extern rtx  immed_real_const_1	PROTO((REAL_VALUE_TYPE, enum machine_mode));extern tree make_tree		PROTO((tree, rtx));#elseextern rtx output_constant_def ();extern rtx immed_real_const ();extern rtx immed_real_const_1 ();#endif/* Define a default value for STORE_FLAG_VALUE.  */#ifndef STORE_FLAG_VALUE#define STORE_FLAG_VALUE 1#endif/* Nonzero after end of reload pass.   Set to 1 or 0 by toplev.c.  */extern int reload_completed;/* Set to 1 while reload_as_needed is operating.   Required by some machines to handle any generated moves differently.  */extern int reload_in_progress;/* If this is nonzero, we do not bother generating VOLATILE   around volatile memory references, and we are willing to   output indirect addresses.  If cse is to follow, we reject   indirect addresses so a useful potential cse is generated;   if it is used only once, instruction combination will produce   the same indirect address eventually.  */extern int cse_not_expected;/* Indexed by pseudo register number, gives the rtx for that pseudo.   Allocated in parallel with regno_pointer_flag.  */extern rtx *regno_reg_rtx;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -