===================================================================
@@ -53,6 +53,8 @@ extern void c6x_expand_epilogue (bool);
extern rtx c6x_return_addr_rtx (int);
extern void c6x_set_return_address (rtx, rtx);
+
+enum reg_class c6x_regno_reg_class (int);
#endif
extern void c6x_override_options (void);
===================================================================
@@ -259,12 +259,7 @@ #define A_REG_P(X) (REG_P (X) && A_REGNO
#define CROSS_OPERANDS(X0,X1) \
(A_REG_P (X0) == A_REG_P (X1) ? CROSS_N : CROSS_Y)
-#define REGNO_REG_CLASS(reg) \
- ((reg) >= REG_A1 && (reg) <= REG_A2 ? PREDICATE_A_REGS \
- : (reg) == REG_A0 && TARGET_INSNS_64 ? PREDICATE_A_REGS \
- : (reg) >= REG_B0 && (reg) <= REG_B2 ? PREDICATE_B_REGS \
- : A_REGNO_P (reg) ? NONPREDICATE_A_REGS \
- : call_used_regs[reg] ? CALL_USED_B_REGS : B_REGS)
+#define REGNO_REG_CLASS(reg) c6x_regno_reg_class (reg)
#define BASE_REG_CLASS ALL_REGS
#define INDEX_REG_CLASS ALL_REGS
===================================================================
@@ -6677,6 +6677,28 @@ c6x_modes_tieable_p (machine_mode mode1,
&& GET_MODE_SIZE (mode2) <= UNITS_PER_WORD));
}
+/* Implement REGNO_REG_CLASS. */
+
+enum reg_class
+c6x_regno_reg_class (int reg)
+{
+ if (reg >= REG_A1 && reg <= REG_A2)
+ return PREDICATE_A_REGS;
+
+ if (reg == REG_A0 && TARGET_INSNS_64)
+ return PREDICATE_A_REGS;
+
+ if (reg >= REG_B0 && reg <= REG_B2)
+ return PREDICATE_B_REGS;
+
+ if (A_REGNO_P (reg))
+ return NONPREDICATE_A_REGS;
+
+ if (call_used_regs[reg])
+ return CALL_USED_B_REGS;
+
+ return B_REGS;
+}
/* Target Structure. */