@@ -216,3 +216,28 @@
(and (match_test "TARGET_H8300SX")
(match_code "mem")
(match_test "CONSTANT_P (XEXP (op, 0))")))
+
+(define_register_constraint "Z0" "NOT_R0_REGS"
+ "@internal")
+
+(define_register_constraint "Z1" "NOT_R1_REGS"
+ "@internal")
+
+(define_register_constraint "Z2" "NOT_R2_REGS"
+ "@internal")
+
+(define_register_constraint "Z3" "NOT_R3_REGS"
+ "@internal")
+
+(define_register_constraint "Z4" "NOT_R4_REGS"
+ "@internal")
+
+(define_register_constraint "Z5" "NOT_R5_REGS"
+ "@internal")
+
+(define_register_constraint "Z6" "NOT_R6_REGS"
+ "@internal")
+
+(define_register_constraint "Z7" "NOT_SP_REGS"
+ "@internal")
+
@@ -282,6 +282,8 @@ extern const char * const *h8_reg_names;
enum reg_class {
NO_REGS, COUNTER_REGS, SOURCE_REGS, DESTINATION_REGS,
+ NOT_R0_REGS, NOT_R1_REGS, NOT_R2_REGS, NOT_R3_REGS,
+ NOT_R4_REGS, NOT_R5_REGS, NOT_R6_REGS, NOT_SP_REGS,
GENERAL_REGS, MAC_REGS, ALL_REGS, LIM_REG_CLASSES
};
@@ -291,6 +293,8 @@ enum reg_class {
#define REG_CLASS_NAMES \
{ "NO_REGS", "COUNTER_REGS", "SOURCE_REGS", "DESTINATION_REGS", \
+ "NOT_R0_REGS", "NOT_R1_REGS", "NOT_R2_REGS", "NOT_R3_REGS", \
+ "NOT_R4_REGS", "NOT_R5_REGS", "NOT_R6_REGS", "NOT_SP_REGS", \
"GENERAL_REGS", "MAC_REGS", "ALL_REGS", "LIM_REGS" }
/* Define which registers fit in which classes.
@@ -302,6 +306,14 @@ enum reg_class {
{0x010}, /* COUNTER_REGS */ \
{0x020}, /* SOURCE_REGS */ \
{0x040}, /* DESTINATION_REGS */ \
+ {0x0fe}, /* NOT_R0_REGS */ \
+ {0x0fd}, /* NOT_R1_REGS */ \
+ {0x0fb}, /* NOT_R2_REGS */ \
+ {0x0f7}, /* NOT_R3_REGS */ \
+ {0x0ef}, /* NOT_R4_REGS */ \
+ {0x0df}, /* NOT_R5_REGS */ \
+ {0x0bf}, /* NOT_R6_REGS */ \
+ {0x07f}, /* NOT_SP_REGS */ \
{0xeff}, /* GENERAL_REGS */ \
{0x100}, /* MAC_REGS */ \
{0xfff}, /* ALL_REGS */ \