mips.h (LIBCALL_VALUE, [...]): Remove macros.
* config/mips/mips.h (LIBCALL_VALUE, FUNCTION_VALUE, FUNCTION_VALUE_REGNO_P): Remove macros. * config/mips/mips-protos.h (mips_function_value): Remove. * config/mips/mips.c (mips_function_value): Rename to... (mips_function_value_1): ... this. Make static. Handle receiving the function type in 'fn_decl_or_type' argument. (mips_function_value, mips_libcall_value, mips_function_value_regno_p): New function. (TARGET_FUNCTION_VALUE, TARGET_LIBCALL_VALUE, TARGET_FUNCTION_VALUE_REGNO_P): Define. From-SVN: r171580
This commit is contained in:
parent
c29301d6b1
commit
47be3d6d5c
@ -1,3 +1,16 @@
|
|||||||
|
2011-03-27 Anatoly Sokolov <aesok@post.ru>
|
||||||
|
|
||||||
|
* config/mips/mips.h (LIBCALL_VALUE, FUNCTION_VALUE,
|
||||||
|
FUNCTION_VALUE_REGNO_P): Remove macros.
|
||||||
|
* config/mips/mips-protos.h (mips_function_value): Remove.
|
||||||
|
* config/mips/mips.c (mips_function_value): Rename to...
|
||||||
|
(mips_function_value_1): ... this. Make static. Handle receiving
|
||||||
|
the function type in 'fn_decl_or_type' argument.
|
||||||
|
(mips_function_value, mips_libcall_value,
|
||||||
|
mips_function_value_regno_p): New function.
|
||||||
|
(TARGET_FUNCTION_VALUE, TARGET_LIBCALL_VALUE,
|
||||||
|
TARGET_FUNCTION_VALUE_REGNO_P): Define.
|
||||||
|
|
||||||
2011-03-27 H.J. Lu <hongjiu.lu@intel.com>
|
2011-03-27 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* config/i386/i386.c (flag_opts): Add -mavx256-split-unaligned-load
|
* config/i386/i386.c (flag_opts): Add -mavx256-split-unaligned-load
|
||||||
|
@ -277,7 +277,6 @@ extern void mips_expand_prologue (void);
|
|||||||
extern void mips_expand_before_return (void);
|
extern void mips_expand_before_return (void);
|
||||||
extern void mips_expand_epilogue (bool);
|
extern void mips_expand_epilogue (bool);
|
||||||
extern bool mips_can_use_return_insn (void);
|
extern bool mips_can_use_return_insn (void);
|
||||||
extern rtx mips_function_value (const_tree, const_tree, enum machine_mode);
|
|
||||||
|
|
||||||
extern bool mips_cannot_change_mode_class (enum machine_mode,
|
extern bool mips_cannot_change_mode_class (enum machine_mode,
|
||||||
enum machine_mode, enum reg_class);
|
enum machine_mode, enum reg_class);
|
||||||
|
@ -5247,17 +5247,24 @@ mips_return_fpr_pair (enum machine_mode mode,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Implement FUNCTION_VALUE and LIBCALL_VALUE. For normal calls,
|
/* Implement TARGET_FUNCTION_VALUE and TARGET_LIBCALL_VALUE.
|
||||||
VALTYPE is the return type and MODE is VOIDmode. For libcalls,
|
For normal calls, VALTYPE is the return type and MODE is VOIDmode.
|
||||||
VALTYPE is null and MODE is the mode of the return value. */
|
For libcalls, VALTYPE is null and MODE is the mode of the return value. */
|
||||||
|
|
||||||
rtx
|
static rtx
|
||||||
mips_function_value (const_tree valtype, const_tree func, enum machine_mode mode)
|
mips_function_value_1 (const_tree valtype, const_tree fn_decl_or_type,
|
||||||
|
enum machine_mode mode)
|
||||||
{
|
{
|
||||||
if (valtype)
|
if (valtype)
|
||||||
{
|
{
|
||||||
tree fields[2];
|
tree fields[2];
|
||||||
int unsigned_p;
|
int unsigned_p;
|
||||||
|
const_tree func;
|
||||||
|
|
||||||
|
if (fn_decl_or_type && DECL_P (fn_decl_or_type))
|
||||||
|
func = fn_decl_or_type;
|
||||||
|
else
|
||||||
|
func = NULL;
|
||||||
|
|
||||||
mode = TYPE_MODE (valtype);
|
mode = TYPE_MODE (valtype);
|
||||||
unsigned_p = TYPE_UNSIGNED (valtype);
|
unsigned_p = TYPE_UNSIGNED (valtype);
|
||||||
@ -5324,6 +5331,41 @@ mips_function_value (const_tree valtype, const_tree func, enum machine_mode mode
|
|||||||
return gen_rtx_REG (mode, GP_RETURN);
|
return gen_rtx_REG (mode, GP_RETURN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Implement TARGET_FUNCTION_VALUE. */
|
||||||
|
|
||||||
|
static rtx
|
||||||
|
mips_function_value (const_tree valtype, const_tree fn_decl_or_type,
|
||||||
|
bool outgoing ATTRIBUTE_UNUSED)
|
||||||
|
{
|
||||||
|
return mips_function_value_1 (valtype, fn_decl_or_type, VOIDmode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Implement TARGET_LIBCALL_VALUE. */
|
||||||
|
|
||||||
|
static rtx
|
||||||
|
mips_libcall_value (enum machine_mode mode, const_rtx fun ATTRIBUTE_UNUSED)
|
||||||
|
{
|
||||||
|
return mips_function_value_1 (NULL_TREE, NULL_TREE, mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Implement TARGET_FUNCTION_VALUE_REGNO_P.
|
||||||
|
|
||||||
|
On the MIPS, R2 R3 and F0 F2 are the only register thus used.
|
||||||
|
Currently, R2 and F0 are only implemented here (C has no complex type). */
|
||||||
|
|
||||||
|
static bool
|
||||||
|
mips_function_value_regno_p (const unsigned int regno)
|
||||||
|
{
|
||||||
|
if (regno == GP_RETURN
|
||||||
|
|| regno == FP_RETURN
|
||||||
|
|| (LONG_DOUBLE_TYPE_SIZE == 128
|
||||||
|
&& FP_RETURN != GP_RETURN
|
||||||
|
&& regno == FP_RETURN + 2))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/* Implement TARGET_RETURN_IN_MEMORY. Under the o32 and o64 ABIs,
|
/* Implement TARGET_RETURN_IN_MEMORY. Under the o32 and o64 ABIs,
|
||||||
all BLKmode objects are returned in memory. Under the n32, n64
|
all BLKmode objects are returned in memory. Under the n32, n64
|
||||||
and embedded ABIs, small structures are returned in a register.
|
and embedded ABIs, small structures are returned in a register.
|
||||||
@ -16481,6 +16523,12 @@ mips_shift_truncation_mask (enum machine_mode mode)
|
|||||||
#undef TARGET_PROMOTE_PROTOTYPES
|
#undef TARGET_PROMOTE_PROTOTYPES
|
||||||
#define TARGET_PROMOTE_PROTOTYPES hook_bool_const_tree_true
|
#define TARGET_PROMOTE_PROTOTYPES hook_bool_const_tree_true
|
||||||
|
|
||||||
|
#undef TARGET_FUNCTION_VALUE
|
||||||
|
#define TARGET_FUNCTION_VALUE mips_function_value
|
||||||
|
#undef TARGET_LIBCALL_VALUE
|
||||||
|
#define TARGET_LIBCALL_VALUE mips_libcall_value
|
||||||
|
#undef TARGET_FUNCTION_VALUE_REGNO_P
|
||||||
|
#define TARGET_FUNCTION_VALUE_REGNO_P mips_function_value_regno_p
|
||||||
#undef TARGET_RETURN_IN_MEMORY
|
#undef TARGET_RETURN_IN_MEMORY
|
||||||
#define TARGET_RETURN_IN_MEMORY mips_return_in_memory
|
#define TARGET_RETURN_IN_MEMORY mips_return_in_memory
|
||||||
#undef TARGET_RETURN_IN_MSB
|
#undef TARGET_RETURN_IN_MSB
|
||||||
|
@ -2150,20 +2150,6 @@ enum reg_class
|
|||||||
#define FP_ARG_FIRST (FP_REG_FIRST + 12)
|
#define FP_ARG_FIRST (FP_REG_FIRST + 12)
|
||||||
#define FP_ARG_LAST (FP_ARG_FIRST + MAX_ARGS_IN_REGISTERS - 1)
|
#define FP_ARG_LAST (FP_ARG_FIRST + MAX_ARGS_IN_REGISTERS - 1)
|
||||||
|
|
||||||
#define LIBCALL_VALUE(MODE) \
|
|
||||||
mips_function_value (NULL_TREE, NULL_TREE, MODE)
|
|
||||||
|
|
||||||
#define FUNCTION_VALUE(VALTYPE, FUNC) \
|
|
||||||
mips_function_value (VALTYPE, FUNC, VOIDmode)
|
|
||||||
|
|
||||||
/* 1 if N is a possible register number for a function value.
|
|
||||||
On the MIPS, R2 R3 and F0 F2 are the only register thus used.
|
|
||||||
Currently, R2 and F0 are only implemented here (C has no complex type) */
|
|
||||||
|
|
||||||
#define FUNCTION_VALUE_REGNO_P(N) ((N) == GP_RETURN || (N) == FP_RETURN \
|
|
||||||
|| (LONG_DOUBLE_TYPE_SIZE == 128 && FP_RETURN != GP_RETURN \
|
|
||||||
&& (N) == FP_RETURN + 2))
|
|
||||||
|
|
||||||
/* 1 if N is a possible register number for function argument passing.
|
/* 1 if N is a possible register number for function argument passing.
|
||||||
We have no FP argument registers when soft-float. When FP registers
|
We have no FP argument registers when soft-float. When FP registers
|
||||||
are 32 bits, we can't directly reference the odd numbered ones. */
|
are 32 bits, we can't directly reference the odd numbered ones. */
|
||||||
|
Loading…
Reference in New Issue
Block a user