c4x-protos.h: New file.

* config/c4x/c4x-protos.h: New file.  Prototypes for functions defined
	in c4x.c.
	* config/c4x/c4x.h: Moved prototypes to c4x.h.
	* config/c4x/c4x.c (c4x_preferred_reload_class, c4x_limit_reload_class,
	c4x_secondary_memory_needed) Delete.
	(fp_zero_operand): Add mode argument.

From-SVN: r30463
This commit is contained in:
Michael Hayes 1999-11-09 22:56:56 +00:00 committed by Michael Hayes
parent 8226320b92
commit 798f6e6f19
4 changed files with 289 additions and 250 deletions

View File

@ -1,3 +1,12 @@
Wed Nov 10 11:47:54 1999 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
* config/c4x/c4x-protos.h: New file. Prototypes for functions defined
in c4x.c.
* config/c4x/c4x.h: Moved prototypes to c4x.h.
* config/c4x/c4x.c (c4x_preferred_reload_class, c4x_limit_reload_class,
c4x_secondary_memory_needed) Delete.
(fp_zero_operand): Add mode argument.
Thu Nov 4 15:52:35 1999 Andrew Haley <aph@cygnus.com>
* reload1.c (reload_reg_free_for_value_p): Don't use a register

253
gcc/config/c4x/c4x-protos.h Normal file
View File

@ -0,0 +1,253 @@
/* Definitions of target machine for GNU compiler. TMS320C[34]x
Copyright (C) 1994-98, 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. */
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 void c4x_function_prologue PARAMS ((FILE *, int));
extern void c4x_function_epilogue PARAMS ((FILE *, int));
extern int c4x_null_epilogue_p PARAMS ((void));
extern int c4x_handle_pragma PARAMS ((int (* p_getc) (void),
void (* p_ungetc) (int),
char *));
#ifdef TREE_CODE
extern void c4x_set_default_attributes PARAMS ((tree, tree *));
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));
#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));
#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 struct rtx_def *c4x_legitimize_address PARAMS ((rtx,
enum machine_mode));
extern struct rtx_def *c4x_legitimize_reload_address PARAMS ((rtx, enum machine_mode, rtx));
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 ((char *, rtx));
extern int c4x_label_conflict PARAMS ((rtx, rtx, rtx));
extern int c4x_address_conflict PARAMS ((rtx, rtx, int, int));
extern int c4x_adjust_cost PARAMS ((rtx, rtx, rtx, int));
extern void c4x_process_after_reload PARAMS ((rtx));
extern int c4x_rptb_nop_p PARAMS ((rtx));
extern int c4x_rptb_rpts_p PARAMS ((rtx, rtx));
extern int c4x_autoinc_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 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 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 ((const char *, enum rtx_code,
enum machine_mode,
enum machine_mode, int, rtx *));
extern void c4x_emit_libcall3 PARAMS ((const char *, enum rtx_code,
enum machine_mode, rtx *));
extern void c4x_emit_libcall_mulhi PARAMS ((char *, 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));
#endif /* RTX_CODE */

View File

@ -44,6 +44,7 @@
#include "recog.h"
#include "c-tree.h"
#include "ggc.h"
#include "c4x-protos.h"
static int c4x_leaf_function;
@ -192,7 +193,14 @@ c4x_override_options ()
/* -mcpu=xx overrides -m40 etc. */
if (c4x_cpu_version_string)
c4x_cpu_version = atoi (c4x_cpu_version_string);
{
const char *p = c4x_cpu_version_string;
/* Also allow -mcpu=c30 etc. */
if (*p == 'c' || *p == 'C')
p++;
c4x_cpu_version = atoi (p);
}
target_flags &= ~(C30_FLAG | C31_FLAG | C32_FLAG | C40_FLAG | C44_FLAG);
@ -251,7 +259,7 @@ c4x_optimization_options (level, size)
void
c4x_output_ascii (stream, ptr, len)
FILE *stream;
unsigned char *ptr;
const char *ptr;
int len;
{
char sbuf[C4X_ASCII_LIMIT + 1];
@ -1197,7 +1205,7 @@ c4x_emit_move_sequence (operands, mode)
void
c4x_emit_libcall (name, code, dmode, smode, noperands, operands)
char *name;
const char *name;
enum rtx_code code;
enum machine_mode dmode;
enum machine_mode smode;
@ -1276,34 +1284,6 @@ c4x_emit_libcall_mulhi (name, code, mode, operands)
}
enum reg_class
c4x_preferred_reload_class (x, class)
rtx x ATTRIBUTE_UNUSED;
enum reg_class class;
{
return class;
}
enum reg_class
c4x_limit_reload_class (mode, class)
enum machine_mode mode ATTRIBUTE_UNUSED;
enum reg_class class;
{
return class;
}
enum reg_class
c4x_secondary_memory_needed (class1, class2, mode)
enum reg_class class1 ATTRIBUTE_UNUSED;
enum reg_class class2 ATTRIBUTE_UNUSED;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
return 0;
}
/* Set the SYMBOL_REF_FLAG for a function decl. However, wo do not
yet use this info. */
void
@ -1590,7 +1570,7 @@ c4x_legitimize_reload_address (orig, mode, insn)
int
c4x_address_cost (addr)
rtx addr;
rtx addr;
{
switch (GET_CODE (addr))
{
@ -1657,6 +1637,11 @@ rtx addr;
return 2;
case CONST_INT:
/* The following tries to improve GIV combination
in strength reduce but appears not to help. */
if (TARGET_DEVEL && IS_UINT5_CONST (INTVAL (op1)))
return 1;
if (IS_DISP1_CONST (INTVAL (op1)))
return 1;
@ -2722,8 +2707,9 @@ any_operand (op, mode)
/* Nonzero if OP is a floating point value with value 0.0. */
int
fp_zero_operand (op)
fp_zero_operand (op, mode)
rtx op;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
REAL_VALUE_TYPE r;
@ -4211,7 +4197,7 @@ c4x_operand_subword (op, i, validate_address, mode)
int
c4x_handle_pragma (p_getc, p_ungetc, pname)
int (* p_getc) PROTO ((void));
int (* p_getc) PROTO ((void));
void (* p_ungetc) PROTO ((int)) ATTRIBUTE_UNUSED;
char *pname;
{

View File

@ -21,10 +21,6 @@
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* Set the following so that some of the macros expand to function
calls to simplify debugging. */
#define C4X_DEBUG 1
/* RUN-TIME TARGET SPECIFICATION */
#define C4x 1
@ -236,8 +232,8 @@
extern int target_flags;
#define TARGET_INLINE 1 /* Inline MPYI */
#define TARGET_PARALLEL 1 /* Enable parallel insns in MD */
#define TARGET_INLINE 1 /* Inline MPYI. */
#define TARGET_PARALLEL 1 /* Enable parallel insns in MD. */
#define TARGET_SMALL_REG_CLASS 0
#define TARGET_SMALL (target_flags & SMALL_MEMORY_FLAG)
@ -316,11 +312,10 @@ extern const char *c4x_rpts_cycles_string, *c4x_cpu_version_string;
defined, is executed once just after all the command options have
been parsed. */
extern void c4x_override_options ();
#define OVERRIDE_OPTIONS c4x_override_options ()
/* Define this to change the optimizations performed by default. */
extern void c4x_optimization_options ();
#define OPTIMIZATION_OPTIONS(LEVEL,SIZE) c4x_optimization_options(LEVEL,SIZE)
/* Run Time Target Specification */
@ -814,15 +809,11 @@ enum reg_class
#define REGNO_OK_FOR_INDEX_P(REGNO) \
(IS_INDEX_REG(REGNO) || IS_INDEX_REG((unsigned)reg_renumber[REGNO]))
extern enum reg_class c4x_preferred_reload_class ();
#define PREFERRED_RELOAD_CLASS(X, CLASS) c4x_preferred_reload_class(X, CLASS)
#define PREFERRED_RELOAD_CLASS(X, CLASS) (CLASS)
extern enum reg_class c4x_limit_reload_class ();
#define LIMIT_RELOAD_CLASS(X, CLASS) c4x_limit_reload_class(X, CLASS)
#define LIMIT_RELOAD_CLASS(X, CLASS) (CLASS)
extern enum reg_class c4x_secondary_memory_needed ();
#define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE) \
c4x_secondary_memory_needed(CLASS1, CLASS2, MODE)
#define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE) 0
#define CLASS_MAX_NREGS(CLASS, MODE) \
(((MODE) == CCmode || (MODE) == CC_NOOVmode) ? 1 : ((MODE) == HFmode) ? 1 : \
@ -866,7 +857,7 @@ c4x_secondary_memory_needed(CLASS1, CLASS2, MODE)
: 0 )
#define CONST_DOUBLE_OK_FOR_LETTER_P(OP, C) \
( ((C) == 'G') ? (fp_zero_operand (OP)) \
( ((C) == 'G') ? (fp_zero_operand (OP, QFmode)) \
: ((C) == 'H') ? (c4x_H_constant (OP)) \
: 0 )
@ -1070,18 +1061,12 @@ typedef struct c4x_args
}
CUMULATIVE_ARGS;
extern void c4x_init_cumulative_args();
#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) \
(c4x_init_cumulative_args (&CUM, FNTYPE, LIBNAME))
extern void c4x_function_arg_advance();
#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
(c4x_function_arg_advance (&CUM, MODE, TYPE, NAMED))
extern struct rtx_def *c4x_function_arg();
#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
(c4x_function_arg(&CUM, MODE, TYPE, NAMED))
@ -1127,11 +1112,9 @@ extern struct rtx_def *c4x_function_arg();
/* Varargs handling. */
extern void c4x_va_start ();
#define EXPAND_BUILTIN_VA_START(stdarg, valist, nextarg) \
c4x_va_start (stdarg, valist, nextarg)
extern struct rtx_def *c4x_va_arg ();
#define EXPAND_BUILTIN_VA_ARG(valist, type) \
c4x_va_arg (valist, type)
@ -1553,8 +1536,6 @@ extern struct rtx_def *c4x_va_arg ();
|| GET_MODE (Y) == ABS) \
? CC_NOOVmode : CCmode)
extern struct rtx_def *c4x_gen_compare_reg ();
/* Addressing Modes */
#define HAVE_POST_INCREMENT 1
@ -1593,8 +1574,6 @@ extern struct rtx_def *c4x_gen_compare_reg ();
After reload, it makes no difference, since pseudo regs have
been eliminated by then. */
extern int c4x_check_legit_addr ();
#ifndef REG_OK_STRICT
/* Nonzero if X is a hard or pseudo reg that can be used as an base. */
@ -1629,7 +1608,6 @@ extern int c4x_check_legit_addr ();
#endif
extern struct rtx_def *c4x_legitimize_address ();
#define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) \
{ \
rtx new; \
@ -1641,7 +1619,6 @@ extern struct rtx_def *c4x_legitimize_address ();
} \
}
extern struct rtx_def *c4x_legitimize_reload_address ();
#define LEGITIMIZE_RELOAD_ADDRESS(X,MODE,OPNUM,TYPE,IND_LEVELS,WIN) \
{ \
rtx new; \
@ -1708,7 +1685,6 @@ extern struct rtx_def *c4x_legitimize_reload_address ();
On the C4x we use this to indicate if a symbol is in text or
data space. */
extern void c4x_encode_section_info ();
#define ENCODE_SECTION_INFO(DECL) c4x_encode_section_info (DECL);
/* Descripting Relative Cost of Operations */
@ -1811,8 +1787,6 @@ extern void c4x_encode_section_info ();
for valid addresses. We handle the most common address without
a call to c4x_address_cost. */
extern int c4x_address_cost ();
#define ADDRESS_COST(ADDR) (REG_P (ADDR) ? 1 : c4x_address_cost (ADDR))
#define CANONICALIZE_COMPARISON(CODE, OP0, OP1) \
@ -2130,7 +2104,6 @@ dtors_section () \
#define ASM_OUTPUT_BYTE(FILE, VALUE) \
fprintf (FILE, "\t.word\t0%xh\n", (VALUE))
extern void c4x_output_ascii ();
#define ASM_OUTPUT_ASCII(FILE, PTR, LEN) c4x_output_ascii (FILE, PTR, LEN)
#define ASM_OPEN_PAREN "("
@ -2286,8 +2259,6 @@ asm_fprintf (FILE, "%s%d:\n", PREFIX, NUM)
"iif", "rs", "re", "rc", "f8", "f9", "f10", "f11" \
}
extern void c4x_print_operand ();
#define PRINT_OPERAND(FILE, X, CODE) c4x_print_operand(FILE, X, CODE)
/* Determine which codes are valid without a following integer. These must
@ -2295,7 +2266,6 @@ extern void c4x_print_operand ();
#define PRINT_OPERAND_PUNCT_VALID_P(CODE) ((CODE) == '#')
extern void c4x_print_operand_address ();
#define PRINT_OPERAND_ADDRESS(FILE, X) c4x_print_operand_address(FILE, X)
/* Define this macro if you want to implement any pragmas. If defined, it
@ -2304,15 +2274,12 @@ extern void c4x_print_operand_address ();
text can be read. CH is the first character after the #pragma. The
result of the expression is the terminating character found
(newline or EOF). */
extern int c4x_handle_pragma ();
#define HANDLE_PRAGMA(GETC, UNGETC, NAME) \
c4x_handle_pragma (GETC, UNGETC, NAME)
extern void c4x_set_default_attributes ();
#define SET_DEFAULT_DECL_ATTRIBUTES(DECL, ATTRIBUTES) \
c4x_set_default_attributes (DECL, &ATTRIBUTES)
extern int c4x_valid_type_attribute_p ();
#define VALID_MACHINE_TYPE_ATTRIBUTE(TYPE, ATTRIBUTES, NAME, ARGS) \
(c4x_valid_type_attribute_p (TYPE, ATTRIBUTES, NAME, ARGS))
@ -2619,179 +2586,3 @@ extern struct rtx_def *c4x_compare_op1; /* operand 1 for comparisons */
extern int c4x_rpts_cycles; /* max cycles for RPTS */
extern int c4x_cpu_version; /* cpu version C30/31/32/40/44 */
/* Functions in c4x.c */
extern void c4x_function_prologue ();
extern void c4x_function_epilogue ();
extern struct rtx_def *c4x_operand_subword ();
extern struct rtx_def *c4x_adj_offsettable_operand ();
extern char *c4x_output_cbranch ();
extern int c4x_null_epilogue_p ();
extern int c4x_autoinc_operand ();
extern int c4x_label_conflict ();
extern int c4x_address_conflict ();
extern int c4x_adjust_cost ();
extern void c4x_process_after_reload ();
extern void c4x_combine_parallel ();
extern int c4x_rptb_nop_p ();
extern int c4x_rptb_rpts_p ();
extern int fp_zero_operand ();
extern int const_operand ();
extern int stik_const_operand ();
extern int not_const_operand ();
extern int parallel_operand ();
extern int reg_or_const_operand ();
extern int reg_operand ();
extern int mixed_subreg_operand ();
extern int reg_imm_operand ();
extern int r0r1_reg_operand ();
extern int r2r3_reg_operand ();
extern int ext_low_reg_operand ();
extern int ext_reg_operand ();
extern int std_reg_operand ();
extern int dst_operand ();
extern int src_operand ();
extern int src_hi_operand ();
extern int lsrc_operand ();
extern int tsrc_operand ();
extern int addr_reg_operand ();
extern int index_reg_operand ();
extern int dp_reg_operand ();
extern int sp_reg_operand ();
extern int rc_reg_operand ();
extern int st_reg_operand ();
extern int symbolic_address_operand ();
extern int ar0_reg_operand ();
extern int ar0_mem_operand ();
extern int ar1_reg_operand ();
extern int ar1_mem_operand ();
extern int ar2_reg_operand ();
extern int ar2_mem_operand ();
extern int ar3_reg_operand ();
extern int ar3_mem_operand ();
extern int ar4_reg_operand ();
extern int ar4_mem_operand ();
extern int ar5_reg_operand ();
extern int ar5_mem_operand ();
extern int ar6_reg_operand ();
extern int ar6_mem_operand ();
extern int ar7_reg_operand ();
extern int ar7_mem_operand ();
extern int ir0_reg_operand ();
extern int ir0_mem_operand ();
extern int ir1_reg_operand ();
extern int ir1_mem_operand ();
extern int group1_reg_operand ();
extern int group1_mem_operand ();
extern int arx_reg_operand ();
extern int call_address_operand ();
extern int par_ind_operand ();
extern int not_rc_reg ();
extern int not_modify_reg ();
extern int c4x_shiftable_constant ();
extern int c4x_H_constant ();
extern int c4x_I_constant ();
extern int c4x_J_constant ();
extern int c4x_L_constant ();
extern int c4x_Q_constraint ();
extern int c4x_R_constraint ();
extern int c4x_S_constraint ();
extern int c4x_T_constraint ();
extern int c4x_U_constraint ();
extern void c4x_emit_libcall ();
extern void c4x_emit_libcall3 ();
extern void c4x_emit_libcall_mulhi ();
extern int c4x_emit_move_sequence ();
extern int legitimize_operands ();
extern int valid_operands ();
extern int valid_parallel_load_store ();
extern int valid_parallel_operands_4 ();
extern int valid_parallel_operands_5 ();
extern int valid_parallel_operands_6 ();