* config/m32r/m32r.h (HARD_REGNO_RENAME_OK): New.
* config/m32r/m32r.c (m32r_hard_regno_rename_ok): New.
* config/m32r/m32r-protos.h: Prototype it.
From-SVN: r67711
+2003-06-10 Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
+
+ * config/m32r/m32r.h (HARD_REGNO_RENAME_OK): New.
+ * config/m32r/m32r.c (m32r_hard_regno_rename_ok): New.
+ * config/m32r/m32r-protos.h: Prototype it.
+
2003-06-10 Janis Johnson <janis187@us.ibm.com>
* config/rs6000/eabi.h (TARGET_OS_CPP_BUILTINS): Define builtins
extern void m32r_print_operand PARAMS ((FILE *, rtx, int));
extern void m32r_print_operand_address PARAMS ((FILE *, rtx));
extern int m32r_not_same_reg PARAMS ((rtx, rtx));
+extern int m32r_hard_regno_rename_ok PARAMS ((unsigned int,
+ unsigned int));
#ifdef HAVE_MACHINE_MODES
extern int call_address_operand PARAMS ((rtx, Mmode));
return 1;
}
+
+/* Return true if using NEW_REG in place of OLD_REG is ok. */
+
+int
+m32r_hard_regno_rename_ok (old_reg, new_reg)
+ unsigned int old_reg ATTRIBUTE_UNUSED;
+ unsigned int new_reg;
+{
+ /* Interrupt routines can't clobber any register that isn't already used. */
+ if (lookup_attribute ("interrupt", DECL_ATTRIBUTES (current_function_decl))
+ && !regs_ever_live[new_reg])
+ return 0;
+
+ /* We currently emit epilogues as text, not rtl, so the liveness
+ of the return address register isn't visible. */
+ if (current_function_is_leaf && new_reg == RETURN_ADDR_REGNUM)
+ return 0;
+
+ return 1;
+}
&& GET_MODE_CLASS (MODE2) == MODE_INT \
&& GET_MODE_SIZE (MODE1) <= UNITS_PER_WORD \
&& GET_MODE_SIZE (MODE2) <= UNITS_PER_WORD)
+
+#define HARD_REGNO_RENAME_OK(OLD_REG, NEW_REG) \
+ m32r_hard_regno_rename_ok (OLD_REG, NEW_REG)
\f
/* Register classes and constants. */