Files
jak-project/third-party/capstone/bindings/python/capstone/riscv.py
T
Tyler Wilding bfc4c18ada goalc: replicate tests for the majority of ARM64 non-simd cases (#4377)
- Adds `capstone` as a disassembling library that could eventually
replace Zydis (for now left that alone)
- Replicates all of the existing x86 tests to ARM64, fixed a bunch of
underlying issues along the way
- There are a very small handful of tests remaining that need to be
enabled / fixed
2026-08-16 15:34:37 -04:00

70 lines
1.3 KiB
Python
Vendored
Generated

# Capstone Python bindings, by Nguyen Anh Quynnh <aquynh@gmail.com>
import ctypes
from . import copy_ctypes_list
from .riscv_const import *
# define the API
class RISCVOpMem(ctypes.Structure):
_fields_ = (
("base", ctypes.c_uint),
("disp", ctypes.c_int64),
)
class RISCVOpValue(ctypes.Union):
_fields_ = (
("reg", ctypes.c_uint),
("imm", ctypes.c_int64),
("dimm", ctypes.c_double),
("mem", RISCVOpMem),
("csr", ctypes.c_uint16),
)
class RISCVOp(ctypes.Structure):
_fields_ = (
("type", ctypes.c_uint),
("value", RISCVOpValue),
("access", ctypes.c_uint),
)
@property
def imm(self):
return self.value.imm
@property
def dimm(self):
return self.value.dimm
@property
def reg(self):
return self.value.reg
@property
def mem(self):
return self.value.mem
@property
def csr(self):
return self.value.csr
class CsRISCV(ctypes.Structure):
_fields_ = (
("need_effective_addr", ctypes.c_bool),
("op_count", ctypes.c_uint8),
("operands", RISCVOp * 8),
("rounding_mode", ctypes.c_uint),
)
def get_arch_info(a):
return (
a.need_effective_addr,
copy_ctypes_list(a.operands[: a.op_count]),
a.rounding_mode,
)