Merge commit '16a2cf3873e00fa08e587d1b05c9132d98c24f50' into back-to-imgui

This commit is contained in:
irisz64
2025-06-26 22:15:44 +02:00
876 changed files with 168071 additions and 411897 deletions

View File

@@ -28,6 +28,7 @@ from capstone import tricore_const
from capstone import alpha_const
from capstone import hppa_const
from capstone import loongarch_const
from capstone import arc_const
def cs_const_getattr(identifier: str):
@@ -95,6 +96,9 @@ def cs_const_getattr(identifier: str):
if attr is not None:
return attr
attr = getattr(loongarch_const, identifier, None)
if attr is not None:
return attr
attr = getattr(arc_const, identifier, None)
if attr is not None:
return attr
raise ValueError(f"Python capstone doesn't have the constant: {identifier}")

View File

@@ -21,7 +21,7 @@ from cstest_py.compare import (
compare_asm_text,
compare_str,
compare_tbool,
compare_uint32,
compare_enum,
)
from enum import Enum
from pathlib import Path
@@ -247,13 +247,16 @@ class TestExpected:
if not compare_str(a_insn.op_str, e_insn.get("op_str"), "op_str"):
return TestResult.FAILED
if not compare_uint32(a_insn.id, e_insn.get("id"), "id"):
if not compare_enum(a_insn.id, e_insn.get("id"), "id"):
return TestResult.FAILED
if not compare_tbool(a_insn.is_alias, e_insn.get("is_alias"), "is_alias"):
return TestResult.FAILED
if not compare_uint32(a_insn.alias_id, e_insn.get("alias_id"), "alias_id"):
if not compare_tbool(a_insn.illegal, e_insn.get("illegal"), "illegal"):
return TestResult.FAILED
if not compare_enum(a_insn.alias_id, e_insn.get("alias_id"), "alias_id"):
return TestResult.FAILED
if not compare_details(a_insn, e_insn.get("details")):

View File

@@ -32,6 +32,11 @@ from capstone.loongarch_const import (
LOONGARCH_OP_MEM,
)
from capstone.arc_const import (
ARC_OP_REG,
ARC_OP_IMM,
)
from capstone.m680x_const import (
M680X_OP_REGISTER,
M680X_OP_IMMEDIATE,
@@ -68,7 +73,7 @@ from capstone.mips_const import MIPS_OP_REG, MIPS_OP_IMM, MIPS_OP_MEM
from capstone.mos65xx_const import MOS65XX_OP_REG, MOS65XX_OP_MEM, MOS65XX_OP_IMM
from capstone.riscv_const import RISCV_OP_MEM, RISCV_OP_IMM, RISCV_OP_REG
from capstone.sh_const import SH_OP_REG, SH_OP_MEM, SH_OP_IMM
from capstone.sparc_const import SPARC_OP_REG, SPARC_OP_IMM, SPARC_OP_MEM
from capstone.sparc_const import SPARC_OP_REG, SPARC_OP_IMM, SPARC_OP_MEM, SPARC_OP_ASI, SPARC_OP_MEMBAR_TAG
from capstone.systemz_const import SYSTEMZ_OP_REG, SYSTEMZ_OP_IMM, SYSTEMZ_OP_MEM
from capstone.tms320c64x_const import (
TMS320C64X_OP_REG,
@@ -270,6 +275,8 @@ def compare_details(insn: CsInsn, expected: dict) -> bool:
return test_expected_x86(actual, expected["x86"])
elif "m68k" in expected:
return test_expected_m68k(actual, expected["m68k"])
elif "arc" in expected:
return test_expected_arc(actual, expected["arc"])
return True
@@ -866,6 +873,8 @@ def test_expected_sparc(actual: CsInsn, expected: dict) -> bool:
for aop, eop in zip(actual.operands, expected["operands"]):
if not compare_enum(aop.type, eop.get("type"), "type"):
return False
if not compare_enum(aop.access, eop.get("access"), "access"):
return False
if aop.type == SPARC_OP_REG:
if not compare_reg(actual, aop.reg, eop.get("reg"), "reg"):
@@ -882,6 +891,12 @@ def test_expected_sparc(actual: CsInsn, expected: dict) -> bool:
return False
if not compare_int32(aop.mem.disp, eop.get("mem_disp"), "mem_disp"):
return False
elif aop.type == SPARC_OP_ASI:
if not compare_enum(aop.asi, eop.get("asi"), "asi"):
return False
elif aop.type == SPARC_OP_MEMBAR_TAG:
if not compare_enum(aop.membar_tag, eop.get("membar_tag"), "membar_tag"):
return False
else:
raise ValueError("Operand type not handled.")
return True
@@ -1341,6 +1356,12 @@ def test_expected_mips(actual: CsInsn, expected: dict) -> bool:
for aop, eop in zip(actual.operands, expected["operands"]):
if not compare_enum(aop.type, eop.get("type"), "type"):
return False
if not compare_enum(aop.access, eop.get("access"), "access"):
return False
if not compare_tbool(aop.is_reglist, eop.get("is_reglist"), "is_reglist"):
return False
if not compare_tbool(aop.is_unsigned, eop.get("is_unsigned"), "is_unsigned"):
return False
if aop.type == MIPS_OP_REG:
if not compare_reg(actual, aop.reg, eop.get("reg"), "reg"):
@@ -1528,3 +1549,27 @@ def test_expected_wasm(actual: CsInsn, expected: dict) -> bool:
else:
raise ValueError("Operand type not handled.")
return True
def test_expected_arc(actual: CsInsn, expected: dict) -> bool:
if "operands" not in expected:
return True
elif not compare_uint32(
len(actual.operands), len(expected.get("operands")), "operands_count"
):
return False
for aop, eop in zip(actual.operands, expected["operands"]):
if not compare_enum(aop.type, eop.get("type"), "type"):
return False
if not compare_enum(aop.access, eop.get("access"), "access"):
return False
if aop.type == ARC_OP_REG:
if not compare_reg(actual, aop.reg, eop.get("reg"), "reg"):
return False
elif aop.type == ARC_OP_IMM:
if not compare_int32(aop.imm, eop.get("imm"), "imm"):
return False
else:
raise ValueError("Operand type not handled.")
return True