mips.c (mips_function_value): Handle complex return values.
* config/mips/mips.c (mips_function_value): Handle complex return values. From-SVN: r45178
This commit is contained in:
parent
cf728d61ac
commit
f9ad2367e7
@ -1,3 +1,8 @@
|
|||||||
|
2001-08-26 Aldy Hernandez <aldyh@redhat.com>
|
||||||
|
|
||||||
|
* config/mips/mips.c (mips_function_value): Handle complex return
|
||||||
|
values.
|
||||||
|
|
||||||
2001-08-25 Hans-Peter Nilsson <hp@bitrange.com>
|
2001-08-25 Hans-Peter Nilsson <hp@bitrange.com>
|
||||||
|
|
||||||
* reload1.c (reload): Make all entries in reg_equiv_memory_loc
|
* reload1.c (reload): Make all entries in reg_equiv_memory_loc
|
||||||
|
@ -7782,8 +7782,7 @@ mips_function_value (valtype, func)
|
|||||||
just as PROMOTE_MODE does. */
|
just as PROMOTE_MODE does. */
|
||||||
mode = promote_mode (valtype, mode, &unsignedp, 1);
|
mode = promote_mode (valtype, mode, &unsignedp, 1);
|
||||||
|
|
||||||
/* ??? How should we return complex float? */
|
if (mclass == MODE_FLOAT)
|
||||||
if (mclass == MODE_FLOAT || mclass == MODE_COMPLEX_FLOAT)
|
|
||||||
{
|
{
|
||||||
if (TARGET_SINGLE_FLOAT
|
if (TARGET_SINGLE_FLOAT
|
||||||
&& (mclass == MODE_FLOAT
|
&& (mclass == MODE_FLOAT
|
||||||
@ -7793,6 +7792,33 @@ mips_function_value (valtype, func)
|
|||||||
reg = FP_RETURN;
|
reg = FP_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if (mclass == MODE_COMPLEX_FLOAT)
|
||||||
|
{
|
||||||
|
if (TARGET_FLOAT64)
|
||||||
|
reg = FP_RETURN;
|
||||||
|
else if (mode == SCmode)
|
||||||
|
{
|
||||||
|
/* When FP registers are 32 bits, we can't directly reference
|
||||||
|
the odd numbered ones, so let's make a pair of evens. */
|
||||||
|
|
||||||
|
enum machine_mode cmode = TYPE_MODE (TREE_TYPE (valtype));
|
||||||
|
|
||||||
|
return gen_rtx_PARALLEL
|
||||||
|
(VOIDmode,
|
||||||
|
gen_rtvec (2,
|
||||||
|
gen_rtx_EXPR_LIST (VOIDmode,
|
||||||
|
gen_rtx_REG (cmode,
|
||||||
|
FP_RETURN),
|
||||||
|
GEN_INT (0)),
|
||||||
|
gen_rtx_EXPR_LIST (VOIDmode,
|
||||||
|
gen_rtx_REG (cmode,
|
||||||
|
FP_RETURN + 2),
|
||||||
|
GEN_INT (4))));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
reg = FP_RETURN;
|
||||||
|
}
|
||||||
|
|
||||||
else if (TREE_CODE (valtype) == RECORD_TYPE
|
else if (TREE_CODE (valtype) == RECORD_TYPE
|
||||||
&& mips_abi != ABI_32
|
&& mips_abi != ABI_32
|
||||||
&& mips_abi != ABI_O64
|
&& mips_abi != ABI_O64
|
||||||
|
Loading…
Reference in New Issue
Block a user