xref: /aosp_15_r20/external/capstone/bindings/python/capstone/tms320c64x.py (revision 9a0e4156d50a75a99ec4f1653a0e9602a5d45c18)
1*9a0e4156SSadaf Ebrahimi# Capstone Python bindings, by Fotis Loukos <[email protected]>
2*9a0e4156SSadaf Ebrahimi
3*9a0e4156SSadaf Ebrahimiimport ctypes, copy
4*9a0e4156SSadaf Ebrahimifrom .tms320c64x_const import *
5*9a0e4156SSadaf Ebrahimi
6*9a0e4156SSadaf Ebrahimi# define the API
7*9a0e4156SSadaf Ebrahimiclass TMS320C64xOpMem(ctypes.Structure):
8*9a0e4156SSadaf Ebrahimi    _fields_ = (
9*9a0e4156SSadaf Ebrahimi        ('base', ctypes.c_int),
10*9a0e4156SSadaf Ebrahimi        ('disp', ctypes.c_int),
11*9a0e4156SSadaf Ebrahimi        ('unit', ctypes.c_int),
12*9a0e4156SSadaf Ebrahimi        ('scaled', ctypes.c_int),
13*9a0e4156SSadaf Ebrahimi        ('disptype', ctypes.c_int),
14*9a0e4156SSadaf Ebrahimi        ('direction', ctypes.c_int),
15*9a0e4156SSadaf Ebrahimi        ('modify', ctypes.c_int),
16*9a0e4156SSadaf Ebrahimi    )
17*9a0e4156SSadaf Ebrahimi
18*9a0e4156SSadaf Ebrahimiclass TMS320C64xOpValue(ctypes.Union):
19*9a0e4156SSadaf Ebrahimi    _fields_ = (
20*9a0e4156SSadaf Ebrahimi        ('reg', ctypes.c_uint),
21*9a0e4156SSadaf Ebrahimi        ('imm', ctypes.c_int32),
22*9a0e4156SSadaf Ebrahimi        ('mem', TMS320C64xOpMem),
23*9a0e4156SSadaf Ebrahimi    )
24*9a0e4156SSadaf Ebrahimi
25*9a0e4156SSadaf Ebrahimiclass TMS320C64xCondition(ctypes.Structure):
26*9a0e4156SSadaf Ebrahimi    _fields_ = (
27*9a0e4156SSadaf Ebrahimi        ('reg', ctypes.c_uint),
28*9a0e4156SSadaf Ebrahimi        ('zero', ctypes.c_uint),
29*9a0e4156SSadaf Ebrahimi    )
30*9a0e4156SSadaf Ebrahimi
31*9a0e4156SSadaf Ebrahimiclass TMS320C64xFunctionalUnit(ctypes.Structure):
32*9a0e4156SSadaf Ebrahimi    _fields_ = (
33*9a0e4156SSadaf Ebrahimi        ('unit', ctypes.c_uint),
34*9a0e4156SSadaf Ebrahimi        ('side', ctypes.c_uint),
35*9a0e4156SSadaf Ebrahimi        ('crosspath', ctypes.c_uint),
36*9a0e4156SSadaf Ebrahimi    )
37*9a0e4156SSadaf Ebrahimi
38*9a0e4156SSadaf Ebrahimiclass TMS320C64xOp(ctypes.Structure):
39*9a0e4156SSadaf Ebrahimi    _fields_ = (
40*9a0e4156SSadaf Ebrahimi        ('type', ctypes.c_uint),
41*9a0e4156SSadaf Ebrahimi        ('value', TMS320C64xOpValue),
42*9a0e4156SSadaf Ebrahimi    )
43*9a0e4156SSadaf Ebrahimi
44*9a0e4156SSadaf Ebrahimi    @property
45*9a0e4156SSadaf Ebrahimi    def imm(self):
46*9a0e4156SSadaf Ebrahimi        return self.value.imm
47*9a0e4156SSadaf Ebrahimi
48*9a0e4156SSadaf Ebrahimi    @property
49*9a0e4156SSadaf Ebrahimi    def reg(self):
50*9a0e4156SSadaf Ebrahimi        return self.value.reg
51*9a0e4156SSadaf Ebrahimi
52*9a0e4156SSadaf Ebrahimi    @property
53*9a0e4156SSadaf Ebrahimi    def mem(self):
54*9a0e4156SSadaf Ebrahimi        return self.value.mem
55*9a0e4156SSadaf Ebrahimi
56*9a0e4156SSadaf Ebrahimiclass CsTMS320C64x(ctypes.Structure):
57*9a0e4156SSadaf Ebrahimi    _fields_ = (
58*9a0e4156SSadaf Ebrahimi        ('op_count', ctypes.c_uint8),
59*9a0e4156SSadaf Ebrahimi        ('operands', TMS320C64xOp * 8),
60*9a0e4156SSadaf Ebrahimi        ('condition', TMS320C64xCondition),
61*9a0e4156SSadaf Ebrahimi        ('funit', TMS320C64xFunctionalUnit),
62*9a0e4156SSadaf Ebrahimi        ('parallel', ctypes.c_uint),
63*9a0e4156SSadaf Ebrahimi    )
64*9a0e4156SSadaf Ebrahimi
65*9a0e4156SSadaf Ebrahimidef get_arch_info(a):
66*9a0e4156SSadaf Ebrahimi    return (a.condition, a.funit, a.parallel, copy.deepcopy(a.operands[:a.op_count]))
67