/* Register Transfer Language (RTL) definitions for GNU C-Compiler
Copyright (C) 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000 Free Software Foundation, Inc.
+ 1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of GNU CC.
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#ifndef _RTL_H
-#define _RTL_H
+#ifndef GCC_RTL_H
+#define GCC_RTL_H
struct function;
unsigned int used : 1;
/* Nonzero if this rtx came from procedure integration.
In a REG, nonzero means this reg refers to the return value
- of the current function. */
+ of the current function.
+ 1 in a SYMBOL_REF if the symbol is weak. */
unsigned integrated : 1;
/* 1 in an INSN or a SET if this rtx is related to the call frame,
either changing how we compute the frame address or saving and
restoring registers in the prologue and epilogue.
1 in a MEM if the MEM refers to a scalar, rather than a member of
- an aggregate. */
+ an aggregate.
+ 1 in a REG if the register is a pointer.
+ 1 in a SYMBOL_REF if it addresses something in the per-function
+ constant string pool. */
unsigned frame_related : 1;
/* The first element of the operands of this rtx.
/* Define macros to access the `code' field of the rtx. */
-#define GET_CODE(RTX) ((RTX)->code)
-#define PUT_CODE(RTX, CODE) ((RTX)->code = (CODE))
+#define GET_CODE(RTX) ((enum rtx_code) (RTX)->code)
+#define PUT_CODE(RTX, CODE) ((RTX)->code = (ENUM_BITFIELD(rtx_code)) (CODE))
-#define GET_MODE(RTX) ((RTX)->mode)
-#define PUT_MODE(RTX, MODE) ((RTX)->mode = (MODE))
+#define GET_MODE(RTX) ((enum machine_mode) (RTX)->mode)
+#define PUT_MODE(RTX, MODE) ((RTX)->mode = (ENUM_BITFIELD(machine_mode)) (MODE))
#define RTX_INTEGRATED_P(RTX) ((RTX)->integrated)
#define RTX_UNCHANGING_P(RTX) ((RTX)->unchanging)
#define X0WINT(RTX, N) (RTL_CHECK1(RTX, N, '0').rtwint)
#define X0INT(RTX, N) (RTL_CHECK1(RTX, N, '0').rtint)
+#define X0UINT(RTX, N) (RTL_CHECK1(RTX, N, '0').rtuint)
#define X0STR(RTX, N) (RTL_CHECK1(RTX, N, '0').rtstr)
#define X0EXP(RTX, N) (RTL_CHECK1(RTX, N, '0').rtx)
#define X0VEC(RTX, N) (RTL_CHECK1(RTX, N, '0').rtvec)
REG_MAYBE_DEAD,
/* Indicates that a call does not return. */
- REG_NORETURN
+ REG_NORETURN,
+
+ /* Indicates that an indirect jump is a non-local goto instead of a
+ computed goto. */
+ REG_NON_LOCAL_GOTO
};
/* The base value for branch probability notes. */
extern const char * const note_insn_name[NOTE_INSN_MAX - NOTE_INSN_BIAS];
#define GET_NOTE_INSN_NAME(NOTE_CODE) \
- (note_insn_name[(NOTE_CODE) - NOTE_INSN_BIAS])
+ (note_insn_name[(NOTE_CODE) - (int) NOTE_INSN_BIAS])
/* The name of a label, in case it corresponds to an explicit label
in the input source code. */
#define CONTAINING_INSN(RTX) XCEXP(RTX, 2, LABEL_REF)
-/* For a REG rtx, REGNO extracts the register number. */
+/* For a REG rtx, REGNO extracts the register number. ORIGINAL_REGNO holds
+ the number the register originally had; for a pseudo register turned into
+ a hard reg this will hold the old pseudo register number. */
#define REGNO(RTX) XCUINT(RTX, 0, REG)
+#define ORIGINAL_REGNO(RTX) X0UINT(RTX, 1)
/* For a REG rtx, REG_FUNCTION_VALUE_P is nonzero if the reg
is the current function's return value. */
/* 1 in a REG rtx if it corresponds to a variable declared by the user. */
#define REG_USERVAR_P(RTX) ((RTX)->volatil)
+/* 1 in a REG rtx if the register is a pointer. */
+#define REG_POINTER(RTX) ((RTX)->frame_related)
+
/* 1 if the given register REG corresponds to a hard register. */
#define HARD_REGISTER_P(REG) (HARD_REGISTER_NUM_P (REGNO (REG)))
#define CONST_DOUBLE_MEM(r) XCEXP (r, 0, CONST_DOUBLE)
/* For a SUBREG rtx, SUBREG_REG extracts the value we want a subreg of.
- SUBREG_WORD extracts the word-number. */
+ SUBREG_BYTE extracts the byte-number. */
#define SUBREG_REG(RTX) XCEXP(RTX, 0, SUBREG)
-#define SUBREG_WORD(RTX) XCUINT(RTX, 1, SUBREG)
+#define SUBREG_BYTE(RTX) XCUINT(RTX, 1, SUBREG)
+
+/* in rtlanal.c */
+extern unsigned int subreg_regno_offset PARAMS ((unsigned int,
+ enum machine_mode,
+ unsigned int,
+ enum machine_mode));
+extern unsigned int subreg_regno PARAMS ((rtx));
/* 1 if the REG contained in SUBREG_REG is already known to be
sign- or zero-extended from the mode of the SUBREG to the mode of
/* 1 in a SYMBOL_REF if it addresses this function's constants pool. */
#define CONSTANT_POOL_ADDRESS_P(RTX) ((RTX)->unchanging)
+/* 1 in a SYMBOL_REF if it addresses this function's string constant pool. */
+#define STRING_POOL_ADDRESS_P(RTX) ((RTX)->frame_related)
+
/* Flag in a SYMBOL_REF for machine-specific purposes. */
#define SYMBOL_REF_FLAG(RTX) ((RTX)->volatil)
-/* 1 in a SYMBOL_REF if it represents a symbol which might have to change
- if its inlined or unrolled. */
-#define SYMBOL_REF_NEED_ADJUST(RTX) ((RTX)->in_struct)
-
/* 1 means a SYMBOL_REF has been the library function in emit_library_call. */
#define SYMBOL_REF_USED(RTX) ((RTX)->used)
+/* 1 means a SYMBOL_REF is weak. */
+#define SYMBOL_REF_WEAK(RTX) ((RTX)->integrated)
+
/* Define a macro to look for REG_INC notes,
but save time on machines where they never exist. */
/* Generally useful functions. */
-/* 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 ((unsigned HOST_WIDE_INT) (N))
-#define floor_log2(N) floor_log2_wide ((unsigned HOST_WIDE_INT) (N))
-#endif
-extern int exact_log2_wide PARAMS ((unsigned HOST_WIDE_INT));
-extern int floor_log2_wide PARAMS ((unsigned HOST_WIDE_INT));
-
/* In expmed.c */
extern int ceil_log2 PARAMS ((unsigned HOST_WIDE_INT));
extern rtvec gen_rtvec PARAMS ((int, ...));
/* In other files */
-extern char *oballoc PARAMS ((int));
-extern char *permalloc PARAMS ((int));
extern rtx rtx_alloc PARAMS ((RTX_CODE));
extern rtvec rtvec_alloc PARAMS ((int));
extern rtx copy_insn_1 PARAMS ((rtx));
extern rtvec gen_rtvec_v PARAMS ((int, rtx *));
extern rtx gen_reg_rtx PARAMS ((enum machine_mode));
extern rtx gen_label_rtx PARAMS ((void));
+extern int subreg_hard_regno PARAMS ((rtx, int));
extern rtx gen_lowpart_common PARAMS ((enum machine_mode, rtx));
extern rtx gen_lowpart PARAMS ((enum machine_mode, rtx));
extern rtx gen_imagpart PARAMS ((enum machine_mode, rtx));
extern rtx operand_subword PARAMS ((rtx, unsigned int, int,
enum machine_mode));
+extern rtx constant_subword PARAMS ((rtx, int,
+ enum machine_mode));
/* In emit-rtl.c */
extern rtx operand_subword_force PARAMS ((rtx, unsigned int,
enum machine_mode));
extern int subreg_lowpart_p PARAMS ((rtx));
+extern int subreg_lowpart_parts_p PARAMS ((enum machine_mode,
+ enum machine_mode,
+ unsigned int));
extern rtx make_safe_from PARAMS ((rtx, rtx));
extern rtx convert_memory_address PARAMS ((enum machine_mode, rtx));
-extern rtx memory_address PARAMS ((enum machine_mode, rtx));
extern rtx get_insns PARAMS ((void));
extern const char *get_insn_name PARAMS ((int));
extern rtx get_last_insn PARAMS ((void));
extern rtx immed_double_const PARAMS ((HOST_WIDE_INT, HOST_WIDE_INT, enum machine_mode));
extern rtx force_const_mem PARAMS ((enum machine_mode, rtx));
-/* In explow.c */
-extern rtx force_reg PARAMS ((enum machine_mode, rtx));
-
/* In varasm.c */
extern rtx get_pool_constant PARAMS ((rtx));
extern enum machine_mode get_pool_mode PARAMS ((rtx));
HOST_WIDE_INT, int));
extern rtx assign_temp PARAMS ((union tree_node *,
int, int, int));
-/* In expr.c */
-extern rtx protect_from_queue PARAMS ((rtx, int));
-extern void emit_queue PARAMS ((void));
-extern rtx emit_move_insn PARAMS ((rtx, rtx));
-
/* In emit-rtl.c */
extern rtx emit_insn_before PARAMS ((rtx, rtx));
extern rtx emit_jump_insn_before PARAMS ((rtx, rtx));
extern enum rtx_code swap_condition PARAMS ((enum rtx_code));
extern enum rtx_code unsigned_condition PARAMS ((enum rtx_code));
extern enum rtx_code signed_condition PARAMS ((enum rtx_code));
-
-/* In reload.c */
-extern rtx find_equiv_reg PARAMS ((rtx, rtx, enum reg_class, int, short *, int, enum machine_mode));
+extern void mark_jump_label PARAMS ((rtx, rtx, int, int));
/* In jump.c */
extern rtx squeeze_notes PARAMS ((rtx, rtx));
extern rtx split_insns PARAMS ((rtx, rtx));
/* In simplify-rtx.c */
-extern rtx simplify_unary_operation PARAMS ((enum rtx_code, enum machine_mode, rtx, enum machine_mode));
-extern rtx simplify_binary_operation PARAMS ((enum rtx_code, enum machine_mode, rtx, rtx));
-extern rtx simplify_ternary_operation PARAMS ((enum rtx_code, enum machine_mode, enum machine_mode, rtx, rtx, rtx));
-extern rtx simplify_relational_operation PARAMS ((enum rtx_code, enum machine_mode, rtx, rtx));
-extern rtx simplify_gen_binary PARAMS ((enum rtx_code, enum machine_mode,
- rtx, rtx));
+extern rtx simplify_unary_operation PARAMS ((enum rtx_code,
+ enum machine_mode, rtx,
+ enum machine_mode));
+extern rtx simplify_binary_operation PARAMS ((enum rtx_code,
+ enum machine_mode, rtx,
+ rtx));
+extern rtx simplify_ternary_operation PARAMS ((enum rtx_code,
+ enum machine_mode,
+ enum machine_mode, rtx, rtx,
+ rtx));
+extern rtx simplify_relational_operation PARAMS ((enum rtx_code,
+ enum machine_mode, rtx,
+ rtx));
+extern rtx simplify_gen_binary PARAMS ((enum rtx_code,
+ enum machine_mode,
+ rtx, rtx));
+extern rtx simplify_gen_unary PARAMS ((enum rtx_code,
+ enum machine_mode, rtx,
+ enum machine_mode));
+extern rtx simplify_gen_ternary PARAMS ((enum rtx_code,
+ enum machine_mode,
+ enum machine_mode,
+ rtx, rtx, rtx));
+extern rtx simplify_gen_relational PARAMS ((enum rtx_code,
+ enum machine_mode,
+ enum machine_mode,
+ rtx, rtx));
+extern rtx simplify_subreg PARAMS ((enum machine_mode,
+ rtx,
+ enum machine_mode,
+ unsigned int));
+extern rtx simplify_gen_subreg PARAMS ((enum machine_mode,
+ rtx,
+ enum machine_mode,
+ unsigned int));
+extern rtx simplify_replace_rtx PARAMS ((rtx, rtx, rtx));
extern rtx simplify_rtx PARAMS ((rtx));
-/* In optabs.c */
-extern rtx gen_move_insn PARAMS ((rtx, rtx));
-
-extern rtx gen_jump PARAMS ((rtx));
-extern rtx gen_beq PARAMS ((rtx));
-extern rtx gen_bge PARAMS ((rtx));
-extern rtx gen_ble PARAMS ((rtx));
-
/* In function.c */
extern rtx gen_mem_addressof PARAMS ((rtx, union tree_node *));
-/* In explow.c */
-extern rtx eliminate_constant_term PARAMS ((rtx, rtx *));
-
-/* In optabs.c */
-extern rtx expand_complex_abs PARAMS ((enum machine_mode, rtx, rtx,
- int));
-
/* In regclass.c */
extern enum machine_mode choose_hard_reg_mode PARAMS ((unsigned int,
unsigned int));
/* Functions in rtlanal.c */
+/* Single set is implemented as macro for performance reasons. */
+#define single_set(I) (INSN_P (I) \
+ ? (GET_CODE (PATTERN (I)) == SET \
+ ? PATTERN (I) : single_set_1 (I)) \
+ : NULL_RTX)
+#define single_set_1(I) single_set_2 (I, PATTERN (I))
+
+extern int rtx_addr_can_trap_p PARAMS ((rtx));
extern int rtx_unstable_p PARAMS ((rtx));
-extern int rtx_varies_p PARAMS ((rtx));
-extern int rtx_addr_varies_p PARAMS ((rtx));
+extern int rtx_varies_p PARAMS ((rtx, int));
+extern int rtx_addr_varies_p PARAMS ((rtx, int));
extern HOST_WIDE_INT get_integer_term PARAMS ((rtx));
extern rtx get_related_value PARAMS ((rtx));
extern int reg_mentioned_p PARAMS ((rtx, rtx));
extern int reg_referenced_between_p PARAMS ((rtx, rtx, rtx));
extern int reg_set_between_p PARAMS ((rtx, rtx, rtx));
extern int regs_set_between_p PARAMS ((rtx, rtx, rtx));
+extern int swap_commutative_operands_p PARAMS ((rtx, rtx));
extern int modified_between_p PARAMS ((rtx, rtx, rtx));
extern int no_labels_between_p PARAMS ((rtx, rtx));
extern int no_jumps_between_p PARAMS ((rtx, rtx));
extern int modified_in_p PARAMS ((rtx, rtx));
extern int insn_dependent_p PARAMS ((rtx, rtx));
extern int reg_set_p PARAMS ((rtx, rtx));
-extern rtx single_set PARAMS ((rtx));
+extern rtx single_set_2 PARAMS ((rtx, rtx));
extern int multiple_sets PARAMS ((rtx));
+extern int set_noop_p PARAMS ((rtx));
extern rtx find_last_value PARAMS ((rtx, rtx *, rtx, int));
extern int refers_to_regno_p PARAMS ((unsigned int, unsigned int,
rtx, rtx *));
extern int reg_overlap_mentioned_p PARAMS ((rtx, rtx));
+extern rtx set_of PARAMS ((rtx, rtx));
extern void note_stores PARAMS ((rtx,
void (*) (rtx, rtx, void *),
void *));
+extern void note_uses PARAMS ((rtx *,
+ void (*) (rtx *, void *),
+ void *));
extern rtx reg_set_last PARAMS ((rtx, rtx));
extern int dead_or_set_p PARAMS ((rtx, rtx));
extern int dead_or_set_regno_p PARAMS ((rtx, unsigned int));
extern rtx find_reg_note PARAMS ((rtx, enum reg_note, rtx));
extern rtx find_regno_note PARAMS ((rtx, enum reg_note,
unsigned int));
+extern rtx find_reg_equal_equiv_note PARAMS ((rtx));
extern int find_reg_fusage PARAMS ((rtx, enum rtx_code, rtx));
extern int find_regno_fusage PARAMS ((rtx, enum rtx_code,
unsigned int));
extern rtx gen_rtx_CONST_DOUBLE PARAMS ((enum machine_mode, rtx,
HOST_WIDE_INT, HOST_WIDE_INT));
extern rtx gen_rtx_CONST_INT PARAMS ((enum machine_mode, HOST_WIDE_INT));
+extern rtx gen_raw_REG PARAMS ((enum machine_mode, int));
extern rtx gen_rtx_REG PARAMS ((enum machine_mode, int));
+extern rtx gen_rtx_SUBREG PARAMS ((enum machine_mode, rtx, int));
extern rtx gen_rtx_MEM PARAMS ((enum machine_mode, rtx));
+extern rtx gen_lowpart_SUBREG PARAMS ((enum machine_mode, rtx));
+
/* We need the cast here to ensure that we get the same result both with
and without prototypes. */
#define GEN_INT(N) gen_rtx_CONST_INT (VOIDmode, (HOST_WIDE_INT) (N))
#define LAST_VIRTUAL_REGISTER ((FIRST_VIRTUAL_REGISTER) + 4)
+/* REGNUM never really appearing in the INSN stream. */
+#define INVALID_REGNUM (~(unsigned int)0)
+
extern rtx find_next_ref PARAMS ((rtx, rtx));
-extern rtx *find_single_use PARAMS ((rtx, rtx, rtx *));
-extern rtx output_constant_def PARAMS ((union tree_node *));
+extern rtx output_constant_def PARAMS ((union tree_node *, int));
extern rtx immed_real_const PARAMS ((union tree_node *));
-extern union tree_node *make_tree PARAMS ((union tree_node *, rtx));
/* Define a default value for STORE_FLAG_VALUE. */
extern int rtx_to_tree_code PARAMS ((enum rtx_code));
/* In tree.c */
-extern void obfree PARAMS ((char *));
struct obstack;
extern void gcc_obstack_init PARAMS ((struct obstack *));
-extern void pop_obstacks PARAMS ((void));
-extern void push_obstacks PARAMS ((struct obstack *,
- struct obstack *));
+
/* In cse.c */
struct cse_basic_block_data;
extern void thread_jumps PARAMS ((rtx, int, int));
extern int rtx_equal_for_thread_p PARAMS ((rtx, rtx, rtx));
extern int can_reverse_comparison_p PARAMS ((rtx, rtx));
+extern enum rtx_code reversed_comparison_code PARAMS ((rtx, rtx));
+extern enum rtx_code reversed_comparison_code_parts PARAMS ((enum rtx_code,
+ rtx, rtx, rtx));
extern void delete_for_peephole PARAMS ((rtx, rtx));
extern int condjump_in_parallel_p PARAMS ((rtx));
extern void never_reached_warning PARAMS ((rtx));
extern void renumber_insns PARAMS ((FILE *));
extern void remove_unnecessary_notes PARAMS ((void));
-/* In insn-emit.c */
-extern void add_clobbers PARAMS ((rtx, int));
-
/* In combine.c */
extern int combine_instructions PARAMS ((rtx, unsigned int));
extern unsigned int extended_count PARAMS ((rtx, enum machine_mode, int));
/* In sched.c. */
#ifdef BUFSIZ
extern void schedule_insns PARAMS ((FILE *));
+extern void schedule_ebbs PARAMS ((FILE *));
#endif
extern void fix_sched_param PARAMS ((const char *, const char *));
/* In print-rtl.c */
+extern const char *print_rtx_head;
extern void debug_rtx PARAMS ((rtx));
extern void debug_rtx_list PARAMS ((rtx, int));
extern void debug_rtx_range PARAMS ((rtx, rtx));
extern rtx debug_rtx_find PARAMS ((rtx, int));
#ifdef BUFSIZ
extern void print_rtl PARAMS ((FILE *, rtx));
+extern void print_simple_rtl PARAMS ((FILE *, rtx));
extern int print_rtl_single PARAMS ((FILE *, rtx));
extern void print_inline_rtx PARAMS ((FILE *, rtx, int));
#endif
extern void thread_prologue_and_epilogue_insns PARAMS ((rtx));
extern int prologue_epilogue_contains PARAMS ((rtx));
extern int sibcall_epilogue_contains PARAMS ((rtx));
-extern HOST_WIDE_INT get_frame_size PARAMS ((void));
extern void preserve_rtl_expr_result PARAMS ((rtx));
extern void mark_temp_addr_taken PARAMS ((rtx));
extern void update_temp_slot_address PARAMS ((rtx, rtx));
extern void purge_addressof PARAMS ((rtx));
-
-/* In reload.c */
-extern int operands_match_p PARAMS ((rtx, rtx));
-extern int safe_from_earlyclobber PARAMS ((rtx, rtx));
+extern void purge_hard_subreg_sets PARAMS ((rtx));
/* In stmt.c */
extern void set_file_and_line_for_stmt PARAMS ((const char *, int));
extern int preserve_subexpressions_p PARAMS ((void));
/* In expr.c */
-extern void init_expr_once PARAMS ((void));
extern void move_by_pieces PARAMS ((rtx, rtx,
unsigned HOST_WIDE_INT,
unsigned int));
/* In flow.c */
-extern void allocate_bb_life_data PARAMS ((void));
-extern void allocate_reg_life_data PARAMS ((void));
extern void recompute_reg_usage PARAMS ((rtx, int));
#ifdef BUFSIZ
extern void print_rtl_with_bb PARAMS ((FILE *, rtx));
extern void dbr_schedule PARAMS ((rtx, FILE *));
#endif
-/* In optabs.c */
-extern void init_optabs PARAMS ((void));
-
/* In local-alloc.c */
#ifdef BUFSIZ
extern void dump_local_alloc PARAMS ((FILE *));
extern int local_alloc PARAMS ((void));
extern int function_invariant_p PARAMS ((rtx));
-/* In reload1.c */
-extern void reload_cse_regs PARAMS ((rtx));
-extern void init_reload PARAMS ((void));
-extern void mark_home_live PARAMS ((int));
-extern int reload PARAMS ((rtx, int));
-
-/* In caller-save.c */
-extern void init_caller_save PARAMS ((void));
-
/* In profile.c */
extern void init_branch_prob PARAMS ((const char *));
extern void branch_prob PARAMS ((void));
HOST_WIDE_INT *));
/* In calls.c */
-extern void emit_library_call PARAMS ((rtx, int, enum machine_mode,
- int, ...));
-extern rtx emit_library_call_value PARAMS ((rtx, rtx, int,
- enum machine_mode,
- int, ...));
+enum libcall_type
+{
+ LCT_NORMAL = 0,
+ LCT_CONST = 1,
+ LCT_PURE = 2,
+ LCT_CONST_MAKE_BLOCK = 3,
+ LCT_PURE_MAKE_BLOCK = 4,
+ LCT_NORETURN = 5,
+ LCT_THROW = 6
+};
+
+extern void emit_library_call PARAMS ((rtx, enum libcall_type,
+ enum machine_mode, int,
+ ...));
+extern rtx emit_library_call_value PARAMS ((rtx, rtx, enum libcall_type,
+ enum machine_mode, int,
+ ...));
/* In unroll.c */
extern int set_dominates_use PARAMS ((int, int, int, rtx, rtx));
/* In varasm.c */
-extern void bss_section PARAMS ((void));
extern int in_data_section PARAMS ((void));
-extern int supports_one_only PARAMS ((void));
extern void init_varasm_once PARAMS ((void));
/* In rtl.c */
extern void init_rtl PARAMS ((void));
-extern void rtx_free PARAMS ((rtx));
+extern void traverse_md_constants PARAMS ((int (*) (void **, void *),
+ void *));
+struct md_constant { char *name, *value; };
#ifdef BUFSIZ
extern int read_skip_spaces PARAMS ((FILE *));
/* In alias.c */
extern rtx canon_rtx PARAMS ((rtx));
extern int true_dependence PARAMS ((rtx, enum machine_mode, rtx,
- int (*)(rtx)));
+ int (*)(rtx, int)));
+extern rtx get_addr PARAMS ((rtx));
+extern int canon_true_dependence PARAMS ((rtx, enum machine_mode, rtx,
+ rtx, int (*)(rtx, int)));
extern int read_dependence PARAMS ((rtx, rtx));
extern int anti_dependence PARAMS ((rtx, rtx));
extern int output_dependence PARAMS ((rtx, rtx));
/* In condexec.c */
extern void if_convert PARAMS ((int));
-#endif /* _RTL_H */
+#endif /* ! GCC_RTL_H */