+Tue Nov 9 16:43:00 1999 Nick Clifton <nickc@cygnus.com>
+
+ * config/arm/arm-protos.h: New file: Prototypes for functions
+ defined in arm.c and pe.c.
+ * config/arm/arm.h: Fix compile time warnings.
+ * config/arm/arm.c: Fix compile time warnings.
+ * config/arm/pe.h: Fix compile time warnings.
+ * config/arm/aout.h: Fix compile time warnings.
+
Tue Nov 9 14:55:44 1999 Nick Clifton <nickc@cygnus.com>
* config/m32r/m32r-protos.h: New file: Prototypes for functions
}
#endif
-#define ASM_APP_ON ""
-#define ASM_APP_OFF ""
+#define ASM_APP_ON " "
+#define ASM_APP_OFF " "
/* Switch to the text or data segment. */
#define TEXT_SECTION_ASM_OP ".text"
--- /dev/null
+/* Prototypes for exported functions defined in arm.c and pe.c
+ Copyright (C) 1999 Free Software Foundation, Inc.
+ Contributed by Richard Earnshaw (rearnsha@arm.com)
+ Minor hacks by Nick Clifton (nickc@cygnus.com)
+
+This file is part of GNU CC.
+
+GNU CC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU CC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING. If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+extern void arm_expand_prologue PROTO ((void));
+extern void arm_finalize_pic PROTO ((void));
+extern char * arm_output_epilogue PROTO ((void));
+extern void arm_override_options PROTO ((void));
+extern void arm_poke_function_name PROTO ((FILE *, char *));
+extern int arm_process_pragma PROTO ((int (*)(void), void (*) (int), char *));
+extern int arm_regno_class PROTO ((int));
+extern int arm_volatile_func PROTO ((void));
+extern int const_ok_for_arm PROTO ((HOST_WIDE_INT));
+extern void output_arm_prologue PROTO ((FILE *, int));
+extern void output_ascii_pseudo_op PROTO ((FILE *, unsigned char *, int));
+extern void output_func_epilogue PROTO ((int));
+extern void output_func_prologue PROTO ((FILE *, int));
+extern int use_return_insn PROTO ((int));
+#if defined AOF_ASSEMBLER
+extern void aof_add_import PROTO ((char *));
+extern char * aof_data_section PROTO ((void));
+extern void aof_delete_import PROTO ((char *));
+extern void aof_dump_imports PROTO ((FILE *));
+extern void aof_dump_pic_table PROTO ((FILE *));
+extern char * aof_text_section PROTO ((void));
+#endif /* AOF_ASSEMBLER */
+/* Defined in pe.c */
+extern int arm_dllexport_name_p PROTO ((char *));
+extern int arm_dllimport_name_p PROTO ((char *));
+
+#define Mmode enum machine_mode
+
+#ifdef TREE_CODE
+extern int arm_comp_type_attributes PROTO ((tree, tree));
+extern int arm_return_in_memory PROTO ((tree));
+extern int arm_valid_machine_decl_attribute PROTO ((tree, tree, tree));
+extern int arm_valid_type_attribute_p PROTO ((tree, tree, tree, tree));
+/* Defined in pe.c */
+extern int arm_dllexport_p PROTO ((tree));
+extern int arm_dllimport_p PROTO ((tree));
+extern void arm_mark_dllexport PROTO ((tree));
+extern void arm_mark_dllimport PROTO ((tree));
+extern void arm_pe_encode_section_info PROTO ((tree));
+extern tree arm_pe_merge_machine_decl_attributes PROTO ((tree, tree));
+extern void arm_pe_unique_section PROTO ((tree, int));
+extern int arm_pe_valid_machine_decl_attribute PROTO ((tree, tree, tree, tree));
+#endif
+
+#ifdef RTX_CODE
+extern int adjacent_mem_locations PROTO ((rtx, rtx));
+extern char * arithmetic_instr PROTO ((rtx, int));
+extern int arm_adjust_cost PROTO ((rtx, rtx, rtx, int));
+extern RTX_CODE arm_canonicalize_comparison PROTO ((RTX_CODE, rtx *));
+extern int arm_debugger_arg_offset PROTO ((int, rtx));
+extern void arm_final_prescan_insn PROTO ((rtx));
+extern rtx arm_gen_load_multiple PROTO ((int, int, rtx, int, int, int, int, int));
+extern int arm_gen_movstrqi PROTO ((rtx *));
+extern rtx arm_gen_store_multiple PROTO ((int, int, rtx, int, int, int, int, int));
+extern void arm_print_operand PROTO ((FILE *, rtx, int));
+extern void arm_reload_in_hi PROTO ((rtx *));
+extern void arm_reload_out_hi PROTO ((rtx *));
+extern void arm_reorg PROTO ((rtx));
+extern int arm_rtx_costs PROTO ((rtx, RTX_CODE));
+extern Mmode arm_select_cc_mode PROTO ((RTX_CODE, rtx, rtx));
+extern int const_double_rtx_ok_for_fpu PROTO ((rtx));
+extern int const_ok_for_arm PROTO ((HOST_WIDE_INT));
+extern char * emit_ldm_seq PROTO ((rtx *, int));
+extern char * emit_stm_seq PROTO ((rtx *, int));
+extern char * fp_immediate_constant PROTO ((rtx));
+extern rtx gen_compare_reg PROTO ((RTX_CODE, rtx, rtx));
+extern rtx gen_rotated_half_load PROTO ((rtx));
+extern int is_pic PROTO ((rtx));
+extern int label_mentioned_p PROTO ((rtx));
+extern int legitimate_pic_operand_p PROTO ((rtx));
+extern int load_multiple_sequence PROTO ((rtx *, int, int *, int *, HOST_WIDE_INT *));
+extern RTX_CODE minmax_code PROTO ((rtx));
+extern int neg_const_double_rtx_ok_for_fpu PROTO ((rtx));
+extern char * output_add_immediate PROTO ((rtx *));
+extern char * output_call PROTO ((rtx *));
+extern char * output_call_mem PROTO ((rtx *));
+extern char * output_mov_double_arm_from_fpu PROTO ((rtx *));
+extern char * output_mov_double_fpu_from_arm PROTO ((rtx *));
+extern char * output_mov_immediate PROTO ((rtx *));
+extern char * output_mov_long_double_arm_from_arm PROTO ((rtx *));
+extern char * output_mov_long_double_arm_from_fpu PROTO ((rtx *));
+extern char * output_mov_long_double_fpu_from_arm PROTO ((rtx *));
+extern char * output_move_double PROTO ((rtx *));
+extern char * output_return_instruction PROTO ((rtx, int, int));
+extern int store_multiple_sequence PROTO ((rtx *, int, int *, int *, HOST_WIDE_INT *));
+extern int symbol_mentioned_p PROTO ((rtx));
+#if defined AOF_ASSEMBLER
+extern rtx aof_pic_entry PROTO ((rtx));
+#endif /* AOF_ASSEMBLER */
+
+#ifdef HAVE_MACHINE_MODES
+extern int alignable_memory_operand PROTO ((rtx, Mmode));
+extern int arm_add_operand PROTO ((rtx, Mmode));
+extern int arm_go_if_legitimate_address PROTO ((Mmode, rtx));
+extern int arm_not_operand PROTO ((rtx, Mmode));
+extern int arm_reload_memory_operand PROTO ((rtx, Mmode));
+extern int arm_rhs_operand PROTO ((rtx, Mmode));
+extern int arm_rhsm_operand PROTO ((rtx, Mmode));
+extern Mmode arm_select_cc_mode PROTO ((RTX_CODE, rtx, rtx));
+extern int arm_split_constant PROTO ((RTX_CODE, Mmode, HOST_WIDE_INT, rtx, rtx, int));
+extern int bad_signed_byte_operand PROTO ((rtx, Mmode));
+extern int cc_register PROTO ((rtx, Mmode));
+extern int const_shift_operand PROTO ((rtx, Mmode));
+extern int di_operand PROTO ((rtx, Mmode));
+extern int dominant_cc_register PROTO ((rtx, Mmode));
+extern int equality_operator PROTO ((rtx, Mmode));
+extern int f_register_operand PROTO ((rtx, Mmode));
+extern int fpu_add_operand PROTO ((rtx, Mmode));
+extern int fpu_rhs_operand PROTO ((rtx, Mmode));
+extern int index_operand PROTO ((rtx, Mmode));
+extern rtx legitimize_pic_address PROTO ((rtx, Mmode, rtx));
+extern int load_multiple_operation PROTO ((rtx, Mmode));
+extern int logical_binary_operator PROTO ((rtx, Mmode));
+extern int minmax_operator PROTO ((rtx, Mmode));
+extern int multi_register_push PROTO ((rtx, Mmode));
+extern int nonimmediate_di_operand PROTO ((rtx, Mmode));
+extern int nonimmediate_soft_df_operand PROTO ((rtx, Mmode));
+extern int offsettable_memory_operand PROTO ((rtx, Mmode));
+extern int power_of_two_operand PROTO ((rtx, Mmode));
+extern int reg_or_int_operand PROTO ((rtx, Mmode));
+extern int s_register_operand PROTO ((rtx, Mmode));
+extern int shift_operator PROTO ((rtx, Mmode));
+extern int shiftable_operator PROTO ((rtx, Mmode));
+extern int soft_df_operand PROTO ((rtx, Mmode));
+extern int store_multiple_operation PROTO ((rtx, Mmode));
+#if defined TREE_CODE
+extern rtx arm_function_arg PROTO ((CUMULATIVE_ARGS *, Mmode, tree, int));
+extern void arm_init_cumulative_args PROTO ((CUMULATIVE_ARGS *, tree, rtx, int));
+#endif /* TREE_CODE */
+#endif /* HAVE_MACHINE_MODES */
+#endif /* RTX_CODE */
+
+#undef Mmode
#include "toplev.h"
#include "recog.h"
#include "ggc.h"
+#include "arm-protos.h"
/* The maximum number of insns skipped which will be conditionalised if
possible. */
extern FILE * asm_out_file;
/* Some function declarations. */
-static HOST_WIDE_INT int_log2 PROTO ((HOST_WIDE_INT));
-static char * output_multi_immediate PROTO ((rtx *, char *, char *, int,
- HOST_WIDE_INT));
-static int arm_gen_constant PROTO ((enum rtx_code, enum machine_mode,
- HOST_WIDE_INT, rtx, rtx, int, int));
-static int arm_naked_function_p PROTO ((tree));
-static void init_fpa_table PROTO ((void));
-static enum machine_mode select_dominance_cc_mode PROTO ((rtx, rtx,
- HOST_WIDE_INT));
-static HOST_WIDE_INT add_minipool_constant PROTO ((rtx, enum machine_mode));
-static void dump_minipool PROTO ((rtx));
-static rtx find_barrier PROTO ((rtx, int));
-static void push_minipool_fix PROTO ((rtx, int, rtx *, enum machine_mode,
- rtx));
-static void push_minipool_barrier PROTO ((rtx, int));
-static void note_invalid_constants PROTO ((rtx, int));
-static char * fp_const_from_val PROTO ((REAL_VALUE_TYPE *));
-static int eliminate_lr2ip PROTO ((rtx *));
-static char * shift_op PROTO ((rtx, HOST_WIDE_INT *));
-static int pattern_really_clobbers_lr PROTO ((rtx));
-static int function_really_clobbers_lr PROTO ((rtx));
-static void emit_multi_reg_push PROTO ((int));
-static void emit_sfm PROTO ((int, int));
+#ifndef Mmode
+#define Mmode enum machine_mode
+#endif
+
+static HOST_WIDE_INT int_log2 PROTO ((HOST_WIDE_INT));
+static char * output_multi_immediate PROTO ((rtx *, char *, char *, int, HOST_WIDE_INT));
+static int arm_gen_constant PROTO ((enum rtx_code, Mmode, HOST_WIDE_INT, rtx, rtx, int, int));
+static int arm_naked_function_p PROTO ((tree));
+static void init_fpa_table PROTO ((void));
+static enum machine_mode select_dominance_cc_mode PROTO ((rtx, rtx, HOST_WIDE_INT));
+static HOST_WIDE_INT add_minipool_constant PROTO ((rtx, Mmode));
+static void dump_minipool PROTO ((rtx));
+static rtx find_barrier PROTO ((rtx, int));
+static void push_minipool_fix PROTO ((rtx, int, rtx *, Mmode, rtx));
+static void push_minipool_barrier PROTO ((rtx, int));
+static void note_invalid_constants PROTO ((rtx, int));
+static char * fp_const_from_val PROTO ((REAL_VALUE_TYPE *));
+static int eliminate_lr2ip PROTO ((rtx *));
+static char * shift_op PROTO ((rtx, HOST_WIDE_INT *));
+static int pattern_really_clobbers_lr PROTO ((rtx));
+static int function_really_clobbers_lr PROTO ((rtx));
+static void emit_multi_reg_push PROTO ((int));
+static void emit_sfm PROTO ((int, int));
static enum arm_cond_code get_arm_condition_code PROTO ((rtx));
-static int const_ok_for_op RTX_CODE_PROTO ((HOST_WIDE_INT, Rcode));
-static void arm_add_gc_roots PROTO ((void));
+static int const_ok_for_op PROTO ((HOST_WIDE_INT, enum rtx_code));
+static void arm_add_gc_roots PROTO ((void));
/* True if we are currently building a constant table. */
int making_const_table;
}
void
-output_func_epilogue (f, frame_size)
- FILE *f ATTRIBUTE_UNUSED;
+output_func_epilogue (frame_size)
int frame_size;
{
if (use_return_insn (FALSE) && return_used_this_function
/* Generate the assembly code for function exit. */
#define FUNCTION_EPILOGUE(STREAM, SIZE) \
- output_func_epilogue (STREAM, SIZE)
+ output_func_epilogue (SIZE)
/* Determine if the epilogue should be output as RTL.
You should override this if you define FUNCTION_EXTRA_EPILOGUE. */
when running in 32 bit mode. */ \
((!TARGET_APCS_32) ? (GEN_INT (0x03fffffc)) : (GEN_INT (0xffffffff)))
-/* The remainder of this file is only needed for building the compiler
- itself, not for the collateral. */
-#ifdef HAVE_CONFIG_H
-
-/* Prototypes for functions in arm.c */
-
-#ifdef BUFSIZ /* stdio.h has been included, ok to use FILE * */
-#define STDIO_PROTO(ARGS) PROTO (ARGS)
-#else
-#define STDIO_PROTO(ARGS) ()
-#endif
-
-#ifndef TREE_CODE
-union tree_node;
-#define Tree union tree_node *
-#else
-#define Tree tree
-#endif
-
-#ifndef RTX_CODE
-struct rtx_def;
-#define Rtx struct rtx_def *
-#else
-#define Rtx rtx
-#endif
-
-#ifndef HOST_WIDE_INT
-#include "hwint.h"
-#endif
-
-
-#ifndef HAVE_MACHINE_MODES
-#include "machmode.h"
-#endif
-
-#define Mmode enum machine_mode
-
-#ifdef RTX_CODE
-#define RTX_CODE_PROTO(ARGS) PROTO (ARGS)
-#else
-#define RTX_CODE_PROTO(ARGS) ()
-#endif
-
-#define Rcode enum rtx_code
-
-void arm_override_options PROTO ((void));
-int use_return_insn PROTO ((int));
-int const_ok_for_arm PROTO ((HOST_WIDE_INT));
-int arm_split_constant RTX_CODE_PROTO ((Rcode, Mmode, HOST_WIDE_INT, Rtx,
- Rtx, int));
-Rcode arm_canonicalize_comparison RTX_CODE_PROTO ((Rcode, Rtx *));
-int arm_return_in_memory PROTO ((Tree));
-int legitimate_pic_operand_p PROTO ((Rtx));
-Rtx legitimize_pic_address PROTO ((Rtx, Mmode, Rtx));
-int is_pic PROTO ((Rtx));
-void arm_finalize_pic PROTO ((void));
-int arm_rtx_costs RTX_CODE_PROTO ((Rtx, Rcode));
-int arm_adjust_cost PROTO ((Rtx, Rtx, Rtx, int));
-int const_double_rtx_ok_for_fpu PROTO ((Rtx));
-int neg_const_double_rtx_ok_for_fpu PROTO ((Rtx));
-int s_register_operand PROTO ((Rtx, Mmode));
-int f_register_operand PROTO ((Rtx, Mmode));
-int reg_or_int_operand PROTO ((Rtx, Mmode));
-int reload_memory_operand PROTO ((Rtx, Mmode));
-int arm_rhs_operand PROTO ((Rtx, Mmode));
-int arm_rhsm_operand PROTO ((Rtx, Mmode));
-int arm_add_operand PROTO ((Rtx, Mmode));
-int arm_not_operand PROTO ((Rtx, Mmode));
-int offsettable_memory_operand PROTO ((Rtx, Mmode));
-int alignable_memory_operand PROTO ((Rtx, Mmode));
-int bad_signed_byte_operand PROTO ((Rtx, Mmode));
-int fpu_rhs_operand PROTO ((Rtx, Mmode));
-int fpu_add_operand PROTO ((Rtx, Mmode));
-int power_of_two_operand PROTO ((Rtx, Mmode));
-int di_operand PROTO ((Rtx, Mmode));
-int soft_df_operand PROTO ((Rtx, Mmode));
-int index_operand PROTO ((Rtx, Mmode));
-int const_shift_operand PROTO ((Rtx, Mmode));
-int shiftable_operator PROTO ((Rtx, Mmode));
-int logical_binary_operator PROTO ((Rtx, Mmode));
-int shift_operator PROTO ((Rtx, Mmode));
-int equality_operator PROTO ((Rtx, Mmode));
-int minmax_operator PROTO ((Rtx, Mmode));
-int cc_register PROTO ((Rtx, Mmode));
-int dominant_cc_register PROTO ((Rtx, Mmode));
-int symbol_mentioned_p PROTO ((Rtx));
-int label_mentioned_p PROTO ((Rtx));
-Rcode minmax_code PROTO ((Rtx));
-int adjacent_mem_locations PROTO ((Rtx, Rtx));
-int load_multiple_operation PROTO ((Rtx, Mmode));
-int store_multiple_operation PROTO ((Rtx, Mmode));
-int load_multiple_sequence PROTO ((Rtx *, int, int *, int *,
- HOST_WIDE_INT *));
-char * emit_ldm_seq PROTO ((Rtx *, int));
-int store_multiple_sequence PROTO ((Rtx *, int, int *, int *,
- HOST_WIDE_INT *));
-char * emit_stm_seq PROTO ((Rtx *, int));
-int arm_valid_machine_decl_attribute PROTO ((Tree, Tree, Tree));
-Rtx arm_gen_load_multiple PROTO ((int, int, Rtx, int, int, int, int, int));
-Rtx arm_gen_store_multiple PROTO ((int, int, Rtx, int, int, int, int, int));
-int arm_gen_movstrqi PROTO ((Rtx *));
-Rtx gen_rotated_half_load PROTO ((Rtx));
-Mmode arm_select_cc_mode RTX_CODE_PROTO ((Rcode, Rtx, Rtx));
-Rtx gen_compare_reg RTX_CODE_PROTO ((Rcode, Rtx, Rtx, int));
-void arm_reload_in_hi PROTO ((Rtx *));
-void arm_reload_out_hi PROTO ((Rtx *));
-void arm_reorg PROTO ((Rtx));
-char * fp_immediate_constant PROTO ((Rtx));
-void print_multi_reg STDIO_PROTO ((FILE *, char *, int, int));
-char * output_call PROTO ((Rtx *));
-char * output_call_mem PROTO ((Rtx *));
-char * output_mov_long_double_fpu_from_arm PROTO ((Rtx *));
-char * output_mov_long_double_arm_from_fpu PROTO ((Rtx *));
-char * output_mov_long_double_arm_from_arm PROTO ((Rtx *));
-char * output_mov_double_fpu_from_arm PROTO ((Rtx *));
-char * output_mov_double_arm_from_fpu PROTO ((Rtx *));
-char * output_move_double PROTO ((Rtx *));
-char * output_mov_immediate PROTO ((Rtx *));
-char * output_add_immediate PROTO ((Rtx *));
-char * arithmetic_instr PROTO ((Rtx, int));
-void output_ascii_pseudo_op STDIO_PROTO ((FILE *, unsigned char *, int));
-char * output_return_instruction PROTO ((Rtx, int, int));
-int arm_volatile_func PROTO ((void));
-void arm_poke_function_name STDIO_PROTO ((FILE *, char *));
-void output_func_prologue STDIO_PROTO ((FILE *, int));
-void output_func_epilogue STDIO_PROTO ((FILE *, int));
-void arm_expand_prologue PROTO ((void));
-char * arm_output_epilogue PROTO ((void));
-void arm_print_operand STDIO_PROTO ((FILE *, Rtx, int));
-void arm_final_prescan_insn PROTO ((Rtx));
-int short_branch PROTO ((int, int));
-void assemble_align PROTO((int)); /* Used in arm.md, but defined in output.c */
-int multi_register_push PROTO ((Rtx, Mmode));
-#ifdef AOF_ASSEMBLER
-Rtx aof_pic_entry PROTO ((Rtx));
-void aof_dump_pic_table STDIO_PROTO ((FILE *));
-char * aof_text_section PROTO ((void));
-char * aof_data_section PROTO ((void));
-void aof_add_import PROTO ((char *));
-void aof_delete_import PROTO ((char *));
-void aof_dump_imports STDIO_PROTO ((FILE *));
-#endif
-
-/* Define in pe.c */
-int arm_pe_return_in_memory PROTO ((Tree));
-int arm_dllexport_p PROTO ((Tree));
-int arm_dllimport_p PROTO ((Tree));
-int arm_dllexport_name_p PROTO ((char *));
-int arm_dllimport_name_p PROTO ((char *));
-
-#endif /* HAVE_CONFIG_H */
-
#endif /* __ARM_H__ */
/* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS
is a valid machine specific attribute for DECL.
The attributes in ATTRIBUTES have previously been assigned to DECL. */
-extern int arm_pe_valid_machine_decl_attribute ();
#undef VALID_MACHINE_DECL_ATTRIBUTE
#define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, IDENTIFIER, ARGS) \
arm_pe_valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS)
TYPE1 and TYPE2 are incompatible, one if they are compatible,
and two if they are nearly compatible (which causes a warning to be
generated). */
-extern int arm_pe_comp_type_attributes ();
#define COMP_TYPE_ATTRIBUTES(TYPE1, TYPE2) \
arm_pe_comp_type_attributes ((TYPE1), (TYPE2))
#endif
-extern union tree_node *arm_pe_merge_machine_decl_attributes ();
#define MERGE_MACHINE_DECL_ATTRIBUTES(OLD, NEW) \
arm_pe_merge_machine_decl_attributes ((OLD), (NEW))
This is also needed to implement one-only vtables: they go into their own
section and we need to set DECL_SECTION_NAME so we do that here.
Note that we can be called twice on the same decl. */
-extern void arm_pe_encode_section_info ();
#undef ENCODE_SECTION_INFO
#define ENCODE_SECTION_INFO(DECL) \
arm_pe_encode_section_info (DECL)
#define MULTIPLE_SYMBOL_SPACES
#define UNIQUE_SECTION_P(DECL) DECL_ONE_ONLY (DECL)
-extern void arm_pe_unique_section ();
+
#define UNIQUE_SECTION(DECL,RELOC) arm_pe_unique_section (DECL, RELOC)
#define SUPPORTS_ONE_ONLY 1