diff --git a/lib/Target/WDC65816/MCTargetDesc/WDC65816MCTargetDesc.cpp b/lib/Target/WDC65816/MCTargetDesc/WDC65816MCTargetDesc.cpp index 9c728628..d470a2b9 100644 --- a/lib/Target/WDC65816/MCTargetDesc/WDC65816MCTargetDesc.cpp +++ b/lib/Target/WDC65816/MCTargetDesc/WDC65816MCTargetDesc.cpp @@ -39,7 +39,7 @@ static MCInstrInfo *createWDC65816MCInstrInfo() { static MCRegisterInfo *createWDC65816MCRegisterInfo(StringRef TT) { MCRegisterInfo *X = new MCRegisterInfo(); - InitWDC65816MCRegisterInfo(X, WDC::FP); + InitWDC65816MCRegisterInfo(X, WDC::dpI32_0); // The frame pointer is the 0th 32-bit direct page register return X; } diff --git a/lib/Target/WDC65816/WDC65816RegisterInfo.cpp b/lib/Target/WDC65816/WDC65816RegisterInfo.cpp index 8352a8b5..d345c17f 100644 --- a/lib/Target/WDC65816/WDC65816RegisterInfo.cpp +++ b/lib/Target/WDC65816/WDC65816RegisterInfo.cpp @@ -64,14 +64,14 @@ BitVector WDC65816RegisterInfo::getReservedRegs(const MachineFunction &MF) const Reserved.set(WDC::K); Reserved.set(WDC::B); Reserved.set(WDC::PC); - Reserved.set(WDC::FP); + Reserved.set(WDC::dpI32_0); // This register is used as the frame pointer. return Reserved; } unsigned WDC65816RegisterInfo::getFrameRegister(const MachineFunction &MF) const { - return WDC::FP; + return WDC::dpI32_0; } diff --git a/lib/Target/WDC65816/WDC65816RegisterInfo.td b/lib/Target/WDC65816/WDC65816RegisterInfo.td index 265cc4b6..2d397d26 100644 --- a/lib/Target/WDC65816/WDC65816RegisterInfo.td +++ b/lib/Target/WDC65816/WDC65816RegisterInfo.td @@ -21,38 +21,449 @@ let Namespace = "WDC" in { def K : Register<"K">; def B : Register<"B">; def PC : Register<"PC">; - def FP : Register<"FP">; // WDC_TODO - this will end up being a 32-bit zero page value } -// WDC_TODO - model all zero page values as a series of 16-bit, 32-bit, 64-bit registers -// Also model them as floating point registers. + +// Subregister indices. +let Namespace = "WDC" in { + def sub_16bit_lo : SubRegIndex<16>; + def sub_16bit_hi : SubRegIndex<16>; + def sub_32bit : SubRegIndex<32>; + def sub_32bit_lo : SubRegIndex<32>; + def sub_32bit_hi : SubRegIndex<32>; + def sub_64bit : SubRegIndex<64>; +} + + +class WDCDpRegval, list subregs = []> : Register { + let Namespace = "WDC"; + let HWEncoding = val; + let SubRegs = subregs; +} + +def dpI16_0 : WDCDpReg<"dpI16_0", 0>; +def dpI16_1 : WDCDpReg<"dpI16_1", 2>; +def dpI16_2 : WDCDpReg<"dpI16_2", 4>; +def dpI16_3 : WDCDpReg<"dpI16_3", 6>; +def dpI16_4 : WDCDpReg<"dpI16_4", 8>; +def dpI16_5 : WDCDpReg<"dpI16_5", 10>; +def dpI16_6 : WDCDpReg<"dpI16_6", 12>; +def dpI16_7 : WDCDpReg<"dpI16_7", 14>; +def dpI16_8 : WDCDpReg<"dpI16_8", 16>; +def dpI16_9 : WDCDpReg<"dpI16_9", 18>; +def dpI16_10 : WDCDpReg<"dpI16_10", 20>; +def dpI16_11 : WDCDpReg<"dpI16_11", 22>; +def dpI16_12 : WDCDpReg<"dpI16_12", 24>; +def dpI16_13 : WDCDpReg<"dpI16_13", 26>; +def dpI16_14 : WDCDpReg<"dpI16_14", 28>; +def dpI16_15 : WDCDpReg<"dpI16_15", 30>; +def dpI16_16 : WDCDpReg<"dpI16_16", 32>; +def dpI16_17 : WDCDpReg<"dpI16_17", 34>; +def dpI16_18 : WDCDpReg<"dpI16_18", 36>; +def dpI16_19 : WDCDpReg<"dpI16_19", 38>; +def dpI16_20 : WDCDpReg<"dpI16_20", 40>; +def dpI16_21 : WDCDpReg<"dpI16_21", 42>; +def dpI16_22 : WDCDpReg<"dpI16_22", 44>; +def dpI16_23 : WDCDpReg<"dpI16_23", 46>; +def dpI16_24 : WDCDpReg<"dpI16_24", 48>; +def dpI16_25 : WDCDpReg<"dpI16_25", 50>; +def dpI16_26 : WDCDpReg<"dpI16_26", 52>; +def dpI16_27 : WDCDpReg<"dpI16_27", 54>; +def dpI16_28 : WDCDpReg<"dpI16_28", 56>; +def dpI16_29 : WDCDpReg<"dpI16_29", 58>; +def dpI16_30 : WDCDpReg<"dpI16_30", 60>; +def dpI16_31 : WDCDpReg<"dpI16_31", 62>; +def dpI16_32 : WDCDpReg<"dpI16_32", 64>; +def dpI16_33 : WDCDpReg<"dpI16_33", 66>; +def dpI16_34 : WDCDpReg<"dpI16_34", 68>; +def dpI16_35 : WDCDpReg<"dpI16_35", 70>; +def dpI16_36 : WDCDpReg<"dpI16_36", 72>; +def dpI16_37 : WDCDpReg<"dpI16_37", 74>; +def dpI16_38 : WDCDpReg<"dpI16_38", 76>; +def dpI16_39 : WDCDpReg<"dpI16_39", 78>; +def dpI16_40 : WDCDpReg<"dpI16_40", 80>; +def dpI16_41 : WDCDpReg<"dpI16_41", 82>; +def dpI16_42 : WDCDpReg<"dpI16_42", 84>; +def dpI16_43 : WDCDpReg<"dpI16_43", 86>; +def dpI16_44 : WDCDpReg<"dpI16_44", 88>; +def dpI16_45 : WDCDpReg<"dpI16_45", 90>; +def dpI16_46 : WDCDpReg<"dpI16_46", 92>; +def dpI16_47 : WDCDpReg<"dpI16_47", 94>; +def dpI16_48 : WDCDpReg<"dpI16_48", 96>; +def dpI16_49 : WDCDpReg<"dpI16_49", 98>; +def dpI16_50 : WDCDpReg<"dpI16_50", 100>; +def dpI16_51 : WDCDpReg<"dpI16_51", 102>; +def dpI16_52 : WDCDpReg<"dpI16_52", 104>; +def dpI16_53 : WDCDpReg<"dpI16_53", 106>; +def dpI16_54 : WDCDpReg<"dpI16_54", 108>; +def dpI16_55 : WDCDpReg<"dpI16_55", 110>; +def dpI16_56 : WDCDpReg<"dpI16_56", 112>; +def dpI16_57 : WDCDpReg<"dpI16_57", 114>; +def dpI16_58 : WDCDpReg<"dpI16_58", 116>; +def dpI16_59 : WDCDpReg<"dpI16_59", 118>; +def dpI16_60 : WDCDpReg<"dpI16_60", 120>; +def dpI16_61 : WDCDpReg<"dpI16_61", 122>; +def dpI16_62 : WDCDpReg<"dpI16_62", 124>; +def dpI16_63 : WDCDpReg<"dpI16_63", 126>; +def dpI16_64 : WDCDpReg<"dpI16_64", 128>; +def dpI16_65 : WDCDpReg<"dpI16_65", 130>; +def dpI16_66 : WDCDpReg<"dpI16_66", 132>; +def dpI16_67 : WDCDpReg<"dpI16_67", 134>; +def dpI16_68 : WDCDpReg<"dpI16_68", 136>; +def dpI16_69 : WDCDpReg<"dpI16_69", 138>; +def dpI16_70 : WDCDpReg<"dpI16_70", 140>; +def dpI16_71 : WDCDpReg<"dpI16_71", 142>; +def dpI16_72 : WDCDpReg<"dpI16_72", 144>; +def dpI16_73 : WDCDpReg<"dpI16_73", 146>; +def dpI16_74 : WDCDpReg<"dpI16_74", 148>; +def dpI16_75 : WDCDpReg<"dpI16_75", 150>; +def dpI16_76 : WDCDpReg<"dpI16_76", 152>; +def dpI16_77 : WDCDpReg<"dpI16_77", 154>; +def dpI16_78 : WDCDpReg<"dpI16_78", 156>; +def dpI16_79 : WDCDpReg<"dpI16_79", 158>; +def dpI16_80 : WDCDpReg<"dpI16_80", 160>; +def dpI16_81 : WDCDpReg<"dpI16_81", 162>; +def dpI16_82 : WDCDpReg<"dpI16_82", 164>; +def dpI16_83 : WDCDpReg<"dpI16_83", 166>; +def dpI16_84 : WDCDpReg<"dpI16_84", 168>; +def dpI16_85 : WDCDpReg<"dpI16_85", 170>; +def dpI16_86 : WDCDpReg<"dpI16_86", 172>; +def dpI16_87 : WDCDpReg<"dpI16_87", 174>; +def dpI16_88 : WDCDpReg<"dpI16_88", 176>; +def dpI16_89 : WDCDpReg<"dpI16_89", 178>; +def dpI16_90 : WDCDpReg<"dpI16_90", 180>; +def dpI16_91 : WDCDpReg<"dpI16_91", 182>; +def dpI16_92 : WDCDpReg<"dpI16_92", 184>; +def dpI16_93 : WDCDpReg<"dpI16_93", 186>; +def dpI16_94 : WDCDpReg<"dpI16_94", 188>; +def dpI16_95 : WDCDpReg<"dpI16_95", 190>; +def dpI16_96 : WDCDpReg<"dpI16_96", 192>; +def dpI16_97 : WDCDpReg<"dpI16_97", 194>; +def dpI16_98 : WDCDpReg<"dpI16_98", 196>; +def dpI16_99 : WDCDpReg<"dpI16_99", 198>; +def dpI16_100 : WDCDpReg<"dpI16_100", 200>; +def dpI16_101 : WDCDpReg<"dpI16_101", 202>; +def dpI16_102 : WDCDpReg<"dpI16_102", 204>; +def dpI16_103 : WDCDpReg<"dpI16_103", 206>; +def dpI16_104 : WDCDpReg<"dpI16_104", 208>; +def dpI16_105 : WDCDpReg<"dpI16_105", 210>; +def dpI16_106 : WDCDpReg<"dpI16_106", 212>; +def dpI16_107 : WDCDpReg<"dpI16_107", 214>; +def dpI16_108 : WDCDpReg<"dpI16_108", 216>; +def dpI16_109 : WDCDpReg<"dpI16_109", 218>; +def dpI16_110 : WDCDpReg<"dpI16_110", 220>; +def dpI16_111 : WDCDpReg<"dpI16_111", 222>; +def dpI16_112 : WDCDpReg<"dpI16_112", 224>; +def dpI16_113 : WDCDpReg<"dpI16_113", 226>; +def dpI16_114 : WDCDpReg<"dpI16_114", 228>; +def dpI16_115 : WDCDpReg<"dpI16_115", 230>; +def dpI16_116 : WDCDpReg<"dpI16_116", 232>; +def dpI16_117 : WDCDpReg<"dpI16_117", 234>; +def dpI16_118 : WDCDpReg<"dpI16_118", 236>; +def dpI16_119 : WDCDpReg<"dpI16_119", 238>; +def dpI16_120 : WDCDpReg<"dpI16_120", 240>; +def dpI16_121 : WDCDpReg<"dpI16_121", 242>; +def dpI16_122 : WDCDpReg<"dpI16_122", 244>; +def dpI16_123 : WDCDpReg<"dpI16_123", 246>; +def dpI16_124 : WDCDpReg<"dpI16_124", 248>; +def dpI16_125 : WDCDpReg<"dpI16_125", 250>; +def dpI16_126 : WDCDpReg<"dpI16_126", 252>; +def dpI16_127 : WDCDpReg<"dpI16_127", 254>; + + +let SubRegIndices = [sub_16bit_lo, sub_16bit_hi], CoveredBySubRegs = 1 in { +def dpI32_0 : WDCDpReg<"dpI32_0", 0, [dpI16_0, dpI16_1]>; // This is reserved as the frame pointer! +def dpI32_1 : WDCDpReg<"dpI32_1", 4, [dpI16_2, dpI16_3]>; +def dpI32_2 : WDCDpReg<"dpI32_2", 8, [dpI16_4, dpI16_5]>; +def dpI32_3 : WDCDpReg<"dpI32_3", 12, [dpI16_6, dpI16_7]>; +def dpI32_4 : WDCDpReg<"dpI32_4", 16, [dpI16_8, dpI16_9]>; +def dpI32_5 : WDCDpReg<"dpI32_5", 20, [dpI16_10, dpI16_11]>; +def dpI32_6 : WDCDpReg<"dpI32_6", 24, [dpI16_12, dpI16_13]>; +def dpI32_7 : WDCDpReg<"dpI32_7", 28, [dpI16_14, dpI16_15]>; +def dpI32_8 : WDCDpReg<"dpI32_8", 32, [dpI16_16, dpI16_17]>; +def dpI32_9 : WDCDpReg<"dpI32_9", 36, [dpI16_18, dpI16_19]>; +def dpI32_10 : WDCDpReg<"dpI32_10", 40, [dpI16_20, dpI16_21]>; +def dpI32_11 : WDCDpReg<"dpI32_11", 44, [dpI16_22, dpI16_23]>; +def dpI32_12 : WDCDpReg<"dpI32_12", 48, [dpI16_24, dpI16_25]>; +def dpI32_13 : WDCDpReg<"dpI32_13", 52, [dpI16_26, dpI16_27]>; +def dpI32_14 : WDCDpReg<"dpI32_14", 56, [dpI16_28, dpI16_29]>; +def dpI32_15 : WDCDpReg<"dpI32_15", 60, [dpI16_30, dpI16_31]>; +def dpI32_16 : WDCDpReg<"dpI32_16", 64, [dpI16_32, dpI16_33]>; +def dpI32_17 : WDCDpReg<"dpI32_17", 68, [dpI16_34, dpI16_35]>; +def dpI32_18 : WDCDpReg<"dpI32_18", 72, [dpI16_36, dpI16_37]>; +def dpI32_19 : WDCDpReg<"dpI32_19", 76, [dpI16_38, dpI16_39]>; +def dpI32_20 : WDCDpReg<"dpI32_20", 80, [dpI16_40, dpI16_41]>; +def dpI32_21 : WDCDpReg<"dpI32_21", 84, [dpI16_42, dpI16_43]>; +def dpI32_22 : WDCDpReg<"dpI32_22", 88, [dpI16_44, dpI16_45]>; +def dpI32_23 : WDCDpReg<"dpI32_23", 92, [dpI16_46, dpI16_47]>; +def dpI32_24 : WDCDpReg<"dpI32_24", 96, [dpI16_48, dpI16_49]>; +def dpI32_25 : WDCDpReg<"dpI32_25", 100, [dpI16_50, dpI16_51]>; +def dpI32_26 : WDCDpReg<"dpI32_26", 104, [dpI16_52, dpI16_53]>; +def dpI32_27 : WDCDpReg<"dpI32_27", 108, [dpI16_54, dpI16_55]>; +def dpI32_28 : WDCDpReg<"dpI32_28", 112, [dpI16_56, dpI16_57]>; +def dpI32_29 : WDCDpReg<"dpI32_29", 116, [dpI16_58, dpI16_59]>; +def dpI32_30 : WDCDpReg<"dpI32_30", 120, [dpI16_60, dpI16_61]>; +def dpI32_31 : WDCDpReg<"dpI32_31", 124, [dpI16_62, dpI16_63]>; +def dpI32_32 : WDCDpReg<"dpI32_32", 128, [dpI16_64, dpI16_65]>; +def dpI32_33 : WDCDpReg<"dpI32_33", 132, [dpI16_66, dpI16_67]>; +def dpI32_34 : WDCDpReg<"dpI32_34", 136, [dpI16_68, dpI16_69]>; +def dpI32_35 : WDCDpReg<"dpI32_35", 140, [dpI16_70, dpI16_71]>; +def dpI32_36 : WDCDpReg<"dpI32_36", 144, [dpI16_72, dpI16_73]>; +def dpI32_37 : WDCDpReg<"dpI32_37", 148, [dpI16_74, dpI16_75]>; +def dpI32_38 : WDCDpReg<"dpI32_38", 152, [dpI16_76, dpI16_77]>; +def dpI32_39 : WDCDpReg<"dpI32_39", 156, [dpI16_78, dpI16_79]>; +def dpI32_40 : WDCDpReg<"dpI32_40", 160, [dpI16_80, dpI16_81]>; +def dpI32_41 : WDCDpReg<"dpI32_41", 164, [dpI16_82, dpI16_83]>; +def dpI32_42 : WDCDpReg<"dpI32_42", 168, [dpI16_84, dpI16_85]>; +def dpI32_43 : WDCDpReg<"dpI32_43", 172, [dpI16_86, dpI16_87]>; +def dpI32_44 : WDCDpReg<"dpI32_44", 176, [dpI16_88, dpI16_89]>; +def dpI32_45 : WDCDpReg<"dpI32_45", 180, [dpI16_90, dpI16_91]>; +def dpI32_46 : WDCDpReg<"dpI32_46", 184, [dpI16_92, dpI16_93]>; +def dpI32_47 : WDCDpReg<"dpI32_47", 188, [dpI16_94, dpI16_95]>; +def dpI32_48 : WDCDpReg<"dpI32_48", 192, [dpI16_96, dpI16_97]>; +def dpI32_49 : WDCDpReg<"dpI32_49", 196, [dpI16_98, dpI16_99]>; +def dpI32_50 : WDCDpReg<"dpI32_50", 200, [dpI16_100, dpI16_101]>; +def dpI32_51 : WDCDpReg<"dpI32_51", 204, [dpI16_102, dpI16_103]>; +def dpI32_52 : WDCDpReg<"dpI32_52", 208, [dpI16_104, dpI16_105]>; +def dpI32_53 : WDCDpReg<"dpI32_53", 212, [dpI16_106, dpI16_107]>; +def dpI32_54 : WDCDpReg<"dpI32_54", 216, [dpI16_108, dpI16_109]>; +def dpI32_55 : WDCDpReg<"dpI32_55", 220, [dpI16_110, dpI16_111]>; +def dpI32_56 : WDCDpReg<"dpI32_56", 224, [dpI16_112, dpI16_113]>; +def dpI32_57 : WDCDpReg<"dpI32_57", 228, [dpI16_114, dpI16_115]>; +def dpI32_58 : WDCDpReg<"dpI32_58", 232, [dpI16_116, dpI16_117]>; +def dpI32_59 : WDCDpReg<"dpI32_59", 236, [dpI16_118, dpI16_119]>; +def dpI32_60 : WDCDpReg<"dpI32_60", 240, [dpI16_120, dpI16_121]>; +def dpI32_61 : WDCDpReg<"dpI32_61", 244, [dpI16_122, dpI16_123]>; +def dpI32_62 : WDCDpReg<"dpI32_62", 248, [dpI16_124, dpI16_125]>; +def dpI32_63 : WDCDpReg<"dpI32_63", 252, [dpI16_126, dpI16_127]>; +} + + +let SubRegIndices = [sub_32bit], CoveredBySubRegs = 1 in { +def dpF32_0 : WDCDpReg<"dpF32_0", 0, [dpI32_0]>; +def dpF32_1 : WDCDpReg<"dpF32_1", 4, [dpI32_1]>; +def dpF32_2 : WDCDpReg<"dpF32_2", 8, [dpI32_2]>; +def dpF32_3 : WDCDpReg<"dpF32_3", 12, [dpI32_3]>; +def dpF32_4 : WDCDpReg<"dpF32_4", 16, [dpI32_4]>; +def dpF32_5 : WDCDpReg<"dpF32_5", 20, [dpI32_5]>; +def dpF32_6 : WDCDpReg<"dpF32_6", 24, [dpI32_6]>; +def dpF32_7 : WDCDpReg<"dpF32_7", 28, [dpI32_7]>; +def dpF32_8 : WDCDpReg<"dpF32_8", 32, [dpI32_8]>; +def dpF32_9 : WDCDpReg<"dpF32_9", 36, [dpI32_9]>; +def dpF32_10 : WDCDpReg<"dpF32_10", 40, [dpI32_10]>; +def dpF32_11 : WDCDpReg<"dpF32_11", 44, [dpI32_11]>; +def dpF32_12 : WDCDpReg<"dpF32_12", 48, [dpI32_12]>; +def dpF32_13 : WDCDpReg<"dpF32_13", 52, [dpI32_13]>; +def dpF32_14 : WDCDpReg<"dpF32_14", 56, [dpI32_14]>; +def dpF32_15 : WDCDpReg<"dpF32_15", 60, [dpI32_15]>; +def dpF32_16 : WDCDpReg<"dpF32_16", 64, [dpI32_16]>; +def dpF32_17 : WDCDpReg<"dpF32_17", 68, [dpI32_17]>; +def dpF32_18 : WDCDpReg<"dpF32_18", 72, [dpI32_18]>; +def dpF32_19 : WDCDpReg<"dpF32_19", 76, [dpI32_19]>; +def dpF32_20 : WDCDpReg<"dpF32_20", 80, [dpI32_20]>; +def dpF32_21 : WDCDpReg<"dpF32_21", 84, [dpI32_21]>; +def dpF32_22 : WDCDpReg<"dpF32_22", 88, [dpI32_22]>; +def dpF32_23 : WDCDpReg<"dpF32_23", 92, [dpI32_23]>; +def dpF32_24 : WDCDpReg<"dpF32_24", 96, [dpI32_24]>; +def dpF32_25 : WDCDpReg<"dpF32_25", 100, [dpI32_25]>; +def dpF32_26 : WDCDpReg<"dpF32_26", 104, [dpI32_26]>; +def dpF32_27 : WDCDpReg<"dpF32_27", 108, [dpI32_27]>; +def dpF32_28 : WDCDpReg<"dpF32_28", 112, [dpI32_28]>; +def dpF32_29 : WDCDpReg<"dpF32_29", 116, [dpI32_29]>; +def dpF32_30 : WDCDpReg<"dpF32_30", 120, [dpI32_30]>; +def dpF32_31 : WDCDpReg<"dpF32_31", 124, [dpI32_31]>; +def dpF32_32 : WDCDpReg<"dpF32_32", 128, [dpI32_32]>; +def dpF32_33 : WDCDpReg<"dpF32_33", 132, [dpI32_33]>; +def dpF32_34 : WDCDpReg<"dpF32_34", 136, [dpI32_34]>; +def dpF32_35 : WDCDpReg<"dpF32_35", 140, [dpI32_35]>; +def dpF32_36 : WDCDpReg<"dpF32_36", 144, [dpI32_36]>; +def dpF32_37 : WDCDpReg<"dpF32_37", 148, [dpI32_37]>; +def dpF32_38 : WDCDpReg<"dpF32_38", 152, [dpI32_38]>; +def dpF32_39 : WDCDpReg<"dpF32_39", 156, [dpI32_39]>; +def dpF32_40 : WDCDpReg<"dpF32_40", 160, [dpI32_40]>; +def dpF32_41 : WDCDpReg<"dpF32_41", 164, [dpI32_41]>; +def dpF32_42 : WDCDpReg<"dpF32_42", 168, [dpI32_42]>; +def dpF32_43 : WDCDpReg<"dpF32_43", 172, [dpI32_43]>; +def dpF32_44 : WDCDpReg<"dpF32_44", 176, [dpI32_44]>; +def dpF32_45 : WDCDpReg<"dpF32_45", 180, [dpI32_45]>; +def dpF32_46 : WDCDpReg<"dpF32_46", 184, [dpI32_46]>; +def dpF32_47 : WDCDpReg<"dpF32_47", 188, [dpI32_47]>; +def dpF32_48 : WDCDpReg<"dpF32_48", 192, [dpI32_48]>; +def dpF32_49 : WDCDpReg<"dpF32_49", 196, [dpI32_49]>; +def dpF32_50 : WDCDpReg<"dpF32_50", 200, [dpI32_50]>; +def dpF32_51 : WDCDpReg<"dpF32_51", 204, [dpI32_51]>; +def dpF32_52 : WDCDpReg<"dpF32_52", 208, [dpI32_52]>; +def dpF32_53 : WDCDpReg<"dpF32_53", 212, [dpI32_53]>; +def dpF32_54 : WDCDpReg<"dpF32_54", 216, [dpI32_54]>; +def dpF32_55 : WDCDpReg<"dpF32_55", 220, [dpI32_55]>; +def dpF32_56 : WDCDpReg<"dpF32_56", 224, [dpI32_56]>; +def dpF32_57 : WDCDpReg<"dpF32_57", 228, [dpI32_57]>; +def dpF32_58 : WDCDpReg<"dpF32_58", 232, [dpI32_58]>; +def dpF32_59 : WDCDpReg<"dpF32_59", 236, [dpI32_59]>; +def dpF32_60 : WDCDpReg<"dpF32_60", 240, [dpI32_60]>; +def dpF32_61 : WDCDpReg<"dpF32_61", 244, [dpI32_61]>; +def dpF32_62 : WDCDpReg<"dpF32_62", 248, [dpI32_62]>; +def dpF32_63 : WDCDpReg<"dpF32_63", 252, [dpI32_63]>; +} + + +let SubRegIndices = [sub_32bit_lo, sub_32bit_hi], CoveredBySubRegs = 1 in { +def dpI64_0 : WDCDpReg<"dpI64_0", 0, [dpI32_0, dpI32_1]>; +def dpI64_1 : WDCDpReg<"dpI64_1", 8, [dpI32_2, dpI32_3]>; +def dpI64_2 : WDCDpReg<"dpI64_2", 16, [dpI32_4, dpI32_5]>; +def dpI64_3 : WDCDpReg<"dpI64_3", 24, [dpI32_6, dpI32_7]>; +def dpI64_4 : WDCDpReg<"dpI64_4", 32, [dpI32_8, dpI32_9]>; +def dpI64_5 : WDCDpReg<"dpI64_5", 40, [dpI32_10, dpI32_11]>; +def dpI64_6 : WDCDpReg<"dpI64_6", 48, [dpI32_12, dpI32_13]>; +def dpI64_7 : WDCDpReg<"dpI64_7", 56, [dpI32_14, dpI32_15]>; +def dpI64_8 : WDCDpReg<"dpI64_8", 64, [dpI32_16, dpI32_17]>; +def dpI64_9 : WDCDpReg<"dpI64_9", 72, [dpI32_18, dpI32_19]>; +def dpI64_10 : WDCDpReg<"dpI64_10", 80, [dpI32_20, dpI32_21]>; +def dpI64_11 : WDCDpReg<"dpI64_11", 88, [dpI32_22, dpI32_23]>; +def dpI64_12 : WDCDpReg<"dpI64_12", 96, [dpI32_24, dpI32_25]>; +def dpI64_13 : WDCDpReg<"dpI64_13", 104, [dpI32_26, dpI32_27]>; +def dpI64_14 : WDCDpReg<"dpI64_14", 112, [dpI32_28, dpI32_29]>; +def dpI64_15 : WDCDpReg<"dpI64_15", 120, [dpI32_30, dpI32_31]>; +def dpI64_16 : WDCDpReg<"dpI64_16", 128, [dpI32_32, dpI32_33]>; +def dpI64_17 : WDCDpReg<"dpI64_17", 136, [dpI32_34, dpI32_35]>; +def dpI64_18 : WDCDpReg<"dpI64_18", 144, [dpI32_36, dpI32_37]>; +def dpI64_19 : WDCDpReg<"dpI64_19", 152, [dpI32_38, dpI32_39]>; +def dpI64_20 : WDCDpReg<"dpI64_20", 160, [dpI32_40, dpI32_41]>; +def dpI64_21 : WDCDpReg<"dpI64_21", 168, [dpI32_42, dpI32_43]>; +def dpI64_22 : WDCDpReg<"dpI64_22", 176, [dpI32_44, dpI32_45]>; +def dpI64_23 : WDCDpReg<"dpI64_23", 184, [dpI32_46, dpI32_47]>; +def dpI64_24 : WDCDpReg<"dpI64_24", 192, [dpI32_48, dpI32_49]>; +def dpI64_25 : WDCDpReg<"dpI64_25", 200, [dpI32_50, dpI32_51]>; +def dpI64_26 : WDCDpReg<"dpI64_26", 208, [dpI32_52, dpI32_53]>; +def dpI64_27 : WDCDpReg<"dpI64_27", 216, [dpI32_54, dpI32_55]>; +def dpI64_28 : WDCDpReg<"dpI64_28", 224, [dpI32_56, dpI32_57]>; +def dpI64_29 : WDCDpReg<"dpI64_29", 232, [dpI32_58, dpI32_59]>; +def dpI64_30 : WDCDpReg<"dpI64_30", 240, [dpI32_60, dpI32_61]>; +def dpI64_31 : WDCDpReg<"dpI64_31", 248, [dpI32_62, dpI32_63]>; +} + + +let SubRegIndices = [sub_64bit], CoveredBySubRegs = 1 in { +def dpF64_0 : WDCDpReg<"dpF64_0", 0, [dpI64_0]>; +def dpF64_1 : WDCDpReg<"dpF64_1", 8, [dpI64_1]>; +def dpF64_2 : WDCDpReg<"dpF64_2", 16, [dpI64_2]>; +def dpF64_3 : WDCDpReg<"dpF64_3", 24, [dpI64_3]>; +def dpF64_4 : WDCDpReg<"dpF64_4", 32, [dpI64_4]>; +def dpF64_5 : WDCDpReg<"dpF64_5", 40, [dpI64_5]>; +def dpF64_6 : WDCDpReg<"dpF64_6", 48, [dpI64_6]>; +def dpF64_7 : WDCDpReg<"dpF64_7", 56, [dpI64_7]>; +def dpF64_8 : WDCDpReg<"dpF64_8", 64, [dpI64_8]>; +def dpF64_9 : WDCDpReg<"dpF64_9", 72, [dpI64_9]>; +def dpF64_10 : WDCDpReg<"dpF64_10", 80, [dpI64_10]>; +def dpF64_11 : WDCDpReg<"dpF64_11", 88, [dpI64_11]>; +def dpF64_12 : WDCDpReg<"dpF64_12", 96, [dpI64_12]>; +def dpF64_13 : WDCDpReg<"dpF64_13", 104, [dpI64_13]>; +def dpF64_14 : WDCDpReg<"dpF64_14", 112, [dpI64_14]>; +def dpF64_15 : WDCDpReg<"dpF64_15", 120, [dpI64_15]>; +def dpF64_16 : WDCDpReg<"dpF64_16", 128, [dpI64_16]>; +def dpF64_17 : WDCDpReg<"dpF64_17", 136, [dpI64_17]>; +def dpF64_18 : WDCDpReg<"dpF64_18", 144, [dpI64_18]>; +def dpF64_19 : WDCDpReg<"dpF64_19", 152, [dpI64_19]>; +def dpF64_20 : WDCDpReg<"dpF64_20", 160, [dpI64_20]>; +def dpF64_21 : WDCDpReg<"dpF64_21", 168, [dpI64_21]>; +def dpF64_22 : WDCDpReg<"dpF64_22", 176, [dpI64_22]>; +def dpF64_23 : WDCDpReg<"dpF64_23", 184, [dpI64_23]>; +def dpF64_24 : WDCDpReg<"dpF64_24", 192, [dpI64_24]>; +def dpF64_25 : WDCDpReg<"dpF64_25", 200, [dpI64_25]>; +def dpF64_26 : WDCDpReg<"dpF64_26", 208, [dpI64_26]>; +def dpF64_27 : WDCDpReg<"dpF64_27", 216, [dpI64_27]>; +def dpF64_28 : WDCDpReg<"dpF64_28", 224, [dpI64_28]>; +def dpF64_29 : WDCDpReg<"dpF64_29", 232, [dpI64_29]>; +def dpF64_30 : WDCDpReg<"dpF64_30", 240, [dpI64_30]>; +def dpF64_31 : WDCDpReg<"dpF64_31", 248, [dpI64_31]>; +} + def IntRegs : RegisterClass<"WDC", [i16], 8, - (add A, X, Y)>; - +(add A, X, Y)>; + + def AccRegs : RegisterClass<"WDC", [i16], 8, - (add A)>; - +(add A)>; + + def IndexRegs : RegisterClass<"WDC", [i16], 8, - (add X, Y)>; - +(add X, Y)>; + + def IndexXRegs : RegisterClass<"WDC", [i16], 8, - (add X)>; - +(add X)>; + + def IndexYRegs : RegisterClass<"WDC", [i16], 8, - (add Y)>; - +(add Y)>; + + def DataBankRegs : RegisterClass<"WDC", [i8], 8, - (add B)>; - +(add B)>; + + def DirectPageRegs : RegisterClass<"WDC", [i16], 8, - (add D)>; - +(add D)>; + + def StackPointerRegs : RegisterClass<"WDC", [i16], 8, - (add S)>; - +(add S)>; + + def ProcessorStatusRegs : RegisterClass<"WDC", [i8], 8, - (add P)>; - +(add P)>; + + def ProgramBankRegs : RegisterClass<"WDC", [i8], 8, - (add K)>; +(add K)>; + + +def Int16Regs : RegisterClass<"WDC", [i16], 8, +(add dpI16_0, dpI16_1, dpI16_2, dpI16_3, dpI16_4, dpI16_5, dpI16_6, dpI16_7, dpI16_8, dpI16_9, + dpI16_10, dpI16_11, dpI16_12, dpI16_13, dpI16_14, dpI16_15, dpI16_16, dpI16_17, dpI16_18, dpI16_19, + dpI16_20, dpI16_21, dpI16_22, dpI16_23, dpI16_24, dpI16_25, dpI16_26, dpI16_27, dpI16_28, dpI16_29, + dpI16_30, dpI16_31, dpI16_32, dpI16_33, dpI16_34, dpI16_35, dpI16_36, dpI16_37, dpI16_38, dpI16_39, + dpI16_40, dpI16_41, dpI16_42, dpI16_43, dpI16_44, dpI16_45, dpI16_46, dpI16_47, dpI16_48, dpI16_49, + dpI16_50, dpI16_51, dpI16_52, dpI16_53, dpI16_54, dpI16_55, dpI16_56, dpI16_57, dpI16_58, dpI16_59, + dpI16_60, dpI16_61, dpI16_62, dpI16_63, dpI16_64, dpI16_65, dpI16_66, dpI16_67, dpI16_68, dpI16_69, + dpI16_70, dpI16_71, dpI16_72, dpI16_73, dpI16_74, dpI16_75, dpI16_76, dpI16_77, dpI16_78, dpI16_79, + dpI16_80, dpI16_81, dpI16_82, dpI16_83, dpI16_84, dpI16_85, dpI16_86, dpI16_87, dpI16_88, dpI16_89, + dpI16_90, dpI16_91, dpI16_92, dpI16_93, dpI16_94, dpI16_95, dpI16_96, dpI16_97, dpI16_98, dpI16_99, + dpI16_100, dpI16_101, dpI16_102, dpI16_103, dpI16_104, dpI16_105, dpI16_106, dpI16_107, dpI16_108, dpI16_109, + dpI16_110, dpI16_111, dpI16_112, dpI16_113, dpI16_114, dpI16_115, dpI16_116, dpI16_117, dpI16_118, dpI16_119, +dpI16_120, dpI16_121, dpI16_122, dpI16_123, dpI16_124, dpI16_125, dpI16_126, dpI16_127 )>; + + +def Int32Regs : RegisterClass<"WDC", [i32], 8, +(add dpI32_0, dpI32_1, dpI32_2, dpI32_3, dpI32_4, dpI32_5, dpI32_6, dpI32_7, dpI32_8, dpI32_9, + dpI32_10, dpI32_11, dpI32_12, dpI32_13, dpI32_14, dpI32_15, dpI32_16, dpI32_17, dpI32_18, dpI32_19, + dpI32_20, dpI32_21, dpI32_22, dpI32_23, dpI32_24, dpI32_25, dpI32_26, dpI32_27, dpI32_28, dpI32_29, + dpI32_30, dpI32_31, dpI32_32, dpI32_33, dpI32_34, dpI32_35, dpI32_36, dpI32_37, dpI32_38, dpI32_39, + dpI32_40, dpI32_41, dpI32_42, dpI32_43, dpI32_44, dpI32_45, dpI32_46, dpI32_47, dpI32_48, dpI32_49, + dpI32_50, dpI32_51, dpI32_52, dpI32_53, dpI32_54, dpI32_55, dpI32_56, dpI32_57, dpI32_58, dpI32_59, + dpI32_60, dpI32_61, dpI32_62, dpI32_63 )>; + + +def Float32Regs : RegisterClass<"WDC", [f32], 8, +(add dpF32_0, dpF32_1, dpF32_2, dpF32_3, dpF32_4, dpF32_5, dpF32_6, dpF32_7, dpF32_8, dpF32_9, + dpF32_10, dpF32_11, dpF32_12, dpF32_13, dpF32_14, dpF32_15, dpF32_16, dpF32_17, dpF32_18, dpF32_19, + dpF32_20, dpF32_21, dpF32_22, dpF32_23, dpF32_24, dpF32_25, dpF32_26, dpF32_27, dpF32_28, dpF32_29, + dpF32_30, dpF32_31, dpF32_32, dpF32_33, dpF32_34, dpF32_35, dpF32_36, dpF32_37, dpF32_38, dpF32_39, + dpF32_40, dpF32_41, dpF32_42, dpF32_43, dpF32_44, dpF32_45, dpF32_46, dpF32_47, dpF32_48, dpF32_49, + dpF32_50, dpF32_51, dpF32_52, dpF32_53, dpF32_54, dpF32_55, dpF32_56, dpF32_57, dpF32_58, dpF32_59, +dpF32_60, dpF32_61, dpF32_62, dpF32_63 )>; + + +def Int64Regs : RegisterClass<"WDC", [i64], 8, +(add dpI64_0, dpI64_1, dpI64_2, dpI64_3, dpI64_4, dpI64_5, dpI64_6, dpI64_7, dpI64_8, dpI64_9, + dpI64_10, dpI64_11, dpI64_12, dpI64_13, dpI64_14, dpI64_15, dpI64_16, dpI64_17, dpI64_18, dpI64_19, + dpI64_20, dpI64_21, dpI64_22, dpI64_23, dpI64_24, dpI64_25, dpI64_26, dpI64_27, dpI64_28, dpI64_29, +dpI64_30, dpI64_31 )>; + + +def Float64Regs : RegisterClass<"WDC", [f64], 8, +(add dpF64_0, dpF64_1, dpF64_2, dpF64_3, dpF64_4, dpF64_5, dpF64_6, dpF64_7, dpF64_8, dpF64_9, + dpF64_10, dpF64_11, dpF64_12, dpF64_13, dpF64_14, dpF64_15, dpF64_16, dpF64_17, dpF64_18, dpF64_19, + dpF64_20, dpF64_21, dpF64_22, dpF64_23, dpF64_24, dpF64_25, dpF64_26, dpF64_27, dpF64_28, dpF64_29, + dpF64_30, dpF64_31 )>; \ No newline at end of file