diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-06-27 17:52:03 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-06-27 17:52:03 +0000 |
commit | a685f5d8e42ae59f9b5267023cb5b82cc68c8ceb (patch) | |
tree | 49762bdb5dbf79cca9a0994dd11b48b208a92a1e /gcc/config/alpha/alpha.h | |
parent | 2c06e494653930abebdfddaf07f5105c0d64661b (diff) | |
download | gcc-a685f5d8e42ae59f9b5267023cb5b82cc68c8ceb.tar.gz |
* config/alpha/alpha.c (function_arg): Don't pass small aggregates
in floating point registers. Validate that we don't receive complex
values here. Use #elif.
(return_in_memory, function_value): New.
(alpha_va_arg): Handle complex values as two arguments.
* config/alpha/alpha.h (RETURN_IN_MEMORY): Use return_in_memory.
(FUNCTION_VALUE, LIBCALL_VALUE): Use function_value.
(SPLIT_COMPLEX_ARGS): New.
* config/alpha/alpha-protos.h: Update.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@68591 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/alpha/alpha.h')
-rw-r--r-- | gcc/config/alpha/alpha.h | 27 |
1 files changed, 8 insertions, 19 deletions
diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h index 7ba7b15483f..267d292a17d 100644 --- a/gcc/config/alpha/alpha.h +++ b/gcc/config/alpha/alpha.h @@ -994,25 +994,14 @@ extern int alpha_memory_latency; On Alpha the value is found in $0 for integer functions and $f0 for floating-point functions. */ -#define FUNCTION_VALUE(VALTYPE, FUNC) \ - gen_rtx_REG (((INTEGRAL_TYPE_P (VALTYPE) \ - && TYPE_PRECISION (VALTYPE) < BITS_PER_WORD) \ - || POINTER_TYPE_P (VALTYPE)) \ - ? word_mode : TYPE_MODE (VALTYPE), \ - ((TARGET_FPREGS \ - && (TREE_CODE (VALTYPE) == REAL_TYPE \ - || TREE_CODE (VALTYPE) == COMPLEX_TYPE)) \ - ? 32 : 0)) +#define FUNCTION_VALUE(VALTYPE, FUNC) \ + function_value (VALTYPE, FUNC, VOIDmode) /* Define how to find the value returned by a library function assuming the value has mode MODE. */ -#define LIBCALL_VALUE(MODE) \ - gen_rtx_REG (MODE, \ - (TARGET_FPREGS \ - && (GET_MODE_CLASS (MODE) == MODE_FLOAT \ - || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT) \ - ? 32 : 0)) +#define LIBCALL_VALUE(MODE) \ + function_value (NULL, NULL, MODE) /* The definition of this macro implies that there are cases where a scalar value cannot be returned in registers. @@ -1021,10 +1010,7 @@ extern int alpha_memory_latency; are integers whose size is larger than 64 bits. */ #define RETURN_IN_MEMORY(TYPE) \ - (TYPE_MODE (TYPE) == BLKmode \ - || TYPE_MODE (TYPE) == TFmode \ - || TYPE_MODE (TYPE) == TCmode \ - || (TREE_CODE (TYPE) == INTEGER_TYPE && TYPE_PRECISION (TYPE) > 64)) + return_in_memory (TYPE, VOIDmode) /* 1 if N is a possible register number for a function value as seen by the caller. */ @@ -1889,3 +1875,6 @@ do { \ /* Generate calls to memcpy, etc., not bcopy, etc. */ #define TARGET_MEM_FUNCTIONS 1 + +/* Pass complex arguments independently. */ +#define SPLIT_COMPLEX_ARGS 1 |