Mercurial > hg > CbC > CbC_gcc
diff gcc/config/mmix/mmix.c @ 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/mmix/mmix.c Fri Feb 12 23:41:23 2010 +0900 +++ b/gcc/config/mmix/mmix.c Mon May 24 12:47:05 2010 +0900 @@ -1,5 +1,6 @@ /* Definitions of target machine for GNU compiler, for MMIX. - Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, + 2010 Free Software Foundation, Inc. Contributed by Hans-Peter Nilsson (hp@bitrange.com) @@ -42,7 +43,6 @@ #include "integrate.h" #include "target.h" #include "target-def.h" -#include "real.h" /* First some local helper definitions. */ #define MMIX_FIRST_GLOBAL_REGNUM 32 @@ -138,6 +138,9 @@ static enum machine_mode mmix_promote_function_mode (const_tree, enum machine_mode, int *, const_tree, int); +static rtx mmix_function_value (const_tree, const_tree, bool); +static rtx mmix_libcall_value (enum machine_mode, const_rtx); +static bool mmix_function_value_regno_p (const unsigned int); static bool mmix_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode, const_tree, bool); static bool mmix_frame_pointer_required (void); @@ -196,6 +199,12 @@ #undef TARGET_PROMOTE_FUNCTION_MODE #define TARGET_PROMOTE_FUNCTION_MODE mmix_promote_function_mode +#undef TARGET_FUNCTION_VALUE +#define TARGET_FUNCTION_VALUE mmix_function_value +#undef TARGET_LIBCALL_VALUE +#define TARGET_LIBCALL_VALUE mmix_libcall_value +#undef TARGET_FUNCTION_VALUE_REGNO_P +#define TARGET_FUNCTION_VALUE_REGNO_P mmix_function_value_regno_p #undef TARGET_STRUCT_VALUE_RTX #define TARGET_STRUCT_VALUE_RTX mmix_struct_value_rtx @@ -654,10 +663,12 @@ && regno < first_arg_regnum + MMIX_MAX_ARGS_IN_REGS; } -/* FUNCTION_OUTGOING_VALUE. */ - -rtx -mmix_function_outgoing_value (const_tree valtype, const_tree func ATTRIBUTE_UNUSED) +/* Implements TARGET_FUNCTION_VALUE. */ + +static rtx +mmix_function_value (const_tree valtype, + const_tree func ATTRIBUTE_UNUSED, + bool outgoing) { enum machine_mode mode = TYPE_MODE (valtype); enum machine_mode cmode; @@ -666,6 +677,9 @@ int i; int nregs; + if (!outgoing) + return gen_rtx_REG (mode, MMIX_RETURN_VALUE_REGNUM); + /* Return values that fit in a register need no special handling. There's no register hole when parameters are passed in global registers. */ @@ -717,10 +731,19 @@ return gen_rtx_PARALLEL (VOIDmode, gen_rtvec_v (nregs, vec)); } -/* FUNCTION_VALUE_REGNO_P. */ - -int -mmix_function_value_regno_p (int regno) +/* Implements TARGET_LIBCALL_VALUE. */ + +static rtx +mmix_libcall_value (enum machine_mode mode, + const_rtx fun ATTRIBUTE_UNUSED) +{ + return gen_rtx_REG (mode, MMIX_RETURN_VALUE_REGNUM); +} + +/* Implements TARGET_FUNCTION_VALUE_REGNO_P. */ + +static bool +mmix_function_value_regno_p (const unsigned int regno) { return regno == MMIX_RETURN_VALUE_REGNUM; }