h8300-protos.h revision 1.12 1 1.1 mrg /* Definitions of target machine for GNU compiler.
2 1.1 mrg Renesas H8/300 version
3 1.12 mrg Copyright (C) 2000-2022 Free Software Foundation, Inc.
4 1.1 mrg Contributed by Steve Chamberlain (sac (at) cygnus.com),
5 1.1 mrg Jim Wilson (wilson (at) cygnus.com), and Doug Evans (dje (at) cygnus.com).
6 1.1 mrg
7 1.1 mrg This file is part of GCC.
8 1.1 mrg
9 1.1 mrg GCC is free software; you can redistribute it and/or modify
10 1.1 mrg it under the terms of the GNU General Public License as published by
11 1.1 mrg the Free Software Foundation; either version 3, or (at your option)
12 1.1 mrg any later version.
13 1.1 mrg
14 1.1 mrg GCC is distributed in the hope that it will be useful,
15 1.1 mrg but WITHOUT ANY WARRANTY; without even the implied warranty of
16 1.1 mrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 1.1 mrg GNU General Public License for more details.
18 1.1 mrg
19 1.1 mrg You should have received a copy of the GNU General Public License
20 1.1 mrg along with GCC; see the file COPYING3. If not see
21 1.1 mrg <http://www.gnu.org/licenses/>. */
22 1.1 mrg
23 1.1 mrg #ifndef GCC_H8300_PROTOS_H
24 1.1 mrg #define GCC_H8300_PROTOS_H
25 1.1 mrg
26 1.12 mrg /* Declarations for functions used in insn-output.cc. */
27 1.1 mrg #ifdef RTX_CODE
28 1.1 mrg extern unsigned int compute_mov_length (rtx *);
29 1.12 mrg extern const char *output_plussi (rtx *, bool);
30 1.12 mrg extern unsigned int compute_plussi_length (rtx *, bool);
31 1.12 mrg extern const char *output_a_shift (rtx[4], rtx_code);
32 1.12 mrg extern unsigned int compute_a_shift_length (rtx[4], rtx_code);
33 1.1 mrg extern const char *output_a_rotate (enum rtx_code, rtx *);
34 1.1 mrg extern unsigned int compute_a_rotate_length (rtx *);
35 1.1 mrg extern const char *output_simode_bld (int, rtx[]);
36 1.5 mrg extern void final_prescan_insn (rtx_insn *, rtx *, int);
37 1.1 mrg extern int h8300_expand_movsi (rtx[]);
38 1.12 mrg extern machine_mode h8300_select_cc_mode (RTX_CODE, rtx, rtx);
39 1.12 mrg extern const char *output_logical_op (machine_mode, rtx_code code,
40 1.12 mrg rtx *, rtx_insn *);
41 1.12 mrg extern unsigned int compute_logical_op_length (machine_mode, rtx_code,
42 1.12 mrg rtx *, rtx_insn *);
43 1.12 mrg
44 1.12 mrg extern int compute_a_shift_cc (rtx *, rtx_code);
45 1.3 mrg #ifdef HAVE_ATTR_cc
46 1.3 mrg extern enum attr_cc compute_plussi_cc (rtx *);
47 1.3 mrg #endif
48 1.1 mrg extern void h8300_expand_store (rtx[]);
49 1.5 mrg extern bool expand_a_shift (machine_mode, enum rtx_code, rtx[]);
50 1.12 mrg extern int h8300_shift_needs_scratch_p (int, machine_mode, rtx_code);
51 1.1 mrg extern int expand_a_rotate (rtx[]);
52 1.1 mrg extern int fix_bit_operand (rtx *, enum rtx_code);
53 1.1 mrg extern int h8300_adjust_insn_length (rtx, int);
54 1.5 mrg extern void split_adds_subs (machine_mode, rtx[]);
55 1.1 mrg
56 1.1 mrg extern int h8300_eightbit_constant_address_p (rtx);
57 1.1 mrg extern int h8300_tiny_constant_address_p (rtx);
58 1.1 mrg extern int byte_accesses_mergeable_p (rtx, rtx);
59 1.8 mrg extern int same_cmp_preceding_p (rtx_insn *);
60 1.8 mrg extern int same_cmp_following_p (rtx_insn *);
61 1.1 mrg
62 1.12 mrg /* Used in builtins.cc */
63 1.1 mrg extern rtx h8300_return_addr_rtx (int, rtx);
64 1.1 mrg
65 1.1 mrg /* Classifies an h8sx shift operation.
66 1.1 mrg
67 1.1 mrg H8SX_SHIFT_NONE
68 1.1 mrg The shift cannot be done in a single instruction.
69 1.1 mrg
70 1.1 mrg H8SX_SHIFT_UNARY
71 1.1 mrg The shift is effectively a unary operation. The instruction will
72 1.1 mrg allow any sort of destination operand and have a format similar
73 1.1 mrg to neg and not. This is true of certain power-of-2 shifts.
74 1.1 mrg
75 1.1 mrg H8SX_SHIFT_BINARY
76 1.1 mrg The shift is a binary operation. The destination must be a
77 1.1 mrg register and the source can be a register or a constant. */
78 1.1 mrg enum h8sx_shift_type {
79 1.1 mrg H8SX_SHIFT_NONE,
80 1.1 mrg H8SX_SHIFT_UNARY,
81 1.1 mrg H8SX_SHIFT_BINARY
82 1.1 mrg };
83 1.1 mrg
84 1.5 mrg extern enum h8sx_shift_type h8sx_classify_shift (machine_mode, enum rtx_code, rtx);
85 1.1 mrg extern int h8300_ldm_stm_parallel (rtvec, int, int);
86 1.1 mrg #endif /* RTX_CODE */
87 1.1 mrg
88 1.1 mrg #ifdef TREE_CODE
89 1.1 mrg extern int h8300_funcvec_function_p (tree);
90 1.1 mrg extern int h8300_eightbit_data_p (tree);
91 1.1 mrg extern int h8300_tiny_data_p (tree);
92 1.1 mrg #endif /* TREE_CODE */
93 1.1 mrg
94 1.1 mrg extern int h8300_can_use_return_insn_p (void);
95 1.1 mrg extern void h8300_expand_prologue (void);
96 1.12 mrg extern void h8300_expand_epilogue (bool);
97 1.1 mrg extern int h8300_current_function_interrupt_function_p (void);
98 1.3 mrg extern int h8300_current_function_monitor_function_p (void);
99 1.1 mrg extern int h8300_initial_elimination_offset (int, int);
100 1.1 mrg extern int h8300_regs_ok_for_stm (int, rtx[]);
101 1.1 mrg extern int h8300_hard_regno_rename_ok (unsigned int, unsigned int);
102 1.3 mrg extern bool h8300_move_ok (rtx, rtx);
103 1.1 mrg
104 1.1 mrg struct cpp_reader;
105 1.1 mrg extern void h8300_pr_interrupt (struct cpp_reader *);
106 1.1 mrg extern void h8300_pr_saveall (struct cpp_reader *);
107 1.1 mrg extern enum reg_class h8300_reg_class_from_letter (int);
108 1.5 mrg extern unsigned int h8300_insn_length_from_table (rtx_insn *, rtx *);
109 1.1 mrg extern const char * output_h8sx_shift (rtx *, int, int);
110 1.1 mrg extern bool h8300_operands_match_p (rtx *);
111 1.1 mrg extern bool h8sx_mergeable_memrefs_p (rtx, rtx);
112 1.9 mrg extern poly_int64 h8300_push_rounding (poly_int64);
113 1.1 mrg
114 1.1 mrg #endif /* ! GCC_H8300_PROTOS_H */
115