rs6000.h (FUNCTION_VALUE): Only return vectors in an altivec register if TARGET_ALTIVEC.
2002-05-19 Aldy Hernandez <aldyh@redhat.com> * config/rs6000/rs6000.h (FUNCTION_VALUE): Only return vectors in an altivec register if TARGET_ALTIVEC. * config/rs600/rs6000.c (rs6000_emit_move): Change VECTOR_MODE_P to ALTIVEC_VECTOR_MODE. (rs6000_va_arg): Only vectors of type AltiVec are 16 byte aligned. (rs6000_va_arg): Vectors may go in registers if they are not altivec vectors. From-SVN: r53645
This commit is contained in:
parent
23459e152d
commit
16861f33d2
|
@ -1,3 +1,14 @@
|
||||||
|
2002-05-19 Aldy Hernandez <aldyh@redhat.com>
|
||||||
|
|
||||||
|
* config/rs6000/rs6000.h (FUNCTION_VALUE): Only return vectors in
|
||||||
|
an altivec register if TARGET_ALTIVEC.
|
||||||
|
|
||||||
|
* config/rs600/rs6000.c (rs6000_emit_move): Change VECTOR_MODE_P
|
||||||
|
to ALTIVEC_VECTOR_MODE.
|
||||||
|
(rs6000_va_arg): Only vectors of type AltiVec are 16 byte aligned.
|
||||||
|
(rs6000_va_arg): Vectors may go in registers if they are not
|
||||||
|
altivec vectors.
|
||||||
|
|
||||||
2002-05-19 Kazu Hirata <kazu@cs.umass.edu>
|
2002-05-19 Kazu Hirata <kazu@cs.umass.edu>
|
||||||
|
|
||||||
* protoize.c: Fix formatting.
|
* protoize.c: Fix formatting.
|
||||||
|
|
|
@ -2315,7 +2315,7 @@ rs6000_emit_move (dest, source, mode)
|
||||||
|
|
||||||
/* Handle the case where reload calls us with an invalid address;
|
/* Handle the case where reload calls us with an invalid address;
|
||||||
and the case of CONSTANT_P_RTX. */
|
and the case of CONSTANT_P_RTX. */
|
||||||
if (!VECTOR_MODE_P (mode)
|
if (!ALTIVEC_VECTOR_MODE (mode)
|
||||||
&& (! general_operand (operands[1], mode)
|
&& (! general_operand (operands[1], mode)
|
||||||
|| ! nonimmediate_operand (operands[0], mode)
|
|| ! nonimmediate_operand (operands[0], mode)
|
||||||
|| GET_CODE (operands[1]) == CONSTANT_P_RTX))
|
|| GET_CODE (operands[1]) == CONSTANT_P_RTX))
|
||||||
|
@ -3225,8 +3225,8 @@ rs6000_va_arg (valist, type)
|
||||||
lab_over = gen_label_rtx ();
|
lab_over = gen_label_rtx ();
|
||||||
addr_rtx = gen_reg_rtx (Pmode);
|
addr_rtx = gen_reg_rtx (Pmode);
|
||||||
|
|
||||||
/* Vectors never go in registers. */
|
/* AltiVec vectors never go in registers. */
|
||||||
if (TREE_CODE (type) != VECTOR_TYPE)
|
if (!TARGET_ALTIVEC || TREE_CODE (type) != VECTOR_TYPE)
|
||||||
{
|
{
|
||||||
TREE_THIS_VOLATILE (reg) = 1;
|
TREE_THIS_VOLATILE (reg) = 1;
|
||||||
emit_cmp_and_jump_insns
|
emit_cmp_and_jump_insns
|
||||||
|
@ -3280,7 +3280,8 @@ rs6000_va_arg (valist, type)
|
||||||
All AltiVec vectors go in the overflow area. So in the AltiVec
|
All AltiVec vectors go in the overflow area. So in the AltiVec
|
||||||
case we need to get the vectors from the overflow area, but
|
case we need to get the vectors from the overflow area, but
|
||||||
remember where the GPRs and FPRs are. */
|
remember where the GPRs and FPRs are. */
|
||||||
if (n_reg > 1 && TREE_CODE (type) != VECTOR_TYPE)
|
if (n_reg > 1 && (TREE_CODE (type) != VECTOR_TYPE
|
||||||
|
|| !TARGET_ALTIVEC))
|
||||||
{
|
{
|
||||||
t = build (MODIFY_EXPR, TREE_TYPE (reg), reg, build_int_2 (8, 0));
|
t = build (MODIFY_EXPR, TREE_TYPE (reg), reg, build_int_2 (8, 0));
|
||||||
TREE_SIDE_EFFECTS (t) = 1;
|
TREE_SIDE_EFFECTS (t) = 1;
|
||||||
|
@ -3294,8 +3295,8 @@ rs6000_va_arg (valist, type)
|
||||||
{
|
{
|
||||||
int align;
|
int align;
|
||||||
|
|
||||||
/* Vectors are 16 byte aligned. */
|
/* AltiVec vectors are 16 byte aligned. */
|
||||||
if (TREE_CODE (type) == VECTOR_TYPE)
|
if (TARGET_ALTIVEC && TREE_CODE (type) == VECTOR_TYPE)
|
||||||
align = 15;
|
align = 15;
|
||||||
else
|
else
|
||||||
align = 7;
|
align = 7;
|
||||||
|
|
|
@ -1460,7 +1460,8 @@ typedef struct rs6000_stack {
|
||||||
&& TYPE_PRECISION (VALTYPE) < BITS_PER_WORD) \
|
&& TYPE_PRECISION (VALTYPE) < BITS_PER_WORD) \
|
||||||
|| POINTER_TYPE_P (VALTYPE) \
|
|| POINTER_TYPE_P (VALTYPE) \
|
||||||
? word_mode : TYPE_MODE (VALTYPE), \
|
? word_mode : TYPE_MODE (VALTYPE), \
|
||||||
TREE_CODE (VALTYPE) == VECTOR_TYPE ? ALTIVEC_ARG_RETURN \
|
TREE_CODE (VALTYPE) == VECTOR_TYPE \
|
||||||
|
&& TARGET_ALTIVEC ? ALTIVEC_ARG_RETURN \
|
||||||
: TREE_CODE (VALTYPE) == REAL_TYPE && TARGET_HARD_FLOAT \
|
: TREE_CODE (VALTYPE) == REAL_TYPE && TARGET_HARD_FLOAT \
|
||||||
? FP_ARG_RETURN : GP_ARG_RETURN)
|
? FP_ARG_RETURN : GP_ARG_RETURN)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue