| Index: gcc/gcc/config/iq2000/iq2000.h
|
| diff --git a/gcc/gcc/config/iq2000/iq2000.h b/gcc/gcc/config/iq2000/iq2000.h
|
| index f6c7ec5edb65f06d3a677f823cf3bbab0371f0bb..0b207b5e8d446803e260f1e92811ab05c1765d2b 100644
|
| --- a/gcc/gcc/config/iq2000/iq2000.h
|
| +++ b/gcc/gcc/config/iq2000/iq2000.h
|
| @@ -1,6 +1,6 @@
|
| /* Definitions of target machine for GNU compiler.
|
| Vitesse IQ2000 processors
|
| - Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
|
| + Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
| Free Software Foundation, Inc.
|
|
|
| This file is part of GCC.
|
| @@ -345,8 +345,6 @@ enum reg_class
|
|
|
| /* Eliminating the Frame Pointer and the Arg Pointer. */
|
|
|
| -#define FRAME_POINTER_REQUIRED 0
|
| -
|
| #define ELIMINABLE_REGS \
|
| {{ ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
|
| { ARG_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}, \
|
| @@ -356,17 +354,6 @@ enum reg_class
|
| { FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
|
| { FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}}
|
|
|
| -
|
| -/* We can always eliminate to the frame pointer. We can eliminate to the
|
| - stack pointer unless a frame pointer is needed. */
|
| -
|
| -#define CAN_ELIMINATE(FROM, TO) \
|
| - (((FROM) == RETURN_ADDRESS_POINTER_REGNUM && (! leaf_function_p () \
|
| - || (TO == GP_REG_FIRST + 31 && leaf_function_p))) \
|
| - || ((FROM) != RETURN_ADDRESS_POINTER_REGNUM \
|
| - && ((TO) == HARD_FRAME_POINTER_REGNUM \
|
| - || ((TO) == STACK_POINTER_REGNUM && ! frame_pointer_needed))))
|
| -
|
| #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
|
| (OFFSET) = iq2000_initial_elimination_offset ((FROM), (TO))
|
|
|
| @@ -435,20 +422,9 @@ typedef struct iq2000_args
|
| (((N) >= GP_ARG_FIRST && (N) <= GP_ARG_LAST))
|
|
|
|
|
| -/* How Scalar Function Values are Returned. */
|
| -
|
| -#define FUNCTION_VALUE(VALTYPE, FUNC) iq2000_function_value (VALTYPE, FUNC)
|
| -
|
| -#define LIBCALL_VALUE(MODE) \
|
| - gen_rtx_REG (((GET_MODE_CLASS (MODE) != MODE_INT \
|
| - || GET_MODE_SIZE (MODE) >= 4) \
|
| - ? (MODE) \
|
| - : SImode), \
|
| - GP_RETURN)
|
| -
|
| /* On the IQ2000, R2 and R3 are the only register thus used. */
|
|
|
| -#define FUNCTION_VALUE_REGNO_P(N) ((N) == GP_RETURN)
|
| +#define FUNCTION_VALUE_REGNO_P(N) iq2000_function_value_regno_p (N)
|
|
|
|
|
| /* How Large Values are Returned. */
|
| @@ -482,43 +458,9 @@ typedef struct iq2000_args
|
|
|
| /* Trampolines for Nested Functions. */
|
|
|
| -/* A C statement to output, on the stream FILE, assembler code for a
|
| - block of data that contains the constant parts of a trampoline.
|
| - This code should not include a label--the label is taken care of
|
| - automatically. */
|
| -
|
| -#define TRAMPOLINE_TEMPLATE(STREAM) \
|
| -{ \
|
| - fprintf (STREAM, "\t.word\t0x03e00821\t\t# move $1,$31\n"); \
|
| - fprintf (STREAM, "\t.word\t0x04110001\t\t# bgezal $0,.+8\n"); \
|
| - fprintf (STREAM, "\t.word\t0x00000000\t\t# nop\n"); \
|
| - if (Pmode == DImode) \
|
| - { \
|
| - fprintf (STREAM, "\t.word\t0xdfe30014\t\t# ld $3,20($31)\n"); \
|
| - fprintf (STREAM, "\t.word\t0xdfe2001c\t\t# ld $2,28($31)\n"); \
|
| - } \
|
| - else \
|
| - { \
|
| - fprintf (STREAM, "\t.word\t0x8fe30014\t\t# lw $3,20($31)\n"); \
|
| - fprintf (STREAM, "\t.word\t0x8fe20018\t\t# lw $2,24($31)\n"); \
|
| - } \
|
| - fprintf (STREAM, "\t.word\t0x0060c821\t\t# move $25,$3 (abicalls)\n"); \
|
| - fprintf (STREAM, "\t.word\t0x00600008\t\t# jr $3\n"); \
|
| - fprintf (STREAM, "\t.word\t0x0020f821\t\t# move $31,$1\n"); \
|
| - fprintf (STREAM, "\t.word\t0x00000000\t\t# <function address>\n"); \
|
| - fprintf (STREAM, "\t.word\t0x00000000\t\t# <static chain value>\n"); \
|
| -}
|
| -
|
| -#define TRAMPOLINE_SIZE (40)
|
| -
|
| -#define TRAMPOLINE_ALIGNMENT 32
|
| -
|
| -#define INITIALIZE_TRAMPOLINE(ADDR, FUNC, CHAIN) \
|
| -{ \
|
| - rtx addr = ADDR; \
|
| - emit_move_insn (gen_rtx_MEM (SImode, plus_constant (addr, 32)), FUNC); \
|
| - emit_move_insn (gen_rtx_MEM (SImode, plus_constant (addr, 36)), CHAIN);\
|
| -}
|
| +#define TRAMPOLINE_CODE_SIZE (8*4)
|
| +#define TRAMPOLINE_SIZE (TRAMPOLINE_CODE_SIZE + 2*GET_MODE_SIZE (Pmode))
|
| +#define TRAMPOLINE_ALIGNMENT GET_MODE_ALIGNMENT (Pmode)
|
|
|
|
|
| /* Addressing Modes. */
|
| @@ -530,90 +472,8 @@ typedef struct iq2000_args
|
|
|
| #define MAX_REGS_PER_ADDRESS 1
|
|
|
| -#ifdef REG_OK_STRICT
|
| -#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
|
| - { \
|
| - if (iq2000_legitimate_address_p (MODE, X, 1)) \
|
| - goto ADDR; \
|
| - }
|
| -#else
|
| -#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
|
| - { \
|
| - if (iq2000_legitimate_address_p (MODE, X, 0)) \
|
| - goto ADDR; \
|
| - }
|
| -#endif
|
| -
|
| #define REG_OK_FOR_INDEX_P(X) 0
|
|
|
| -
|
| -/* For the IQ2000, transform:
|
| -
|
| - memory(X + <large int>)
|
| - into:
|
| - Y = <large int> & ~0x7fff;
|
| - Z = X + Y
|
| - memory (Z + (<large int> & 0x7fff));
|
| -*/
|
| -
|
| -#define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) \
|
| -{ \
|
| - rtx xinsn = (X); \
|
| - \
|
| - if (TARGET_DEBUG_B_MODE) \
|
| - { \
|
| - GO_PRINTF ("\n========== LEGITIMIZE_ADDRESS\n"); \
|
| - GO_DEBUG_RTX (xinsn); \
|
| - } \
|
| - \
|
| - if (iq2000_check_split (X, MODE)) \
|
| - { \
|
| - X = gen_rtx_LO_SUM (Pmode, \
|
| - copy_to_mode_reg (Pmode, \
|
| - gen_rtx_HIGH (Pmode, X)), \
|
| - X); \
|
| - goto WIN; \
|
| - } \
|
| - \
|
| - if (GET_CODE (xinsn) == PLUS) \
|
| - { \
|
| - rtx xplus0 = XEXP (xinsn, 0); \
|
| - rtx xplus1 = XEXP (xinsn, 1); \
|
| - enum rtx_code code0 = GET_CODE (xplus0); \
|
| - enum rtx_code code1 = GET_CODE (xplus1); \
|
| - \
|
| - if (code0 != REG && code1 == REG) \
|
| - { \
|
| - xplus0 = XEXP (xinsn, 1); \
|
| - xplus1 = XEXP (xinsn, 0); \
|
| - code0 = GET_CODE (xplus0); \
|
| - code1 = GET_CODE (xplus1); \
|
| - } \
|
| - \
|
| - if (code0 == REG && REG_MODE_OK_FOR_BASE_P (xplus0, MODE) \
|
| - && code1 == CONST_INT && !SMALL_INT (xplus1)) \
|
| - { \
|
| - rtx int_reg = gen_reg_rtx (Pmode); \
|
| - rtx ptr_reg = gen_reg_rtx (Pmode); \
|
| - \
|
| - emit_move_insn (int_reg, \
|
| - GEN_INT (INTVAL (xplus1) & ~ 0x7fff)); \
|
| - \
|
| - emit_insn (gen_rtx_SET (VOIDmode, \
|
| - ptr_reg, \
|
| - gen_rtx_PLUS (Pmode, xplus0, int_reg))); \
|
| - \
|
| - X = plus_constant (ptr_reg, INTVAL (xplus1) & 0x7fff); \
|
| - goto WIN; \
|
| - } \
|
| - } \
|
| - \
|
| - if (TARGET_DEBUG_B_MODE) \
|
| - GO_PRINTF ("LEGITIMIZE_ADDRESS could not fix.\n"); \
|
| -}
|
| -
|
| -#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) {}
|
| -
|
| #define LEGITIMATE_CONSTANT_P(X) (1)
|
|
|
|
|
| @@ -1071,13 +931,6 @@ extern enum processor_type iq2000_tune;
|
| /* Which instruction set architecture to use. */
|
| extern int iq2000_isa;
|
|
|
| -/* Cached operands, and operator to compare for use in set/branch/trap
|
| - on condition codes. */
|
| -extern rtx branch_cmp[2];
|
| -
|
| -/* What type of branch to use. */
|
| -extern enum cmp_type branch_type;
|
| -
|
| enum iq2000_builtins
|
| {
|
| IQ2000_BUILTIN_ADO16,
|
|
|