From b1d93d2beb7f97008f8c09678ed23af948d2f0e8 Mon Sep 17 00:00:00 2001 From: Eric Hennenfent Date: Mon, 11 May 2020 08:42:47 -0700 Subject: [PATCH] Remove Keystone from existing tests (#1684) * Cache generated ASM * Never install Keystone on the CI * Fix dict retreival one-liner arguments aren't lazily evaluted, so ks_assemble always got called * Apply suggestions from code review Docstrings and type hints Co-authored-by: Brad Larsen * Update tests/native/test_armv7cpu.py Missed one Co-authored-by: Brad Larsen Co-authored-by: Brad Larsen --- .github/workflows/ci.yml | 6 +- tests/native/aarch64cpu_asm_cache.py | 1767 ++++++++++++++++++++++++++ tests/native/test_aarch64cpu.py | 32 +- tests/native/test_armv7cpu.py | 264 +++- tests/native/test_armv7unicorn.py | 168 ++- 5 files changed, 2213 insertions(+), 24 deletions(-) create mode 100644 tests/native/aarch64cpu_asm_cache.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 92ddd8358..3c5b2d3c9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,11 +52,7 @@ jobs: # Install solc unconditionally because it only takes a second or two sudo wget -O /usr/bin/solc https://github.com/ethereum/solidity/releases/download/v0.4.24/solc-static-linux sudo chmod +x /usr/bin/solc - EXTRAS="dev-noks" - if [[ "$TEST_TYPE" == "native" ]]; then - EXTRAS="dev" - fi - pip install -e .[$EXTRAS] + pip install -e ".[dev-noks]" - name: Run Tests env: TEST_TYPE: ${{ matrix.type }} diff --git a/tests/native/aarch64cpu_asm_cache.py b/tests/native/aarch64cpu_asm_cache.py new file mode 100644 index 000000000..4cfceb9a1 --- /dev/null +++ b/tests/native/aarch64cpu_asm_cache.py @@ -0,0 +1,1767 @@ +# This is a cache of assembled instructions. +# This exists so that Manticore's tests can run without requiring that the +# Keystone dependency be installed. +# If additional test cases are added that require new instructions, this cache +# will need to be updated. +assembly_cache = { + "add w0, w1, w2, lsl #0": b"2000020b", + "add x0, x1, x2, lsl #0": b"2000028b", + "add w0, w1, w2, lsl #4": b"2010020b", + "add x0, x1, x2, lsl #4": b"2010028b", + "add w0, w1, w2, sxtb #0": b"2080220b", + "add x0, x1, w2, sxtb #0": b"2080228b", + "add w0, w1, w2, sxtb": b"2080220b", + "add w0, w1, w2, sxtb #4": b"2090220b", + "add x0, x1, w2, sxtb #4": b"2090228b", + "add x0, x1, w2, sxtb": b"2080228b", + "add w0, w1, w2, sxth #0": b"20a0220b", + "add x0, x1, w2, sxth #0": b"20a0228b", + "add w0, w1, w2, sxth": b"20a0220b", + "add w0, w1, w2, sxth #4": b"20b0220b", + "add x0, x1, w2, sxth #4": b"20b0228b", + "add x0, x1, w2, sxth": b"20a0228b", + "add w0, w1, w2, sxtw #0": b"20c0220b", + "add x0, x1, w2, sxtw #0": b"20c0228b", + "add w0, w1, w2, sxtw": b"20c0220b", + "add w0, w1, w2, sxtw #4": b"20d0220b", + "add x0, x1, w2, sxtw #4": b"20d0228b", + "add x0, x1, w2, sxtw": b"20c0228b", + "add w0, w1, w2, sxtx #0": b"20e0220b", + "add x0, x1, x2, sxtx #0": b"20e0228b", + "add w0, w1, w2, sxtx": b"20e0220b", + "add w0, w1, w2, sxtx #4": b"20f0220b", + "add x0, x1, x2, sxtx #4": b"20f0228b", + "add x0, x1, x2, sxtx": b"20e0228b", + "add w0, w1, w2, uxtb #0": b"2000220b", + "add x0, x1, w2, uxtb #0": b"2000228b", + "add w0, w1, w2, uxtb": b"2000220b", + "add w0, w1, w2, uxtb #4": b"2010220b", + "add x0, x1, w2, uxtb #4": b"2010228b", + "add x0, x1, w2, uxtb": b"2000228b", + "add w0, w1, w2, uxth #0": b"2020220b", + "add x0, x1, w2, uxth #0": b"2020228b", + "add w0, w1, w2, uxth": b"2020220b", + "add w0, w1, w2, uxth #4": b"2030220b", + "add x0, x1, w2, uxth #4": b"2030228b", + "add x0, x1, w2, uxth": b"2020228b", + "add w0, w1, w2, uxtw #0": b"2040220b", + "add x0, x1, w2, uxtw #0": b"2040228b", + "add w0, w1, w2, uxtw": b"2040220b", + "add w0, w1, w2, uxtw #4": b"2050220b", + "add x0, x1, w2, uxtw #4": b"2050228b", + "add x0, x1, w2, uxtw": b"2040228b", + "add w0, w1, w2, uxtx #0": b"2060220b", + "add x0, x1, x2, uxtx #0": b"2060228b", + "add w0, w1, w2, uxtx": b"2060220b", + "add w0, w1, w2, uxtx #4": b"2070220b", + "add x0, x1, x2, uxtx #4": b"2070228b", + "add x0, x1, x2, uxtx": b"2060228b", + "add w0, w1, #1": b"20040011", + "add x0, x1, #1": b"20040091", + "add w0, w1, #1, lsl #0": b"20040011", + "add x0, x1, #1, lsl #0": b"20040091", + "add w0, w1, #1, lsl #12": b"20044011", + "add x0, x1, #1, lsl #12": b"20044091", + "add w0, w1, #4095": b"20fc3f11", + "add x0, x1, #4095": b"20fc3f91", + "add w0, w1, #0": b"20000011", + "add x0, x1, #0": b"20000091", + "mrs x30, cpacr_el1": b"5e1038d5", + "orr x30, x30, #0x300000": b"de076cb2", + "msr cpacr_el1, x30": b"5e1018d5", + "add d0, d1, d2": b"2084e25e", + "add w0, w1, w2": b"2000020b", + "add x0, x1, x2": b"2000028b", + "add w0, w1, w2, asr #1": b"2004820b", + "add x0, x1, x2, asr #1": b"2004828b", + "add w0, w1, w2, asr #31": b"207c820b", + "add x0, x1, x2, asr #63": b"20fc828b", + "add w0, w1, w2, asr #0": b"2000820b", + "add x0, x1, x2, asr #0": b"2000828b", + "add w0, w1, w2, lsl #1": b"2004020b", + "add x0, x1, x2, lsl #1": b"2004028b", + "add w0, w1, w2, lsl #31": b"207c020b", + "add x0, x1, x2, lsl #63": b"20fc028b", + "add w0, w1, w2, lsr #1": b"2004420b", + "add x0, x1, x2, lsr #1": b"2004428b", + "add w0, w1, w2, lsr #31": b"207c420b", + "add x0, x1, x2, lsr #63": b"20fc428b", + "add w0, w1, w2, lsr #0": b"2000420b", + "add x0, x1, x2, lsr #0": b"2000428b", + "add v0.16b, v1.16b, v2.16b": b"2084224e", + "add v0.2d, v1.2d, v2.2d": b"2084e24e", + "add v0.2s, v1.2s, v2.2s": b"2084a20e", + "add v0.4h, v1.4h, v2.4h": b"2084620e", + "add v0.4s, v1.4s, v2.4s": b"2084a24e", + "add v0.8b, v1.8b, v2.8b": b"2084220e", + "add v0.8h, v1.8h, v2.8h": b"2084624e", + "addp d0, v1.2d": b"20b8f15e", + "addp v0.16b, v1.16b, v2.16b": b"20bc224e", + "addp v0.2d, v1.2d, v2.2d": b"20bce24e", + "addp v0.2s, v1.2s, v2.2s": b"20bca20e", + "addp v0.4h, v1.4h, v2.4h": b"20bc620e", + "addp v0.4s, v1.4s, v2.4s": b"20bca24e", + "addp v0.8b, v1.8b, v2.8b": b"20bc220e", + "addp v0.8h, v1.8h, v2.8h": b"20bc624e", + "adds w0, w1, w2, lsl #0": b"2000022b", + "adds x0, x1, x2, lsl #0": b"200002ab", + "adds w0, w1, w2, lsl #4": b"2010022b", + "adds x0, x1, x2, lsl #4": b"201002ab", + "adds w0, w1, w2, sxtb #0": b"2080222b", + "adds x0, x1, w2, sxtb #0": b"208022ab", + "adds w0, w1, w2, sxtb": b"2080222b", + "adds w0, w1, w2, sxtb #4": b"2090222b", + "adds x0, x1, w2, sxtb #4": b"209022ab", + "adds x0, x1, w2, sxtb": b"208022ab", + "adds w0, w1, w2, sxth #0": b"20a0222b", + "adds x0, x1, w2, sxth #0": b"20a022ab", + "adds w0, w1, w2, sxth": b"20a0222b", + "adds w0, w1, w2, sxth #4": b"20b0222b", + "adds x0, x1, w2, sxth #4": b"20b022ab", + "adds x0, x1, w2, sxth": b"20a022ab", + "adds w0, w1, w2, sxtw #0": b"20c0222b", + "adds x0, x1, w2, sxtw #0": b"20c022ab", + "adds w0, w1, w2, sxtw": b"20c0222b", + "adds w0, w1, w2, sxtw #4": b"20d0222b", + "adds x0, x1, w2, sxtw #4": b"20d022ab", + "adds x0, x1, w2, sxtw": b"20c022ab", + "adds w0, w1, w2, sxtx #0": b"20e0222b", + "adds x0, x1, x2, sxtx #0": b"20e022ab", + "adds w0, w1, w2, sxtx": b"20e0222b", + "adds w0, w1, w2, sxtx #4": b"20f0222b", + "adds x0, x1, x2, sxtx #4": b"20f022ab", + "adds x0, x1, x2, sxtx": b"20e022ab", + "adds w0, w1, w2, uxtb #0": b"2000222b", + "adds x0, x1, w2, uxtb #0": b"200022ab", + "adds w0, w1, w2, uxtb": b"2000222b", + "adds w0, w1, w2, uxtb #4": b"2010222b", + "adds x0, x1, w2, uxtb #4": b"201022ab", + "adds x0, x1, w2, uxtb": b"200022ab", + "adds w0, w1, w2, uxth #0": b"2020222b", + "adds x0, x1, w2, uxth #0": b"202022ab", + "adds w0, w1, w2, uxth": b"2020222b", + "adds w0, w1, w2, uxth #4": b"2030222b", + "adds x0, x1, w2, uxth #4": b"203022ab", + "adds x0, x1, w2, uxth": b"202022ab", + "adds w0, w1, w2, uxtw #0": b"2040222b", + "adds x0, x1, w2, uxtw #0": b"204022ab", + "adds w0, w1, w2, uxtw": b"2040222b", + "adds w0, w1, w2, uxtw #4": b"2050222b", + "adds x0, x1, w2, uxtw #4": b"205022ab", + "adds x0, x1, w2, uxtw": b"204022ab", + "adds w0, w1, w2, uxtx #0": b"2060222b", + "adds x0, x1, x2, uxtx #0": b"206022ab", + "adds w0, w1, w2, uxtx": b"2060222b", + "adds w0, w1, w2, uxtx #4": b"2070222b", + "adds x0, x1, x2, uxtx #4": b"207022ab", + "adds x0, x1, x2, uxtx": b"206022ab", + "adds w0, w1, #1": b"20040031", + "adds x0, x1, #1": b"200400b1", + "adds w0, w1, #1, lsl #0": b"20040031", + "adds x0, x1, #1, lsl #0": b"200400b1", + "adds w0, w1, #1, lsl #12": b"20044031", + "adds x0, x1, #1, lsl #12": b"200440b1", + "adds w0, w1, #4095": b"20fc3f31", + "adds x0, x1, #4095": b"20fc3fb1", + "adds w0, w1, #0": b"20000031", + "adds x0, x1, #0": b"200000b1", + "adds w0, w1, w2": b"2000022b", + "adds x0, x1, x2": b"200002ab", + "adds w0, w1, w2, asr #1": b"2004822b", + "adds x0, x1, x2, asr #1": b"200482ab", + "adds w0, w1, w2, asr #31": b"207c822b", + "adds x0, x1, x2, asr #63": b"20fc82ab", + "adds w0, w1, w2, asr #0": b"2000822b", + "adds x0, x1, x2, asr #0": b"200082ab", + "adds w0, w1, w2, lsl #1": b"2004022b", + "adds x0, x1, x2, lsl #1": b"200402ab", + "adds w0, w1, w2, lsl #31": b"207c022b", + "adds x0, x1, x2, lsl #63": b"20fc02ab", + "adds w0, w1, w2, lsr #1": b"2004422b", + "adds x0, x1, x2, lsr #1": b"200442ab", + "adds w0, w1, w2, lsr #31": b"207c422b", + "adds x0, x1, x2, lsr #63": b"20fc42ab", + "adds w0, w1, w2, lsr #0": b"2000422b", + "adds x0, x1, x2, lsr #0": b"200042ab", + "adr x0, .0": b"00000010", + "adr x0, .-8": b"c0ffff10", + "adr x0, .+8": b"40000010", + "adrp x0, .0": b"00000090", + "adrp x0, .-0x1000": b"e0fffff0", + "adrp x0, .+0x1000": b"000000b0", + "and w0, w1, #0xffff0000": b"203c1012", + "and x0, x1, #0x0000ffff0000ffff": b"203c0092", + "and w0, w1, #0xffff": b"203c0012", + "and w0, w1, #1": b"20000012", + "and x0, x1, #1": b"20004092", + "and x0, x1, #0xffff0000ffff0000": b"203c1092", + "and w0, w1, w2": b"2000020a", + "and x0, x1, x2": b"2000028a", + "and w0, w1, w2, asr #4": b"2010820a", + "and x0, x1, x2, asr #4": b"2010828a", + "and w0, w1, w2, asr #31": b"207c820a", + "and x0, x1, x2, asr #63": b"20fc828a", + "and w0, w1, w2, asr #0": b"2000820a", + "and x0, x1, x2, asr #0": b"2000828a", + "and w0, w1, w2, lsl #4": b"2010020a", + "and x0, x1, x2, lsl #4": b"2010028a", + "and w0, w1, w2, lsl #31": b"207c020a", + "and x0, x1, x2, lsl #63": b"20fc028a", + "and w0, w1, w2, lsl #0": b"2000020a", + "and x0, x1, x2, lsl #0": b"2000028a", + "and w0, w1, w2, lsr #4": b"2010420a", + "and x0, x1, x2, lsr #4": b"2010428a", + "and w0, w1, w2, lsr #31": b"207c420a", + "and x0, x1, x2, lsr #63": b"20fc428a", + "and w0, w1, w2, lsr #0": b"2000420a", + "and x0, x1, x2, lsr #0": b"2000428a", + "and w0, w1, w2, ror #4": b"2010c20a", + "and x0, x1, x2, ror #4": b"2010c28a", + "and w0, w1, w2, ror #31": b"207cc20a", + "and x0, x1, x2, ror #63": b"20fcc28a", + "and w0, w1, w2, ror #0": b"2000c20a", + "and x0, x1, x2, ror #0": b"2000c28a", + "and v0.16b, v1.16b, v2.16b": b"201c224e", + "and v0.8b, v1.8b, v2.8b": b"201c220e", + "ands w0, w1, #0xffff0000": b"203c1072", + "ands x0, x1, #0x0000ffff0000ffff": b"203c00f2", + "ands w0, w1, #0xffff": b"203c0072", + "ands w0, w1, #1": b"20000072", + "ands x0, x1, #1": b"200040f2", + "ands x0, x1, #0xffff0000ffff0000": b"203c10f2", + "ands w0, w1, w2": b"2000026a", + "ands x0, x1, x2": b"200002ea", + "ands w0, w1, w2, asr #4": b"2010826a", + "ands x0, x1, x2, asr #4": b"201082ea", + "ands w0, w1, w2, asr #31": b"207c826a", + "ands x0, x1, x2, asr #63": b"20fc82ea", + "ands w0, w1, w2, asr #0": b"2000826a", + "ands x0, x1, x2, asr #0": b"200082ea", + "ands w0, w1, w2, lsl #4": b"2010026a", + "ands x0, x1, x2, lsl #4": b"201002ea", + "ands w0, w1, w2, lsl #31": b"207c026a", + "ands x0, x1, x2, lsl #63": b"20fc02ea", + "ands w0, w1, w2, lsl #0": b"2000026a", + "ands x0, x1, x2, lsl #0": b"200002ea", + "ands w0, w1, w2, lsr #4": b"2010426a", + "ands x0, x1, x2, lsr #4": b"201042ea", + "ands w0, w1, w2, lsr #31": b"207c426a", + "ands x0, x1, x2, lsr #63": b"20fc42ea", + "ands w0, w1, w2, lsr #0": b"2000426a", + "ands x0, x1, x2, lsr #0": b"200042ea", + "ands w0, w1, w2, ror #4": b"2010c26a", + "ands x0, x1, x2, ror #4": b"2010c2ea", + "ands w0, w1, w2, ror #31": b"207cc26a", + "ands x0, x1, x2, ror #63": b"20fcc2ea", + "ands w0, w1, w2, ror #0": b"2000c26a", + "ands x0, x1, x2, ror #0": b"2000c2ea", + "asr w0, w1, w2": b"2028c21a", + "asr x0, x1, x2": b"2028c29a", + "asr w0, w1, #4": b"207c0413", + "asr x0, x1, #4": b"20fc4493", + "asr w0, w1, #31": b"207c1f13", + "asr x0, x1, #63": b"20fc7f93", + "asr w0, w1, #0": b"207c0013", + "asr x0, x1, #0": b"20fc4093", + "asrv w0, w1, w2": b"2028c21a", + "asrv x0, x1, x2": b"2028c29a", + "b.eq .+8": b"40000054", + "mov x1, 42": b"410580d2", + "mov x2, 43": b"620580d2", + "b.ne .+8": b"41000054", + "b.cs .+8": b"42000054", + "b.hs .+8": b"42000054", + "b.cc .+8": b"43000054", + "b.lo .+8": b"43000054", + "b.mi .+8": b"44000054", + "b.pl .+8": b"45000054", + "b.vs .+8": b"46000054", + "b.vc .+8": b"47000054", + "b.hi .+8": b"48000054", + "b.ls .+8": b"49000054", + "b.ge .+8": b"4a000054", + "b.lt .+8": b"4b000054", + "b.gt .+8": b"4c000054", + "b.le .+8": b"4d000054", + "b.al .+8": b"4e000054", + "b .-8": b"feffff17", + "b .+8": b"02000014", + "bfc w0, #17, #15": b"e03b0f33", + "bfc x0, #33, #31": b"e07b5fb3", + "bfc w0, #31, #1": b"e0030133", + "bfc x0, #63, #1": b"e00341b3", + "bfc w0, #0, #32": b"e07f0033", + "bfc x0, #0, #64": b"e0ff40b3", + "bfc w0, #0, #1": b"e0030033", + "bfc x0, #0, #1": b"e00340b3", + "bfi w0, w1, #17, #15": b"20380f33", + "bfi x0, x1, #33, #31": b"20785fb3", + "bfi w0, w1, #31, #1": b"20000133", + "bfi x0, x1, #63, #1": b"200041b3", + "bfi w0, w1, #0, #32": b"207c0033", + "bfi x0, x1, #0, #64": b"20fc40b3", + "bfi w0, w1, #0, #1": b"20000033", + "bfi x0, x1, #0, #1": b"200040b3", + "bfm w0, w1, #3, #5": b"20140333", + "bfm x0, x1, #3, #5": b"201443b3", + "bfm w0, w1, #0, #31": b"207c0033", + "bfm x0, x1, #0, #63": b"20fc40b3", + "bfm w0, w1, #0, #0": b"20000033", + "bfm x0, x1, #0, #0": b"200040b3", + "bfm w0, w1, #5, #3": b"200c0533", + "bfm x0, x1, #5, #3": b"200c45b3", + "bfm w0, w1, #31, #0": b"20001f33", + "bfm x0, x1, #63, #0": b"20007fb3", + "bfm w0, w1, #1, #0": b"20000133", + "bfm x0, x1, #1, #0": b"200041b3", + "bfxil w0, w1, #16, #16": b"207c1033", + "bfxil x0, x1, #32, #32": b"20fc60b3", + "bfxil w0, w1, #31, #1": b"207c1f33", + "bfxil x0, x1, #63, #1": b"20fc7fb3", + "bfxil w0, w1, #0, #32": b"207c0033", + "bfxil x0, x1, #0, #64": b"20fc40b3", + "bfxil w0, w1, #0, #1": b"20000033", + "bfxil x0, x1, #0, #1": b"200040b3", + "bic w0, w1, w2": b"2000220a", + "bic x0, x1, x2": b"2000228a", + "bic w0, w1, w2, asr #4": b"2010a20a", + "bic x0, x1, x2, asr #4": b"2010a28a", + "bic w0, w1, w2, asr #31": b"207ca20a", + "bic x0, x1, x2, asr #63": b"20fca28a", + "bic w0, w1, w2, asr #0": b"2000a20a", + "bic x0, x1, x2, asr #0": b"2000a28a", + "bic w0, w1, w2, lsl #4": b"2010220a", + "bic x0, x1, x2, lsl #4": b"2010228a", + "bic w0, w1, w2, lsl #31": b"207c220a", + "bic x0, x1, x2, lsl #63": b"20fc228a", + "bic w0, w1, w2, lsl #0": b"2000220a", + "bic x0, x1, x2, lsl #0": b"2000228a", + "bic w0, w1, w2, lsr #4": b"2010620a", + "bic x0, x1, x2, lsr #4": b"2010628a", + "bic w0, w1, w2, lsr #31": b"207c620a", + "bic x0, x1, x2, lsr #63": b"20fc628a", + "bic w0, w1, w2, lsr #0": b"2000620a", + "bic x0, x1, x2, lsr #0": b"2000628a", + "bic w0, w1, w2, ror #4": b"2010e20a", + "bic x0, x1, x2, ror #4": b"2010e28a", + "bic w0, w1, w2, ror #31": b"207ce20a", + "bic x0, x1, x2, ror #63": b"20fce28a", + "bic w0, w1, w2, ror #0": b"2000e20a", + "bic x0, x1, x2, ror #0": b"2000e28a", + "bics w0, w1, w2": b"2000226a", + "bics x0, x1, x2": b"200022ea", + "bics w0, w1, w2, asr #4": b"2010a26a", + "bics x0, x1, x2, asr #4": b"2010a2ea", + "bics w0, w1, w2, asr #31": b"207ca26a", + "bics x0, x1, x2, asr #63": b"20fca2ea", + "bics w0, w1, w2, asr #0": b"2000a26a", + "bics x0, x1, x2, asr #0": b"2000a2ea", + "bics w0, w1, w2, lsl #4": b"2010226a", + "bics x0, x1, x2, lsl #4": b"201022ea", + "bics w0, w1, w2, lsl #31": b"207c226a", + "bics x0, x1, x2, lsl #63": b"20fc22ea", + "bics w0, w1, w2, lsl #0": b"2000226a", + "bics x0, x1, x2, lsl #0": b"200022ea", + "bics w0, w1, w2, lsr #4": b"2010626a", + "bics x0, x1, x2, lsr #4": b"201062ea", + "bics w0, w1, w2, lsr #31": b"207c626a", + "bics x0, x1, x2, lsr #63": b"20fc62ea", + "bics w0, w1, w2, lsr #0": b"2000626a", + "bics x0, x1, x2, lsr #0": b"200062ea", + "bics w0, w1, w2, ror #4": b"2010e26a", + "bics x0, x1, x2, ror #4": b"2010e2ea", + "bics w0, w1, w2, ror #31": b"207ce26a", + "bics x0, x1, x2, ror #63": b"20fce2ea", + "bics w0, w1, w2, ror #0": b"2000e26a", + "bics x0, x1, x2, ror #0": b"2000e2ea", + "bl .-8": b"feffff97", + "bl .+8": b"02000094", + "blr x0": b"00003fd6", + "br x0": b"00001fd6", + "cbnz w0, .-4": b"e0ffff35", + "cbnz x0, .-4": b"e0ffffb5", + "cbnz w0, .+8": b"40000035", + "cbnz x0, .+8": b"400000b5", + "cbz w0, .-4": b"e0ffff34", + "cbz x0, .-4": b"e0ffffb4", + "cbz w0, .+8": b"40000034", + "cbz x0, .+8": b"400000b4", + "ccmp w0, #0, #15, eq": b"0f08407a", + "ccmp w0, #31, #15, eq": b"0f085f7a", + "ccmp x0, #0, #15, eq": b"0f0840fa", + "ccmp x0, #31, #15, eq": b"0f085ffa", + "ccmp w0, #0, #15, ne": b"0f18407a", + "ccmp w0, #31, #15, ne": b"0f185f7a", + "ccmp x0, #0, #15, ne": b"0f1840fa", + "ccmp x0, #31, #15, ne": b"0f185ffa", + "ccmp w0, #0, #15, cs": b"0f28407a", + "ccmp w0, #31, #15, cs": b"0f285f7a", + "ccmp x0, #0, #15, cs": b"0f2840fa", + "ccmp x0, #31, #15, cs": b"0f285ffa", + "ccmp w0, #0, #15, hs": b"0f28407a", + "ccmp w0, #31, #15, hs": b"0f285f7a", + "ccmp x0, #0, #15, hs": b"0f2840fa", + "ccmp x0, #31, #15, hs": b"0f285ffa", + "ccmp w0, #0, #15, cc": b"0f38407a", + "ccmp w0, #31, #15, cc": b"0f385f7a", + "ccmp x0, #0, #15, cc": b"0f3840fa", + "ccmp x0, #31, #15, cc": b"0f385ffa", + "ccmp w0, #0, #15, lo": b"0f38407a", + "ccmp w0, #31, #15, lo": b"0f385f7a", + "ccmp x0, #0, #15, lo": b"0f3840fa", + "ccmp x0, #31, #15, lo": b"0f385ffa", + "ccmp w0, #0, #15, mi": b"0f48407a", + "ccmp w0, #31, #15, mi": b"0f485f7a", + "ccmp x0, #0, #15, mi": b"0f4840fa", + "ccmp x0, #31, #15, mi": b"0f485ffa", + "ccmp w0, #0, #15, pl": b"0f58407a", + "ccmp w0, #31, #15, pl": b"0f585f7a", + "ccmp x0, #0, #15, pl": b"0f5840fa", + "ccmp x0, #31, #15, pl": b"0f585ffa", + "ccmp w0, #0, #15, vs": b"0f68407a", + "ccmp w0, #31, #15, vs": b"0f685f7a", + "ccmp x0, #0, #15, vs": b"0f6840fa", + "ccmp x0, #31, #15, vs": b"0f685ffa", + "ccmp w0, #0, #15, vc": b"0f78407a", + "ccmp w0, #31, #15, vc": b"0f785f7a", + "ccmp x0, #0, #15, vc": b"0f7840fa", + "ccmp x0, #31, #15, vc": b"0f785ffa", + "ccmp w0, #0, #15, hi": b"0f88407a", + "ccmp w0, #31, #15, hi": b"0f885f7a", + "ccmp x0, #0, #15, hi": b"0f8840fa", + "ccmp x0, #31, #15, hi": b"0f885ffa", + "ccmp w0, #0, #15, ls": b"0f98407a", + "ccmp w0, #31, #15, ls": b"0f985f7a", + "ccmp x0, #0, #15, ls": b"0f9840fa", + "ccmp x0, #31, #15, ls": b"0f985ffa", + "ccmp w0, #0, #15, ge": b"0fa8407a", + "ccmp w0, #31, #15, ge": b"0fa85f7a", + "ccmp x0, #0, #15, ge": b"0fa840fa", + "ccmp x0, #31, #15, ge": b"0fa85ffa", + "ccmp w0, #0, #15, lt": b"0fb8407a", + "ccmp w0, #31, #15, lt": b"0fb85f7a", + "ccmp x0, #0, #15, lt": b"0fb840fa", + "ccmp x0, #31, #15, lt": b"0fb85ffa", + "ccmp w0, #0, #15, gt": b"0fc8407a", + "ccmp w0, #31, #15, gt": b"0fc85f7a", + "ccmp x0, #0, #15, gt": b"0fc840fa", + "ccmp x0, #31, #15, gt": b"0fc85ffa", + "ccmp w0, #0, #15, le": b"0fd8407a", + "ccmp w0, #31, #15, le": b"0fd85f7a", + "ccmp x0, #0, #15, le": b"0fd840fa", + "ccmp x0, #31, #15, le": b"0fd85ffa", + "ccmp w0, #0, #15, al": b"0fe8407a", + "ccmp w0, #31, #15, al": b"0fe85f7a", + "ccmp x0, #0, #15, al": b"0fe840fa", + "ccmp x0, #31, #15, al": b"0fe85ffa", + "ccmp w0, w1, #15, eq": b"0f00417a", + "ccmp x0, x1, #15, eq": b"0f0041fa", + "ccmp w0, w1, #15, ne": b"0f10417a", + "ccmp x0, x1, #15, ne": b"0f1041fa", + "ccmp w0, w1, #15, cs": b"0f20417a", + "ccmp x0, x1, #15, cs": b"0f2041fa", + "ccmp w0, w1, #15, hs": b"0f20417a", + "ccmp x0, x1, #15, hs": b"0f2041fa", + "ccmp w0, w1, #15, cc": b"0f30417a", + "ccmp x0, x1, #15, cc": b"0f3041fa", + "ccmp w0, w1, #15, lo": b"0f30417a", + "ccmp x0, x1, #15, lo": b"0f3041fa", + "ccmp w0, w1, #15, mi": b"0f40417a", + "ccmp x0, x1, #15, mi": b"0f4041fa", + "ccmp w0, w1, #15, pl": b"0f50417a", + "ccmp x0, x1, #15, pl": b"0f5041fa", + "ccmp w0, w1, #15, vs": b"0f60417a", + "ccmp x0, x1, #15, vs": b"0f6041fa", + "ccmp w0, w1, #15, vc": b"0f70417a", + "ccmp x0, x1, #15, vc": b"0f7041fa", + "ccmp w0, w1, #15, hi": b"0f80417a", + "ccmp x0, x1, #15, hi": b"0f8041fa", + "ccmp w0, w1, #15, ls": b"0f90417a", + "ccmp x0, x1, #15, ls": b"0f9041fa", + "ccmp w0, w1, #15, ge": b"0fa0417a", + "ccmp x0, x1, #15, ge": b"0fa041fa", + "ccmp w0, w1, #15, lt": b"0fb0417a", + "ccmp x0, x1, #15, lt": b"0fb041fa", + "ccmp w0, w1, #15, gt": b"0fc0417a", + "ccmp x0, x1, #15, gt": b"0fc041fa", + "ccmp w0, w1, #15, le": b"0fd0417a", + "ccmp x0, x1, #15, le": b"0fd041fa", + "ccmp w0, w1, #15, al": b"0fe0417a", + "ccmp x0, x1, #15, al": b"0fe041fa", + "cinc w0, w1, eq": b"2014811a", + "cinc x0, x1, eq": b"2014819a", + "cinc w0, w1, ne": b"2004811a", + "cinc x0, x1, ne": b"2004819a", + "cinc w0, w1, cs": b"2034811a", + "cinc x0, x1, cs": b"2034819a", + "cinc w0, w1, hs": b"2034811a", + "cinc x0, x1, hs": b"2034819a", + "cinc w0, w1, cc": b"2024811a", + "cinc x0, x1, cc": b"2024819a", + "cinc w0, w1, lo": b"2024811a", + "cinc x0, x1, lo": b"2024819a", + "cinc w0, w1, mi": b"2054811a", + "cinc x0, x1, mi": b"2054819a", + "cinc w0, w1, pl": b"2044811a", + "cinc x0, x1, pl": b"2044819a", + "cinc w0, w1, vs": b"2074811a", + "cinc x0, x1, vs": b"2074819a", + "cinc w0, w1, vc": b"2064811a", + "cinc x0, x1, vc": b"2064819a", + "cinc w0, w1, hi": b"2094811a", + "cinc x0, x1, hi": b"2094819a", + "cinc w0, w1, ls": b"2084811a", + "cinc x0, x1, ls": b"2084819a", + "cinc w0, w1, ge": b"20b4811a", + "cinc x0, x1, ge": b"20b4819a", + "cinc w0, w1, lt": b"20a4811a", + "cinc x0, x1, lt": b"20a4819a", + "cinc w0, w1, gt": b"20d4811a", + "cinc x0, x1, gt": b"20d4819a", + "cinc w0, w1, le": b"20c4811a", + "cinc x0, x1, le": b"20c4819a", + "cinv w0, w1, eq": b"2010815a", + "cinv x0, x1, eq": b"201081da", + "cinv w0, w1, ne": b"2000815a", + "cinv x0, x1, ne": b"200081da", + "cinv w0, w1, cs": b"2030815a", + "cinv x0, x1, cs": b"203081da", + "cinv w0, w1, hs": b"2030815a", + "cinv x0, x1, hs": b"203081da", + "cinv w0, w1, cc": b"2020815a", + "cinv x0, x1, cc": b"202081da", + "cinv w0, w1, lo": b"2020815a", + "cinv x0, x1, lo": b"202081da", + "cinv w0, w1, mi": b"2050815a", + "cinv x0, x1, mi": b"205081da", + "cinv w0, w1, pl": b"2040815a", + "cinv x0, x1, pl": b"204081da", + "cinv w0, w1, vs": b"2070815a", + "cinv x0, x1, vs": b"207081da", + "cinv w0, w1, vc": b"2060815a", + "cinv x0, x1, vc": b"206081da", + "cinv w0, w1, hi": b"2090815a", + "cinv x0, x1, hi": b"209081da", + "cinv w0, w1, ls": b"2080815a", + "cinv x0, x1, ls": b"208081da", + "cinv w0, w1, ge": b"20b0815a", + "cinv x0, x1, ge": b"20b081da", + "cinv w0, w1, lt": b"20a0815a", + "cinv x0, x1, lt": b"20a081da", + "cinv w0, w1, gt": b"20d0815a", + "cinv x0, x1, gt": b"20d081da", + "cinv w0, w1, le": b"20c0815a", + "cinv x0, x1, le": b"20c081da", + "clz w0, w1": b"2010c05a", + "clz x0, x1": b"2010c0da", + "cmeq d0, d1, d2": b"208ce27e", + "cmeq v0.16b, v1.16b, v2.16b": b"208c226e", + "cmeq v0.2d, v1.2d, v2.2d": b"208ce26e", + "cmeq v0.2s, v1.2s, v2.2s": b"208ca22e", + "cmeq v0.4h, v1.4h, v2.4h": b"208c622e", + "cmeq v0.4s, v1.4s, v2.4s": b"208ca26e", + "cmeq v0.8b, v1.8b, v2.8b": b"208c222e", + "cmeq v0.8h, v1.8h, v2.8h": b"208c626e", + "cmeq d0, d1, #0": b"2098e05e", + "cmeq v0.16b, v1.16b, #0": b"2098204e", + "cmeq v0.2d, v1.2d, #0": b"2098e04e", + "cmeq v0.2s, v1.2s, #0": b"2098a00e", + "cmeq v0.4h, v1.4h, #0": b"2098600e", + "cmeq v0.4s, v1.4s, #0": b"2098a04e", + "cmeq v0.8b, v1.8b, #0": b"2098200e", + "cmeq v0.8h, v1.8h, #0": b"2098604e", + "cmn w1, w2, lsl #0": b"3f00022b", + "cmn x1, x2, lsl #0": b"3f0002ab", + "cmn w1, w2, lsl #4": b"3f10022b", + "cmn x1, x2, lsl #4": b"3f1002ab", + "cmn w1, w2, sxtb #0": b"3f80222b", + "cmn x1, w2, sxtb #0": b"3f8022ab", + "cmn w1, w2, sxtb": b"3f80222b", + "cmn w1, w2, sxtb #4": b"3f90222b", + "cmn x1, w2, sxtb #4": b"3f9022ab", + "cmn x1, w2, sxtb": b"3f8022ab", + "cmn w1, w2, sxth #0": b"3fa0222b", + "cmn x1, w2, sxth #0": b"3fa022ab", + "cmn w1, w2, sxth": b"3fa0222b", + "cmn w1, w2, sxth #4": b"3fb0222b", + "cmn x1, w2, sxth #4": b"3fb022ab", + "cmn x1, w2, sxth": b"3fa022ab", + "cmn w1, w2, sxtw #0": b"3fc0222b", + "cmn x1, w2, sxtw #0": b"3fc022ab", + "cmn w1, w2, sxtw": b"3fc0222b", + "cmn w1, w2, sxtw #4": b"3fd0222b", + "cmn x1, w2, sxtw #4": b"3fd022ab", + "cmn x1, w2, sxtw": b"3fc022ab", + "cmn w1, w2, sxtx #0": b"3fe0222b", + "cmn x1, x2, sxtx #0": b"3fe022ab", + "cmn w1, w2, sxtx": b"3fe0222b", + "cmn w1, w2, sxtx #4": b"3ff0222b", + "cmn x1, x2, sxtx #4": b"3ff022ab", + "cmn x1, x2, sxtx": b"3fe022ab", + "cmn w1, w2, uxtb #0": b"3f00222b", + "cmn x1, w2, uxtb #0": b"3f0022ab", + "cmn w1, w2, uxtb": b"3f00222b", + "cmn w1, w2, uxtb #4": b"3f10222b", + "cmn x1, w2, uxtb #4": b"3f1022ab", + "cmn x1, w2, uxtb": b"3f0022ab", + "cmn w1, w2, uxth #0": b"3f20222b", + "cmn x1, w2, uxth #0": b"3f2022ab", + "cmn w1, w2, uxth": b"3f20222b", + "cmn w1, w2, uxth #4": b"3f30222b", + "cmn x1, w2, uxth #4": b"3f3022ab", + "cmn x1, w2, uxth": b"3f2022ab", + "cmn w1, w2, uxtw #0": b"3f40222b", + "cmn x1, w2, uxtw #0": b"3f4022ab", + "cmn w1, w2, uxtw": b"3f40222b", + "cmn w1, w2, uxtw #4": b"3f50222b", + "cmn x1, w2, uxtw #4": b"3f5022ab", + "cmn x1, w2, uxtw": b"3f4022ab", + "cmn w1, w2, uxtx #0": b"3f60222b", + "cmn x1, x2, uxtx #0": b"3f6022ab", + "cmn w1, w2, uxtx": b"3f60222b", + "cmn w1, w2, uxtx #4": b"3f70222b", + "cmn x1, x2, uxtx #4": b"3f7022ab", + "cmn x1, x2, uxtx": b"3f6022ab", + "cmn w1, #1": b"3f040031", + "cmn x1, #1": b"3f0400b1", + "cmn w1, #1, lsl #0": b"3f040031", + "cmn x1, #1, lsl #0": b"3f0400b1", + "cmn w1, #1, lsl #12": b"3f044031", + "cmn x1, #1, lsl #12": b"3f0440b1", + "cmn w1, #4095": b"3ffc3f31", + "cmn x1, #4095": b"3ffc3fb1", + "cmn w1, #0": b"3f000031", + "cmn x1, #0": b"3f0000b1", + "cmn w1, w2": b"3f00022b", + "cmn x1, x2": b"3f0002ab", + "cmn w1, w2, asr #1": b"3f04822b", + "cmn x1, x2, asr #1": b"3f0482ab", + "cmn w1, w2, asr #31": b"3f7c822b", + "cmn x1, x2, asr #63": b"3ffc82ab", + "cmn w1, w2, asr #0": b"3f00822b", + "cmn x1, x2, asr #0": b"3f0082ab", + "cmn w1, w2, lsl #1": b"3f04022b", + "cmn x1, x2, lsl #1": b"3f0402ab", + "cmn w1, w2, lsl #31": b"3f7c022b", + "cmn x1, x2, lsl #63": b"3ffc02ab", + "cmn w1, w2, lsr #1": b"3f04422b", + "cmn x1, x2, lsr #1": b"3f0442ab", + "cmn w1, w2, lsr #31": b"3f7c422b", + "cmn x1, x2, lsr #63": b"3ffc42ab", + "cmn w1, w2, lsr #0": b"3f00422b", + "cmn x1, x2, lsr #0": b"3f0042ab", + "cmp w1, w2, lsl #0": b"3f00026b", + "cmp x1, x2, lsl #0": b"3f0002eb", + "cmp w1, w2, lsl #4": b"3f10026b", + "cmp x1, x2, lsl #4": b"3f1002eb", + "cmp w1, w2, sxtb #0": b"3f80226b", + "cmp x1, w2, sxtb #0": b"3f8022eb", + "cmp w1, w2, sxtb": b"3f80226b", + "cmp w1, w2, sxtb #4": b"3f90226b", + "cmp x1, w2, sxtb #4": b"3f9022eb", + "cmp x1, w2, sxtb": b"3f8022eb", + "cmp w1, w2, sxth #0": b"3fa0226b", + "cmp x1, w2, sxth #0": b"3fa022eb", + "cmp w1, w2, sxth": b"3fa0226b", + "cmp w1, w2, sxth #4": b"3fb0226b", + "cmp x1, w2, sxth #4": b"3fb022eb", + "cmp x1, w2, sxth": b"3fa022eb", + "cmp w1, w2, sxtw #0": b"3fc0226b", + "cmp x1, w2, sxtw #0": b"3fc022eb", + "cmp w1, w2, sxtw": b"3fc0226b", + "cmp w1, w2, sxtw #4": b"3fd0226b", + "cmp x1, w2, sxtw #4": b"3fd022eb", + "cmp x1, w2, sxtw": b"3fc022eb", + "cmp w1, w2, sxtx #0": b"3fe0226b", + "cmp x1, x2, sxtx #0": b"3fe022eb", + "cmp w1, w2, sxtx": b"3fe0226b", + "cmp w1, w2, sxtx #4": b"3ff0226b", + "cmp x1, x2, sxtx #4": b"3ff022eb", + "cmp x1, x2, sxtx": b"3fe022eb", + "cmp w1, w2, uxtb #0": b"3f00226b", + "cmp x1, w2, uxtb #0": b"3f0022eb", + "cmp w1, w2, uxtb": b"3f00226b", + "cmp w1, w2, uxtb #4": b"3f10226b", + "cmp x1, w2, uxtb #4": b"3f1022eb", + "cmp x1, w2, uxtb": b"3f0022eb", + "cmp w1, w2, uxth #0": b"3f20226b", + "cmp x1, w2, uxth #0": b"3f2022eb", + "cmp w1, w2, uxth": b"3f20226b", + "cmp w1, w2, uxth #4": b"3f30226b", + "cmp x1, w2, uxth #4": b"3f3022eb", + "cmp x1, w2, uxth": b"3f2022eb", + "cmp w1, w2, uxtw #0": b"3f40226b", + "cmp x1, w2, uxtw #0": b"3f4022eb", + "cmp w1, w2, uxtw": b"3f40226b", + "cmp w1, w2, uxtw #4": b"3f50226b", + "cmp x1, w2, uxtw #4": b"3f5022eb", + "cmp x1, w2, uxtw": b"3f4022eb", + "cmp w1, w2, uxtx #0": b"3f60226b", + "cmp x1, x2, uxtx #0": b"3f6022eb", + "cmp w1, w2, uxtx": b"3f60226b", + "cmp w1, w2, uxtx #4": b"3f70226b", + "cmp x1, x2, uxtx #4": b"3f7022eb", + "cmp x1, x2, uxtx": b"3f6022eb", + "cmp w1, #1": b"3f040071", + "cmp x1, #1": b"3f0400f1", + "cmp w1, #1, lsl #0": b"3f040071", + "cmp x1, #1, lsl #0": b"3f0400f1", + "cmp w1, #1, lsl #12": b"3f044071", + "cmp x1, #1, lsl #12": b"3f0440f1", + "cmp w1, #4095": b"3ffc3f71", + "cmp x1, #4095": b"3ffc3ff1", + "cmp w1, #0": b"3f000071", + "cmp x1, #0": b"3f0000f1", + "cmp w1, w2": b"3f00026b", + "cmp x1, x2": b"3f0002eb", + "cmp w1, w2, asr #1": b"3f04826b", + "cmp x1, x2, asr #1": b"3f0482eb", + "cmp w1, w2, asr #31": b"3f7c826b", + "cmp x1, x2, asr #63": b"3ffc82eb", + "cmp w1, w2, asr #0": b"3f00826b", + "cmp x1, x2, asr #0": b"3f0082eb", + "cmp w1, w2, lsl #1": b"3f04026b", + "cmp x1, x2, lsl #1": b"3f0402eb", + "cmp w1, w2, lsl #31": b"3f7c026b", + "cmp x1, x2, lsl #63": b"3ffc02eb", + "cmp w1, w2, lsr #1": b"3f04426b", + "cmp x1, x2, lsr #1": b"3f0442eb", + "cmp w1, w2, lsr #31": b"3f7c426b", + "cmp x1, x2, lsr #63": b"3ffc42eb", + "cmp w1, w2, lsr #0": b"3f00426b", + "cmp x1, x2, lsr #0": b"3f0042eb", + "csel w0, w1, w2, eq": b"2000821a", + "csel x0, x1, x2, eq": b"2000829a", + "csel w0, w1, w2, ne": b"2010821a", + "csel x0, x1, x2, ne": b"2010829a", + "csel w0, w1, w2, cs": b"2020821a", + "csel x0, x1, x2, cs": b"2020829a", + "csel w0, w1, w2, hs": b"2020821a", + "csel x0, x1, x2, hs": b"2020829a", + "csel w0, w1, w2, cc": b"2030821a", + "csel x0, x1, x2, cc": b"2030829a", + "csel w0, w1, w2, lo": b"2030821a", + "csel x0, x1, x2, lo": b"2030829a", + "csel w0, w1, w2, mi": b"2040821a", + "csel x0, x1, x2, mi": b"2040829a", + "csel w0, w1, w2, pl": b"2050821a", + "csel x0, x1, x2, pl": b"2050829a", + "csel w0, w1, w2, vs": b"2060821a", + "csel x0, x1, x2, vs": b"2060829a", + "csel w0, w1, w2, vc": b"2070821a", + "csel x0, x1, x2, vc": b"2070829a", + "csel w0, w1, w2, hi": b"2080821a", + "csel x0, x1, x2, hi": b"2080829a", + "csel w0, w1, w2, ls": b"2090821a", + "csel x0, x1, x2, ls": b"2090829a", + "csel w0, w1, w2, ge": b"20a0821a", + "csel x0, x1, x2, ge": b"20a0829a", + "csel w0, w1, w2, lt": b"20b0821a", + "csel x0, x1, x2, lt": b"20b0829a", + "csel w0, w1, w2, gt": b"20c0821a", + "csel x0, x1, x2, gt": b"20c0829a", + "csel w0, w1, w2, le": b"20d0821a", + "csel x0, x1, x2, le": b"20d0829a", + "csel w0, w1, w2, al": b"20e0821a", + "csel x0, x1, x2, al": b"20e0829a", + "cset w0, eq": b"e0179f1a", + "cset x0, eq": b"e0179f9a", + "cset w0, ne": b"e0079f1a", + "cset x0, ne": b"e0079f9a", + "cset w0, cs": b"e0379f1a", + "cset x0, cs": b"e0379f9a", + "cset w0, hs": b"e0379f1a", + "cset x0, hs": b"e0379f9a", + "cset w0, cc": b"e0279f1a", + "cset x0, cc": b"e0279f9a", + "cset w0, lo": b"e0279f1a", + "cset x0, lo": b"e0279f9a", + "cset w0, mi": b"e0579f1a", + "cset x0, mi": b"e0579f9a", + "cset w0, pl": b"e0479f1a", + "cset x0, pl": b"e0479f9a", + "cset w0, vs": b"e0779f1a", + "cset x0, vs": b"e0779f9a", + "cset w0, vc": b"e0679f1a", + "cset x0, vc": b"e0679f9a", + "cset w0, hi": b"e0979f1a", + "cset x0, hi": b"e0979f9a", + "cset w0, ls": b"e0879f1a", + "cset x0, ls": b"e0879f9a", + "cset w0, ge": b"e0b79f1a", + "cset x0, ge": b"e0b79f9a", + "cset w0, lt": b"e0a79f1a", + "cset x0, lt": b"e0a79f9a", + "cset w0, gt": b"e0d79f1a", + "cset x0, gt": b"e0d79f9a", + "cset w0, le": b"e0c79f1a", + "cset x0, le": b"e0c79f9a", + "csetm w0, eq": b"e0139f5a", + "csetm x0, eq": b"e0139fda", + "csetm w0, ne": b"e0039f5a", + "csetm x0, ne": b"e0039fda", + "csetm w0, cs": b"e0339f5a", + "csetm x0, cs": b"e0339fda", + "csetm w0, hs": b"e0339f5a", + "csetm x0, hs": b"e0339fda", + "csetm w0, cc": b"e0239f5a", + "csetm x0, cc": b"e0239fda", + "csetm w0, lo": b"e0239f5a", + "csetm x0, lo": b"e0239fda", + "csetm w0, mi": b"e0539f5a", + "csetm x0, mi": b"e0539fda", + "csetm w0, pl": b"e0439f5a", + "csetm x0, pl": b"e0439fda", + "csetm w0, vs": b"e0739f5a", + "csetm x0, vs": b"e0739fda", + "csetm w0, vc": b"e0639f5a", + "csetm x0, vc": b"e0639fda", + "csetm w0, hi": b"e0939f5a", + "csetm x0, hi": b"e0939fda", + "csetm w0, ls": b"e0839f5a", + "csetm x0, ls": b"e0839fda", + "csetm w0, ge": b"e0b39f5a", + "csetm x0, ge": b"e0b39fda", + "csetm w0, lt": b"e0a39f5a", + "csetm x0, lt": b"e0a39fda", + "csetm w0, gt": b"e0d39f5a", + "csetm x0, gt": b"e0d39fda", + "csetm w0, le": b"e0c39f5a", + "csetm x0, le": b"e0c39fda", + "csinc w0, w1, w2, eq": b"2004821a", + "csinc x0, x1, x2, eq": b"2004829a", + "csinc w0, w1, w2, ne": b"2014821a", + "csinc x0, x1, x2, ne": b"2014829a", + "csinc w0, w1, w2, cs": b"2024821a", + "csinc x0, x1, x2, cs": b"2024829a", + "csinc w0, w1, w2, hs": b"2024821a", + "csinc x0, x1, x2, hs": b"2024829a", + "csinc w0, w1, w2, cc": b"2034821a", + "csinc x0, x1, x2, cc": b"2034829a", + "csinc w0, w1, w2, lo": b"2034821a", + "csinc x0, x1, x2, lo": b"2034829a", + "csinc w0, w1, w2, mi": b"2044821a", + "csinc x0, x1, x2, mi": b"2044829a", + "csinc w0, w1, w2, pl": b"2054821a", + "csinc x0, x1, x2, pl": b"2054829a", + "csinc w0, w1, w2, vs": b"2064821a", + "csinc x0, x1, x2, vs": b"2064829a", + "csinc w0, w1, w2, vc": b"2074821a", + "csinc x0, x1, x2, vc": b"2074829a", + "csinc w0, w1, w2, hi": b"2084821a", + "csinc x0, x1, x2, hi": b"2084829a", + "csinc w0, w1, w2, ls": b"2094821a", + "csinc x0, x1, x2, ls": b"2094829a", + "csinc w0, w1, w2, ge": b"20a4821a", + "csinc x0, x1, x2, ge": b"20a4829a", + "csinc w0, w1, w2, lt": b"20b4821a", + "csinc x0, x1, x2, lt": b"20b4829a", + "csinc w0, w1, w2, gt": b"20c4821a", + "csinc x0, x1, x2, gt": b"20c4829a", + "csinc w0, w1, w2, le": b"20d4821a", + "csinc x0, x1, x2, le": b"20d4829a", + "csinc w0, w1, w2, al": b"20e4821a", + "csinc x0, x1, x2, al": b"20e4829a", + "csinv w0, w1, w2, eq": b"2000825a", + "csinv x0, x1, x2, eq": b"200082da", + "csinv w0, w1, w2, ne": b"2010825a", + "csinv x0, x1, x2, ne": b"201082da", + "csinv w0, w1, w2, cs": b"2020825a", + "csinv x0, x1, x2, cs": b"202082da", + "csinv w0, w1, w2, hs": b"2020825a", + "csinv x0, x1, x2, hs": b"202082da", + "csinv w0, w1, w2, cc": b"2030825a", + "csinv x0, x1, x2, cc": b"203082da", + "csinv w0, w1, w2, lo": b"2030825a", + "csinv x0, x1, x2, lo": b"203082da", + "csinv w0, w1, w2, mi": b"2040825a", + "csinv x0, x1, x2, mi": b"204082da", + "csinv w0, w1, w2, pl": b"2050825a", + "csinv x0, x1, x2, pl": b"205082da", + "csinv w0, w1, w2, vs": b"2060825a", + "csinv x0, x1, x2, vs": b"206082da", + "csinv w0, w1, w2, vc": b"2070825a", + "csinv x0, x1, x2, vc": b"207082da", + "csinv w0, w1, w2, hi": b"2080825a", + "csinv x0, x1, x2, hi": b"208082da", + "csinv w0, w1, w2, ls": b"2090825a", + "csinv x0, x1, x2, ls": b"209082da", + "csinv w0, w1, w2, ge": b"20a0825a", + "csinv x0, x1, x2, ge": b"20a082da", + "csinv w0, w1, w2, lt": b"20b0825a", + "csinv x0, x1, x2, lt": b"20b082da", + "csinv w0, w1, w2, gt": b"20c0825a", + "csinv x0, x1, x2, gt": b"20c082da", + "csinv w0, w1, w2, le": b"20d0825a", + "csinv x0, x1, x2, le": b"20d082da", + "csinv w0, w1, w2, al": b"20e0825a", + "csinv x0, x1, x2, al": b"20e082da", + "dup v0.16b, w1": b"200c014e", + "dup v0.2d, x1": b"200c084e", + "dup v0.2s, w1": b"200c040e", + "dup v0.4h, w1": b"200c020e", + "dup v0.4s, w1": b"200c044e", + "dup v0.8b, w1": b"200c010e", + "dup v0.8h, w1": b"200c024e", + "eor w0, w1, w2": b"2000024a", + "eor x0, x1, x2": b"200002ca", + "eor w0, w1, w2, asr #4": b"2010824a", + "eor x0, x1, x2, asr #4": b"201082ca", + "eor w0, w1, w2, asr #31": b"207c824a", + "eor x0, x1, x2, asr #63": b"20fc82ca", + "eor w0, w1, w2, asr #0": b"2000824a", + "eor x0, x1, x2, asr #0": b"200082ca", + "eor w0, w1, w2, lsl #4": b"2010024a", + "eor x0, x1, x2, lsl #4": b"201002ca", + "eor w0, w1, w2, lsl #31": b"207c024a", + "eor x0, x1, x2, lsl #63": b"20fc02ca", + "eor w0, w1, w2, lsl #0": b"2000024a", + "eor x0, x1, x2, lsl #0": b"200002ca", + "eor w0, w1, w2, lsr #4": b"2010424a", + "eor x0, x1, x2, lsr #4": b"201042ca", + "eor w0, w1, w2, lsr #31": b"207c424a", + "eor x0, x1, x2, lsr #63": b"20fc42ca", + "eor w0, w1, w2, lsr #0": b"2000424a", + "eor x0, x1, x2, lsr #0": b"200042ca", + "eor w0, w1, w2, ror #4": b"2010c24a", + "eor x0, x1, x2, ror #4": b"2010c2ca", + "eor w0, w1, w2, ror #31": b"207cc24a", + "eor x0, x1, x2, ror #63": b"20fcc2ca", + "eor w0, w1, w2, ror #0": b"2000c24a", + "eor x0, x1, x2, ror #0": b"2000c2ca", + "ld1 {v0.8b}, [sp]": b"e073400c", + "ld1 {v0.8b}, [sp], x29": b"e073dd0c", + "ld1 {v0.8b}, [sp], #8": b"e073df0c", + "ld1 {v0.8b, v1.8b}, [sp]": b"e0a3400c", + "ld1 {v0.8b, v1.8b}, [sp], x29": b"e0a3dd0c", + "ld1 {v0.8b, v1.8b}, [sp], #16": b"e0a3df0c", + "ld1 {v0.8b, v1.8b, v2.8b}, [sp]": b"e063400c", + "ld1 {v0.8b, v1.8b, v2.8b}, [sp], x29": b"e063dd0c", + "ld1 {v0.8b, v1.8b, v2.8b}, [sp], #24": b"e063df0c", + "ld1 {v0.8b, v1.8b, v2.8b, v3.8b}, [sp]": b"e023400c", + "ld1 {v0.8b, v1.8b, v2.8b, v3.8b}, [sp], x29": b"e023dd0c", + "ld1 {v0.8b, v1.8b, v2.8b, v3.8b}, [sp], #32": b"e023df0c", + "ld1 {v0.16b}, [sp]": b"e073404c", + "ld1 {v0.16b}, [sp], x29": b"e073dd4c", + "ld1 {v0.16b}, [sp], #16": b"e073df4c", + "ld1 {v0.16b, v1.16b}, [sp]": b"e0a3404c", + "ld1 {v0.16b, v1.16b}, [sp], x29": b"e0a3dd4c", + "ld1 {v0.16b, v1.16b}, [sp], #32": b"e0a3df4c", + "ld1 {v0.16b, v1.16b, v2.16b}, [sp]": b"e063404c", + "ld1 {v0.16b, v1.16b, v2.16b}, [sp], x29": b"e063dd4c", + "ld1 {v0.16b, v1.16b, v2.16b}, [sp], #48": b"e063df4c", + "ld1 {v0.16b, v1.16b, v2.16b, v3.16b}, [sp]": b"e023404c", + "ld1 {v0.16b, v1.16b, v2.16b, v3.16b}, [sp], x29": b"e023dd4c", + "ld1 {v0.16b, v1.16b, v2.16b, v3.16b}, [sp], #64": b"e023df4c", + "ld1 {v0.4h}, [sp]": b"e077400c", + "ld1 {v0.4h}, [sp], x29": b"e077dd0c", + "ld1 {v0.4h}, [sp], #8": b"e077df0c", + "ld1 {v0.4h, v1.4h}, [sp]": b"e0a7400c", + "ld1 {v0.4h, v1.4h}, [sp], x29": b"e0a7dd0c", + "ld1 {v0.4h, v1.4h}, [sp], #16": b"e0a7df0c", + "ld1 {v0.4h, v1.4h, v2.4h}, [sp]": b"e067400c", + "ld1 {v0.4h, v1.4h, v2.4h}, [sp], x29": b"e067dd0c", + "ld1 {v0.4h, v1.4h, v2.4h}, [sp], #24": b"e067df0c", + "ld1 {v0.4h, v1.4h, v2.4h, v3.4h}, [sp]": b"e027400c", + "ld1 {v0.4h, v1.4h, v2.4h, v3.4h}, [sp], x29": b"e027dd0c", + "ld1 {v0.4h, v1.4h, v2.4h, v3.4h}, [sp], #32": b"e027df0c", + "ld1 {v0.8h}, [sp]": b"e077404c", + "ld1 {v0.8h}, [sp], x29": b"e077dd4c", + "ld1 {v0.8h}, [sp], #16": b"e077df4c", + "ld1 {v0.8h, v1.8h}, [sp]": b"e0a7404c", + "ld1 {v0.8h, v1.8h}, [sp], x29": b"e0a7dd4c", + "ld1 {v0.8h, v1.8h}, [sp], #32": b"e0a7df4c", + "ld1 {v0.8h, v1.8h, v2.8h}, [sp]": b"e067404c", + "ld1 {v0.8h, v1.8h, v2.8h}, [sp], x29": b"e067dd4c", + "ld1 {v0.8h, v1.8h, v2.8h}, [sp], #48": b"e067df4c", + "ld1 {v0.8h, v1.8h, v2.8h, v3.8h}, [sp]": b"e027404c", + "ld1 {v0.8h, v1.8h, v2.8h, v3.8h}, [sp], x29": b"e027dd4c", + "ld1 {v0.8h, v1.8h, v2.8h, v3.8h}, [sp], #64": b"e027df4c", + "ld1 {v0.2s}, [sp]": b"e07b400c", + "ld1 {v0.2s}, [sp], x29": b"e07bdd0c", + "ld1 {v0.2s}, [sp], #8": b"e07bdf0c", + "ld1 {v0.2s, v1.2s}, [sp]": b"e0ab400c", + "ld1 {v0.2s, v1.2s}, [sp], x29": b"e0abdd0c", + "ld1 {v0.2s, v1.2s}, [sp], #16": b"e0abdf0c", + "ld1 {v0.2s, v1.2s, v2.2s}, [sp]": b"e06b400c", + "ld1 {v0.2s, v1.2s, v2.2s}, [sp], x29": b"e06bdd0c", + "ld1 {v0.2s, v1.2s, v2.2s}, [sp], #24": b"e06bdf0c", + "ld1 {v0.2s, v1.2s, v2.2s, v3.2s}, [sp]": b"e02b400c", + "ld1 {v0.2s, v1.2s, v2.2s, v3.2s}, [sp], x29": b"e02bdd0c", + "ld1 {v0.2s, v1.2s, v2.2s, v3.2s}, [sp], #32": b"e02bdf0c", + "ld1 {v0.4s}, [sp]": b"e07b404c", + "ld1 {v0.4s}, [sp], x29": b"e07bdd4c", + "ld1 {v0.4s}, [sp], #16": b"e07bdf4c", + "ld1 {v0.4s, v1.4s}, [sp]": b"e0ab404c", + "ld1 {v0.4s, v1.4s}, [sp], x29": b"e0abdd4c", + "ld1 {v0.4s, v1.4s}, [sp], #32": b"e0abdf4c", + "ld1 {v0.4s, v1.4s, v2.4s}, [sp]": b"e06b404c", + "ld1 {v0.4s, v1.4s, v2.4s}, [sp], x29": b"e06bdd4c", + "ld1 {v0.4s, v1.4s, v2.4s}, [sp], #48": b"e06bdf4c", + "ld1 {v0.4s, v1.4s, v2.4s, v3.4s}, [sp]": b"e02b404c", + "ld1 {v0.4s, v1.4s, v2.4s, v3.4s}, [sp], x29": b"e02bdd4c", + "ld1 {v0.4s, v1.4s, v2.4s, v3.4s}, [sp], #64": b"e02bdf4c", + "ld1 {v0.1d}, [sp]": b"e07f400c", + "ld1 {v0.1d}, [sp], x29": b"e07fdd0c", + "ld1 {v0.1d}, [sp], #8": b"e07fdf0c", + "ld1 {v0.1d, v1.1d}, [sp]": b"e0af400c", + "ld1 {v0.1d, v1.1d}, [sp], x29": b"e0afdd0c", + "ld1 {v0.1d, v1.1d}, [sp], #16": b"e0afdf0c", + "ld1 {v0.1d, v1.1d, v2.1d}, [sp]": b"e06f400c", + "ld1 {v0.1d, v1.1d, v2.1d}, [sp], x29": b"e06fdd0c", + "ld1 {v0.1d, v1.1d, v2.1d}, [sp], #24": b"e06fdf0c", + "ld1 {v0.1d, v1.1d, v2.1d, v3.1d}, [sp]": b"e02f400c", + "ld1 {v0.1d, v1.1d, v2.1d, v3.1d}, [sp], x29": b"e02fdd0c", + "ld1 {v0.1d, v1.1d, v2.1d, v3.1d}, [sp], #32": b"e02fdf0c", + "ld1 {v0.2d}, [sp]": b"e07f404c", + "ld1 {v0.2d}, [sp], x29": b"e07fdd4c", + "ld1 {v0.2d}, [sp], #16": b"e07fdf4c", + "ld1 {v0.2d, v1.2d}, [sp]": b"e0af404c", + "ld1 {v0.2d, v1.2d}, [sp], x29": b"e0afdd4c", + "ld1 {v0.2d, v1.2d}, [sp], #32": b"e0afdf4c", + "ld1 {v0.2d, v1.2d, v2.2d}, [sp]": b"e06f404c", + "ld1 {v0.2d, v1.2d, v2.2d}, [sp], x29": b"e06fdd4c", + "ld1 {v0.2d, v1.2d, v2.2d}, [sp], #48": b"e06fdf4c", + "ld1 {v0.2d, v1.2d, v2.2d, v3.2d}, [sp]": b"e02f404c", + "ld1 {v0.2d, v1.2d, v2.2d, v3.2d}, [sp], x29": b"e02fdd4c", + "ld1 {v0.2d, v1.2d, v2.2d, v3.2d}, [sp], #64": b"e02fdf4c", + "ldaxr w1, [sp]": b"e1ff5f88", + "ldaxr x1, [sp]": b"e1ff5fc8", + "ldaxr w1, [sp, #0]": b"e1ff5f88", + "ldaxr x1, [sp, #0]": b"e1ff5fc8", + "ldp w1, w2, [sp]": b"e10b4029", + "ldp x1, x2, [sp]": b"e10b40a9", + "ldp w1, w2, [sp, #8]": b"e10b4129", + "ldp x1, x2, [sp, #8]": b"e18b40a9", + "ldp w1, w2, [sp, #252]": b"e18b5f29", + "ldp x1, x2, [sp, #504]": b"e18b5fa9", + "ldp w1, w2, [sp, #-256]": b"e10b6029", + "ldp x1, x2, [sp, #-512]": b"e10b60a9", + "ldp w1, w2, [sp], #8": b"e10bc128", + "ldp x1, x2, [sp], #8": b"e18bc0a8", + "ldp w1, w2, [sp], #252": b"e18bdf28", + "ldp x1, x2, [sp], #504": b"e18bdfa8", + "ldp w1, w2, [sp], #-256": b"e10be028", + "ldp x1, x2, [sp], #-512": b"e10be0a8", + "ldp w1, w2, [sp, #8]!": b"e10bc129", + "ldp x1, x2, [sp, #8]!": b"e18bc0a9", + "ldp w1, w2, [sp, #252]!": b"e18bdf29", + "ldp x1, x2, [sp, #504]!": b"e18bdfa9", + "ldp w1, w2, [sp, #-256]!": b"e10be029", + "ldp x1, x2, [sp, #-512]!": b"e10be0a9", + "ldr w1, [sp]": b"e10340b9", + "ldr x1, [sp]": b"e10340f9", + "ldr w1, [sp, #8]": b"e10b40b9", + "ldr x1, [sp, #8]": b"e10740f9", + "ldr w1, [sp, #16380]": b"e1ff7fb9", + "ldr x1, [sp, #32760]": b"e1ff7ff9", + "ldr w1, [sp], #8": b"e18740b8", + "ldr x1, [sp], #8": b"e18740f8", + "ldr w1, [sp], #-256": b"e10750b8", + "ldr x1, [sp], #-256": b"e10750f8", + "ldr w1, [sp, #8]!": b"e18f40b8", + "ldr x1, [sp, #8]!": b"e18f40f8", + "ldr w1, [sp, #-256]!": b"e10f50b8", + "ldr x1, [sp, #-256]!": b"e10f50f8", + "ldr w1, [sp, #1]": b"e11340b8", + "ldr x1, [sp, #4]": b"e14340f8", + "ldr w1, [sp, #-256]": b"e10350b8", + "ldr x1, [sp, #-256]": b"e10350f8", + "ldr w0, .+8": b"40000018", + "ldr x0, .+8": b"40000058", + "ldr w0, .-8": b"c0ffff18", + "ldr x0, .-8": b"c0ffff58", + "ldr w0, [sp, x1]": b"e06b61b8", + "ldr x0, [sp, x1]": b"e06b61f8", + "ldr w0, [sp, x1, lsl #2]": b"e07b61b8", + "ldr x0, [sp, x1, lsl #3]": b"e07b61f8", + "ldr w0, [sp, w1, sxtw #2]": b"e0db61b8", + "ldr w0, [sp, w1, sxtw]": b"e0cb61b8", + "ldr x0, [sp, w1, sxtw #3]": b"e0db61f8", + "ldr x0, [sp, w1, sxtw]": b"e0cb61f8", + "ldr w0, [sp, x1, sxtx #2]": b"e0fb61b8", + "ldr w0, [sp, x1, sxtx]": b"e0eb61b8", + "ldr x0, [sp, x1, sxtx #3]": b"e0fb61f8", + "ldr x0, [sp, x1, sxtx]": b"e0eb61f8", + "ldr w0, [sp, w1, uxtw #2]": b"e05b61b8", + "ldr w0, [sp, w1, uxtw]": b"e04b61b8", + "ldr x0, [sp, w1, uxtw #3]": b"e05b61f8", + "ldr x0, [sp, w1, uxtw]": b"e04b61f8", + "ldrb w1, [sp]": b"e1034039", + "ldrb w1, [sp, #8]": b"e1234039", + "ldrb w1, [sp, #4095]": b"e1ff7f39", + "ldrb w1, [sp], #8": b"e1874038", + "ldrb w1, [sp], #-256": b"e1075038", + "ldrb w1, [sp, #8]!": b"e18f4038", + "ldrb w1, [sp, #-256]!": b"e10f5038", + "ldrb w0, [sp, x1]": b"e06b6138", + "ldrb w0, [sp, x1, lsl #0]": b"e07b6138", + "ldrb w0, [sp, w1, sxtw #0]": b"e0db6138", + "ldrb w0, [sp, w1, sxtw]": b"e0cb6138", + "ldrb w0, [sp, x1, sxtx #0]": b"e0fb6138", + "ldrb w0, [sp, x1, sxtx]": b"e0eb6138", + "ldrb w0, [sp, w1, uxtw #0]": b"e05b6138", + "ldrb w0, [sp, w1, uxtw]": b"e04b6138", + "ldrh w1, [sp]": b"e1034079", + "ldrh w1, [sp, #8]": b"e1134079", + "ldrh w1, [sp, #8190]": b"e1ff7f79", + "ldrh w1, [sp], #8": b"e1874078", + "ldrh w1, [sp], #-256": b"e1075078", + "ldrh w1, [sp, #8]!": b"e18f4078", + "ldrh w1, [sp, #-256]!": b"e10f5078", + "ldrh w0, [sp, x1]": b"e06b6178", + "ldrh w0, [sp, x1, lsl #1]": b"e07b6178", + "ldrh w0, [sp, w1, sxtw #1]": b"e0db6178", + "ldrh w0, [sp, w1, sxtw]": b"e0cb6178", + "ldrh w0, [sp, x1, sxtx #1]": b"e0fb6178", + "ldrh w0, [sp, x1, sxtx]": b"e0eb6178", + "ldrh w0, [sp, w1, uxtw #1]": b"e05b6178", + "ldrh w0, [sp, w1, uxtw]": b"e04b6178", + "ldrsw x1, [sp]": b"e10380b9", + "ldrsw x1, [sp, #8]": b"e10b80b9", + "ldrsw x1, [sp, #16380]": b"e1ffbfb9", + "ldrsw x1, [sp], #8": b"e18780b8", + "ldrsw x1, [sp], #-256": b"e10790b8", + "ldrsw x1, [sp, #8]!": b"e18f80b8", + "ldrsw x1, [sp, #-256]!": b"e10f90b8", + "ldrsw x0, .+8": b"40000098", + "ldrsw x0, .-8": b"c0ffff98", + "ldrsw x0, [sp, x1]": b"e06ba1b8", + "ldrsw x0, [sp, x1, lsl #2]": b"e07ba1b8", + "ldrsw x0, [sp, w1, sxtw #2]": b"e0dba1b8", + "ldrsw x0, [sp, w1, sxtw]": b"e0cba1b8", + "ldrsw x0, [sp, x1, sxtx #2]": b"e0fba1b8", + "ldrsw x0, [sp, x1, sxtx]": b"e0eba1b8", + "ldrsw x0, [sp, w1, uxtw #2]": b"e05ba1b8", + "ldrsw x0, [sp, w1, uxtw]": b"e04ba1b8", + "ldur w1, [sp, #1]": b"e11340b8", + "ldur x1, [sp, #4]": b"e14340f8", + "ldur w1, [sp, #255]": b"e1f34fb8", + "ldur x1, [sp, #255]": b"e1f34ff8", + "ldur w1, [sp, #-256]": b"e10350b8", + "ldur x1, [sp, #-256]": b"e10350f8", + "ldxr w1, [sp]": b"e17f5f88", + "ldxr x1, [sp]": b"e17f5fc8", + "ldxr w1, [sp, #0]": b"e17f5f88", + "ldxr x1, [sp, #0]": b"e17f5fc8", + "lsl w0, w1, #4": b"206c1c53", + "lsl x0, x1, #4": b"20ec7cd3", + "lsl w0, w1, #31": b"20000153", + "lsl x0, x1, #63": b"200041d3", + "lsl w0, w1, #0": b"207c0053", + "lsl x0, x1, #0": b"20fc40d3", + "lsl w0, w1, w2": b"2020c21a", + "lsl x0, x1, x2": b"2020c29a", + "lslv w0, w1, w2": b"2020c21a", + "lslv x0, x1, x2": b"2020c29a", + "lsr w0, w1, #4": b"207c0453", + "lsr x0, x1, #4": b"20fc44d3", + "lsr w0, w1, #31": b"207c1f53", + "lsr x0, x1, #63": b"20fc7fd3", + "lsr w0, w1, #0": b"207c0053", + "lsr x0, x1, #0": b"20fc40d3", + "lsr w0, w1, w2": b"2024c21a", + "lsr x0, x1, x2": b"2024c29a", + "lsrv w0, w1, w2": b"2024c21a", + "lsrv x0, x1, x2": b"2024c29a", + "madd w0, w1, w2, w3": b"200c021b", + "madd x0, x1, x2, x3": b"200c029b", + "mov x0, sp": b"e0030091", + "mov w0, wsp": b"e0030011", + "mov x0, x1": b"e00301aa", + "mov w0, w1": b"e003012a", + "mov w0, v1.s[0]": b"203c040e", + "mov w0, v1.s[1]": b"203c0c0e", + "mov w0, v1.s[2]": b"203c140e", + "mov w0, v1.s[3]": b"203c1c0e", + "mov x0, v1.d[0]": b"203c084e", + "mov x0, v1.d[1]": b"203c184e", + "mov sp, x0": b"1f000091", + "mov wsp, w0": b"1f000011", + "msr tpidr_el0, x1": b"41d01bd5", + "mrs x0, tpidr_el0": b"40d03bd5", + "msr s3_3_c13_c0_2, x1": b"41d01bd5", + "mrs x0, s3_3_c13_c0_2": b"40d03bd5", + "msub w0, w1, w2, w3": b"208c021b", + "msub x0, x1, x2, x3": b"208c029b", + "mul w0, w1, w2": b"207c021b", + "mul x0, x1, x2": b"207c029b", + "neg w0, w1": b"e003014b", + "neg x0, x1": b"e00301cb", + "neg w0, w1, asr #1": b"e007814b", + "neg x0, x1, asr #1": b"e00781cb", + "neg w0, w1, asr #31": b"e07f814b", + "neg x0, x1, asr #63": b"e0ff81cb", + "neg w0, w1, asr #0": b"e003814b", + "neg x0, x1, asr #0": b"e00381cb", + "neg w0, w1, lsl #1": b"e007014b", + "neg x0, x1, lsl #1": b"e00701cb", + "neg w0, w1, lsl #31": b"e07f014b", + "neg x0, x1, lsl #63": b"e0ff01cb", + "neg w0, w1, lsl #0": b"e003014b", + "neg x0, x1, lsl #0": b"e00301cb", + "neg w0, w1, lsr #1": b"e007414b", + "neg x0, x1, lsr #1": b"e00741cb", + "neg w0, w1, lsr #31": b"e07f414b", + "neg x0, x1, lsr #63": b"e0ff41cb", + "neg w0, w1, lsr #0": b"e003414b", + "neg x0, x1, lsr #0": b"e00341cb", + "nop": b"1f2003d5", + "orr w0, w1, #0xffff0000": b"203c1032", + "orr x0, x1, #0x0000ffff0000ffff": b"203c00b2", + "orr w0, w1, #0xffff": b"203c0032", + "orr w0, w1, #1": b"20000032", + "orr x0, x1, #1": b"200040b2", + "orr x0, x1, #0xffff0000ffff0000": b"203c10b2", + "orr w0, w1, w2": b"2000022a", + "orr x0, x1, x2": b"200002aa", + "orr w0, w1, w2, asr #1": b"2004822a", + "orr x0, x1, x2, asr #1": b"200482aa", + "orr w0, w1, w2, asr #31": b"207c822a", + "orr x0, x1, x2, asr #63": b"20fc82aa", + "orr w0, w1, w2, asr #0": b"2000822a", + "orr x0, x1, x2, asr #0": b"200082aa", + "orr w0, w1, w2, lsl #1": b"2004022a", + "orr x0, x1, x2, lsl #1": b"200402aa", + "orr w0, w1, w2, lsl #31": b"207c022a", + "orr x0, x1, x2, lsl #63": b"20fc02aa", + "orr w0, w1, w2, lsl #0": b"2000022a", + "orr x0, x1, x2, lsl #0": b"200002aa", + "orr w0, w1, w2, lsr #1": b"2004422a", + "orr x0, x1, x2, lsr #1": b"200442aa", + "orr w0, w1, w2, lsr #31": b"207c422a", + "orr x0, x1, x2, lsr #63": b"20fc42aa", + "orr w0, w1, w2, lsr #0": b"2000422a", + "orr x0, x1, x2, lsr #0": b"200042aa", + "orr w0, w1, w2, ror #1": b"2004c22a", + "orr x0, x1, x2, ror #1": b"2004c2aa", + "orr w0, w1, w2, ror #31": b"207cc22a", + "orr x0, x1, x2, ror #63": b"20fcc2aa", + "orr w0, w1, w2, ror #0": b"2000c22a", + "orr x0, x1, x2, ror #0": b"2000c2aa", + "orr v0.16b, v1.16b, v2.16b": b"201ca24e", + "orr v0.8b, v1.8b, v2.8b": b"201ca20e", + "rbit w0, w1": b"2000c05a", + "rbit x0, x1": b"2000c0da", + "ret": b"c0035fd6", + "ret X0": b"00005fd6", + "rev w0, w1": b"2008c05a", + "rev x0, x1": b"200cc0da", + "sbfiz w0, w1, #17, #15": b"20380f13", + "sbfiz x0, x1, #33, #31": b"20785f93", + "sbfiz w0, w1, #31, #1": b"20000113", + "sbfiz x0, x1, #63, #1": b"20004193", + "sbfiz w0, w1, #0, #32": b"207c0013", + "sbfiz x0, x1, #0, #64": b"20fc4093", + "sbfiz w0, w1, #0, #1": b"20000013", + "sbfiz x0, x1, #0, #1": b"20004093", + "sbfm w0, w1, #3, #5": b"20140313", + "sbfm x0, x1, #3, #5": b"20144393", + "sbfm w0, w1, #0, #31": b"207c0013", + "sbfm x0, x1, #0, #63": b"20fc4093", + "sbfm w0, w1, #0, #0": b"20000013", + "sbfm x0, x1, #0, #0": b"20004093", + "sbfm w0, w1, #5, #3": b"200c0513", + "sbfm x0, x1, #5, #3": b"200c4593", + "sbfm w0, w1, #31, #0": b"20001f13", + "sbfm x0, x1, #63, #0": b"20007f93", + "sbfm w0, w1, #1, #0": b"20000113", + "sbfm x0, x1, #1, #0": b"20004193", + "sbfm w0, w1, #0, #7": b"201c0013", + "sbfm x0, x1, #0, #7": b"201c4093", + "sbfm w0, w1, #0, #15": b"203c0013", + "sbfm x0, x1, #0, #15": b"203c4093", + "sbfm x0, x1, #0, #31": b"207c4093", + "sbfx w0, w1, #16, #16": b"207c1013", + "sbfx x0, x1, #32, #32": b"20fc6093", + "sbfx w0, w1, #31, #1": b"207c1f13", + "sbfx x0, x1, #63, #1": b"20fc7f93", + "sbfx w0, w1, #0, #32": b"207c0013", + "sbfx x0, x1, #0, #64": b"20fc4093", + "sbfx w0, w1, #0, #1": b"20000013", + "sbfx x0, x1, #0, #1": b"20004093", + "stp w1, w2, [sp]": b"e10b0029", + "stp x1, x2, [sp]": b"e10b00a9", + "stp w1, w2, [sp, #8]": b"e10b0129", + "stp x1, x2, [sp, #8]": b"e18b00a9", + "stp w1, w2, [sp, #252]": b"e18b1f29", + "stp x1, x2, [sp, #504]": b"e18b1fa9", + "stp w1, w2, [sp, #-256]": b"e10b2029", + "stp x1, x2, [sp, #-512]": b"e10b20a9", + "stp w1, w2, [sp], #8": b"e10b8128", + "stp x1, x2, [sp], #8": b"e18b80a8", + "stp w1, w2, [sp], #252": b"e18b9f28", + "stp x1, x2, [sp], #504": b"e18b9fa8", + "stp w1, w2, [sp], #-256": b"e10ba028", + "stp x1, x2, [sp], #-512": b"e10ba0a8", + "stp w1, w2, [sp, #8]!": b"e10b8129", + "stp x1, x2, [sp, #8]!": b"e18b80a9", + "stp w1, w2, [sp, #252]!": b"e18b9f29", + "stp x1, x2, [sp, #504]!": b"e18b9fa9", + "stp w1, w2, [sp, #-256]!": b"e10ba029", + "stp x1, x2, [sp, #-512]!": b"e10ba0a9", + "stp q1, q2, [sp]": b"e10b00ad", + "stp s1, s2, [sp]": b"e10b002d", + "stp d1, d2, [sp]": b"e10b006d", + "stp q1, q2, [sp, #16]": b"e18b00ad", + "stp s1, s2, [sp, #8]": b"e10b012d", + "stp d1, d2, [sp, #8]": b"e18b006d", + "stp q1, q2, [sp, #1008]": b"e18b1fad", + "stp s1, s2, [sp, #252]": b"e18b1f2d", + "stp d1, d2, [sp, #504]": b"e18b1f6d", + "stp q1, q2, [sp, #-1024]": b"e10b20ad", + "stp s1, s2, [sp, #-256]": b"e10b202d", + "stp d1, d2, [sp, #-512]": b"e10b206d", + "stp q1, q2, [sp], #16": b"e18b80ac", + "stp s1, s2, [sp], #8": b"e10b812c", + "stp d1, d2, [sp], #8": b"e18b806c", + "stp q1, q2, [sp], #1008": b"e18b9fac", + "stp s1, s2, [sp], #252": b"e18b9f2c", + "stp d1, d2, [sp], #504": b"e18b9f6c", + "stp q1, q2, [sp], #-1024": b"e10ba0ac", + "stp s1, s2, [sp], #-256": b"e10ba02c", + "stp d1, d2, [sp], #-512": b"e10ba06c", + "stp q1, q2, [sp, #16]!": b"e18b80ad", + "stp s1, s2, [sp, #8]!": b"e10b812d", + "stp d1, d2, [sp, #8]!": b"e18b806d", + "stp q1, q2, [sp, #1008]!": b"e18b9fad", + "stp s1, s2, [sp, #252]!": b"e18b9f2d", + "stp d1, d2, [sp, #504]!": b"e18b9f6d", + "stp q1, q2, [sp, #-1024]!": b"e10ba0ad", + "stp s1, s2, [sp, #-256]!": b"e10ba02d", + "stp d1, d2, [sp, #-512]!": b"e10ba06d", + "str w1, [sp]": b"e10300b9", + "str x1, [sp]": b"e10300f9", + "str w1, [sp, #8]": b"e10b00b9", + "str x1, [sp, #8]": b"e10700f9", + "str w1, [sp, #16380]": b"e1ff3fb9", + "str x1, [sp, #32760]": b"e1ff3ff9", + "str w1, [sp], #8": b"e18700b8", + "str x1, [sp], #8": b"e18700f8", + "str w1, [sp], #-256": b"e10710b8", + "str x1, [sp], #-256": b"e10710f8", + "str w1, [sp, #8]!": b"e18f00b8", + "str x1, [sp, #8]!": b"e18f00f8", + "str w1, [sp, #-256]!": b"e10f10b8", + "str x1, [sp, #-256]!": b"e10f10f8", + "str w0, [sp, x1]": b"e06b21b8", + "str x0, [sp, x1]": b"e06b21f8", + "str w0, [sp, x1, lsl #2]": b"e07b21b8", + "str x0, [sp, x1, lsl #3]": b"e07b21f8", + "str w0, [sp, w1, sxtw #2]": b"e0db21b8", + "str w0, [sp, w1, sxtw]": b"e0cb21b8", + "str x0, [sp, w1, sxtw #3]": b"e0db21f8", + "str x0, [sp, w1, sxtw]": b"e0cb21f8", + "str w0, [sp, x1, sxtx #2]": b"e0fb21b8", + "str w0, [sp, x1, sxtx]": b"e0eb21b8", + "str x0, [sp, x1, sxtx #3]": b"e0fb21f8", + "str x0, [sp, x1, sxtx]": b"e0eb21f8", + "str w0, [sp, w1, uxtw #2]": b"e05b21b8", + "str w0, [sp, w1, uxtw]": b"e04b21b8", + "str x0, [sp, w1, uxtw #3]": b"e05b21f8", + "str x0, [sp, w1, uxtw]": b"e04b21f8", + "strb w1, [sp]": b"e1030039", + "strb w1, [sp, #8]": b"e1230039", + "strb w1, [sp, #4095]": b"e1ff3f39", + "strb w1, [sp], #8": b"e1870038", + "strb w1, [sp], #-256": b"e1071038", + "strb w1, [sp, #8]!": b"e18f0038", + "strb w1, [sp, #-256]!": b"e10f1038", + "strb w0, [sp]": b"e0030039", + "strb w0, [sp, x1]": b"e06b2138", + "strb w0, [sp, x1, lsl #0]": b"e07b2138", + "strb w0, [sp, w1, sxtw #0]": b"e0db2138", + "strb w0, [sp, w1, sxtw]": b"e0cb2138", + "strb w0, [sp, x1, sxtx #0]": b"e0fb2138", + "strb w0, [sp, x1, sxtx]": b"e0eb2138", + "strb w0, [sp, w1, uxtw #0]": b"e05b2138", + "strb w0, [sp, w1, uxtw]": b"e04b2138", + "strh w1, [sp]": b"e1030079", + "strh w1, [sp, #8]": b"e1130079", + "strh w1, [sp, #8190]": b"e1ff3f79", + "strh w1, [sp], #8": b"e1870078", + "strh w1, [sp], #-256": b"e1071078", + "strh w1, [sp, #8]!": b"e18f0078", + "strh w1, [sp, #-256]!": b"e10f1078", + "strh w0, [sp, x1]": b"e06b2178", + "strh w0, [sp, x1, lsl #1]": b"e07b2178", + "strh w0, [sp, w1, sxtw #1]": b"e0db2178", + "strh w0, [sp, w1, sxtw]": b"e0cb2178", + "strh w0, [sp, x1, sxtx #1]": b"e0fb2178", + "strh w0, [sp, x1, sxtx]": b"e0eb2178", + "strh w0, [sp, w1, uxtw #1]": b"e05b2178", + "strh w0, [sp, w1, uxtw]": b"e04b2178", + "stur w1, [sp]": b"e10300b8", + "stur x1, [sp]": b"e10300f8", + "stur w1, [sp, #255]": b"e1f30fb8", + "stur x1, [sp, #255]": b"e1f30ff8", + "stur w1, [sp, #-256]": b"e10310b8", + "stur x1, [sp, #-256]": b"e10310f8", + "stur w1, [sp, #1]": b"e11300b8", + "stur x1, [sp, #1]": b"e11300f8", + "sub w0, w1, w2, lsl #0": b"2000024b", + "sub x0, x1, x2, lsl #0": b"200002cb", + "sub w0, w1, w2, lsl #4": b"2010024b", + "sub x0, x1, x2, lsl #4": b"201002cb", + "sub w0, w1, w2, sxtb #0": b"2080224b", + "sub x0, x1, w2, sxtb #0": b"208022cb", + "sub w0, w1, w2, sxtb": b"2080224b", + "sub w0, w1, w2, sxtb #4": b"2090224b", + "sub x0, x1, w2, sxtb #4": b"209022cb", + "sub x0, x1, w2, sxtb": b"208022cb", + "sub w0, w1, w2, sxth #0": b"20a0224b", + "sub x0, x1, w2, sxth #0": b"20a022cb", + "sub w0, w1, w2, sxth": b"20a0224b", + "sub w0, w1, w2, sxth #4": b"20b0224b", + "sub x0, x1, w2, sxth #4": b"20b022cb", + "sub x0, x1, w2, sxth": b"20a022cb", + "sub w0, w1, w2, sxtw #0": b"20c0224b", + "sub x0, x1, w2, sxtw #0": b"20c022cb", + "sub w0, w1, w2, sxtw": b"20c0224b", + "sub w0, w1, w2, sxtw #4": b"20d0224b", + "sub x0, x1, w2, sxtw #4": b"20d022cb", + "sub x0, x1, w2, sxtw": b"20c022cb", + "sub w0, w1, w2, sxtx #0": b"20e0224b", + "sub x0, x1, x2, sxtx #0": b"20e022cb", + "sub w0, w1, w2, sxtx": b"20e0224b", + "sub w0, w1, w2, sxtx #4": b"20f0224b", + "sub x0, x1, x2, sxtx #4": b"20f022cb", + "sub x0, x1, x2, sxtx": b"20e022cb", + "sub w0, w1, w2, uxtb #0": b"2000224b", + "sub x0, x1, w2, uxtb #0": b"200022cb", + "sub w0, w1, w2, uxtb": b"2000224b", + "sub w0, w1, w2, uxtb #4": b"2010224b", + "sub x0, x1, w2, uxtb #4": b"201022cb", + "sub x0, x1, w2, uxtb": b"200022cb", + "sub w0, w1, w2, uxth #0": b"2020224b", + "sub x0, x1, w2, uxth #0": b"202022cb", + "sub w0, w1, w2, uxth": b"2020224b", + "sub w0, w1, w2, uxth #4": b"2030224b", + "sub x0, x1, w2, uxth #4": b"203022cb", + "sub x0, x1, w2, uxth": b"202022cb", + "sub w0, w1, w2, uxtw #0": b"2040224b", + "sub x0, x1, w2, uxtw #0": b"204022cb", + "sub w0, w1, w2, uxtw": b"2040224b", + "sub w0, w1, w2, uxtw #4": b"2050224b", + "sub x0, x1, w2, uxtw #4": b"205022cb", + "sub x0, x1, w2, uxtw": b"204022cb", + "sub w0, w1, w2, uxtx #0": b"2060224b", + "sub x0, x1, x2, uxtx #0": b"206022cb", + "sub w0, w1, w2, uxtx": b"2060224b", + "sub w0, w1, w2, uxtx #4": b"2070224b", + "sub x0, x1, x2, uxtx #4": b"207022cb", + "sub x0, x1, x2, uxtx": b"206022cb", + "sub w0, w1, #1": b"20040051", + "sub x0, x1, #1": b"200400d1", + "sub w0, w1, #1, lsl #0": b"20040051", + "sub x0, x1, #1, lsl #0": b"200400d1", + "sub w0, w1, #1, lsl #12": b"20044051", + "sub x0, x1, #1, lsl #12": b"200440d1", + "sub w0, w1, #4095": b"20fc3f51", + "sub x0, x1, #4095": b"20fc3fd1", + "sub w0, w1, #0": b"20000051", + "sub x0, x1, #0": b"200000d1", + "sub d0, d1, d2": b"2084e27e", + "sub w0, w1, w2": b"2000024b", + "sub x0, x1, x2": b"200002cb", + "sub w0, w1, w2, asr #1": b"2004824b", + "sub x0, x1, x2, asr #1": b"200482cb", + "sub w0, w1, w2, asr #31": b"207c824b", + "sub x0, x1, x2, asr #63": b"20fc82cb", + "sub w0, w1, w2, asr #0": b"2000824b", + "sub x0, x1, x2, asr #0": b"200082cb", + "sub w0, w1, w2, lsl #1": b"2004024b", + "sub x0, x1, x2, lsl #1": b"200402cb", + "sub w0, w1, w2, lsl #31": b"207c024b", + "sub x0, x1, x2, lsl #63": b"20fc02cb", + "sub w0, w1, w2, lsr #1": b"2004424b", + "sub x0, x1, x2, lsr #1": b"200442cb", + "sub w0, w1, w2, lsr #31": b"207c424b", + "sub x0, x1, x2, lsr #63": b"20fc42cb", + "sub w0, w1, w2, lsr #0": b"2000424b", + "sub x0, x1, x2, lsr #0": b"200042cb", + "sub v0.16b, v1.16b, v2.16b": b"2084226e", + "sub v0.2d, v1.2d, v2.2d": b"2084e26e", + "sub v0.2s, v1.2s, v2.2s": b"2084a22e", + "sub v0.4h, v1.4h, v2.4h": b"2084622e", + "sub v0.4s, v1.4s, v2.4s": b"2084a26e", + "sub v0.8b, v1.8b, v2.8b": b"2084222e", + "sub v0.8h, v1.8h, v2.8h": b"2084626e", + "subs w0, w1, w2, lsl #0": b"2000026b", + "subs x0, x1, x2, lsl #0": b"200002eb", + "subs w0, w1, w2, lsl #4": b"2010026b", + "subs x0, x1, x2, lsl #4": b"201002eb", + "subs w0, w1, w2, sxtb #0": b"2080226b", + "subs x0, x1, w2, sxtb #0": b"208022eb", + "subs w0, w1, w2, sxtb": b"2080226b", + "subs w0, w1, w2, sxtb #4": b"2090226b", + "subs x0, x1, w2, sxtb #4": b"209022eb", + "subs x0, x1, w2, sxtb": b"208022eb", + "subs w0, w1, w2, sxth #0": b"20a0226b", + "subs x0, x1, w2, sxth #0": b"20a022eb", + "subs w0, w1, w2, sxth": b"20a0226b", + "subs w0, w1, w2, sxth #4": b"20b0226b", + "subs x0, x1, w2, sxth #4": b"20b022eb", + "subs x0, x1, w2, sxth": b"20a022eb", + "subs w0, w1, w2, sxtw #0": b"20c0226b", + "subs x0, x1, w2, sxtw #0": b"20c022eb", + "subs w0, w1, w2, sxtw": b"20c0226b", + "subs w0, w1, w2, sxtw #4": b"20d0226b", + "subs x0, x1, w2, sxtw #4": b"20d022eb", + "subs x0, x1, w2, sxtw": b"20c022eb", + "subs w0, w1, w2, sxtx #0": b"20e0226b", + "subs x0, x1, x2, sxtx #0": b"20e022eb", + "subs w0, w1, w2, sxtx": b"20e0226b", + "subs w0, w1, w2, sxtx #4": b"20f0226b", + "subs x0, x1, x2, sxtx #4": b"20f022eb", + "subs x0, x1, x2, sxtx": b"20e022eb", + "subs w0, w1, w2, uxtb #0": b"2000226b", + "subs x0, x1, w2, uxtb #0": b"200022eb", + "subs w0, w1, w2, uxtb": b"2000226b", + "subs w0, w1, w2, uxtb #4": b"2010226b", + "subs x0, x1, w2, uxtb #4": b"201022eb", + "subs x0, x1, w2, uxtb": b"200022eb", + "subs w0, w1, w2, uxth #0": b"2020226b", + "subs x0, x1, w2, uxth #0": b"202022eb", + "subs w0, w1, w2, uxth": b"2020226b", + "subs w0, w1, w2, uxth #4": b"2030226b", + "subs x0, x1, w2, uxth #4": b"203022eb", + "subs x0, x1, w2, uxth": b"202022eb", + "subs w0, w1, w2, uxtw #0": b"2040226b", + "subs x0, x1, w2, uxtw #0": b"204022eb", + "subs w0, w1, w2, uxtw": b"2040226b", + "subs w0, w1, w2, uxtw #4": b"2050226b", + "subs x0, x1, w2, uxtw #4": b"205022eb", + "subs x0, x1, w2, uxtw": b"204022eb", + "subs w0, w1, w2, uxtx #0": b"2060226b", + "subs x0, x1, x2, uxtx #0": b"206022eb", + "subs w0, w1, w2, uxtx": b"2060226b", + "subs w0, w1, w2, uxtx #4": b"2070226b", + "subs x0, x1, x2, uxtx #4": b"207022eb", + "subs x0, x1, x2, uxtx": b"206022eb", + "subs w0, w1, #1": b"20040071", + "subs x0, x1, #1": b"200400f1", + "subs w0, w1, #1, lsl #0": b"20040071", + "subs x0, x1, #1, lsl #0": b"200400f1", + "subs w0, w1, #1, lsl #12": b"20044071", + "subs x0, x1, #1, lsl #12": b"200440f1", + "subs w0, w1, #4095": b"20fc3f71", + "subs x0, x1, #4095": b"20fc3ff1", + "subs w0, w1, #0": b"20000071", + "subs x0, x1, #0": b"200000f1", + "subs w0, w1, w2": b"2000026b", + "subs x0, x1, x2": b"200002eb", + "subs w0, w1, w2, asr #1": b"2004826b", + "subs x0, x1, x2, asr #1": b"200482eb", + "subs w0, w1, w2, asr #31": b"207c826b", + "subs x0, x1, x2, asr #63": b"20fc82eb", + "subs w0, w1, w2, asr #0": b"2000826b", + "subs x0, x1, x2, asr #0": b"200082eb", + "subs w0, w1, w2, lsl #1": b"2004026b", + "subs x0, x1, x2, lsl #1": b"200402eb", + "subs w0, w1, w2, lsl #31": b"207c026b", + "subs x0, x1, x2, lsl #63": b"20fc02eb", + "subs w0, w1, w2, lsr #1": b"2004426b", + "subs x0, x1, x2, lsr #1": b"200442eb", + "subs w0, w1, w2, lsr #31": b"207c426b", + "subs x0, x1, x2, lsr #63": b"20fc42eb", + "subs w0, w1, w2, lsr #0": b"2000426b", + "subs x0, x1, x2, lsr #0": b"200042eb", + "sxtb w0, w1": b"201c0013", + "sxtb x0, x1": b"201c4093", + "sxth w0, w1": b"203c0013", + "sxth x0, x1": b"203c4093", + "sxtw x0, x1": b"207c4093", + "tbnz w0, 31, .+8": b"4000f837", + "tbnz x0, 63, .+8": b"4000f8b7", + "tbnz w0, 0, .+8": b"40000037", + "tbnz x0, 0, .+8": b"40000037", + "tbnz w0, 3, .+8": b"40001837", + "tbnz x0, 3, .+8": b"40001837", + "tbz w0, 31, .+8": b"4000f836", + "tbz x0, 63, .+8": b"4000f8b6", + "tbz w0, 0, .+8": b"40000036", + "tbz x0, 0, .+8": b"40000036", + "tbz w0, 3, .+8": b"40001836", + "tbz x0, 3, .+8": b"40001836", + "tst w1, #0xffff0000": b"3f3c1072", + "tst x1, #0x0000ffff0000ffff": b"3f3c00f2", + "tst w1, #0xffff": b"3f3c0072", + "tst w1, #1": b"3f000072", + "tst x1, #1": b"3f0040f2", + "tst x1, #0xffff0000ffff0000": b"3f3c10f2", + "tst w1, w2": b"3f00026a", + "tst x1, x2": b"3f0002ea", + "tst w1, w2, asr #4": b"3f10826a", + "tst x1, x2, asr #4": b"3f1082ea", + "tst w1, w2, asr #31": b"3f7c826a", + "tst x1, x2, asr #63": b"3ffc82ea", + "tst w1, w2, asr #0": b"3f00826a", + "tst x1, x2, asr #0": b"3f0082ea", + "tst w1, w2, lsl #4": b"3f10026a", + "tst x1, x2, lsl #4": b"3f1002ea", + "tst w1, w2, lsl #31": b"3f7c026a", + "tst x1, x2, lsl #63": b"3ffc02ea", + "tst w1, w2, lsl #0": b"3f00026a", + "tst x1, x2, lsl #0": b"3f0002ea", + "tst w1, w2, lsr #4": b"3f10426a", + "tst x1, x2, lsr #4": b"3f1042ea", + "tst w1, w2, lsr #31": b"3f7c426a", + "tst x1, x2, lsr #63": b"3ffc42ea", + "tst w1, w2, lsr #0": b"3f00426a", + "tst x1, x2, lsr #0": b"3f0042ea", + "tst w1, w2, ror #4": b"3f10c26a", + "tst x1, x2, ror #4": b"3f10c2ea", + "tst w1, w2, ror #31": b"3f7cc26a", + "tst x1, x2, ror #63": b"3ffcc2ea", + "tst w1, w2, ror #0": b"3f00c26a", + "tst x1, x2, ror #0": b"3f00c2ea", + "ubfiz w0, w1, #17, #15": b"20380f53", + "ubfiz x0, x1, #33, #31": b"20785fd3", + "ubfiz w0, w1, #31, #1": b"20000153", + "ubfiz x0, x1, #63, #1": b"200041d3", + "ubfiz w0, w1, #0, #32": b"207c0053", + "ubfiz x0, x1, #0, #64": b"20fc40d3", + "ubfiz w0, w1, #0, #1": b"20000053", + "ubfiz x0, x1, #0, #1": b"200040d3", + "ubfm w0, w1, #3, #5": b"20140353", + "ubfm x0, x1, #3, #5": b"201443d3", + "ubfm w0, w1, #0, #31": b"207c0053", + "ubfm x0, x1, #0, #63": b"20fc40d3", + "ubfm w0, w1, #0, #0": b"20000053", + "ubfm x0, x1, #0, #0": b"200040d3", + "ubfm w0, w1, #5, #3": b"200c0553", + "ubfm x0, x1, #5, #3": b"200c45d3", + "ubfm w0, w1, #31, #0": b"20001f53", + "ubfm x0, x1, #63, #0": b"20007fd3", + "ubfm w0, w1, #1, #0": b"20000153", + "ubfm x0, x1, #1, #0": b"200041d3", + "ubfm w0, w1, #0, #7": b"201c0053", + "ubfm w0, w1, #0, #15": b"203c0053", + "ubfx w0, w1, #16, #16": b"207c1053", + "ubfx x0, x1, #32, #32": b"20fc60d3", + "ubfx w0, w1, #31, #1": b"207c1f53", + "ubfx x0, x1, #63, #1": b"20fc7fd3", + "ubfx w0, w1, #0, #32": b"207c0053", + "ubfx x0, x1, #0, #64": b"20fc40d3", + "ubfx w0, w1, #0, #1": b"20000053", + "ubfx x0, x1, #0, #1": b"200040d3", + "udiv w0, w1, w2": b"2008c21a", + "udiv x0, x1, x2": b"2008c29a", + "umov w0, v1.b[0]": b"203c010e", + "umov w0, v1.b[1]": b"203c030e", + "umov w0, v1.b[2]": b"203c050e", + "umov w0, v1.b[3]": b"203c070e", + "umov w0, v1.b[4]": b"203c090e", + "umov w0, v1.b[5]": b"203c0b0e", + "umov w0, v1.b[6]": b"203c0d0e", + "umov w0, v1.b[7]": b"203c0f0e", + "umov w0, v1.b[8]": b"203c110e", + "umov w0, v1.b[9]": b"203c130e", + "umov w0, v1.b[10]": b"203c150e", + "umov w0, v1.b[11]": b"203c170e", + "umov w0, v1.b[12]": b"203c190e", + "umov w0, v1.b[13]": b"203c1b0e", + "umov w0, v1.b[14]": b"203c1d0e", + "umov w0, v1.b[15]": b"203c1f0e", + "umov w0, v1.h[0]": b"203c020e", + "umov w0, v1.h[1]": b"203c060e", + "umov w0, v1.h[2]": b"203c0a0e", + "umov w0, v1.h[3]": b"203c0e0e", + "umov w0, v1.h[4]": b"203c120e", + "umov w0, v1.h[5]": b"203c160e", + "umov w0, v1.h[6]": b"203c1a0e", + "umov w0, v1.h[7]": b"203c1e0e", + "umov w0, v1.s[0]": b"203c040e", + "umov w0, v1.s[1]": b"203c0c0e", + "umov w0, v1.s[2]": b"203c140e", + "umov w0, v1.s[3]": b"203c1c0e", + "umov x0, v1.d[0]": b"203c084e", + "umov x0, v1.d[1]": b"203c184e", + "umulh x0, x1, x2": b"207cc29b", + "uxtb w0, w1": b"201c0053", + "uxth w0, w1": b"203c0053", + "mrs x0, dczid_el0": b"e0003bd5", + "dmb #0": b"bf3003d5", + "dmb #1": b"bf3103d5", + "dmb #2": b"bf3203d5", + "dmb #3": b"bf3303d5", + "dmb #4": b"bf3403d5", + "dmb #5": b"bf3503d5", + "dmb #6": b"bf3603d5", + "dmb #7": b"bf3703d5", + "dmb #8": b"bf3803d5", + "dmb #9": b"bf3903d5", + "dmb #10": b"bf3a03d5", + "dmb #11": b"bf3b03d5", + "dmb #12": b"bf3c03d5", + "dmb #13": b"bf3d03d5", + "dmb #14": b"bf3e03d5", + "dmb #15": b"bf3f03d5", + "dmb sy": b"bf3f03d5", + "dmb st": b"bf3e03d5", + "dmb ld": b"bf3d03d5", + "dmb ish": b"bf3b03d5", + "dmb ishst": b"bf3a03d5", + "dmb ishld": b"bf3903d5", + "dmb nsh": b"bf3703d5", + "dmb nshst": b"bf3603d5", + "dmb nshld": b"bf3503d5", + "dmb osh": b"bf3303d5", + "dmb oshst": b"bf3203d5", + "dmb oshld": b"bf3103d5", + "mov w0, #0x7ffffffe": b"e0771f32", + "mov x0, #0x7ffffffffffffffe": b"e0f77fb2", + "mov w0, #0xffffffff": b"00008012", + "mov x0, #0xffffffffffffffff": b"00008092", + "mov w0, #-1": b"00008012", + "mov x0, #-1": b"00008092", + "movn x0, #0": b"00008092", + "mov w0, #1": b"20008052", + "mov x0, #1": b"200080d2", + "mov w0, #0xffff0000": b"e0ffbf52", + "mov x0, #0xffff000000000000": b"e0ffffd2", + "mov w0, #0": b"00008052", + "mov x0, #0": b"000080d2", + "movk w0, #0x1001": b"20008272", + "movk x0, #0x1001": b"200082f2", + "movk w0, #0xffff": b"e0ff9f72", + "movk x0, #0xffff": b"e0ff9ff2", + "movk w0, #0": b"00008072", + "movk x0, #0": b"000080f2", + "movk w0, #0x1001, lsl #0": b"20008272", + "movk x0, #0x1001, lsl #0": b"200082f2", + "movk w0, #0xffff, lsl #0": b"e0ff9f72", + "movk x0, #0xffff, lsl #0": b"e0ff9ff2", + "movk w0, #0, lsl #0": b"00008072", + "movk x0, #0, lsl #0": b"000080f2", + "movk w0, #0x1001, lsl #16": b"2000a272", + "movk x0, #0x1001, lsl #16": b"2000a2f2", + "movk w0, #0xffff, lsl #16": b"e0ffbf72", + "movk x0, #0xffff, lsl #16": b"e0ffbff2", + "movk w0, #0, lsl #16": b"0000a072", + "movk x0, #0, lsl #16": b"0000a0f2", + "movk x0, #0x1001, lsl #32": b"2000c2f2", + "movk x0, #0xffff, lsl #32": b"e0ffdff2", + "movk x0, #0, lsl #32": b"0000c0f2", + "movk x0, #0x1001, lsl #48": b"2000e2f2", + "movk x0, #0xffff, lsl #48": b"e0fffff2", + "movk x0, #0, lsl #48": b"0000e0f2", + "movn w0, #0": b"00008012", + "movn w0, #65535": b"e0ff9f12", + "movn x0, #65535": b"e0ff9f92", + "movn w0, #65535, lsl #16": b"e0ffbf12", + "movn x0, #65535, lsl #16": b"e0ffbf92", + "movn x0, #65535, lsl #32": b"e0ffdf92", + "movn x0, #65535, lsl #48": b"e0ffff92", + "movz w0, #0": b"00008052", + "movz x0, #0": b"000080d2", + "movz w0, #65535": b"e0ff9f52", + "movz x0, #65535": b"e0ff9fd2", + "movz w0, #65535, lsl #16": b"e0ffbf52", + "movz x0, #65535, lsl #16": b"e0ffbfd2", + "movz x0, #65535, lsl #32": b"e0ffdfd2", + "movz x0, #65535, lsl #48": b"e0ffffd2", + "svc #0": b"010000d4", + "svc #1": b"210000d4", +} diff --git a/tests/native/test_aarch64cpu.py b/tests/native/test_aarch64cpu.py index 6e18e582d..7eb5d9298 100644 --- a/tests/native/test_aarch64cpu.py +++ b/tests/native/test_aarch64cpu.py @@ -1,8 +1,8 @@ +import binascii import unittest from capstone import CS_MODE_ARM from functools import wraps -from keystone import Ks, KS_ARCH_ARM64, KS_MODE_LITTLE_ENDIAN from manticore.core.smtlib import ConstraintSet, Z3Solver from manticore.native.memory import SMemory64, Memory64 @@ -16,14 +16,36 @@ from manticore.utils.fallback_emulator import UnicornEmulator from tests.native.test_aarch64rf import MAGIC_64, MAGIC_32 -ks = Ks(KS_ARCH_ARM64, KS_MODE_LITTLE_ENDIAN) +from tests.native.aarch64cpu_asm_cache import assembly_cache +ks = None + + +def _ks_assemble(asm: str) -> bytes: + """Assemble the given string using Keystone.""" + # Explicitly uses late importing so that Keystone will only be imported if this is called. + # This lets us avoid requiring installation of Keystone for running tests. + global ks + from keystone import Ks, KS_ARCH_ARM64, KS_MODE_LITTLE_ENDIAN + + if ks is None: + ks = Ks(KS_ARCH_ARM64, KS_MODE_LITTLE_ENDIAN) -def assemble(asm): ords = ks.asm(asm)[0] if not ords: - raise Exception(f"Bad assembly: '{asm}'") - return "".join(map(chr, ords)) + raise Exception(f"bad assembly: {asm}") + return binascii.hexlify(bytearray(ords)) + + +def assemble(asm: str) -> bytes: + """ + Assemble the given string. + + An assembly cache is first checked, and if there is no entry there, then Keystone is used. + """ + if asm in assembly_cache: + return binascii.unhexlify(assembly_cache[asm]) + return binascii.unhexlify(_ks_assemble(asm)) # XXX: These functions are taken from 'test_armv7cpu' and modified to be more diff --git a/tests/native/test_armv7cpu.py b/tests/native/test_armv7cpu.py index e601febf2..144c96d95 100644 --- a/tests/native/test_armv7cpu.py +++ b/tests/native/test_armv7cpu.py @@ -1,9 +1,9 @@ import unittest import struct +import binascii from capstone import CS_MODE_THUMB, CS_MODE_ARM from functools import wraps -from keystone import Ks, KS_ARCH_ARM, KS_MODE_ARM, KS_MODE_THUMB from manticore.native.cpu.abstractcpu import ConcretizeRegister from manticore.native.cpu.arm import Armv7Cpu as Cpu, Mask, Interruption @@ -13,25 +13,279 @@ from manticore.native.memory import SMemory32 from manticore.utils.helpers import pickle_dumps -ks = Ks(KS_ARCH_ARM, KS_MODE_ARM) -ks_thumb = Ks(KS_ARCH_ARM, KS_MODE_THUMB) +ks = None +ks_thumb = None import logging logger = logging.getLogger("ARM_TESTS") solver = Z3Solver.instance() +# This is a cache of assembled instructions. +# This exists so that Manticore's tests can run without requiring that the +# Keystone dependency be installed. +# If additional test cases are added that require new instructions, this cache +# will need to be updated. +assembly_cache = { + CS_MODE_ARM: { + "adc r3, r1, r2": b"0230a1e0", + "adc r3, r1, #0x18000": b"0639a1e2", + "adc r3, r1, #24, 20": b"183aa1e2", + "adc r3, r1, r2, ror #3": b"e231a1e0", + "add r3, r1, 0x1000000": b"013481e2", + "add r3, r1, 0x18000": b"063981e2", + "add r3, r1, 24, 20": b"183a81e2", + "add r3, r1, 0xff000000": b"ff3481e2", + "add r3, r1, 0x100": b"013c81e2", + "add r3, r1, 55": b"373081e2", + "add r3, r1, 0x1": b"013081e2", + "add r3, r1, r2": b"023081e0", + "add r3, r1, r2, asr #3": b"c23181e0", + "add r3, r1, r2, asr r4": b"523481e0", + "add r3, r1, r2, lsl #3": b"823181e0", + "add r3, r1, r2, lsl r4": b"123481e0", + "add r3, r1, r2, lsr #3": b"a23181e0", + "add r3, r1, r2, lsr r4": b"323481e0", + "add r3, r1, r2, ror #3": b"e23181e0", + "add r3, r1, r2, ror r4": b"723481e0", + "add r3, r1, r2, rrx": b"623081e0", + "add pc, pc, r1": b"01f08fe0", + "adds r3, r1, 0x1000000": b"013491e2", + "adds r3, r1, 0x80000000": b"023191e2", + "adds r3, r1, 0xff000000": b"ff3491e2", + "adds r3, r1, 0x100": b"013c91e2", + "adds r3, r1, 55": b"373091e2", + "adds r3, r1, 0x1": b"013091e2", + "adds r3, r3, 0x0": b"003093e2", + "adds r3, r1, r2": b"023091e0", + "adds r3, r1, r2, asr #3": b"c23191e0", + "adds r3, r1, r2, rrx": b"623091e0", + "adr r0, #16": b"10008fe2", + "add r0, PC, #0x10": b"10008fe2", + "add r0, PC, #1, 28": b"10008fe2", + "and r2, r2, #1": b"012002e2", + "and r2, r2, #0x18000": b"062902e2", + "and r2, r2, #24, 20": b"182a02e2", + "and r1, r1, r2": b"021001e0", + "BIC R2, R1, #0x10": b"1020c1e3", + "BIC R2, R1, #0x18000": b"0629c1e3", + "BIC R2, R1, #24, 20": b"182ac1e3", + "bl 0x170": b"5a0000eb", + "bl #-4": b"fdffffeb", + "BLX R1": b"31ff2fe1", + "blx r1": b"31ff2fe1", + "bx r1": b"11ff2fe1", + "clz r1, r2": b"121f6fe1", + "cmn r0, #0x18000": b"060970e3", + "cmn r0, #24, 20": b"180a70e3", + "cmp r0, 0": b"000050e3", + "cmp r0, 0x40000000": b"010150e3", + "cmp r0, 3": b"030050e3", + "cmp r0, #0x18000": b"060950e3", + "cmp r0, #24, 20": b"180a50e3", + "cmp r0, 2": b"020050e3", + "cmp r0, 5": b"050050e3", + "cmp r0, 0xa0000000": b"0a0250e3", + "dmb ish": b"5bf07ff5", + "eor r2, r3, #5": b"052023e2", + "eor r2, r3, #0x18000": b"062923e2", + "eor r2, r3, #24, 20": b"182a23e2", + "eor r2, r3, r4": b"042023e0", + "eor r2, r3, r4, LSL #4": b"042223e0", + "eors r2, r3": b"032032e0", + "adds r2, r1, #0x1": b"012091e2", + "tst r3, r1": b"010013e1", + "ldm sp, {r1, r2, r3}": b"0e009de8", + "ldm sp!, {r1, r2, r3}": b"0e00bde8", + "ldmda r0!, {r1, r2, r3}": b"0e0030e8", + "ldmdb r0!, {r1, r2, r3}": b"0e0030e9", + "ldmia r0!, {r1, r2, r3}": b"0e00b0e8", + "ldmib r0!, {r1, r2, r3}": b"0e00b0e9", + "ldr r1, [sp, #-4]": b"04101de5", + "ldr r1, [sp]": b"00109de5", + "ldr pc, [sp]": b"00f09de5", + "ldr r1, [sp, #4]": b"04109de5", + "ldr r1, [sp], #-5": b"05101de4", + "ldr r1, [sp], #5": b"05109de4", + "ldr r1, [sp, #-4]!": b"04103de5", + "ldr r1, [sp, #4]!": b"0410bde5", + "ldr r1, [sp, r2]": b"02109de7", + "ldr r1, [sp, -r2]": b"02101de7", + "ldr r1, [sp, -r2, lsl #3]": b"82111de7", + "ldr r1, [sp, r2, lsl #3]": b"82119de7", + "ldr r1, [sp], r2": b"02109de6", + "ldr r1, [sp], -r2, lsl #3": b"82111de6", + "ldr r1, [sp, r2]!": b"0210bde7", + "ldr r1, [sp, -r2, lsl #3]!": b"82113de7", + "ldrb r1, [sp]": b"0010dde5", + "ldrb r1, [sp, r2]": b"0210dde7", + "ldrd r2, [sp]": b"d020cde1", + "ldrh r1, [sp]": b"b010dde1", + "ldrh r1, [sp, r2]": b"b2109de1", + "ldrsb r1, [sp]": b"d010dde1", + "ldrsb r1, [sp, r2]": b"d2109de1", + "ldrsh r1, [sp]": b"f010dde1", + "ldrsh r1, [sp, r2]": b"f2109de1", + "lsls r2, r2, #0x1f": b"822fb0e1", + "lsls r4, r3, 31": b"834fb0e1", + "lsls r4, r3, 1": b"8340b0e1", + "lsls r4, r3, r2": b"1342b0e1", + "lsr r0, r0, r2": b"3002a0e1", + "lsr r0, r0, #3": b"a001a0e1", + "MLA R1, R2, R3, R4": b"924321e0", + "mov r0, 0x0": b"0000a0e3", + "mov r0, 0xff000000": b"ff04a0e3", + "mov r0, 0x100": b"010ca0e3", + "mov r0, 42": b"2a00a0e3", + "mov r0, r1": b"0100a0e1", + "mov r0, #0x18000": b"0609a0e3", + "mov r0, #24, 20": b"180aa0e3", + "movs r0, 0": b"0000b0e3", + "movs r0, 0xff000000": b"ff04b0e3", + "movs r0, 0x100": b"010cb0e3", + "movs r0, 0x0e000000": b"0e04b0e3", + "movs r0, 42": b"2a00b0e3", + "movs r0, r1": b"0100b0e1", + "movt R3, #9": b"093040e3", + "movw r0, 0xffff": b"ff0f0fe3", + "movw r0, 0": b"000000e3", + "mrc p15, #0, r2, c13, c0, #3": b"702f1dee", + "MUL R1, R2": b"910201e0", + "MUL R3, R1, R2": b"910203e0", + "mvn r0, #0xFFFFFFFF": b"0000a0e3", + "mvn r0, #0x0": b"0000e0e3", + "mvn r0, #0x18000": b"0609e0e3", + "mvn r0, #24, 20": b"180ae0e3", + "orr r2, r3, #5": b"052083e3", + "orr r2, r3, #0x18000": b"062983e3", + "orr r2, r3, #24, 20": b"182a83e3", + "orr r2, r3, r4": b"042083e1", + "orr r2, r3, r4, LSL #4": b"042283e1", + "orr r2, r3": b"032082e1", + "orrs r2, r3": b"032092e1", + "pop {r1, r2, r3}": b"0e00bde8", + "pop {r1}": b"04109de4", + "push {r1, r2, r3}": b"0e002de9", + "push {r1}": b"04102de5", + "rev r2, r1": b"312fbfe6", + "RSB r2, r2, #31": b"1f2062e2", + "RSB r2, r2, #0x18000": b"062962e2", + "RSB r2, r2, #24, 20": b"182a62e2", + "RSBS r8, r6, #0": b"008076e2", + "rsc r3, r1, #0x18000": b"0639e1e2", + "rsc r3, r1, #24, 20": b"183ae1e2", + "sbc r3, r1, #5": b"0530c1e2", + "sbc r3, r1, #0x18000": b"0639c1e2", + "sbc r3, r1, #24, 20": b"183ac1e2", + "stm sp, {r1, r2, r3}": b"0e008de8", + "stm sp!, {r1, r2, r3}": b"0e00ade8", + "stmda r0!, {r1, r2, r3}": b"0e0020e8", + "stmdb r0!, {r1, r2, r3}": b"0e0020e9", + "stmia r0!, {r1, r2, r3}": b"0e00a0e8", + "stmib r0!, {r1, r2, r3}": b"0e00a0e9", + "str R2, [R1]": b"002081e5", + "str SP, [R1]": b"00d081e5", + "str R1, [R2, R3]": b"031082e7", + "str R1, [R2, R3, LSL #3]": b"831182e7", + "str R1, [R2, #3]!": b"0310a2e5", + "str R1, [R2], #3": b"031082e4", + "strd R2, [R1]": b"f020c1e1", + "sub r3, r1, r2": b"023041e0", + "sub r3, r1, #5": b"053041e2", + "sub r3, r1, #0x18000": b"063941e2", + "sub r3, r1, #24, 20": b"183a41e2", + "svc #0": b"000000ef", + "sxth r1, r2": b"7210bfe6", + "sxth r3, r4": b"7430bfe6", + "sxth r5, r4, ROR #8": b"7454bfe6", + "teq r3, r1": b"010033e1", + "teq r3, #0x18000": b"060933e3", + "teq r3, #24, 20": b"180a33e3", + "BIC R1, #0x10": b"1010c1e3", + "tst r3, #0x18000": b"060913e3", + "tst r3, #24, 20": b"180a13e3", + "UMULLS R1, R2, R1, R2": b"911292e0", + "uqsub8 r3, r1, r2": b"f23f61e6", + "uxtb r1, r2": b"7210efe6", + "uxth r1, r2": b"7210ffe6", + "vldmia r1, {d8, d9, d10}": b"068b91ec", + "vldmia r1!, {d8, d9, d10}": b"068bb1ec", + }, + CS_MODE_THUMB: { + "adds r0, #4": b"0430", + "addw r0, r1, #0x2a": b"01f22a00", + "addw r0, pc, #0x2a": b"0ff22a00", + "adr r0, #16": b"04a0", + "asr.w R5, R6, #3": b"4feae605", + "cbnz r0, #0x2a": b"98b9", + "cbz r0, #0x2a": b"98b1", + "cmp r1, #1": b"0129", + "ite ne": b"14bf", + "mov r2, r12": b"6246", + "mov r3, r12": b"6346", + "mov r4, r12": b"6446", + "itete ne": b"15bf", + "mov r1, #1": b"4ff00101", + "mov r2, #1": b"4ff00102", + "mov r3, #1": b"4ff00103", + "mov r4, #4": b"4ff00404", + "itt ne": b"1cbf", + "lsl.w r5, r6, #3": b"4feac605", + "lsr.w R5, R6, #3": b"4fead605", + "lsr.w R0, R0, R2": b"20fa02f0", + "orn r2, r2, r5": b"62ea0502", + "sbcs r0, r3": b"9841", + "sel r4, r5, r6": b"a5fa86f4", + "subw r0, r1, #0x2a": b"a1f22a00", + "subw r0, pc, #0x2a": b"aff22a00", + " tst r0, r0\n beq label\n bne label\nlabel:\n nop": b"004200d0ffd100bf", + "tbb [r0, r1]": b"d0e801f0", + "tbb [pc, r1]": b"dfe801f0", + "tbh [r0, r1, lsl #1]": b"d0e811f0", + "tbh [pc, r1, lsl #1]": b"dfe811f0", + "adcs r3, r4": b"6341", + "eor r3, #5": b"83f00503", + "lsrs r1, r2": b"d140", + "orr r3, #5": b"43f00503", + "sub r3, #12": b"a3f10c03", + "uadd8 r2, r2, r3": b"82fa43f2", + }, +} + + +def _ks_assemble(asm: str, mode=CS_MODE_ARM) -> bytes: + """Assemble the given string using Keystone using the specified CPU mode.""" + # Explicitly uses late importing so that Keystone will only be imported if this is called. + # This lets us avoid requiring installation of Keystone for running tests. + global ks, ks_thumb + from keystone import Ks, KS_ARCH_ARM, KS_MODE_ARM, KS_MODE_THUMB + + if ks is None: + ks = Ks(KS_ARCH_ARM, KS_MODE_ARM) + if ks_thumb is None: + ks_thumb = Ks(KS_ARCH_ARM, KS_MODE_THUMB) -def assemble(asm, mode=CS_MODE_ARM): if CS_MODE_ARM == mode: ords = ks.asm(asm)[0] + elif CS_MODE_THUMB == mode: ords = ks_thumb.asm(asm)[0] else: raise Exception(f"bad processor mode for assembly: {mode}") if not ords: raise Exception(f"bad assembly: {asm}") - return "".join(map(chr, ords)) + return binascii.hexlify(bytearray(ords)) + + +def assemble(asm: str, mode=CS_MODE_ARM) -> bytes: + """ + Assemble the given string. + + An assembly cache is first checked, and if there is no entry there, then Keystone is used. + """ + if asm in assembly_cache[mode]: + return binascii.unhexlify(assembly_cache[mode][asm]) + return binascii.unhexlify(_ks_assemble(asm, mode=mode)) class Armv7CpuTest(unittest.TestCase): diff --git a/tests/native/test_armv7unicorn.py b/tests/native/test_armv7unicorn.py index c0424dafc..96eb64a56 100644 --- a/tests/native/test_armv7unicorn.py +++ b/tests/native/test_armv7unicorn.py @@ -4,7 +4,6 @@ import struct from capstone import CS_MODE_THUMB, CS_MODE_ARM from functools import wraps -from keystone import Ks, KS_ARCH_ARM, KS_MODE_ARM, KS_MODE_THUMB import logging from unicorn import UC_QUERY_MODE, UC_MODE_THUMB @@ -15,9 +14,10 @@ from manticore.native.memory import ConcretizeMemory, Memory32 from manticore.platforms import linux from manticore.utils.fallback_emulator import UnicornEmulator +import binascii -ks = Ks(KS_ARCH_ARM, KS_MODE_ARM) -ks_thumb = Ks(KS_ARCH_ARM, KS_MODE_THUMB) +ks = None +ks_thumb = None logger = logging.getLogger("ARM_TESTS") @@ -27,8 +27,149 @@ to make sure symbolic values get properly concretized. """ +# This is a cache of assembled instructions. +# This exists so that Manticore's tests can run without requiring that the +# Keystone dependency be installed. +# If additional test cases are added that require new instructions, this cache +# will need to be updated. +assembly_cache = { + CS_MODE_ARM: { + "adc r3, r1, r2": b"0230a1e0", + "adc r3, r1, r2, ror #3": b"e231a1e0", + "add r3, r1, 0x1000000": b"013481e2", + "add r3, r1, 0xff000000": b"ff3481e2", + "add r3, r1, 0x100": b"013c81e2", + "add r3, r1, 55": b"373081e2", + "add r3, r1, 0x1": b"013081e2", + "add r3, r1, r2": b"023081e0", + "add r3, r1, r2, asr #3": b"c23181e0", + "add r3, r1, r2, asr r4": b"523481e0", + "add r3, r1, r2, lsl #3": b"823181e0", + "add r3, r1, r2, lsl r4": b"123481e0", + "add r3, r1, r2, lsr #3": b"a23181e0", + "add r3, r1, r2, lsr r4": b"323481e0", + "add r3, r1, r2, ror #3": b"e23181e0", + "add r3, r1, r2, ror r4": b"723481e0", + "add r3, r1, r2, rrx": b"623081e0", + "adds r3, r1, 0x1000000": b"013491e2", + "adds r3, r1, 0x80000000": b"023191e2", + "adds r3, r1, 0xff000000": b"ff3491e2", + "adds r3, r1, 0x100": b"013c91e2", + "adds r3, r1, 55": b"373091e2", + "adds r3, r1, 0x1": b"013091e2", + "adds r3, r3, 0x0": b"003093e2", + "adds r3, r1, r2": b"023091e0", + "adds r3, r1, r2, asr #3": b"c23191e0", + "adds r3, r1, r2, rrx": b"623091e0", + "and r2, r2, #1": b"012002e2", + "and r1, r1, r2": b"021001e0", + "BIC R2, R1, #0x10": b"1020c1e3", + "bl 0x170": b"5a0000eb", + "bl #-4": b"fdffffeb", + "BLX R1": b"31ff2fe1", + "bx r1": b"11ff2fe1", + "clz r1, r2": b"121f6fe1", + "cmp r0, 0": b"000050e3", + "cmp r0, 0x40000000": b"010150e3", + "cmp r0, 3": b"030050e3", + "cmp r0, 2": b"020050e3", + "cmp r0, 5": b"050050e3", + "cmp r0, 0xa0000000": b"0a0250e3", + "eor r2, r3, #5": b"052023e2", + "eor r2, r3, r4": b"042023e0", + "eor r2, r3, r4, LSL #4": b"042223e0", + "eors r2, r3": b"032032e0", + "adds r2, r1, #0x1": b"012091e2", + "tst r3, r1": b"010013e1", + "ldm sp, {r1, r2, r3}": b"0e009de8", + "ldm sp!, {r1, r2, r3}": b"0e00bde8", + "ldr r1, [sp, #-4]": b"04101de5", + "ldr r1, [sp]": b"00109de5", + "ldr r1, [sp, #4]": b"04109de5", + "ldr r1, [sp], #-5": b"05101de4", + "ldr r1, [sp], #5": b"05109de4", + "ldr r1, [sp, #-4]!": b"04103de5", + "ldr r1, [sp, #4]!": b"0410bde5", + "ldr r1, [sp, r2]": b"02109de7", + "ldr r1, [sp, -r2]": b"02101de7", + "ldr r1, [sp, -r2, lsl #3]": b"82111de7", + "ldr r1, [sp, r2, lsl #3]": b"82119de7", + "ldr r1, [sp], r2": b"02109de6", + "ldr r1, [sp], -r2, lsl #3": b"82111de6", + "ldr r1, [sp, r2]!": b"0210bde7", + "ldr r1, [sp, -r2, lsl #3]!": b"82113de7", + "ldrb r1, [sp]": b"0010dde5", + "ldrb r1, [sp, r2]": b"0210dde7", + "ldrh r1, [sp]": b"b010dde1", + "ldrh r1, [sp, r2]": b"b2109de1", + "ldrsb r1, [sp]": b"d010dde1", + "ldrsb r1, [sp, r2]": b"d2109de1", + "ldrsh r1, [sp]": b"f010dde1", + "ldrsh r1, [sp, r2]": b"f2109de1", + "lsls r4, r3, 31": b"834fb0e1", + "lsls r4, r3, 1": b"8340b0e1", + "lsls r4, r3, r2": b"1342b0e1", + "lsr r0, r0, r2": b"3002a0e1", + "lsr r0, r0, #3": b"a001a0e1", + "MLA R1, R2, R3, R4": b"924321e0", + "mov r0, 0x0": b"0000a0e3", + "mov r0, 0xff000000": b"ff04a0e3", + "mov r0, 0x100": b"010ca0e3", + "mov r0, 42": b"2a00a0e3", + "mov r0, r1": b"0100a0e1", + "movs r0, 0": b"0000b0e3", + "movs r0, 0xff000000": b"ff04b0e3", + "movs r0, 0x100": b"010cb0e3", + "movs r0, 0x0e000000": b"0e04b0e3", + "movs r0, 42": b"2a00b0e3", + "movs r0, r1": b"0100b0e1", + "movw r0, 0xffff": b"ff0f0fe3", + "movw r0, 0": b"000000e3", + "MUL R1, R2": b"910201e0", + "MUL R3, R1, R2": b"910203e0", + "orr r2, r3, #5": b"052083e3", + "orr r2, r3, r4": b"042083e1", + "orr r2, r3, r4, LSL #4": b"042283e1", + "orr r2, r3": b"032082e1", + "orrs r2, r3": b"032092e1", + "pop {r1, r2, r3}": b"0e00bde8", + "pop {r1}": b"04109de4", + "push {r1, r2, r3}": b"0e002de9", + "push {r1}": b"04102de5", + "RSB r2, r2, #31": b"1f2062e2", + "sbc r3, r1, #5": b"0530c1e2", + "stm sp, {r1, r2, r3}": b"0e008de8", + "stm sp!, {r1, r2, r3}": b"0e00ade8", + "stmib r3, {r2, r4}": b"140083e9", + "str SP, [R1]": b"00d081e5", + "str R1, [R2, R3]": b"031082e7", + "str R1, [R2, R3, LSL #3]": b"831182e7", + "str R1, [R2, #3]!": b"0310a2e5", + "str R1, [R2], #3": b"031082e4", + "sub r3, r1, r2": b"023041e0", + "sub r3, r1, #5": b"053041e2", + "svc #0": b"000000ef", + "UMULLS R1, R2, R1, R2": b"911292e0", + "ldr r0, [pc, #-4]": b"04001fe5", + "mov r1, r2": b"0210a0e1", + "mov r1, r21, r2": b"0230a1e0", + }, + CS_MODE_THUMB: {"add r0, r1, r2": b"01eb0200"}, +} + + +def _ks_assemble(asm: str, mode=CS_MODE_ARM) -> bytes: + """Assemble the given string using Keystone using the specified CPU mode.""" + # Explicitly uses late importing so that Keystone will only be imported if this is called. + # This lets us avoid requiring installation of Keystone for running tests. + global ks, ks_thumb + from keystone import Ks, KS_ARCH_ARM, KS_MODE_ARM, KS_MODE_THUMB + + if ks is None: + ks = Ks(KS_ARCH_ARM, KS_MODE_ARM) + if ks_thumb is None: + ks_thumb = Ks(KS_ARCH_ARM, KS_MODE_THUMB) -def assemble(asm, mode=CS_MODE_ARM): if CS_MODE_ARM == mode: ords = ks.asm(asm)[0] elif CS_MODE_THUMB == mode: @@ -37,7 +178,18 @@ def assemble(asm, mode=CS_MODE_ARM): raise Exception(f"bad processor mode for assembly: {mode}") if not ords: raise Exception(f"bad assembly: {asm}") - return "".join(map(chr, ords)) + return binascii.hexlify(bytearray(ords)) + + +def assemble(asm: str, mode=CS_MODE_ARM) -> bytes: + """ + Assemble the given string. + + An assembly cache is first checked, and if there is no entry there, then Keystone is used. + """ + if asm in assembly_cache[mode]: + return binascii.unhexlify(assembly_cache[mode][asm]) + return binascii.unhexlify(_ks_assemble(asm, mode=mode)) def emulate_next(cpu): @@ -1404,12 +1556,10 @@ def test_arm_constant(self): start = self.code + 4 constant = 0x42424242 - asm = """ - ldr r0, [pc, #-4] - """ + asm = "ldr r0, [pc, #-4]" code = assemble(asm) - code += "\x78\x56\x34\x12" + code += b"\x78\x56\x34\x12" self.mem.write(start, code)