1 /* Prototypes for Blackfin functions used in the md file & elsewhere. 2 Copyright (C) 2005-2018 Free Software Foundation, Inc. 3 4 This file is part of GNU CC. 5 6 GNU CC is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3, or (at your option) 9 any later version. 10 11 GNU CC is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with GCC; see the file COPYING3. If not see 18 <http://www.gnu.org/licenses/>. */ 19 20 /* Function prototypes that cannot exist in bfin.h due to dependency 21 complications. */ 22 #ifndef GCC_BFIN_PROTOS_H 23 #define GCC_BFIN_PROTOS_H 24 25 /* For the anomaly 05-00-0245 */ 26 #define WA_SPECULATIVE_LOADS 0x00000001 27 #define ENABLE_WA_SPECULATIVE_LOADS \ 28 (bfin_workarounds & WA_SPECULATIVE_LOADS) 29 30 /* For the anomaly 05-00-0244 */ 31 #define WA_SPECULATIVE_SYNCS 0x00000002 32 #define ENABLE_WA_SPECULATIVE_SYNCS \ 33 (bfin_workarounds & WA_SPECULATIVE_SYNCS) 34 35 /* For the anomaly 05-00-0371 */ 36 #define WA_RETS 0x00000004 37 #define ENABLE_WA_RETS \ 38 (bfin_workarounds & WA_RETS) 39 40 /* For the anomaly 05-00-0426 */ 41 #define WA_INDIRECT_CALLS 0x00000008 42 #define ENABLE_WA_INDIRECT_CALLS \ 43 ((bfin_workarounds & WA_INDIRECT_CALLS) && !TARGET_ICPLB) 44 45 #define WA_05000257 0x00000010 46 #define ENABLE_WA_05000257 \ 47 (bfin_workarounds & WA_05000257) 48 49 #define WA_05000283 0x00000020 50 #define ENABLE_WA_05000283 \ 51 (bfin_workarounds & WA_05000283) 52 53 #define WA_05000315 0x00000040 54 #define ENABLE_WA_05000315 \ 55 (bfin_workarounds & WA_05000315) 56 57 /* For the anomaly 05-00-0312 */ 58 #define WA_LOAD_LCREGS 0x00000080 59 #define ENABLE_WA_LOAD_LCREGS \ 60 (bfin_workarounds & WA_LOAD_LCREGS) 61 62 #define WA_05000074 0x00000100 63 #define ENABLE_WA_05000074 \ 64 (bfin_workarounds & WA_05000074) 65 66 extern bool function_arg_regno_p (int); 67 68 extern const char *output_load_immediate (rtx *); 69 extern const char *output_casesi_internal (rtx *); 70 extern char *bfin_asm_long (void); 71 extern char *bfin_asm_short (void); 72 extern int log2constp (unsigned HOST_WIDE_INT); 73 74 extern void init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx); 75 extern HOST_WIDE_INT bfin_initial_elimination_offset (int, int); 76 77 extern int effective_address_32bit_p (rtx, machine_mode); 78 extern int symbolic_reference_mentioned_p (rtx); 79 extern rtx bfin_gen_compare (rtx, machine_mode); 80 extern bool expand_move (rtx *, machine_mode); 81 extern void bfin_expand_call (rtx, rtx, rtx, rtx, int); 82 extern bool bfin_longcall_p (rtx, int); 83 extern bool bfin_dsp_memref_p (rtx); 84 extern bool bfin_expand_movmem (rtx, rtx, rtx, rtx); 85 86 extern enum reg_class secondary_input_reload_class (enum reg_class, 87 machine_mode, 88 rtx); 89 extern enum reg_class secondary_output_reload_class (enum reg_class, 90 machine_mode, 91 rtx); 92 extern char *section_asm_op_1 (SECT_ENUM_T); 93 extern char *section_asm_op (SECT_ENUM_T); 94 extern void print_operand (FILE *, rtx, char); 95 extern void print_address_operand (FILE *, rtx); 96 extern void split_di (rtx [], int, rtx [], rtx []); 97 extern int split_load_immediate (rtx []); 98 extern void emit_pic_move (rtx *, machine_mode); 99 extern void asm_conditional_branch (rtx_insn *, rtx *, int, int); 100 extern rtx bfin_gen_compare (rtx, machine_mode); 101 102 extern unsigned bfin_local_alignment (tree, unsigned); 103 extern rtx bfin_va_arg (tree, tree); 104 105 extern void bfin_expand_prologue (void); 106 extern void bfin_expand_epilogue (int, int, bool); 107 extern int analyze_push_multiple_operation (rtx); 108 extern int analyze_pop_multiple_operation (rtx); 109 extern void output_push_multiple (rtx, rtx *); 110 extern void output_pop_multiple (rtx, rtx *); 111 extern int bfin_hard_regno_rename_ok (unsigned int, unsigned int); 112 extern rtx bfin_return_addr_rtx (int); 113 extern void bfin_hardware_loop (void); 114 115 #endif 116 117