+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.
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
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);
}
/* 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. */
/* ------------------------------------------------------------------------ */
/* 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
/* 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
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.
/* A C structure that contains the arguments information. */
typedef struct
{
- unsigned int reg_offset;
+ unsigned int gpr_offset;
} nds32_cumulative_args;
/* ------------------------------------------------------------------------ */
'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