xref: /aosp_15_r20/external/capstone/suite/test_group_name.py (revision 9a0e4156d50a75a99ec4f1653a0e9602a5d45c18)
1*9a0e4156SSadaf Ebrahimi#!/usr/bin/python
2*9a0e4156SSadaf Ebrahimi
3*9a0e4156SSadaf Ebrahimifrom capstone import *
4*9a0e4156SSadaf Ebrahimifrom capstone.arm import *
5*9a0e4156SSadaf Ebrahimifrom capstone.arm64 import *
6*9a0e4156SSadaf Ebrahimifrom capstone.mips import *
7*9a0e4156SSadaf Ebrahimifrom capstone.ppc import *
8*9a0e4156SSadaf Ebrahimifrom capstone.sparc import *
9*9a0e4156SSadaf Ebrahimifrom capstone.systemz import *
10*9a0e4156SSadaf Ebrahimifrom capstone.x86 import *
11*9a0e4156SSadaf Ebrahimifrom capstone.xcore import *
12*9a0e4156SSadaf Ebrahimiimport sys
13*9a0e4156SSadaf Ebrahimi
14*9a0e4156SSadaf Ebrahimiclass GroupTest:
15*9a0e4156SSadaf Ebrahimi    def __init__(self, name, arch, mode, data):
16*9a0e4156SSadaf Ebrahimi        self.name = name
17*9a0e4156SSadaf Ebrahimi        self.arch = arch
18*9a0e4156SSadaf Ebrahimi        self.mode = mode
19*9a0e4156SSadaf Ebrahimi        self.data = data
20*9a0e4156SSadaf Ebrahimi
21*9a0e4156SSadaf Ebrahimi    def run(self):
22*9a0e4156SSadaf Ebrahimi        print('Testing %s' %self.name)
23*9a0e4156SSadaf Ebrahimi        cap = Cs(self.arch, self.mode)
24*9a0e4156SSadaf Ebrahimi        for group_id in xrange(0,255):
25*9a0e4156SSadaf Ebrahimi            name = self.data.get(group_id)
26*9a0e4156SSadaf Ebrahimi            res = cap.group_name(group_id)
27*9a0e4156SSadaf Ebrahimi            if res != name:
28*9a0e4156SSadaf Ebrahimi                print("ERROR: id = %u expected '%s', but got '%s'" %(group_id, name, res))
29*9a0e4156SSadaf Ebrahimi        print("")
30*9a0e4156SSadaf Ebrahimi
31*9a0e4156SSadaf Ebrahimiarm_dict = {
32*9a0e4156SSadaf Ebrahimi    ARM_GRP_JUMP: "jump",
33*9a0e4156SSadaf Ebrahimi    ARM_GRP_CALL: "call",
34*9a0e4156SSadaf Ebrahimi    ARM_GRP_INT: "int",
35*9a0e4156SSadaf Ebrahimi    ARM_GRP_PRIVILEGE: "privilege",
36*9a0e4156SSadaf Ebrahimi
37*9a0e4156SSadaf Ebrahimi    ARM_GRP_CRYPTO: "crypto",
38*9a0e4156SSadaf Ebrahimi    ARM_GRP_DATABARRIER: "databarrier",
39*9a0e4156SSadaf Ebrahimi    ARM_GRP_DIVIDE: "divide",
40*9a0e4156SSadaf Ebrahimi    ARM_GRP_FPARMV8: "fparmv8",
41*9a0e4156SSadaf Ebrahimi    ARM_GRP_MULTPRO: "multpro",
42*9a0e4156SSadaf Ebrahimi    ARM_GRP_NEON: "neon",
43*9a0e4156SSadaf Ebrahimi    ARM_GRP_T2EXTRACTPACK: "T2EXTRACTPACK",
44*9a0e4156SSadaf Ebrahimi    ARM_GRP_THUMB2DSP: "THUMB2DSP",
45*9a0e4156SSadaf Ebrahimi    ARM_GRP_TRUSTZONE: "TRUSTZONE",
46*9a0e4156SSadaf Ebrahimi    ARM_GRP_V4T: "v4t",
47*9a0e4156SSadaf Ebrahimi    ARM_GRP_V5T: "v5t",
48*9a0e4156SSadaf Ebrahimi    ARM_GRP_V5TE: "v5te",
49*9a0e4156SSadaf Ebrahimi    ARM_GRP_V6: "v6",
50*9a0e4156SSadaf Ebrahimi    ARM_GRP_V6T2: "v6t2",
51*9a0e4156SSadaf Ebrahimi    ARM_GRP_V7: "v7",
52*9a0e4156SSadaf Ebrahimi    ARM_GRP_V8: "v8",
53*9a0e4156SSadaf Ebrahimi    ARM_GRP_VFP2: "vfp2",
54*9a0e4156SSadaf Ebrahimi    ARM_GRP_VFP3: "vfp3",
55*9a0e4156SSadaf Ebrahimi    ARM_GRP_VFP4: "vfp4",
56*9a0e4156SSadaf Ebrahimi    ARM_GRP_ARM: "arm",
57*9a0e4156SSadaf Ebrahimi    ARM_GRP_MCLASS: "mclass",
58*9a0e4156SSadaf Ebrahimi    ARM_GRP_NOTMCLASS: "notmclass",
59*9a0e4156SSadaf Ebrahimi    ARM_GRP_THUMB: "thumb",
60*9a0e4156SSadaf Ebrahimi    ARM_GRP_THUMB1ONLY: "thumb1only",
61*9a0e4156SSadaf Ebrahimi    ARM_GRP_THUMB2: "thumb2",
62*9a0e4156SSadaf Ebrahimi    ARM_GRP_PREV8: "prev8",
63*9a0e4156SSadaf Ebrahimi    ARM_GRP_FPVMLX: "fpvmlx",
64*9a0e4156SSadaf Ebrahimi    ARM_GRP_MULOPS: "mulops",
65*9a0e4156SSadaf Ebrahimi    ARM_GRP_CRC: "crc",
66*9a0e4156SSadaf Ebrahimi    ARM_GRP_DPVFP: "dpvfp",
67*9a0e4156SSadaf Ebrahimi    ARM_GRP_V6M: "v6m",
68*9a0e4156SSadaf Ebrahimi    ARM_GRP_VIRTUALIZATION: "virtualization",
69*9a0e4156SSadaf Ebrahimi}
70*9a0e4156SSadaf Ebrahimi
71*9a0e4156SSadaf Ebrahimiarm64_dict = {
72*9a0e4156SSadaf Ebrahimi    ARM64_GRP_JUMP: "jump",
73*9a0e4156SSadaf Ebrahimi    ARM64_GRP_CALL: "call",
74*9a0e4156SSadaf Ebrahimi    ARM64_GRP_RET: "return",
75*9a0e4156SSadaf Ebrahimi    ARM64_GRP_INT: "int",
76*9a0e4156SSadaf Ebrahimi    ARM64_GRP_PRIVILEGE: "privilege",
77*9a0e4156SSadaf Ebrahimi
78*9a0e4156SSadaf Ebrahimi    ARM64_GRP_CRYPTO: "crypto",
79*9a0e4156SSadaf Ebrahimi    ARM64_GRP_FPARMV8: "fparmv8",
80*9a0e4156SSadaf Ebrahimi    ARM64_GRP_NEON: "neon",
81*9a0e4156SSadaf Ebrahimi    ARM64_GRP_CRC: "crc"
82*9a0e4156SSadaf Ebrahimi}
83*9a0e4156SSadaf Ebrahimi
84*9a0e4156SSadaf Ebrahimimips_dict = {
85*9a0e4156SSadaf Ebrahimi    MIPS_GRP_JUMP: "jump",
86*9a0e4156SSadaf Ebrahimi    MIPS_GRP_CALL: "call",
87*9a0e4156SSadaf Ebrahimi    MIPS_GRP_RET: "ret",
88*9a0e4156SSadaf Ebrahimi    MIPS_GRP_INT: "int",
89*9a0e4156SSadaf Ebrahimi    MIPS_GRP_IRET: "iret",
90*9a0e4156SSadaf Ebrahimi    MIPS_GRP_PRIVILEGE: "privilege",
91*9a0e4156SSadaf Ebrahimi    MIPS_GRP_BITCOUNT: "bitcount",
92*9a0e4156SSadaf Ebrahimi    MIPS_GRP_DSP: "dsp",
93*9a0e4156SSadaf Ebrahimi    MIPS_GRP_DSPR2: "dspr2",
94*9a0e4156SSadaf Ebrahimi    MIPS_GRP_FPIDX: "fpidx",
95*9a0e4156SSadaf Ebrahimi    MIPS_GRP_MSA: "msa",
96*9a0e4156SSadaf Ebrahimi    MIPS_GRP_MIPS32R2: "mips32r2",
97*9a0e4156SSadaf Ebrahimi    MIPS_GRP_MIPS64: "mips64",
98*9a0e4156SSadaf Ebrahimi    MIPS_GRP_MIPS64R2: "mips64r2",
99*9a0e4156SSadaf Ebrahimi    MIPS_GRP_SEINREG: "seinreg",
100*9a0e4156SSadaf Ebrahimi    MIPS_GRP_STDENC: "stdenc",
101*9a0e4156SSadaf Ebrahimi    MIPS_GRP_SWAP: "swap",
102*9a0e4156SSadaf Ebrahimi    MIPS_GRP_MICROMIPS: "micromips",
103*9a0e4156SSadaf Ebrahimi    MIPS_GRP_MIPS16MODE: "mips16mode",
104*9a0e4156SSadaf Ebrahimi    MIPS_GRP_FP64BIT: "fp64bit",
105*9a0e4156SSadaf Ebrahimi    MIPS_GRP_NONANSFPMATH: "nonansfpmath",
106*9a0e4156SSadaf Ebrahimi    MIPS_GRP_NOTFP64BIT: "notfp64bit",
107*9a0e4156SSadaf Ebrahimi    MIPS_GRP_NOTINMICROMIPS: "notinmicromips",
108*9a0e4156SSadaf Ebrahimi    MIPS_GRP_NOTNACL: "notnacl",
109*9a0e4156SSadaf Ebrahimi
110*9a0e4156SSadaf Ebrahimi    MIPS_GRP_NOTMIPS32R6: "notmips32r6",
111*9a0e4156SSadaf Ebrahimi    MIPS_GRP_NOTMIPS64R6: "notmips64r6",
112*9a0e4156SSadaf Ebrahimi    MIPS_GRP_CNMIPS: "cnmips",
113*9a0e4156SSadaf Ebrahimi
114*9a0e4156SSadaf Ebrahimi    MIPS_GRP_MIPS32: "mips32",
115*9a0e4156SSadaf Ebrahimi    MIPS_GRP_MIPS32R6: "mips32r6",
116*9a0e4156SSadaf Ebrahimi    MIPS_GRP_MIPS64R6: "mips64r6",
117*9a0e4156SSadaf Ebrahimi
118*9a0e4156SSadaf Ebrahimi    MIPS_GRP_MIPS2: "mips2",
119*9a0e4156SSadaf Ebrahimi    MIPS_GRP_MIPS3: "mips3",
120*9a0e4156SSadaf Ebrahimi    MIPS_GRP_MIPS3_32: "mips3_32",
121*9a0e4156SSadaf Ebrahimi    MIPS_GRP_MIPS3_32R2: "mips3_32r2",
122*9a0e4156SSadaf Ebrahimi
123*9a0e4156SSadaf Ebrahimi    MIPS_GRP_MIPS4_32: "mips4_32",
124*9a0e4156SSadaf Ebrahimi    MIPS_GRP_MIPS4_32R2: "mips4_32r2",
125*9a0e4156SSadaf Ebrahimi    MIPS_GRP_MIPS5_32R2: "mips5_32r2",
126*9a0e4156SSadaf Ebrahimi
127*9a0e4156SSadaf Ebrahimi    MIPS_GRP_GP32BIT: "gp32bit",
128*9a0e4156SSadaf Ebrahimi    MIPS_GRP_GP64BIT: "gp64bit",
129*9a0e4156SSadaf Ebrahimi}
130*9a0e4156SSadaf Ebrahimi
131*9a0e4156SSadaf Ebrahimippc_dict = {
132*9a0e4156SSadaf Ebrahimi    PPC_GRP_JUMP: "jump",
133*9a0e4156SSadaf Ebrahimi
134*9a0e4156SSadaf Ebrahimi    PPC_GRP_ALTIVEC: "altivec",
135*9a0e4156SSadaf Ebrahimi    PPC_GRP_MODE32: "mode32",
136*9a0e4156SSadaf Ebrahimi    PPC_GRP_MODE64: "mode64",
137*9a0e4156SSadaf Ebrahimi    PPC_GRP_BOOKE: "booke",
138*9a0e4156SSadaf Ebrahimi    PPC_GRP_NOTBOOKE: "notbooke",
139*9a0e4156SSadaf Ebrahimi    PPC_GRP_SPE: "spe",
140*9a0e4156SSadaf Ebrahimi    PPC_GRP_VSX: "vsx",
141*9a0e4156SSadaf Ebrahimi    PPC_GRP_E500: "e500",
142*9a0e4156SSadaf Ebrahimi    PPC_GRP_PPC4XX: "ppc4xx",
143*9a0e4156SSadaf Ebrahimi    PPC_GRP_PPC6XX: "ppc6xx",
144*9a0e4156SSadaf Ebrahimi    PPC_GRP_ICBT: "icbt",
145*9a0e4156SSadaf Ebrahimi    PPC_GRP_P8ALTIVEC: "p8altivec",
146*9a0e4156SSadaf Ebrahimi    PPC_GRP_P8VECTOR: "p8vector",
147*9a0e4156SSadaf Ebrahimi    PPC_GRP_QPX: "qpx",
148*9a0e4156SSadaf Ebrahimi}
149*9a0e4156SSadaf Ebrahimi
150*9a0e4156SSadaf Ebrahimisparc_dict = {
151*9a0e4156SSadaf Ebrahimi    SPARC_GRP_JUMP: "jump",
152*9a0e4156SSadaf Ebrahimi
153*9a0e4156SSadaf Ebrahimi    SPARC_GRP_HARDQUAD: "hardquad",
154*9a0e4156SSadaf Ebrahimi    SPARC_GRP_V9: "v9",
155*9a0e4156SSadaf Ebrahimi    SPARC_GRP_VIS: "vis",
156*9a0e4156SSadaf Ebrahimi    SPARC_GRP_VIS2: "vis2",
157*9a0e4156SSadaf Ebrahimi    SPARC_GRP_VIS3: "vis3",
158*9a0e4156SSadaf Ebrahimi    SPARC_GRP_32BIT: "32bit",
159*9a0e4156SSadaf Ebrahimi    SPARC_GRP_64BIT: "64bit",
160*9a0e4156SSadaf Ebrahimi}
161*9a0e4156SSadaf Ebrahimi
162*9a0e4156SSadaf Ebrahimisysz_dict = {
163*9a0e4156SSadaf Ebrahimi    SYSZ_GRP_JUMP: "jump",
164*9a0e4156SSadaf Ebrahimi
165*9a0e4156SSadaf Ebrahimi    SYSZ_GRP_DISTINCTOPS: "distinctops",
166*9a0e4156SSadaf Ebrahimi    SYSZ_GRP_FPEXTENSION: "fpextension",
167*9a0e4156SSadaf Ebrahimi    SYSZ_GRP_HIGHWORD: "highword",
168*9a0e4156SSadaf Ebrahimi    SYSZ_GRP_INTERLOCKEDACCESS1: "interlockedaccess1",
169*9a0e4156SSadaf Ebrahimi    SYSZ_GRP_LOADSTOREONCOND: "loadstoreoncond",
170*9a0e4156SSadaf Ebrahimi}
171*9a0e4156SSadaf Ebrahimi
172*9a0e4156SSadaf Ebrahimix86_dict = {
173*9a0e4156SSadaf Ebrahimi    X86_GRP_JUMP: "jump",
174*9a0e4156SSadaf Ebrahimi    X86_GRP_CALL: "call",
175*9a0e4156SSadaf Ebrahimi    X86_GRP_RET: "ret",
176*9a0e4156SSadaf Ebrahimi    X86_GRP_INT: "int",
177*9a0e4156SSadaf Ebrahimi    X86_GRP_IRET: "iret",
178*9a0e4156SSadaf Ebrahimi    X86_GRP_PRIVILEGE: "privilege",
179*9a0e4156SSadaf Ebrahimi
180*9a0e4156SSadaf Ebrahimi    X86_GRP_VM: "vm",
181*9a0e4156SSadaf Ebrahimi    X86_GRP_3DNOW: "3dnow",
182*9a0e4156SSadaf Ebrahimi    X86_GRP_AES: "aes",
183*9a0e4156SSadaf Ebrahimi    X86_GRP_ADX: "adx",
184*9a0e4156SSadaf Ebrahimi    X86_GRP_AVX: "avx",
185*9a0e4156SSadaf Ebrahimi    X86_GRP_AVX2: "avx2",
186*9a0e4156SSadaf Ebrahimi    X86_GRP_AVX512: "avx512",
187*9a0e4156SSadaf Ebrahimi    X86_GRP_BMI: "bmi",
188*9a0e4156SSadaf Ebrahimi    X86_GRP_BMI2: "bmi2",
189*9a0e4156SSadaf Ebrahimi    X86_GRP_CMOV: "cmov",
190*9a0e4156SSadaf Ebrahimi    X86_GRP_F16C: "fc16",
191*9a0e4156SSadaf Ebrahimi    X86_GRP_FMA: "fma",
192*9a0e4156SSadaf Ebrahimi    X86_GRP_FMA4: "fma4",
193*9a0e4156SSadaf Ebrahimi    X86_GRP_FSGSBASE: "fsgsbase",
194*9a0e4156SSadaf Ebrahimi    X86_GRP_HLE: "hle",
195*9a0e4156SSadaf Ebrahimi    X86_GRP_MMX: "mmx",
196*9a0e4156SSadaf Ebrahimi    X86_GRP_MODE32: "mode32",
197*9a0e4156SSadaf Ebrahimi    X86_GRP_MODE64: "mode64",
198*9a0e4156SSadaf Ebrahimi    X86_GRP_RTM: "rtm",
199*9a0e4156SSadaf Ebrahimi    X86_GRP_SHA: "sha",
200*9a0e4156SSadaf Ebrahimi    X86_GRP_SSE1: "sse1",
201*9a0e4156SSadaf Ebrahimi    X86_GRP_SSE2: "sse2",
202*9a0e4156SSadaf Ebrahimi    X86_GRP_SSE3: "sse3",
203*9a0e4156SSadaf Ebrahimi    X86_GRP_SSE41: "sse41",
204*9a0e4156SSadaf Ebrahimi    X86_GRP_SSE42: "sse42",
205*9a0e4156SSadaf Ebrahimi    X86_GRP_SSE4A: "sse4a",
206*9a0e4156SSadaf Ebrahimi    X86_GRP_SSSE3: "ssse3",
207*9a0e4156SSadaf Ebrahimi    X86_GRP_PCLMUL: "pclmul",
208*9a0e4156SSadaf Ebrahimi    X86_GRP_XOP: "xop",
209*9a0e4156SSadaf Ebrahimi    X86_GRP_CDI: "cdi",
210*9a0e4156SSadaf Ebrahimi    X86_GRP_ERI: "eri",
211*9a0e4156SSadaf Ebrahimi    X86_GRP_TBM: "tbm",
212*9a0e4156SSadaf Ebrahimi    X86_GRP_16BITMODE: "16bitmode",
213*9a0e4156SSadaf Ebrahimi    X86_GRP_NOT64BITMODE: "not64bitmode",
214*9a0e4156SSadaf Ebrahimi    X86_GRP_SGX: "sgx",
215*9a0e4156SSadaf Ebrahimi    X86_GRP_DQI: "dqi",
216*9a0e4156SSadaf Ebrahimi    X86_GRP_BWI: "bwi",
217*9a0e4156SSadaf Ebrahimi    X86_GRP_PFI: "pfi",
218*9a0e4156SSadaf Ebrahimi    X86_GRP_VLX: "vlx",
219*9a0e4156SSadaf Ebrahimi    X86_GRP_SMAP: "smap",
220*9a0e4156SSadaf Ebrahimi    X86_GRP_NOVLX: "novlx",
221*9a0e4156SSadaf Ebrahimi}
222*9a0e4156SSadaf Ebrahimi
223*9a0e4156SSadaf Ebrahimixcore_dict = {
224*9a0e4156SSadaf Ebrahimi    XCORE_GRP_JUMP: "jump",
225*9a0e4156SSadaf Ebrahimi}
226*9a0e4156SSadaf Ebrahimi
227*9a0e4156SSadaf Ebrahimitests = [
228*9a0e4156SSadaf Ebrahimi    GroupTest('arm', CS_ARCH_ARM, CS_MODE_THUMB, arm_dict),
229*9a0e4156SSadaf Ebrahimi    GroupTest('arm64', CS_ARCH_ARM64, CS_MODE_ARM, arm64_dict),
230*9a0e4156SSadaf Ebrahimi    GroupTest('mips', CS_ARCH_MIPS, CS_MODE_MIPS32 | CS_MODE_BIG_ENDIAN, mips_dict),
231*9a0e4156SSadaf Ebrahimi    GroupTest('ppc', CS_ARCH_PPC, CS_MODE_BIG_ENDIAN, ppc_dict),
232*9a0e4156SSadaf Ebrahimi    GroupTest('sparc', CS_ARCH_SPARC, CS_MODE_BIG_ENDIAN, sparc_dict),
233*9a0e4156SSadaf Ebrahimi    GroupTest('sysz', CS_ARCH_SYSZ, CS_MODE_BIG_ENDIAN, sysz_dict),
234*9a0e4156SSadaf Ebrahimi    GroupTest('x86', CS_ARCH_X86, CS_MODE_32, x86_dict),
235*9a0e4156SSadaf Ebrahimi    GroupTest('xcore', CS_ARCH_XCORE, CS_MODE_BIG_ENDIAN, xcore_dict),
236*9a0e4156SSadaf Ebrahimi    GroupTest('m68k', CS_ARCH_M68K, CS_MODE_BIG_ENDIAN, xcore_dict),
237*9a0e4156SSadaf Ebrahimi]
238*9a0e4156SSadaf Ebrahimi
239*9a0e4156SSadaf Ebrahimiif __name__ == '__main__':
240*9a0e4156SSadaf Ebrahimi    args = sys.argv[1:]
241*9a0e4156SSadaf Ebrahimi    all = len(args) == 0 or 'all' in args
242*9a0e4156SSadaf Ebrahimi    for t in tests:
243*9a0e4156SSadaf Ebrahimi        if all or t.name in args:
244*9a0e4156SSadaf Ebrahimi            t.run()
245*9a0e4156SSadaf Ebrahimi        else:
246*9a0e4156SSadaf Ebrahimi            print('Skipping %s' %t.name)
247*9a0e4156SSadaf Ebrahimi
248