1/* Prototypes for Blackfin functions used in the md file & elsewhere. 2 Copyright (C) 2005-2020 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 66extern bool function_arg_regno_p (int); 67 68extern const char *output_load_immediate (rtx *); 69extern const char *output_casesi_internal (rtx *); 70extern char *bfin_asm_long (void); 71extern char *bfin_asm_short (void); 72extern int log2constp (unsigned HOST_WIDE_INT); 73 74extern void init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx); 75extern HOST_WIDE_INT bfin_initial_elimination_offset (int, int); 76 77extern int effective_address_32bit_p (rtx, machine_mode); 78extern int symbolic_reference_mentioned_p (rtx); 79extern rtx bfin_gen_compare (rtx, machine_mode); 80extern bool expand_move (rtx *, machine_mode); 81extern void bfin_expand_call (rtx, rtx, rtx, rtx, int); 82extern bool bfin_longcall_p (rtx, int); 83extern bool bfin_dsp_memref_p (rtx); 84extern bool bfin_expand_cpymem (rtx, rtx, rtx, rtx); 85 86extern enum reg_class secondary_input_reload_class (enum reg_class, 87 machine_mode, 88 rtx); 89extern enum reg_class secondary_output_reload_class (enum reg_class, 90 machine_mode, 91 rtx); 92extern char *section_asm_op_1 (SECT_ENUM_T); 93extern char *section_asm_op (SECT_ENUM_T); 94extern void print_operand (FILE *, rtx, char); 95extern void print_address_operand (FILE *, rtx); 96extern void split_di (rtx [], int, rtx [], rtx []); 97extern int split_load_immediate (rtx []); 98extern void emit_pic_move (rtx *, machine_mode); 99extern void asm_conditional_branch (rtx_insn *, rtx *, int, int); 100extern rtx bfin_gen_compare (rtx, machine_mode); 101 102extern unsigned bfin_local_alignment (tree, unsigned); 103extern rtx bfin_va_arg (tree, tree); 104 105extern void bfin_expand_prologue (void); 106extern void bfin_expand_epilogue (int, int, bool); 107extern int analyze_push_multiple_operation (rtx); 108extern int analyze_pop_multiple_operation (rtx); 109extern void output_push_multiple (rtx, rtx *); 110extern void output_pop_multiple (rtx, rtx *); 111extern int bfin_hard_regno_rename_ok (unsigned int, unsigned int); 112extern rtx bfin_return_addr_rtx (int); 113extern void bfin_hardware_loop (void); 114 115#endif 116 117