Mercurial > hg > CbC > CbC_gcc
diff gcc/config/sh/sh.h @ 63:b7f97abdc517 gcc-4.6-20100522
update gcc from gcc-4.5.0 to gcc-4.6
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 24 May 2010 12:47:05 +0900 |
parents | 77e2b8dfacca |
children | f6334be47118 |
line wrap: on
line diff
--- a/gcc/config/sh/sh.h Fri Feb 12 23:41:23 2010 +0900 +++ b/gcc/config/sh/sh.h Mon May 24 12:47:05 2010 +0900 @@ -1,6 +1,7 @@ /* Definitions of target machine for GNU compiler for Renesas / SuperH SH. Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, - 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 + Free Software Foundation, Inc. Contributed by Steve Chamberlain (sac@cygnus.com). Improved by Jim Wilson (wilson@cygnus.com). @@ -97,8 +98,15 @@ ? "__LITTLE_ENDIAN__" : "__BIG_ENDIAN__"); \ } while (0) -/* We can not debug without a frame pointer. */ -/* #define CAN_DEBUG_WITHOUT_FP */ +#define CAN_DEBUG_WITHOUT_FP + +/* Value should be nonzero if functions must have frame pointers. + Zero means the frame pointer need not be set up (and parms may be accessed + via the stack pointer) in functions that seem suitable. */ + +#ifndef SUBTARGET_FRAME_POINTER_REQUIRED +#define SUBTARGET_FRAME_POINTER_REQUIRED 0 +#endif #define CONDITIONAL_REGISTER_USAGE do \ { \ @@ -1201,11 +1209,12 @@ FPUL_REGS, LIM_REG_CLASSES \ } -/* When defined, the compiler allows registers explicitly used in the - rtl to be used as spill registers but prevents the compiler from - extending the lifetime of these registers. */ - -#define SMALL_REGISTER_CLASSES (! TARGET_SHMEDIA) +/* When this hook returns true for MODE, the compiler allows + registers explicitly used in the rtl to be used as spill registers + but prevents the compiler from extending the lifetime of these + registers. */ +#define TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P \ + sh_small_register_classes_for_mode_p /* The order in which register should be allocated. */ /* Sometimes FP0_REGS becomes the preferred class of a floating point pseudo, @@ -2010,84 +2019,13 @@ /* A C compound statement that attempts to replace X, which is an address that needs reloading, with a valid memory address for an operand of - mode MODE. WIN is a C statement label elsewhere in the code. - - Like for LEGITIMIZE_ADDRESS, for the SH we try to get a normal form - of the address. That will allow inheritance of the address reloads. */ + mode MODE. WIN is a C statement label elsewhere in the code. */ #define LEGITIMIZE_RELOAD_ADDRESS(X,MODE,OPNUM,TYPE,IND_LEVELS,WIN) \ -{ \ - if (GET_CODE (X) == PLUS \ - && (GET_MODE_SIZE (MODE) == 4 || GET_MODE_SIZE (MODE) == 8) \ - && CONST_INT_P (XEXP (X, 1)) \ - && BASE_REGISTER_RTX_P (XEXP (X, 0)) \ - && ! TARGET_SHMEDIA \ - && ! (TARGET_SH4 && (MODE) == DFmode) \ - && ! ((MODE) == PSImode && (TYPE) == RELOAD_FOR_INPUT_ADDRESS) \ - && (ALLOW_INDEXED_ADDRESS \ - || XEXP ((X), 0) == stack_pointer_rtx \ - || XEXP ((X), 0) == hard_frame_pointer_rtx)) \ - { \ - rtx index_rtx = XEXP (X, 1); \ - HOST_WIDE_INT offset = INTVAL (index_rtx), offset_base; \ - rtx sum; \ - \ - if (TARGET_SH2A && (MODE) == DFmode && (offset & 0x7)) \ - { \ - push_reload (X, NULL_RTX, &X, NULL, \ - BASE_REG_CLASS, Pmode, VOIDmode, 0, 0, (OPNUM), \ - (TYPE)); \ - goto WIN; \ - } \ - if (TARGET_SH2E && MODE == SFmode) \ - { \ - X = copy_rtx (X); \ - push_reload (X, NULL_RTX, &X, NULL, \ - BASE_REG_CLASS, Pmode, VOIDmode, 0, 0, (OPNUM), \ - (TYPE)); \ - goto WIN; \ - } \ - /* Instead of offset_base 128..131 use 124..127, so that \ - simple add suffices. */ \ - if (offset > 127) \ - { \ - offset_base = ((offset + 4) & ~60) - 4; \ - } \ - else \ - offset_base = offset & ~60; \ - /* Sometimes the normal form does not suit DImode. We \ - could avoid that by using smaller ranges, but that \ - would give less optimized code when SImode is \ - prevalent. */ \ - if (GET_MODE_SIZE (MODE) + offset - offset_base <= 64) \ - { \ - sum = gen_rtx_PLUS (Pmode, XEXP (X, 0), \ - GEN_INT (offset_base)); \ - X = gen_rtx_PLUS (Pmode, sum, GEN_INT (offset - offset_base));\ - push_reload (sum, NULL_RTX, &XEXP (X, 0), NULL, \ - BASE_REG_CLASS, Pmode, VOIDmode, 0, 0, (OPNUM), \ - (TYPE)); \ - goto WIN; \ - } \ - } \ - /* We must re-recognize what we created before. */ \ - else if (GET_CODE (X) == PLUS \ - && (GET_MODE_SIZE (MODE) == 4 || GET_MODE_SIZE (MODE) == 8) \ - && GET_CODE (XEXP (X, 0)) == PLUS \ - && CONST_INT_P (XEXP (XEXP (X, 0), 1)) \ - && BASE_REGISTER_RTX_P (XEXP (XEXP (X, 0), 0)) \ - && CONST_INT_P (XEXP (X, 1)) \ - && ! TARGET_SHMEDIA \ - && ! (TARGET_SH2E && MODE == SFmode)) \ - { \ - /* Because this address is so complex, we know it must have \ - been created by LEGITIMIZE_RELOAD_ADDRESS before; thus, \ - it is already unshared, and needs no further unsharing. */ \ - push_reload (XEXP ((X), 0), NULL_RTX, &XEXP ((X), 0), NULL, \ - BASE_REG_CLASS, Pmode, VOIDmode, 0, 0, (OPNUM), (TYPE));\ + do { \ + if (sh_legitimize_reload_address (&(X), (MODE), (OPNUM), (TYPE))) \ goto WIN; \ - } \ -} + } while (0) /* Specify the machine mode that this machine uses for the index in the tablejump instruction. */ @@ -2703,11 +2641,9 @@ #define SIDI_OFF (TARGET_LITTLE_ENDIAN ? 0 : 4) -/* ??? Define ACCUMULATE_OUTGOING_ARGS? This is more efficient than pushing - and popping arguments. However, we do have push/pop instructions, and - rather limited offsets (4 bits) in load/store instructions, so it isn't - clear if this would give better code. If implemented, should check for - compatibility problems. */ +/* Better to allocate once the maximum space for outgoing args in the + prologue rather than duplicate around each call. */ +#define ACCUMULATE_OUTGOING_ARGS TARGET_ACCUMULATE_OUTGOING_ARGS #define SH_DYNAMIC_SHIFT_COST \ (TARGET_HARD_SH4 ? 1 : TARGET_SH3 ? (TARGET_SMALLCODE ? 1 : 2) : 20)