]> oss.titaniummirror.com Git - msp430-gcc.git/blobdiff - gcc/config/frv/frv-protos.h
Imported gcc-4.4.3
[msp430-gcc.git] / gcc / config / frv / frv-protos.h
diff --git a/gcc/config/frv/frv-protos.h b/gcc/config/frv/frv-protos.h
new file mode 100644 (file)
index 0000000..911ed7c
--- /dev/null
@@ -0,0 +1,212 @@
+/* Frv prototypes.
+   Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2007, 2008
+   Free Software Foundation, Inc.
+   Contributed by Red Hat, Inc.
+
+This file is part of GCC.
+
+GCC 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 3, or (at your option)
+any later version.
+
+GCC 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 GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* CPU type.  This must be identical to the cpu enumeration in frv.md.  */
+typedef enum frv_cpu
+{
+  FRV_CPU_GENERIC,
+  FRV_CPU_FR550,
+  FRV_CPU_FR500,
+  FRV_CPU_FR450,
+  FRV_CPU_FR405,
+  FRV_CPU_FR400,
+  FRV_CPU_FR300,
+  FRV_CPU_SIMPLE,
+  FRV_CPU_TOMCAT
+} frv_cpu_t;
+
+extern frv_cpu_t frv_cpu_type;                 /* value of -mcpu= */
+
+/* Define functions defined in frv.c */
+extern void frv_expand_prologue                        (void);
+extern void frv_expand_epilogue                        (bool);
+extern void frv_override_options               (void);
+extern void frv_optimization_options           (int, int);
+extern void frv_conditional_register_usage     (void);
+extern frv_stack_t *frv_stack_info             (void);
+extern void frv_debug_stack                    (frv_stack_t *);
+extern int frv_frame_pointer_required          (void);
+extern int frv_initial_elimination_offset      (int, int);
+
+#ifdef RTX_CODE
+extern int frv_legitimate_address_p            (enum machine_mode, rtx,
+                                                int, int, int);
+extern rtx frv_legitimize_address              (rtx, rtx, enum machine_mode);
+extern rtx frv_find_base_term                  (rtx);
+
+#ifdef TREE_CODE
+extern void frv_init_cumulative_args           (CUMULATIVE_ARGS *, tree,
+                                                rtx, tree, int);
+
+extern int frv_function_arg_boundary           (enum machine_mode, tree);
+extern rtx frv_function_arg                    (CUMULATIVE_ARGS *,
+                                                enum machine_mode,
+                                                tree, int, int);
+
+extern void frv_function_arg_advance           (CUMULATIVE_ARGS *,
+                                                enum machine_mode,
+                                                tree, int);
+#endif /* TREE_CODE */
+
+extern int frv_expand_block_move               (rtx *);
+extern int frv_expand_block_clear              (rtx *);
+extern rtx frv_dynamic_chain_address           (rtx);
+extern rtx frv_return_addr_rtx                 (int, rtx);
+extern rtx frv_index_memory                    (rtx, enum machine_mode, int);
+extern const char *frv_asm_output_opcode
+                                       (FILE *, const char *);
+extern void frv_final_prescan_insn     (rtx, rtx *, int);
+extern void frv_print_operand          (FILE *, rtx, int);
+extern void frv_print_operand_address  (FILE *, rtx);
+extern void frv_emit_move              (enum machine_mode, rtx, rtx);
+extern int frv_emit_movsi              (rtx, rtx);
+extern const char *output_move_single  (rtx *, rtx);
+extern const char *output_move_double  (rtx *, rtx);
+extern const char *output_condmove_single
+                                       (rtx *, rtx);
+extern int frv_emit_cond_branch                (enum rtx_code, rtx);
+extern int frv_emit_scc                        (enum rtx_code, rtx);
+extern rtx frv_split_scc               (rtx, rtx, rtx, rtx, HOST_WIDE_INT);
+extern int frv_emit_cond_move          (rtx, rtx, rtx, rtx);
+extern rtx frv_split_cond_move         (rtx *);
+extern rtx frv_split_minmax            (rtx *);
+extern rtx frv_split_abs               (rtx *);
+extern void frv_split_double_load      (rtx, rtx);
+extern void frv_split_double_store     (rtx, rtx);
+#ifdef BB_HEAD
+extern void frv_ifcvt_init_extra_fields        (ce_if_block_t *);
+extern void frv_ifcvt_modify_tests     (ce_if_block_t *, rtx *, rtx *);
+extern void frv_ifcvt_modify_multiple_tests
+                                       (ce_if_block_t *, basic_block,
+                                        rtx *, rtx *);
+extern rtx frv_ifcvt_modify_insn       (ce_if_block_t *, rtx, rtx);
+extern void frv_ifcvt_modify_final     (ce_if_block_t *);
+extern void frv_ifcvt_modify_cancel    (ce_if_block_t *);
+#endif
+extern int frv_trampoline_size         (void);
+extern void frv_initialize_trampoline  (rtx, rtx, rtx);
+extern enum reg_class frv_secondary_reload_class
+                                       (enum reg_class,
+                                        enum machine_mode, rtx);
+extern int frv_class_likely_spilled_p  (enum reg_class rclass);
+extern int frv_hard_regno_mode_ok      (int, enum machine_mode);
+extern int frv_hard_regno_nregs                (int, enum machine_mode);
+extern int frv_class_max_nregs         (enum reg_class rclass,
+                                        enum machine_mode mode);
+extern int frv_legitimate_constant_p   (rtx);
+extern enum machine_mode frv_select_cc_mode (enum rtx_code, rtx, rtx);
+#endif /* RTX_CODE */
+
+extern int direct_return_p             (void);
+extern int frv_register_move_cost      (enum reg_class, enum reg_class);
+extern int frv_issue_rate              (void);
+extern int frv_acc_group               (rtx);
+
+#ifdef TREE_CODE
+extern int frv_adjust_field_align      (tree, int);
+#endif
+
+#ifdef RTX_CODE
+extern int integer_register_operand    (rtx, enum machine_mode);
+extern int frv_load_operand            (rtx, enum machine_mode);
+extern int gpr_or_fpr_operand          (rtx, enum machine_mode);
+extern int gpr_no_subreg_operand       (rtx, enum machine_mode);
+extern int gpr_or_int6_operand         (rtx, enum machine_mode);
+extern int fpr_or_int6_operand         (rtx, enum machine_mode);
+extern int gpr_or_int_operand          (rtx, enum machine_mode);
+extern int gpr_or_int12_operand                (rtx, enum machine_mode);
+extern int gpr_fpr_or_int12_operand    (rtx, enum machine_mode);
+extern int gpr_or_int10_operand                (rtx, enum machine_mode);
+extern int move_source_operand         (rtx, enum machine_mode);
+extern int move_destination_operand    (rtx, enum machine_mode);
+extern int condexec_source_operand     (rtx, enum machine_mode);
+extern int condexec_dest_operand       (rtx, enum machine_mode);
+extern int lr_operand                  (rtx, enum machine_mode);
+extern int gpr_or_memory_operand       (rtx, enum machine_mode);
+extern int fpr_or_memory_operand       (rtx, enum machine_mode);
+extern int reg_or_0_operand            (rtx, enum machine_mode);
+extern int fcc_operand                 (rtx, enum machine_mode);
+extern int icc_operand                 (rtx, enum machine_mode);
+extern int cc_operand                  (rtx, enum machine_mode);
+extern int fcr_operand                 (rtx, enum machine_mode);
+extern int icr_operand                 (rtx, enum machine_mode);
+extern int cr_operand                  (rtx, enum machine_mode);
+extern int call_operand                        (rtx, enum machine_mode);
+extern int fpr_operand                 (rtx, enum machine_mode);
+extern int even_reg_operand            (rtx, enum machine_mode);
+extern int odd_reg_operand             (rtx, enum machine_mode);
+extern int even_gpr_operand            (rtx, enum machine_mode);
+extern int odd_gpr_operand             (rtx, enum machine_mode);
+extern int quad_fpr_operand            (rtx, enum machine_mode);
+extern int even_fpr_operand            (rtx, enum machine_mode);
+extern int odd_fpr_operand             (rtx, enum machine_mode);
+extern int dbl_memory_one_insn_operand (rtx, enum machine_mode);
+extern int dbl_memory_two_insn_operand (rtx, enum machine_mode);
+extern int int12_operand               (rtx, enum machine_mode);
+extern int int6_operand                        (rtx, enum machine_mode);
+extern int int5_operand                        (rtx, enum machine_mode);
+extern int uint5_operand               (rtx, enum machine_mode);
+extern int uint4_operand               (rtx, enum machine_mode);
+extern int uint1_operand               (rtx, enum machine_mode);
+extern int int_2word_operand           (rtx, enum machine_mode);
+extern int pic_register_operand                (rtx, enum machine_mode);
+extern int pic_symbolic_operand                (rtx, enum machine_mode);
+extern int small_data_register_operand (rtx, enum machine_mode);
+extern int small_data_symbolic_operand (rtx, enum machine_mode);
+extern int upper_int16_operand         (rtx, enum machine_mode);
+extern int uint16_operand              (rtx, enum machine_mode);
+extern int symbolic_operand            (rtx, enum machine_mode);
+extern int relational_operator         (rtx, enum machine_mode);
+extern int signed_relational_operator  (rtx, enum machine_mode);
+extern int unsigned_relational_operator        (rtx, enum machine_mode);
+extern int float_relational_operator   (rtx, enum machine_mode);
+extern int ccr_eqne_operator           (rtx, enum machine_mode);
+extern int minmax_operator             (rtx, enum machine_mode);
+extern int condexec_si_binary_operator (rtx, enum machine_mode);
+extern int condexec_si_media_operator  (rtx, enum machine_mode);
+extern int condexec_si_divide_operator (rtx, enum machine_mode);
+extern int condexec_si_unary_operator  (rtx, enum machine_mode);
+extern int condexec_sf_conv_operator   (rtx, enum machine_mode);
+extern int condexec_sf_add_operator    (rtx, enum machine_mode);
+extern int condexec_memory_operand     (rtx, enum machine_mode);
+extern int intop_compare_operator      (rtx, enum machine_mode);
+extern int acc_operand                 (rtx, enum machine_mode);
+extern int even_acc_operand            (rtx, enum machine_mode);
+extern int quad_acc_operand            (rtx, enum machine_mode);
+extern int accg_operand                        (rtx, enum machine_mode);
+extern rtx frv_matching_accg_for_acc   (rtx);
+extern void frv_expand_fdpic_call      (rtx *, bool, bool);
+extern rtx frv_gen_GPsym2reg           (rtx, rtx);
+extern int frv_legitimate_memory_operand (rtx, enum machine_mode, int);
+
+/* Information about a relocation unspec.  SYMBOL is the relocation symbol
+   (a SYMBOL_REF or LABEL_REF), RELOC is the type of relocation and OFFSET
+   is the constant addend.  */
+struct frv_unspec {
+  rtx symbol;
+  int reloc;
+  HOST_WIDE_INT offset;
+};
+
+extern bool frv_const_unspec_p (rtx, struct frv_unspec *);
+
+#endif
+