Home | History | Annotate | Line # | Download | only in h8300
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