Commit e2f289f3 by Nick Clifton Committed by Nick Clifton

rx.c (rx_function_value): Small integer types are promotes to SImode.

        * config/rx/rx.c (rx_function_value): Small integer types are
        promotes to SImode.
        (rx_promote_function_mode): New function.
        (TARGET_PROMOTE_FUNCTION_MODE): Define.

From-SVN: r165690
parent 46202729
2010-10-19 Nick Clifton <nickc@redhat.com> 2010-10-19 Nick Clifton <nickc@redhat.com>
* config/rx/rx.c (rx_function_value): Small integer types are
promotes to SImode.
(rx_promote_function_mode): New function.
(TARGET_PROMOTE_FUNCTION_MODE): Define.
2010-10-19 Nick Clifton <nickc@redhat.com>
* config/mep/mep.c (mep_print_operand): Use * config/mep/mep.c (mep_print_operand): Use
targetm.strip_name_encoding. targetm.strip_name_encoding.
(mep_output_aligned_common): Likewise. (mep_output_aligned_common): Likewise.
...@@ -830,7 +830,32 @@ rx_function_value (const_tree ret_type, ...@@ -830,7 +830,32 @@ rx_function_value (const_tree ret_type,
const_tree fn_decl_or_type ATTRIBUTE_UNUSED, const_tree fn_decl_or_type ATTRIBUTE_UNUSED,
bool outgoing ATTRIBUTE_UNUSED) bool outgoing ATTRIBUTE_UNUSED)
{ {
return gen_rtx_REG (TYPE_MODE (ret_type), FUNC_RETURN_REGNUM); enum machine_mode mode = TYPE_MODE (ret_type);
/* RX ABI specifies that small integer types are
promoted to int when returned by a function. */
if (GET_MODE_SIZE (mode) > 0 && GET_MODE_SIZE (mode) < 4)
return gen_rtx_REG (SImode, FUNC_RETURN_REGNUM);
return gen_rtx_REG (mode, FUNC_RETURN_REGNUM);
}
/* TARGET_PROMOTE_FUNCTION_MODE must behave in the same way with
regard to function returns as does TARGET_FUNCTION_VALUE. */
static enum machine_mode
rx_promote_function_mode (const_tree type ATTRIBUTE_UNUSED,
enum machine_mode mode,
int * punsignedp,
const_tree funtype ATTRIBUTE_UNUSED,
int for_return)
{
if (for_return != 1
|| GET_MODE_SIZE (mode) >= 4
|| GET_MODE_SIZE (mode) < 1)
return mode;
return SImode;
} }
static bool static bool
...@@ -2825,6 +2850,9 @@ rx_memory_move_cost (enum machine_mode mode, enum reg_class regclass, bool in) ...@@ -2825,6 +2850,9 @@ rx_memory_move_cost (enum machine_mode mode, enum reg_class regclass, bool in)
#undef TARGET_OPTION_OVERRIDE #undef TARGET_OPTION_OVERRIDE
#define TARGET_OPTION_OVERRIDE rx_option_override #define TARGET_OPTION_OVERRIDE rx_option_override
#undef TARGET_PROMOTE_FUNCTION_MODE
#define TARGET_PROMOTE_FUNCTION_MODE rx_promote_function_mode
#undef TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE #undef TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE
#define TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE rx_override_options_after_change #define TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE rx_override_options_after_change
......
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