ia64.c (ia64_promote_function_mode): Remove.

2011-12-22  Tristan Gingold  <gingold@adacore.com>

	* config/ia64/ia64.c (ia64_promote_function_mode): Remove.
	(TARGET_PROMOTE_FUNCTION_MODE): Remove.
	(ia64_function_value): Call promote_function_mode instead of
	ia64_promote_function_mode.
	* config/ia64/vms.h (PROMOTE_MODE): Define.
	(TARGET_PROMOTE_FUNCTION_MODE): Define.

From-SVN: r182627
This commit is contained in:
Tristan Gingold 2011-12-22 16:40:11 +00:00 committed by Tristan Gingold
parent 64729d8c5d
commit 8ee9572772
3 changed files with 34 additions and 48 deletions

View File

@ -1,3 +1,12 @@
2011-12-22 Tristan Gingold <gingold@adacore.com>
* config/ia64/ia64.c (ia64_promote_function_mode): Remove.
(TARGET_PROMOTE_FUNCTION_MODE): Remove.
(ia64_function_value): Call promote_function_mode instead of
ia64_promote_function_mode.
* config/ia64/vms.h (PROMOTE_MODE): Define.
(TARGET_PROMOTE_FUNCTION_MODE): Define.
2011-12-22 Uros Bizjak <ubizjak@gmail.com>
PR target/27468

View File

@ -316,11 +316,6 @@ static const char *ia64_invalid_conversion (const_tree, const_tree);
static const char *ia64_invalid_unary_op (int, const_tree);
static const char *ia64_invalid_binary_op (int, const_tree, const_tree);
static enum machine_mode ia64_c_mode_for_suffix (char);
static enum machine_mode ia64_promote_function_mode (const_tree,
enum machine_mode,
int *,
const_tree,
int);
static void ia64_trampoline_init (rtx, tree, rtx);
static void ia64_override_options_after_change (void);
@ -546,9 +541,6 @@ static const struct attribute_spec ia64_attribute_table[] =
#define TARGET_ASM_OUTPUT_DWARF_DTPREL ia64_output_dwarf_dtprel
#endif
#undef TARGET_PROMOTE_FUNCTION_MODE
#define TARGET_PROMOTE_FUNCTION_MODE ia64_promote_function_mode
/* ??? Investigate. */
#if 0
#undef TARGET_PROMOTE_PROTOTYPES
@ -5013,9 +5005,9 @@ ia64_function_value (const_tree valtype,
return gen_rtx_PARALLEL (mode, gen_rtvec_v (i, loc));
}
mode = ia64_promote_function_mode (valtype, mode, &unsignedp,
func ? TREE_TYPE (func) : NULL_TREE,
true);
mode = promote_function_mode (valtype, mode, &unsignedp,
func ? TREE_TYPE (func) : NULL_TREE,
true);
return gen_rtx_REG (mode, GR_RET_FIRST);
}
@ -10984,43 +10976,6 @@ ia64_c_mode_for_suffix (char suffix)
return VOIDmode;
}
static enum machine_mode
ia64_promote_function_mode (const_tree type,
enum machine_mode mode,
int *punsignedp,
const_tree funtype,
int for_return)
{
/* Special processing required for OpenVMS ... */
if (!TARGET_ABI_OPEN_VMS)
return default_promote_function_mode(type, mode, punsignedp, funtype,
for_return);
/* HP OpenVMS Calling Standard dated June, 2004, that describes
HP OpenVMS I64 Version 8.2EFT,
chapter 4 "OpenVMS I64 Conventions"
section 4.7 "Procedure Linkage"
subsection 4.7.5.2, "Normal Register Parameters"
"Unsigned integral (except unsigned 32-bit), set, and VAX floating-point
values passed in registers are zero-filled; signed integral values as
well as unsigned 32-bit integral values are sign-extended to 64 bits.
For all other types passed in the general registers, unused bits are
undefined." */
if (for_return != 2
&& GET_MODE_CLASS (mode) == MODE_INT
&& GET_MODE_SIZE (mode) < UNITS_PER_WORD)
{
if (mode == SImode)
*punsignedp = 0;
return DImode;
}
else
return promote_mode (type, mode, punsignedp);
}
static GTY(()) rtx ia64_dconst_0_5_rtx;
rtx

View File

@ -135,3 +135,25 @@ STATIC func_ptr __CTOR_LIST__[1] \
#undef TARGET_ASM_NAMED_SECTION
#define TARGET_ASM_NAMED_SECTION ia64_vms_elf_asm_named_section
/* Define this macro if it is advisable to hold scalars in registers
in a wider mode than that declared by the program. In such cases,
the value is constrained to be within the bounds of the declared
type, but kept valid in the wider mode. The signedness of the
extension may differ from that of the type.
For ia64, we always store objects in a full register. 32-bit integers
are always sign-extended, but smaller objects retain their signedness. */
#undef PROMOTE_MODE
#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \
if (GET_MODE_CLASS (MODE) == MODE_INT \
&& GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \
{ \
if ((MODE) == SImode) \
(UNSIGNEDP) = 0; \
(MODE) = DImode; \
}
#undef TARGET_PROMOTE_FUNCTION_MODE
#define TARGET_PROMOTE_FUNCTION_MODE default_promote_function_mode_always_promote