Mercurial > hg > CbC > CbC_gcc
diff gcc/config/iq2000/iq2000.h @ 55:77e2b8dfacca gcc-4.4.5
update it from 4.4.3 to 4.5.0
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 12 Feb 2010 23:39:51 +0900 |
parents | a06113de4d67 |
children | b7f97abdc517 |
line wrap: on
line diff
--- a/gcc/config/iq2000/iq2000.h Sun Feb 07 18:28:00 2010 +0900 +++ b/gcc/config/iq2000/iq2000.h Fri Feb 12 23:39:51 2010 +0900 @@ -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 @@ /* 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 @@ { 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 @@ (((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 @@ /* 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 @@ #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 @@ /* 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,