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