1/* Frv prototypes. 2 Copyright (C) 1999-2022 Free Software Foundation, Inc. 3 Contributed by Red Hat, Inc. 4 5This file is part of GCC. 6 7GCC is free software; you can redistribute it and/or modify 8it under the terms of the GNU General Public License as published by 9the Free Software Foundation; either version 3, or (at your option) 10any later version. 11 12GCC is distributed in the hope that it will be useful, 13but WITHOUT ANY WARRANTY; without even the implied warranty of 14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15GNU General Public License for more details. 16 17You should have received a copy of the GNU General Public License 18along with GCC; see the file COPYING3. If not see 19<http://www.gnu.org/licenses/>. */ 20 21/* Define functions defined in frv.cc */ 22extern void frv_expand_prologue (void); 23extern void frv_expand_epilogue (bool); 24extern frv_stack_t *frv_stack_info (void); 25extern void frv_debug_stack (frv_stack_t *); 26extern int frv_initial_elimination_offset (int, int); 27extern void frv_ifcvt_machdep_init (void *); 28 29#ifdef RTX_CODE 30extern int frv_legitimate_address_p_1 (machine_mode, rtx, 31 int, int, int); 32extern rtx frv_find_base_term (rtx); 33 34#ifdef TREE_CODE 35extern void frv_init_cumulative_args (CUMULATIVE_ARGS *, tree, 36 rtx, tree, int); 37 38extern bool frv_function_value_regno_p (const unsigned int); 39#endif /* TREE_CODE */ 40 41extern int frv_expand_block_move (rtx *); 42extern int frv_expand_block_clear (rtx *); 43extern rtx frv_dynamic_chain_address (rtx); 44extern rtx frv_return_addr_rtx (int, rtx); 45extern rtx frv_index_memory (rtx, machine_mode, int); 46extern const char *frv_asm_output_opcode 47 (FILE *, const char *); 48extern void frv_final_prescan_insn (rtx_insn *, rtx *, int); 49extern void frv_emit_move (machine_mode, rtx, rtx); 50extern int frv_emit_movsi (rtx, rtx); 51extern const char *output_move_single (rtx *, rtx); 52extern const char *output_move_double (rtx *, rtx); 53extern const char *output_condmove_single 54 (rtx *, rtx); 55extern int frv_emit_cond_branch (rtx *); 56extern int frv_emit_scc (rtx *); 57extern rtx frv_split_scc (rtx, rtx, rtx, rtx, HOST_WIDE_INT); 58extern int frv_emit_cond_move (rtx, rtx, rtx, rtx); 59extern rtx frv_split_cond_move (rtx *); 60extern rtx frv_split_minmax (rtx *); 61extern rtx frv_split_abs (rtx *); 62extern void frv_split_double_load (rtx, rtx); 63extern void frv_split_double_store (rtx, rtx); 64#ifdef BB_HEAD 65extern void frv_ifcvt_init_extra_fields (struct ce_if_block *); 66extern void frv_ifcvt_modify_tests (struct ce_if_block *, rtx *, rtx *); 67extern void frv_ifcvt_modify_multiple_tests 68 (struct ce_if_block *, basic_block, 69 rtx *, rtx *); 70extern rtx frv_ifcvt_modify_insn (struct ce_if_block *, rtx, rtx_insn *); 71extern void frv_ifcvt_modify_final (struct ce_if_block *); 72extern void frv_ifcvt_modify_cancel (struct ce_if_block *); 73#endif 74extern enum reg_class frv_secondary_reload_class 75 (enum reg_class, 76 machine_mode, rtx); 77extern int frv_class_max_nregs (enum reg_class rclass, 78 machine_mode mode); 79extern machine_mode frv_select_cc_mode (enum rtx_code, rtx, rtx); 80#endif /* RTX_CODE */ 81 82extern int frv_trampoline_size (void); 83extern int direct_return_p (void); 84extern int frv_issue_rate (void); 85extern int frv_acc_group (rtx); 86 87#ifdef TREE_CODE 88extern int frv_adjust_field_align (tree, int); 89#endif 90 91#ifdef RTX_CODE 92extern bool integer_register_operand (rtx, machine_mode); 93extern bool frv_load_operand (rtx, machine_mode); 94extern bool gpr_or_fpr_operand (rtx, machine_mode); 95extern bool gpr_no_subreg_operand (rtx, machine_mode); 96extern int gpr_or_int6_operand (rtx, machine_mode); 97extern bool fpr_or_int6_operand (rtx, machine_mode); 98extern bool gpr_or_int_operand (rtx, machine_mode); 99extern bool gpr_or_int12_operand (rtx, machine_mode); 100extern bool gpr_fpr_or_int12_operand (rtx, machine_mode); 101extern bool gpr_or_int10_operand (rtx, machine_mode); 102extern bool move_source_operand (rtx, machine_mode); 103extern bool move_destination_operand (rtx, machine_mode); 104extern bool condexec_source_operand (rtx, machine_mode); 105extern bool condexec_dest_operand (rtx, machine_mode); 106extern bool lr_operand (rtx, machine_mode); 107extern bool gpr_or_memory_operand (rtx, machine_mode); 108extern bool fpr_or_memory_operand (rtx, machine_mode); 109extern bool reg_or_0_operand (rtx, machine_mode); 110extern bool fcc_operand (rtx, machine_mode); 111extern bool icc_operand (rtx, machine_mode); 112extern bool cc_operand (rtx, machine_mode); 113extern bool fcr_operand (rtx, machine_mode); 114extern bool icr_operand (rtx, machine_mode); 115extern bool cr_operand (rtx, machine_mode); 116extern bool call_operand (rtx, machine_mode); 117extern bool fpr_operand (rtx, machine_mode); 118extern bool even_reg_operand (rtx, machine_mode); 119extern bool odd_reg_operand (rtx, machine_mode); 120extern bool even_gpr_operand (rtx, machine_mode); 121extern bool odd_gpr_operand (rtx, machine_mode); 122extern bool quad_fpr_operand (rtx, machine_mode); 123extern bool even_fpr_operand (rtx, machine_mode); 124extern bool odd_fpr_operand (rtx, machine_mode); 125extern bool dbl_memory_one_insn_operand (rtx, machine_mode); 126extern bool dbl_memory_two_insn_operand (rtx, machine_mode); 127extern bool int12_operand (rtx, machine_mode); 128extern bool int6_operand (rtx, machine_mode); 129extern bool int5_operand (rtx, machine_mode); 130extern bool uint5_operand (rtx, machine_mode); 131extern bool uint4_operand (rtx, machine_mode); 132extern bool uint1_operand (rtx, machine_mode); 133extern bool int_2word_operand (rtx, machine_mode); 134extern int pic_register_operand (rtx, machine_mode); 135extern int pic_symbolic_operand (rtx, machine_mode); 136extern int small_data_register_operand (rtx, machine_mode); 137extern int small_data_symbolic_operand (rtx, machine_mode); 138extern bool upper_int16_operand (rtx, machine_mode); 139extern bool uint16_operand (rtx, machine_mode); 140extern bool symbolic_operand (rtx, machine_mode); 141extern bool relational_operator (rtx, machine_mode); 142extern int signed_relational_operator (rtx, machine_mode); 143extern int unsigned_relational_operator (rtx, machine_mode); 144extern bool float_relational_operator (rtx, machine_mode); 145extern bool ccr_eqne_operator (rtx, machine_mode); 146extern bool minmax_operator (rtx, machine_mode); 147extern bool condexec_si_binary_operator (rtx, machine_mode); 148extern bool condexec_si_media_operator (rtx, machine_mode); 149extern bool condexec_si_divide_operator (rtx, machine_mode); 150extern bool condexec_si_unary_operator (rtx, machine_mode); 151extern bool condexec_sf_conv_operator (rtx, machine_mode); 152extern bool condexec_sf_add_operator (rtx, machine_mode); 153extern int condexec_memory_operand (rtx, machine_mode); 154extern bool intop_compare_operator (rtx, machine_mode); 155extern bool acc_operand (rtx, machine_mode); 156extern bool even_acc_operand (rtx, machine_mode); 157extern bool quad_acc_operand (rtx, machine_mode); 158extern bool accg_operand (rtx, machine_mode); 159extern rtx frv_matching_accg_for_acc (rtx); 160extern void frv_expand_fdpic_call (rtx *, bool, bool); 161extern rtx frv_gen_GPsym2reg (rtx, rtx); 162extern int frv_legitimate_memory_operand (rtx, machine_mode, int); 163 164/* Information about a relocation unspec. SYMBOL is the relocation symbol 165 (a SYMBOL_REF or LABEL_REF), RELOC is the type of relocation and OFFSET 166 is the constant addend. */ 167struct frv_unspec { 168 rtx symbol; 169 int reloc; 170 HOST_WIDE_INT offset; 171}; 172 173extern bool frv_const_unspec_p (rtx, struct frv_unspec *); 174 175#endif 176 177