Example #1
0
 protected override void InitializeRegisters()
 {
     indexValueMapR = new Dictionary <int, ArmRegisters>
     {
         { 0, ArmRegisters.R0 },
         { 1, ArmRegisters.R1 },
         { 2, ArmRegisters.R2 },
         { 3, ArmRegisters.R3 },
         { 4, ArmRegisters.R4 },
         { 5, ArmRegisters.R5 },
         { 6, ArmRegisters.R6 },
         { 7, ArmRegisters.R7 },
         { 8, ArmRegisters.R8 },
         { 9, ArmRegisters.R9 },
         { 10, ArmRegisters.R10 },
         { 11, ArmRegisters.R11 },
         { 12, ArmRegisters.R12 },
         { 13, ArmRegisters.R13 },
         { 14, ArmRegisters.R14 },
         { 15, ArmRegisters.R15 },
     };
     R = new RegistersGroup <UInt32>(
         indexValueMapR.Keys,
         i => GetRegisterValue32((int)indexValueMapR[i]),
         (i, v) => SetRegisterValue32((int)indexValueMapR[i], v));
 }
Example #2
0
        protected override void InitializeRegisters()
        {
            var indexValueMapR = new Dictionary <int, PowerPc64Registers>
            {
                { 0, PowerPc64Registers.R0 },
                { 1, PowerPc64Registers.R1 },
                { 2, PowerPc64Registers.R2 },
                { 3, PowerPc64Registers.R3 },
                { 4, PowerPc64Registers.R4 },
                { 5, PowerPc64Registers.R5 },
                { 6, PowerPc64Registers.R6 },
                { 7, PowerPc64Registers.R7 },
                { 8, PowerPc64Registers.R8 },
                { 9, PowerPc64Registers.R9 },
                { 10, PowerPc64Registers.R10 },
                { 11, PowerPc64Registers.R11 },
                { 12, PowerPc64Registers.R12 },
                { 13, PowerPc64Registers.R13 },
                { 14, PowerPc64Registers.R14 },
                { 15, PowerPc64Registers.R15 },
                { 16, PowerPc64Registers.R16 },
                { 17, PowerPc64Registers.R17 },
                { 18, PowerPc64Registers.R18 },
                { 19, PowerPc64Registers.R19 },
                { 20, PowerPc64Registers.R20 },
                { 21, PowerPc64Registers.R21 },
                { 22, PowerPc64Registers.R22 },
                { 23, PowerPc64Registers.R23 },
                { 24, PowerPc64Registers.R24 },
                { 25, PowerPc64Registers.R25 },
                { 26, PowerPc64Registers.R26 },
                { 27, PowerPc64Registers.R27 },
                { 28, PowerPc64Registers.R28 },
                { 29, PowerPc64Registers.R29 },
                { 30, PowerPc64Registers.R30 },
                { 31, PowerPc64Registers.R31 },
            };

            R = new RegistersGroup(
                indexValueMapR.Keys,
                i => GetRegisterUnsafe((int)indexValueMapR[i]),
                (i, v) => SetRegisterUnsafe((int)indexValueMapR[i], v));
        }
 protected override void InitializeRegisters()
 {
     indexValueMapX = new Dictionary <int, RiscVRegisters>
     {
         { 0, RiscVRegisters.X0 },
         { 1, RiscVRegisters.X1 },
         { 2, RiscVRegisters.X2 },
         { 3, RiscVRegisters.X3 },
         { 4, RiscVRegisters.X4 },
         { 5, RiscVRegisters.X5 },
         { 6, RiscVRegisters.X6 },
         { 7, RiscVRegisters.X7 },
         { 8, RiscVRegisters.X8 },
         { 9, RiscVRegisters.X9 },
         { 10, RiscVRegisters.X10 },
         { 11, RiscVRegisters.X11 },
         { 12, RiscVRegisters.X12 },
         { 13, RiscVRegisters.X13 },
         { 14, RiscVRegisters.X14 },
         { 15, RiscVRegisters.X15 },
         { 16, RiscVRegisters.X16 },
         { 17, RiscVRegisters.X17 },
         { 18, RiscVRegisters.X18 },
         { 19, RiscVRegisters.X19 },
         { 20, RiscVRegisters.X20 },
         { 21, RiscVRegisters.X21 },
         { 22, RiscVRegisters.X22 },
         { 23, RiscVRegisters.X23 },
         { 24, RiscVRegisters.X24 },
         { 25, RiscVRegisters.X25 },
         { 26, RiscVRegisters.X26 },
         { 27, RiscVRegisters.X27 },
         { 28, RiscVRegisters.X28 },
         { 29, RiscVRegisters.X29 },
         { 30, RiscVRegisters.X30 },
         { 31, RiscVRegisters.X31 },
     };
     X = new RegistersGroup <UInt32>(
         indexValueMapX.Keys,
         i => GetRegisterValue32((int)indexValueMapX[i]),
         (i, v) => SetRegisterValue32((int)indexValueMapX[i], v));
 }
Example #4
0
        protected override void InitializeRegisters()
        {
            var indexValueMapX = new Dictionary <int, RiscV32Registers>
            {
                { 0, RiscV32Registers.X0 },
                { 1, RiscV32Registers.X1 },
                { 2, RiscV32Registers.X2 },
                { 3, RiscV32Registers.X3 },
                { 4, RiscV32Registers.X4 },
                { 5, RiscV32Registers.X5 },
                { 6, RiscV32Registers.X6 },
                { 7, RiscV32Registers.X7 },
                { 8, RiscV32Registers.X8 },
                { 9, RiscV32Registers.X9 },
                { 10, RiscV32Registers.X10 },
                { 11, RiscV32Registers.X11 },
                { 12, RiscV32Registers.X12 },
                { 13, RiscV32Registers.X13 },
                { 14, RiscV32Registers.X14 },
                { 15, RiscV32Registers.X15 },
                { 16, RiscV32Registers.X16 },
                { 17, RiscV32Registers.X17 },
                { 18, RiscV32Registers.X18 },
                { 19, RiscV32Registers.X19 },
                { 20, RiscV32Registers.X20 },
                { 21, RiscV32Registers.X21 },
                { 22, RiscV32Registers.X22 },
                { 23, RiscV32Registers.X23 },
                { 24, RiscV32Registers.X24 },
                { 25, RiscV32Registers.X25 },
                { 26, RiscV32Registers.X26 },
                { 27, RiscV32Registers.X27 },
                { 28, RiscV32Registers.X28 },
                { 29, RiscV32Registers.X29 },
                { 30, RiscV32Registers.X30 },
                { 31, RiscV32Registers.X31 },
            };

            X = new RegistersGroup(
                indexValueMapX.Keys,
                i => GetRegisterUnsafe((int)indexValueMapX[i]),
                (i, v) => SetRegisterUnsafe((int)indexValueMapX[i], v));

            var indexValueMapT = new Dictionary <int, RiscV32Registers>
            {
                { 0, RiscV32Registers.T0 },
                { 1, RiscV32Registers.T1 },
                { 2, RiscV32Registers.T2 },
                { 3, RiscV32Registers.T3 },
                { 4, RiscV32Registers.T4 },
                { 5, RiscV32Registers.T5 },
                { 6, RiscV32Registers.T6 },
            };

            T = new RegistersGroup(
                indexValueMapT.Keys,
                i => GetRegisterUnsafe((int)indexValueMapT[i]),
                (i, v) => SetRegisterUnsafe((int)indexValueMapT[i], v));

            var indexValueMapS = new Dictionary <int, RiscV32Registers>
            {
                { 0, RiscV32Registers.S0 },
                { 1, RiscV32Registers.S1 },
                { 2, RiscV32Registers.S2 },
                { 3, RiscV32Registers.S3 },
                { 4, RiscV32Registers.S4 },
                { 5, RiscV32Registers.S5 },
                { 6, RiscV32Registers.S6 },
                { 7, RiscV32Registers.S7 },
                { 8, RiscV32Registers.S8 },
                { 9, RiscV32Registers.S9 },
                { 10, RiscV32Registers.S10 },
                { 11, RiscV32Registers.S11 },
            };

            S = new RegistersGroup(
                indexValueMapS.Keys,
                i => GetRegisterUnsafe((int)indexValueMapS[i]),
                (i, v) => SetRegisterUnsafe((int)indexValueMapS[i], v));

            var indexValueMapA = new Dictionary <int, RiscV32Registers>
            {
                { 0, RiscV32Registers.A0 },
                { 1, RiscV32Registers.A1 },
                { 2, RiscV32Registers.A2 },
                { 3, RiscV32Registers.A3 },
                { 4, RiscV32Registers.A4 },
                { 5, RiscV32Registers.A5 },
                { 6, RiscV32Registers.A6 },
                { 7, RiscV32Registers.A7 },
            };

            A = new RegistersGroup(
                indexValueMapA.Keys,
                i => GetRegisterUnsafe((int)indexValueMapA[i]),
                (i, v) => SetRegisterUnsafe((int)indexValueMapA[i], v));

            var indexValueMapF = new Dictionary <int, RiscV32Registers>
            {
                { 0, RiscV32Registers.F0 },
                { 1, RiscV32Registers.F1 },
                { 2, RiscV32Registers.F2 },
                { 3, RiscV32Registers.F3 },
                { 4, RiscV32Registers.F4 },
                { 5, RiscV32Registers.F5 },
                { 6, RiscV32Registers.F6 },
                { 7, RiscV32Registers.F7 },
                { 8, RiscV32Registers.F8 },
                { 9, RiscV32Registers.F9 },
                { 10, RiscV32Registers.F10 },
                { 11, RiscV32Registers.F11 },
                { 12, RiscV32Registers.F12 },
                { 13, RiscV32Registers.F13 },
                { 14, RiscV32Registers.F14 },
                { 15, RiscV32Registers.F15 },
                { 16, RiscV32Registers.F16 },
                { 17, RiscV32Registers.F17 },
                { 18, RiscV32Registers.F18 },
                { 19, RiscV32Registers.F19 },
                { 20, RiscV32Registers.F20 },
                { 21, RiscV32Registers.F21 },
                { 22, RiscV32Registers.F22 },
                { 23, RiscV32Registers.F23 },
                { 24, RiscV32Registers.F24 },
                { 25, RiscV32Registers.F25 },
                { 26, RiscV32Registers.F26 },
                { 27, RiscV32Registers.F27 },
                { 28, RiscV32Registers.F28 },
                { 29, RiscV32Registers.F29 },
                { 30, RiscV32Registers.F30 },
                { 31, RiscV32Registers.F31 },
            };

            F = new RegistersGroup(
                indexValueMapF.Keys,
                i => GetRegisterUnsafe((int)indexValueMapF[i]),
                (i, v) => SetRegisterUnsafe((int)indexValueMapF[i], v));
        }
Example #5
0
        protected override void InitializeRegisters()
        {
            indexValueMapR = new Dictionary<int, SparcRegisters>
            {
                { 0, SparcRegisters.R0 },
                { 1, SparcRegisters.R1 },
                { 2, SparcRegisters.R2 },
                { 3, SparcRegisters.R3 },
                { 4, SparcRegisters.R4 },
                { 5, SparcRegisters.R5 },
                { 6, SparcRegisters.R6 },
                { 7, SparcRegisters.R7 },
                { 8, SparcRegisters.R8 },
                { 9, SparcRegisters.R9 },
                { 10, SparcRegisters.R10 },
                { 11, SparcRegisters.R11 },
                { 12, SparcRegisters.R12 },
                { 13, SparcRegisters.R13 },
                { 14, SparcRegisters.R14 },
                { 15, SparcRegisters.R15 },
                { 16, SparcRegisters.R16 },
                { 17, SparcRegisters.R17 },
                { 18, SparcRegisters.R18 },
                { 19, SparcRegisters.R19 },
                { 20, SparcRegisters.R20 },
                { 21, SparcRegisters.R21 },
                { 22, SparcRegisters.R22 },
                { 23, SparcRegisters.R23 },
                { 24, SparcRegisters.R24 },
                { 25, SparcRegisters.R25 },
                { 26, SparcRegisters.R26 },
                { 27, SparcRegisters.R27 },
                { 28, SparcRegisters.R28 },
                { 29, SparcRegisters.R29 },
                { 30, SparcRegisters.R30 },
                { 31, SparcRegisters.R31 },
            };
            R = new RegistersGroup<UInt32>(
                indexValueMapR.Keys,
                i => GetRegisterValue32((int)indexValueMapR[i]),
                (i, v) => SetRegisterValue32((int)indexValueMapR[i], v));

            indexValueMapASR = new Dictionary<int, SparcRegisters>
            {
                { 16, SparcRegisters.ASR16 },
                { 17, SparcRegisters.ASR17 },
                { 18, SparcRegisters.ASR18 },
                { 19, SparcRegisters.ASR19 },
                { 20, SparcRegisters.ASR20 },
                { 21, SparcRegisters.ASR21 },
                { 22, SparcRegisters.ASR22 },
                { 23, SparcRegisters.ASR23 },
                { 24, SparcRegisters.ASR24 },
                { 25, SparcRegisters.ASR25 },
                { 26, SparcRegisters.ASR26 },
                { 27, SparcRegisters.ASR27 },
                { 28, SparcRegisters.ASR28 },
                { 29, SparcRegisters.ASR29 },
                { 30, SparcRegisters.ASR30 },
                { 31, SparcRegisters.ASR31 },
            };
            ASR = new RegistersGroup<UInt32>(
                indexValueMapASR.Keys,
                i => GetRegisterValue32((int)indexValueMapASR[i]),
                (i, v) => SetRegisterValue32((int)indexValueMapASR[i], v));

        }
        protected override void InitializeRegisters()
        {
            var indexValueMapAR = new Dictionary <int, XtensaRegisters>
            {
                { 0, XtensaRegisters.AR0 },
                { 1, XtensaRegisters.AR1 },
                { 2, XtensaRegisters.AR2 },
                { 3, XtensaRegisters.AR3 },
                { 4, XtensaRegisters.AR4 },
                { 5, XtensaRegisters.AR5 },
                { 6, XtensaRegisters.AR6 },
                { 7, XtensaRegisters.AR7 },
                { 8, XtensaRegisters.AR8 },
                { 9, XtensaRegisters.AR9 },
                { 10, XtensaRegisters.AR10 },
                { 11, XtensaRegisters.AR11 },
                { 12, XtensaRegisters.AR12 },
                { 13, XtensaRegisters.AR13 },
                { 14, XtensaRegisters.AR14 },
                { 15, XtensaRegisters.AR15 },
                { 16, XtensaRegisters.AR16 },
                { 17, XtensaRegisters.AR17 },
                { 18, XtensaRegisters.AR18 },
                { 19, XtensaRegisters.AR19 },
                { 20, XtensaRegisters.AR20 },
                { 21, XtensaRegisters.AR21 },
                { 22, XtensaRegisters.AR22 },
                { 23, XtensaRegisters.AR23 },
                { 24, XtensaRegisters.AR24 },
                { 25, XtensaRegisters.AR25 },
                { 26, XtensaRegisters.AR26 },
                { 27, XtensaRegisters.AR27 },
                { 28, XtensaRegisters.AR28 },
                { 29, XtensaRegisters.AR29 },
                { 30, XtensaRegisters.AR30 },
                { 31, XtensaRegisters.AR31 },
            };

            AR = new RegistersGroup(
                indexValueMapAR.Keys,
                i => GetRegisterUnsafe((int)indexValueMapAR[i]),
                (i, v) => SetRegisterUnsafe((int)indexValueMapAR[i], v));

            var indexValueMapCONFIGID = new Dictionary <int, XtensaRegisters>
            {
                { 0, XtensaRegisters.CONFIGID0 },
                { 1, XtensaRegisters.CONFIGID1 },
            };

            CONFIGID = new RegistersGroup(
                indexValueMapCONFIGID.Keys,
                i => GetRegisterUnsafe((int)indexValueMapCONFIGID[i]),
                (i, v) => SetRegisterUnsafe((int)indexValueMapCONFIGID[i], v));

            var indexValueMapSCOMPARE = new Dictionary <int, XtensaRegisters>
            {
                { 1, XtensaRegisters.SCOMPARE1 },
            };

            SCOMPARE = new RegistersGroup(
                indexValueMapSCOMPARE.Keys,
                i => GetRegisterUnsafe((int)indexValueMapSCOMPARE[i]),
                (i, v) => SetRegisterUnsafe((int)indexValueMapSCOMPARE[i], v));

            var indexValueMapIBREAKA = new Dictionary <int, XtensaRegisters>
            {
                { 0, XtensaRegisters.IBREAKA0 },
                { 1, XtensaRegisters.IBREAKA1 },
            };

            IBREAKA = new RegistersGroup(
                indexValueMapIBREAKA.Keys,
                i => GetRegisterUnsafe((int)indexValueMapIBREAKA[i]),
                (i, v) => SetRegisterUnsafe((int)indexValueMapIBREAKA[i], v));

            var indexValueMapDBREAKA = new Dictionary <int, XtensaRegisters>
            {
                { 0, XtensaRegisters.DBREAKA0 },
                { 1, XtensaRegisters.DBREAKA1 },
            };

            DBREAKA = new RegistersGroup(
                indexValueMapDBREAKA.Keys,
                i => GetRegisterUnsafe((int)indexValueMapDBREAKA[i]),
                (i, v) => SetRegisterUnsafe((int)indexValueMapDBREAKA[i], v));

            var indexValueMapDBREAKC = new Dictionary <int, XtensaRegisters>
            {
                { 0, XtensaRegisters.DBREAKC0 },
                { 1, XtensaRegisters.DBREAKC1 },
            };

            DBREAKC = new RegistersGroup(
                indexValueMapDBREAKC.Keys,
                i => GetRegisterUnsafe((int)indexValueMapDBREAKC[i]),
                (i, v) => SetRegisterUnsafe((int)indexValueMapDBREAKC[i], v));

            var indexValueMapEPC = new Dictionary <int, XtensaRegisters>
            {
                { 1, XtensaRegisters.EPC1 },
                { 2, XtensaRegisters.EPC2 },
                { 3, XtensaRegisters.EPC3 },
                { 4, XtensaRegisters.EPC4 },
                { 5, XtensaRegisters.EPC5 },
                { 6, XtensaRegisters.EPC6 },
                { 7, XtensaRegisters.EPC7 },
            };

            EPC = new RegistersGroup(
                indexValueMapEPC.Keys,
                i => GetRegisterUnsafe((int)indexValueMapEPC[i]),
                (i, v) => SetRegisterUnsafe((int)indexValueMapEPC[i], v));

            var indexValueMapEPS = new Dictionary <int, XtensaRegisters>
            {
                { 2, XtensaRegisters.EPS2 },
                { 3, XtensaRegisters.EPS3 },
                { 4, XtensaRegisters.EPS4 },
                { 5, XtensaRegisters.EPS5 },
                { 6, XtensaRegisters.EPS6 },
                { 7, XtensaRegisters.EPS7 },
            };

            EPS = new RegistersGroup(
                indexValueMapEPS.Keys,
                i => GetRegisterUnsafe((int)indexValueMapEPS[i]),
                (i, v) => SetRegisterUnsafe((int)indexValueMapEPS[i], v));

            var indexValueMapEXCSAVE = new Dictionary <int, XtensaRegisters>
            {
                { 1, XtensaRegisters.EXCSAVE1 },
                { 2, XtensaRegisters.EXCSAVE2 },
                { 3, XtensaRegisters.EXCSAVE3 },
                { 4, XtensaRegisters.EXCSAVE4 },
                { 5, XtensaRegisters.EXCSAVE5 },
                { 6, XtensaRegisters.EXCSAVE6 },
                { 7, XtensaRegisters.EXCSAVE7 },
            };

            EXCSAVE = new RegistersGroup(
                indexValueMapEXCSAVE.Keys,
                i => GetRegisterUnsafe((int)indexValueMapEXCSAVE[i]),
                (i, v) => SetRegisterUnsafe((int)indexValueMapEXCSAVE[i], v));

            var indexValueMapCCOMPARE = new Dictionary <int, XtensaRegisters>
            {
                { 0, XtensaRegisters.CCOMPARE0 },
                { 1, XtensaRegisters.CCOMPARE1 },
                { 2, XtensaRegisters.CCOMPARE2 },
            };

            CCOMPARE = new RegistersGroup(
                indexValueMapCCOMPARE.Keys,
                i => GetRegisterUnsafe((int)indexValueMapCCOMPARE[i]),
                (i, v) => SetRegisterUnsafe((int)indexValueMapCCOMPARE[i], v));

            var indexValueMapMISC = new Dictionary <int, XtensaRegisters>
            {
                { 0, XtensaRegisters.MISC0 },
                { 1, XtensaRegisters.MISC1 },
            };

            MISC = new RegistersGroup(
                indexValueMapMISC.Keys,
                i => GetRegisterUnsafe((int)indexValueMapMISC[i]),
                (i, v) => SetRegisterUnsafe((int)indexValueMapMISC[i], v));

            var indexValueMapA = new Dictionary <int, XtensaRegisters>
            {
                { 0, XtensaRegisters.A0 },
                { 1, XtensaRegisters.A1 },
                { 2, XtensaRegisters.A2 },
                { 3, XtensaRegisters.A3 },
                { 4, XtensaRegisters.A4 },
                { 5, XtensaRegisters.A5 },
                { 6, XtensaRegisters.A6 },
                { 7, XtensaRegisters.A7 },
                { 8, XtensaRegisters.A8 },
                { 9, XtensaRegisters.A9 },
                { 10, XtensaRegisters.A10 },
                { 11, XtensaRegisters.A11 },
                { 12, XtensaRegisters.A12 },
                { 13, XtensaRegisters.A13 },
                { 14, XtensaRegisters.A14 },
                { 15, XtensaRegisters.A15 },
            };

            A = new RegistersGroup(
                indexValueMapA.Keys,
                i => GetRegisterUnsafe((int)indexValueMapA[i]),
                (i, v) => SetRegisterUnsafe((int)indexValueMapA[i], v));
        }
        protected override void InitializeRegisters()
        {
            indexValueMapR = new Dictionary <int, SparcRegisters>
            {
                { 0, SparcRegisters.R0 },
                { 1, SparcRegisters.R1 },
                { 2, SparcRegisters.R2 },
                { 3, SparcRegisters.R3 },
                { 4, SparcRegisters.R4 },
                { 5, SparcRegisters.R5 },
                { 6, SparcRegisters.R6 },
                { 7, SparcRegisters.R7 },
                { 8, SparcRegisters.R8 },
                { 9, SparcRegisters.R9 },
                { 10, SparcRegisters.R10 },
                { 11, SparcRegisters.R11 },
                { 12, SparcRegisters.R12 },
                { 13, SparcRegisters.R13 },
                { 14, SparcRegisters.R14 },
                { 15, SparcRegisters.R15 },
                { 16, SparcRegisters.R16 },
                { 17, SparcRegisters.R17 },
                { 18, SparcRegisters.R18 },
                { 19, SparcRegisters.R19 },
                { 20, SparcRegisters.R20 },
                { 21, SparcRegisters.R21 },
                { 22, SparcRegisters.R22 },
                { 23, SparcRegisters.R23 },
                { 24, SparcRegisters.R24 },
                { 25, SparcRegisters.R25 },
                { 26, SparcRegisters.R26 },
                { 27, SparcRegisters.R27 },
                { 28, SparcRegisters.R28 },
                { 29, SparcRegisters.R29 },
                { 30, SparcRegisters.R30 },
                { 31, SparcRegisters.R31 },
            };
            R = new RegistersGroup <UInt32>(
                indexValueMapR.Keys,
                i => GetRegisterValue32((int)indexValueMapR[i]),
                (i, v) => SetRegisterValue32((int)indexValueMapR[i], v));

            indexValueMapASR = new Dictionary <int, SparcRegisters>
            {
                { 16, SparcRegisters.ASR16 },
                { 17, SparcRegisters.ASR17 },
                { 18, SparcRegisters.ASR18 },
                { 19, SparcRegisters.ASR19 },
                { 20, SparcRegisters.ASR20 },
                { 21, SparcRegisters.ASR21 },
                { 22, SparcRegisters.ASR22 },
                { 23, SparcRegisters.ASR23 },
                { 24, SparcRegisters.ASR24 },
                { 25, SparcRegisters.ASR25 },
                { 26, SparcRegisters.ASR26 },
                { 27, SparcRegisters.ASR27 },
                { 28, SparcRegisters.ASR28 },
                { 29, SparcRegisters.ASR29 },
                { 30, SparcRegisters.ASR30 },
                { 31, SparcRegisters.ASR31 },
            };
            ASR = new RegistersGroup <UInt32>(
                indexValueMapASR.Keys,
                i => GetRegisterValue32((int)indexValueMapASR[i]),
                (i, v) => SetRegisterValue32((int)indexValueMapASR[i], v));
        }
Example #8
0
        protected override void InitializeRegisters()
        {
            indexValueMapR = new Dictionary<int, ArmRegisters>
            {
                { 0, ArmRegisters.R0 },
                { 1, ArmRegisters.R1 },
                { 2, ArmRegisters.R2 },
                { 3, ArmRegisters.R3 },
                { 4, ArmRegisters.R4 },
                { 5, ArmRegisters.R5 },
                { 6, ArmRegisters.R6 },
                { 7, ArmRegisters.R7 },
                { 8, ArmRegisters.R8 },
                { 9, ArmRegisters.R9 },
                { 10, ArmRegisters.R10 },
                { 11, ArmRegisters.R11 },
                { 12, ArmRegisters.R12 },
                { 13, ArmRegisters.R13 },
                { 14, ArmRegisters.R14 },
                { 15, ArmRegisters.R15 },
            };
            R = new RegistersGroup<UInt32>(
                indexValueMapR.Keys,
                i => GetRegisterValue32((int)indexValueMapR[i]),
                (i, v) => SetRegisterValue32((int)indexValueMapR[i], v));

        }
        protected override void InitializeRegisters()
        {
            var indexValueMapX = new Dictionary <int, RiscV64Registers>
            {
                { 0, RiscV64Registers.X0 },
                { 1, RiscV64Registers.X1 },
                { 2, RiscV64Registers.X2 },
                { 3, RiscV64Registers.X3 },
                { 4, RiscV64Registers.X4 },
                { 5, RiscV64Registers.X5 },
                { 6, RiscV64Registers.X6 },
                { 7, RiscV64Registers.X7 },
                { 8, RiscV64Registers.X8 },
                { 9, RiscV64Registers.X9 },
                { 10, RiscV64Registers.X10 },
                { 11, RiscV64Registers.X11 },
                { 12, RiscV64Registers.X12 },
                { 13, RiscV64Registers.X13 },
                { 14, RiscV64Registers.X14 },
                { 15, RiscV64Registers.X15 },
                { 16, RiscV64Registers.X16 },
                { 17, RiscV64Registers.X17 },
                { 18, RiscV64Registers.X18 },
                { 19, RiscV64Registers.X19 },
                { 20, RiscV64Registers.X20 },
                { 21, RiscV64Registers.X21 },
                { 22, RiscV64Registers.X22 },
                { 23, RiscV64Registers.X23 },
                { 24, RiscV64Registers.X24 },
                { 25, RiscV64Registers.X25 },
                { 26, RiscV64Registers.X26 },
                { 27, RiscV64Registers.X27 },
                { 28, RiscV64Registers.X28 },
                { 29, RiscV64Registers.X29 },
                { 30, RiscV64Registers.X30 },
                { 31, RiscV64Registers.X31 },
            };

            X = new RegistersGroup(
                indexValueMapX.Keys,
                i => GetRegisterUnsafe((int)indexValueMapX[i]),
                (i, v) => SetRegisterUnsafe((int)indexValueMapX[i], v));

            var indexValueMapF = new Dictionary <int, RiscV64Registers>
            {
                { 0, RiscV64Registers.F0 },
                { 1, RiscV64Registers.F1 },
                { 2, RiscV64Registers.F2 },
                { 3, RiscV64Registers.F3 },
                { 4, RiscV64Registers.F4 },
                { 5, RiscV64Registers.F5 },
                { 6, RiscV64Registers.F6 },
                { 7, RiscV64Registers.F7 },
                { 8, RiscV64Registers.F8 },
                { 9, RiscV64Registers.F9 },
                { 10, RiscV64Registers.F10 },
                { 11, RiscV64Registers.F11 },
                { 12, RiscV64Registers.F12 },
                { 13, RiscV64Registers.F13 },
                { 14, RiscV64Registers.F14 },
                { 15, RiscV64Registers.F15 },
                { 16, RiscV64Registers.F16 },
                { 17, RiscV64Registers.F17 },
                { 18, RiscV64Registers.F18 },
                { 19, RiscV64Registers.F19 },
                { 20, RiscV64Registers.F20 },
                { 21, RiscV64Registers.F21 },
                { 22, RiscV64Registers.F22 },
                { 23, RiscV64Registers.F23 },
                { 24, RiscV64Registers.F24 },
                { 25, RiscV64Registers.F25 },
                { 26, RiscV64Registers.F26 },
                { 27, RiscV64Registers.F27 },
                { 28, RiscV64Registers.F28 },
                { 29, RiscV64Registers.F29 },
                { 30, RiscV64Registers.F30 },
                { 31, RiscV64Registers.F31 },
            };

            F = new RegistersGroup(
                indexValueMapF.Keys,
                i => GetRegisterUnsafe((int)indexValueMapF[i]),
                (i, v) => SetRegisterUnsafe((int)indexValueMapF[i], v));
        }