using Ryujinx.Cpu.LightningJit.CodeGen.Arm64;
using System;

namespace Ryujinx.Cpu.LightningJit.Arm32.Target.Arm64
{
    class InstEmit : IInstEmit
    {
        public static void AdcIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Imm12b0w12 inst = new(encoding);

            InstEmitAlu.AdcI(context, inst.Rd, inst.Rn, ImmUtils.ExpandImm(inst.Imm12), inst.S != 0);
        }

        public static void AdcIT1(CodeGenContext context, uint encoding)
        {
            InstIb26w1Sb20w1Rnb16w4Imm3b12w3Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitAlu.AdcI(context, inst.Rd, inst.Rn, ImmUtils.ExpandImm(inst.Imm8, inst.Imm3, inst.I), inst.S != 0);
        }

        public static void AdcRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.AdcR(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, inst.Imm5, inst.S != 0);
        }

        public static void AdcRT1(CodeGenContext context, uint encoding)
        {
            InstRmb19w3Rdnb16w3 inst = new(encoding);

            InstEmitAlu.AdcR(context, inst.Rdn, inst.Rdn, inst.Rm, 0, 0, !context.InITBlock);
        }

        public static void AdcRT2(CodeGenContext context, uint encoding)
        {
            InstSb20w1Rnb16w4Imm3b12w3Rdb8w4Imm2b6w2Stypeb4w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.AdcR(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3), inst.S != 0);
        }

        public static void AdcRrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Rsb8w4Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.AdcRr(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, inst.Rs, inst.S != 0);
        }

        public static void AddIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Imm12b0w12 inst = new(encoding);

            InstEmitAlu.AddI(context, inst.Rd, inst.Rn, ImmUtils.ExpandImm(inst.Imm12), inst.S != 0);
        }

        public static void AddIT1(CodeGenContext context, uint encoding)
        {
            InstImm3b22w3Rnb19w3Rdb16w3 inst = new(encoding);

            InstEmitAlu.AddI(context, inst.Rd, inst.Rn, inst.Imm3, !context.InITBlock);
        }

        public static void AddIT2(CodeGenContext context, uint encoding)
        {
            InstRdnb24w3Imm8b16w8 inst = new(encoding);

            InstEmitAlu.AddI(context, inst.Rdn, inst.Rdn, inst.Imm8, !context.InITBlock);
        }

        public static void AddIT3(CodeGenContext context, uint encoding)
        {
            InstIb26w1Sb20w1Rnb16w4Imm3b12w3Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitAlu.AddI(context, inst.Rd, inst.Rn, ImmUtils.ExpandImm(inst.Imm8, inst.Imm3, inst.I), inst.S != 0);
        }

        public static void AddIT4(CodeGenContext context, uint encoding)
        {
            InstIb26w1Rnb16w4Imm3b12w3Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitAlu.AddI(context, inst.Rd, inst.Rn, ImmUtils.CombineImmU12(inst.Imm8, inst.Imm3, inst.I), false);
        }

        public static void AddRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.AddR(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, inst.Imm5, inst.S != 0);
        }

        public static void AddRT1(CodeGenContext context, uint encoding)
        {
            InstRmb22w3Rnb19w3Rdb16w3 inst = new(encoding);

            InstEmitAlu.AddR(context, inst.Rd, inst.Rn, inst.Rm, 0, 0, !context.InITBlock);
        }

        public static void AddRT2(CodeGenContext context, uint encoding)
        {
            InstDnb23w1Rmb19w4Rdnb16w3 inst = new(encoding);

            uint rdn = (inst.Dn << 3) | inst.Rdn;

            InstEmitAlu.AddR(context, rdn, rdn, inst.Rm, 0, 0, false);
        }

        public static void AddRT3(CodeGenContext context, uint encoding)
        {
            InstSb20w1Rnb16w4Imm3b12w3Rdb8w4Imm2b6w2Stypeb4w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.AddR(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3), inst.S != 0);
        }

        public static void AddRrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Rsb8w4Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.AddRr(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, inst.Rs, inst.S != 0);
        }

        public static void AddSpIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rdb12w4Imm12b0w12 inst = new(encoding);

            InstEmitAlu.AddI(context, inst.Rd, RegisterUtils.SpRegister, ImmUtils.ExpandImm(inst.Imm12), inst.S != 0);
        }

        public static void AddSpIT1(CodeGenContext context, uint encoding)
        {
            InstRdb24w3Imm8b16w8 inst = new(encoding);

            InstEmitAlu.AddI(context, inst.Rd, RegisterUtils.SpRegister, inst.Imm8 << 2, false);
        }

        public static void AddSpIT2(CodeGenContext context, uint encoding)
        {
            InstImm7b16w7 inst = new(encoding);

            InstEmitAlu.AddI(context, RegisterUtils.SpRegister, RegisterUtils.SpRegister, inst.Imm7 << 2, false);
        }

        public static void AddSpIT3(CodeGenContext context, uint encoding)
        {
            InstIb26w1Sb20w1Imm3b12w3Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitAlu.AddI(context, inst.Rd, RegisterUtils.SpRegister, ImmUtils.ExpandImm(inst.Imm8, inst.Imm3, inst.I), inst.S != 0);
        }

        public static void AddSpIT4(CodeGenContext context, uint encoding)
        {
            InstIb26w1Imm3b12w3Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitAlu.AddI(context, inst.Rd, RegisterUtils.SpRegister, ImmUtils.CombineImmU12(inst.Imm8, inst.Imm3, inst.I), false);
        }

        public static void AddSpRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rdb12w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.AddR(context, inst.Rd, RegisterUtils.SpRegister, inst.Rm, inst.Stype, inst.Imm5, inst.S != 0);
        }

        public static void AddSpRT1(CodeGenContext context, uint encoding)
        {
            InstDmb23w1Rdmb16w3 inst = new(encoding);

            uint rdm = inst.Rdm | (inst.Dm << 3);

            InstEmitAlu.AddR(context, rdm, RegisterUtils.SpRegister, rdm, 0, 0, false);
        }

        public static void AddSpRT2(CodeGenContext context, uint encoding)
        {
            InstRmb19w4 inst = new(encoding);

            InstEmitAlu.AddR(context, RegisterUtils.SpRegister, RegisterUtils.SpRegister, inst.Rm, 0, 0, false);
        }

        public static void AddSpRT3(CodeGenContext context, uint encoding)
        {
            InstSb20w1Imm3b12w3Rdb8w4Imm2b6w2Stypeb4w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.AddR(context, inst.Rd, RegisterUtils.SpRegister, inst.Rm, inst.Stype, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3), inst.S != 0);
        }

        public static void AdrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb12w4Imm12b0w12 inst = new(encoding);

            InstEmitAlu.Adr(context, inst.Rd, ImmUtils.ExpandImm(inst.Imm12), true);
        }

        public static void AdrA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb12w4Imm12b0w12 inst = new(encoding);

            InstEmitAlu.Adr(context, inst.Rd, ImmUtils.ExpandImm(inst.Imm12), false);
        }

        public static void AdrT1(CodeGenContext context, uint encoding)
        {
            InstRdb24w3Imm8b16w8 inst = new(encoding);

            InstEmitAlu.Adr(context, inst.Rd, inst.Imm8 << 2, true);
        }

        public static void AdrT2(CodeGenContext context, uint encoding)
        {
            InstIb26w1Imm3b12w3Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitAlu.Adr(context, inst.Rd, ImmUtils.CombineImmU12(inst.Imm8, inst.Imm3, inst.I), false);
        }

        public static void AdrT3(CodeGenContext context, uint encoding)
        {
            InstIb26w1Imm3b12w3Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitAlu.Adr(context, inst.Rd, ImmUtils.CombineImmU12(inst.Imm8, inst.Imm3, inst.I), true);
        }

        public static void AesdA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCrypto.Aesd(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void AesdT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCrypto.Aesd(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void AeseA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCrypto.Aese(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void AeseT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCrypto.Aese(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void AesimcA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCrypto.Aesimc(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void AesimcT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCrypto.Aesimc(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void AesmcA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCrypto.Aesmc(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void AesmcT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCrypto.Aesmc(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void AndIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Imm12b0w12 inst = new(encoding);

            InstEmitAlu.AndI(context, inst.Rd, inst.Rn, ImmUtils.ExpandImm(inst.Imm12), ImmUtils.ExpandedImmRotated(inst.Imm12), inst.S != 0);
        }

        public static void AndIT1(CodeGenContext context, uint encoding)
        {
            InstIb26w1Sb20w1Rnb16w4Imm3b12w3Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitAlu.AndI(context, inst.Rd, inst.Rn, ImmUtils.ExpandImm(inst.Imm8, inst.Imm3, inst.I), ImmUtils.ExpandedImmRotated(inst.Imm8, inst.Imm3, inst.I), inst.S != 0);
        }

        public static void AndRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.AndR(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, inst.Imm5, inst.S != 0);
        }

        public static void AndRT1(CodeGenContext context, uint encoding)
        {
            InstRmb19w3Rdnb16w3 inst = new(encoding);

            InstEmitAlu.AndR(context, inst.Rdn, inst.Rdn, inst.Rm, 0, 0, !context.InITBlock);
        }

        public static void AndRT2(CodeGenContext context, uint encoding)
        {
            InstSb20w1Rnb16w4Imm3b12w3Rdb8w4Imm2b6w2Stypeb4w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.AndR(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3), inst.S != 0);
        }

        public static void AndRrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Rsb8w4Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.AndRr(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, inst.Rs, inst.S != 0);
        }

        public static void BA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Imm24b0w24 inst = new(encoding);

            InstEmitFlow.B(context, ImmUtils.ExtractSImm24Times4(inst.Imm24), (ArmCondition)inst.Cond);
        }

        public static void BT1(CodeGenContext context, uint encoding)
        {
            InstCondb24w4Imm8b16w8 inst = new(encoding);

            InstEmitFlow.B(context, ImmUtils.ExtractT16SImm8Times2(inst.Imm8), (ArmCondition)inst.Cond);
        }

        public static void BT2(CodeGenContext context, uint encoding)
        {
            InstImm11b16w11 inst = new(encoding);

            InstEmitFlow.B(context, ImmUtils.ExtractT16SImm11Times2(inst.Imm11), ArmCondition.Al);
        }

        public static void BT3(CodeGenContext context, uint encoding)
        {
            InstSb26w1Condb22w4Imm6b16w6J1b13w1J2b11w1Imm11b0w11 inst = new(encoding);

            InstEmitFlow.B(context, ImmUtils.CombineSImm20Times2(inst.Imm11, inst.Imm6, inst.J1, inst.J2, inst.S), (ArmCondition)inst.Cond);
        }

        public static void BT4(CodeGenContext context, uint encoding)
        {
            InstSb26w1Imm10b16w10J1b13w1J2b11w1Imm11b0w11 inst = new(encoding);

            InstEmitFlow.B(context, ImmUtils.CombineSImm24Times2(inst.Imm11, inst.Imm10, inst.J1, inst.J2, inst.S), ArmCondition.Al);
        }

        public static void BfcA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Msbb16w5Rdb12w4Lsbb7w5 inst = new(encoding);

            InstEmitBit.Bfc(context, inst.Rd, inst.Lsb, inst.Msb);
        }

        public static void BfcT1(CodeGenContext context, uint encoding)
        {
            InstImm3b12w3Rdb8w4Imm2b6w2Msbb0w5 inst = new(encoding);

            InstEmitBit.Bfc(context, inst.Rd, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3), inst.Msb);
        }

        public static void BfiA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Msbb16w5Rdb12w4Lsbb7w5Rnb0w4 inst = new(encoding);

            InstEmitBit.Bfi(context, inst.Rd, inst.Rn, inst.Lsb, inst.Msb);
        }

        public static void BfiT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Imm3b12w3Rdb8w4Imm2b6w2Msbb0w5 inst = new(encoding);

            InstEmitBit.Bfi(context, inst.Rd, inst.Rn, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3), inst.Msb);
        }

        public static void BicIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Imm12b0w12 inst = new(encoding);

            InstEmitAlu.BicI(context, inst.Rd, inst.Rn, ImmUtils.ExpandImm(inst.Imm12), ImmUtils.ExpandedImmRotated(inst.Imm12), inst.S != 0);
        }

        public static void BicIT1(CodeGenContext context, uint encoding)
        {
            InstIb26w1Sb20w1Rnb16w4Imm3b12w3Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitAlu.BicI(context, inst.Rd, inst.Rn, ImmUtils.ExpandImm(inst.Imm8, inst.Imm3, inst.I), ImmUtils.ExpandedImmRotated(inst.Imm8, inst.Imm3, inst.I), inst.S != 0);
        }

        public static void BicRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.BicR(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, inst.Imm5, inst.S != 0);
        }

        public static void BicRT1(CodeGenContext context, uint encoding)
        {
            InstRmb19w3Rdnb16w3 inst = new(encoding);

            InstEmitAlu.BicR(context, inst.Rdn, inst.Rdn, inst.Rm, 0, 0, !context.InITBlock);
        }

        public static void BicRT2(CodeGenContext context, uint encoding)
        {
            InstSb20w1Rnb16w4Imm3b12w3Rdb8w4Imm2b6w2Stypeb4w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.BicR(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3), inst.S != 0);
        }

        public static void BicRrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Rsb8w4Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.BicRr(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, inst.Rs, inst.S != 0);
        }

        public static void BkptA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Imm12b8w12Imm4b0w4 inst = new(encoding);

            InstEmitSystem.Bkpt(context, ImmUtils.CombineImmU16(inst.Imm12, inst.Imm4));
        }

        public static void BkptT1(CodeGenContext context, uint encoding)
        {
            InstImm8b16w8 inst = new(encoding);

            InstEmitSystem.Bkpt(context, inst.Imm8);
        }

        public static void BlxRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rmb0w4 inst = new(encoding);

            InstEmitFlow.Blx(context, inst.Rm, false);
        }

        public static void BlxRT1(CodeGenContext context, uint encoding)
        {
            InstRmb19w4 inst = new(encoding);

            InstEmitFlow.Blx(context, inst.Rm, true);
        }

        public static void BlIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Imm24b0w24 inst = new(encoding);

            InstEmitFlow.Bl(context, ImmUtils.ExtractSImm24Times4(inst.Imm24), false, false);
        }

        public static void BlIA2(CodeGenContext context, uint encoding)
        {
            InstHb24w1Imm24b0w24 inst = new(encoding);

            InstEmitFlow.Bl(context, ImmUtils.ExtractSImm24Times4(inst.Imm24) | ((int)inst.H << 1), false, true);
        }

        public static void BlIT1(CodeGenContext context, uint encoding)
        {
            InstSb26w1Imm10b16w10J1b13w1J2b11w1Imm11b0w11 inst = new(encoding);

            InstEmitFlow.Bl(context, ImmUtils.CombineSImm24Times2(inst.Imm11, inst.Imm10, inst.J1, inst.J2, inst.S), true, true);
        }

        public static void BlIT2(CodeGenContext context, uint encoding)
        {
            InstSb26w1Imm10hb16w10J1b13w1J2b11w1Imm10lb1w10Hb0w1 inst = new(encoding);

            InstEmitFlow.Bl(context, ImmUtils.CombineSImm24Times4(inst.Imm10l, inst.Imm10h, inst.J1, inst.J2, inst.S), true, false);
        }

        public static void BxA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rmb0w4 inst = new(encoding);

            InstEmitFlow.Bx(context, inst.Rm);
        }

        public static void BxT1(CodeGenContext context, uint encoding)
        {
            InstRmb19w4 inst = new(encoding);

            InstEmitFlow.Bx(context, inst.Rm);
        }

        public static void BxjA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rmb0w4 inst = new(encoding);

            InstEmitFlow.Bx(context, inst.Rm);
        }

        public static void BxjT1(CodeGenContext context, uint encoding)
        {
            InstRmb16w4 inst = new(encoding);

            InstEmitFlow.Bx(context, inst.Rm);
        }

        public static void CbnzT1(CodeGenContext context, uint encoding)
        {
            InstOpb27w1Ib25w1Imm5b19w5Rnb16w3 inst = new(encoding);

            InstEmitFlow.Cbnz(context, inst.Rn, (int)((inst.Imm5 << 1) | (inst.I << 6)), inst.Op != 0);
        }

        public static void ClrbhbA1(CodeGenContext context, uint encoding)
        {
            _ = new InstCondb28w4(encoding);

            throw new NotImplementedException();
        }

        public static void ClrbhbT1(CodeGenContext context, uint encoding)
        {
            throw new NotImplementedException();
        }

        public static void ClrexA1(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Clrex();
        }

        public static void ClrexT1(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Clrex();
        }

        public static void ClzA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitBit.Clz(context, inst.Rd, inst.Rm);
        }

        public static void ClzT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitBit.Clz(context, inst.Rd, inst.Rm);
        }

        public static void CmnIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Imm12b0w12 inst = new(encoding);

            InstEmitAlu.CmnI(context, inst.Rn, ImmUtils.ExpandImm(inst.Imm12));
        }

        public static void CmnIT1(CodeGenContext context, uint encoding)
        {
            InstIb26w1Rnb16w4Imm3b12w3Imm8b0w8 inst = new(encoding);

            InstEmitAlu.CmnI(context, inst.Rn, ImmUtils.ExpandImm(inst.Imm8, inst.Imm3, inst.I));
        }

        public static void CmnRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.CmnR(context, inst.Rn, inst.Rm, inst.Stype, inst.Imm5);
        }

        public static void CmnRT1(CodeGenContext context, uint encoding)
        {
            InstRmb19w3Rnb16w3 inst = new(encoding);

            InstEmitAlu.CmnR(context, inst.Rn, inst.Rm, 0, 0);
        }

        public static void CmnRT2(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Imm3b12w3Imm2b6w2Stypeb4w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.CmnR(context, inst.Rn, inst.Rm, inst.Stype, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3));
        }

        public static void CmnRrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rsb8w4Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.CmnRr(context, inst.Rn, inst.Rm, inst.Stype, inst.Rs);
        }

        public static void CmpIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Imm12b0w12 inst = new(encoding);

            InstEmitAlu.CmpI(context, inst.Rn, ImmUtils.ExpandImm(inst.Imm12));
        }

        public static void CmpIT1(CodeGenContext context, uint encoding)
        {
            InstRnb24w3Imm8b16w8 inst = new(encoding);

            InstEmitAlu.CmpI(context, inst.Rn, inst.Imm8);
        }

        public static void CmpIT2(CodeGenContext context, uint encoding)
        {
            InstIb26w1Rnb16w4Imm3b12w3Imm8b0w8 inst = new(encoding);

            InstEmitAlu.CmpI(context, inst.Rn, ImmUtils.ExpandImm(inst.Imm8, inst.Imm3, inst.I));
        }

        public static void CmpRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.CmpR(context, inst.Rn, inst.Rm, inst.Stype, inst.Imm5);
        }

        public static void CmpRT1(CodeGenContext context, uint encoding)
        {
            InstRmb19w3Rnb16w3 inst = new(encoding);

            InstEmitAlu.CmpR(context, inst.Rn, inst.Rm, 0, 0);
        }

        public static void CmpRT2(CodeGenContext context, uint encoding)
        {
            InstNb23w1Rmb19w4Rnb16w3 inst = new(encoding);

            InstEmitAlu.CmpR(context, inst.Rn | (inst.N << 3), inst.Rm, 0, 0);
        }

        public static void CmpRT3(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Imm3b12w3Imm2b6w2Stypeb4w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.CmpR(context, inst.Rn, inst.Rm, inst.Stype, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3));
        }

        public static void CmpRrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rsb8w4Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.CmpRr(context, inst.Rn, inst.Rm, inst.Stype, inst.Rs);
        }

        public static void CpsA1(CodeGenContext context, uint encoding)
        {
            InstImodb18w2Mb17w1Ab8w1Ib7w1Fb6w1Modeb0w5 inst = new(encoding);

            InstEmitSystem.Cps(context, inst.Imod, inst.M, inst.A, inst.I, inst.F, inst.Mode);
        }

        public static void CpsT1(CodeGenContext context, uint encoding)
        {
            InstImb20w1Ab18w1Ib17w1Fb16w1 inst = new(encoding);

            InstEmitSystem.Cps(context, inst.Im, 0, inst.A, inst.I, inst.F, 0);
        }

        public static void CpsT2(CodeGenContext context, uint encoding)
        {
            InstImodb9w2Mb8w1Ab7w1Ib6w1Fb5w1Modeb0w5 inst = new(encoding);

            InstEmitSystem.Cps(context, inst.Imod, inst.M, inst.A, inst.I, inst.F, inst.Mode);
        }

        public static void Crc32A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Szb21w2Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitCrc32.Crc32(context, inst.Rd, inst.Rn, inst.Rm, inst.Sz);
        }

        public static void Crc32T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Szb4w2Rmb0w4 inst = new(encoding);

            InstEmitCrc32.Crc32(context, inst.Rd, inst.Rn, inst.Rm, inst.Sz);
        }

        public static void Crc32cA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Szb21w2Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitCrc32.Crc32c(context, inst.Rd, inst.Rn, inst.Rm, inst.Sz);
        }

        public static void Crc32cT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Szb4w2Rmb0w4 inst = new(encoding);

            InstEmitCrc32.Crc32c(context, inst.Rd, inst.Rn, inst.Rm, inst.Sz);
        }

        public static void CsdbA1(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Csdb();
        }

        public static void CsdbT1(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Csdb();
        }

        public static void DbgA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Optionb0w4 inst = new(encoding);

            InstEmitSystem.Dbg(context, inst.Option);
        }

        public static void DbgT1(CodeGenContext context, uint encoding)
        {
            InstOptionb0w4 inst = new(encoding);

            InstEmitSystem.Dbg(context, inst.Option);
        }

        public static void Dcps1T1(CodeGenContext context, uint encoding)
        {
            InstEmitSystem.PrivilegedInstruction(context, encoding);
        }

        public static void Dcps2T1(CodeGenContext context, uint encoding)
        {
            InstEmitSystem.PrivilegedInstruction(context, encoding);
        }

        public static void Dcps3T1(CodeGenContext context, uint encoding)
        {
            InstEmitSystem.PrivilegedInstruction(context, encoding);
        }

        public static void DmbA1(CodeGenContext context, uint encoding)
        {
            InstOptionb0w4 inst = new(encoding);

            context.Arm64Assembler.Dmb(inst.Option);
        }

        public static void DmbT1(CodeGenContext context, uint encoding)
        {
            InstOptionb0w4 inst = new(encoding);

            context.Arm64Assembler.Dmb(inst.Option);
        }

        public static void DsbA1(CodeGenContext context, uint encoding)
        {
            InstOptionb0w4 inst = new(encoding);

            context.Arm64Assembler.Dsb(inst.Option);
        }

        public static void DsbT1(CodeGenContext context, uint encoding)
        {
            InstOptionb0w4 inst = new(encoding);

            context.Arm64Assembler.Dsb(inst.Option);
        }

        public static void EorIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Imm12b0w12 inst = new(encoding);

            InstEmitAlu.EorI(context, inst.Rd, inst.Rn, ImmUtils.ExpandImm(inst.Imm12), ImmUtils.ExpandedImmRotated(inst.Imm12), inst.S != 0);
        }

        public static void EorIT1(CodeGenContext context, uint encoding)
        {
            InstIb26w1Sb20w1Rnb16w4Imm3b12w3Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitAlu.EorI(context, inst.Rd, inst.Rn, ImmUtils.ExpandImm(inst.Imm8, inst.Imm3, inst.I), ImmUtils.ExpandedImmRotated(inst.Imm8, inst.Imm3, inst.I), inst.S != 0);
        }

        public static void EorRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.EorR(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, inst.Imm5, inst.S != 0);
        }

        public static void EorRT1(CodeGenContext context, uint encoding)
        {
            InstRmb19w3Rdnb16w3 inst = new(encoding);

            InstEmitAlu.EorR(context, inst.Rdn, inst.Rdn, inst.Rm, 0, 0, !context.InITBlock);
        }

        public static void EorRT2(CodeGenContext context, uint encoding)
        {
            InstSb20w1Rnb16w4Imm3b12w3Rdb8w4Imm2b6w2Stypeb4w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.EorR(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3), inst.S != 0);
        }

        public static void EorRrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Rsb8w4Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.EorRr(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, inst.Rs, inst.S != 0);
        }

        public static void EretA1(CodeGenContext context, uint encoding)
        {
            InstEmitSystem.PrivilegedInstruction(context, encoding);
        }

        public static void EretT1(CodeGenContext context, uint encoding)
        {
            InstEmitSystem.PrivilegedInstruction(context, encoding);
        }

        public static void EsbA1(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Esb();
        }

        public static void EsbT1(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Esb();
        }

        public static void FldmxA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Db22w1Wb21w1Rnb16w4Vdb12w4Imm871b1w7 inst = new(encoding);

            InstEmitNeonMemory.Vldm(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Imm871, inst.U != 0, inst.W != 0, singleRegs: false);
        }

        public static void FldmxT1(CodeGenContext context, uint encoding)
        {
            InstPb24w1Ub23w1Db22w1Wb21w1Rnb16w4Vdb12w4Imm871b1w7 inst = new(encoding);

            InstEmitNeonMemory.Vldm(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Imm871, inst.U != 0, inst.W != 0, singleRegs: false);
        }

        public static void FstmxA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Db22w1Wb21w1Rnb16w4Vdb12w4Imm871b1w7 inst = new(encoding);

            InstEmitNeonMemory.Vstm(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Imm871, inst.U != 0, inst.W != 0, singleRegs: false);
        }

        public static void FstmxT1(CodeGenContext context, uint encoding)
        {
            InstPb24w1Ub23w1Db22w1Wb21w1Rnb16w4Vdb12w4Imm871b1w7 inst = new(encoding);

            InstEmitNeonMemory.Vstm(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Imm871, inst.U != 0, inst.W != 0, singleRegs: false);
        }

        public static void HltA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Imm12b8w12Imm4b0w4 inst = new(encoding);

            InstEmitSystem.Hlt(context, ImmUtils.CombineImmU16(inst.Imm12, inst.Imm4));
        }

        public static void HltT1(CodeGenContext context, uint encoding)
        {
            InstImm6b16w6 inst = new(encoding);

            InstEmitSystem.Hlt(context, inst.Imm6);
        }

        public static void HvcA1(CodeGenContext context, uint encoding)
        {
            InstEmitSystem.PrivilegedInstruction(context, encoding);
        }

        public static void HvcT1(CodeGenContext context, uint encoding)
        {
            InstEmitSystem.PrivilegedInstruction(context, encoding);
        }

        public static void IsbA1(CodeGenContext context, uint encoding)
        {
            InstOptionb0w4 inst = new(encoding);

            context.Arm64Assembler.Isb(inst.Option);
        }

        public static void IsbT1(CodeGenContext context, uint encoding)
        {
            InstOptionb0w4 inst = new(encoding);

            context.Arm64Assembler.Isb(inst.Option);
        }

        public static void ItT1(CodeGenContext context, uint encoding)
        {
            InstFirstcondb20w4Maskb16w4 inst = new(encoding);

            InstEmitFlow.It(context, inst.Firstcond, inst.Mask);
        }

        public static void LdaA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rtb12w4 inst = new(encoding);

            InstEmitMemory.Lda(context, inst.Rt, inst.Rn);
        }

        public static void LdaT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4 inst = new(encoding);

            InstEmitMemory.Lda(context, inst.Rt, inst.Rn);
        }

        public static void LdabA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rtb12w4 inst = new(encoding);

            InstEmitMemory.Ldab(context, inst.Rt, inst.Rn);
        }

        public static void LdabT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4 inst = new(encoding);

            InstEmitMemory.Ldab(context, inst.Rt, inst.Rn);
        }

        public static void LdaexA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rtb12w4 inst = new(encoding);

            InstEmitMemory.Ldaex(context, inst.Rt, inst.Rn);
        }

        public static void LdaexT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4 inst = new(encoding);

            InstEmitMemory.Ldaex(context, inst.Rt, inst.Rn);
        }

        public static void LdaexbA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rtb12w4 inst = new(encoding);

            InstEmitMemory.Ldaexb(context, inst.Rt, inst.Rn);
        }

        public static void LdaexbT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4 inst = new(encoding);

            InstEmitMemory.Ldaexb(context, inst.Rt, inst.Rn);
        }

        public static void LdaexdA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rtb12w4 inst = new(encoding);

            InstEmitMemory.Ldaexd(context, inst.Rt, RegisterUtils.GetRt2(inst.Rt), inst.Rn);
        }

        public static void LdaexdT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Rt2b8w4 inst = new(encoding);

            InstEmitMemory.Ldaexd(context, inst.Rt, inst.Rt2, inst.Rn);
        }

        public static void LdaexhA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rtb12w4 inst = new(encoding);

            InstEmitMemory.Ldaexh(context, inst.Rt, inst.Rn);
        }

        public static void LdaexhT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4 inst = new(encoding);

            InstEmitMemory.Ldaexh(context, inst.Rt, inst.Rn);
        }

        public static void LdahA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rtb12w4 inst = new(encoding);

            InstEmitMemory.Ldah(context, inst.Rt, inst.Rn);
        }

        public static void LdahT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4 inst = new(encoding);

            InstEmitMemory.Ldah(context, inst.Rt, inst.Rn);
        }

        public static void LdcIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rnb16w4Imm8b0w8 inst = new(encoding);

            InstEmitMemory.LdcI(context, inst.Rn, (int)inst.Imm8 << 2, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdcIT1(CodeGenContext context, uint encoding)
        {
            InstPb24w1Ub23w1Wb21w1Rnb16w4Imm8b0w8 inst = new(encoding);

            InstEmitMemory.LdcI(context, inst.Rn, (int)inst.Imm8 << 2, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdcLA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Imm8b0w8 inst = new(encoding);

            InstEmitMemory.LdcL(context, inst.Imm8 << 2, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdcLT1(CodeGenContext context, uint encoding)
        {
            InstPb24w1Ub23w1Wb21w1Imm8b0w8 inst = new(encoding);

            InstEmitMemory.LdcL(context, inst.Imm8 << 2, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdmA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Wb21w1Rnb16w4RegisterListb0w16 inst = new(encoding);

            InstEmitMemory.Ldm(context, inst.Rn, inst.RegisterList, inst.W != 0);
        }

        public static void LdmT1(CodeGenContext context, uint encoding)
        {
            InstRnb24w3RegisterListb16w8 inst = new(encoding);

            InstEmitMemory.Ldm(context, inst.Rn, inst.RegisterList, false);
        }

        public static void LdmT2(CodeGenContext context, uint encoding)
        {
            InstWb21w1Rnb16w4Pb15w1Mb14w1RegisterListb0w14 inst = new(encoding);

            InstEmitMemory.Ldm(context, inst.Rn, ImmUtils.CombineRegisterList(inst.RegisterList, inst.M, inst.P), inst.W != 0);
        }

        public static void LdmdaA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Wb21w1Rnb16w4RegisterListb0w16 inst = new(encoding);

            InstEmitMemory.Ldmda(context, inst.Rn, inst.RegisterList, inst.W != 0);
        }

        public static void LdmdbA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Wb21w1Rnb16w4RegisterListb0w16 inst = new(encoding);

            InstEmitMemory.Ldmdb(context, inst.Rn, inst.RegisterList, inst.W != 0);
        }

        public static void LdmdbT1(CodeGenContext context, uint encoding)
        {
            InstWb21w1Rnb16w4Pb15w1Mb14w1RegisterListb0w14 inst = new(encoding);

            InstEmitMemory.Ldmdb(context, inst.Rn, ImmUtils.CombineRegisterList(inst.RegisterList, inst.M, inst.P), inst.W != 0);
        }

        public static void LdmibA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Wb21w1Rnb16w4RegisterListb0w16 inst = new(encoding);

            InstEmitMemory.Ldmib(context, inst.Rn, inst.RegisterList, inst.W != 0);
        }

        public static void LdmEA1(CodeGenContext context, uint encoding)
        {
            InstEmitSystem.PrivilegedInstruction(context, encoding);
        }

        public static void LdmUA1(CodeGenContext context, uint encoding)
        {
            InstEmitSystem.PrivilegedInstruction(context, encoding);
        }

        public static void LdrbtA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Ub23w1Rnb16w4Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.LdrbtI(context, inst.Rt, inst.Rn, (int)inst.Imm12, postIndex: true, inst.U != 0);
        }

        public static void LdrbtA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Ub23w1Rnb16w4Rtb12w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitMemory.LdrbtR(context, inst.Rt, inst.Rn, inst.Rm, inst.Stype, inst.Imm5, postIndex: true, inst.U != 0);
        }

        public static void LdrbtT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm8b0w8 inst = new(encoding);

            InstEmitMemory.LdrbtI(context, inst.Rt, inst.Rn, (int)inst.Imm8, postIndex: false, true);
        }

        public static void LdrbIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rnb16w4Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.LdrbI(context, inst.Rt, inst.Rn, (int)inst.Imm12, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrbIT1(CodeGenContext context, uint encoding)
        {
            InstImm5b22w5Rnb19w3Rtb16w3 inst = new(encoding);

            InstEmitMemory.LdrbI(context, inst.Rt, inst.Rn, (int)inst.Imm5, true, true, false);
        }

        public static void LdrbIT2(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.LdrbI(context, inst.Rt, inst.Rn, (int)inst.Imm12, true, true, false);
        }

        public static void LdrbIT3(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Pb10w1Ub9w1Wb8w1Imm8b0w8 inst = new(encoding);

            InstEmitMemory.LdrbI(context, inst.Rt, inst.Rn, (int)inst.Imm8, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrbLA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.LdrbL(context, inst.Rt, inst.Imm12, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrbLT1(CodeGenContext context, uint encoding)
        {
            InstUb23w1Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.LdrbL(context, inst.Rt, inst.Imm12, true, inst.U != 0, false);
        }

        public static void LdrbRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rnb16w4Rtb12w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitMemory.LdrbR(context, inst.Rt, inst.Rn, inst.Rm, inst.Stype, inst.Imm5, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrbRT1(CodeGenContext context, uint encoding)
        {
            InstRmb22w3Rnb19w3Rtb16w3 inst = new(encoding);

            InstEmitMemory.LdrbR(context, inst.Rt, inst.Rn, inst.Rm, 0, 0, true, true, false);
        }

        public static void LdrbRT2(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm2b4w2Rmb0w4 inst = new(encoding);

            InstEmitMemory.LdrbR(context, inst.Rt, inst.Rn, inst.Rm, 0, inst.Imm2, true, true, false);
        }

        public static void LdrdIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rnb16w4Rtb12w4Imm4hb8w4Imm4lb0w4 inst = new(encoding);

            InstEmitMemory.LdrdI(context, inst.Rt, RegisterUtils.GetRt2(inst.Rt), inst.Rn, ImmUtils.CombineImmU8(inst.Imm4l, inst.Imm4h), inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrdIT1(CodeGenContext context, uint encoding)
        {
            InstPb24w1Ub23w1Wb21w1Rnb16w4Rtb12w4Rt2b8w4Imm8b0w8 inst = new(encoding);

            InstEmitMemory.LdrdI(context, inst.Rt, inst.Rt2, inst.Rn, inst.Imm8 << 2, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrdLA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Ub23w1Rtb12w4Imm4hb8w4Imm4lb0w4 inst = new(encoding);

            InstEmitMemory.LdrdL(context, inst.Rt, RegisterUtils.GetRt2(inst.Rt), ImmUtils.CombineImmU8(inst.Imm4l, inst.Imm4h), true, inst.U != 0, false);
        }

        public static void LdrdLT1(CodeGenContext context, uint encoding)
        {
            InstPb24w1Ub23w1Wb21w1Rtb12w4Rt2b8w4Imm8b0w8 inst = new(encoding);

            InstEmitMemory.LdrdL(context, inst.Rt, inst.Rt2, inst.Imm8, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrdRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rnb16w4Rtb12w4Rmb0w4 inst = new(encoding);

            InstEmitMemory.LdrdR(context, inst.Rt, RegisterUtils.GetRt2(inst.Rt), inst.Rn, inst.Rm, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrexA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rtb12w4 inst = new(encoding);

            InstEmitMemory.Ldrex(context, inst.Rt, inst.Rn);
        }

        public static void LdrexT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm8b0w8 inst = new(encoding);

            InstEmitMemory.Ldrex(context, inst.Rt, inst.Rn);
        }

        public static void LdrexbA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rtb12w4 inst = new(encoding);

            InstEmitMemory.Ldrexb(context, inst.Rt, inst.Rn);
        }

        public static void LdrexbT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4 inst = new(encoding);

            InstEmitMemory.Ldrexb(context, inst.Rt, inst.Rn);
        }

        public static void LdrexdA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rtb12w4 inst = new(encoding);

            InstEmitMemory.Ldrexd(context, inst.Rt, RegisterUtils.GetRt2(inst.Rt), inst.Rn);
        }

        public static void LdrexdT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Rt2b8w4 inst = new(encoding);

            InstEmitMemory.Ldrexd(context, inst.Rt, inst.Rt2, inst.Rn);
        }

        public static void LdrexhA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rtb12w4 inst = new(encoding);

            InstEmitMemory.Ldrexh(context, inst.Rt, inst.Rn);
        }

        public static void LdrexhT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4 inst = new(encoding);

            InstEmitMemory.Ldrexh(context, inst.Rt, inst.Rn);
        }

        public static void LdrhtA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Ub23w1Rnb16w4Rtb12w4Imm4hb8w4Imm4lb0w4 inst = new(encoding);

            InstEmitMemory.LdrhtI(context, inst.Rt, inst.Rn, (int)ImmUtils.CombineImmU8(inst.Imm4l, inst.Imm4h), postIndex: true, inst.U != 0);
        }

        public static void LdrhtA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Ub23w1Rnb16w4Rtb12w4Rmb0w4 inst = new(encoding);

            InstEmitMemory.LdrhtR(context, inst.Rt, inst.Rn, inst.Rm, postIndex: true, inst.U != 0);
        }

        public static void LdrhtT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm8b0w8 inst = new(encoding);

            InstEmitMemory.LdrhtI(context, inst.Rt, inst.Rn, (int)inst.Imm8, postIndex: false, true);
        }

        public static void LdrhIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rnb16w4Rtb12w4Imm4hb8w4Imm4lb0w4 inst = new(encoding);

            InstEmitMemory.LdrhI(context, inst.Rt, inst.Rn, (int)ImmUtils.CombineImmU8(inst.Imm4l, inst.Imm4h), inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrhIT1(CodeGenContext context, uint encoding)
        {
            InstImm5b22w5Rnb19w3Rtb16w3 inst = new(encoding);

            InstEmitMemory.LdrhI(context, inst.Rt, inst.Rn, (int)inst.Imm5 << 1, true, true, false);
        }

        public static void LdrhIT2(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.LdrhI(context, inst.Rt, inst.Rn, (int)inst.Imm12, true, true, false);
        }

        public static void LdrhIT3(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Pb10w1Ub9w1Wb8w1Imm8b0w8 inst = new(encoding);

            InstEmitMemory.LdrhI(context, inst.Rt, inst.Rn, (int)inst.Imm8, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrhLA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rtb12w4Imm4hb8w4Imm4lb0w4 inst = new(encoding);

            InstEmitMemory.LdrhL(context, inst.Rt, ImmUtils.CombineImmU8(inst.Imm4l, inst.Imm4h), inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrhLT1(CodeGenContext context, uint encoding)
        {
            InstUb23w1Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.LdrhL(context, inst.Rt, inst.Imm12, true, inst.U != 0, false);
        }

        public static void LdrhRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rnb16w4Rtb12w4Rmb0w4 inst = new(encoding);

            InstEmitMemory.LdrhR(context, inst.Rt, inst.Rn, inst.Rm, 0, 0, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrhRT1(CodeGenContext context, uint encoding)
        {
            InstRmb22w3Rnb19w3Rtb16w3 inst = new(encoding);

            InstEmitMemory.LdrhR(context, inst.Rt, inst.Rn, inst.Rm, 0, 0, true, true, false);
        }

        public static void LdrhRT2(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm2b4w2Rmb0w4 inst = new(encoding);

            InstEmitMemory.LdrhR(context, inst.Rt, inst.Rn, inst.Rm, 0, inst.Imm2, true, true, false);
        }

        public static void LdrsbtA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Ub23w1Rnb16w4Rtb12w4Imm4hb8w4Imm4lb0w4 inst = new(encoding);

            InstEmitMemory.LdrsbtI(context, inst.Rt, inst.Rn, (int)ImmUtils.CombineImmU8(inst.Imm4l, inst.Imm4h), postIndex: true, inst.U != 0);
        }

        public static void LdrsbtA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Ub23w1Rnb16w4Rtb12w4Rmb0w4 inst = new(encoding);

            InstEmitMemory.LdrsbtR(context, inst.Rt, inst.Rn, inst.Rm, postIndex: true, inst.U != 0);
        }

        public static void LdrsbtT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm8b0w8 inst = new(encoding);

            InstEmitMemory.LdrsbtI(context, inst.Rt, inst.Rn, (int)inst.Imm8, postIndex: false, true);
        }

        public static void LdrsbIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rnb16w4Rtb12w4Imm4hb8w4Imm4lb0w4 inst = new(encoding);

            InstEmitMemory.LdrsbI(context, inst.Rt, inst.Rn, (int)ImmUtils.CombineImmU8(inst.Imm4l, inst.Imm4h), inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrsbIT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.LdrsbI(context, inst.Rt, inst.Rn, (int)inst.Imm12, true, true, false);
        }

        public static void LdrsbIT2(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Pb10w1Ub9w1Wb8w1Imm8b0w8 inst = new(encoding);

            InstEmitMemory.LdrsbI(context, inst.Rt, inst.Rn, (int)inst.Imm8, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrsbLA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rtb12w4Imm4hb8w4Imm4lb0w4 inst = new(encoding);

            InstEmitMemory.LdrsbL(context, inst.Rt, ImmUtils.CombineImmU8(inst.Imm4l, inst.Imm4h), inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrsbLT1(CodeGenContext context, uint encoding)
        {
            InstUb23w1Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.LdrsbL(context, inst.Rt, inst.Imm12, true, inst.U != 0, false);
        }

        public static void LdrsbRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rnb16w4Rtb12w4Rmb0w4 inst = new(encoding);

            InstEmitMemory.LdrsbR(context, inst.Rt, inst.Rn, inst.Rm, 0, 0, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrsbRT1(CodeGenContext context, uint encoding)
        {
            InstRmb22w3Rnb19w3Rtb16w3 inst = new(encoding);

            InstEmitMemory.LdrsbR(context, inst.Rt, inst.Rn, inst.Rm, 0, 0, true, true, false);
        }

        public static void LdrsbRT2(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm2b4w2Rmb0w4 inst = new(encoding);

            InstEmitMemory.LdrsbR(context, inst.Rt, inst.Rn, inst.Rm, 0, inst.Imm2, true, true, false);
        }

        public static void LdrshtA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Ub23w1Rnb16w4Rtb12w4Imm4hb8w4Imm4lb0w4 inst = new(encoding);

            InstEmitMemory.LdrshtI(context, inst.Rt, inst.Rn, (int)ImmUtils.CombineImmU8(inst.Imm4l, inst.Imm4h), postIndex: true, inst.U != 0);
        }

        public static void LdrshtA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Ub23w1Rnb16w4Rtb12w4Rmb0w4 inst = new(encoding);

            InstEmitMemory.LdrshtR(context, inst.Rt, inst.Rn, inst.Rm, postIndex: true, inst.U != 0);
        }

        public static void LdrshtT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm8b0w8 inst = new(encoding);

            InstEmitMemory.LdrshtI(context, inst.Rt, inst.Rn, (int)inst.Imm8, postIndex: false, true);
        }

        public static void LdrshIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rnb16w4Rtb12w4Imm4hb8w4Imm4lb0w4 inst = new(encoding);

            InstEmitMemory.LdrshI(context, inst.Rt, inst.Rn, (int)ImmUtils.CombineImmU8(inst.Imm4l, inst.Imm4h), inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrshIT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.LdrshI(context, inst.Rt, inst.Rn, (int)inst.Imm12, true, true, false);
        }

        public static void LdrshIT2(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Pb10w1Ub9w1Wb8w1Imm8b0w8 inst = new(encoding);

            InstEmitMemory.LdrshI(context, inst.Rt, inst.Rn, (int)inst.Imm8, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrshLA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rtb12w4Imm4hb8w4Imm4lb0w4 inst = new(encoding);

            InstEmitMemory.LdrshL(context, inst.Rt, ImmUtils.CombineImmU8(inst.Imm4l, inst.Imm4h), inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrshLT1(CodeGenContext context, uint encoding)
        {
            InstUb23w1Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.LdrshL(context, inst.Rt, inst.Imm12, true, inst.U != 0, false);
        }

        public static void LdrshRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rnb16w4Rtb12w4Rmb0w4 inst = new(encoding);

            InstEmitMemory.LdrshR(context, inst.Rt, inst.Rn, inst.Rm, 0, 0, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrshRT1(CodeGenContext context, uint encoding)
        {
            InstRmb22w3Rnb19w3Rtb16w3 inst = new(encoding);

            InstEmitMemory.LdrshR(context, inst.Rt, inst.Rn, inst.Rm, 0, 0, true, true, false);
        }

        public static void LdrshRT2(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm2b4w2Rmb0w4 inst = new(encoding);

            InstEmitMemory.LdrshR(context, inst.Rt, inst.Rn, inst.Rm, 0, inst.Imm2, true, true, false);
        }

        public static void LdrtA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Ub23w1Rnb16w4Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.LdrtI(context, inst.Rt, inst.Rn, (int)inst.Imm12, postIndex: true, inst.U != 0);
        }

        public static void LdrtA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Ub23w1Rnb16w4Rtb12w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitMemory.LdrtR(context, inst.Rt, inst.Rn, inst.Rm, inst.Stype, inst.Imm5, postIndex: true, inst.U != 0);
        }

        public static void LdrtT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm8b0w8 inst = new(encoding);

            InstEmitMemory.LdrtI(context, inst.Rt, inst.Rn, (int)inst.Imm8, postIndex: false, true);
        }

        public static void LdrIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rnb16w4Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.LdrI(context, inst.Rt, inst.Rn, (int)inst.Imm12, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrIT1(CodeGenContext context, uint encoding)
        {
            InstImm5b22w5Rnb19w3Rtb16w3 inst = new(encoding);

            InstEmitMemory.LdrI(context, inst.Rt, inst.Rn, (int)inst.Imm5 << 2, true, true, false);
        }

        public static void LdrIT2(CodeGenContext context, uint encoding)
        {
            InstRtb24w3Imm8b16w8 inst = new(encoding);

            InstEmitMemory.LdrI(context, inst.Rt, RegisterUtils.SpRegister, (int)inst.Imm8 << 2, true, true, false);
        }

        public static void LdrIT3(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.LdrI(context, inst.Rt, inst.Rn, (int)inst.Imm12, true, true, false);
        }

        public static void LdrIT4(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Pb10w1Ub9w1Wb8w1Imm8b0w8 inst = new(encoding);

            InstEmitMemory.LdrI(context, inst.Rt, inst.Rn, (int)inst.Imm8, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrLA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.LdrL(context, inst.Rt, inst.Imm12, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrLT1(CodeGenContext context, uint encoding)
        {
            InstRtb24w3Imm8b16w8 inst = new(encoding);

            InstEmitMemory.LdrL(context, inst.Rt, inst.Imm8 << 2, true, true, false);
        }

        public static void LdrLT2(CodeGenContext context, uint encoding)
        {
            InstUb23w1Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.LdrL(context, inst.Rt, inst.Imm12, true, inst.U != 0, false);
        }

        public static void LdrRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rnb16w4Rtb12w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitMemory.LdrR(context, inst.Rt, inst.Rn, inst.Rm, inst.Stype, inst.Imm5, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void LdrRT1(CodeGenContext context, uint encoding)
        {
            InstRmb22w3Rnb19w3Rtb16w3 inst = new(encoding);

            InstEmitMemory.LdrR(context, inst.Rt, inst.Rn, inst.Rm, 0, 0, true, true, false);
        }

        public static void LdrRT2(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm2b4w2Rmb0w4 inst = new(encoding);

            InstEmitMemory.LdrR(context, inst.Rt, inst.Rn, inst.Rm, 0, inst.Imm2, true, true, false);
        }

        public static void McrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Opc1b21w3Crnb16w4Rtb12w4Coproc0b8w1Opc2b5w3Crmb0w4 inst = new(encoding);

            InstEmitSystem.Mcr(context, encoding, inst.Coproc0 | 0xe, inst.Opc1, inst.Rt, inst.Crn, inst.Crm, inst.Opc2);
        }

        public static void McrT1(CodeGenContext context, uint encoding)
        {
            InstOpc1b21w3Crnb16w4Rtb12w4Coproc0b8w1Opc2b5w3Crmb0w4 inst = new(encoding);

            InstEmitSystem.Mcr(context, encoding, inst.Coproc0 | 0xe, inst.Opc1, inst.Rt, inst.Crn, inst.Crm, inst.Opc2);
        }

        public static void McrrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rt2b16w4Rtb12w4Coproc0b8w1Opc1b4w4Crmb0w4 inst = new(encoding);

            InstEmitSystem.Mcrr(context, encoding, inst.Coproc0 | 0xe, inst.Opc1, inst.Rt, inst.Crm);
        }

        public static void McrrT1(CodeGenContext context, uint encoding)
        {
            InstRt2b16w4Rtb12w4Coproc0b8w1Opc1b4w4Crmb0w4 inst = new(encoding);

            InstEmitSystem.Mcrr(context, encoding, inst.Coproc0 | 0xe, inst.Opc1, inst.Rt, inst.Crm);
        }

        public static void MlaA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rdb16w4Rab12w4Rmb8w4Rnb0w4 inst = new(encoding);

            InstEmitMultiply.Mla(context, inst.Rd, inst.Rn, inst.Rm, inst.Ra);
        }

        public static void MlaT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rab12w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitMultiply.Mla(context, inst.Rd, inst.Rn, inst.Rm, inst.Ra);
        }

        public static void MlsA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb16w4Rab12w4Rmb8w4Rnb0w4 inst = new(encoding);

            InstEmitMultiply.Mls(context, inst.Rd, inst.Rn, inst.Rm, inst.Ra);
        }

        public static void MlsT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rab12w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitMultiply.Mls(context, inst.Rd, inst.Rn, inst.Rm, inst.Ra);
        }

        public static void MovtA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Imm4b16w4Rdb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMove.Movt(context, inst.Rd, ImmUtils.CombineImmU16(inst.Imm12, inst.Imm4));
        }

        public static void MovtT1(CodeGenContext context, uint encoding)
        {
            InstIb26w1Imm4b16w4Imm3b12w3Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitMove.Movt(context, inst.Rd, ImmUtils.CombineImmU16(inst.Imm8, inst.Imm3, inst.I, inst.Imm4));
        }

        public static void MovIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rdb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMove.MovI(context, inst.Rd, ImmUtils.ExpandImm(inst.Imm12), ImmUtils.ExpandedImmRotated(inst.Imm12), inst.S != 0);
        }

        public static void MovIA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Imm4b16w4Rdb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMove.MovI(context, inst.Rd, ImmUtils.CombineImmU16(inst.Imm12, inst.Imm4), false, false);
        }

        public static void MovIT1(CodeGenContext context, uint encoding)
        {
            InstRdb24w3Imm8b16w8 inst = new(encoding);

            InstEmitMove.MovI(context, inst.Rd, inst.Imm8, false, !context.InITBlock);
        }

        public static void MovIT2(CodeGenContext context, uint encoding)
        {
            InstIb26w1Sb20w1Imm3b12w3Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitMove.MovI(context, inst.Rd, ImmUtils.ExpandImm(inst.Imm8, inst.Imm3, inst.I), ImmUtils.ExpandedImmRotated(inst.Imm8, inst.Imm3, inst.I), inst.S != 0);
        }

        public static void MovIT3(CodeGenContext context, uint encoding)
        {
            InstIb26w1Imm4b16w4Imm3b12w3Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitMove.MovI(context, inst.Rd, ImmUtils.CombineImmU16(inst.Imm8, inst.Imm3, inst.I, inst.Imm4), false, false);
        }

        public static void MovRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rdb12w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitMove.MovR(context, inst.Cond, inst.Rd, inst.Rm, inst.Stype, inst.Imm5, inst.S != 0);
        }

        public static void MovRT1(CodeGenContext context, uint encoding)
        {
            InstDb23w1Rmb19w4Rdb16w3 inst = new(encoding);

            InstEmitMove.MovR(context, inst.Rd | (inst.D << 3), inst.Rm, 0, 0, false);
        }

        public static void MovRT2(CodeGenContext context, uint encoding)
        {
            InstOpb27w2Imm5b22w5Rmb19w3Rdb16w3 inst = new(encoding);

            InstEmitMove.MovR(context, inst.Rd, inst.Rm, inst.Op, inst.Imm5, !context.InITBlock);
        }

        public static void MovRT3(CodeGenContext context, uint encoding)
        {
            InstSb20w1Imm3b12w3Rdb8w4Imm2b6w2Stypeb4w2Rmb0w4 inst = new(encoding);

            InstEmitMove.MovR(context, inst.Rd, inst.Rm, inst.Stype, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3), inst.S != 0);
        }

        public static void MovRrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rdb12w4Rsb8w4Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitMove.MovRr(context, inst.Rd, inst.Rm, inst.Stype, inst.Rs, inst.S != 0);
        }

        public static void MovRrT1(CodeGenContext context, uint encoding)
        {
            InstRsb19w3Rdmb16w3 inst = new(encoding);

            InstEmitMove.MovRr(context, inst.Rdm, inst.Rdm, ((encoding >> 7) & 2) | ((encoding >> 6) & 1), inst.Rs, !context.InITBlock);
        }

        public static void MovRrT2(CodeGenContext context, uint encoding)
        {
            InstStypeb21w2Sb20w1Rmb16w4Rdb8w4Rsb0w4 inst = new(encoding);

            InstEmitMove.MovRr(context, inst.Rd, inst.Rm, inst.Stype, inst.Rs, inst.S != 0);
        }

        public static void MrcA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Opc1b21w3Crnb16w4Rtb12w4Coproc0b8w1Opc2b5w3Crmb0w4 inst = new(encoding);

            InstEmitSystem.Mrc(context, encoding, inst.Coproc0 | 0xe, inst.Opc1, inst.Rt, inst.Crn, inst.Crm, inst.Opc2);
        }

        public static void MrcT1(CodeGenContext context, uint encoding)
        {
            InstOpc1b21w3Crnb16w4Rtb12w4Coproc0b8w1Opc2b5w3Crmb0w4 inst = new(encoding);

            InstEmitSystem.Mrc(context, encoding, inst.Coproc0 | 0xe, inst.Opc1, inst.Rt, inst.Crn, inst.Crm, inst.Opc2);
        }

        public static void MrrcA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rt2b16w4Rtb12w4Coproc0b8w1Opc1b4w4Crmb0w4 inst = new(encoding);

            InstEmitSystem.Mrrc(context, encoding, inst.Coproc0 | 0xe, inst.Opc1, inst.Rt, inst.Rt2, inst.Crm);
        }

        public static void MrrcT1(CodeGenContext context, uint encoding)
        {
            InstRt2b16w4Rtb12w4Coproc0b8w1Opc1b4w4Crmb0w4 inst = new(encoding);

            InstEmitSystem.Mrrc(context, encoding, inst.Coproc0 | 0xe, inst.Opc1, inst.Rt, inst.Rt2, inst.Crm);
        }

        public static void MrsA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rb22w1Rdb12w4 inst = new(encoding);

            InstEmitSystem.Mrs(context, inst.Rd, inst.R != 0);
        }

        public static void MrsT1(CodeGenContext context, uint encoding)
        {
            InstRb20w1Rdb8w4 inst = new(encoding);

            InstEmitSystem.Mrs(context, inst.Rd, inst.R != 0);
        }

        public static void MrsBrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rb22w1M1b16w4Rdb12w4Mb8w1 inst = new(encoding);

            InstEmitSystem.MrsBr(context, inst.Rd, inst.M1 | (inst.M << 4), inst.R != 0);
        }

        public static void MrsBrT1(CodeGenContext context, uint encoding)
        {
            InstRb20w1M1b16w4Rdb8w4Mb4w1 inst = new(encoding);

            InstEmitSystem.MrsBr(context, inst.Rd, inst.M1 | (inst.M << 4), inst.R != 0);
        }

        public static void MsrBrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rb22w1M1b16w4Mb8w1Rnb0w4 inst = new(encoding);

            InstEmitSystem.MsrBr(context, inst.Rn, inst.M1 | (inst.M << 4), inst.R != 0);
        }

        public static void MsrBrT1(CodeGenContext context, uint encoding)
        {
            InstRb20w1Rnb16w4M1b8w4Mb4w1 inst = new(encoding);

            InstEmitSystem.MsrBr(context, inst.Rn, inst.M1 | (inst.M << 4), inst.R != 0);
        }

        public static void MsrIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rb22w1Maskb16w4Imm12b0w12 inst = new(encoding);

            InstEmitSystem.MsrI(context, inst.Imm12, inst.Mask, inst.R != 0);
        }

        public static void MsrRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rb22w1Maskb16w4Rnb0w4 inst = new(encoding);

            InstEmitSystem.MsrR(context, inst.Rn, inst.Mask, inst.R != 0);
        }

        public static void MsrRT1(CodeGenContext context, uint encoding)
        {
            InstRb20w1Rnb16w4Maskb8w4 inst = new(encoding);

            InstEmitSystem.MsrR(context, inst.Rn, inst.Mask, inst.R != 0);
        }

        public static void MulA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rdb16w4Rmb8w4Rnb0w4 inst = new(encoding);

            InstEmitMultiply.Mul(context, inst.Rd, inst.Rn, inst.Rm, inst.S != 0);
        }

        public static void MulT1(CodeGenContext context, uint encoding)
        {
            InstRnb19w3Rdmb16w3 inst = new(encoding);

            InstEmitMultiply.Mul(context, inst.Rdm, inst.Rn, inst.Rdm, !context.InITBlock);
        }

        public static void MulT2(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitMultiply.Mul(context, inst.Rd, inst.Rn, inst.Rm, false);
        }

        public static void MvnIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rdb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMove.MvnI(context, inst.Rd, ImmUtils.ExpandImm(inst.Imm12), ImmUtils.ExpandedImmRotated(inst.Imm12), inst.S != 0);
        }

        public static void MvnIT1(CodeGenContext context, uint encoding)
        {
            InstIb26w1Sb20w1Imm3b12w3Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitMove.MvnI(context, inst.Rd, ImmUtils.ExpandImm(inst.Imm8, inst.Imm3, inst.I), ImmUtils.ExpandedImmRotated(inst.Imm8, inst.Imm3, inst.I), inst.S != 0);
        }

        public static void MvnRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rdb12w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitMove.MvnR(context, inst.Rd, inst.Rm, inst.Stype, inst.Imm5, inst.S != 0);
        }

        public static void MvnRT1(CodeGenContext context, uint encoding)
        {
            InstRmb19w3Rdb16w3 inst = new(encoding);

            InstEmitMove.MvnR(context, inst.Rd, inst.Rm, 0, 0, !context.InITBlock);
        }

        public static void MvnRT2(CodeGenContext context, uint encoding)
        {
            InstSb20w1Imm3b12w3Rdb8w4Imm2b6w2Stypeb4w2Rmb0w4 inst = new(encoding);

            InstEmitMove.MvnR(context, inst.Rd, inst.Rm, inst.Stype, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3), inst.S != 0);
        }

        public static void MvnRrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rdb12w4Rsb8w4Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitMove.MvnRr(context, inst.Rd, inst.Rm, inst.Stype, inst.Rs, inst.S != 0);
        }

        public static void NopA1(CodeGenContext context, uint encoding)
        {
        }

        public static void NopT1(CodeGenContext context, uint encoding)
        {
        }

        public static void NopT2(CodeGenContext context, uint encoding)
        {
        }

        public static void OrnIT1(CodeGenContext context, uint encoding)
        {
            InstIb26w1Sb20w1Rnb16w4Imm3b12w3Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitAlu.OrnI(context, inst.Rd, inst.Rn, ImmUtils.ExpandImm(inst.Imm8, inst.Imm3, inst.I), ImmUtils.ExpandedImmRotated(inst.Imm8, inst.Imm3, inst.I), inst.S != 0);
        }

        public static void OrnRT1(CodeGenContext context, uint encoding)
        {
            InstSb20w1Rnb16w4Imm3b12w3Rdb8w4Imm2b6w2Stypeb4w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.OrnR(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3), inst.S != 0);
        }

        public static void OrrIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Imm12b0w12 inst = new(encoding);

            InstEmitAlu.OrrI(context, inst.Rd, inst.Rn, ImmUtils.ExpandImm(inst.Imm12), ImmUtils.ExpandedImmRotated(inst.Imm12), inst.S != 0);
        }

        public static void OrrIT1(CodeGenContext context, uint encoding)
        {
            InstIb26w1Sb20w1Rnb16w4Imm3b12w3Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitAlu.OrrI(context, inst.Rd, inst.Rn, ImmUtils.ExpandImm(inst.Imm8, inst.Imm3, inst.I), ImmUtils.ExpandedImmRotated(inst.Imm8, inst.Imm3, inst.I), inst.S != 0);
        }

        public static void OrrRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.OrrR(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, inst.Imm5, inst.S != 0);
        }

        public static void OrrRT1(CodeGenContext context, uint encoding)
        {
            InstRmb19w3Rdnb16w3 inst = new(encoding);

            InstEmitAlu.OrrR(context, inst.Rdn, inst.Rdn, inst.Rm, 0, 0, !context.InITBlock);
        }

        public static void OrrRT2(CodeGenContext context, uint encoding)
        {
            InstSb20w1Rnb16w4Imm3b12w3Rdb8w4Imm2b6w2Stypeb4w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.OrrR(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3), inst.S != 0);
        }

        public static void OrrRrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Rsb8w4Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.OrrRr(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, inst.Rs, inst.S != 0);
        }

        public static void PkhA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Imm5b7w5Tbb6w1Rmb0w4 inst = new(encoding);

            InstEmitMove.Pkh(context, inst.Rd, inst.Rn, inst.Rm, inst.Tb != 0, inst.Imm5);
        }

        public static void PkhT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Imm3b12w3Rdb8w4Imm2b6w2Tbb5w1Rmb0w4 inst = new(encoding);

            InstEmitMove.Pkh(context, inst.Rd, inst.Rn, inst.Rm, inst.Tb != 0, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3));
        }

        public static void PldIA1(CodeGenContext context, uint encoding)
        {
            InstUb23w1Rb22w1Rnb16w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.PldI(context, inst.Rn, inst.Imm12, inst.U != 0, inst.R != 0);
        }

        public static void PldIT1(CodeGenContext context, uint encoding)
        {
            InstWb21w1Rnb16w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.PldI(context, inst.Rn, inst.Imm12, true, inst.W == 0);
        }

        public static void PldIT2(CodeGenContext context, uint encoding)
        {
            InstWb21w1Rnb16w4Imm8b0w8 inst = new(encoding);

            InstEmitMemory.PldI(context, inst.Rn, inst.Imm8, false, inst.W == 0);
        }

        public static void PldLA1(CodeGenContext context, uint encoding)
        {
            InstUb23w1Imm12b0w12 inst = new(encoding);

            InstEmitMemory.PldL(context, inst.Imm12, inst.U != 0);
        }

        public static void PldLT1(CodeGenContext context, uint encoding)
        {
            InstUb23w1Imm12b0w12 inst = new(encoding);

            InstEmitMemory.PldL(context, inst.Imm12, inst.U != 0);
        }

        public static void PldRA1(CodeGenContext context, uint encoding)
        {
            InstUb23w1Rb22w1Rnb16w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitMemory.PldR(context, inst.Rn, inst.Rm, inst.Stype, inst.Imm5, inst.U != 0, inst.R != 0);
        }

        public static void PldRT1(CodeGenContext context, uint encoding)
        {
            InstWb21w1Rnb16w4Imm2b4w2Rmb0w4 inst = new(encoding);

            InstEmitMemory.PldR(context, inst.Rn, inst.Rm, 0, inst.Imm2, true, inst.W == 0);
        }

        public static void PliIA1(CodeGenContext context, uint encoding)
        {
            InstUb23w1Rnb16w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.PliI(context, inst.Rn, inst.Imm12, inst.U != 0);
        }

        public static void PliIT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.PliI(context, inst.Rn, inst.Imm12, true);
        }

        public static void PliIT2(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Imm8b0w8 inst = new(encoding);

            InstEmitMemory.PliI(context, inst.Rn, inst.Imm8, false);
        }

        public static void PliIT3(CodeGenContext context, uint encoding)
        {
            InstUb23w1Imm12b0w12 inst = new(encoding);

            InstEmitMemory.PliL(context, inst.Imm12, inst.U != 0);
        }

        public static void PliRA1(CodeGenContext context, uint encoding)
        {
            InstUb23w1Rnb16w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitMemory.PliR(context, inst.Rn, inst.Rm, inst.Stype, inst.Imm5, inst.U != 0);
        }

        public static void PliRT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Imm2b4w2Rmb0w4 inst = new(encoding);

            InstEmitMemory.PliR(context, inst.Rn, inst.Rm, 0, inst.Imm2, true);
        }

        public static void PopT1(CodeGenContext context, uint encoding)
        {
            InstPb24w1RegisterListb16w8 inst = new(encoding);

            InstEmitMemory.Ldm(context, RegisterUtils.SpRegister, inst.RegisterList | (inst.P << RegisterUtils.PcRegister), true);
        }

        public static void PssbbA1(CodeGenContext context, uint encoding)
        {
            throw new NotImplementedException();
        }

        public static void PssbbT1(CodeGenContext context, uint encoding)
        {
            throw new NotImplementedException();
        }

        public static void PushT1(CodeGenContext context, uint encoding)
        {
            InstMb24w1RegisterListb16w8 inst = new(encoding);

            InstEmitMemory.Stmdb(context, RegisterUtils.SpRegister, inst.RegisterList | (inst.M << RegisterUtils.LrRegister), true);
        }

        public static void QaddA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Qadd(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void QaddT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Qadd(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Qadd16A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Qadd16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Qadd16T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Qadd16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Qadd8A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Qadd8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Qadd8T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Qadd8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void QasxA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Qasx(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void QasxT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Qasx(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void QdaddA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Qdadd(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void QdaddT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Qdadd(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void QdsubA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Qdsub(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void QdsubT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Qdsub(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void QsaxA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Qsax(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void QsaxT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Qsax(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void QsubA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Qsub(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void QsubT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Qsub(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Qsub16A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Qsub16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Qsub16T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Qsub16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Qsub8A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Qsub8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Qsub8T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Qsub8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void RbitA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitBit.Rbit(context, inst.Rd, inst.Rm);
        }

        public static void RbitT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitBit.Rbit(context, inst.Rd, inst.Rm);
        }

        public static void RevA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitBit.Rev(context, inst.Rd, inst.Rm);
        }

        public static void RevT1(CodeGenContext context, uint encoding)
        {
            InstRmb19w3Rdb16w3 inst = new(encoding);

            InstEmitBit.Rev(context, inst.Rd, inst.Rm);
        }

        public static void RevT2(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitBit.Rev(context, inst.Rd, inst.Rm);
        }

        public static void Rev16A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitBit.Rev16(context, inst.Rd, inst.Rm);
        }

        public static void Rev16T1(CodeGenContext context, uint encoding)
        {
            InstRmb19w3Rdb16w3 inst = new(encoding);

            InstEmitBit.Rev16(context, inst.Rd, inst.Rm);
        }

        public static void Rev16T2(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitBit.Rev16(context, inst.Rd, inst.Rm);
        }

        public static void RevshA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitBit.Revsh(context, inst.Rd, inst.Rm);
        }

        public static void RevshT1(CodeGenContext context, uint encoding)
        {
            InstRmb19w3Rdb16w3 inst = new(encoding);

            InstEmitBit.Revsh(context, inst.Rd, inst.Rm);
        }

        public static void RevshT2(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitBit.Revsh(context, inst.Rd, inst.Rm);
        }

        public static void RfeA1(CodeGenContext context, uint encoding)
        {
            InstEmitSystem.PrivilegedInstruction(context, encoding);
        }

        public static void RfeT1(CodeGenContext context, uint encoding)
        {
            InstEmitSystem.PrivilegedInstruction(context, encoding);
        }

        public static void RfeT2(CodeGenContext context, uint encoding)
        {
            InstEmitSystem.PrivilegedInstruction(context, encoding);
        }

        public static void RsbIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Imm12b0w12 inst = new(encoding);

            InstEmitAlu.RsbI(context, inst.Rd, inst.Rn, ImmUtils.ExpandImm(inst.Imm12), inst.S != 0);
        }

        public static void RsbIT1(CodeGenContext context, uint encoding)
        {
            InstRnb19w3Rdb16w3 inst = new(encoding);

            InstEmitAlu.RsbI(context, inst.Rd, inst.Rn, 0, !context.InITBlock);
        }

        public static void RsbIT2(CodeGenContext context, uint encoding)
        {
            InstIb26w1Sb20w1Rnb16w4Imm3b12w3Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitAlu.RsbI(context, inst.Rd, inst.Rn, ImmUtils.ExpandImm(inst.Imm8, inst.Imm3, inst.I), inst.S != 0);
        }

        public static void RsbRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.RsbR(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, inst.Imm5, inst.S != 0);
        }

        public static void RsbRT1(CodeGenContext context, uint encoding)
        {
            InstSb20w1Rnb16w4Imm3b12w3Rdb8w4Imm2b6w2Stypeb4w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.RsbR(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3), inst.S != 0);
        }

        public static void RsbRrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Rsb8w4Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.RsbRr(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, inst.Rs, inst.S != 0);
        }

        public static void RscIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Imm12b0w12 inst = new(encoding);

            InstEmitAlu.RscI(context, inst.Rd, inst.Rn, ImmUtils.ExpandImm(inst.Imm12), inst.S != 0);
        }

        public static void RscRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.RscR(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, inst.Imm5, inst.S != 0);
        }

        public static void RscRrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Rsb8w4Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.RscRr(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, inst.Rs, inst.S != 0);
        }

        public static void Sadd16A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Sadd16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Sadd16T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Sadd16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Sadd8A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Sadd8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Sadd8T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Sadd8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void SasxA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Sasx(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void SasxT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Sasx(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void SbA1(CodeGenContext context, uint encoding)
        {
            throw new NotImplementedException();
        }

        public static void SbT1(CodeGenContext context, uint encoding)
        {
            throw new NotImplementedException();
        }

        public static void SbcIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Imm12b0w12 inst = new(encoding);

            InstEmitAlu.SbcI(context, inst.Rd, inst.Rn, ImmUtils.ExpandImm(inst.Imm12), inst.S != 0);
        }

        public static void SbcIT1(CodeGenContext context, uint encoding)
        {
            InstIb26w1Sb20w1Rnb16w4Imm3b12w3Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitAlu.SbcI(context, inst.Rd, inst.Rn, ImmUtils.ExpandImm(inst.Imm8, inst.Imm3, inst.I), inst.S != 0);
        }

        public static void SbcRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.SbcR(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, inst.Imm5, inst.S != 0);
        }

        public static void SbcRT1(CodeGenContext context, uint encoding)
        {
            InstRmb19w3Rdnb16w3 inst = new(encoding);

            InstEmitAlu.SbcR(context, inst.Rdn, inst.Rdn, inst.Rm, 0, 0, !context.InITBlock);
        }

        public static void SbcRT2(CodeGenContext context, uint encoding)
        {
            InstSb20w1Rnb16w4Imm3b12w3Rdb8w4Imm2b6w2Stypeb4w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.SbcR(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3), inst.S != 0);
        }

        public static void SbcRrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Rsb8w4Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.SbcRr(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, inst.Rs, inst.S != 0);
        }

        public static void SbfxA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Widthm1b16w5Rdb12w4Lsbb7w5Rnb0w4 inst = new(encoding);

            InstEmitBit.Sbfx(context, inst.Rd, inst.Rn, inst.Lsb, inst.Widthm1);
        }

        public static void SbfxT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Imm3b12w3Rdb8w4Imm2b6w2Widthm1b0w5 inst = new(encoding);

            InstEmitBit.Sbfx(context, inst.Rd, inst.Rn, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3), inst.Widthm1);
        }

        public static void SdivA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb16w4Rmb8w4Rnb0w4 inst = new(encoding);

            InstEmitDivide.Sdiv(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void SdivT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitDivide.Sdiv(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void SelA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Sel(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void SelT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Sel(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void SetendA1(CodeGenContext context, uint encoding)
        {
            InstEb9w1 inst = new(encoding);

            InstEmitSystem.Setend(context, inst.E != 0);
        }

        public static void SetendT1(CodeGenContext context, uint encoding)
        {
            InstEb19w1 inst = new(encoding);

            InstEmitSystem.Setend(context, inst.E != 0);
        }

        public static void SetpanA1(CodeGenContext context, uint encoding)
        {
            _ = new InstImm1b9w1(encoding);

            throw new NotImplementedException();
        }

        public static void SetpanT1(CodeGenContext context, uint encoding)
        {
            _ = new InstImm1b19w1(encoding);

            throw new NotImplementedException();
        }

        public static void SevA1(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Sev();
        }

        public static void SevT1(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Sev();
        }

        public static void SevT2(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Sev();
        }

        public static void SevlA1(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Sevl();
        }

        public static void SevlT1(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Sevl();
        }

        public static void SevlT2(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Sevl();
        }

        public static void Sha1cA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonHash.Sha1c(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void Sha1cT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonHash.Sha1c(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void Sha1hA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonHash.Sha1h(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void Sha1hT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonHash.Sha1h(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void Sha1mA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonHash.Sha1m(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void Sha1mT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonHash.Sha1m(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void Sha1pA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonHash.Sha1p(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void Sha1pT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonHash.Sha1p(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void Sha1su0A1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonHash.Sha1su0(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void Sha1su0T1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonHash.Sha1su0(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void Sha1su1A1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonHash.Sha1su1(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void Sha1su1T1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonHash.Sha1su1(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void Sha256hA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonHash.Sha256h(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void Sha256hT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonHash.Sha256h(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void Sha256h2A1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonHash.Sha256h2(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void Sha256h2T1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonHash.Sha256h2(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void Sha256su0A1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonHash.Sha256su0(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void Sha256su0T1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonHash.Sha256su0(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void Sha256su1A1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonHash.Sha256su1(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void Sha256su1T1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonHash.Sha256su1(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void Shadd16A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Shadd16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Shadd16T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Shadd16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Shadd8A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Shadd8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Shadd8T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Shadd8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void ShasxA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Shasx(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void ShasxT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Shasx(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void ShsaxA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Shsax(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void ShsaxT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Shsax(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Shsub16A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Shsub16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Shsub16T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Shsub16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Shsub8A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Shsub8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Shsub8T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Shsub8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void SmcA1(CodeGenContext context, uint encoding)
        {
            InstEmitSystem.PrivilegedInstruction(context, encoding);
        }

        public static void SmcT1(CodeGenContext context, uint encoding)
        {
            InstEmitSystem.PrivilegedInstruction(context, encoding);
        }

        public static void SmlabbA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb16w4Rab12w4Rmb8w4Mb6w1Nb5w1Rnb0w4 inst = new(encoding);

            InstEmitMultiply.Smlabb(context, inst.Rd, inst.Rn, inst.Rm, inst.Ra, inst.N != 0, inst.M != 0);
        }

        public static void SmlabbT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rab12w4Rdb8w4Nb5w1Mb4w1Rmb0w4 inst = new(encoding);

            InstEmitMultiply.Smlabb(context, inst.Rd, inst.Rn, inst.Rm, inst.Ra, inst.N != 0, inst.M != 0);
        }

        public static void SmladA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb16w4Rab12w4Rmb8w4Mb5w1Rnb0w4 inst = new(encoding);

            InstEmitMultiply.Smlad(context, inst.Rd, inst.Rn, inst.Rm, inst.Ra, inst.M != 0);
        }

        public static void SmladT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rab12w4Rdb8w4Mb4w1Rmb0w4 inst = new(encoding);

            InstEmitMultiply.Smlad(context, inst.Rd, inst.Rn, inst.Rm, inst.Ra, inst.M != 0);
        }

        public static void SmlalA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rdhib16w4Rdlob12w4Rmb8w4Rnb0w4 inst = new(encoding);

            InstEmitMultiply.Smlal(context, inst.Rdlo, inst.Rdhi, inst.Rn, inst.Rm, inst.S != 0);
        }

        public static void SmlalT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdlob12w4Rdhib8w4Rmb0w4 inst = new(encoding);

            InstEmitMultiply.Smlal(context, inst.Rdlo, inst.Rdhi, inst.Rn, inst.Rm, false);
        }

        public static void SmlalbbA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdhib16w4Rdlob12w4Rmb8w4Mb6w1Nb5w1Rnb0w4 inst = new(encoding);

            InstEmitMultiply.Smlalbb(context, inst.Rdlo, inst.Rdhi, inst.Rn, inst.Rm, inst.N != 0, inst.M != 0);
        }

        public static void SmlalbbT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdlob12w4Rdhib8w4Nb5w1Mb4w1Rmb0w4 inst = new(encoding);

            InstEmitMultiply.Smlalbb(context, inst.Rdlo, inst.Rdhi, inst.Rn, inst.Rm, inst.N != 0, inst.M != 0);
        }

        public static void SmlaldA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdhib16w4Rdlob12w4Rmb8w4Mb5w1Rnb0w4 inst = new(encoding);

            InstEmitMultiply.Smlald(context, inst.Rdlo, inst.Rdhi, inst.Rn, inst.Rm, inst.M != 0);
        }

        public static void SmlaldT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdlob12w4Rdhib8w4Mb4w1Rmb0w4 inst = new(encoding);

            InstEmitMultiply.Smlald(context, inst.Rdlo, inst.Rdhi, inst.Rn, inst.Rm, inst.M != 0);
        }

        public static void SmlawbA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb16w4Rab12w4Rmb8w4Mb6w1Rnb0w4 inst = new(encoding);

            InstEmitMultiply.Smlawb(context, inst.Rd, inst.Rn, inst.Rm, inst.Ra, inst.M != 0);
        }

        public static void SmlawbT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rab12w4Rdb8w4Mb4w1Rmb0w4 inst = new(encoding);

            InstEmitMultiply.Smlawb(context, inst.Rd, inst.Rn, inst.Rm, inst.Ra, inst.M != 0);
        }

        public static void SmlsdA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb16w4Rab12w4Rmb8w4Mb5w1Rnb0w4 inst = new(encoding);

            InstEmitMultiply.Smlsd(context, inst.Rd, inst.Rn, inst.Rm, inst.Ra, inst.M != 0);
        }

        public static void SmlsdT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rab12w4Rdb8w4Mb4w1Rmb0w4 inst = new(encoding);

            InstEmitMultiply.Smlsd(context, inst.Rd, inst.Rn, inst.Rm, inst.Ra, inst.M != 0);
        }

        public static void SmlsldA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdhib16w4Rdlob12w4Rmb8w4Mb5w1Rnb0w4 inst = new(encoding);

            InstEmitMultiply.Smlsld(context, inst.Rdlo, inst.Rdhi, inst.Rn, inst.Rm, inst.M != 0);
        }

        public static void SmlsldT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdlob12w4Rdhib8w4Mb4w1Rmb0w4 inst = new(encoding);

            InstEmitMultiply.Smlsld(context, inst.Rdlo, inst.Rdhi, inst.Rn, inst.Rm, inst.M != 0);
        }

        public static void SmmlaA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb16w4Rab12w4Rmb8w4Rb5w1Rnb0w4 inst = new(encoding);

            InstEmitMultiply.Smmla(context, inst.Rd, inst.Rn, inst.Rm, inst.Ra, inst.R != 0);
        }

        public static void SmmlaT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rab12w4Rdb8w4Rb4w1Rmb0w4 inst = new(encoding);

            InstEmitMultiply.Smmla(context, inst.Rd, inst.Rn, inst.Rm, inst.Ra, inst.R != 0);
        }

        public static void SmmlsA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb16w4Rab12w4Rmb8w4Rb5w1Rnb0w4 inst = new(encoding);

            InstEmitMultiply.Smmls(context, inst.Rd, inst.Rn, inst.Rm, inst.Ra, inst.R != 0);
        }

        public static void SmmlsT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rab12w4Rdb8w4Rb4w1Rmb0w4 inst = new(encoding);

            InstEmitMultiply.Smmls(context, inst.Rd, inst.Rn, inst.Rm, inst.Ra, inst.R != 0);
        }

        public static void SmmulA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb16w4Rmb8w4Rb5w1Rnb0w4 inst = new(encoding);

            InstEmitMultiply.Smmul(context, inst.Rd, inst.Rn, inst.Rm, inst.R != 0);
        }

        public static void SmmulT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rb4w1Rmb0w4 inst = new(encoding);

            InstEmitMultiply.Smmul(context, inst.Rd, inst.Rn, inst.Rm, inst.R != 0);
        }

        public static void SmuadA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb16w4Rmb8w4Mb5w1Rnb0w4 inst = new(encoding);

            InstEmitMultiply.Smuad(context, inst.Rd, inst.Rn, inst.Rm, inst.M != 0);
        }

        public static void SmuadT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Mb4w1Rmb0w4 inst = new(encoding);

            InstEmitMultiply.Smuad(context, inst.Rd, inst.Rn, inst.Rm, inst.M != 0);
        }

        public static void SmulbbA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb16w4Rmb8w4Mb6w1Nb5w1Rnb0w4 inst = new(encoding);

            InstEmitMultiply.Smulbb(context, inst.Rd, inst.Rn, inst.Rm, inst.N != 0, inst.M != 0);
        }

        public static void SmulbbT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Nb5w1Mb4w1Rmb0w4 inst = new(encoding);

            InstEmitMultiply.Smulbb(context, inst.Rd, inst.Rn, inst.Rm, inst.N != 0, inst.M != 0);
        }

        public static void SmullA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rdhib16w4Rdlob12w4Rmb8w4Rnb0w4 inst = new(encoding);

            InstEmitMultiply.Smull(context, inst.Rdlo, inst.Rdhi, inst.Rn, inst.Rm, inst.S != 0);
        }

        public static void SmullT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdlob12w4Rdhib8w4Rmb0w4 inst = new(encoding);

            InstEmitMultiply.Smull(context, inst.Rdlo, inst.Rdhi, inst.Rn, inst.Rm, false);
        }

        public static void SmulwbA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb16w4Rmb8w4Mb6w1Rnb0w4 inst = new(encoding);

            InstEmitMultiply.Smulwb(context, inst.Rd, inst.Rn, inst.Rm, inst.M != 0);
        }

        public static void SmulwbT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Mb4w1Rmb0w4 inst = new(encoding);

            InstEmitMultiply.Smulwb(context, inst.Rd, inst.Rn, inst.Rm, inst.M != 0);
        }

        public static void SmusdA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb16w4Rmb8w4Mb5w1Rnb0w4 inst = new(encoding);

            InstEmitMultiply.Smusd(context, inst.Rd, inst.Rn, inst.Rm, inst.M != 0);
        }

        public static void SmusdT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Mb4w1Rmb0w4 inst = new(encoding);

            InstEmitMultiply.Smusd(context, inst.Rd, inst.Rn, inst.Rm, inst.M != 0);
        }

        public static void SrsA1(CodeGenContext context, uint encoding)
        {
            InstEmitSystem.PrivilegedInstruction(context, encoding);
        }

        public static void SrsT1(CodeGenContext context, uint encoding)
        {
            InstEmitSystem.PrivilegedInstruction(context, encoding);
        }

        public static void SrsT2(CodeGenContext context, uint encoding)
        {
            InstEmitSystem.PrivilegedInstruction(context, encoding);
        }

        public static void SsatA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4SatImmb16w5Rdb12w4Imm5b7w5Shb6w1Rnb0w4 inst = new(encoding);

            InstEmitSaturate.Ssat(context, inst.Rd, inst.SatImm, inst.Rn, inst.Sh != 0, inst.Imm5);
        }

        public static void SsatT1(CodeGenContext context, uint encoding)
        {
            InstShb21w1Rnb16w4Imm3b12w3Rdb8w4Imm2b6w2SatImmb0w5 inst = new(encoding);

            InstEmitSaturate.Ssat(context, inst.Rd, inst.SatImm, inst.Rn, inst.Sh != 0, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3));
        }

        public static void Ssat16A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4SatImmb16w4Rdb12w4Rnb0w4 inst = new(encoding);

            InstEmitSaturate.Ssat16(context, inst.Rd, inst.SatImm, inst.Rn);
        }

        public static void Ssat16T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4SatImmb0w4 inst = new(encoding);

            InstEmitSaturate.Ssat16(context, inst.Rd, inst.SatImm, inst.Rn);
        }

        public static void SsaxA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Ssax(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void SsaxT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Ssax(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void SsbbA1(CodeGenContext context, uint encoding)
        {
            throw new NotImplementedException();
        }

        public static void SsbbT1(CodeGenContext context, uint encoding)
        {
            throw new NotImplementedException();
        }

        public static void Ssub16A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Ssub16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Ssub16T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Ssub16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Ssub8A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Ssub8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Ssub8T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Ssub8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void StcA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rnb16w4Imm8b0w8 inst = new(encoding);

            InstEmitMemory.Stc(context, inst.Rn, (int)inst.Imm8 << 2, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void StcT1(CodeGenContext context, uint encoding)
        {
            InstPb24w1Ub23w1Wb21w1Rnb16w4Imm8b0w8 inst = new(encoding);

            InstEmitMemory.Stc(context, inst.Rn, (int)inst.Imm8 << 2, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void StlA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rtb0w4 inst = new(encoding);

            InstEmitMemory.Stl(context, inst.Rt, inst.Rn);
        }

        public static void StlT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4 inst = new(encoding);

            InstEmitMemory.Stl(context, inst.Rt, inst.Rn);
        }

        public static void StlbA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rtb0w4 inst = new(encoding);

            InstEmitMemory.Stlb(context, inst.Rt, inst.Rn);
        }

        public static void StlbT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4 inst = new(encoding);

            InstEmitMemory.Stlb(context, inst.Rt, inst.Rn);
        }

        public static void StlexA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rtb0w4 inst = new(encoding);

            InstEmitMemory.Stlex(context, inst.Rd, inst.Rt, inst.Rn);
        }

        public static void StlexT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Rdb0w4 inst = new(encoding);

            InstEmitMemory.Stlex(context, inst.Rd, inst.Rt, inst.Rn);
        }

        public static void StlexbA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rtb0w4 inst = new(encoding);

            InstEmitMemory.Stlexb(context, inst.Rd, inst.Rt, inst.Rn);
        }

        public static void StlexbT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Rdb0w4 inst = new(encoding);

            InstEmitMemory.Stlexb(context, inst.Rd, inst.Rt, inst.Rn);
        }

        public static void StlexdA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rtb0w4 inst = new(encoding);

            InstEmitMemory.Stlexd(context, inst.Rd, inst.Rt, RegisterUtils.GetRt2(inst.Rt), inst.Rn);
        }

        public static void StlexdT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Rt2b8w4Rdb0w4 inst = new(encoding);

            InstEmitMemory.Stlexd(context, inst.Rd, inst.Rt, inst.Rt2, inst.Rn);
        }

        public static void StlexhA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rtb0w4 inst = new(encoding);

            InstEmitMemory.Stlexh(context, inst.Rd, inst.Rt, inst.Rn);
        }

        public static void StlexhT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Rdb0w4 inst = new(encoding);

            InstEmitMemory.Stlexh(context, inst.Rd, inst.Rt, inst.Rn);
        }

        public static void StlhA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rtb0w4 inst = new(encoding);

            InstEmitMemory.Stlh(context, inst.Rt, inst.Rn);
        }

        public static void StlhT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4 inst = new(encoding);

            InstEmitMemory.Stlh(context, inst.Rt, inst.Rn);
        }

        public static void StmA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Wb21w1Rnb16w4RegisterListb0w16 inst = new(encoding);

            InstEmitMemory.Stm(context, inst.Rn, inst.RegisterList, inst.W != 0);
        }

        public static void StmT1(CodeGenContext context, uint encoding)
        {
            InstRnb24w3RegisterListb16w8 inst = new(encoding);

            InstEmitMemory.Stm(context, inst.Rn, inst.RegisterList, false);
        }

        public static void StmT2(CodeGenContext context, uint encoding)
        {
            InstWb21w1Rnb16w4Mb14w1RegisterListb0w14 inst = new(encoding);

            InstEmitMemory.Stm(context, inst.Rn, ImmUtils.CombineRegisterList(inst.RegisterList, inst.M), inst.W != 0);
        }

        public static void StmdaA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Wb21w1Rnb16w4RegisterListb0w16 inst = new(encoding);

            InstEmitMemory.Stmda(context, inst.Rn, inst.RegisterList, inst.W != 0);
        }

        public static void StmdbA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Wb21w1Rnb16w4RegisterListb0w16 inst = new(encoding);

            InstEmitMemory.Stmdb(context, inst.Rn, inst.RegisterList, inst.W != 0);
        }

        public static void StmdbT1(CodeGenContext context, uint encoding)
        {
            InstWb21w1Rnb16w4Mb14w1RegisterListb0w14 inst = new(encoding);

            InstEmitMemory.Stmdb(context, inst.Rn, ImmUtils.CombineRegisterList(inst.RegisterList, inst.M), inst.W != 0);
        }

        public static void StmibA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Wb21w1Rnb16w4RegisterListb0w16 inst = new(encoding);

            InstEmitMemory.Stmib(context, inst.Rn, inst.RegisterList, inst.W != 0);
        }

        public static void StmUA1(CodeGenContext context, uint encoding)
        {
            InstEmitSystem.PrivilegedInstruction(context, encoding);
        }

        public static void StrbtA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Ub23w1Rnb16w4Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.StrbtI(context, inst.Rt, inst.Rn, (int)inst.Imm12, postIndex: true, inst.U != 0);
        }

        public static void StrbtA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Ub23w1Rnb16w4Rtb12w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitMemory.StrbtR(context, inst.Rt, inst.Rn, inst.Rm, inst.Stype, inst.Imm5, postIndex: true, inst.U != 0);
        }

        public static void StrbtT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm8b0w8 inst = new(encoding);

            InstEmitMemory.StrbtI(context, inst.Rt, inst.Rn, (int)inst.Imm8, postIndex: false, true);
        }

        public static void StrbIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rnb16w4Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.StrbI(context, inst.Rt, inst.Rn, (int)inst.Imm12, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void StrbIT1(CodeGenContext context, uint encoding)
        {
            InstImm5b22w5Rnb19w3Rtb16w3 inst = new(encoding);

            InstEmitMemory.StrbI(context, inst.Rt, inst.Rn, (int)inst.Imm5, true, true, false);
        }

        public static void StrbIT2(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.StrbI(context, inst.Rt, inst.Rn, (int)inst.Imm12, true, true, false);
        }

        public static void StrbIT3(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Pb10w1Ub9w1Wb8w1Imm8b0w8 inst = new(encoding);

            InstEmitMemory.StrbI(context, inst.Rt, inst.Rn, (int)inst.Imm8, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void StrbRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rnb16w4Rtb12w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitMemory.StrbR(context, inst.Rt, inst.Rn, inst.Rm, inst.Stype, inst.Imm5, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void StrbRT1(CodeGenContext context, uint encoding)
        {
            InstRmb22w3Rnb19w3Rtb16w3 inst = new(encoding);

            InstEmitMemory.StrbR(context, inst.Rt, inst.Rn, inst.Rm, 0, 0, true, true, false);
        }

        public static void StrbRT2(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm2b4w2Rmb0w4 inst = new(encoding);

            InstEmitMemory.StrbR(context, inst.Rt, inst.Rn, inst.Rm, 0, inst.Imm2, true, true, false);
        }

        public static void StrdIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rnb16w4Rtb12w4Imm4hb8w4Imm4lb0w4 inst = new(encoding);

            InstEmitMemory.StrdI(context, inst.Rt, RegisterUtils.GetRt2(inst.Rt), inst.Rn, ImmUtils.CombineImmU8(inst.Imm4l, inst.Imm4h), inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void StrdIT1(CodeGenContext context, uint encoding)
        {
            InstPb24w1Ub23w1Wb21w1Rnb16w4Rtb12w4Rt2b8w4Imm8b0w8 inst = new(encoding);

            InstEmitMemory.StrdI(context, inst.Rt, inst.Rt2, inst.Rn, inst.Imm8 << 2, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void StrdRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rnb16w4Rtb12w4Rmb0w4 inst = new(encoding);

            InstEmitMemory.StrdR(context, inst.Rt, RegisterUtils.GetRt2(inst.Rt), inst.Rn, inst.Rm, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void StrexA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rtb0w4 inst = new(encoding);

            InstEmitMemory.Strex(context, inst.Rd, inst.Rt, inst.Rn);
        }

        public static void StrexT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitMemory.Strex(context, inst.Rd, inst.Rt, inst.Rn);
        }

        public static void StrexbA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rtb0w4 inst = new(encoding);

            InstEmitMemory.Strexb(context, inst.Rd, inst.Rt, inst.Rn);
        }

        public static void StrexbT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Rdb0w4 inst = new(encoding);

            InstEmitMemory.Strexb(context, inst.Rd, inst.Rt, inst.Rn);
        }

        public static void StrexdA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rtb0w4 inst = new(encoding);

            InstEmitMemory.Strexd(context, inst.Rd, inst.Rt, RegisterUtils.GetRt2(inst.Rt), inst.Rn);
        }

        public static void StrexdT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Rt2b8w4Rdb0w4 inst = new(encoding);

            InstEmitMemory.Strexd(context, inst.Rd, inst.Rt, inst.Rt2, inst.Rn);
        }

        public static void StrexhA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rtb0w4 inst = new(encoding);

            InstEmitMemory.Strexh(context, inst.Rd, inst.Rt, inst.Rn);
        }

        public static void StrexhT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Rdb0w4 inst = new(encoding);

            InstEmitMemory.Strexh(context, inst.Rd, inst.Rt, inst.Rn);
        }

        public static void StrhtA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Ub23w1Rnb16w4Rtb12w4Imm4hb8w4Imm4lb0w4 inst = new(encoding);

            InstEmitMemory.StrhtI(context, inst.Rt, inst.Rn, (int)ImmUtils.CombineImmU8(inst.Imm4l, inst.Imm4h), postIndex: true, inst.U != 0);
        }

        public static void StrhtA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Ub23w1Rnb16w4Rtb12w4Rmb0w4 inst = new(encoding);

            InstEmitMemory.StrhtR(context, inst.Rt, inst.Rn, inst.Rm, postIndex: true, inst.U != 0);
        }

        public static void StrhtT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm8b0w8 inst = new(encoding);

            InstEmitMemory.StrhtI(context, inst.Rt, inst.Rn, (int)inst.Imm8, postIndex: false, true);
        }

        public static void StrhIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rnb16w4Rtb12w4Imm4hb8w4Imm4lb0w4 inst = new(encoding);

            InstEmitMemory.StrhI(context, inst.Rt, inst.Rn, (int)ImmUtils.CombineImmU8(inst.Imm4l, inst.Imm4h), inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void StrhIT1(CodeGenContext context, uint encoding)
        {
            InstImm5b22w5Rnb19w3Rtb16w3 inst = new(encoding);

            InstEmitMemory.StrhI(context, inst.Rt, inst.Rn, (int)inst.Imm5 << 1, true, true, false);
        }

        public static void StrhIT2(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.StrhI(context, inst.Rt, inst.Rn, (int)inst.Imm12, true, true, false);
        }

        public static void StrhIT3(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Pb10w1Ub9w1Wb8w1Imm8b0w8 inst = new(encoding);

            InstEmitMemory.StrhI(context, inst.Rt, inst.Rn, (int)inst.Imm8, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void StrhRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rnb16w4Rtb12w4Rmb0w4 inst = new(encoding);

            InstEmitMemory.StrhR(context, inst.Rt, inst.Rn, inst.Rm, 0, 0, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void StrhRT1(CodeGenContext context, uint encoding)
        {
            InstRmb22w3Rnb19w3Rtb16w3 inst = new(encoding);

            InstEmitMemory.StrhR(context, inst.Rt, inst.Rn, inst.Rm, 0, 0, true, true, false);
        }

        public static void StrhRT2(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm2b4w2Rmb0w4 inst = new(encoding);

            InstEmitMemory.StrhR(context, inst.Rt, inst.Rn, inst.Rm, 0, inst.Imm2, true, true, false);
        }

        public static void StrtA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Ub23w1Rnb16w4Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.StrtI(context, inst.Rt, inst.Rn, (int)inst.Imm12, postIndex: true, inst.U != 0);
        }

        public static void StrtA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Ub23w1Rnb16w4Rtb12w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitMemory.StrtR(context, inst.Rt, inst.Rn, inst.Rm, inst.Stype, inst.Imm5, postIndex: true, inst.U != 0);
        }

        public static void StrtT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm8b0w8 inst = new(encoding);

            InstEmitMemory.StrtI(context, inst.Rt, inst.Rn, (int)inst.Imm8, postIndex: false, true);
        }

        public static void StrIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rnb16w4Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.StrI(context, inst.Rt, inst.Rn, (int)inst.Imm12, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void StrIT1(CodeGenContext context, uint encoding)
        {
            InstImm5b22w5Rnb19w3Rtb16w3 inst = new(encoding);

            InstEmitMemory.StrI(context, inst.Rt, inst.Rn, (int)inst.Imm5 << 2, true, true, false);
        }

        public static void StrIT2(CodeGenContext context, uint encoding)
        {
            InstRtb24w3Imm8b16w8 inst = new(encoding);

            InstEmitMemory.StrI(context, inst.Rt, RegisterUtils.SpRegister, (int)inst.Imm8 << 2, true, true, false);
        }

        public static void StrIT3(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm12b0w12 inst = new(encoding);

            InstEmitMemory.StrI(context, inst.Rt, inst.Rn, (int)inst.Imm12, true, true, false);
        }

        public static void StrIT4(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Pb10w1Ub9w1Wb8w1Imm8b0w8 inst = new(encoding);

            InstEmitMemory.StrI(context, inst.Rt, inst.Rn, (int)inst.Imm8, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void StrRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Wb21w1Rnb16w4Rtb12w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitMemory.StrR(context, inst.Rt, inst.Rn, inst.Rm, inst.Stype, inst.Imm5, inst.P != 0, inst.U != 0, inst.W != 0);
        }

        public static void StrRT1(CodeGenContext context, uint encoding)
        {
            InstRmb22w3Rnb19w3Rtb16w3 inst = new(encoding);

            InstEmitMemory.StrR(context, inst.Rt, inst.Rn, inst.Rm, 0, 0, true, true, false);
        }

        public static void StrRT2(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rtb12w4Imm2b4w2Rmb0w4 inst = new(encoding);

            InstEmitMemory.StrR(context, inst.Rt, inst.Rn, inst.Rm, 0, inst.Imm2, true, true, false);
        }

        public static void SubIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Imm12b0w12 inst = new(encoding);

            InstEmitAlu.SubI(context, inst.Rd, inst.Rn, ImmUtils.ExpandImm(inst.Imm12), inst.S != 0);
        }

        public static void SubIT1(CodeGenContext context, uint encoding)
        {
            InstImm3b22w3Rnb19w3Rdb16w3 inst = new(encoding);

            InstEmitAlu.SubI(context, inst.Rd, inst.Rn, inst.Imm3, !context.InITBlock);
        }

        public static void SubIT2(CodeGenContext context, uint encoding)
        {
            InstRdnb24w3Imm8b16w8 inst = new(encoding);

            InstEmitAlu.SubI(context, inst.Rdn, inst.Rdn, inst.Imm8, !context.InITBlock);
        }

        public static void SubIT3(CodeGenContext context, uint encoding)
        {
            InstIb26w1Sb20w1Rnb16w4Imm3b12w3Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitAlu.SubI(context, inst.Rd, inst.Rn, ImmUtils.ExpandImm(inst.Imm8, inst.Imm3, inst.I), inst.S != 0);
        }

        public static void SubIT4(CodeGenContext context, uint encoding)
        {
            InstIb26w1Rnb16w4Imm3b12w3Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitAlu.SubI(context, inst.Rd, inst.Rn, ImmUtils.CombineImmU12(inst.Imm8, inst.Imm3, inst.I), false);
        }

        public static void SubIT5(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Imm8b0w8 inst = new(encoding);

            InstEmitAlu.SubI(context, RegisterUtils.PcRegister, inst.Rn, inst.Imm8, true);
        }

        public static void SubRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.SubR(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, inst.Imm5, inst.S != 0);
        }

        public static void SubRT1(CodeGenContext context, uint encoding)
        {
            InstRmb22w3Rnb19w3Rdb16w3 inst = new(encoding);

            InstEmitAlu.SubR(context, inst.Rd, inst.Rn, inst.Rm, 0, 0, !context.InITBlock);
        }

        public static void SubRT2(CodeGenContext context, uint encoding)
        {
            InstSb20w1Rnb16w4Imm3b12w3Rdb8w4Imm2b6w2Stypeb4w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.SubR(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3), !context.InITBlock);
        }

        public static void SubRrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rnb16w4Rdb12w4Rsb8w4Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.SubRr(context, inst.Rd, inst.Rn, inst.Rm, inst.Stype, inst.Rs, inst.S != 0);
        }

        public static void SubSpIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rdb12w4Imm12b0w12 inst = new(encoding);

            InstEmitAlu.SubI(context, inst.Rd, RegisterUtils.SpRegister, ImmUtils.ExpandImm(inst.Imm12), inst.S != 0);
        }

        public static void SubSpIT1(CodeGenContext context, uint encoding)
        {
            InstImm7b16w7 inst = new(encoding);

            InstEmitAlu.SubI(context, RegisterUtils.SpRegister, RegisterUtils.SpRegister, inst.Imm7 << 2, false);
        }

        public static void SubSpIT2(CodeGenContext context, uint encoding)
        {
            InstIb26w1Sb20w1Imm3b12w3Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitAlu.SubI(context, inst.Rd, RegisterUtils.SpRegister, ImmUtils.ExpandImm(inst.Imm8, inst.Imm3, inst.I), inst.S != 0);
        }

        public static void SubSpIT3(CodeGenContext context, uint encoding)
        {
            InstIb26w1Imm3b12w3Rdb8w4Imm8b0w8 inst = new(encoding);

            InstEmitAlu.SubI(context, inst.Rd, RegisterUtils.SpRegister, ImmUtils.CombineImmU12(inst.Imm8, inst.Imm3, inst.I), false);
        }

        public static void SubSpRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rdb12w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.SubR(context, inst.Rd, RegisterUtils.SpRegister, inst.Rm, inst.Stype, inst.Imm5, inst.S != 0);
        }

        public static void SubSpRT1(CodeGenContext context, uint encoding)
        {
            InstSb20w1Imm3b12w3Rdb8w4Imm2b6w2Stypeb4w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.SubR(context, inst.Rd, RegisterUtils.SpRegister, inst.Rm, inst.Stype, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3), inst.S != 0);
        }

        public static void SvcA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Imm24b0w24 inst = new(encoding);

            InstEmitSystem.Svc(context, inst.Imm24);
        }

        public static void SvcT1(CodeGenContext context, uint encoding)
        {
            InstImm8b16w8 inst = new(encoding);

            InstEmitSystem.Svc(context, inst.Imm8);
        }

        public static void SxtabA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rotateb10w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Sxtab(context, inst.Rd, inst.Rn, inst.Rm, inst.Rotate);
        }

        public static void SxtabT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rotateb4w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Sxtab(context, inst.Rd, inst.Rn, inst.Rm, inst.Rotate);
        }

        public static void Sxtab16A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rotateb10w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Sxtab16(context, inst.Rd, inst.Rn, inst.Rm, inst.Rotate);
        }

        public static void Sxtab16T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rotateb4w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Sxtab16(context, inst.Rd, inst.Rn, inst.Rm, inst.Rotate);
        }

        public static void SxtahA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rotateb10w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Sxtah(context, inst.Rd, inst.Rn, inst.Rm, inst.Rotate);
        }

        public static void SxtahT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rotateb4w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Sxtah(context, inst.Rd, inst.Rn, inst.Rm, inst.Rotate);
        }

        public static void SxtbA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb12w4Rotateb10w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Sxtb(context, inst.Rd, inst.Rm, inst.Rotate);
        }

        public static void SxtbT1(CodeGenContext context, uint encoding)
        {
            InstRmb19w3Rdb16w3 inst = new(encoding);

            InstEmitExtension.Sxtb(context, inst.Rd, inst.Rm, 0);
        }

        public static void SxtbT2(CodeGenContext context, uint encoding)
        {
            InstRdb8w4Rotateb4w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Sxtb(context, inst.Rd, inst.Rm, inst.Rotate);
        }

        public static void Sxtb16A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb12w4Rotateb10w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Sxtb16(context, inst.Rd, inst.Rm, inst.Rotate);
        }

        public static void Sxtb16T1(CodeGenContext context, uint encoding)
        {
            InstRdb8w4Rotateb4w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Sxtb16(context, inst.Rd, inst.Rm, inst.Rotate);
        }

        public static void SxthA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb12w4Rotateb10w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Sxth(context, inst.Rd, inst.Rm, inst.Rotate);
        }

        public static void SxthT1(CodeGenContext context, uint encoding)
        {
            InstRmb19w3Rdb16w3 inst = new(encoding);

            InstEmitExtension.Sxth(context, inst.Rd, inst.Rm, 0);
        }

        public static void SxthT2(CodeGenContext context, uint encoding)
        {
            InstRdb8w4Rotateb4w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Sxth(context, inst.Rd, inst.Rm, inst.Rotate);
        }

        public static void TbbT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Hb4w1Rmb0w4 inst = new(encoding);

            InstEmitFlow.Tbb(context, inst.Rn, inst.Rm, inst.H != 0);
        }

        public static void TeqIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Imm12b0w12 inst = new(encoding);

            InstEmitAlu.TeqI(context, inst.Rn, ImmUtils.ExpandImm(inst.Imm12), ImmUtils.ExpandedImmRotated(inst.Imm12));
        }

        public static void TeqIT1(CodeGenContext context, uint encoding)
        {
            InstIb26w1Rnb16w4Imm3b12w3Imm8b0w8 inst = new(encoding);

            InstEmitAlu.TeqI(context, inst.Rn, ImmUtils.ExpandImm(inst.Imm8, inst.Imm3, inst.I), ImmUtils.ExpandedImmRotated(inst.Imm8, inst.Imm3, inst.I));
        }

        public static void TeqRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.TeqR(context, inst.Rn, inst.Rm, inst.Stype, inst.Imm5);
        }

        public static void TeqRT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Imm3b12w3Imm2b6w2Stypeb4w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.TeqR(context, inst.Rn, inst.Rm, inst.Stype, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3));
        }

        public static void TeqRrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rsb8w4Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.TeqRr(context, inst.Rn, inst.Rm, inst.Stype, inst.Rs);
        }

        public static void TsbA1(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Tsb();
        }

        public static void TsbT1(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Tsb();
        }

        public static void TstIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Imm12b0w12 inst = new(encoding);

            InstEmitAlu.TstI(context, inst.Rn, ImmUtils.ExpandImm(inst.Imm12), ImmUtils.ExpandedImmRotated(inst.Imm12));
        }

        public static void TstIT1(CodeGenContext context, uint encoding)
        {
            InstIb26w1Rnb16w4Imm3b12w3Imm8b0w8 inst = new(encoding);

            InstEmitAlu.TstI(context, inst.Rn, ImmUtils.ExpandImm(inst.Imm8, inst.Imm3, inst.I), ImmUtils.ExpandedImmRotated(inst.Imm8, inst.Imm3, inst.I));
        }

        public static void TstRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Imm5b7w5Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.TstR(context, inst.Rn, inst.Rm, inst.Stype, inst.Imm5);
        }

        public static void TstRT1(CodeGenContext context, uint encoding)
        {
            InstRmb19w3Rnb16w3 inst = new(encoding);

            InstEmitAlu.TstR(context, inst.Rn, inst.Rm, 0, 0);
        }

        public static void TstRT2(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Imm3b12w3Imm2b6w2Stypeb4w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.TstR(context, inst.Rn, inst.Rm, inst.Stype, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3));
        }

        public static void TstRrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rsb8w4Stypeb5w2Rmb0w4 inst = new(encoding);

            InstEmitAlu.TstRr(context, inst.Rn, inst.Rm, inst.Stype, inst.Rs);
        }

        public static void Uadd16A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Uadd16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Uadd16T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Uadd16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Uadd8A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Uadd8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Uadd8T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Uadd8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void UasxA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Uasx(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void UasxT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Uasx(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void UbfxA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Widthm1b16w5Rdb12w4Lsbb7w5Rnb0w4 inst = new(encoding);

            InstEmitBit.Ubfx(context, inst.Rd, inst.Rn, inst.Lsb, inst.Widthm1);
        }

        public static void UbfxT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Imm3b12w3Rdb8w4Imm2b6w2Widthm1b0w5 inst = new(encoding);

            InstEmitBit.Ubfx(context, inst.Rd, inst.Rn, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3), inst.Widthm1);
        }

        public static void UdfA1(CodeGenContext context, uint encoding)
        {
            InstImm12b8w12Imm4b0w4 inst = new(encoding);

            InstEmitSystem.Udf(context, encoding, ImmUtils.CombineImmU16(inst.Imm12, inst.Imm4));
        }

        public static void UdfT1(CodeGenContext context, uint encoding)
        {
            InstImm8b16w8 inst = new(encoding);

            InstEmitSystem.Udf(context, encoding, inst.Imm8);
        }

        public static void UdfT2(CodeGenContext context, uint encoding)
        {
            InstImm4b16w4Imm12b0w12 inst = new(encoding);

            InstEmitSystem.Udf(context, encoding, ImmUtils.CombineImmU16(inst.Imm12, inst.Imm4));
        }

        public static void UdivA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb16w4Rmb8w4Rnb0w4 inst = new(encoding);

            InstEmitDivide.Udiv(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void UdivT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitDivide.Udiv(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Uhadd16A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Uhadd16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Uhadd16T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Uhadd16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Uhadd8A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Uhadd8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Uhadd8T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Uhadd8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void UhasxA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Uhasx(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void UhasxT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Uhasx(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void UhsaxA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Uhsax(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void UhsaxT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Uhsax(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Uhsub16A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Uhsub16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Uhsub16T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Uhsub16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Uhsub8A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Uhsub8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Uhsub8T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitHalve.Uhsub8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void UmaalA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdhib16w4Rdlob12w4Rmb8w4Rnb0w4 inst = new(encoding);

            InstEmitMultiply.Umaal(context, inst.Rdlo, inst.Rdhi, inst.Rn, inst.Rm);
        }

        public static void UmaalT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdlob12w4Rdhib8w4Rmb0w4 inst = new(encoding);

            InstEmitMultiply.Umaal(context, inst.Rdlo, inst.Rdhi, inst.Rn, inst.Rm);
        }

        public static void UmlalA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rdhib16w4Rdlob12w4Rmb8w4Rnb0w4 inst = new(encoding);

            InstEmitMultiply.Umlal(context, inst.Rdlo, inst.Rdhi, inst.Rn, inst.Rm, inst.S != 0);
        }

        public static void UmlalT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdlob12w4Rdhib8w4Rmb0w4 inst = new(encoding);

            InstEmitMultiply.Umlal(context, inst.Rdlo, inst.Rdhi, inst.Rn, inst.Rm, false);
        }

        public static void UmullA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Sb20w1Rdhib16w4Rdlob12w4Rmb8w4Rnb0w4 inst = new(encoding);

            InstEmitMultiply.Umull(context, inst.Rdlo, inst.Rdhi, inst.Rn, inst.Rm, inst.S != 0);
        }

        public static void UmullT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdlob12w4Rdhib8w4Rmb0w4 inst = new(encoding);

            InstEmitMultiply.Umull(context, inst.Rdlo, inst.Rdhi, inst.Rn, inst.Rm, false);
        }

        public static void Uqadd16A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Uqadd16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Uqadd16T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Uqadd16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Uqadd8A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Uqadd8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Uqadd8T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Uqadd8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void UqasxA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Uqasx(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void UqasxT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Uqasx(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void UqsaxA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Uqsax(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void UqsaxT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Uqsax(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Uqsub16A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Uqsub16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Uqsub16T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Uqsub16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Uqsub8A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Uqsub8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Uqsub8T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitSaturate.Uqsub8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Usad8A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb16w4Rmb8w4Rnb0w4 inst = new(encoding);

            InstEmitAbsDiff.Usad8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Usad8T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitAbsDiff.Usad8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Usada8A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb16w4Rab12w4Rmb8w4Rnb0w4 inst = new(encoding);

            InstEmitAbsDiff.Usada8(context, inst.Rd, inst.Rn, inst.Rm, inst.Ra);
        }

        public static void Usada8T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rab12w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitAbsDiff.Usada8(context, inst.Rd, inst.Rn, inst.Rm, inst.Ra);
        }

        public static void UsatA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4SatImmb16w5Rdb12w4Imm5b7w5Shb6w1Rnb0w4 inst = new(encoding);

            InstEmitSaturate.Usat(context, inst.Rd, inst.SatImm, inst.Rn, inst.Sh != 0, inst.Imm5);
        }

        public static void UsatT1(CodeGenContext context, uint encoding)
        {
            InstShb21w1Rnb16w4Imm3b12w3Rdb8w4Imm2b6w2SatImmb0w5 inst = new(encoding);

            InstEmitSaturate.Usat(context, inst.Rd, inst.SatImm, inst.Rn, inst.Sh != 0, ImmUtils.CombineImmU5(inst.Imm2, inst.Imm3));
        }

        public static void Usat16A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4SatImmb16w4Rdb12w4Rnb0w4 inst = new(encoding);

            InstEmitSaturate.Usat16(context, inst.Rd, inst.SatImm, inst.Rn);
        }

        public static void Usat16T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4SatImmb0w4 inst = new(encoding);

            InstEmitSaturate.Usat16(context, inst.Rd, inst.SatImm, inst.Rn);
        }

        public static void UsaxA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Usax(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void UsaxT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Usax(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Usub16A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Usub16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Usub16T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Usub16(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Usub8A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Usub8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void Usub8T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rmb0w4 inst = new(encoding);

            InstEmitGE.Usub8(context, inst.Rd, inst.Rn, inst.Rm);
        }

        public static void UxtabA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rotateb10w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Uxtab(context, inst.Rd, inst.Rn, inst.Rm, inst.Rotate);
        }

        public static void UxtabT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rotateb4w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Uxtab(context, inst.Rd, inst.Rn, inst.Rm, inst.Rotate);
        }

        public static void Uxtab16A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rotateb10w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Uxtab16(context, inst.Rd, inst.Rn, inst.Rm, inst.Rotate);
        }

        public static void Uxtab16T1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rotateb4w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Uxtab16(context, inst.Rd, inst.Rn, inst.Rm, inst.Rotate);
        }

        public static void UxtahA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rnb16w4Rdb12w4Rotateb10w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Uxtah(context, inst.Rd, inst.Rn, inst.Rm, inst.Rotate);
        }

        public static void UxtahT1(CodeGenContext context, uint encoding)
        {
            InstRnb16w4Rdb8w4Rotateb4w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Uxtah(context, inst.Rd, inst.Rn, inst.Rm, inst.Rotate);
        }

        public static void UxtbA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb12w4Rotateb10w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Uxtb(context, inst.Rd, inst.Rm, inst.Rotate);
        }

        public static void UxtbT1(CodeGenContext context, uint encoding)
        {
            InstRmb19w3Rdb16w3 inst = new(encoding);

            InstEmitExtension.Uxtb(context, inst.Rd, inst.Rm, 0);
        }

        public static void UxtbT2(CodeGenContext context, uint encoding)
        {
            InstRdb8w4Rotateb4w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Uxtb(context, inst.Rd, inst.Rm, inst.Rotate);
        }

        public static void Uxtb16A1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb12w4Rotateb10w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Uxtb16(context, inst.Rd, inst.Rm, inst.Rotate);
        }

        public static void Uxtb16T1(CodeGenContext context, uint encoding)
        {
            InstRdb8w4Rotateb4w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Uxtb16(context, inst.Rd, inst.Rm, inst.Rotate);
        }

        public static void UxthA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Rdb12w4Rotateb10w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Uxth(context, inst.Rd, inst.Rm, inst.Rotate);
        }

        public static void UxthT1(CodeGenContext context, uint encoding)
        {
            InstRmb19w3Rdb16w3 inst = new(encoding);

            InstEmitExtension.Uxth(context, inst.Rd, inst.Rm, 0);
        }

        public static void UxthT2(CodeGenContext context, uint encoding)
        {
            InstRdb8w4Rotateb4w2Rmb0w4 inst = new(encoding);

            InstEmitExtension.Uxth(context, inst.Rd, inst.Rm, inst.Rotate);
        }

        public static void VabaA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vaba(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VabaT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vaba(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VabalA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vabal(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size);
        }

        public static void VabalT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vabal(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size);
        }

        public static void VabdlIA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vabdl(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size);
        }

        public static void VabdlIT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vabdl(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size);
        }

        public static void VabdFA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VabdF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VabdFT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VabdF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VabdIA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VabdI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VabdIT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VabdI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VabsA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Fb10w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vabs(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VabsA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VabsF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VabsT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Fb10w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vabs(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VabsT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VabsF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VacgeA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.Vacge(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VacgeT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.Vacge(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VacgtA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.Vacgt(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VacgtT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.Vacgt(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VaddhnA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vaddhn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VaddhnT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vaddhn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VaddlA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vaddl(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size);
        }

        public static void VaddlT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vaddl(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size);
        }

        public static void VaddwA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vaddw(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size);
        }

        public static void VaddwT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vaddw(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size);
        }

        public static void VaddFA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VaddF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VaddFA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VaddF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VaddFT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VaddF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VaddFT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VaddF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VaddIA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VaddI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VaddIT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VaddI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VandRA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonLogical.VandR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void VandRT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonLogical.VandR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void VbicIA1(CodeGenContext context, uint encoding)
        {
            InstIb24w1Db22w1Imm3b16w3Vdb12w4Qb6w1Imm4b0w4 inst = new(encoding);

            InstEmitNeonLogical.VbicI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), (encoding >> 8) & 0xf, ImmUtils.CombineImmU8(inst.Imm4, inst.Imm3, inst.I), inst.Q);
        }

        public static void VbicIA2(CodeGenContext context, uint encoding)
        {
            InstIb24w1Db22w1Imm3b16w3Vdb12w4Qb6w1Imm4b0w4 inst = new(encoding);

            InstEmitNeonLogical.VbicI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), (encoding >> 8) & 0xf, ImmUtils.CombineImmU8(inst.Imm4, inst.Imm3, inst.I), inst.Q);
        }

        public static void VbicIT1(CodeGenContext context, uint encoding)
        {
            InstIb28w1Db22w1Imm3b16w3Vdb12w4Qb6w1Imm4b0w4 inst = new(encoding);

            InstEmitNeonLogical.VbicI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), (encoding >> 8) & 0xf, ImmUtils.CombineImmU8(inst.Imm4, inst.Imm3, inst.I), inst.Q);
        }

        public static void VbicIT2(CodeGenContext context, uint encoding)
        {
            InstIb28w1Db22w1Imm3b16w3Vdb12w4Qb6w1Imm4b0w4 inst = new(encoding);

            InstEmitNeonLogical.VbicI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), (encoding >> 8) & 0xf, ImmUtils.CombineImmU8(inst.Imm4, inst.Imm3, inst.I), inst.Q);
        }

        public static void VbicRA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonLogical.VbicR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void VbicRT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonLogical.VbicR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void VbifA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonLogical.VbifR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void VbifT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonLogical.VbifR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void VbitA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonLogical.VbitR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void VbitT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonLogical.VbitR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void VbslA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonLogical.VbslR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void VbslT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonLogical.VbslR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void VcaddA1(CodeGenContext context, uint encoding)
        {
            _ = new InstRotb24w1Db22w1Sb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VcaddT1(CodeGenContext context, uint encoding)
        {
            _ = new InstRotb24w1Db22w1Sb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VceqIA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Fb10w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.VceqI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VceqIT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Fb10w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.VceqI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VceqRA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.VceqR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VceqRA2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.VceqFR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VceqRT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.VceqR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VceqRT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.VceqFR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VcgeIA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Fb10w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.VcgeI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VcgeIT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Fb10w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.VcgeI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VcgeRA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.VcgeR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VcgeRA2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.VcgeFR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VcgeRT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.VcgeR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VcgeRT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.VcgeFR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VcgtIA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Fb10w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.VcgtI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VcgtIT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Fb10w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.VcgtI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VcgtRA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.VcgtR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VcgtRA2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.VcgtFR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VcgtRT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.VcgtR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VcgtRT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.VcgtFR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VcleIA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Fb10w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.VcleI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VcleIT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Fb10w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.VcleI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VclsA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonBit.Vcls(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VclsT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonBit.Vcls(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VcltIA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Fb10w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.VcltI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VcltIT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Fb10w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.VcltI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VclzA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonBit.Vclz(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VclzT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonBit.Vclz(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VcmlaA1(CodeGenContext context, uint encoding)
        {
            _ = new InstRotb23w2Db22w1Sb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VcmlaT1(CodeGenContext context, uint encoding)
        {
            _ = new InstRotb23w2Db22w1Sb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VcmlaSA1(CodeGenContext context, uint encoding)
        {
            _ = new InstSb23w1Db22w1Rotb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VcmlaST1(CodeGenContext context, uint encoding)
        {
            _ = new InstSb23w1Db22w1Rotb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VcmpA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpCompare.VcmpR(context, inst.Cond, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VcmpA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vdb12w4Sizeb8w2 inst = new(encoding);

            InstEmitVfpCompare.VcmpI(context, inst.Cond, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), inst.Size);
        }

        public static void VcmpT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpCompare.VcmpR(context, 0xe, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VcmpT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2 inst = new(encoding);

            InstEmitVfpCompare.VcmpI(context, 0xe, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), inst.Size);
        }

        public static void VcmpeA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpCompare.VcmpeR(context, inst.Cond, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VcmpeA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vdb12w4Sizeb8w2 inst = new(encoding);

            InstEmitVfpCompare.VcmpeI(context, inst.Cond, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), inst.Size);
        }

        public static void VcmpeT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpCompare.VcmpeR(context, 0xe, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VcmpeT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2 inst = new(encoding);

            InstEmitVfpCompare.VcmpeI(context, 0xe, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), inst.Size);
        }

        public static void VcntA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonBit.Vcnt(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VcntT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonBit.Vcnt(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VcvtaAsimdA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Opb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonConvert.Vcvta(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op != 0, inst.Size, inst.Q);
        }

        public static void VcvtaAsimdT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Opb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonConvert.Vcvta(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op != 0, inst.Size, inst.Q);
        }

        public static void VcvtaVfpA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Opb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpConvert.Vcvta(context, InstEmitCommon.CombineVF(inst.D, inst.Vd), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Op != 0, inst.Size);
        }

        public static void VcvtaVfpT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Opb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpConvert.Vcvta(context, InstEmitCommon.CombineVF(inst.D, inst.Vd), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Op != 0, inst.Size);
        }

        public static void VcvtbA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Opb16w1Vdb12w4Szb8w1Mb5w1Vmb0w4 inst = new(encoding);

            uint dSize = inst.Sz == 1 && inst.Op == 0 ? 3u : 2u;
            uint mSize = inst.Sz == 1 && inst.Op == 1 ? 3u : 2u;

            InstEmitVfpConvert.Vcvtb(context, InstEmitCommon.CombineV(inst.Vd, inst.D, dSize), InstEmitCommon.CombineV(inst.Vm, inst.M, mSize), inst.Sz, inst.Op);
        }

        public static void VcvtbT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Opb16w1Vdb12w4Szb8w1Mb5w1Vmb0w4 inst = new(encoding);

            uint dSize = inst.Sz == 1 && inst.Op == 0 ? 3u : 2u;
            uint mSize = inst.Sz == 1 && inst.Op == 1 ? 3u : 2u;

            InstEmitVfpConvert.Vcvtb(context, InstEmitCommon.CombineV(inst.Vd, inst.D, dSize), InstEmitCommon.CombineV(inst.Vm, inst.M, mSize), inst.Sz, inst.Op);
        }

        public static void VcvtbBfsA1(CodeGenContext context, uint encoding)
        {
            _ = new InstCondb28w4Db22w1Vdb12w4Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VcvtbBfsT1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vdb12w4Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VcvtmAsimdA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Opb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonConvert.Vcvtm(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op != 0, inst.Size, inst.Q);
        }

        public static void VcvtmAsimdT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Opb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonConvert.Vcvtm(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op != 0, inst.Size, inst.Q);
        }

        public static void VcvtmVfpA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Opb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpConvert.Vcvtm(context, InstEmitCommon.CombineVF(inst.D, inst.Vd), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Op != 0, inst.Size);
        }

        public static void VcvtmVfpT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Opb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpConvert.Vcvtm(context, InstEmitCommon.CombineVF(inst.D, inst.Vd), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Op != 0, inst.Size);
        }

        public static void VcvtnAsimdA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Opb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonConvert.Vcvtn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op != 0, inst.Size, inst.Q);
        }

        public static void VcvtnAsimdT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Opb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonConvert.Vcvtn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op != 0, inst.Size, inst.Q);
        }

        public static void VcvtnVfpA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Opb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpConvert.Vcvtn(context, InstEmitCommon.CombineVF(inst.D, inst.Vd), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Op != 0, inst.Size);
        }

        public static void VcvtnVfpT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Opb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpConvert.Vcvtn(context, InstEmitCommon.CombineVF(inst.D, inst.Vd), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Op != 0, inst.Size);
        }

        public static void VcvtpAsimdA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Opb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonConvert.Vcvtp(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op != 0, inst.Size, inst.Q);
        }

        public static void VcvtpAsimdT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Opb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonConvert.Vcvtp(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op != 0, inst.Size, inst.Q);
        }

        public static void VcvtpVfpA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Opb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpConvert.Vcvtp(context, InstEmitCommon.CombineVF(inst.D, inst.Vd), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Op != 0, inst.Size);
        }

        public static void VcvtpVfpT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Opb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpConvert.Vcvtp(context, InstEmitCommon.CombineVF(inst.D, inst.Vd), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Op != 0, inst.Size);
        }

        public static void VcvtrIvA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpConvert.VcvtrIv(context, InstEmitCommon.CombineVF(inst.D, inst.Vd), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), (encoding >> 16) & 7, inst.Size);
        }

        public static void VcvtrIvT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpConvert.VcvtrIv(context, InstEmitCommon.CombineVF(inst.D, inst.Vd), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), (encoding >> 16) & 7, inst.Size);
        }

        public static void VcvttA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Opb16w1Vdb12w4Szb8w1Mb5w1Vmb0w4 inst = new(encoding);

            uint dSize = inst.Sz == 1 && inst.Op == 0 ? 3u : 2u;
            uint mSize = inst.Sz == 1 && inst.Op == 1 ? 3u : 2u;

            InstEmitVfpConvert.Vcvtt(context, InstEmitCommon.CombineV(inst.Vd, inst.D, dSize), InstEmitCommon.CombineV(inst.Vm, inst.M, mSize), inst.Sz, inst.Op);
        }

        public static void VcvttT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Opb16w1Vdb12w4Szb8w1Mb5w1Vmb0w4 inst = new(encoding);

            uint dSize = inst.Sz == 1 && inst.Op == 0 ? 3u : 2u;
            uint mSize = inst.Sz == 1 && inst.Op == 1 ? 3u : 2u;

            InstEmitVfpConvert.Vcvtt(context, InstEmitCommon.CombineV(inst.Vd, inst.D, dSize), InstEmitCommon.CombineV(inst.Vm, inst.M, mSize), inst.Sz, inst.Op);
        }

        public static void VcvttBfsA1(CodeGenContext context, uint encoding)
        {
            _ = new InstCondb28w4Db22w1Vdb12w4Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VcvttBfsT1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vdb12w4Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VcvtBfsA1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vdb12w4Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VcvtBfsT1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vdb12w4Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VcvtDsA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            uint size = (encoding >> 8) & 3;

            InstEmitVfpConvert.VcvtDs(context, InstEmitCommon.CombineV(inst.Vd, inst.D, size ^ 1u), InstEmitCommon.CombineV(inst.Vm, inst.M, size), size);
        }

        public static void VcvtDsT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            uint size = (encoding >> 8) & 3;

            InstEmitVfpConvert.VcvtDs(context, InstEmitCommon.CombineV(inst.Vd, inst.D, size ^ 1u), InstEmitCommon.CombineV(inst.Vm, inst.M, size), size);
        }

        public static void VcvtHsA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Opb8w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonConvert.VcvtHs(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op != 0);
        }

        public static void VcvtHsT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Opb8w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonConvert.VcvtHs(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op != 0);
        }

        public static void VcvtIsA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Opb7w2Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonConvert.VcvtIs(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op, inst.Size, inst.Q);
        }

        public static void VcvtIsT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Opb7w2Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonConvert.VcvtIs(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op, inst.Size, inst.Q);
        }

        public static void VcvtIvA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpConvert.VcvtIv(context, InstEmitCommon.CombineVF(inst.D, inst.Vd), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), (encoding & (1u << 16)) == 0, inst.Size);
        }

        public static void VcvtIvT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpConvert.VcvtIv(context, InstEmitCommon.CombineVF(inst.D, inst.Vd), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), (encoding & (1u << 16)) == 0, inst.Size);
        }

        public static void VcvtViA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vdb12w4Sizeb8w2Opb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpConvert.VcvtVi(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineVF(inst.M, inst.Vm), inst.Op == 0, inst.Size);
        }

        public static void VcvtViT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Opb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpConvert.VcvtVi(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineVF(inst.M, inst.Vm), inst.Op == 0, inst.Size);
        }

        public static void VcvtXsA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Imm6b16w6Vdb12w4Opb8w2Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonConvert.VcvtXs(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Imm6, inst.Op, inst.U != 0, inst.Q);
        }

        public static void VcvtXsT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Imm6b16w6Vdb12w4Opb8w2Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonConvert.VcvtXs(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Imm6, inst.Op, inst.U != 0, inst.Q);
        }

        public static void VcvtXvA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Opb18w1Ub16w1Vdb12w4Sfb8w2Sxb7w1Ib5w1Imm4b0w4 inst = new(encoding);

            InstEmitVfpConvert.VcvtXv(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Sf), ImmUtils.CombineImmU5IImm4(inst.I, inst.Imm4), inst.Sx != 0, inst.Sf, inst.Op, inst.U != 0);
        }

        public static void VcvtXvT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Opb18w1Ub16w1Vdb12w4Sfb8w2Sxb7w1Ib5w1Imm4b0w4 inst = new(encoding);

            InstEmitVfpConvert.VcvtXv(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Sf), ImmUtils.CombineImmU5IImm4(inst.I, inst.Imm4), inst.Sx != 0, inst.Sf, inst.Op, inst.U != 0);
        }

        public static void VdivA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VdivF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VdivT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VdivF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VdotA1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VdotT1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VdotSA1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VdotST1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VdupRA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Bb22w1Qb21w1Vdb16w4Rtb12w4Db7w1Eb5w1 inst = new(encoding);

            InstEmitNeonMove.VdupR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rt, inst.B, inst.E, inst.Q);
        }

        public static void VdupRT1(CodeGenContext context, uint encoding)
        {
            InstBb22w1Qb21w1Vdb16w4Rtb12w4Db7w1Eb5w1 inst = new(encoding);

            InstEmitNeonMove.VdupR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rt, inst.B, inst.E, inst.Q);
        }

        public static void VdupSA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Imm4b16w4Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.VdupS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Imm4, inst.Q);
        }

        public static void VdupST1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Imm4b16w4Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.VdupS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Imm4, inst.Q);
        }

        public static void VeorA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonLogical.VeorR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void VeorT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonLogical.VeorR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void VextA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Imm4b8w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.Vext(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Imm4, inst.Q);
        }

        public static void VextT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Imm4b8w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.Vext(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Imm4, inst.Q);
        }

        public static void VfmaA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VfmaF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VfmaA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VfmaF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VfmaT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VfmaF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VfmaT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VfmaF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VfmalA1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VfmalT1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VfmalSA1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VfmalST1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VfmaBfA1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VfmaBfT1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VfmaBfsA1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VfmaBfsT1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VfmsA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VfmsF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VfmsA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VfmsF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VfmsT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VfmsF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VfmsT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VfmsF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VfmslA1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VfmslT1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VfmslSA1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VfmslST1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VfnmaA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VfnmaF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VfnmaT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VfnmaF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VfnmsA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VfnmsF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VfnmsT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VfnmsF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VhaddA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vhadd(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VhaddT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vhadd(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VhsubA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vhsub(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VhsubT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vhsub(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VinsA1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vdb12w4Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VinsT1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vdb12w4Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VjcvtA1(CodeGenContext context, uint encoding)
        {
            _ = new InstCondb28w4Db22w1Vdb12w4Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VjcvtT1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vdb12w4Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void Vld11A1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld11(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 0);
        }

        public static void Vld11A2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld11(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 1);
        }

        public static void Vld11A3(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld11(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 2);
        }

        public static void Vld11T1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld11(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 0);
        }

        public static void Vld11T2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld11(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 1);
        }

        public static void Vld11T3(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld11(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 2);
        }

        public static void Vld1AA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Tb5w1Ab4w1Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld1A(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.A, inst.T, inst.Size);
        }

        public static void Vld1AT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Tb5w1Ab4w1Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld1A(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.A, inst.T, inst.Size);
        }

        public static void Vld1MA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld1M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, 1, inst.Align, inst.Size);
        }

        public static void Vld1MA2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld1M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, 2, inst.Align, inst.Size);
        }

        public static void Vld1MA3(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld1M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, 3, inst.Align, inst.Size);
        }

        public static void Vld1MA4(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld1M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, 4, inst.Align, inst.Size);
        }

        public static void Vld1MT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld1M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, 1, inst.Align, inst.Size);
        }

        public static void Vld1MT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld1M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, 2, inst.Align, inst.Size);
        }

        public static void Vld1MT3(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld1M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, 3, inst.Align, inst.Size);
        }

        public static void Vld1MT4(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld1M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, 4, inst.Align, inst.Size);
        }

        public static void Vld21A1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld21(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 0);
        }

        public static void Vld21A2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld21(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 1);
        }

        public static void Vld21A3(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld21(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 2);
        }

        public static void Vld21T1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld21(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 0);
        }

        public static void Vld21T2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld21(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 1);
        }

        public static void Vld21T3(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld21(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 2);
        }

        public static void Vld2AA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Tb5w1Ab4w1Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld2A(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.A, inst.T, inst.Size);
        }

        public static void Vld2AT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Tb5w1Ab4w1Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld2A(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.A, inst.T, inst.Size);
        }

        public static void Vld2MA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld2M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, (encoding >> 8) & 0xf, inst.Align, inst.Size);
        }

        public static void Vld2MA2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld2M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.Align, inst.Size);
        }

        public static void Vld2MT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld2M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, (encoding >> 8) & 0xf, inst.Align, inst.Size);
        }

        public static void Vld2MT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld2M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.Align, inst.Size);
        }

        public static void Vld31A1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld31(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 0);
        }

        public static void Vld31A2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld31(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 1);
        }

        public static void Vld31A3(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld31(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 2);
        }

        public static void Vld31T1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld31(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 0);
        }

        public static void Vld31T2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld31(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 1);
        }

        public static void Vld31T3(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld31(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 2);
        }

        public static void Vld3AA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Tb5w1Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld3A(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, 0, inst.T, inst.Size);
        }

        public static void Vld3AT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Tb5w1Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld3A(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, 0, inst.T, inst.Size);
        }

        public static void Vld3MA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld3M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, (encoding >> 8) & 0xf, inst.Align, inst.Size);
        }

        public static void Vld3MT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld3M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, (encoding >> 8) & 0xf, inst.Align, inst.Size);
        }

        public static void Vld41A1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld41(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 0);
        }

        public static void Vld41A2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld41(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 1);
        }

        public static void Vld41A3(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld41(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 2);
        }

        public static void Vld41T1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld41(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 0);
        }

        public static void Vld41T2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld41(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 1);
        }

        public static void Vld41T3(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld41(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 2);
        }

        public static void Vld4AA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Tb5w1Ab4w1Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld4A(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.A, inst.T, inst.Size);
        }

        public static void Vld4AT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Tb5w1Ab4w1Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld4A(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.A, inst.T, inst.Size);
        }

        public static void Vld4MA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld4M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, (encoding >> 8) & 0xf, inst.Align, inst.Size);
        }

        public static void Vld4MT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vld4M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, (encoding >> 8) & 0xf, inst.Align, inst.Size);
        }

        public static void VldmA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Db22w1Wb21w1Rnb16w4Vdb12w4Imm871b1w7 inst = new(encoding);

            InstEmitNeonMemory.Vldm(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Imm871, inst.U != 0, inst.W != 0, singleRegs: false);
        }

        public static void VldmA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Db22w1Wb21w1Rnb16w4Vdb12w4Imm8b0w8 inst = new(encoding);

            InstEmitNeonMemory.Vldm(context, InstEmitCommon.CombineVF(inst.D, inst.Vd), inst.Rn, inst.Imm8, inst.U != 0, inst.W != 0, singleRegs: true);
        }

        public static void VldmT1(CodeGenContext context, uint encoding)
        {
            InstPb24w1Ub23w1Db22w1Wb21w1Rnb16w4Vdb12w4Imm871b1w7 inst = new(encoding);

            InstEmitNeonMemory.Vldm(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Imm871, inst.U != 0, inst.W != 0, singleRegs: false);
        }

        public static void VldmT2(CodeGenContext context, uint encoding)
        {
            InstPb24w1Ub23w1Db22w1Wb21w1Rnb16w4Vdb12w4Imm8b0w8 inst = new(encoding);

            InstEmitNeonMemory.Vldm(context, InstEmitCommon.CombineVF(inst.D, inst.Vd), inst.Rn, inst.Imm8, inst.U != 0, inst.W != 0, singleRegs: true);
        }

        public static void VldrIA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Ub23w1Db22w1Rnb16w4Vdb12w4Sizeb8w2Imm8b0w8 inst = new(encoding);

            InstEmitNeonMemory.Vldr(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), inst.Rn, inst.Imm8, inst.U != 0, inst.Size);
        }

        public static void VldrIT1(CodeGenContext context, uint encoding)
        {
            InstUb23w1Db22w1Rnb16w4Vdb12w4Sizeb8w2Imm8b0w8 inst = new(encoding);

            InstEmitNeonMemory.Vldr(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), inst.Rn, inst.Imm8, inst.U != 0, inst.Size);
        }

        public static void VldrLA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Ub23w1Db22w1Vdb12w4Sizeb8w2Imm8b0w8 inst = new(encoding);

            InstEmitNeonMemory.Vldr(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), RegisterUtils.PcRegister, inst.Imm8, inst.U != 0, inst.Size);
        }

        public static void VldrLT1(CodeGenContext context, uint encoding)
        {
            InstUb23w1Db22w1Vdb12w4Sizeb8w2Imm8b0w8 inst = new(encoding);

            InstEmitNeonMemory.Vldr(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), RegisterUtils.PcRegister, inst.Imm8, inst.U != 0, inst.Size);
        }

        public static void VmaxnmA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vmaxnm(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VmaxnmA2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.Vmaxnm(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VmaxnmT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vmaxnm(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VmaxnmT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.Vmaxnm(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VmaxFA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmaxF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VmaxFT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmaxF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VmaxIA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmaxI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VmaxIT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmaxI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VminnmA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vminnm(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VminnmA2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.Vminnm(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VminnmT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vminnm(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VminnmT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.Vminnm(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VminFA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VminF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VminFT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VminF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VminIA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VminI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VminIT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VminI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VmlalIA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmlalI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size);
        }

        public static void VmlalIT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmlalI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size);
        }

        public static void VmlalSA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmlalS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size);
        }

        public static void VmlalST1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmlalS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size);
        }

        public static void VmlaFA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmlaF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VmlaFA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VmlaF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VmlaFT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmlaF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VmlaFT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VmlaF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VmlaIA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmlaI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VmlaIT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmlaI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VmlaSA1(CodeGenContext context, uint encoding)
        {
            InstQb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Fb8w1Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmlaS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VmlaST1(CodeGenContext context, uint encoding)
        {
            InstQb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Fb8w1Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmlaS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VmlslIA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmlslI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size);
        }

        public static void VmlslIT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmlslI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size);
        }

        public static void VmlslSA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmlslS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size);
        }

        public static void VmlslST1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmlslS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size);
        }

        public static void VmlsFA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmlsF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VmlsFA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VmlsF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VmlsFT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmlsF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VmlsFT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VmlsF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VmlsIA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmlsI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VmlsIT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmlsI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VmlsSA1(CodeGenContext context, uint encoding)
        {
            InstQb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Fb8w1Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmlsS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VmlsST1(CodeGenContext context, uint encoding)
        {
            InstQb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Fb8w1Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmlsS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VmmlaA1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VmmlaT1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VmovlA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Imm3hb19w3Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.Vmovl(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Imm3h);
        }

        public static void VmovlT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Imm3hb19w3Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.Vmovl(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Imm3h);
        }

        public static void VmovnA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.Vmovn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VmovnT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.Vmovn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VmovxA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.Vmovx(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M));
        }

        public static void VmovxT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.Vmovx(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M));
        }

        public static void VmovDA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Opb20w1Rt2b16w4Rtb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.VmovD(context, inst.Rt, inst.Rt2, InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op != 0);
        }

        public static void VmovDT1(CodeGenContext context, uint encoding)
        {
            InstOpb20w1Rt2b16w4Rtb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.VmovD(context, inst.Rt, inst.Rt2, InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op != 0);
        }

        public static void VmovHA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Opb20w1Vnb16w4Rtb12w4Nb7w1 inst = new(encoding);

            InstEmitNeonMove.VmovH(context, inst.Rt, InstEmitCommon.CombineVF(inst.N, inst.Vn), inst.Op != 0);
        }

        public static void VmovHT1(CodeGenContext context, uint encoding)
        {
            InstOpb20w1Vnb16w4Rtb12w4Nb7w1 inst = new(encoding);

            InstEmitNeonMove.VmovH(context, inst.Rt, InstEmitCommon.CombineVF(inst.N, inst.Vn), inst.Op != 0);
        }

        public static void VmovIA1(CodeGenContext context, uint encoding)
        {
            InstIb24w1Db22w1Imm3b16w3Vdb12w4Qb6w1Imm4b0w4 inst = new(encoding);

            InstEmitNeonMove.VmovI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), 0, (encoding >> 8) & 0xf, ImmUtils.CombineImmU8(inst.Imm4, inst.Imm3, inst.I), inst.Q);
        }

        public static void VmovIA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Imm4hb16w4Vdb12w4Sizeb8w2Imm4lb0w4 inst = new(encoding);

            InstEmitNeonMove.VmovFI(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), ImmUtils.CombineImmU8(inst.Imm4l, inst.Imm4h), inst.Size);
        }

        public static void VmovIA3(CodeGenContext context, uint encoding)
        {
            InstIb24w1Db22w1Imm3b16w3Vdb12w4Qb6w1Imm4b0w4 inst = new(encoding);

            InstEmitNeonMove.VmovI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), 0, (encoding >> 8) & 0xf, ImmUtils.CombineImmU8(inst.Imm4, inst.Imm3, inst.I), inst.Q);
        }

        public static void VmovIA4(CodeGenContext context, uint encoding)
        {
            InstIb24w1Db22w1Imm3b16w3Vdb12w4Qb6w1Imm4b0w4 inst = new(encoding);

            InstEmitNeonMove.VmovI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), 0, (encoding >> 8) & 0xf, ImmUtils.CombineImmU8(inst.Imm4, inst.Imm3, inst.I), inst.Q);
        }

        public static void VmovIA5(CodeGenContext context, uint encoding)
        {
            InstIb24w1Db22w1Imm3b16w3Vdb12w4Qb6w1Imm4b0w4 inst = new(encoding);

            InstEmitNeonMove.VmovI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), 1, (encoding >> 8) & 0xf, ImmUtils.CombineImmU8(inst.Imm4, inst.Imm3, inst.I), inst.Q);
        }

        public static void VmovIT1(CodeGenContext context, uint encoding)
        {
            InstIb28w1Db22w1Imm3b16w3Vdb12w4Qb6w1Imm4b0w4 inst = new(encoding);

            InstEmitNeonMove.VmovI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), 0, (encoding >> 8) & 0xf, ImmUtils.CombineImmU8(inst.Imm4, inst.Imm3, inst.I), inst.Q);
        }

        public static void VmovIT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Imm4hb16w4Vdb12w4Sizeb8w2Imm4lb0w4 inst = new(encoding);

            InstEmitNeonMove.VmovFI(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), ImmUtils.CombineImmU8(inst.Imm4l, inst.Imm4h), inst.Size);
        }

        public static void VmovIT3(CodeGenContext context, uint encoding)
        {
            InstIb28w1Db22w1Imm3b16w3Vdb12w4Qb6w1Imm4b0w4 inst = new(encoding);

            InstEmitNeonMove.VmovI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), 0, (encoding >> 8) & 0xf, ImmUtils.CombineImmU8(inst.Imm4, inst.Imm3, inst.I), inst.Q);
        }

        public static void VmovIT4(CodeGenContext context, uint encoding)
        {
            InstIb28w1Db22w1Imm3b16w3Vdb12w4Qb6w1Imm4b0w4 inst = new(encoding);

            InstEmitNeonMove.VmovI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), 0, (encoding >> 8) & 0xf, ImmUtils.CombineImmU8(inst.Imm4, inst.Imm3, inst.I), inst.Q);
        }

        public static void VmovIT5(CodeGenContext context, uint encoding)
        {
            InstIb28w1Db22w1Imm3b16w3Vdb12w4Qb6w1Imm4b0w4 inst = new(encoding);

            InstEmitNeonMove.VmovI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), 1, (encoding >> 8) & 0xf, ImmUtils.CombineImmU8(inst.Imm4, inst.Imm3, inst.I), inst.Q);
        }

        public static void VmovRA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            uint size = (encoding >> 8) & 3;

            InstEmitNeonMove.VmovR(context, InstEmitCommon.CombineV(inst.Vd, inst.D, size), InstEmitCommon.CombineV(inst.Vm, inst.M, size), size);
        }

        public static void VmovRT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            uint size = (encoding >> 8) & 3;

            InstEmitNeonMove.VmovR(context, InstEmitCommon.CombineV(inst.Vd, inst.D, size), InstEmitCommon.CombineV(inst.Vm, inst.M, size), size);
        }

        public static void VmovRsA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Opc1b21w2Vdb16w4Rtb12w4Db7w1Opc2b5w2 inst = new(encoding);

            InstEmitNeonMove.VmovRs(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rt, inst.Opc1, inst.Opc2);
        }

        public static void VmovRsT1(CodeGenContext context, uint encoding)
        {
            InstOpc1b21w2Vdb16w4Rtb12w4Db7w1Opc2b5w2 inst = new(encoding);

            InstEmitNeonMove.VmovRs(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rt, inst.Opc1, inst.Opc2);
        }

        public static void VmovSA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Opb20w1Vnb16w4Rtb12w4Nb7w1 inst = new(encoding);

            InstEmitNeonMove.VmovS(context, inst.Rt, InstEmitCommon.CombineVF(inst.N, inst.Vn), inst.Op != 0);
        }

        public static void VmovST1(CodeGenContext context, uint encoding)
        {
            InstOpb20w1Vnb16w4Rtb12w4Nb7w1 inst = new(encoding);

            InstEmitNeonMove.VmovS(context, inst.Rt, InstEmitCommon.CombineVF(inst.N, inst.Vn), inst.Op != 0);
        }

        public static void VmovSrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Ub23w1Opc1b21w2Vnb16w4Rtb12w4Nb7w1Opc2b5w2 inst = new(encoding);

            InstEmitNeonMove.VmovSr(context, inst.Rt, InstEmitCommon.CombineV(inst.Vn, inst.N), inst.U != 0, inst.Opc1, inst.Opc2);
        }

        public static void VmovSrT1(CodeGenContext context, uint encoding)
        {
            InstUb23w1Opc1b21w2Vnb16w4Rtb12w4Nb7w1Opc2b5w2 inst = new(encoding);

            InstEmitNeonMove.VmovSr(context, inst.Rt, InstEmitCommon.CombineV(inst.Vn, inst.N), inst.U != 0, inst.Opc1, inst.Opc2);
        }

        public static void VmovSsA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Opb20w1Rt2b16w4Rtb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.VmovSs(context, inst.Rt, inst.Rt2, InstEmitCommon.CombineVF(inst.M, inst.Vm), inst.Op != 0);
        }

        public static void VmovSsT1(CodeGenContext context, uint encoding)
        {
            InstOpb20w1Rt2b16w4Rtb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.VmovSs(context, inst.Rt, inst.Rt2, InstEmitCommon.CombineVF(inst.M, inst.Vm), inst.Op != 0);
        }

        public static void VmrsA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Regb16w4Rtb12w4 inst = new(encoding);

            InstEmitNeonSystem.Vmrs(context, inst.Rt, inst.Reg);
        }

        public static void VmrsT1(CodeGenContext context, uint encoding)
        {
            InstRegb16w4Rtb12w4 inst = new(encoding);

            InstEmitNeonSystem.Vmrs(context, inst.Rt, inst.Reg);
        }

        public static void VmsrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Regb16w4Rtb12w4 inst = new(encoding);

            InstEmitNeonSystem.Vmsr(context, inst.Rt, inst.Reg);
        }

        public static void VmsrT1(CodeGenContext context, uint encoding)
        {
            InstRegb16w4Rtb12w4 inst = new(encoding);

            InstEmitNeonSystem.Vmsr(context, inst.Rt, inst.Reg);
        }

        public static void VmullIA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Opb9w1Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmullI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op != 0, inst.U != 0, inst.Size);
        }

        public static void VmullIT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Opb9w1Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmullI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op != 0, inst.U != 0, inst.Size);
        }

        public static void VmullSA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmullS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size);
        }

        public static void VmullST1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmullS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size);
        }

        public static void VmulFA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmulF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VmulFA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VmulF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VmulFT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmulF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VmulFT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VmulF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VmulIA1(CodeGenContext context, uint encoding)
        {
            InstOpb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmulI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op != 0, inst.Size, inst.Q);
        }

        public static void VmulIT1(CodeGenContext context, uint encoding)
        {
            InstOpb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmulI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op != 0, inst.Size, inst.Q);
        }

        public static void VmulSA1(CodeGenContext context, uint encoding)
        {
            InstQb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Fb8w1Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmulS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VmulST1(CodeGenContext context, uint encoding)
        {
            InstQb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Fb8w1Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VmulS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VmvnIA1(CodeGenContext context, uint encoding)
        {
            InstIb24w1Db22w1Imm3b16w3Vdb12w4Qb6w1Imm4b0w4 inst = new(encoding);

            InstEmitNeonMove.VmvnI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), (encoding >> 8) & 0xf, ImmUtils.CombineImmU8(inst.Imm4, inst.Imm3, inst.I), inst.Q);
        }

        public static void VmvnIA2(CodeGenContext context, uint encoding)
        {
            InstIb24w1Db22w1Imm3b16w3Vdb12w4Qb6w1Imm4b0w4 inst = new(encoding);

            InstEmitNeonMove.VmvnI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), (encoding >> 8) & 0xf, ImmUtils.CombineImmU8(inst.Imm4, inst.Imm3, inst.I), inst.Q);
        }

        public static void VmvnIA3(CodeGenContext context, uint encoding)
        {
            InstIb24w1Db22w1Imm3b16w3Vdb12w4Qb6w1Imm4b0w4 inst = new(encoding);

            InstEmitNeonMove.VmvnI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), (encoding >> 8) & 0xf, ImmUtils.CombineImmU8(inst.Imm4, inst.Imm3, inst.I), inst.Q);
        }

        public static void VmvnIT1(CodeGenContext context, uint encoding)
        {
            InstIb28w1Db22w1Imm3b16w3Vdb12w4Qb6w1Imm4b0w4 inst = new(encoding);

            InstEmitNeonMove.VmvnI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), (encoding >> 8) & 0xf, ImmUtils.CombineImmU8(inst.Imm4, inst.Imm3, inst.I), inst.Q);
        }

        public static void VmvnIT2(CodeGenContext context, uint encoding)
        {
            InstIb28w1Db22w1Imm3b16w3Vdb12w4Qb6w1Imm4b0w4 inst = new(encoding);

            InstEmitNeonMove.VmvnI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), (encoding >> 8) & 0xf, ImmUtils.CombineImmU8(inst.Imm4, inst.Imm3, inst.I), inst.Q);
        }

        public static void VmvnIT3(CodeGenContext context, uint encoding)
        {
            InstIb28w1Db22w1Imm3b16w3Vdb12w4Qb6w1Imm4b0w4 inst = new(encoding);

            InstEmitNeonMove.VmvnI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), (encoding >> 8) & 0xf, ImmUtils.CombineImmU8(inst.Imm4, inst.Imm3, inst.I), inst.Q);
        }

        public static void VmvnRA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.VmvnR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VmvnRT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.VmvnR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VnegA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Fb10w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vneg(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VnegA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VnegF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VnegT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Fb10w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vneg(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VnegT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VnegF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VnmlaA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VnmlaF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VnmlaT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VnmlaF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VnmlsA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VnmlsF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VnmlsT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VnmlsF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VnmulA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VnmulF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VnmulT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VnmulF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VornRA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonLogical.VornR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void VornRT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonLogical.VornR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void VorrIA1(CodeGenContext context, uint encoding)
        {
            InstIb24w1Db22w1Imm3b16w3Vdb12w4Qb6w1Imm4b0w4 inst = new(encoding);

            InstEmitNeonLogical.VorrI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), (encoding >> 8) & 0xf, ImmUtils.CombineImmU8(inst.Imm4, inst.Imm3, inst.I), inst.Q);
        }

        public static void VorrIA2(CodeGenContext context, uint encoding)
        {
            InstIb24w1Db22w1Imm3b16w3Vdb12w4Qb6w1Imm4b0w4 inst = new(encoding);

            InstEmitNeonLogical.VorrI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), (encoding >> 8) & 0xf, ImmUtils.CombineImmU8(inst.Imm4, inst.Imm3, inst.I), inst.Q);
        }

        public static void VorrIT1(CodeGenContext context, uint encoding)
        {
            InstIb28w1Db22w1Imm3b16w3Vdb12w4Qb6w1Imm4b0w4 inst = new(encoding);

            InstEmitNeonLogical.VorrI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), (encoding >> 8) & 0xf, ImmUtils.CombineImmU8(inst.Imm4, inst.Imm3, inst.I), inst.Q);
        }

        public static void VorrIT2(CodeGenContext context, uint encoding)
        {
            InstIb28w1Db22w1Imm3b16w3Vdb12w4Qb6w1Imm4b0w4 inst = new(encoding);

            InstEmitNeonLogical.VorrI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), (encoding >> 8) & 0xf, ImmUtils.CombineImmU8(inst.Imm4, inst.Imm3, inst.I), inst.Q);
        }

        public static void VorrRA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonLogical.VorrR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void VorrRT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonLogical.VorrR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void VpadalA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Opb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vpadal(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op != 0, inst.Size, inst.Q);
        }

        public static void VpadalT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Opb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vpadal(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op != 0, inst.Size, inst.Q);
        }

        public static void VpaddlA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Opb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vpaddl(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op != 0, inst.Size, inst.Q);
        }

        public static void VpaddlT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Opb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vpaddl(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op != 0, inst.Size, inst.Q);
        }

        public static void VpaddFA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VpaddF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VpaddFT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VpaddF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VpaddIA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VpaddI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VpaddIT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VpaddI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VpmaxFA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VpmaxF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, 0);
        }

        public static void VpmaxFT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VpmaxF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, 0);
        }

        public static void VpmaxIA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VpmaxI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, 0);
        }

        public static void VpmaxIT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VpmaxI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, 0);
        }

        public static void VpminFA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VpminF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, 0);
        }

        public static void VpminFT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VpminF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, 0);
        }

        public static void VpminIA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VpminI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, 0);
        }

        public static void VpminIT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VpminI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, 0);
        }

        public static void VqabsA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqabs(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VqabsT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqabs(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VqaddA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqadd(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VqaddT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqadd(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VqdmlalA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqdmlal(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VqdmlalA2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.VqdmlalS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VqdmlalT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqdmlal(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VqdmlalT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.VqdmlalS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VqdmlslA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqdmlsl(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VqdmlslA2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.VqdmlslS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VqdmlslT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqdmlsl(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VqdmlslT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.VqdmlslS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VqdmulhA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqdmulh(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VqdmulhA2(CodeGenContext context, uint encoding)
        {
            InstQb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.VqdmulhS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VqdmulhT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqdmulh(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VqdmulhT2(CodeGenContext context, uint encoding)
        {
            InstQb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.VqdmulhS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VqdmullA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqdmull(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VqdmullA2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.VqdmullS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VqdmullT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqdmull(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VqdmullT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.VqdmullS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VqmovnA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Opb6w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqmovn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op, inst.Size);
        }

        public static void VqmovnT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Opb6w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqmovn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op, inst.Size);
        }

        public static void VqnegA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqneg(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VqnegT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqneg(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VqrdmlahA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqrdmlah(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VqrdmlahA2(CodeGenContext context, uint encoding)
        {
            InstQb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.VqrdmlahS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VqrdmlahT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqrdmlah(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VqrdmlahT2(CodeGenContext context, uint encoding)
        {
            InstQb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.VqrdmlahS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VqrdmlshA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqrdmlsh(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VqrdmlshA2(CodeGenContext context, uint encoding)
        {
            InstQb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.VqrdmlshS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VqrdmlshT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqrdmlsh(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VqrdmlshT2(CodeGenContext context, uint encoding)
        {
            InstQb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.VqrdmlshS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VqrdmulhA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqrdmulh(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VqrdmulhA2(CodeGenContext context, uint encoding)
        {
            InstQb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.VqrdmulhS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VqrdmulhT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqrdmulh(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VqrdmulhT2(CodeGenContext context, uint encoding)
        {
            InstQb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.VqrdmulhS(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VqrshlA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqrshl(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VqrshlT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqrshl(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VqrshrnA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Imm6b16w6Vdb12w4Opb8w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqrshrn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Op, inst.Imm6);
        }

        public static void VqrshrnT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Imm6b16w6Vdb12w4Opb8w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqrshrn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Op, inst.Imm6);
        }

        public static void VqshlIA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Imm6b16w6Vdb12w4Opb8w1Lb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.VqshlI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Op, inst.L, inst.Imm6, inst.Q);
        }

        public static void VqshlIT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Imm6b16w6Vdb12w4Opb8w1Lb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.VqshlI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Op, inst.L, inst.Imm6, inst.Q);
        }

        public static void VqshlRA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.VqshlR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VqshlRT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.VqshlR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VqshrnA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Imm6b16w6Vdb12w4Opb8w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqshrn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Op, inst.Imm6);
        }

        public static void VqshrnT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Imm6b16w6Vdb12w4Opb8w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqshrn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Op, inst.Imm6);
        }

        public static void VqsubA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqsub(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VqsubT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonSaturate.Vqsub(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VraddhnA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vraddhn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VraddhnT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vraddhn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VrecpeA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Fb8w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vrecpe(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VrecpeT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Fb8w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vrecpe(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VrecpsA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vrecps(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VrecpsT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vrecps(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void Vrev16A1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonBit.Vrev16(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void Vrev16T1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonBit.Vrev16(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void Vrev32A1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonBit.Vrev32(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void Vrev32T1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonBit.Vrev32(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void Vrev64A1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonBit.Vrev64(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void Vrev64T1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonBit.Vrev64(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VrhaddA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrhadd(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VrhaddT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrhadd(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VrintaAsimdA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrinta(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VrintaAsimdT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrinta(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VrintaVfpA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpRound.Vrinta(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VrintaVfpT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpRound.Vrinta(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VrintmAsimdA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrintm(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VrintmAsimdT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrintm(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VrintmVfpA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpRound.Vrintm(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VrintmVfpT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpRound.Vrintm(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VrintnAsimdA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrintn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VrintnAsimdT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrintn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VrintnVfpA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpRound.Vrintn(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VrintnVfpT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpRound.Vrintn(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VrintpAsimdA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrintp(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VrintpAsimdT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrintp(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VrintpVfpA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpRound.Vrintp(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VrintpVfpT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpRound.Vrintp(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VrintrVfpA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpRound.Vrintr(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VrintrVfpT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpRound.Vrintr(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VrintxAsimdA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrintx(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VrintxAsimdT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrintx(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VrintxVfpA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpRound.Vrintx(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VrintxVfpT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpRound.Vrintx(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VrintzAsimdA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrintz(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VrintzAsimdT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrintz(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VrintzVfpA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpRound.Vrintz(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VrintzVfpT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpRound.Vrintz(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VrshlA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrshl(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VrshlT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrshl(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VrshrA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Imm6b16w6Vdb12w4Lb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrshr(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.L, inst.Imm6, inst.Q);
        }

        public static void VrshrT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Imm6b16w6Vdb12w4Lb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrshr(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.L, inst.Imm6, inst.Q);
        }

        public static void VrshrnA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Imm6b16w6Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrshrn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Imm6);
        }

        public static void VrshrnT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Imm6b16w6Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrshrn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Imm6);
        }

        public static void VrsqrteA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Fb8w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vrsqrte(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VrsqrteT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Fb8w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vrsqrte(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.F != 0, inst.Size, inst.Q);
        }

        public static void VrsqrtsA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vrsqrts(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VrsqrtsT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vrsqrts(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VrsraA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Imm6b16w6Vdb12w4Lb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrsra(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.L, inst.Imm6, inst.Q);
        }

        public static void VrsraT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Imm6b16w6Vdb12w4Lb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrsra(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.L, inst.Imm6, inst.Q);
        }

        public static void VrsubhnA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrsubhn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VrsubhnT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonRound.Vrsubhn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VsdotA1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VsdotT1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VsdotSA1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VsdotST1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VselA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Ccb20w2Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpMove.Vsel(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Cc, inst.Size);
        }

        public static void VselT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Ccb20w2Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpMove.Vsel(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Cc, inst.Size);
        }

        public static void VshllA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Imm6b16w6Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonShift.Vshll(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Imm6, inst.U != 0);
        }

        public static void VshllA2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonShift.Vshll2(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VshllT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Imm6b16w6Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonShift.Vshll(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Imm6, inst.U != 0);
        }

        public static void VshllT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonShift.Vshll2(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VshlIA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Imm6b16w6Vdb12w4Lb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonShift.VshlI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.L, inst.Imm6, inst.Q);
        }

        public static void VshlIT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Imm6b16w6Vdb12w4Lb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonShift.VshlI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.L, inst.Imm6, inst.Q);
        }

        public static void VshlRA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonShift.VshlR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VshlRT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonShift.VshlR(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size, inst.Q);
        }

        public static void VshrA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Imm6b16w6Vdb12w4Lb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonShift.Vshr(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.L, inst.Imm6, inst.Q);
        }

        public static void VshrT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Imm6b16w6Vdb12w4Lb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonShift.Vshr(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.L, inst.Imm6, inst.Q);
        }

        public static void VshrnA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Imm6b16w6Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonShift.Vshrn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Imm6);
        }

        public static void VshrnT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Imm6b16w6Vdb12w4Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonShift.Vshrn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Imm6);
        }

        public static void VsliA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Imm6b16w6Vdb12w4Lb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonShift.Vsli(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.L, inst.Imm6, inst.Q);
        }

        public static void VsliT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Imm6b16w6Vdb12w4Lb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonShift.Vsli(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.L, inst.Imm6, inst.Q);
        }

        public static void VsmmlaA1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VsmmlaT1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VsqrtA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VsqrtF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VsqrtT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Sizeb8w2Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VsqrtF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VsraA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Imm6b16w6Vdb12w4Lb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonShift.Vsra(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.L, inst.Imm6, inst.Q);
        }

        public static void VsraT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Imm6b16w6Vdb12w4Lb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonShift.Vsra(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.L, inst.Imm6, inst.Q);
        }

        public static void VsriA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Imm6b16w6Vdb12w4Lb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonShift.Vsri(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.L, inst.Imm6, inst.Q);
        }

        public static void VsriT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Imm6b16w6Vdb12w4Lb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonShift.Vsri(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.L, inst.Imm6, inst.Q);
        }

        public static void Vst11A1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst11(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 0);
        }

        public static void Vst11A2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst11(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 1);
        }

        public static void Vst11A3(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst11(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 2);
        }

        public static void Vst11T1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst11(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 0);
        }

        public static void Vst11T2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst11(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 1);
        }

        public static void Vst11T3(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst11(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 2);
        }

        public static void Vst1MA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst1M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, 1, inst.Align, inst.Size);
        }

        public static void Vst1MA2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst1M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, 2, inst.Align, inst.Size);
        }

        public static void Vst1MA3(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst1M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, 3, inst.Align, inst.Size);
        }

        public static void Vst1MA4(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst1M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, 4, inst.Align, inst.Size);
        }

        public static void Vst1MT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst1M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, 1, inst.Align, inst.Size);
        }

        public static void Vst1MT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst1M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, 2, inst.Align, inst.Size);
        }

        public static void Vst1MT3(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst1M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, 3, inst.Align, inst.Size);
        }

        public static void Vst1MT4(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst1M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, 4, inst.Align, inst.Size);
        }

        public static void Vst21A1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst21(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 0);
        }

        public static void Vst21A2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst21(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 1);
        }

        public static void Vst21A3(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst21(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 2);
        }

        public static void Vst21T1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst21(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 0);
        }

        public static void Vst21T2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst21(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 1);
        }

        public static void Vst21T3(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst21(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 2);
        }

        public static void Vst2MA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst2M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, (encoding >> 8) & 0xf, inst.Align, inst.Size);
        }

        public static void Vst2MA2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst2M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.Align, inst.Size);
        }

        public static void Vst2MT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst2M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, (encoding >> 8) & 0xf, inst.Align, inst.Size);
        }

        public static void Vst2MT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst2M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.Align, inst.Size);
        }

        public static void Vst31A1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst31(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 0);
        }

        public static void Vst31A2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst31(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 1);
        }

        public static void Vst31A3(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst31(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 2);
        }

        public static void Vst31T1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst31(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 0);
        }

        public static void Vst31T2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst31(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 1);
        }

        public static void Vst31T3(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst31(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 2);
        }

        public static void Vst3MA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst3M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, (encoding >> 8) & 0xf, inst.Align, inst.Size);
        }

        public static void Vst3MT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst3M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, (encoding >> 8) & 0xf, inst.Align, inst.Size);
        }

        public static void Vst41A1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst41(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 0);
        }

        public static void Vst41A2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst41(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 1);
        }

        public static void Vst41A3(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst41(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 2);
        }

        public static void Vst41T1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst41(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 0);
        }

        public static void Vst41T2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst41(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 1);
        }

        public static void Vst41T3(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4IndexAlignb4w4Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst41(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, inst.IndexAlign, 2);
        }

        public static void Vst4MA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst4M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, (encoding >> 8) & 0xf, inst.Align, inst.Size);
        }

        public static void Vst4MT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Rnb16w4Vdb12w4Sizeb6w2Alignb4w2Rmb0w4 inst = new(encoding);

            InstEmitNeonMemory.Vst4M(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Rm, (encoding >> 8) & 0xf, inst.Align, inst.Size);
        }

        public static void VstmA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Db22w1Wb21w1Rnb16w4Vdb12w4Imm871b1w7 inst = new(encoding);

            InstEmitNeonMemory.Vstm(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Imm871, inst.U != 0, inst.W != 0, singleRegs: false);
        }

        public static void VstmA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Pb24w1Ub23w1Db22w1Wb21w1Rnb16w4Vdb12w4Imm8b0w8 inst = new(encoding);

            InstEmitNeonMemory.Vstm(context, InstEmitCommon.CombineVF(inst.D, inst.Vd), inst.Rn, inst.Imm8, inst.U != 0, inst.W != 0, singleRegs: true);
        }

        public static void VstmT1(CodeGenContext context, uint encoding)
        {
            InstPb24w1Ub23w1Db22w1Wb21w1Rnb16w4Vdb12w4Imm871b1w7 inst = new(encoding);

            InstEmitNeonMemory.Vstm(context, InstEmitCommon.CombineV(inst.Vd, inst.D), inst.Rn, inst.Imm871, inst.U != 0, inst.W != 0, singleRegs: false);
        }

        public static void VstmT2(CodeGenContext context, uint encoding)
        {
            InstPb24w1Ub23w1Db22w1Wb21w1Rnb16w4Vdb12w4Imm8b0w8 inst = new(encoding);

            InstEmitNeonMemory.Vstm(context, InstEmitCommon.CombineVF(inst.D, inst.Vd), inst.Rn, inst.Imm8, inst.U != 0, inst.W != 0, singleRegs: true);
        }

        public static void VstrA1(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Ub23w1Db22w1Rnb16w4Vdb12w4Sizeb8w2Imm8b0w8 inst = new(encoding);

            InstEmitNeonMemory.Vstr(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), inst.Rn, inst.Imm8, inst.U != 0, inst.Size);
        }

        public static void VstrT1(CodeGenContext context, uint encoding)
        {
            InstUb23w1Db22w1Rnb16w4Vdb12w4Sizeb8w2Imm8b0w8 inst = new(encoding);

            InstEmitNeonMemory.Vstr(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), inst.Rn, inst.Imm8, inst.U != 0, inst.Size);
        }

        public static void VsubhnA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vsubhn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VsubhnT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vsubhn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size);
        }

        public static void VsublA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vsubl(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size);
        }

        public static void VsublT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vsubl(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size);
        }

        public static void VsubwA1(CodeGenContext context, uint encoding)
        {
            InstUb24w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vsubw(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size);
        }

        public static void VsubwT1(CodeGenContext context, uint encoding)
        {
            InstUb28w1Db22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.Vsubw(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.U != 0, inst.Size);
        }

        public static void VsubFA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VsubF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VsubFA2(CodeGenContext context, uint encoding)
        {
            InstCondb28w4Db22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VsubF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VsubFT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Szb20w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VsubF(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Sz, inst.Q);
        }

        public static void VsubFT2(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Sizeb8w2Nb7w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitVfpArithmetic.VsubF(context, InstEmitCommon.CombineV(inst.Vd, inst.D, inst.Size), InstEmitCommon.CombineV(inst.Vn, inst.N, inst.Size), InstEmitCommon.CombineV(inst.Vm, inst.M, inst.Size), inst.Size);
        }

        public static void VsubIA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VsubI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VsubIT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonArithmetic.VsubI(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VsudotSA1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VsudotST1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VswpA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.Vswp(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void VswpT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.Vswp(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Q);
        }

        public static void VtblA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Lenb8w2Nb7w1Opb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.Vtbl(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op != 0, inst.Len);
        }

        public static void VtblT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Vnb16w4Vdb12w4Lenb8w2Nb7w1Opb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.Vtbl(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Op != 0, inst.Len);
        }

        public static void VtrnA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.Vtrn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VtrnT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.Vtrn(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VtstA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.Vtst(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VtstT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb20w2Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonCompare.Vtst(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vn, inst.N), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VudotA1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VudotT1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VudotSA1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VudotST1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VummlaA1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VummlaT1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VusdotA1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VusdotT1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VusdotSA1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VusdotST1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Qb6w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VusmmlaA1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VusmmlaT1(CodeGenContext context, uint encoding)
        {
            _ = new InstDb22w1Vnb16w4Vdb12w4Nb7w1Mb5w1Vmb0w4(encoding);

            throw new NotImplementedException();
        }

        public static void VuzpA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.Vuzp(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VuzpT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.Vuzp(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VzipA1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.Vzip(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void VzipT1(CodeGenContext context, uint encoding)
        {
            InstDb22w1Sizeb18w2Vdb12w4Qb6w1Mb5w1Vmb0w4 inst = new(encoding);

            InstEmitNeonMove.Vzip(context, InstEmitCommon.CombineV(inst.Vd, inst.D), InstEmitCommon.CombineV(inst.Vm, inst.M), inst.Size, inst.Q);
        }

        public static void WfeA1(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Wfe();
        }

        public static void WfeT1(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Wfe();
        }

        public static void WfeT2(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Wfe();
        }

        public static void WfiA1(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Wfi();
        }

        public static void WfiT1(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Wfi();
        }

        public static void WfiT2(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Wfi();
        }

        public static void YieldA1(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Yield();
        }

        public static void YieldT1(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Yield();
        }

        public static void YieldT2(CodeGenContext context, uint encoding)
        {
            context.Arm64Assembler.Yield();
        }
    }
}