[NDS32] Define and rename some GPR-specific stuff.

* config/nds32/nds32.c (nds32_function_arg): Define and rename some
	GPR-specific stuff.
	(nds32_function_arg_advance): Likewise.
	(nds32_init_cumulative_args): Likewise.
	* config/nds32/nds32.h (NDS32_MAX_GPR_REGS_FOR_ARGS): Define.
	(NDS32_FIRST_GPR_REGNUM): Define.
	(NDS32_LAST_GPR_REGNUM): Define.
	(NDS32_AVAILABLE_REGNUM_FOR_GPR_ARG): Define.
	(NDS32_ARG_PASS_IN_REG_P): Use NDS32_MAX_GPR_REGS_FOR_ARGS.
	(FUNCTION_ARG_REGNO_P): Use NDS32_MAX_GPR_REGS_FOR_ARGS.
	(machine_function): Use GRP-specific stuff.

From-SVN: r214859
This commit is contained in:
Chung-Ju Wu 2014-09-03 09:16:51 +00:00 committed by Chung-Ju Wu
parent 38a0632eb7
commit 9d93cc2467
3 changed files with 33 additions and 15 deletions

View File

@ -1,3 +1,17 @@
2014-09-03 Chung-Ju Wu <jasonwucj@gmail.com>
* config/nds32/nds32.c (nds32_function_arg): Define and rename some
GPR-specific stuff.
(nds32_function_arg_advance): Likewise.
(nds32_init_cumulative_args): Likewise.
* config/nds32/nds32.h (NDS32_MAX_GPR_REGS_FOR_ARGS): Define.
(NDS32_FIRST_GPR_REGNUM): Define.
(NDS32_LAST_GPR_REGNUM): Define.
(NDS32_AVAILABLE_REGNUM_FOR_GPR_ARG): Define.
(NDS32_ARG_PASS_IN_REG_P): Use NDS32_MAX_GPR_REGS_FOR_ARGS.
(FUNCTION_ARG_REGNO_P): Use NDS32_MAX_GPR_REGS_FOR_ARGS.
(machine_function): Use GRP-specific stuff.
2014-09-03 Chung-Ju Wu <jasonwucj@gmail.com>
* config/nds32/nds32.c (nds32_expand_prologue): Remove unused variables.

View File

@ -1294,12 +1294,12 @@ nds32_function_arg (cumulative_args_t ca, enum machine_mode mode,
return NULL_RTX;
/* If there are still registers available, return it. */
if (NDS32_ARG_PASS_IN_REG_P (cum->reg_offset, mode, type))
if (NDS32_ARG_PASS_IN_REG_P (cum->gpr_offset, mode, type))
{
/* Pick up the next available register number. */
unsigned int regno;
regno = NDS32_AVAILABLE_REGNUM_FOR_ARG (cum->reg_offset, mode, type);
regno = NDS32_AVAILABLE_REGNUM_FOR_GPR_ARG (cum->gpr_offset, mode, type);
return gen_rtx_REG (mode, regno);
}
else
@ -1320,8 +1320,8 @@ nds32_function_arg_advance (cumulative_args_t ca, enum machine_mode mode,
Only named argument could be advanced. */
if (named)
{
cum->reg_offset
= NDS32_AVAILABLE_REGNUM_FOR_ARG (cum->reg_offset, mode, type)
cum->gpr_offset
= NDS32_AVAILABLE_REGNUM_FOR_GPR_ARG (cum->gpr_offset, mode, type)
- NDS32_GPR_ARG_FIRST_REGNUM
+ NDS32_NEED_N_REGS_FOR_ARG (mode, type);
}
@ -2656,7 +2656,7 @@ nds32_init_cumulative_args (CUMULATIVE_ARGS *cum,
/* Initial available registers
(in offset, corresponding to NDS32_GPR_ARG_FIRST_REGNUM)
for passing arguments. */
cum->reg_offset = 0;
cum->gpr_offset = 0;
}
/* -- Function Entry and Exit. */

View File

@ -109,7 +109,7 @@ enum nds32_16bit_address_type
/* ------------------------------------------------------------------------ */
/* Define maximum numbers of registers for passing arguments. */
#define NDS32_MAX_REGS_FOR_ARGS 6
#define NDS32_MAX_GPR_REGS_FOR_ARGS 6
/* Define the register number for first argument. */
#define NDS32_GPR_ARG_FIRST_REGNUM 0
@ -117,6 +117,10 @@ enum nds32_16bit_address_type
/* Define the register number for return value. */
#define NDS32_GPR_RET_FIRST_REGNUM 0
/* Define the first integer register number. */
#define NDS32_FIRST_GPR_REGNUM 0
/* Define the last integer register number. */
#define NDS32_LAST_GPR_REGNUM 31
/* Define double word alignment bits. */
#define NDS32_DOUBLE_WORD_ALIGNMENT 64
@ -154,19 +158,19 @@ enum nds32_16bit_address_type
b) Otherwise, the register number can be odd or even value.
2. If it is required ONLY one register,
the register number can be odd or even value. */
#define NDS32_AVAILABLE_REGNUM_FOR_ARG(reg_offset, mode, type) \
((NDS32_NEED_N_REGS_FOR_ARG (mode, type) > 1) \
? ((NDS32_MODE_TYPE_ALIGN (mode, type) > PARM_BOUNDARY) \
? (((reg_offset) + NDS32_GPR_ARG_FIRST_REGNUM + 1) & ~1) \
: ((reg_offset) + NDS32_GPR_ARG_FIRST_REGNUM)) \
#define NDS32_AVAILABLE_REGNUM_FOR_GPR_ARG(reg_offset, mode, type) \
((NDS32_NEED_N_REGS_FOR_ARG (mode, type) > 1) \
? ((NDS32_MODE_TYPE_ALIGN (mode, type) > PARM_BOUNDARY) \
? (((reg_offset) + NDS32_GPR_ARG_FIRST_REGNUM + 1) & ~1) \
: ((reg_offset) + NDS32_GPR_ARG_FIRST_REGNUM)) \
: ((reg_offset) + NDS32_GPR_ARG_FIRST_REGNUM))
/* This macro is to check if there are still available registers
for passing argument. */
#define NDS32_ARG_PASS_IN_REG_P(reg_offset, mode, type) \
(((reg_offset) < NDS32_MAX_REGS_FOR_ARGS) \
(((reg_offset) < NDS32_MAX_GPR_REGS_FOR_ARGS) \
&& ((reg_offset) + NDS32_NEED_N_REGS_FOR_ARG (mode, type) \
<= NDS32_MAX_REGS_FOR_ARGS))
<= NDS32_MAX_GPR_REGS_FOR_ARGS))
/* This macro is to check if the register is required to be saved on stack.
If call_used_regs[regno] == 0, regno is the callee-saved register.
@ -227,7 +231,7 @@ struct GTY(()) machine_function
/* A C structure that contains the arguments information. */
typedef struct
{
unsigned int reg_offset;
unsigned int gpr_offset;
} nds32_cumulative_args;
/* ------------------------------------------------------------------------ */
@ -710,7 +714,7 @@ enum reg_class
'comparison of unsigned expression >= 0 is always true' warning. */
#define FUNCTION_ARG_REGNO_P(regno) \
(((int) regno - NDS32_GPR_ARG_FIRST_REGNUM >= 0) \
&& ((int) regno - NDS32_GPR_ARG_FIRST_REGNUM < NDS32_MAX_REGS_FOR_ARGS))
&& ((int) regno - NDS32_GPR_ARG_FIRST_REGNUM < NDS32_MAX_GPR_REGS_FOR_ARGS))
#define DEFAULT_PCC_STRUCT_RETURN 0