/* Definitions of target machine for GNU compiler.  TMS320C[34]x
   Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999
   Free Software Foundation, Inc.

   Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz)
              and Herman Ten Brugge (Haj.Ten.Brugge@net.HCC.nl).

   This file is part of GNU CC.

   GNU CC is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2, or (at your option)
   any later version.

   GNU CC is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with GNU CC; see the file COPYING.  If not, write to
   the Free Software Foundation, 59 Temple Place - Suite 330,
   Boston, MA 02111-1307, USA.  */

#ifndef GCC_C4X_PROTOS_H
#define GCC_C4X_PROTOS_H

extern void c4x_override_options PARAMS ((void));

extern void c4x_optimization_options PARAMS ((int, int));

extern void c4x_output_ascii PARAMS ((FILE *, const char *, int));

extern int c4x_interrupt_function_p PARAMS ((void));

extern void c4x_expand_prologue PARAMS ((void));

extern void c4x_expand_epilogue PARAMS ((void));

extern int c4x_null_epilogue_p PARAMS ((void));

extern void c4x_global_label (const char *);

extern void c4x_external_ref (const char *);

extern void c4x_file_end (FILE *);

#ifdef TREE_CODE
extern void c4x_function_arg_advance PARAMS ((CUMULATIVE_ARGS *, 
					      enum machine_mode, tree, int));

extern struct rtx_def *c4x_function_arg PARAMS ((CUMULATIVE_ARGS *,
						 enum machine_mode, tree,
						 int));

extern void c4x_encode_section_info PARAMS ((tree, int));

#endif /* TREE_CODE */


#if defined(RTX_CODE) && defined(TREE_CODE)
extern void c4x_init_cumulative_args PARAMS ((CUMULATIVE_ARGS *c, tree, rtx));

extern void c4x_va_start PARAMS ((int, tree, rtx));

extern struct rtx_def *c4x_va_arg PARAMS ((tree, tree));

extern rtx c4x_expand_builtin PARAMS ((tree, rtx, rtx,
				       enum machine_mode, int));

extern void c4x_init_builtins PARAMS ((void));

#endif /* TREE_CODE and RTX_CODE*/


#ifdef RTX_CODE
extern struct rtx_def *c4x_gen_compare_reg PARAMS ((enum rtx_code, rtx, rtx));

extern int c4x_check_legit_addr PARAMS ((enum machine_mode, rtx, int));

extern int c4x_hard_regno_mode_ok PARAMS ((unsigned int, enum machine_mode));

extern int c4x_hard_regno_rename_ok PARAMS ((unsigned int, unsigned int));

extern struct rtx_def *c4x_legitimize_address PARAMS ((rtx,
						       enum machine_mode));

extern int c4x_address_cost PARAMS ((rtx));

extern void c4x_print_operand PARAMS ((FILE *, rtx, int));

extern void c4x_print_operand_address PARAMS ((FILE *, rtx));

extern enum reg_class c4x_preferred_reload_class PARAMS ((rtx,
							  enum reg_class));

extern struct rtx_def *c4x_operand_subword PARAMS ((rtx, int, int,
						   enum machine_mode));

extern char *c4x_output_cbranch PARAMS ((const char *, rtx));

extern int c4x_label_conflict PARAMS ((rtx, rtx, rtx));

extern int c4x_address_conflict PARAMS ((rtx, rtx, int, int));

extern void c4x_process_after_reload PARAMS ((rtx));

extern void c4x_rptb_insert PARAMS ((rtx insn));

extern int c4x_rptb_nop_p PARAMS ((rtx));

extern int c4x_rptb_rpts_p PARAMS ((rtx, rtx));

extern int c4x_check_laj_p PARAMS ((rtx));

extern int c4x_autoinc_operand PARAMS ((rtx, enum machine_mode));

extern int any_operand PARAMS ((rtx, enum machine_mode));

extern int fp_zero_operand PARAMS ((rtx, enum machine_mode));

extern int const_operand PARAMS ((rtx, enum machine_mode));

extern int stik_const_operand PARAMS ((rtx, enum machine_mode));

extern int not_const_operand PARAMS ((rtx, enum machine_mode));

extern int parallel_operand PARAMS ((rtx, enum machine_mode));

extern int reg_or_const_operand PARAMS ((rtx, enum machine_mode));

extern int reg_operand PARAMS ((rtx, enum machine_mode));

extern int mixed_subreg_operand PARAMS ((rtx, enum machine_mode));

extern int reg_imm_operand PARAMS ((rtx, enum machine_mode));

extern int r0r1_reg_operand PARAMS ((rtx, enum machine_mode));

extern int r2r3_reg_operand PARAMS ((rtx, enum machine_mode));

extern int ext_low_reg_operand PARAMS ((rtx, enum machine_mode));

extern int ext_reg_operand PARAMS ((rtx, enum machine_mode));

extern int std_reg_operand PARAMS ((rtx, enum machine_mode));

extern int std_or_reg_operand PARAMS ((rtx, enum machine_mode));

extern int dst_operand PARAMS ((rtx, enum machine_mode));

extern int src_operand PARAMS ((rtx, enum machine_mode));

extern int src_hi_operand PARAMS ((rtx, enum machine_mode));

extern int lsrc_operand PARAMS ((rtx, enum machine_mode));

extern int tsrc_operand PARAMS ((rtx, enum machine_mode));

extern int nonimmediate_src_operand PARAMS ((rtx, enum machine_mode));

extern int nonimmediate_lsrc_operand PARAMS ((rtx, enum machine_mode));

extern int addr_reg_operand PARAMS ((rtx, enum machine_mode));

extern int index_reg_operand PARAMS ((rtx, enum machine_mode));

extern int dp_reg_operand PARAMS ((rtx, enum machine_mode));

extern int sp_reg_operand PARAMS ((rtx, enum machine_mode));

extern int rc_reg_operand PARAMS ((rtx, enum machine_mode));

extern int st_reg_operand PARAMS ((rtx, enum machine_mode));

extern int symbolic_address_operand PARAMS ((rtx, enum machine_mode));

extern int ar0_reg_operand PARAMS ((rtx, enum machine_mode));

extern int ar0_mem_operand PARAMS ((rtx, enum machine_mode));

extern int ar1_reg_operand PARAMS ((rtx, enum machine_mode));

extern int ar1_mem_operand PARAMS ((rtx, enum machine_mode));

extern int ar2_reg_operand PARAMS ((rtx, enum machine_mode));

extern int ar2_mem_operand PARAMS ((rtx, enum machine_mode));

extern int ar3_reg_operand PARAMS ((rtx, enum machine_mode));

extern int ar3_mem_operand PARAMS ((rtx, enum machine_mode));

extern int ar4_reg_operand PARAMS ((rtx, enum machine_mode));

extern int ar4_mem_operand PARAMS ((rtx, enum machine_mode));

extern int ar5_reg_operand PARAMS ((rtx, enum machine_mode));

extern int ar5_mem_operand PARAMS ((rtx, enum machine_mode));

extern int ar6_reg_operand PARAMS ((rtx, enum machine_mode));

extern int ar6_mem_operand PARAMS ((rtx, enum machine_mode));

extern int ar7_reg_operand PARAMS ((rtx, enum machine_mode));

extern int ar7_mem_operand PARAMS ((rtx, enum machine_mode));

extern int ir0_reg_operand PARAMS ((rtx, enum machine_mode));

extern int ir0_mem_operand PARAMS ((rtx, enum machine_mode));

extern int ir1_reg_operand PARAMS ((rtx, enum machine_mode));

extern int ir1_mem_operand PARAMS ((rtx, enum machine_mode));

extern int group1_reg_operand PARAMS ((rtx, enum machine_mode));

extern int group1_mem_operand PARAMS ((rtx, enum machine_mode));

extern int arx_reg_operand PARAMS ((rtx, enum machine_mode));

extern int call_address_operand PARAMS ((rtx, enum machine_mode));

extern int par_ind_operand PARAMS ((rtx, enum machine_mode));

extern int not_rc_reg PARAMS ((rtx, enum machine_mode));

extern int not_modify_reg PARAMS ((rtx, enum machine_mode));

extern int c4x_shiftable_constant PARAMS ((rtx));

extern int c4x_H_constant PARAMS ((rtx));

extern int c4x_I_constant PARAMS ((rtx));

extern int c4x_J_constant PARAMS ((rtx));

extern int c4x_L_constant PARAMS ((rtx));

extern int c4x_Q_constraint PARAMS ((rtx));

extern int c4x_R_constraint PARAMS ((rtx));

extern int c4x_S_constraint PARAMS ((rtx));

extern int c4x_T_constraint PARAMS ((rtx));

extern int c4x_U_constraint PARAMS ((rtx));

extern void c4x_emit_libcall PARAMS ((rtx, enum rtx_code,
				      enum machine_mode,
				      enum machine_mode, int, rtx *));

extern void c4x_emit_libcall3 PARAMS ((rtx, enum rtx_code, 
				       enum machine_mode, rtx *));

extern void c4x_emit_libcall_mulhi PARAMS ((rtx, enum rtx_code,
					    enum machine_mode, rtx *));

extern int c4x_emit_move_sequence PARAMS ((rtx *, enum machine_mode));

extern int legitimize_operands PARAMS ((enum rtx_code, rtx *, 
					enum machine_mode));

extern int valid_operands PARAMS ((enum rtx_code, rtx *, enum machine_mode));

extern int valid_parallel_load_store PARAMS ((rtx *, enum machine_mode));

extern int valid_parallel_operands_4 PARAMS ((rtx *, enum machine_mode));

extern int valid_parallel_operands_5 PARAMS ((rtx *, enum machine_mode));

extern int valid_parallel_operands_6 PARAMS ((rtx *, enum machine_mode));

extern rtx smulhi3_libfunc;
extern rtx umulhi3_libfunc;
extern rtx fix_truncqfhi2_libfunc;
extern rtx fixuns_truncqfhi2_libfunc;
extern rtx fix_trunchfhi2_libfunc;
extern rtx fixuns_trunchfhi2_libfunc;
extern rtx floathiqf2_libfunc;
extern rtx floatunshiqf2_libfunc;
extern rtx floathihf2_libfunc;
extern rtx floatunshihf2_libfunc;

extern struct rtx_def *c4x_compare_op0;	/* Operand 0 for comparisons.  */
extern struct rtx_def *c4x_compare_op1;	/* Operand 1 for comparisons.  */

#endif /* RTX_CODE */

/* Smallest class containing REGNO.  */
extern enum reg_class c4x_regclass_map[FIRST_PSEUDO_REGISTER];
extern enum machine_mode c4x_caller_save_map[FIRST_PSEUDO_REGISTER];

extern int c4x_rpts_cycles;	        /* Max cycles for RPTS.  */
extern int c4x_cpu_version;		/* Cpu version C30/31/32/40/44.  */

#ifdef GCC_C_PRAGMA_H
extern void c4x_pr_CODE_SECTION		PARAMS ((cpp_reader *));
extern void c4x_pr_DATA_SECTION		PARAMS ((cpp_reader *));
extern void c4x_pr_FUNC_IS_PURE		PARAMS ((cpp_reader *));
extern void c4x_pr_FUNC_NEVER_RETURNS	PARAMS ((cpp_reader *));
extern void c4x_pr_INTERRUPT		PARAMS ((cpp_reader *));
extern void c4x_pr_ignored		PARAMS ((cpp_reader *));
extern void c4x_init_pragma		PARAMS ((int (*) (tree *)));
extern tree code_tree, data_tree, pure_tree, noreturn_tree, interrupt_tree;
#endif

#endif /* ! GCC_C4X_PROTOS_H */
