mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-11 17:45:03 +08:00
rs6000-protos.h (function_value): Protoize.
2003-05-15 Aldy Hernandez <aldyh@redhat.com> * config/rs6000/rs6000-protos.h (function_value): Protoize. * config/rs6000/rs6000.h (FUNCTION_VALUE): Call function. * config/rs6000/rs6000.c (rs6000_function_value): New. From-SVN: r66841
This commit is contained in:
parent
49a19cfd34
commit
a6ebc39a66
@ -1,3 +1,11 @@
|
||||
2003-05-15 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* config/rs6000/rs6000-protos.h (function_value): Protoize.
|
||||
|
||||
* config/rs6000/rs6000.h (FUNCTION_VALUE): Call function.
|
||||
|
||||
* config/rs6000/rs6000.c (rs6000_function_value): New.
|
||||
|
||||
2003-05-15 Philip Blundell <philb@gnu.org>
|
||||
|
||||
* config/arm/arm.c (arm_is_xscale): Rename to arm_arch_xscale.
|
||||
|
@ -152,6 +152,7 @@ extern int function_arg_pass_by_reference PARAMS ((CUMULATIVE_ARGS *,
|
||||
extern void setup_incoming_varargs PARAMS ((CUMULATIVE_ARGS *,
|
||||
enum machine_mode, tree,
|
||||
int *, int));
|
||||
extern rtx rs6000_function_value (tree, tree);
|
||||
extern struct rtx_def *rs6000_va_arg PARAMS ((tree, tree));
|
||||
extern int function_ok_for_sibcall PARAMS ((tree));
|
||||
#ifdef ARGS_SIZE_RTX
|
||||
|
@ -14396,6 +14396,44 @@ rs6000_memory_move_cost (mode, class, in)
|
||||
return 4 + rs6000_register_move_cost (mode, class, GENERAL_REGS);
|
||||
}
|
||||
|
||||
/* Define how to find the value returned by a function.
|
||||
VALTYPE is the data type of the value (as a tree).
|
||||
If the precise function being called is known, FUNC is its FUNCTION_DECL;
|
||||
otherwise, FUNC is 0.
|
||||
|
||||
On the SPE, both FPs and vectors are returned in r3.
|
||||
|
||||
On RS/6000 an integer value is in r3 and a floating-point value is in
|
||||
fp1, unless -msoft-float. */
|
||||
|
||||
rtx
|
||||
rs6000_function_value (tree valtype, tree func ATTRIBUTE_UNUSED)
|
||||
{
|
||||
enum machine_mode mode;
|
||||
unsigned int regno = GP_ARG_RETURN;
|
||||
|
||||
if ((INTEGRAL_TYPE_P (valtype)
|
||||
&& TYPE_PRECISION (valtype) < BITS_PER_WORD)
|
||||
|| POINTER_TYPE_P (valtype))
|
||||
mode = word_mode;
|
||||
else
|
||||
mode = TYPE_MODE (valtype);
|
||||
|
||||
if (TREE_CODE (valtype) == REAL_TYPE)
|
||||
{
|
||||
if (TARGET_HARD_FLOAT && TARGET_FPRS)
|
||||
regno = FP_ARG_RETURN;
|
||||
else if (TARGET_SPE_ABI && !TARGET_FPRS)
|
||||
regno = GP_ARG_RETURN;
|
||||
}
|
||||
else if (TARGET_ALTIVEC && TREE_CODE (valtype) == VECTOR_TYPE)
|
||||
regno = ALTIVEC_ARG_RETURN;
|
||||
else
|
||||
regno = GP_ARG_RETURN;
|
||||
|
||||
return gen_rtx_REG (mode, regno);
|
||||
}
|
||||
|
||||
/* Return true if TYPE is of type __ev64_opaque__. */
|
||||
|
||||
static bool
|
||||
|
@ -1555,26 +1555,9 @@ typedef struct rs6000_stack {
|
||||
/* Define how to find the value returned by a function.
|
||||
VALTYPE is the data type of the value (as a tree).
|
||||
If the precise function being called is known, FUNC is its FUNCTION_DECL;
|
||||
otherwise, FUNC is 0.
|
||||
otherwise, FUNC is 0. */
|
||||
|
||||
On the SPE, both FPs and vectors are returned in r3.
|
||||
|
||||
On RS/6000 an integer value is in r3 and a floating-point value is in
|
||||
fp1, unless -msoft-float. */
|
||||
|
||||
#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), \
|
||||
TREE_CODE (VALTYPE) == VECTOR_TYPE \
|
||||
&& TARGET_ALTIVEC ? ALTIVEC_ARG_RETURN \
|
||||
: TREE_CODE (VALTYPE) == REAL_TYPE \
|
||||
&& TARGET_SPE_ABI && !TARGET_FPRS \
|
||||
? GP_ARG_RETURN \
|
||||
: TREE_CODE (VALTYPE) == REAL_TYPE \
|
||||
&& TARGET_HARD_FLOAT && TARGET_FPRS \
|
||||
? FP_ARG_RETURN : GP_ARG_RETURN)
|
||||
#define FUNCTION_VALUE(VALTYPE, FUNC) rs6000_function_value ((VALTYPE), (FUNC))
|
||||
|
||||
/* Define how to find the value returned by a library function
|
||||
assuming the value has mode MODE. */
|
||||
|
Loading…
Reference in New Issue
Block a user