Created
July 20, 2016 19:35
-
-
Save agustingianni/5415bf8450a257acc8b4ed10877b4f8e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Author: Agustin Gianni ([email protected]). | |
// License: BSD variant "if you steal my shit i'll cut you". | |
#include <iostream> | |
#include <random> | |
#include <limits> | |
#include <cassert> | |
#include <cstdio> | |
using namespace std; | |
unsigned eSize16 = 16; | |
unsigned eSize32 = 32; | |
typedef enum ARMEncoding { | |
eEncodingA1, | |
eEncodingA2, | |
eEncodingA3, | |
eEncodingA4, | |
eEncodingA5, | |
eEncodingT1, | |
eEncodingT2, | |
eEncodingT3, | |
eEncodingT4, | |
eEncodingT5 | |
} ARMEncoding; | |
typedef enum ARMVFPVersion { | |
VFPv1 = 1 << 14, | |
VFPv2 = 1 << 15, | |
VFPv3 = 1 << 16, | |
VFPv4 = 1 << 17, | |
AdvancedSIMD = 1 << 18, | |
AdvancedSIMDv2 = 1 << 19, | |
VFPAll = VFPv1 | VFPv2 | VFPv3 | VFPv4, | |
AdvancedSIMDAll = AdvancedSIMD | AdvancedSIMDv2, | |
VFPv1_ABOVE = (VFPv1 | VFPv2 | VFPv3 | AdvancedSIMD), | |
VFPv2_ABOVE = (VFPv2 | VFPv3 | AdvancedSIMD), | |
VFPv2v3 = (VFPv2 | VFPv3) | |
} ARMVFPVersion; | |
typedef enum ARMVariants { | |
ARMv4 = 1 << 0, | |
ARMv4T = 1 << 1, | |
ARMv4All = ARMv4 | ARMv4T, // ARMv4* | |
ARMv5 = 1 << 2, | |
ARMv5T = 1 << 3, | |
ARMv5TE = 1 << 4, | |
ARMv5TEJ = 1 << 5, | |
ARMv5TEAll = ARMv5TE | ARMv5TEJ, // ARMv5TE* | |
ARMv5TAll = ARMv5 | ARMv5T | ARMv5TE | ARMv5TEJ, // ARMv5T* | |
ARMv6 = 1 << 6, | |
ARMv6K = 1 << 7, | |
ARMv6T2 = 1 << 8, | |
ARMv6All = ARMv6 | ARMv6K | ARMv6T2, // ARMv6* | |
ARMv7 = 1 << 9, | |
ARMv7S = 1 << 10, | |
ARMv7VE = 1 << 11, | |
ARMv7R = 1 << 12, | |
ARMv7All = ARMv7 | ARMv7S | ARMv7S | ARMv7VE | ARMv7R, // ARMv7* | |
ARMv8 = 1 << 13, | |
ARMSecurityExtension = 1 << 14, | |
ARMvAll = 0xffffffff, | |
} ARMVariants; | |
typedef struct ARMOpcode { | |
uint32_t mask; | |
uint32_t value; | |
uint32_t variants; | |
unsigned ins_size; | |
ARMEncoding encoding; | |
const char *name; | |
} ARMOpcode; | |
// Format: (mask, value, version, encoding, decoder_function, name) | |
ARMOpcode arm_opcodes[] = { | |
{ 0x0fe00000, 0x02a00000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "ADC Immediate"}, | |
{ 0x0fe00010, 0x00a00000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "ADC Register"}, | |
{ 0x0fe00090, 0x00a00010, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "ADC (register-shifted register)"}, | |
{ 0x0fe00000, 0x02800000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "ADD (immediate, ARM)"}, | |
{ 0x0fe00010, 0x00800000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "ADD (register, ARM)"}, | |
{ 0x0fe00090, 0x00800010, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "ADD (register-shifted register)"}, | |
{ 0x0fef0000, 0x028d0000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "ADD (SP plus immediate)"}, | |
{ 0x0fef0010, 0x008d0000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "ADD (SP plus register, ARM)"}, | |
{ 0x0fff0000, 0x028f0000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "ADR"}, | |
{ 0x0fff0000, 0x024f0000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA2, "ADR"}, | |
{ 0x0fe00000, 0x02000000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "AND (immediate)"}, | |
{ 0x0fe00010, 0x00000000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "AND (register)"}, | |
{ 0x0fe00090, 0x00000010, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "AND (register-shifted register)"}, | |
{ 0x0fef0070, 0x01a00040, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "ASR (immediate)"}, | |
{ 0x0fef00f0, 0x01a00050, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "ASR (register)"}, | |
{ 0x0fe0007f, 0x07c0001f, ARMv6T2 | ARMv7, eSize32, eEncodingA1, "BFC"}, | |
{ 0x0fe00070, 0x07c00010, ARMv6T2 | ARMv7, eSize32, eEncodingA1, "BFI"}, | |
{ 0x0fe00000, 0x03c00000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "BIC (immediate)"}, | |
{ 0x0fe00010, 0x01c00000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "BIC (register)"}, | |
{ 0x0fe00090, 0x01c00010, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "BIC (register-shifted register)"}, | |
{ 0x0ff000f0, 0x01200070, ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "BKPT"}, | |
{ 0xfe000000, 0xfa000000, ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA2, "BL, BLX (immediate)"}, | |
{ 0x0f000000, 0x0b000000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "BL, BLX (immediate)"}, | |
{ 0x0f000000, 0x0a000000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "B"}, | |
{ 0x0ffffff0, 0x012fff30, ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "BLX (register)"}, | |
{ 0x0ffffff0, 0x012fff10, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "BX"}, | |
{ 0x0ffffff0, 0x012fff20, ARMv5TEJ | ARMv6All | ARMv7, eSize32, eEncodingA1, "BXJ"}, | |
{ 0xfff1fe20, 0xf1000000, ARMv6All | ARMv7, eSize32, eEncodingA1, "CPS (ARM)"}, | |
{ 0xff000010, 0xfe000000, ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA2, "CDP, CDP2"}, | |
{ 0x0f000010, 0x0e000000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "CDP, CDP2"}, | |
{ 0xffffffff, 0xf57ff01f, ARMv6K | ARMv7, eSize32, eEncodingA1, "CLREX"}, | |
{ 0x0fff0ff0, 0x016f0f10, ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "CLZ"}, | |
{ 0x0ff0f000, 0x03700000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "CMN (immediate)"}, | |
{ 0x0ff0f010, 0x01700000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "CMN (register)"}, | |
{ 0x0ff0f090, 0x01700010, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "CMN (register-shifted register)"}, | |
{ 0x0ff0f000, 0x03500000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "CMP (immediate)"}, | |
{ 0x0ff0f010, 0x01500000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "CMP (register)"}, | |
{ 0x0ff0f090, 0x01500010, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "CMP (register-shifted register)"}, | |
{ 0x0ffffff0, 0x0320f0f0, ARMv7, eSize32, eEncodingA1, "DBG"}, | |
{ 0xfffffff0, 0xf57ff050, ARMv7, eSize32, eEncodingA1, "DMB"}, | |
{ 0xfffffff0, 0xf57ff040, ARMv7, eSize32, eEncodingA1, "DSB"}, | |
{ 0x0fe00000, 0x02200000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "EOR (immediate)"}, | |
{ 0x0fe00010, 0x00200000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "EOR (register)"}, | |
{ 0x0fe00090, 0x00200010, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "EOR (register-shifted register)"}, | |
{ 0xfffffff0, 0xf57ff060, ARMv7, eSize32, eEncodingA1, "ISB"}, | |
{ 0xfe50ffff, 0xf8100a00, ARMv6All | ARMv7, eSize32, eEncodingA1, "RFE"}, | |
{ 0xfe100000, 0xfc100000, ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA2, "LDC, LDC2 (immediate)"}, | |
{ 0x0e100000, 0x0c100000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDC, LDC2 (immediate)"}, | |
{ 0xfe1f0000, 0xfc1f0000, ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA2, "LDC, LDC2 (literal)"}, | |
{ 0x0e1f0000, 0x0c1f0000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDC, LDC2 (literal)"}, | |
{ 0x0fd00000, 0x08900000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDM/LDMIA/LDMFD (ARM)"}, | |
{ 0x0fd00000, 0x08100000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDMDA/LDMFA"}, | |
{ 0x0fd00000, 0x09100000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDMDB/LDMEA"}, | |
{ 0x0fd00000, 0x09900000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDMIB/LDMED"}, | |
{ 0xff30f000, 0xf510f000, ARMv5TEAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "PLD, PLDW (immediate)"}, | |
{ 0xff7ff000, 0xf55ff000, ARMv5TEAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "PLD (literal)"}, | |
{ 0xff30f010, 0xf710f000, ARMv5TEAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "PLD, PLDW (register)"}, | |
{ 0xff70f010, 0xf650f000, ARMv7, eSize32, eEncodingA1, "PLI (register)"}, | |
{ 0xff70f000, 0xf450f000, ARMv7, eSize32, eEncodingA1, "PLI (immediate, literal)"}, | |
{ 0x0e500000, 0x04100000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDR (immediate, ARM)"}, | |
{ 0x0f7f0000, 0x051f0000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDR (literal)"}, | |
{ 0x0e500010, 0x06100000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDR (register, ARM)"}, | |
{ 0x0e500000, 0x04500000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDRB (immediate, ARM)"}, | |
{ 0x0f7f0000, 0x055f0000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDRB (literal)"}, | |
{ 0x0e500010, 0x06500000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDRB (register)"}, | |
{ 0x0f700000, 0x04700000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDRBT"}, | |
{ 0x0f700010, 0x06700000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA2, "LDRBT"}, | |
{ 0x0e5000f0, 0x004000d0, ARMv5TEAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDRD (immediate)"}, | |
{ 0x0f7f00f0, 0x014f00d0, ARMv5TEAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDRD (literal)"}, | |
{ 0x0e500ff0, 0x000000d0, ARMv5TEAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDRD (register)"}, | |
{ 0x0ff00fff, 0x01900f9f, ARMv6All | ARMv7, eSize32, eEncodingA1, "LDREX"}, | |
{ 0x0ff00fff, 0x01d00f9f, ARMv6K | ARMv7, eSize32, eEncodingA1, "LDREXB"}, | |
{ 0x0ff00fff, 0x01b00f9f, ARMv6K | ARMv7, eSize32, eEncodingA1, "LDREXD"}, | |
{ 0x0ff00fff, 0x01f00f9f, ARMv6K | ARMv7, eSize32, eEncodingA1, "LDREXH"}, | |
{ 0x0e5000f0, 0x005000b0, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDRH (immediate, ARM)"}, | |
{ 0x0f7f00f0, 0x015f00b0, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDRH (literal)"}, | |
{ 0x0e500ff0, 0x001000b0, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDRH (register)"}, | |
{ 0x0f7000f0, 0x007000b0, ARMv6T2 | ARMv7, eSize32, eEncodingA1, "LDRHT"}, | |
{ 0x0f700ff0, 0x003000b0, ARMv6T2 | ARMv7, eSize32, eEncodingA2, "LDRHT"}, | |
{ 0x0e5000f0, 0x005000d0, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDRSB (immediate)"}, | |
{ 0x0f7f00f0, 0x015f00d0, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDRSB (literal)"}, | |
{ 0x0e500ff0, 0x001000d0, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDRSB (register)"}, | |
{ 0x0f7000f0, 0x007000d0, ARMv6T2 | ARMv7, eSize32, eEncodingA1, "LDRSBT"}, | |
{ 0x0f700ff0, 0x003000d0, ARMv6T2 | ARMv7, eSize32, eEncodingA2, "LDRSBT"}, | |
{ 0x0e5000f0, 0x005000f0, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDRSH (immediate)"}, | |
{ 0x0f7f00f0, 0x015f00f0, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDRSH (literal)"}, | |
{ 0x0e500ff0, 0x001000f0, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDRSH (register)"}, | |
{ 0x0f7000f0, 0x007000f0, ARMv6T2 | ARMv7, eSize32, eEncodingA1, "LDRSHT"}, | |
{ 0x0f700ff0, 0x003000f0, ARMv6T2 | ARMv7, eSize32, eEncodingA2, "LDRSHT"}, | |
{ 0x0f700000, 0x04300000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDRT"}, | |
{ 0x0f700010, 0x06300000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA2, "LDRT"}, | |
{ 0x0fef0070, 0x01a00000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LSL (immediate)"}, | |
{ 0x0fef00f0, 0x01a00010, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LSL (register)"}, | |
{ 0x0fef0070, 0x01a00020, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LSR (immediate)"}, | |
{ 0x0fef00f0, 0x01a00030, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LSR (register)"}, | |
{ 0xff100010, 0xfe000010, ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA2, "MCR, MCR2"}, | |
{ 0x0f100010, 0x0e000010, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "MCR, MCR2"}, | |
{ 0xfff00000, 0xfc400000, ARMv6All | ARMv7, eSize32, eEncodingA2, "MCRR, MCRR2"}, | |
{ 0x0ff00000, 0x0c400000, ARMv5TEAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "MCRR, MCRR2"}, | |
{ 0x0fe000f0, 0x00200090, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "MLA"}, | |
{ 0x0ff000f0, 0x00600090, ARMv6T2 | ARMv7, eSize32, eEncodingA1, "MLS"}, | |
{ 0x0fef0000, 0x03a00000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "MOV (immediate)"}, | |
{ 0x0ff00000, 0x03000000, ARMv6T2 | ARMv7, eSize32, eEncodingA2, "MOV (immediate)"}, | |
{ 0x0fef0ff0, 0x01a00000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "MOV (register, ARM)"}, | |
{ 0x0ff00000, 0x03400000, ARMv6T2 | ARMv7, eSize32, eEncodingA1, "MOVT"}, | |
{ 0xff100010, 0xfe100010, ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA2, "MRC, MRC2"}, | |
{ 0x0f100010, 0x0e100010, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "MRC, MRC2"}, | |
{ 0xfff00000, 0xfc500000, ARMv6All | ARMv7, eSize32, eEncodingA2, "MRRC, MRRC2"}, | |
{ 0x0ff00000, 0x0c500000, ARMv5TEAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "MRRC, MRRC2"}, | |
{ 0x0fbf0fff, 0x010f0000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "MRS"}, | |
{ 0x0fb0f000, 0x0320f000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "MSR (immediate)"}, | |
{ 0x0fb0fff0, 0x0120f000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "MSR (register)"}, | |
{ 0x0fe0f0f0, 0x00000090, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "MUL"}, | |
{ 0x0fef0000, 0x03e00000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "MVN (immediate)"}, | |
{ 0x0fef0010, 0x01e00000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "MVN (register)"}, | |
{ 0x0fef0090, 0x01e00010, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "MVN (register-shifted register)"}, | |
{ 0x0fffffff, 0x0320f000, ARMv6K | ARMv6T2 | ARMv7, eSize32, eEncodingA1, "NOP"}, | |
{ 0x0fe00000, 0x03800000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "ORR (immediate)"}, | |
{ 0x0fe00010, 0x01800000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "ORR (register)"}, | |
{ 0x0fe00090, 0x01800010, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "ORR (register-shifted register)"}, | |
{ 0x0ff00030, 0x06800010, ARMv6All | ARMv7, eSize32, eEncodingA1, "PKH"}, | |
{ 0x0fff0000, 0x08bd0000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "POP (ARM)"}, | |
{ 0x0fff0fff, 0x049d0004, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA2, "POP (ARM)"}, | |
{ 0x0fff0000, 0x092d0000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "PUSH"}, | |
{ 0x0fff0fff, 0x052d0004, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA2, "PUSH"}, | |
{ 0x0ff00ff0, 0x01000050, ARMv5TEAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "QADD"}, | |
{ 0x0ff00ff0, 0x06200f10, ARMv6All | ARMv7, eSize32, eEncodingA1, "QADD16"}, | |
{ 0x0ff00ff0, 0x06200f90, ARMv6All | ARMv7, eSize32, eEncodingA1, "QADD8"}, | |
{ 0x0ff00ff0, 0x06200f30, ARMv6All | ARMv7, eSize32, eEncodingA1, "QASX"}, | |
{ 0x0ff00ff0, 0x01400050, ARMv5TEAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "QDADD"}, | |
{ 0x0ff00ff0, 0x01600050, ARMv5TEAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "QDSUB"}, | |
{ 0x0ff00ff0, 0x06200f50, ARMv6All | ARMv7, eSize32, eEncodingA1, "QSAX"}, | |
{ 0x0ff00ff0, 0x01200050, ARMv5TEAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "QSUB"}, | |
{ 0x0ff00ff0, 0x06200f70, ARMv6All | ARMv7, eSize32, eEncodingA1, "QSUB16"}, | |
{ 0x0ff00ff0, 0x06200ff0, ARMv6All | ARMv7, eSize32, eEncodingA1, "QSUB8"}, | |
{ 0x0fff0ff0, 0x06ff0f30, ARMv6T2 | ARMv7, eSize32, eEncodingA1, "RBIT"}, | |
{ 0x0fff0ff0, 0x06bf0f30, ARMv6All | ARMv7, eSize32, eEncodingA1, "REV"}, | |
{ 0x0fff0ff0, 0x06bf0fb0, ARMv6All | ARMv7, eSize32, eEncodingA1, "REV16"}, | |
{ 0x0fff0ff0, 0x06ff0fb0, ARMv6All | ARMv7, eSize32, eEncodingA1, "REVSH"}, | |
{ 0x0fef0070, 0x01a00060, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "ROR (immediate)"}, | |
{ 0x0fef00f0, 0x01a00070, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "ROR (register)"}, | |
{ 0x0fef0ff0, 0x01a00060, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "RRX"}, | |
{ 0x0fe00000, 0x02600000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "RSB (immediate)"}, | |
{ 0x0fe00010, 0x00600000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "RSB (register)"}, | |
{ 0x0fe00090, 0x00600010, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "RSB (register-shifted register)"}, | |
{ 0x0fe00000, 0x02e00000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "RSC (immediate)"}, | |
{ 0x0fe00010, 0x00e00000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "RSC (register)"}, | |
{ 0x0fe00090, 0x00e00010, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "RSC (register-shifted register)"}, | |
{ 0x0ff00ff0, 0x06100f10, ARMv6All | ARMv7, eSize32, eEncodingA1, "SADD16"}, | |
{ 0x0ff00ff0, 0x06100f90, ARMv6All | ARMv7, eSize32, eEncodingA1, "SADD8"}, | |
{ 0x0ff00ff0, 0x06100f30, ARMv6All | ARMv7, eSize32, eEncodingA1, "SASX"}, | |
{ 0x0fe00000, 0x02c00000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "SBC (immediate)"}, | |
{ 0x0fe00010, 0x00c00000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "SBC (register)"}, | |
{ 0x0fe00090, 0x00c00010, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "SBC (register-shifted register)"}, | |
{ 0x0fe00070, 0x07a00050, ARMv6T2 | ARMv7, eSize32, eEncodingA1, "SBFX"}, | |
{ 0x0ff0f0f0, 0x0710f010, ARMv7VE, eSize32, eEncodingA1, "SDIV"}, | |
{ 0x0ff00ff0, 0x06800fb0, ARMv6All | ARMv7, eSize32, eEncodingA1, "SEL"}, | |
{ 0xfffffdff, 0xf1010000, ARMv6All | ARMv7, eSize32, eEncodingA1, "SETEND"}, | |
{ 0x0fffffff, 0x0320f004, ARMv6K | ARMv7, eSize32, eEncodingA1, "SEV"}, | |
{ 0x0ff00ff0, 0x06300f10, ARMv6All | ARMv7, eSize32, eEncodingA1, "SHADD16"}, | |
{ 0x0ff00ff0, 0x06300f90, ARMv6All | ARMv7, eSize32, eEncodingA1, "SHADD8"}, | |
{ 0x0ff00ff0, 0x06300f30, ARMv6All | ARMv7, eSize32, eEncodingA1, "SHASX"}, | |
{ 0x0ff00ff0, 0x06300f50, ARMv6All | ARMv7, eSize32, eEncodingA1, "SHSAX"}, | |
{ 0x0ff00ff0, 0x06300f70, ARMv6All | ARMv7, eSize32, eEncodingA1, "SHSUB16"}, | |
{ 0x0ff00ff0, 0x06300ff0, ARMv6All | ARMv7, eSize32, eEncodingA1, "SHSUB8"}, | |
{ 0x0ff00090, 0x01000080, ARMv5TEAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "SMLABB, SMLABT, SMLATB, SMLATT"}, | |
{ 0x0ff000d0, 0x07000010, ARMv6All | ARMv7, eSize32, eEncodingA1, "SMLAD"}, | |
{ 0x0fe000f0, 0x00e00090, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "SMLAL"}, | |
{ 0x0ff00090, 0x01400080, ARMv5TEAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "SMLALBB, SMLALBT, SMLALTB, SMLALTT"}, | |
{ 0x0ff000d0, 0x07400010, ARMv6All | ARMv7, eSize32, eEncodingA1, "SMLALD"}, | |
{ 0x0ff000b0, 0x01200080, ARMv5TEAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "SMLAWB, SMLAWT"}, | |
{ 0x0ff000d0, 0x07000050, ARMv6All | ARMv7, eSize32, eEncodingA1, "SMLSD"}, | |
{ 0x0ff000d0, 0x07400050, ARMv6All | ARMv7, eSize32, eEncodingA1, "SMLSLD"}, | |
{ 0x0ff000d0, 0x07500010, ARMv6All | ARMv7, eSize32, eEncodingA1, "SMMLA"}, | |
{ 0x0ff000d0, 0x075000d0, ARMv6All | ARMv7, eSize32, eEncodingA1, "SMMLS"}, | |
{ 0x0ff0f0d0, 0x0750f010, ARMv6All | ARMv7, eSize32, eEncodingA1, "SMMUL"}, | |
{ 0x0ff0f0d0, 0x0700f010, ARMv6All | ARMv7, eSize32, eEncodingA1, "SMUAD"}, | |
{ 0x0ff0f090, 0x01600080, ARMv5TEAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "SMULBB, SMULBT, SMULTB, SMULTT"}, | |
{ 0x0fe000f0, 0x00c00090, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "SMULL"}, | |
{ 0x0ff0f0b0, 0x012000a0, ARMv5TEAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "SMULWB, SMULWT"}, | |
{ 0x0ff0f0d0, 0x0700f050, ARMv6All | ARMv7, eSize32, eEncodingA1, "SMUSD"}, | |
{ 0x0fe00030, 0x06a00010, ARMv6All | ARMv7, eSize32, eEncodingA1, "SSAT"}, | |
{ 0x0ff00ff0, 0x06a00f30, ARMv6All | ARMv7, eSize32, eEncodingA1, "SSAT16"}, | |
{ 0x0ff00ff0, 0x06100f50, ARMv6All | ARMv7, eSize32, eEncodingA1, "SSAX"}, | |
{ 0x0ff00ff0, 0x06100f70, ARMv6All | ARMv7, eSize32, eEncodingA1, "SSUB16"}, | |
{ 0x0ff00ff0, 0x06100ff0, ARMv6All | ARMv7, eSize32, eEncodingA1, "SSUB8"}, | |
{ 0xfe100000, 0xfc000000, ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA2, "STC, STC2"}, | |
{ 0x0e100000, 0x0c000000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "STC, STC2"}, | |
{ 0x0fd00000, 0x08800000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "STM (STMIA, STMEA)"}, | |
{ 0x0fd00000, 0x08000000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "STMDA (STMED)"}, | |
{ 0x0fd00000, 0x09000000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "STMDB (STMFD)"}, | |
{ 0x0fd00000, 0x09800000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "STMIB (STMFA)"}, | |
{ 0x0e500000, 0x04000000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "STR (immediate, ARM)"}, | |
{ 0x0e500010, 0x06000000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "STR (register)"}, | |
{ 0x0e500000, 0x04400000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "STRB (immediate, ARM)"}, | |
{ 0x0e500010, 0x06400000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "STRB (register)"}, | |
{ 0x0f700000, 0x04600000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "STRBT"}, | |
{ 0x0f700010, 0x06600000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA2, "STRBT"}, | |
{ 0x0e5000f0, 0x004000f0, ARMv5TEAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "STRD (immediate)"}, | |
{ 0x0e500ff0, 0x000000f0, ARMv5TEAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "STRD (register)"}, | |
{ 0x0ff00ff0, 0x01800f90, ARMv6All | ARMv7, eSize32, eEncodingA1, "STREX"}, | |
{ 0x0ff00ff0, 0x01c00f90, ARMv6K | ARMv7, eSize32, eEncodingA1, "STREXB"}, | |
{ 0x0ff00ff0, 0x01a00f90, ARMv6K | ARMv7, eSize32, eEncodingA1, "STREXD"}, | |
{ 0x0ff00ff0, 0x01e00f90, ARMv6K | ARMv7, eSize32, eEncodingA1, "STREXH"}, | |
{ 0x0e5000f0, 0x004000b0, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "STRH (immediate, ARM)"}, | |
{ 0x0e500ff0, 0x000000b0, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "STRH (register)"}, | |
{ 0x0f7000f0, 0x006000b0, ARMv6T2 | ARMv7, eSize32, eEncodingA1, "STRHT"}, | |
{ 0x0f700ff0, 0x002000b0, ARMv6T2 | ARMv7, eSize32, eEncodingA2, "STRHT"}, | |
{ 0x0f700000, 0x04200000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "STRT"}, | |
{ 0x0f700010, 0x06200000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA2, "STRT"}, | |
{ 0x0fe00000, 0x02400000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "SUB (immediate, ARM)"}, | |
{ 0x0fe00010, 0x00400000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "SUB (register)"}, | |
{ 0x0fe00090, 0x00400010, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "SUB (register-shifted register)"}, | |
{ 0x0fef0000, 0x024d0000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "SUB (SP minus immediate)"}, | |
{ 0x0fef0010, 0x004d0000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "SUB (SP minus register)"}, | |
{ 0x0f000000, 0x0f000000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "SVC"}, | |
{ 0x0fb00ff0, 0x01000090, ARMv4All | ARMv5TAll | ARMv7 | ARMv7VE, eSize32, eEncodingA1, "SWP, SWPB"}, | |
{ 0x0ff003f0, 0x06a00070, ARMv6All | ARMv7, eSize32, eEncodingA1, "SXTAB"}, | |
{ 0x0ff003f0, 0x06800070, ARMv6All | ARMv7, eSize32, eEncodingA1, "SXTAB16"}, | |
{ 0x0ff003f0, 0x06b00070, ARMv6All | ARMv7, eSize32, eEncodingA1, "SXTAH"}, | |
{ 0x0fff03f0, 0x06af0070, ARMv6All | ARMv7, eSize32, eEncodingA1, "SXTB"}, | |
{ 0x0fff03f0, 0x068f0070, ARMv6All | ARMv7, eSize32, eEncodingA1, "SXTB16"}, | |
{ 0x0fff03f0, 0x06bf0070, ARMv6All | ARMv7, eSize32, eEncodingA1, "SXTH"}, | |
{ 0x0ff0f000, 0x03300000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "TEQ (immediate)"}, | |
{ 0x0ff0f010, 0x01300000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "TEQ (register)"}, | |
{ 0x0ff0f090, 0x01300010, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "TEQ (register-shifted register)"}, | |
{ 0x0ff0f000, 0x03100000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "TST (immediate)"}, | |
{ 0x0ff0f010, 0x01100000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "TST (register)"}, | |
{ 0x0ff0f090, 0x01100010, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "TST (register-shifted register)"}, | |
{ 0x0ff00ff0, 0x06500f10, ARMv6All | ARMv7, eSize32, eEncodingA1, "UADD16"}, | |
{ 0x0ff00ff0, 0x06500f90, ARMv6All | ARMv7, eSize32, eEncodingA1, "UADD8"}, | |
{ 0x0ff00ff0, 0x06500f30, ARMv6All | ARMv7, eSize32, eEncodingA1, "UASX"}, | |
{ 0x0fe00070, 0x07e00050, ARMv6T2 | ARMv7, eSize32, eEncodingA1, "UBFX"}, | |
{ 0xfff000f0, 0xe7f000f0, ARMv4T | ARMv5TAll | ARMv6 | ARMv7, eSize32, eEncodingA1, "UDF"}, | |
{ 0x0ff0f0f0, 0x0730f010, ARMv7VE, eSize32, eEncodingA1, "UDIV"}, | |
{ 0x0ff00ff0, 0x06700f10, ARMv6All | ARMv7, eSize32, eEncodingA1, "UHADD16"}, | |
{ 0x0ff00ff0, 0x06700f90, ARMv6All | ARMv7, eSize32, eEncodingA1, "UHADD8"}, | |
{ 0x0ff00ff0, 0x06700f30, ARMv6All | ARMv7, eSize32, eEncodingA1, "UHASX"}, | |
{ 0x0ff00ff0, 0x06700f50, ARMv6All | ARMv7, eSize32, eEncodingA1, "UHSAX"}, | |
{ 0x0ff00ff0, 0x06700f70, ARMv6All | ARMv7, eSize32, eEncodingA1, "UHSUB16"}, | |
{ 0x0ff00ff0, 0x06700ff0, ARMv6All | ARMv7, eSize32, eEncodingA1, "UHSUB8"}, | |
{ 0x0ff000f0, 0x00400090, ARMv6All | ARMv7, eSize32, eEncodingA1, "UMAAL"}, | |
{ 0x0fe000f0, 0x00a00090, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "UMLAL"}, | |
{ 0x0fe000f0, 0x00800090, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "UMULL"}, | |
{ 0x0ff00ff0, 0x06600f10, ARMv6All | ARMv7, eSize32, eEncodingA1, "UQADD16"}, | |
{ 0x0ff00ff0, 0x06600f90, ARMv6All | ARMv7, eSize32, eEncodingA1, "UQADD8"}, | |
{ 0x0ff00ff0, 0x06600f30, ARMv6All | ARMv7, eSize32, eEncodingA1, "UQASX"}, | |
{ 0x0ff00ff0, 0x06600f50, ARMv6All | ARMv7, eSize32, eEncodingA1, "UQSAX"}, | |
{ 0x0ff00ff0, 0x06600f70, ARMv6All | ARMv7, eSize32, eEncodingA1, "UQSUB16"}, | |
{ 0x0ff00ff0, 0x06600ff0, ARMv6All | ARMv7, eSize32, eEncodingA1, "UQSUB8"}, | |
{ 0x0ff0f0f0, 0x0780f010, ARMv6All | ARMv7, eSize32, eEncodingA1, "USAD8"}, | |
{ 0x0ff000f0, 0x07800010, ARMv6All | ARMv7, eSize32, eEncodingA1, "USADA8"}, | |
{ 0x0fe00030, 0x06e00010, ARMv6All | ARMv7, eSize32, eEncodingA1, "USAT"}, | |
{ 0x0ff00ff0, 0x06e00f30, ARMv6All | ARMv7, eSize32, eEncodingA1, "USAT16"}, | |
{ 0x0ff00ff0, 0x06500f50, ARMv6All | ARMv7, eSize32, eEncodingA1, "USAX"}, | |
{ 0x0ff00ff0, 0x06500f70, ARMv6All | ARMv7, eSize32, eEncodingA1, "USUB16"}, | |
{ 0x0ff00ff0, 0x06500ff0, ARMv6All | ARMv7, eSize32, eEncodingA1, "USUB8"}, | |
{ 0x0ff003f0, 0x06e00070, ARMv6All | ARMv7, eSize32, eEncodingA1, "UXTAB"}, | |
{ 0x0ff003f0, 0x06c00070, ARMv6All | ARMv7, eSize32, eEncodingA1, "UXTAB16"}, | |
{ 0x0ff003f0, 0x06f00070, ARMv6All | ARMv7, eSize32, eEncodingA1, "UXTAH"}, | |
{ 0x0fff03f0, 0x06ef0070, ARMv6All | ARMv7, eSize32, eEncodingA1, "UXTB"}, | |
{ 0x0fff03f0, 0x06cf0070, ARMv6All | ARMv7, eSize32, eEncodingA1, "UXTB16"}, | |
{ 0x0fff03f0, 0x06ff0070, ARMv6All | ARMv7, eSize32, eEncodingA1, "UXTH"}, | |
{ 0x0fffffff, 0x0320f002, ARMv6K | ARMv7, eSize32, eEncodingA1, "WFE"}, | |
{ 0x0fffffff, 0x0320f003, ARMv6K | ARMv7, eSize32, eEncodingA1, "WFI"}, | |
{ 0x0fffffff, 0x0320f001, ARMv6K | ARMv7, eSize32, eEncodingA1, "YIELD"}, | |
{ 0x0fffffff, 0x0160006e, ARMv7VE, eSize32, eEncodingA1, "ERET"}, | |
{ 0x0ff000f0, 0x01400070, ARMv7VE, eSize32, eEncodingA1, "HVC"}, | |
{ 0x0e508000, 0x08508000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDM (exception return)"}, | |
{ 0x0e708000, 0x08500000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "LDM (User registers)"}, | |
{ 0x0fb00eff, 0x01000200, ARMv7VE, eSize32, eEncodingA1, "MRS (Banked register)"}, | |
{ 0xfe5fffe0, 0xf84d0500, ARMv6All | ARMv7, eSize32, eEncodingA1, "SRS, ARM"}, | |
{ 0x0e700000, 0x08400000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "STM (User registers)"}, | |
{ 0x0e10f000, 0x0210f000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA1, "SUBS PC, LR and related instructions, ARM"}, | |
{ 0x0e10f010, 0x0010f000, ARMv4All | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingA2, "SUBS PC, LR and related instructions, ARM"}, | |
{ 0xfe800f10, 0xf2000710, AdvancedSIMD, eSize32, eEncodingA1, "VABA, VABAL"}, | |
{ 0xfe800f50, 0xf2800500, AdvancedSIMD, eSize32, eEncodingA2, "VABA, VABAL"}, | |
{ 0xfe800f10, 0xf2000700, AdvancedSIMD, eSize32, eEncodingA1, "VABD, VABDL (integer)"}, | |
{ 0xfe800f50, 0xf2800700, AdvancedSIMD, eSize32, eEncodingA2, "VABD, VABDL (integer)"}, | |
{ 0xffa00f10, 0xf3200d00, AdvancedSIMD, eSize32, eEncodingA1, "VABD (floating-point)"}, | |
{ 0xffb30b90, 0xf3b10300, AdvancedSIMD, eSize32, eEncodingA1, "VABS"}, | |
{ 0x0fbf0ed0, 0x0eb00ac0, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA2, "VABS"}, | |
{ 0xff800f10, 0xf3000e10, AdvancedSIMD, eSize32, eEncodingA1, "VACGE, VACGT, VACLE, VACLT"}, | |
{ 0xff800f10, 0xf2000800, AdvancedSIMD, eSize32, eEncodingA1, "VADD (integer)"}, | |
{ 0xffa00f10, 0xf2000d00, AdvancedSIMD, eSize32, eEncodingA1, "VADD (floating-point)"}, | |
{ 0x0fb00e50, 0x0e300a00, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA2, "VADD (floating-point)"}, | |
{ 0xff800f50, 0xf2800400, AdvancedSIMD, eSize32, eEncodingA1, "VADDHN"}, | |
{ 0xfe800e50, 0xf2800000, AdvancedSIMD, eSize32, eEncodingA1, "VADDL, VADDW"}, | |
{ 0xffb00f10, 0xf2000110, AdvancedSIMD, eSize32, eEncodingA1, "VAND (register)"}, | |
{ 0xfeb800b0, 0xf2800030, AdvancedSIMD, eSize32, eEncodingA1, "VBIC (immediate)"}, | |
{ 0xffb00f10, 0xf2100110, AdvancedSIMD, eSize32, eEncodingA1, "VBIC (register)"}, | |
{ 0xff800f10, 0xf3000110, AdvancedSIMD, eSize32, eEncodingA1, "VBIF, VBIT, VBSL"}, | |
{ 0xff800f10, 0xf3000810, AdvancedSIMD, eSize32, eEncodingA1, "VCEQ (register)"}, | |
{ 0xffa00f10, 0xf2000e00, AdvancedSIMD, eSize32, eEncodingA2, "VCEQ (register)"}, | |
{ 0xffb30b90, 0xf3b10100, AdvancedSIMD, eSize32, eEncodingA1, "VCEQ (immediate #0)"}, | |
{ 0xfe800f10, 0xf2000310, AdvancedSIMD, eSize32, eEncodingA1, "VCGE (register)"}, | |
{ 0xffa00f10, 0xf3000e00, AdvancedSIMD, eSize32, eEncodingA2, "VCGE (register)"}, | |
{ 0xffb30b90, 0xf3b10080, AdvancedSIMD, eSize32, eEncodingA1, "VCGE (immediate #0)"}, | |
{ 0xfe800f10, 0xf2000300, AdvancedSIMD, eSize32, eEncodingA1, "VCGT (register)"}, | |
{ 0xffa00f10, 0xf3200e00, AdvancedSIMD, eSize32, eEncodingA2, "VCGT (register)"}, | |
{ 0xffb30b90, 0xf3b10000, AdvancedSIMD, eSize32, eEncodingA1, "VCGT (immediate #0)"}, | |
{ 0xffb30b90, 0xf3b10180, AdvancedSIMD, eSize32, eEncodingA1, "VCLE (immediate #0)"}, | |
{ 0xffb30f90, 0xf3b00400, AdvancedSIMD, eSize32, eEncodingA1, "VCLS"}, | |
{ 0xffb30b90, 0xf3b10200, AdvancedSIMD, eSize32, eEncodingA1, "VCLT (immediate #0)"}, | |
{ 0xffb30f90, 0xf3b00480, AdvancedSIMD, eSize32, eEncodingA1, "VCLZ"}, | |
{ 0x0fbf0e50, 0x0eb40a40, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA1, "VCMP, VCMPE"}, | |
{ 0x0fbf0e7f, 0x0eb50a40, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA2, "VCMP, VCMPE"}, | |
{ 0xffb30f90, 0xf3b00500, AdvancedSIMD, eSize32, eEncodingA1, "VCNT"}, | |
{ 0xffb30e10, 0xf3b30600, AdvancedSIMD, eSize32, eEncodingA1, "VCVT (between floating-point and integer, AdvancedSIMD)"}, | |
{ 0x0fb80e50, 0x0eb80a40, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA1, "VCVT, VCVTR (between floating-point and integer, Floating-point)"}, | |
{ 0xfe800e90, 0xf2800e10, AdvancedSIMD, eSize32, eEncodingA1, "VCVT (between floating-point and fixed-point, AdvancedSIMD)"}, | |
{ 0x0fba0e50, 0x0eba0a40, VFPv3 | VFPv4, eSize32, eEncodingA1, "VCVT (between floating-point and fixed-point, Floating-point)"}, | |
{ 0x0fbf0ed0, 0x0eb70ac0, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA1, "VCVT (between double-precision and single-precision)"}, | |
{ 0xffb30ed0, 0xf3b20600, AdvancedSIMD, eSize32, eEncodingA1, "VCVT (between half-precision and single-precision, AdvancedSIMD)"}, | |
{ 0x0fbe0f50, 0x0eb20a40, VFPv3 | VFPv4, eSize32, eEncodingA1, "VCVTB, VCVTT"}, | |
{ 0x0fb00e50, 0x0e800a00, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA1, "VDIV"}, | |
{ 0xffb00f90, 0xf3b00c00, AdvancedSIMD, eSize32, eEncodingA1, "VDUP (scalar)"}, | |
{ 0x0f900f5f, 0x0e800b10, AdvancedSIMD, eSize32, eEncodingA1, "VDUP (ARM core register)"}, | |
{ 0xffb00f10, 0xf3000110, AdvancedSIMD, eSize32, eEncodingA1, "VEOR"}, | |
{ 0xffb00010, 0xf2b00000, AdvancedSIMD, eSize32, eEncodingA1, "VEXT"}, | |
{ 0xff800f10, 0xf2000c10, AdvancedSIMDv2, eSize32, eEncodingA1, "VFMA, VFMS"}, | |
{ 0x0fb00e10, 0x0ea00a00, VFPv4, eSize32, eEncodingA2, "VFMA, VFMS"}, | |
{ 0x0fb00e10, 0x0e900a00, VFPv4, eSize32, eEncodingA1, "VFNMA, VFNMS"}, | |
{ 0xfe800d10, 0xf2000000, AdvancedSIMD, eSize32, eEncodingA1, "VHADD, VHSUB"}, | |
{ 0xffb00000, 0xf4200000, AdvancedSIMD, eSize32, eEncodingA1, "VLD1 (multiple single elements)"}, | |
{ 0xffb00300, 0xf4a00000, AdvancedSIMD, eSize32, eEncodingA1, "VLD1 (single element to one lane)"}, | |
{ 0xffb00f00, 0xf4a00c00, AdvancedSIMD, eSize32, eEncodingA1, "VLD1 (single element to all lanes)"}, | |
{ 0xffb00000, 0xf4200000, AdvancedSIMD, eSize32, eEncodingA1, "VLD2 (multiple 2-element structures)"}, | |
{ 0xffb00300, 0xf4a00100, AdvancedSIMD, eSize32, eEncodingA1, "VLD2 (single 2-element structure to one lane)"}, | |
{ 0xffb00f00, 0xf4a00d00, AdvancedSIMD, eSize32, eEncodingA1, "VLD2 (single 2-element structure to all lanes)"}, | |
{ 0xffb00000, 0xf4200000, AdvancedSIMD, eSize32, eEncodingA1, "VLD3 (multiple 3-element structures)"}, | |
{ 0xffb00300, 0xf4a00200, AdvancedSIMD, eSize32, eEncodingA1, "VLD3 (single 3-element structure to one lane)"}, | |
{ 0xffb00f00, 0xf4a00e00, AdvancedSIMD, eSize32, eEncodingA1, "VLD3 (single 3-element structure to all lanes)"}, | |
{ 0xffb00000, 0xf4200000, AdvancedSIMD, eSize32, eEncodingA1, "VLD4 (multiple 4-element structures)"}, | |
{ 0xffb00300, 0xf4a00300, AdvancedSIMD, eSize32, eEncodingA1, "VLD4 (single 4-element structure to one lane)"}, | |
{ 0xffb00f00, 0xf4a00f00, AdvancedSIMD, eSize32, eEncodingA1, "VLD4 (single 4-element structure to all lanes)"}, | |
{ 0x0e100f00, 0x0c100b00, VFPv2 | VFPv3 | VFPv4 | AdvancedSIMD, eSize32, eEncodingA1, "VLDM"}, | |
{ 0x0e100f00, 0x0c100a00, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA2, "VLDM"}, | |
{ 0x0f300f00, 0x0d100b00, VFPv2 | VFPv3 | VFPv4 | AdvancedSIMD, eSize32, eEncodingA1, "VLDR"}, | |
{ 0x0f300f00, 0x0d100a00, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA2, "VLDR"}, | |
{ 0xfe800f00, 0xf2000600, AdvancedSIMD, eSize32, eEncodingA1, "VMAX, VMIN (integer)"}, | |
{ 0xff800f10, 0xf2000f00, AdvancedSIMD, eSize32, eEncodingA1, "VMAX, VMIN (floating-point)"}, | |
{ 0xfe800f10, 0xf2000900, AdvancedSIMD, eSize32, eEncodingA1, "VMLA, VMLAL, VMLS, VMLSL (integer)"}, | |
{ 0xfe800d50, 0xf2800800, AdvancedSIMD, eSize32, eEncodingA2, "VMLA, VMLAL, VMLS, VMLSL (integer)"}, | |
{ 0xff800f10, 0xf2000d10, AdvancedSIMD, eSize32, eEncodingA1, "VMLA, VMLS (floating-point)"}, | |
{ 0x0fb00e10, 0x0e000a00, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA2, "VMLA, VMLS (floating-point)"}, | |
{ 0xfe800a50, 0xf2800040, AdvancedSIMD, eSize32, eEncodingA1, "VMLA, VMLAL, VMLS, VMLSL (by scalar)"}, | |
{ 0xfe800b50, 0xf2800240, AdvancedSIMD, eSize32, eEncodingA2, "VMLA, VMLAL, VMLS, VMLSL (by scalar)"}, | |
{ 0xfeb80090, 0xf2800010, AdvancedSIMD, eSize32, eEncodingA1, "VMOV (immediate)"}, | |
{ 0x0fb00ef0, 0x0eb00a00, VFPv3 | VFPv4, eSize32, eEncodingA2, "VMOV (immediate)"}, | |
{ 0xffb00f10, 0xf2200110, AdvancedSIMD, eSize32, eEncodingA1, "VMOV (register)"}, | |
{ 0x0fbf0ed0, 0x0eb00a40, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA2, "VMOV (register)"}, | |
{ 0x0f900f1f, 0x0e000b10, AdvancedSIMD, eSize32, eEncodingA1, "VMOV (ARM core register to scalar)"}, | |
{ 0x0f100f1f, 0x0e100b10, AdvancedSIMD, eSize32, eEncodingA1, "VMOV (scalar to ARM core register)"}, | |
{ 0x0fe00f7f, 0x0e000a10, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA1, "VMOV (between ARM core register and single-precision register)"}, | |
{ 0x0fe00fd0, 0x0c400a10, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA1, "VMOV (between two ARM core registers and two single-precision registers)"}, | |
{ 0x0fe00fd0, 0x0c400b10, VFPv2 | VFPv3 | VFPv4 | AdvancedSIMD, eSize32, eEncodingA1, "VMOV (between two ARM core registers and a doubleword extension register)"}, | |
{ 0xfe870fd0, 0xf2800a10, AdvancedSIMD, eSize32, eEncodingA1, "VMOVL"}, | |
{ 0xffb30fd0, 0xf3b20200, AdvancedSIMD, eSize32, eEncodingA1, "VMOVN"}, | |
{ 0x0ff00fff, 0x0ef00a10, VFPv2 | VFPv3 | VFPv4 | AdvancedSIMD, eSize32, eEncodingA1, "VMRS"}, | |
{ 0x0ff00fff, 0x0ee00a10, VFPv2 | VFPv3 | VFPv4 | AdvancedSIMD, eSize32, eEncodingA1, "VMSR"}, | |
{ 0xfe800f10, 0xf2000910, AdvancedSIMD, eSize32, eEncodingA1, "VMUL, VMULL (integer and polynomial)"}, | |
{ 0xfe800d50, 0xf2800c00, AdvancedSIMD, eSize32, eEncodingA2, "VMUL, VMULL (integer and polynomial)"}, | |
{ 0xffa00f10, 0xf3000d10, AdvancedSIMD, eSize32, eEncodingA1, "VMUL (floating-point)"}, | |
{ 0x0fb00e50, 0x0e200a00, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA2, "VMUL (floating-point)"}, | |
{ 0xfe800e50, 0xf2800840, AdvancedSIMD, eSize32, eEncodingA1, "VMUL, VMULL (by scalar)"}, | |
{ 0xfe800f50, 0xf2800a40, AdvancedSIMD, eSize32, eEncodingA2, "VMUL, VMULL (by scalar)"}, | |
{ 0xfeb800b0, 0xf2800030, AdvancedSIMD, eSize32, eEncodingA1, "VMVN (immediate)"}, | |
{ 0xffb30f90, 0xf3b00580, AdvancedSIMD, eSize32, eEncodingA1, "VMVN (register)"}, | |
{ 0xffb30b90, 0xf3b10380, AdvancedSIMD, eSize32, eEncodingA1, "VNEG"}, | |
{ 0x0fbf0ed0, 0x0eb10a40, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA2, "VNEG"}, | |
{ 0x0fb00e10, 0x0e100a00, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA1, "VNMLA, VNMLS, VNMUL"}, | |
{ 0x0fb00e50, 0x0e200a40, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA2, "VNMLA, VNMLS, VNMUL"}, | |
{ 0xffb00f10, 0xf2300110, AdvancedSIMD, eSize32, eEncodingA1, "VORN (register)"}, | |
{ 0xfeb800b0, 0xf2800010, AdvancedSIMD, eSize32, eEncodingA1, "VORR (immediate)"}, | |
{ 0xffb00f10, 0xf2200110, AdvancedSIMD, eSize32, eEncodingA1, "VORR (register)"}, | |
{ 0xffb30f10, 0xf3b00600, AdvancedSIMD, eSize32, eEncodingA1, "VPADAL"}, | |
{ 0xff800f10, 0xf2000b10, AdvancedSIMD, eSize32, eEncodingA1, "VPADD (integer)"}, | |
{ 0xffa00f10, 0xf3000d00, AdvancedSIMD, eSize32, eEncodingA1, "VPADD (floating-point)"}, | |
{ 0xffb30f10, 0xf3b00200, AdvancedSIMD, eSize32, eEncodingA1, "VPADDL"}, | |
{ 0xfe800f00, 0xf2000a00, AdvancedSIMD, eSize32, eEncodingA1, "VPMAX, VPMIN (integer)"}, | |
{ 0xff800f10, 0xf3000f00, AdvancedSIMD, eSize32, eEncodingA1, "VPMAX, VPMIN (floating-point)"}, | |
{ 0x0fbf0f00, 0x0cbd0b00, VFPv2 | VFPv3 | VFPv4 | AdvancedSIMD, eSize32, eEncodingA1, "VPOP"}, | |
{ 0x0fbf0f00, 0x0cbd0a00, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA2, "VPOP"}, | |
{ 0x0fbf0f00, 0x0d2d0b00, VFPv2 | VFPv3 | VFPv4 | AdvancedSIMD, eSize32, eEncodingA1, "VPUSH"}, | |
{ 0x0fbf0f00, 0x0d2d0a00, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA2, "VPUSH"}, | |
{ 0xffb30f90, 0xf3b00700, AdvancedSIMD, eSize32, eEncodingA1, "VQABS"}, | |
{ 0xfe800f10, 0xf2000010, AdvancedSIMD, eSize32, eEncodingA1, "VQADD"}, | |
{ 0xff800d50, 0xf2800900, AdvancedSIMD, eSize32, eEncodingA1, "VQDMLAL, VQDMLSL"}, | |
{ 0xff800b50, 0xf2800340, AdvancedSIMD, eSize32, eEncodingA2, "VQDMLAL, VQDMLSL"}, | |
{ 0xff800f10, 0xf2000b00, AdvancedSIMD, eSize32, eEncodingA1, "VQDMULH"}, | |
{ 0xfe800f50, 0xf2800c40, AdvancedSIMD, eSize32, eEncodingA2, "VQDMULH"}, | |
{ 0xff800f50, 0xf2800d00, AdvancedSIMD, eSize32, eEncodingA1, "VQDMULL"}, | |
{ 0xff800f50, 0xf2800b40, AdvancedSIMD, eSize32, eEncodingA2, "VQDMULL"}, | |
{ 0xffb30f10, 0xf3b20200, AdvancedSIMD, eSize32, eEncodingA1, "VQMOVN, VQMOVUN"}, | |
{ 0xffb30f90, 0xf3b00780, AdvancedSIMD, eSize32, eEncodingA1, "VQNEG"}, | |
{ 0xff800f10, 0xf3000b00, AdvancedSIMD, eSize32, eEncodingA1, "VQRDMULH"}, | |
{ 0xfe800f50, 0xf2800d40, AdvancedSIMD, eSize32, eEncodingA2, "VQRDMULH"}, | |
{ 0xfe800f10, 0xf2000510, AdvancedSIMD, eSize32, eEncodingA1, "VQRSHL"}, | |
{ 0xfe800ed0, 0xf2800850, AdvancedSIMD, eSize32, eEncodingA1, "VQRSHRN, VQRSHRUN"}, | |
{ 0xfe800f10, 0xf2000410, AdvancedSIMD, eSize32, eEncodingA1, "VQSHL (register)"}, | |
{ 0xfe800e10, 0xf2800610, AdvancedSIMD, eSize32, eEncodingA1, "VQSHL, VQSHLU (immediate)"}, | |
{ 0xfe800ed0, 0xf2800810, AdvancedSIMD, eSize32, eEncodingA1, "VQSHRN, VQSHRUN"}, | |
{ 0xfe800f10, 0xf2000210, AdvancedSIMD, eSize32, eEncodingA1, "VQSUB"}, | |
{ 0xff800f50, 0xf3800400, AdvancedSIMD, eSize32, eEncodingA1, "VRADDHN"}, | |
{ 0xffb30e90, 0xf3b30400, AdvancedSIMD, eSize32, eEncodingA1, "VRECPE"}, | |
{ 0xffa00f10, 0xf2000f10, AdvancedSIMD, eSize32, eEncodingA1, "VRECPS"}, | |
{ 0xffb30e10, 0xf3b00000, AdvancedSIMD, eSize32, eEncodingA1, "VREV16, VREV32, VREV64"}, | |
{ 0xfe800f10, 0xf2000100, AdvancedSIMD, eSize32, eEncodingA1, "VRHADD"}, | |
{ 0xfe800f10, 0xf2000500, AdvancedSIMD, eSize32, eEncodingA1, "VRSHL"}, | |
{ 0xfe800f10, 0xf2800210, AdvancedSIMD, eSize32, eEncodingA1, "VRSHR"}, | |
{ 0xff800fd0, 0xf2800850, AdvancedSIMD, eSize32, eEncodingA1, "VRSHRN"}, | |
{ 0xffb30e90, 0xf3b30480, AdvancedSIMD, eSize32, eEncodingA1, "VRSQRTE"}, | |
{ 0xffa00f10, 0xf2200f10, AdvancedSIMD, eSize32, eEncodingA1, "VRSQRTS"}, | |
{ 0xfe800f10, 0xf2800310, AdvancedSIMD, eSize32, eEncodingA1, "VRSRA"}, | |
{ 0xff800f50, 0xf3800600, AdvancedSIMD, eSize32, eEncodingA1, "VRSUBHN"}, | |
{ 0xff800f10, 0xf2800510, AdvancedSIMD, eSize32, eEncodingA1, "VSHL (immediate)"}, | |
{ 0xfe800f10, 0xf2000400, AdvancedSIMD, eSize32, eEncodingA1, "VSHL (register)"}, | |
{ 0xfe800fd0, 0xf2800a10, AdvancedSIMD, eSize32, eEncodingA1, "VSHLL"}, | |
{ 0xffb30fd0, 0xf3b20300, AdvancedSIMD, eSize32, eEncodingA2, "VSHLL"}, | |
{ 0xfe800f10, 0xf2800010, AdvancedSIMD, eSize32, eEncodingA1, "VSHR"}, | |
{ 0xff800fd0, 0xf2800810, AdvancedSIMD, eSize32, eEncodingA1, "VSHRN"}, | |
{ 0xff800f10, 0xf3800510, AdvancedSIMD, eSize32, eEncodingA1, "VSLI"}, | |
{ 0x0fbf0ed0, 0x0eb10ac0, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA1, "VSQRT"}, | |
{ 0xfe800f10, 0xf2800110, AdvancedSIMD, eSize32, eEncodingA1, "VSRA"}, | |
{ 0xff800f10, 0xf3800410, AdvancedSIMD, eSize32, eEncodingA1, "VSRI"}, | |
{ 0xffb00000, 0xf4000000, AdvancedSIMD, eSize32, eEncodingA1, "VST1 (multiple single elements)"}, | |
{ 0xffb00300, 0xf4800000, AdvancedSIMD, eSize32, eEncodingA1, "VST1 (single element from one lane)"}, | |
{ 0xffb00000, 0xf4000000, AdvancedSIMD, eSize32, eEncodingA1, "VST2 (multiple 2-element structures)"}, | |
{ 0xffb00300, 0xf4800100, AdvancedSIMD, eSize32, eEncodingA1, "VST2 (single 2-element structure from one lane)"}, | |
{ 0xffb00000, 0xf4000000, AdvancedSIMD, eSize32, eEncodingA1, "VST3 (multiple 3-element structures)"}, | |
{ 0xffb00300, 0xf4800200, AdvancedSIMD, eSize32, eEncodingA1, "VST3 (single 3-element structure from one lane)"}, | |
{ 0xffb00000, 0xf4000000, AdvancedSIMD, eSize32, eEncodingA1, "VST4 (multiple 4-element structures)"}, | |
{ 0xffb00300, 0xf4800300, AdvancedSIMD, eSize32, eEncodingA1, "VST4 (single 4-element structure from one lane)"}, | |
{ 0x0e100f00, 0x0c000b00, VFPv2 | VFPv3 | VFPv4 | AdvancedSIMD, eSize32, eEncodingA1, "VSTM"}, | |
{ 0x0e100f00, 0x0c000a00, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA2, "VSTM"}, | |
{ 0x0f300f00, 0x0d000b00, VFPv2 | VFPv3 | VFPv4 | AdvancedSIMD, eSize32, eEncodingA1, "VSTR"}, | |
{ 0x0f300f00, 0x0d000a00, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA2, "VSTR"}, | |
{ 0xff800f10, 0xf3000800, AdvancedSIMD, eSize32, eEncodingA1, "VSUB (integer)"}, | |
{ 0xffa00f10, 0xf2200d00, AdvancedSIMD, eSize32, eEncodingA1, "VSUB (floating-point)"}, | |
{ 0x0fb00e50, 0x0e300a40, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingA2, "VSUB (floating-point)"}, | |
{ 0xff800f50, 0xf2800600, AdvancedSIMD, eSize32, eEncodingA1, "VSUBHN"}, | |
{ 0xfe800e50, 0xf2800200, AdvancedSIMD, eSize32, eEncodingA1, "VSUBL, VSUBW"}, | |
{ 0xffb30f90, 0xf3b20000, AdvancedSIMD, eSize32, eEncodingA1, "VSWP"}, | |
{ 0xffb00c10, 0xf3b00800, AdvancedSIMD, eSize32, eEncodingA1, "VTBL, VTBX"}, | |
{ 0xffb30f90, 0xf3b20080, AdvancedSIMD, eSize32, eEncodingA1, "VTRN"}, | |
{ 0xff800f10, 0xe2000810, AdvancedSIMD, eSize32, eEncodingA1, "VTST"}, | |
{ 0xffb30f90, 0xf3b20100, AdvancedSIMD, eSize32, eEncodingA1, "VUZP"}, | |
{ 0xffb30f90, 0xf3b20180, AdvancedSIMD, eSize32, eEncodingA1, "VZIP"}, | |
{ 0x00000000, 0x00000000, ARMvAll, eSize32, eEncodingA1, "UNKNOWN"} | |
}; | |
ARMOpcode thumb_opcodes[] = { | |
{ 0xfbe08000, 0xf1400000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "ADC Immediate"}, | |
{ 0xffffffc0, 0x00004140, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "ADC Register"}, | |
{ 0xffe08000, 0xeb400000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "ADC Register"}, | |
{ 0xfffffe00, 0x00001c00, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "ADD (immediate, Thumb)"}, | |
{ 0xfffff800, 0x00003000, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT2, "ADD (immediate, Thumb)"}, | |
{ 0xfbe08000, 0xf1000000, ARMv6T2 | ARMv7, eSize32, eEncodingT3, "ADD (immediate, Thumb)"}, | |
{ 0xfbf08000, 0xf2000000, ARMv6T2 | ARMv7, eSize32, eEncodingT4, "ADD (immediate, Thumb)"}, | |
{ 0xfffffe00, 0x00001800, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "ADD (register, Thumb)"}, | |
{ 0xffffff00, 0x00004400, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT2, "ADD (register, Thumb)"}, | |
{ 0xffe08000, 0xeb000000, ARMv6T2 | ARMv7, eSize32, eEncodingT3, "ADD (register, Thumb)"}, | |
{ 0xfffff800, 0x0000a800, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "ADD (SP plus immediate)"}, | |
{ 0xffffff80, 0x0000b000, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT2, "ADD (SP plus immediate)"}, | |
{ 0xfbef8000, 0xf10d0000, ARMv6T2 | ARMv7, eSize32, eEncodingT3, "ADD (SP plus immediate)"}, | |
{ 0xfbff8000, 0xf20d0000, ARMv6T2 | ARMv7, eSize32, eEncodingT4, "ADD (SP plus immediate)"}, | |
{ 0xffffff78, 0x00004468, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "ADD (SP plus register, Thumb)"}, | |
{ 0xffffff87, 0x00004485, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT2, "ADD (SP plus register, Thumb)"}, | |
{ 0xffef8000, 0xeb0d0000, ARMv6T2 | ARMv7, eSize32, eEncodingT3, "ADD (SP plus register, Thumb)"}, | |
{ 0xfffff800, 0x0000a000, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "ADR"}, | |
{ 0xfbff8000, 0xf2af0000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "ADR"}, | |
{ 0xfbff8000, 0xf20f0000, ARMv6T2 | ARMv7, eSize32, eEncodingT3, "ADR"}, | |
{ 0xfbe08000, 0xf0000000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "AND (immediate)"}, | |
{ 0xffffffc0, 0x00004000, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "AND (register)"}, | |
{ 0xffe08000, 0xea000000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "AND (register)"}, | |
{ 0xfffff800, 0x00001000, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "ASR (immediate)"}, | |
{ 0xffef8030, 0xea4f0020, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "ASR (immediate)"}, | |
{ 0xffffffc0, 0x00004100, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "ASR (register)"}, | |
{ 0xffe0f0f0, 0xfa40f000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "ASR (register)"}, | |
{ 0xfffff000, 0x0000d000, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "B"}, | |
{ 0xfffff800, 0x0000e000, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT2, "B"}, | |
{ 0xf800d000, 0xf0008000, ARMv6T2 | ARMv7, eSize32, eEncodingT3, "B"}, | |
{ 0xf800d000, 0xf0009000, ARMv6T2 | ARMv7, eSize32, eEncodingT4, "B"}, | |
{ 0xffff8020, 0xf36f0000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "BFC"}, | |
{ 0xfff08020, 0xf3600000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "BFI"}, | |
{ 0xfbe08000, 0xf0200000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "BIC (immediate)"}, | |
{ 0xffffffc0, 0x00004380, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "BIC (register)"}, | |
{ 0xffe08000, 0xea200000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "BIC (register)"}, | |
{ 0xffffff00, 0x0000be00, ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "BKPT"}, | |
{ 0xf800d000, 0xf000d000, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingT1, "BL, BLX (immediate)"}, | |
{ 0xf800d000, 0xf000c000, ARMv5TAll | ARMv6All | ARMv7, eSize32, eEncodingT2, "BL, BLX (immediate)"}, | |
{ 0xffffff87, 0x00004780, ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "BLX (register)"}, | |
{ 0xffffff87, 0x00004700, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "BX"}, | |
{ 0xfff0ffff, 0xf3c08f00, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "BXJ"}, | |
{ 0xffffffe8, 0x0000b660, ARMv6All | ARMv7, eSize16, eEncodingT1, "CPS (Thumb)"}, | |
{ 0xfffff800, 0xf3af8000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "CPS (Thumb)"}, | |
{ 0xfffff500, 0x0000b100, ARMv6T2 | ARMv7, eSize16, eEncodingT1, "CBNZ, CBZ"}, | |
{ 0xff000010, 0xee000000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "CDP, CDP2"}, | |
{ 0xff000010, 0xfe000000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "CDP, CDP2"}, | |
{ 0xffffffff, 0xf3bf8f2f, ARMv7, eSize32, eEncodingT1, "CLREX"}, | |
{ 0xfff0f0f0, 0xfab0f080, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "CLZ"}, | |
{ 0xfbf08f00, 0xf1100f00, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "CMN (immediate)"}, | |
{ 0xffffffc0, 0x000042c0, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "CMN (register)"}, | |
{ 0xfff08f00, 0xeb100f00, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "CMN (register)"}, | |
{ 0xfffff800, 0x00002800, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "CMP (immediate)"}, | |
{ 0xfbf08f00, 0xf1b00f00, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "CMP (immediate)"}, | |
{ 0xffffffc0, 0x00004280, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "CMP (register)"}, | |
{ 0xffffff00, 0x00004500, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT2, "CMP (register)"}, | |
{ 0xfff08f00, 0xebb00f00, ARMv6T2 | ARMv7, eSize32, eEncodingT3, "CMP (register)"}, | |
{ 0xfffffff0, 0xf3af80f0, ARMv7, eSize32, eEncodingT1, "DBG"}, | |
{ 0xfffffff0, 0xf3bf8f50, ARMv7, eSize32, eEncodingT1, "DMB"}, | |
{ 0xfffffff0, 0xf3bf8f40, ARMv7, eSize32, eEncodingT1, "DSB"}, | |
{ 0xfbe08000, 0xf0800000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "EOR (immediate)"}, | |
{ 0xffffffc0, 0x00004040, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "EOR (register)"}, | |
{ 0xffe08000, 0xea800000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "EOR (register)"}, | |
{ 0xfffffff0, 0xf3bf8f60, ARMv7, eSize32, eEncodingT1, "ISB"}, | |
{ 0xffffff00, 0x0000bf00, ARMv6T2 | ARMv7, eSize16, eEncodingT1, "IT"}, | |
{ 0xffd0ffff, 0xe810c000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "RFE"}, | |
{ 0xffd0ffff, 0xe990c000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "RFE"}, | |
{ 0xfe100000, 0xec100000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "LDC, LDC2 (immediate)"}, | |
{ 0xfe100000, 0xfc100000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "LDC, LDC2 (immediate)"}, | |
{ 0xfe1f0000, 0xec1f0000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "LDC, LDC2 (literal)"}, | |
{ 0xfe1f0000, 0xfc1f0000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "LDC, LDC2 (literal)"}, | |
{ 0xfffff800, 0x0000c800, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "LDM/LDMIA/LDMFD (Thumb)"}, | |
{ 0xffd02000, 0xe8900000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "LDM/LDMIA/LDMFD (Thumb)"}, | |
{ 0xffd02000, 0xe9100000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "LDMDB/LDMEA"}, | |
{ 0xfffff800, 0x00006800, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "LDR (immediate, Thumb)"}, | |
{ 0xfffff800, 0x00009800, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT2, "LDR (immediate, Thumb)"}, | |
{ 0xfff00000, 0xf8d00000, ARMv6T2 | ARMv7, eSize32, eEncodingT3, "LDR (immediate, Thumb)"}, | |
{ 0xfff00800, 0xf8500800, ARMv6T2 | ARMv7, eSize32, eEncodingT4, "LDR (immediate, Thumb)"}, | |
{ 0xfff0ffc0, 0xf910f000, ARMv7, eSize32, eEncodingT1, "PLI (register)"}, | |
{ 0xfffff800, 0x00004800, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "LDR (literal)"}, | |
{ 0xff7f0000, 0xf85f0000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "LDR (literal)"}, | |
{ 0xfffffe00, 0x00005800, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "LDR (register, Thumb)"}, | |
{ 0xfff00fc0, 0xf8500000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "LDR (register, Thumb)"}, | |
{ 0xfffff800, 0x00007800, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "LDRB (immediate, Thumb)"}, | |
{ 0xfff00000, 0xf8900000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "LDRB (immediate, Thumb)"}, | |
{ 0xfff00800, 0xf8100800, ARMv6T2 | ARMv7, eSize32, eEncodingT3, "LDRB (immediate, Thumb)"}, | |
{ 0xff7f0000, 0xf81f0000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "LDRB (literal)"}, | |
{ 0xfffffe00, 0x00005c00, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "LDRB (register)"}, | |
{ 0xfff00fc0, 0xf8100000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "LDRB (register)"}, | |
{ 0xfff00f00, 0xf8100e00, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "LDRBT"}, | |
{ 0xfe500000, 0xe8500000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "LDRD (immediate)"}, | |
{ 0xfe5f0000, 0xe85f0000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "LDRD (literal)"}, | |
{ 0xfff00f00, 0xe8500f00, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "LDREX"}, | |
{ 0xfff00fff, 0xe8d00f4f, ARMv7, eSize32, eEncodingT1, "LDREXB"}, | |
{ 0xfff000ff, 0xe8d0007f, ARMv7, eSize32, eEncodingT1, "LDREXD"}, | |
{ 0xfff00fff, 0xe8d00f5f, ARMv7, eSize32, eEncodingT1, "LDREXH"}, | |
{ 0xfffff800, 0x00008800, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "LDRH (immediate, Thumb)"}, | |
{ 0xfff00000, 0xf8b00000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "LDRH (immediate, Thumb)"}, | |
{ 0xfff00800, 0xf8300800, ARMv6T2 | ARMv7, eSize32, eEncodingT3, "LDRH (immediate, Thumb)"}, | |
{ 0xff7f0000, 0xf83f0000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "LDRH (literal)"}, | |
{ 0xfffffe00, 0x00005a00, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "LDRH (register)"}, | |
{ 0xfff00fc0, 0xf8300000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "LDRH (register)"}, | |
{ 0xfff00f00, 0xf8300e00, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "LDRHT"}, | |
{ 0xfff00000, 0xf9900000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "LDRSB (immediate)"}, | |
{ 0xfff00800, 0xf9100800, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "LDRSB (immediate)"}, | |
{ 0xff7f0000, 0xf91f0000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "LDRSB (literal)"}, | |
{ 0xfffffe00, 0x00005600, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "LDRSB (register)"}, | |
{ 0xfff00fc0, 0xf9100000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "LDRSB (register)"}, | |
{ 0xfff00f00, 0xf9100e00, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "LDRSBT"}, | |
{ 0xfff00000, 0xf9b00000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "LDRSH (immediate)"}, | |
{ 0xfff00800, 0xf9300800, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "LDRSH (immediate)"}, | |
{ 0xff7f0000, 0xf93f0000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "LDRSH (literal)"}, | |
{ 0xfffffe00, 0x00005e00, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "LDRSH (register)"}, | |
{ 0xfff00fc0, 0xf9300000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "LDRSH (register)"}, | |
{ 0xfff00f00, 0xf9300e00, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "LDRSHT"}, | |
{ 0xfff00f00, 0xf8500e00, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "LDRT"}, | |
{ 0xfffff800, 0x00000000, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "LSL (immediate)"}, | |
{ 0xffef8030, 0xea4f0000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "LSL (immediate)"}, | |
{ 0xffffffc0, 0x00004080, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "LSL (register)"}, | |
{ 0xffe0f0f0, 0xfa00f000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "LSL (register)"}, | |
{ 0xfffff800, 0x00000800, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "LSR (immediate)"}, | |
{ 0xffef8030, 0xea4f0010, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "LSR (immediate)"}, | |
{ 0xffffffc0, 0x000040c0, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "LSR (register)"}, | |
{ 0xffe0f0f0, 0xfa20f000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "LSR (register)"}, | |
{ 0xff100010, 0xee000010, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "MCR, MCR2"}, | |
{ 0xff100010, 0xfe000010, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "MCR, MCR2"}, | |
{ 0xfff00000, 0xec400000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "MCRR, MCRR2"}, | |
{ 0xfff00000, 0xec400000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "MCRR, MCRR2"}, | |
{ 0xfff000f0, 0xfb000000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "MLA"}, | |
{ 0xfff000f0, 0xfb000010, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "MLS"}, | |
{ 0xfffff800, 0x00002000, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "MOV (immediate)"}, | |
{ 0xfbef8000, 0xf04f0000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "MOV (immediate)"}, | |
{ 0xfbf08000, 0xf2400000, ARMv6T2 | ARMv7, eSize32, eEncodingT3, "MOV (immediate)"}, | |
{ 0xffffff00, 0x00004600, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "MOV (register, Thumb)"}, | |
{ 0xffffffc0, 0x00000000, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT2, "MOV (register, Thumb)"}, | |
{ 0xffeff0f0, 0xea4f0000, ARMv6T2 | ARMv7, eSize32, eEncodingT3, "MOV (register, Thumb)"}, | |
{ 0xfbf08000, 0xf2c00000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "MOVT"}, | |
{ 0xff100010, 0xee100010, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "MRC, MRC2"}, | |
{ 0xff100010, 0xfe100010, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "MRC, MRC2"}, | |
{ 0xfff00000, 0xec500000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "MRRC, MRRC2"}, | |
{ 0xfff00000, 0xfc500000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "MRRC, MRRC2"}, | |
{ 0xffeff0ff, 0xf3ef8000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "MRS"}, | |
{ 0xffe0f0ff, 0xf3808000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "MSR (register)"}, | |
{ 0xffffffc0, 0x00004340, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "MUL"}, | |
{ 0xfff0f0f0, 0xfb00f000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "MUL"}, | |
{ 0xfbef8000, 0xf06f0000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "MVN (immediate)"}, | |
{ 0xffffffc0, 0x000043c0, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "MVN (register)"}, | |
{ 0xffef8000, 0xea6f0000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "MVN (register)"}, | |
{ 0xffffffff, 0x0000bf00, ARMv6T2 | ARMv7, eSize16, eEncodingT1, "NOP"}, | |
{ 0xffffffff, 0xf3af8000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "NOP"}, | |
{ 0xfbe08000, 0xf0600000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "ORN (immediate)"}, | |
{ 0xffe08000, 0xea600000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "ORN (register)"}, | |
{ 0xfbe08000, 0xf0400000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "ORR (immediate)"}, | |
{ 0xffffffc0, 0x00004300, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "ORR (register)"}, | |
{ 0xffe08000, 0xea400000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "ORR (register)"}, | |
{ 0xffe08000, 0xeac00000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "PKH"}, | |
{ 0xffd0f000, 0xf890f000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "PLD, PLDW (immediate)"}, | |
{ 0xffd0ff00, 0xf810fc00, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "PLD, PLDW (immediate)"}, | |
{ 0xff7ff000, 0xf81ff000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "PLD (literal)"}, | |
{ 0xffd0ffc0, 0xf810f000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "PLD, PLDW (register)"}, | |
{ 0xfff0f000, 0xf990f000, ARMv7, eSize32, eEncodingT1, "PLI (immediate, literal)"}, | |
{ 0xfff0ff00, 0xf910fc00, ARMv7, eSize32, eEncodingT2, "PLI (immediate, literal)"}, | |
{ 0xff7ff000, 0xf91ff000, ARMv7, eSize32, eEncodingT3, "PLI (immediate, literal)"}, | |
{ 0xfffffe00, 0x0000bc00, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "POP (Thumb)"}, | |
{ 0xffff2000, 0xe8bd0000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "POP (Thumb)"}, | |
{ 0xffff0fff, 0xf85d0b04, ARMv6T2 | ARMv7, eSize32, eEncodingT3, "POP (Thumb)"}, | |
{ 0xfffffe00, 0x0000b400, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "PUSH"}, | |
{ 0xffffa000, 0xe92d0000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "PUSH"}, | |
{ 0xffff0fff, 0xf84d0d04, ARMv6T2 | ARMv7, eSize32, eEncodingT3, "PUSH"}, | |
{ 0xfff0f0f0, 0xfa80f080, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "QADD"}, | |
{ 0xfff0f0f0, 0xfa90f010, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "QADD16"}, | |
{ 0xfff0f0f0, 0xfa80f010, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "QADD8"}, | |
{ 0xfff0f0f0, 0xfaa0f010, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "QASX"}, | |
{ 0xfff0f0f0, 0xfa80f090, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "QDADD"}, | |
{ 0xfff0f0f0, 0xfa80f0b0, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "QDSUB"}, | |
{ 0xfff0f0f0, 0xfae0f010, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "QSAX"}, | |
{ 0xfff0f0f0, 0xfa80f0a0, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "QSUB"}, | |
{ 0xfff0f0f0, 0xfad0f010, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "QSUB16"}, | |
{ 0xfff0f0f0, 0xfac0f010, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "QSUB8"}, | |
{ 0xfff0f0f0, 0xfa90f0a0, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "RBIT"}, | |
{ 0xffffffc0, 0x0000ba00, ARMv6All | ARMv7, eSize16, eEncodingT1, "REV"}, | |
{ 0xfff0f0f0, 0xfa90f080, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "REV"}, | |
{ 0xffffffc0, 0x0000ba40, ARMv6All | ARMv7, eSize16, eEncodingT1, "REV16"}, | |
{ 0xfff0f0f0, 0xfa90f090, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "REV16"}, | |
{ 0xffffffc0, 0x0000bac0, ARMv6All | ARMv7, eSize16, eEncodingT1, "REVSH"}, | |
{ 0xfff0f0f0, 0xfa90f0b0, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "REVSH"}, | |
{ 0xffef8030, 0xea4f0030, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "ROR (immediate)"}, | |
{ 0xffffffc0, 0x000041c0, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "ROR (register)"}, | |
{ 0xffe0f0f0, 0xfa60f000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "ROR (register)"}, | |
{ 0xffeff0f0, 0xea4f0030, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "RRX"}, | |
{ 0xffffffc0, 0x00004240, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "RSB (immediate)"}, | |
{ 0xfbe08000, 0xf1c00000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "RSB (immediate)"}, | |
{ 0xffe08000, 0xebc00000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "RSB (register)"}, | |
{ 0xfff0f0f0, 0xfa90f000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SADD16"}, | |
{ 0xfff0f0f0, 0xfa80f000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SADD8"}, | |
{ 0xfff0f0f0, 0xfaa0f000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SASX"}, | |
{ 0xfbe08000, 0xf1600000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SBC (immediate)"}, | |
{ 0xffffffc0, 0x00004180, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "SBC (register)"}, | |
{ 0xffe08000, 0xeb600000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "SBC (register)"}, | |
{ 0xfff08020, 0xf3400000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SBFX"}, | |
{ 0xfff0f0f0, 0xfb90f0f0, ARMv7R | ARMv7VE, eSize32, eEncodingT1, "SDIV"}, | |
{ 0xfff0f0f0, 0xfaa0f080, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SEL"}, | |
{ 0xfffffff7, 0x0000b650, ARMv6All | ARMv7, eSize16, eEncodingT1, "SETEND"}, | |
{ 0xffffffff, 0x0000bf40, ARMv7, eSize16, eEncodingT1, "SEV"}, | |
{ 0xffffffff, 0xf3af8004, ARMv7, eSize32, eEncodingT2, "SEV"}, | |
{ 0xfff0f0f0, 0xfa90f020, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SHADD16"}, | |
{ 0xfff0f0f0, 0xfa80f020, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SHADD8"}, | |
{ 0xfff0f0f0, 0xfaa0f020, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SHASX"}, | |
{ 0xfff0f0f0, 0xfae0f020, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SHSAX"}, | |
{ 0xfff0f0f0, 0xfad0f020, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SHSUB16"}, | |
{ 0xfff0f0f0, 0xfac0f020, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SHSUB8"}, | |
{ 0xfff000c0, 0xfb100000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SMLABB, SMLABT, SMLATB, SMLATT"}, | |
{ 0xfff000e0, 0xfb200000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SMLAD"}, | |
{ 0xfff000f0, 0xfbc00000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SMLAL"}, | |
{ 0xfff000c0, 0xfbc00080, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SMLALBB, SMLALBT, SMLALTB, SMLALTT"}, | |
{ 0xfff000e0, 0xfbc000c0, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SMLALD"}, | |
{ 0xfff000e0, 0xfb300000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SMLAWB, SMLAWT"}, | |
{ 0xfff000e0, 0xfb400000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SMLSD"}, | |
{ 0xfff000e0, 0xfbd000c0, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SMLSLD"}, | |
{ 0xfff000e0, 0xfb500000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SMMLA"}, | |
{ 0xfff000e0, 0xfb600000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SMMLS"}, | |
{ 0xfff0f0e0, 0xfb50f000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SMMUL"}, | |
{ 0xfff0f0e0, 0xfb20f000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SMUAD"}, | |
{ 0xfff0f0c0, 0xfb10f000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SMULBB, SMULBT, SMULTB, SMULTT"}, | |
{ 0xfff000f0, 0xfb800000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SMULL"}, | |
{ 0xfff0f0e0, 0xfb30f000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SMULWB, SMULWT"}, | |
{ 0xfff0f0e0, 0xfb40f000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SMUSD"}, | |
{ 0xffd08020, 0xf3000000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SSAT"}, | |
{ 0xfff0f0f0, 0xf3200000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SSAT16"}, | |
{ 0xfff0f0f0, 0xfae0f000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SSAX"}, | |
{ 0xfff0f0f0, 0xfad0f000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SSUB16"}, | |
{ 0xfff0f0f0, 0xfac0f000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SSUB8"}, | |
{ 0xfe100000, 0xec000000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "STC, STC2"}, | |
{ 0xfe100000, 0xfc000000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "STC, STC2"}, | |
{ 0xfffff800, 0x0000c000, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "STM (STMIA, STMEA)"}, | |
{ 0xffd0a000, 0xe8800000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "STM (STMIA, STMEA)"}, | |
{ 0xffd0a000, 0xe9000000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "STMDB (STMFD)"}, | |
{ 0xfffff800, 0x00006000, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "STR (immediate, Thumb)"}, | |
{ 0xfffff800, 0x00009000, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT2, "STR (immediate, Thumb)"}, | |
{ 0xfff00000, 0xf8c00000, ARMv6T2 | ARMv7, eSize32, eEncodingT3, "STR (immediate, Thumb)"}, | |
{ 0xfff00800, 0xf8400800, ARMv6T2 | ARMv7, eSize32, eEncodingT4, "STR (immediate, Thumb)"}, | |
{ 0xfffffe00, 0x00005000, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "STR (register)"}, | |
{ 0xfff00fc0, 0xf8400000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "STR (register)"}, | |
{ 0xfffff800, 0x00007000, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "STRB (immediate, Thumb)"}, | |
{ 0xfff00000, 0xf8800000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "STRB (immediate, Thumb)"}, | |
{ 0xfff00800, 0xf8000800, ARMv6T2 | ARMv7, eSize32, eEncodingT3, "STRB (immediate, Thumb)"}, | |
{ 0xfffffe00, 0x00005400, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "STRB (register)"}, | |
{ 0xfff00fc0, 0xf8000000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "STRB (register)"}, | |
{ 0xfff00f00, 0xf8000e00, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "STRBT"}, | |
{ 0xfe500000, 0xe8400000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "STRD (immediate)"}, | |
{ 0xfff00000, 0xe8400000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "STREX"}, | |
{ 0xfff00ff0, 0xe8c00f40, ARMv7, eSize32, eEncodingT1, "STREXB"}, | |
{ 0xfff000f0, 0xe8c00070, ARMv7, eSize32, eEncodingT1, "STREXD"}, | |
{ 0xfff00ff0, 0xe8c00f50, ARMv7, eSize32, eEncodingT1, "STREXH"}, | |
{ 0xfffff800, 0x00008000, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "STRH (immediate, Thumb)"}, | |
{ 0xfff00000, 0xf8a00000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "STRH (immediate, Thumb)"}, | |
{ 0xfff00800, 0xf8200800, ARMv6T2 | ARMv7, eSize32, eEncodingT3, "STRH (immediate, Thumb)"}, | |
{ 0xfffffe00, 0x00005200, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "STRH (register)"}, | |
{ 0xfff00fc0, 0xf8200000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "STRH (register)"}, | |
{ 0xfff00f00, 0xf8200e00, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "STRHT"}, | |
{ 0xfff00f00, 0xf8400e00, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "STRT"}, | |
{ 0xfffffe00, 0x00001e00, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "SUB (immediate, Thumb)"}, | |
{ 0xfffff800, 0x00003800, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT2, "SUB (immediate, Thumb)"}, | |
{ 0xfbe08000, 0xf1a00000, ARMv6T2 | ARMv7, eSize32, eEncodingT3, "SUB (immediate, Thumb)"}, | |
{ 0xfbf08000, 0xf2a00000, ARMv6T2 | ARMv7, eSize32, eEncodingT4, "SUB (immediate, Thumb)"}, | |
{ 0xfffffe00, 0x00001a00, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "SUB (register)"}, | |
{ 0xffe08000, 0xeba00000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "SUB (register)"}, | |
{ 0xffffff80, 0x0000b080, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "SUB (SP minus immediate)"}, | |
{ 0xfbef8000, 0xf1ad0000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "SUB (SP minus immediate)"}, | |
{ 0xfbff8000, 0xf2ad0000, ARMv6T2 | ARMv7, eSize32, eEncodingT3, "SUB (SP minus immediate)"}, | |
{ 0xffef8000, 0xebad0000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SUB (SP minus register)"}, | |
{ 0xffffff00, 0x0000df00, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "SVC"}, | |
{ 0xfff0f0c0, 0xfa40f080, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SXTAB"}, | |
{ 0xfff0f0c0, 0xfa20f080, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SXTAB16"}, | |
{ 0xfff0f0c0, 0xfa00f080, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SXTAH"}, | |
{ 0xffffffc0, 0x0000b240, ARMv6All | ARMv7, eSize16, eEncodingT1, "SXTB"}, | |
{ 0xfffff0c0, 0xfa4ff080, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "SXTB"}, | |
{ 0xfffff0c0, 0xfa2ff080, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SXTB16"}, | |
{ 0xffffffc0, 0x0000b200, ARMv6All | ARMv7, eSize16, eEncodingT1, "SXTH"}, | |
{ 0xfffff0c0, 0xfa0ff080, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "SXTH"}, | |
{ 0xfff0fff0, 0xe8d0f000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "TBB"}, | |
{ 0xfff0fff0, 0xe8d0f010, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "TBH"}, | |
{ 0xfbf08f00, 0xf0900f00, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "TEQ (immediate)"}, | |
{ 0xfff08f00, 0xea900f00, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "TEQ (register)"}, | |
{ 0xfbf08f00, 0xf0100f00, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "TST (immediate)"}, | |
{ 0xffffffc0, 0x00004200, ARMv4T | ARMv5TAll | ARMv6All | ARMv7, eSize16, eEncodingT1, "TST (register)"}, | |
{ 0xfff08f00, 0xea100f00, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "TST (register)"}, | |
{ 0xfff0f0f0, 0xfa90f040, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UADD16"}, | |
{ 0xfff0f0f0, 0xfa80f040, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UADD8"}, | |
{ 0xfff0f0f0, 0xfaa0f040, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UASX"}, | |
{ 0xfff08020, 0xf3c00000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UBFX"}, | |
{ 0xffffff00, 0x0000de00, ARMv4T | ARMv5TAll | ARMv6 | ARMv7, eSize16, eEncodingT1, "UDF"}, | |
{ 0xfff0f000, 0xf7f0a000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "UDF"}, | |
{ 0xfff0f0f0, 0xfbb0f0f0, ARMv7R | ARMv7VE, eSize32, eEncodingT1, "UDIV"}, | |
{ 0xfff0f0f0, 0xfa90f060, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UHADD16"}, | |
{ 0xfff0f0f0, 0xfa80f060, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UHADD8"}, | |
{ 0xfff0f0f0, 0xfaa0f060, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UHASX"}, | |
{ 0xfff0f0f0, 0xfae0f060, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UHSAX"}, | |
{ 0xfff0f0f0, 0xfad0f060, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UHSUB16"}, | |
{ 0xfff0f0f0, 0xfac0f060, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UHSUB8"}, | |
{ 0xfff000f0, 0xfbe00060, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UMAAL"}, | |
{ 0xfff000f0, 0xfbe00000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UMLAL"}, | |
{ 0xfff000f0, 0xfba00000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UMULL"}, | |
{ 0xfff0f0f0, 0xfa90f050, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UQADD16"}, | |
{ 0xfff0f0f0, 0xfa80f050, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UQADD8"}, | |
{ 0xfff0f0f0, 0xfaa0f050, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UQASX"}, | |
{ 0xfff0f0f0, 0xfae0f050, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UQSAX"}, | |
{ 0xfff0f0f0, 0xfad0f050, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UQSUB16"}, | |
{ 0xfff0f0f0, 0xfac0f050, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UQSUB8"}, | |
{ 0xfff0f0f0, 0xfb70f000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "USAD8"}, | |
{ 0xfff000f0, 0xfb700000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "USADA8"}, | |
{ 0xffd08020, 0xf3800000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "USAT"}, | |
{ 0xfff0f0f0, 0xf3a00000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "USAT16"}, | |
{ 0xfff0f0f0, 0xfae0f040, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "USAX"}, | |
{ 0xfff0f0f0, 0xfad0f040, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "USUB16"}, | |
{ 0xfff0f0f0, 0xfac0f040, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "USUB8"}, | |
{ 0xfff0f0c0, 0xfa50f080, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UXTAB"}, | |
{ 0xfff0f0c0, 0xfa30f080, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UXTAB16"}, | |
{ 0xfff0f0c0, 0xfa10f080, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UXTAH"}, | |
{ 0xffffffc0, 0x0000b2c0, ARMv6All | ARMv7, eSize16, eEncodingT1, "UXTB"}, | |
{ 0xfffff0c0, 0xfa5ff080, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "UXTB"}, | |
{ 0xfffff0c0, 0xfa3ff080, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "UXTB16"}, | |
{ 0xffffffc0, 0x0000b280, ARMv6All | ARMv7, eSize16, eEncodingT1, "UXTH"}, | |
{ 0xfffff0c0, 0xfa1ff080, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "UXTH"}, | |
{ 0xffffffff, 0x0000bf20, ARMv7, eSize16, eEncodingT1, "WFE"}, | |
{ 0xffffffff, 0xf3af8002, ARMv7, eSize32, eEncodingT2, "WFE"}, | |
{ 0xffffffff, 0x0000bf30, ARMv7, eSize16, eEncodingT1, "WFI"}, | |
{ 0xffffffff, 0xf3af8003, ARMv7, eSize32, eEncodingT2, "WFI"}, | |
{ 0xffffffff, 0x0000bf10, ARMv7, eSize16, eEncodingT1, "YIELD"}, | |
{ 0xffffffff, 0xf3af8001, ARMv7, eSize32, eEncodingT2, "YIELD"}, | |
{ 0xffffff00, 0xf3de8f00, ARMv6T2 | ARMv7VE, eSize32, eEncodingT1, "ERET"}, | |
{ 0xfff0f000, 0xf7e08000, ARMv7VE, eSize32, eEncodingT1, "HVC"}, | |
{ 0xffe0f0ef, 0xf3e08020, ARMv7VE, eSize32, eEncodingT1, "MRS (Banked register)"}, | |
{ 0xfff0ffff, 0xf7f08000, ARMSecurityExtension, eSize32, eEncodingT1, "SMC (previously SMI)"}, | |
{ 0x0ffffff0, 0x01600070, ARMSecurityExtension, eSize32, eEncodingT2, "SMC (previously SMI)"}, | |
{ 0xffdfffe0, 0xe80dc000, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SRS, Thumb"}, | |
{ 0xffdfffe0, 0xe98dc000, ARMv6T2 | ARMv7, eSize32, eEncodingT2, "SRS, Thumb"}, | |
{ 0xffffff00, 0xf3de8f00, ARMv6T2 | ARMv7, eSize32, eEncodingT1, "SUBS PC, LR, Thumb"}, | |
{ 0xef800f10, 0xef000710, AdvancedSIMD, eSize32, eEncodingT1, "VABA, VABAL"}, | |
{ 0xef800f50, 0xef800500, AdvancedSIMD, eSize32, eEncodingT2, "VABA, VABAL"}, | |
{ 0xef800f10, 0xef000700, AdvancedSIMD, eSize32, eEncodingT1, "VABD, VABDL (integer)"}, | |
{ 0xef800f50, 0xef800700, AdvancedSIMD, eSize32, eEncodingT2, "VABD, VABDL (integer)"}, | |
{ 0xffa00f10, 0xff200d00, AdvancedSIMD, eSize32, eEncodingT1, "VABD (floating-point)"}, | |
{ 0xffb30b90, 0xffb10300, AdvancedSIMD, eSize32, eEncodingT1, "VABS"}, | |
{ 0xffbf0ed0, 0xeeb00ac0, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT2, "VABS"}, | |
{ 0xff800f10, 0xff000e10, AdvancedSIMD, eSize32, eEncodingT1, "VACGE, VACGT, VACLE, VACLT"}, | |
{ 0xff800f10, 0xef000800, AdvancedSIMD, eSize32, eEncodingT1, "VADD (integer)"}, | |
{ 0xffa00f10, 0xef000d00, AdvancedSIMD, eSize32, eEncodingT1, "VADD (floating-point)"}, | |
{ 0xffb00e50, 0xee300a00, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT2, "VADD (floating-point)"}, | |
{ 0xff800f50, 0xef800400, AdvancedSIMD, eSize32, eEncodingT1, "VADDHN"}, | |
{ 0xef800e50, 0xef800000, AdvancedSIMD, eSize32, eEncodingT1, "VADDL, VADDW"}, | |
{ 0xffb00f10, 0xef000110, AdvancedSIMD, eSize32, eEncodingT1, "VAND (register)"}, | |
{ 0xefb800b0, 0xef800030, AdvancedSIMD, eSize32, eEncodingT1, "VBIC (immediate)"}, | |
{ 0xffb00f10, 0xef100110, AdvancedSIMD, eSize32, eEncodingT1, "VBIC (register)"}, | |
{ 0xff800f10, 0xff000110, AdvancedSIMD, eSize32, eEncodingT1, "VBIF, VBIT, VBSL"}, | |
{ 0xff800f10, 0xff000810, AdvancedSIMD, eSize32, eEncodingT1, "VCEQ (register)"}, | |
{ 0xffa00f10, 0xef000e00, AdvancedSIMD, eSize32, eEncodingT2, "VCEQ (register)"}, | |
{ 0xffb30b90, 0xffb10100, AdvancedSIMD, eSize32, eEncodingT1, "VCEQ (immediate #0)"}, | |
{ 0xef800f10, 0xef000310, AdvancedSIMD, eSize32, eEncodingT1, "VCGE (register)"}, | |
{ 0xffa00f10, 0xff000e00, AdvancedSIMD, eSize32, eEncodingT2, "VCGE (register)"}, | |
{ 0xffb30b90, 0xffb10080, AdvancedSIMD, eSize32, eEncodingT1, "VCGE (immediate #0)"}, | |
{ 0xef800f10, 0xef000300, AdvancedSIMD, eSize32, eEncodingT1, "VCGT (register)"}, | |
{ 0xffa00f10, 0xff200e00, AdvancedSIMD, eSize32, eEncodingT2, "VCGT (register)"}, | |
{ 0xffb30b90, 0xffb10000, AdvancedSIMD, eSize32, eEncodingT1, "VCGT (immediate #0)"}, | |
{ 0xffb30b90, 0xffb10180, AdvancedSIMD, eSize32, eEncodingT1, "VCLE (immediate #0)"}, | |
{ 0xffb30f90, 0xffb00400, AdvancedSIMD, eSize32, eEncodingT1, "VCLS"}, | |
{ 0xffb30b90, 0xffb10200, AdvancedSIMD, eSize32, eEncodingT1, "VCLT (immediate #0)"}, | |
{ 0xffb30f90, 0xffb00480, AdvancedSIMD, eSize32, eEncodingT1, "VCLZ"}, | |
{ 0xffbf0e50, 0xeeb40a40, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT1, "VCMP, VCMPE"}, | |
{ 0xffbf0e7f, 0xeeb50a40, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT2, "VCMP, VCMPE"}, | |
{ 0xffb30f90, 0xffb00500, AdvancedSIMD, eSize32, eEncodingT1, "VCNT"}, | |
{ 0xffb30e10, 0xffb30600, AdvancedSIMD, eSize32, eEncodingT1, "VCVT (between floating-point and integer, AdvancedSIMD)"}, | |
{ 0xffb80e50, 0xeeb80a40, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT1, "VCVT, VCVTR (between floating-point and integer, Floating-point)"}, | |
{ 0xef800e90, 0xef800e10, AdvancedSIMD, eSize32, eEncodingT1, "VCVT (between floating-point and fixed-point, AdvancedSIMD)"}, | |
{ 0xffba0e50, 0xeeba0a40, VFPv3 | VFPv4, eSize32, eEncodingT1, "VCVT (between floating-point and fixed-point, Floating-point)"}, | |
{ 0xffbf0ed0, 0xeeb70ac0, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT1, "VCVT (between double-precision and single-precision)"}, | |
{ 0xffb30ed0, 0xffb20600, AdvancedSIMD, eSize32, eEncodingT1, "VCVT (between half-precision and single-precision, AdvancedSIMD)"}, | |
{ 0xffbe0f50, 0xeeb20a40, VFPv3 | VFPv4, eSize32, eEncodingT1, "VCVTB, VCVTT"}, | |
{ 0xffb00e50, 0xee800a00, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT1, "VDIV"}, | |
{ 0xffb00f90, 0xffb00c00, AdvancedSIMD, eSize32, eEncodingT1, "VDUP (scalar)"}, | |
{ 0xff900f5f, 0xee800b10, AdvancedSIMD, eSize32, eEncodingT1, "VDUP (ARM core register)"}, | |
{ 0xffb00f10, 0xff000110, AdvancedSIMD, eSize32, eEncodingT1, "VEOR"}, | |
{ 0xffb00010, 0xefb00000, AdvancedSIMD, eSize32, eEncodingT1, "VEXT"}, | |
{ 0xff800f10, 0xef000c10, AdvancedSIMDv2, eSize32, eEncodingT1, "VFMA, VFMS"}, | |
{ 0xffb00e10, 0xeea00a00, VFPv4, eSize32, eEncodingT2, "VFMA, VFMS"}, | |
{ 0xffb00e10, 0xee900a00, VFPv4, eSize32, eEncodingT1, "VFNMA, VFNMS"}, | |
{ 0xef800d10, 0xef000000, AdvancedSIMD, eSize32, eEncodingT1, "VHADD, VHSUB"}, | |
{ 0xffb00000, 0xf9200000, AdvancedSIMD, eSize32, eEncodingT1, "VLD1 (multiple single elements)"}, | |
{ 0xffb00300, 0xf9a00000, AdvancedSIMD, eSize32, eEncodingT1, "VLD1 (single element to one lane)"}, | |
{ 0xffb00f00, 0xf9a00c00, AdvancedSIMD, eSize32, eEncodingT1, "VLD1 (single element to all lanes)"}, | |
{ 0xffb00000, 0xf9200000, AdvancedSIMD, eSize32, eEncodingT1, "VLD2 (multiple 2-element structures)"}, | |
{ 0xffb00300, 0xf9a00100, AdvancedSIMD, eSize32, eEncodingT1, "VLD2 (single 2-element structure to one lane)"}, | |
{ 0xffb00f00, 0xf9a00d00, AdvancedSIMD, eSize32, eEncodingT1, "VLD2 (single 2-element structure to all lanes)"}, | |
{ 0xffb00000, 0xf9200000, AdvancedSIMD, eSize32, eEncodingT1, "VLD3 (multiple 3-element structures)"}, | |
{ 0xffb00300, 0xf9a00200, AdvancedSIMD, eSize32, eEncodingT1, "VLD3 (single 3-element structure to one lane)"}, | |
{ 0xffb00f00, 0xf9a00e00, AdvancedSIMD, eSize32, eEncodingT1, "VLD3 (single 3-element structure to all lanes)"}, | |
{ 0xffb00000, 0xf9200000, AdvancedSIMD, eSize32, eEncodingT1, "VLD4 (multiple 4-element structures)"}, | |
{ 0xffb00300, 0xf9a00300, AdvancedSIMD, eSize32, eEncodingT1, "VLD4 (single 4-element structure to one lane)"}, | |
{ 0xffb00f00, 0xf9a00f00, AdvancedSIMD, eSize32, eEncodingT1, "VLD4 (single 4-element structure to all lanes)"}, | |
{ 0xfe100f00, 0xec100b00, VFPv2 | VFPv3 | VFPv4 | AdvancedSIMD, eSize32, eEncodingT1, "VLDM"}, | |
{ 0xfe100f00, 0xec100a00, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT2, "VLDM"}, | |
{ 0xff300f00, 0xed100b00, VFPv2 | VFPv3 | VFPv4 | AdvancedSIMD, eSize32, eEncodingT1, "VLDR"}, | |
{ 0xff300f00, 0xed100a00, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT2, "VLDR"}, | |
{ 0xef800f00, 0xef000600, AdvancedSIMD, eSize32, eEncodingT1, "VMAX, VMIN (integer)"}, | |
{ 0xff800f10, 0xef000f00, AdvancedSIMD, eSize32, eEncodingT1, "VMAX, VMIN (floating-point)"}, | |
{ 0xef800f10, 0xef000900, AdvancedSIMD, eSize32, eEncodingT1, "VMLA, VMLAL, VMLS, VMLSL (integer)"}, | |
{ 0xef800d50, 0xef800800, AdvancedSIMD, eSize32, eEncodingT2, "VMLA, VMLAL, VMLS, VMLSL (integer)"}, | |
{ 0xff800f10, 0xef000d10, AdvancedSIMD, eSize32, eEncodingT1, "VMLA, VMLS (floating-point)"}, | |
{ 0xffb00e10, 0xee000a00, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT2, "VMLA, VMLS (floating-point)"}, | |
{ 0xef800a50, 0xef800040, AdvancedSIMD, eSize32, eEncodingT1, "VMLA, VMLAL, VMLS, VMLSL (by scalar)"}, | |
{ 0xef800b50, 0xef800240, AdvancedSIMD, eSize32, eEncodingT2, "VMLA, VMLAL, VMLS, VMLSL (by scalar)"}, | |
{ 0xefb80090, 0xef800010, AdvancedSIMD, eSize32, eEncodingT1, "VMOV (immediate)"}, | |
{ 0xffb00ef0, 0xeeb00a00, VFPv3 | VFPv4, eSize32, eEncodingT2, "VMOV (immediate)"}, | |
{ 0xffb00f10, 0xef200110, AdvancedSIMD, eSize32, eEncodingT1, "VMOV (register)"}, | |
{ 0xffbf0ed0, 0xeeb00a40, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT2, "VMOV (register)"}, | |
{ 0xff900f1f, 0xee000b10, AdvancedSIMD, eSize32, eEncodingT1, "VMOV (ARM core register to scalar)"}, | |
{ 0xff100f1f, 0xee100b10, AdvancedSIMD, eSize32, eEncodingT1, "VMOV (scalar to ARM core register)"}, | |
{ 0xffe00f7f, 0xee000a10, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT1, "VMOV (between ARM core register and single-precision register)"}, | |
{ 0xffe00fd0, 0xec400a10, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT1, "VMOV (between two ARM core registers and two single-precision registers)"}, | |
{ 0xffe00fd0, 0xec400b10, VFPv2 | VFPv3 | VFPv4 | AdvancedSIMD, eSize32, eEncodingT1, "VMOV (between two ARM core registers and a doubleword extension register)"}, | |
{ 0xef870fd0, 0xef800a10, AdvancedSIMD, eSize32, eEncodingT1, "VMOVL"}, | |
{ 0xffb30fd0, 0xffb20200, AdvancedSIMD, eSize32, eEncodingT1, "VMOVN"}, | |
{ 0xfff00fff, 0xeef00a10, VFPv2 | VFPv3 | VFPv4 | AdvancedSIMD, eSize32, eEncodingT1, "VMRS"}, | |
{ 0xfff00fff, 0xeee00a10, VFPv2 | VFPv3 | VFPv4 | AdvancedSIMD, eSize32, eEncodingT1, "VMSR"}, | |
{ 0xef800f10, 0xef000910, AdvancedSIMD, eSize32, eEncodingT1, "VMUL, VMULL (integer and polynomial)"}, | |
{ 0xef800d50, 0xef800c00, AdvancedSIMD, eSize32, eEncodingT2, "VMUL, VMULL (integer and polynomial)"}, | |
{ 0xffa00f10, 0xff000d10, AdvancedSIMD, eSize32, eEncodingT1, "VMUL (floating-point)"}, | |
{ 0xffb00e50, 0xee200a00, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT2, "VMUL (floating-point)"}, | |
{ 0xef800e50, 0xef800840, AdvancedSIMD, eSize32, eEncodingT1, "VMUL, VMULL (by scalar)"}, | |
{ 0xef800f50, 0xef800a40, AdvancedSIMD, eSize32, eEncodingT2, "VMUL, VMULL (by scalar)"}, | |
{ 0xefb800b0, 0xef800030, AdvancedSIMD, eSize32, eEncodingT1, "VMVN (immediate)"}, | |
{ 0xffb30f90, 0xffb00580, AdvancedSIMD, eSize32, eEncodingT1, "VMVN (register)"}, | |
{ 0xffb30b90, 0xffb10380, AdvancedSIMD, eSize32, eEncodingT1, "VNEG"}, | |
{ 0xffbf0ed0, 0xeeb10a40, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT2, "VNEG"}, | |
{ 0xffb00e10, 0xee100a00, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT1, "VNMLA, VNMLS, VNMUL"}, | |
{ 0xffb00e50, 0xee200a40, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT2, "VNMLA, VNMLS, VNMUL"}, | |
{ 0xffb00f10, 0xef300110, AdvancedSIMD, eSize32, eEncodingT1, "VORN (register)"}, | |
{ 0xefb800b0, 0xef800010, AdvancedSIMD, eSize32, eEncodingT1, "VORR (immediate)"}, | |
{ 0xffb00f10, 0xef200110, AdvancedSIMD, eSize32, eEncodingT1, "VORR (register)"}, | |
{ 0xffb30f10, 0xffb00600, AdvancedSIMD, eSize32, eEncodingT1, "VPADAL"}, | |
{ 0xff800f10, 0xef000b10, AdvancedSIMD, eSize32, eEncodingT1, "VPADD (integer)"}, | |
{ 0xffa00f10, 0xff000d00, AdvancedSIMD, eSize32, eEncodingT1, "VPADD (floating-point)"}, | |
{ 0xffb30f10, 0xffb00200, AdvancedSIMD, eSize32, eEncodingT1, "VPADDL"}, | |
{ 0xef800f00, 0xef000a00, AdvancedSIMD, eSize32, eEncodingT1, "VPMAX, VPMIN (integer)"}, | |
{ 0xff800f10, 0xff000f00, AdvancedSIMD, eSize32, eEncodingT1, "VPMAX, VPMIN (floating-point)"}, | |
{ 0xffbf0f00, 0xecbd0b00, VFPv2 | VFPv3 | VFPv4 | AdvancedSIMD, eSize32, eEncodingT1, "VPOP"}, | |
{ 0xffbf0f00, 0xecbd0a00, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT2, "VPOP"}, | |
{ 0xffbf0f00, 0xed2d0b00, VFPv2 | VFPv3 | VFPv4 | AdvancedSIMD, eSize32, eEncodingT1, "VPUSH"}, | |
{ 0xffbf0f00, 0xed2d0a00, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT2, "VPUSH"}, | |
{ 0xffb30f90, 0xffb00700, AdvancedSIMD, eSize32, eEncodingT1, "VQABS"}, | |
{ 0xef800f10, 0xef000010, AdvancedSIMD, eSize32, eEncodingT1, "VQADD"}, | |
{ 0xff800d50, 0xef800900, AdvancedSIMD, eSize32, eEncodingT1, "VQDMLAL, VQDMLSL"}, | |
{ 0xff800b50, 0xef800340, AdvancedSIMD, eSize32, eEncodingT2, "VQDMLAL, VQDMLSL"}, | |
{ 0xff800f10, 0xef000b00, AdvancedSIMD, eSize32, eEncodingT1, "VQDMULH"}, | |
{ 0xef800f50, 0xef800c40, AdvancedSIMD, eSize32, eEncodingT2, "VQDMULH"}, | |
{ 0xff800f50, 0xef800d00, AdvancedSIMD, eSize32, eEncodingT1, "VQDMULL"}, | |
{ 0xff800f50, 0xef800b40, AdvancedSIMD, eSize32, eEncodingT2, "VQDMULL"}, | |
{ 0xffb30f10, 0xffb20200, AdvancedSIMD, eSize32, eEncodingT1, "VQMOVN, VQMOVUN"}, | |
{ 0xffb30f90, 0xffb00780, AdvancedSIMD, eSize32, eEncodingT1, "VQNEG"}, | |
{ 0xff800f10, 0xff000b00, AdvancedSIMD, eSize32, eEncodingT1, "VQRDMULH"}, | |
{ 0xef800f50, 0xef800d40, AdvancedSIMD, eSize32, eEncodingT2, "VQRDMULH"}, | |
{ 0xef800f10, 0xef000510, AdvancedSIMD, eSize32, eEncodingT1, "VQRSHL"}, | |
{ 0xef800ed0, 0xef800850, AdvancedSIMD, eSize32, eEncodingT1, "VQRSHRN, VQRSHRUN"}, | |
{ 0xef800f10, 0xef000410, AdvancedSIMD, eSize32, eEncodingT1, "VQSHL (register)"}, | |
{ 0xef800e10, 0xef800610, AdvancedSIMD, eSize32, eEncodingT1, "VQSHL, VQSHLU (immediate)"}, | |
{ 0xef800ed0, 0xef800810, AdvancedSIMD, eSize32, eEncodingT1, "VQSHRN, VQSHRUN"}, | |
{ 0xef800f10, 0xef000210, AdvancedSIMD, eSize32, eEncodingT1, "VQSUB"}, | |
{ 0xff800f50, 0xff800400, AdvancedSIMD, eSize32, eEncodingT1, "VRADDHN"}, | |
{ 0xffb30e90, 0xffb30400, AdvancedSIMD, eSize32, eEncodingT1, "VRECPE"}, | |
{ 0xffa00f10, 0xef000f10, AdvancedSIMD, eSize32, eEncodingT1, "VRECPS"}, | |
{ 0xffb30e10, 0xffb00000, AdvancedSIMD, eSize32, eEncodingT1, "VREV16, VREV32, VREV64"}, | |
{ 0xef800f10, 0xef000100, AdvancedSIMD, eSize32, eEncodingT1, "VRHADD"}, | |
{ 0xef800f10, 0xef000500, AdvancedSIMD, eSize32, eEncodingT1, "VRSHL"}, | |
{ 0xef800f10, 0xef800210, AdvancedSIMD, eSize32, eEncodingT1, "VRSHR"}, | |
{ 0xff800fd0, 0xef800850, AdvancedSIMD, eSize32, eEncodingT1, "VRSHRN"}, | |
{ 0xffb30e90, 0xffb30480, AdvancedSIMD, eSize32, eEncodingT1, "VRSQRTE"}, | |
{ 0xffa00f10, 0xef200f10, AdvancedSIMD, eSize32, eEncodingT1, "VRSQRTS"}, | |
{ 0xef800f10, 0xef800310, AdvancedSIMD, eSize32, eEncodingT1, "VRSRA"}, | |
{ 0xff800f50, 0xff800600, AdvancedSIMD, eSize32, eEncodingT1, "VRSUBHN"}, | |
{ 0xff800f10, 0xef800510, AdvancedSIMD, eSize32, eEncodingT1, "VSHL (immediate)"}, | |
{ 0xef800f10, 0xef000400, AdvancedSIMD, eSize32, eEncodingT1, "VSHL (register)"}, | |
{ 0xef800fd0, 0xef800a10, AdvancedSIMD, eSize32, eEncodingT1, "VSHLL"}, | |
{ 0xffb30fd0, 0xffb20300, AdvancedSIMD, eSize32, eEncodingT2, "VSHLL"}, | |
{ 0xef800f10, 0xef800010, AdvancedSIMD, eSize32, eEncodingT1, "VSHR"}, | |
{ 0xff800fd0, 0xef800810, AdvancedSIMD, eSize32, eEncodingT1, "VSHRN"}, | |
{ 0xff800f10, 0xff800510, AdvancedSIMD, eSize32, eEncodingT1, "VSLI"}, | |
{ 0xffbf0ed0, 0xeeb10ac0, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT1, "VSQRT"}, | |
{ 0xef800f10, 0xef800110, AdvancedSIMD, eSize32, eEncodingT1, "VSRA"}, | |
{ 0xff800f10, 0xff800410, AdvancedSIMD, eSize32, eEncodingT1, "VSRI"}, | |
{ 0xffb00000, 0xf9000000, AdvancedSIMD, eSize32, eEncodingT1, "VST1 (multiple single elements)"}, | |
{ 0xffb00300, 0xf9800000, AdvancedSIMD, eSize32, eEncodingT1, "VST1 (single element from one lane)"}, | |
{ 0xffb00000, 0xf9000000, AdvancedSIMD, eSize32, eEncodingT1, "VST2 (multiple 2-element structures)"}, | |
{ 0xffb00300, 0xf9800100, AdvancedSIMD, eSize32, eEncodingT1, "VST2 (single 2-element structure from one lane)"}, | |
{ 0xffb00000, 0xf9000000, AdvancedSIMD, eSize32, eEncodingT1, "VST3 (multiple 3-element structures)"}, | |
{ 0xffb00300, 0xf9800200, AdvancedSIMD, eSize32, eEncodingT1, "VST3 (single 3-element structure from one lane)"}, | |
{ 0xffb00000, 0xf9000000, AdvancedSIMD, eSize32, eEncodingT1, "VST4 (multiple 4-element structures)"}, | |
{ 0xffb00300, 0xf9800300, AdvancedSIMD, eSize32, eEncodingT1, "VST4 (single 4-element structure from one lane)"}, | |
{ 0xfe100f00, 0xec000b00, VFPv2 | VFPv3 | VFPv4 | AdvancedSIMD, eSize32, eEncodingT1, "VSTM"}, | |
{ 0xfe100f00, 0xec000a00, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT2, "VSTM"}, | |
{ 0xff300f00, 0xed000b00, VFPv2 | VFPv3 | VFPv4 | AdvancedSIMD, eSize32, eEncodingT1, "VSTR"}, | |
{ 0xff300f00, 0xed000a00, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT2, "VSTR"}, | |
{ 0xff800f10, 0xff000800, AdvancedSIMD, eSize32, eEncodingT1, "VSUB (integer)"}, | |
{ 0xffa00f10, 0xef200d00, AdvancedSIMD, eSize32, eEncodingT1, "VSUB (floating-point)"}, | |
{ 0xffb00e50, 0xee300a40, VFPv2 | VFPv3 | VFPv4, eSize32, eEncodingT2, "VSUB (floating-point)"}, | |
{ 0xff800f50, 0xef800600, AdvancedSIMD, eSize32, eEncodingT1, "VSUBHN"}, | |
{ 0xef800e50, 0xef800200, AdvancedSIMD, eSize32, eEncodingT1, "VSUBL, VSUBW"}, | |
{ 0xffb30f90, 0xffb20000, AdvancedSIMD, eSize32, eEncodingT1, "VSWP"}, | |
{ 0xffb00c10, 0xffb00800, AdvancedSIMD, eSize32, eEncodingT1, "VTBL, VTBX"}, | |
{ 0xffb30f90, 0xffb20080, AdvancedSIMD, eSize32, eEncodingT1, "VTRN"}, | |
{ 0xff800f10, 0xef000810, AdvancedSIMD, eSize32, eEncodingT1, "VTST"}, | |
{ 0xffb30f90, 0xffb20100, AdvancedSIMD, eSize32, eEncodingT1, "VUZP"}, | |
{ 0xffb30f90, 0xffb20180, AdvancedSIMD, eSize32, eEncodingT1, "VZIP"}, | |
{ 0x00000000, 0x00000000, ARMvAll, eSize32, eEncodingA1, "UNKNOWN"} | |
}; | |
const size_t n_arm_opcodes = sizeof(arm_opcodes) / sizeof(arm_opcodes[0]); | |
const size_t n_thumb_opcodes = sizeof(thumb_opcodes) / sizeof(thumb_opcodes[0]); | |
inline uint32_t get_bit(uint32_t val, uint32_t lsb) { | |
return (val >> lsb) & 1; | |
} | |
template<class T> T get_random_int() { | |
static random_device rd; | |
uniform_int_distribution<T> uniform_dist(numeric_limits<T>::min(), numeric_limits<T>::max()); | |
return uniform_dist(rd); | |
} | |
uint32_t get_masked_random(uint32_t mask, uint32_t value, uint32_t size = 32) { | |
uint32_t r = get_random_int<uint32_t>() & ((size != 32) ? 0xffff : 0xffffffff); | |
for (uint32_t i = 0; i < size; ++i) { | |
if (mask & (1 << i)) { | |
if (value & (1 << i)) { | |
r |= value & (1 << i); | |
} else { | |
r &= ~(1 << i); | |
} | |
} | |
} | |
assert((r & mask) == value); | |
return r; | |
} | |
void test_arm(unsigned n, unsigned start, unsigned finish) { | |
uint32_t mask; | |
uint32_t value; | |
uint32_t op_code; | |
if (start == finish || finish > n_arm_opcodes) { | |
finish = n_arm_opcodes - 1; | |
} | |
for (unsigned i = start; i < finish; ++i) { | |
mask = arm_opcodes[i].mask; | |
value = arm_opcodes[i].value; | |
printf("Generating ARM instruction `%s` with mask=0x%.8x and value=0x%.8x\n", arm_opcodes[i].name, mask, value); | |
for (unsigned j = 0; j < n; ++j) { | |
op_code = get_masked_random(mask, value); | |
// We avoid generating condition codes of 0b1111. | |
if (get_bit(mask, 28) == 0) { | |
op_code &= 0xefffffff; | |
} | |
printf(" 0x%.8x\n", op_code); | |
} | |
} | |
} | |
void test_thumb(unsigned n, unsigned start, unsigned finish) { | |
uint32_t mask; | |
uint32_t value; | |
uint32_t size; | |
uint32_t op_code; | |
if (start == finish || finish > n_thumb_opcodes) { | |
finish = n_thumb_opcodes - 1; | |
} | |
for (unsigned i = start; i < finish; ++i) { | |
mask = thumb_opcodes[i].mask; | |
value = thumb_opcodes[i].value; | |
size = thumb_opcodes[i].ins_size == eSize16 ? 16 : 32; | |
printf("Generating THUMB instruction `%s` with size=%u mask=0x%.8x and value=0x%.8x\n", arm_opcodes[i].name, size, mask, value); | |
for (unsigned j = 0; j < n; ++j) { | |
op_code = get_masked_random(mask, value, size); | |
if (size == 16) | |
printf(" 0x%.4x\n", op_code); | |
else | |
printf(" 0x%.8x\n", op_code); | |
} | |
} | |
} | |
int main(int argc, char **argv) { | |
unsigned n = std::stoi(argv[1]); | |
unsigned i = std::stoi(argv[2]); | |
unsigned j = std::stoi(argv[3]); | |
printf("Generating %u instructions starting at position %u and ending at position %u\n", n, i, j); | |
test_thumb(n, i, j); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment