#include "function.h"
#include "obstack.h"
#include "toplev.h"
+#include "v850-protos.h"
#ifndef streq
#define streq(a,b) (strcmp (a, b) == 0)
#endif
-/* Function prototypes that cannot exist in v850.h due to dependency
- compilcations. */
-extern rtx function_arg
- PROTO ((CUMULATIVE_ARGS *, enum machine_mode, tree, int));
-extern int function_arg_partial_nregs
- PROTO ((CUMULATIVE_ARGS *, enum machine_mode, tree, int));
-extern void asm_file_start PROTO ((FILE *));
-extern void print_operand PROTO ((FILE *, rtx, int ));
-extern void print_operand_address PROTO ((FILE *, rtx));
-extern void v850_output_aligned_bss
- PROTO ((FILE *, tree, char *, int, int));
-extern void v850_output_common
- PROTO ((FILE *, tree, char *, int, int));
-extern void v850_output_local
- PROTO ((FILE *, tree, char *, int, int));
-extern int const_costs PROTO ((rtx, enum rtx_code));
-extern char * output_move_double PROTO ((rtx *));
-extern char * output_move_single PROTO ((rtx *));
-extern int ep_memory_operand
- PROTO ((rtx, enum machine_mode, int));
-extern int reg_or_0_operand PROTO ((rtx, enum machine_mode));
-extern int reg_or_int5_operand PROTO ((rtx, enum machine_mode));
-extern int call_address_operand PROTO ((rtx, enum machine_mode));
-extern int movsi_source_operand PROTO ((rtx, enum machine_mode));
-extern int power_of_two_operand PROTO ((rtx, enum machine_mode));
-extern int not_power_of_two_operand PROTO ((rtx, enum machine_mode));
-extern int special_symbolref_operand PROTO ((rtx, enum machine_mode));
-extern void v850_reorg PROTO ((rtx));
-extern void notice_update_cc PROTO ((rtx, rtx));
-extern int v850_valid_machine_decl_attribute
- PROTO ((tree, tree, tree));
-extern int v850_interrupt_function_p PROTO ((tree));
-extern int pattern_is_ok_for_prologue PROTO ((rtx, enum machine_mode));
-extern int pattern_is_ok_for_epilogue PROTO ((rtx, enum machine_mode));
-extern int register_is_ok_for_epilogue PROTO ((rtx, enum machine_mode));
-extern char * construct_save_jarl PROTO ((rtx));
-extern char * construct_restore_jr PROTO ((rtx));
-extern void v850_encode_data_area PROTO ((tree));
-extern void v850_set_default_decl_attr PROTO ((tree));
-
/* Function prototypes for stupid compilers: */
static void const_double_split
PROTO ((rtx, HOST_WIDE_INT *, HOST_WIDE_INT *));
/* Save/setup global registers for interrupt functions right now */
if (interrupt_handler)
{
- emit_insn (gen_save_interrupt ());
+ emit_insn (gen_save_interrupt ());
actual_fsize -= INTERRUPT_FIXED_SAVE_SIZE;
v850_va_arg (valist, type)
tree valist, type;
{
- HOST_WIDE_INT size, rsize, align;
+ HOST_WIDE_INT size, rsize;
tree addr, incr;
rtx addr_rtx;
int indirect;
If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2,
for any hard reg, then this must be 0 for correct output. */
#define MODES_TIEABLE_P(MODE1, MODE2) \
- (MODE1 == MODE2 || GET_MODE_SIZE (MODE1) <= 4 && GET_MODE_SIZE (MODE2) <= 4)
+ (MODE1 == MODE2 || (GET_MODE_SIZE (MODE1) <= 4 && GET_MODE_SIZE (MODE2) <= 4))
\f
/* Define the classes of registers for register constraints in the
This is an initializer for a vector of HARD_REG_SET
of length N_REG_CLASSES. */
-#define REG_CLASS_CONTENTS \
-{ 0x00000000, /* No regs */ \
- 0xffffffff, /* GENERAL_REGS */ \
- 0xffffffff, /* ALL_REGS */ \
+#define REG_CLASS_CONTENTS \
+{ \
+ { 0x00000000 }, /* NO_REGS */ \
+ { 0xffffffff }, /* GENERAL_REGS */ \
+ { 0xffffffff }, /* ALL_REGS */ \
}
/* The same information, inverted:
register class that does not include r0 on the output. */
#define EXTRA_CONSTRAINT(OP, C) \
- ((C) == 'Q' ? ep_memory_operand (OP, GET_MODE (OP)) \
+ ((C) == 'Q' ? ep_memory_operand (OP, GET_MODE (OP), 0) \
: (C) == 'R' ? special_symbolref_operand (OP, VOIDmode) \
: (C) == 'S' ? (GET_CODE (OP) == SYMBOL_REF && ! ZDA_NAME_P (XSTR (OP, 0))) \
: (C) == 'T' ? 0 \
(TARGET_BIG_SWITCH ? ".long" : ".short"), \
VALUE, REL)
-#define ASM_OUTPUT_ALIGN(FILE,LOG) \
+#define ASM_OUTPUT_ALIGN(FILE, LOG) \
if ((LOG) != 0) \
fprintf (FILE, "\t.align %d\n", (LOG))
#define EP_REGNUM 30 /* ep register number */
-#define ENCODE_SECTION_INFO(DECL) \
-do { \
- if ((TREE_STATIC (DECL) || DECL_EXTERNAL (DECL)) \
- && TREE_CODE (DECL) == VAR_DECL) \
- v850_encode_data_area (DECL); \
-} while (0)
+#define ENCODE_SECTION_INFO(DECL) \
+ do \
+ { \
+ if ((TREE_STATIC (DECL) || DECL_EXTERNAL (DECL)) \
+ && TREE_CODE (DECL) == VAR_DECL) \
+ v850_encode_data_area (DECL); \
+ } \
+ while (0)
#define ZDA_NAME_FLAG_CHAR '@'
#define TDA_NAME_FLAG_CHAR '%'
{ "pattern_is_ok_for_epilogue", { PARALLEL }}, \
{ "register_is_ok_for_epilogue",{ REG }}, \
{ "not_power_of_two_operand", { CONST_INT }},
-
- /* Note, due to dependency and search path conflicts, prototypes
- involving the FILE, rtx or tree types cannot be included here.
- They are included at the start of v850.c */
-extern void asm_file_start ();
-extern void print_operand ();
-extern void print_operand_address ();
-extern int function_arg_partial_nregs ();
-extern int const_costs ();
-extern char * output_move_double ();
-extern char * output_move_single ();
-extern int ep_memory_operand ();
-extern int reg_or_0_operand ();
-extern int reg_or_int5_operand ();
-extern int call_address_operand ();
-extern int movsi_source_operand ();
-extern int power_of_two_operand ();
-extern int not_power_of_two_operand ();
-extern int special_symbolref_operand ();
-extern void v850_reorg ();
-extern void notice_update_cc ();
-extern int v850_valid_machine_decl_attribute ();
-extern int v850_interrupt_function_p ();
-extern int pattern_is_ok_for_prologue ();
-extern int pattern_is_ok_for_epilogue ();
-extern int register_is_ok_for_epilogue ();
-extern char * construct_save_jarl ();
-extern char * construct_restore_jr ();
-
-extern void override_options PROTO ((void));
-extern int compute_register_save_size PROTO ((long *));
-extern int compute_frame_size PROTO ((int, long *));
-extern void expand_prologue PROTO ((void));
-extern void expand_epilogue PROTO ((void));
-
-extern void v850_output_aligned_bss ();
-extern void v850_output_common ();
-extern void v850_output_local ();
-extern void sdata_section PROTO ((void));
-extern void rosdata_section PROTO ((void));
-extern void sbss_section PROTO ((void));
-extern void tdata_section PROTO ((void));
-extern void zdata_section PROTO ((void));
-extern void rozdata_section PROTO ((void));
-extern void zbss_section PROTO ((void));
-extern int v850_handle_pragma PROTO ((int (*)(void), void (*)(int), char *));
-extern void v850_encode_data_area ();
-extern void v850_set_default_decl_attr ();
-extern v850_data_area v850_get_data_area ();
-extern struct rtx_def *v850_va_arg ();
|| CONST_OK_FOR_K (INTVAL (operands[1]))
|| CONST_OK_FOR_L (INTVAL (operands[1])))))
{
- rtx high;
rtx temp;
if (reload_in_progress || reload_completed)
emit_insn (gen_addsi3 (reg, reg, tableaddress));
/* Load the table entry. */
mem = gen_rtx_MEM (CASE_VECTOR_MODE, reg);
- RTX_UNCHANGING_P (mem);
+ RTX_UNCHANGING_P (mem) = 1;
if (! TARGET_BIG_SWITCH)
{
rtx reg2 = gen_reg_rtx (HImode);
""
"
{
- if (! call_address_operand (XEXP (operands[0], 0))
+ if (! call_address_operand (XEXP (operands[0], 0), QImode)
|| TARGET_LONG_CALLS)
XEXP (operands[0], 0) = force_reg (SImode, XEXP (operands[0], 0));
if (TARGET_LONG_CALLS)
""
"
{
- if (! call_address_operand (XEXP (operands[1], 0))
+ if (! call_address_operand (XEXP (operands[1], 0), QImode)
|| TARGET_LONG_CALLS)
XEXP (operands[1], 0) = force_reg (SImode, XEXP (operands[1], 0));
if (TARGET_LONG_CALLS)