Commit 06d69cd3 by Richard Henderson Committed by Richard Henderson

alpha.h (PROMOTE_MODE): Don't promote vector types.

        * config/alpha/alpha.h (PROMOTE_MODE): Don't promote vector types.
        * config/alpha/alpha.c (function_value): Use PROMOTE_MODE.

From-SVN: r85989
parent 1c5192e4
2004-08-14 Richard Henderson <rth@redhat.com>
* config/alpha/alpha.h (PROMOTE_MODE): Don't promote vector types.
* config/alpha/alpha.c (function_value): Use PROMOTE_MODE.
2004-08-13 Richard Henderson <rth@redhat.com> 2004-08-13 Richard Henderson <rth@redhat.com>
* config/i386/i386.md (call_1, sibcall_1, call_1_rex64): Use Pmode * config/i386/i386.md (call_1, sibcall_1, call_1_rex64): Use Pmode
......
...@@ -5160,7 +5160,7 @@ rtx ...@@ -5160,7 +5160,7 @@ rtx
function_value (tree valtype, tree func ATTRIBUTE_UNUSED, function_value (tree valtype, tree func ATTRIBUTE_UNUSED,
enum machine_mode mode) enum machine_mode mode)
{ {
unsigned int regnum; unsigned int regnum, dummy;
enum mode_class class; enum mode_class class;
#ifdef ENABLE_CHECKING #ifdef ENABLE_CHECKING
...@@ -5175,8 +5175,7 @@ function_value (tree valtype, tree func ATTRIBUTE_UNUSED, ...@@ -5175,8 +5175,7 @@ function_value (tree valtype, tree func ATTRIBUTE_UNUSED,
switch (class) switch (class)
{ {
case MODE_INT: case MODE_INT:
/* Do the same thing as PROMOTE_MODE. */ PROMOTE_MODE (mode, dummy, valtype);
mode = DImode;
/* FALLTHRU */ /* FALLTHRU */
case MODE_COMPLEX_INT: case MODE_COMPLEX_INT:
......
...@@ -471,16 +471,22 @@ extern const char *alpha_tls_size_string; /* For -mtls-size= */ ...@@ -471,16 +471,22 @@ extern const char *alpha_tls_size_string; /* For -mtls-size= */
type, but kept valid in the wider mode. The signedness of the type, but kept valid in the wider mode. The signedness of the
extension may differ from that of the type. extension may differ from that of the type.
For Alpha, we always store objects in a full register. 32-bit objects For Alpha, we always store objects in a full register. 32-bit integers
are always sign-extended, but smaller objects retain their signedness. */ are always sign-extended, but smaller objects retain their signedness.
#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \ Note that small vector types can get mapped onto integer modes at the
if (GET_MODE_CLASS (MODE) == MODE_INT \ whim of not appearing in alpha-modes.def. We never promoted these
&& GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \ values before; don't do so now that we've trimed the set of modes to
{ \ those actually implemented in the backend. */
if ((MODE) == SImode) \
(UNSIGNEDP) = 0; \ #define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \
(MODE) = DImode; \ if (GET_MODE_CLASS (MODE) == MODE_INT \
&& (TYPE == NULL || TREE_CODE (TYPE) != VECTOR_TYPE) \
&& GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \
{ \
if ((MODE) == SImode) \
(UNSIGNEDP) = 0; \
(MODE) = DImode; \
} }
/* Define this if most significant bit is lowest numbered /* Define this if most significant bit is lowest numbered
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment