Esempio n. 1
0
 public void Adds1()
 {
     // ADDS WZR, W9, #1
     InsnTester.Test(0x3100053F, (cpu, pc) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->X9 = 0;
     });
     // ADDS WZR, W9, #1
     InsnTester.Test(0x3100053F, (cpu, pc) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->X9 = 0xDEAD;
     });
     // ADDS WZR, W9, #1
     InsnTester.Test(0x3100053F, (cpu, pc) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->X9 = 0xDEADBEEFU;
     });
 }
Esempio n. 2
0
 public void Movk()
 {
     // MOVK X12, #0x3E00
     InsnTester.Test(0xF287C00C, (cpu, _) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->X12 = 0x100000001;
     });
 }
Esempio n. 3
0
 public void Fmov()
 {
     // FMOV W9, S0
     InsnTester.Test(0x1E260009, (cpu, _) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->X9 = 0xDEADBEEFCAFEBABE;
         cpu.State->V0 = new Vector128 <float>().WithElement(0, 123f).WithElement(1, 234f).WithElement(2, 345f).WithElement(3, 456f);
     });
 }
Esempio n. 4
0
 public void Sub()
 {
     // SUB W10, W22, #0x10,LSL#12
     InsnTester.Disassembly("sub W10, W22, #0x10, LSL #0xC", 0x514042CA);
     InsnTester.Test(0x514042CA, (cpu, _) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->X22 = 0xA0010045;
     });
 }
Esempio n. 5
0
 public void SubExtendedRegister()
 {
     // SUB W0, W8, W9, UXTB
     InsnTester.Test(0x4B290100, (cpu, _) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->X8 = 0x5F;
         cpu.State->X9 = 0x646E61374B4E5A;
     });
 }
Esempio n. 6
0
 public void Smaddl()
 {
     // SMADDL X11, W0, W11, XZR
     InsnTester.Test(0x9B2B7C0B, (cpu, pc) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->X0  = 0x7B2;
         cpu.State->X11 = 0xAE147AE1;
     });
 }
Esempio n. 7
0
 public void Sxtb()
 {
     // SXTB W17, W8
     InsnTester.Disassembly("sbfm W17, W8, #0, #7", 0x13001D11);
     InsnTester.Test(0x13001D11, (cpu, _) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->X8 = 0xFFFFFFFFFFFFFFFF;
     });
 }
Esempio n. 8
0
 public void SubsPosPos()
 {
     // SUBS XZR, X8, X20
     InsnTester.Test(0xEB14011F, (cpu, pc) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->X8  = 0x8000;
         cpu.State->X20 = 0x4000;
     });
     InsnTester.Test(0xEB14011F, (cpu, pc) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->X8  = 0x4000;
         cpu.State->X20 = 0x8000;
     });
     InsnTester.Test(0xEB14011F, (cpu, pc) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->X8  = 0;
         cpu.State->X20 = 0;
     });
     InsnTester.Test(0xEB14011F, (cpu, pc) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->X8  = 0x8000;
         cpu.State->X20 = 0;
     });
     InsnTester.Test(0xEB14011F, (cpu, pc) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->X8  = 0;
         cpu.State->X20 = 0x8000;
     });
     InsnTester.Test(0xEB14011F, (cpu, pc) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->X8  = 0;
         cpu.State->X20 = 0x80UL << 12;
     });
 }
Esempio n. 9
0
 public void Add()
 {
     // ADD X9, X11, W10,SXTW
     InsnTester.Disassembly("add X9, X11, W10, SXTW #0", 0x8B2AC169);
     InsnTester.Test(0x8B2AC169, (cpu, _) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->X11 = 0x1001FFF9F0;
         cpu.State->X10 = 0xFFFFFFD8;
     });
 }
Esempio n. 10
0
 public void Smulh()
 {
     // SMULH X8, X8, X9
     InsnTester.Disassembly("smulh X8, X8, X9", 0x9B497D08);
     InsnTester.Test(0x9B497D08, (cpu, pc) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->X8 = 0x124F800;
         cpu.State->X9 = 0x29F16B11C6D1E109;
     });
 }
Esempio n. 11
0
 public void Fadd()
 {
     // FADD V3.2S, V5.2S, V3.2S
     InsnTester.Disassembly("fadd V3.2S, V5.2S, V3.2S", 0x0E23D4A3);
     InsnTester.Test(0x0E23D4A3, (cpu, _) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->V5 = new Vector128 <float>().WithElement(0, 123f).WithElement(1, 234f);
         cpu.State->V3 = new Vector128 <float>().WithElement(0, 345f).WithElement(1, 456f);
     });
 }
Esempio n. 12
0
 public void SubsPosNeg()
 {
     // SUBS WZR, W2, W8
     InsnTester.Disassembly("subs W31, W2, W8, LSL #0", 0x6B08005F);
     InsnTester.Test(0x6B08005F, (cpu, _) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->X2 = 0x40284109;
         cpu.State->X8 = 0xC018481A;
     });
 }
Esempio n. 13
0
 public void Udiv()
 {
     // UDIV X10, X22, X9
     InsnTester.Disassembly("udiv X10, X22, X9", 0x9AC90ACA);
     InsnTester.Test(0x9AC90ACA, (cpu, pc) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->X22 = 0xFFFF_FFFF_FFFF_FFFFUL;
         cpu.State->X9  = 0x18UL;
     });
 }
Esempio n. 14
0
        public void SubsImm()
        {
            // SUBS XZR, X19, #1, LSL#12
            InsnTester.Test(0xF140067F, (cpu, pc) => {
                if (cpu == null)
                {
                    return;
                }
                cpu.State->X19 = 0x10;
            });

            // SUBS XZR, X8, #0x80,LSL#12
            InsnTester.Test(0xF142011F, (cpu, pc) => {
                if (cpu == null)
                {
                    return;
                }
                cpu.State->X8 = 0;
            });
        }
Esempio n. 15
0
 public void Csel()
 {
     // CSEL W0, WZR, W9, EQ
     InsnTester.Test(0x1A8903E0, (cpu, _) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->NZCV_Z = 0;
         cpu.State->X9     = 0xDEADBEEFU;
     });
     // CSEL W0, WZR, W9, EQ
     InsnTester.Test(0x1A8903E0, (cpu, _) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->NZCV_Z = 1;
         cpu.State->X9     = 0xDEADBEEFU;
     });
 }
Esempio n. 16
0
        public void AddImmediate()
        {
            // ADD W9, W8, #0x900,LSL#12
            InsnTester.Disassembly("add W9, W8, #0x900, LSL #0xC", 0x11640109);
            InsnTester.Test(0x11640109, (cpu, _) => {
                if (cpu == null)
                {
                    return;
                }
                cpu.State->X8 = 0x41200000;
            });

            // ADD X29, SP, #0x10
            InsnTester.Disassembly("add X29, X31, #0x10, LSL #0x0", 0x910043FD);
            InsnTester.Test(0x910043FD, (cpu, _) => {
                if (cpu == null)
                {
                    return;
                }
                cpu.State->SP = 0xDEADBE00;
            });
        }
Esempio n. 17
0
        public void Adds()
        {
            // ADDS X11, X8, X23
            InsnTester.Disassembly("adds X11, X8, X23, LSL #0", 0xAB17010B);
            InsnTester.Test(0xAB17010B, (cpu, pc) => {
                if (cpu == null)
                {
                    return;
                }
                cpu.State->X8  = 0x8;
                cpu.State->X23 = 0x1001FFF908;
            });

            InsnTester.Disassembly("adds W31, W11, #0x380, LSL #0xC", 0x314E017F);
            InsnTester.Test(0xAB17010B, (cpu, pc) => {
                if (cpu == null)
                {
                    return;
                }
                cpu.State->X11 = ulong.MaxValue;
            });
        }
Esempio n. 18
0
 public void SubsNegPos()
 {
     // SUBS XZR, X8, X20
     InsnTester.Test(0xEB14011F, (cpu, pc) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->X8  = 0xFFFFFFFFFFFFEBE0;
         cpu.State->X20 = 0x4000;
     });
     // SUBS WZR, W26, W13
     InsnTester.Disassembly("subs W31, W26, W13, LSL #0", 0x6B0D035F);
     InsnTester.Test(0x6B0D035F, (cpu, _) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->X26 = 0xFFFFFFFF;
         cpu.State->X13 = 0x7FFFFFFF;
     });
 }
Esempio n. 19
0
 public void SubsNegNeg()
 {
     // SUBS WZR, W2, W8
     InsnTester.Disassembly("subs W31, W2, W8, LSL #0", 0x6B08005F);
     InsnTester.Test(0x6B08005F, (cpu, _) => {
         if (cpu == null)
         {
             return;
         }
         cpu.State->X2 = 0x80000000;
         cpu.State->X8 = 0xFFFFFFFFFFFFFFFF;
     });
     // SUBS WZR, W2, W8
     InsnTester.Disassembly("subs W31, W2, W8, LSL #0", 0x6B08005F);
     InsnTester.Test(0x6B08005F, (cpu, _) => {
         if (cpu == null)
         {
             return;
         }
         cpu.NZCV      = 0xFU << 28;
         cpu.State->X2 = 0x80000000;
         cpu.State->X8 = 0xFFFFFFFFFFFFFFFF;
     });
 }
Esempio n. 20
0
 public void Movi()
 {
     // MOVI V0.4S, #1
     InsnTester.Disassembly("movi V0.4S, #1, LSL #0x0", 0x4F000420);
     InsnTester.Test(0x4F000420);
 }
Esempio n. 21
0
 public void Adrp() => InsnTester.Test(0xB000C4A9);