From 808aee0d225fd75af9162b0e37c8e7982a77b3b5 Mon Sep 17 00:00:00 2001 From: Naren Sirigere Date: Sat, 2 May 2026 14:34:08 +0530 Subject: [PATCH] Extend M680X support to HCS12X (#2898) Signed-off-by: Naren Sirigere --- BUILDING.md | 1 - arch/M680X/M680XDisassembler.c | 25 + arch/M680X/M680XDisassemblerInternals.h | 1 + arch/M680X/M680XInstPrinter.c | 91 +-- arch/M680X/M680XModule.c | 6 +- arch/M680X/hcs12x.inc | 271 +++++++++ arch/M680X/insn_props.inc | 55 +- bindings/python/capstone/__init__.py | 2 + bindings/python/capstone/m680x_const.py | 740 +++++++++++++----------- cs.c | 2 +- cstool/cstool.c | 1 + include/capstone/capstone.h | 1 + include/capstone/m680x.h | 54 ++ suite/cstest/include/test_mapping.h | 1 + suite/fuzz/platform.c | 2 + tests/details/m680x.yaml | 131 ++++- 16 files changed, 993 insertions(+), 391 deletions(-) create mode 100644 arch/M680X/hcs12x.inc diff --git a/BUILDING.md b/BUILDING.md index 8bccc2cc6..bed7d338b 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -58,7 +58,6 @@ By default all are enabled. - `CAPSTONE_TRICORE_SUPPORT`: Support TriCore. - `CAPSTONE_X86_SUPPORT`: Support X86. - `CAPSTONE_TMS320C64X_SUPPORT`: Support TMS320C64X. -- `CAPSTONE_M680X_SUPPORT`: Support M680X. - `CAPSTONE_EVM_SUPPORT`: Support EVM. - `CAPSTONE_WASM_SUPPORT`: Support Web Assembly. - `CAPSTONE_BPF_SUPPORT`: Support BPF. diff --git a/arch/M680X/M680XDisassembler.c b/arch/M680X/M680XDisassembler.c index e9c6c9be3..311c73354 100644 --- a/arch/M680X/M680XDisassembler.c +++ b/arch/M680X/M680XDisassembler.c @@ -148,6 +148,7 @@ typedef struct insn_props { #include "m6809.inc" #include "hd6309.inc" #include "rs08.inc" +#include "hcs12x.inc" #include "insn_props.inc" @@ -2020,6 +2021,11 @@ static const uint8_t g_rs08_reg_byte_size[23] = { 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 1, 1, 0, 2, 0, 0, 0, 2, 2, 0, 0 }; +static const uint8_t g_hcs12x_reg_byte_size[23] = { + // A B E F 0 D W CC DP MD HX H X Y S U V Q PC SPC T2 T3 + 0, 1, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 2, 0, 2, 2 +}; + // Table to check for a valid register nibble on the M6809 CPU // used for TFR and EXG instruction. static const bool m6809_tfr_reg_valid[16] = { @@ -2157,6 +2163,16 @@ static const cpu_tables g_cpu_tables[] = { &g_rs08_reg_byte_size[0], NULL, { M680X_INS_INVLD, M680X_INS_INVLD } }, + { // M680X_CPU_TYPE_HCS12X + &g_cpu12_inst_page1_table[0], + { NULL, NULL }, + { 0, 0 }, + { 0x18, 0x00, 0x00 }, + { &g_hcs12x_inst_page2_table[0], NULL, NULL }, + { ARR_SIZE(g_hcs12x_inst_page2_table), 0, 0 }, + &g_hcs12x_reg_byte_size[0], + NULL, + { M680X_INS_INVLD, M680X_INS_INVLD } }, }; static bool m680x_setup_internals(m680x_info *info, e_cpu_type cpu_type, @@ -2221,6 +2237,9 @@ bool M680X_getInstruction(csh ud, const uint8_t *code, size_t code_len, else if (handle->mode & CS_MODE_M680X_RS08) cpu_type = M680X_CPU_TYPE_RS08; + else if (handle->mode & CS_MODE_M680X_HCS12X) + cpu_type = M680X_CPU_TYPE_HCS12X; + if (cpu_type != M680X_CPU_TYPE_INVALID && m680x_setup_internals(info, cpu_type, (uint16_t)address, code, (uint16_t)code_len)) @@ -2291,6 +2310,12 @@ cs_err M680X_disassembler_init(cs_struct *ud) return CS_ERR_MODE; } + if (M680X_REG_ENDING != ARR_SIZE(g_hcs12x_reg_byte_size)) { + CS_ASSERT(M680X_REG_ENDING == ARR_SIZE(g_hcs12x_reg_byte_size)); + + return CS_ERR_MODE; + } + if (M680X_INS_ENDING != ARR_SIZE(g_insn_props)) { CS_ASSERT(M680X_INS_ENDING == ARR_SIZE(g_insn_props)); diff --git a/arch/M680X/M680XDisassemblerInternals.h b/arch/M680X/M680XDisassemblerInternals.h index 5a3dd9bcf..cdfe9a910 100644 --- a/arch/M680X/M680XDisassemblerInternals.h +++ b/arch/M680X/M680XDisassemblerInternals.h @@ -21,6 +21,7 @@ typedef enum e_cpu_type { // used on M68HC12/HCS12 M680X_CPU_TYPE_HCS08, // M680X Freescale HCS08 mode M680X_CPU_TYPE_RS08, // M680X Freescale RSS08 mode + M680X_CPU_TYPE_HCS12X, // M680X Freescale HCS12X mode M680X_CPU_TYPE_ENDING, } e_cpu_type; diff --git a/arch/M680X/M680XInstPrinter.c b/arch/M680X/M680XInstPrinter.c index 869928a5e..01cd95799 100644 --- a/arch/M680X/M680XInstPrinter.c +++ b/arch/M680X/M680XInstPrinter.c @@ -28,49 +28,56 @@ static const char s_reg_names[][10] = { static const char s_instruction_names[][6] = { "invld", "aba", "abx", "aby", "adc", "adca", "adcb", "adcd", "adcr", "add", "adda", "addb", "addd", "adde", "addf", "addr", - "addw", "aim", "ais", "aix", "and", "anda", "andb", "andcc", - "andd", "andr", "asl", "asla", "aslb", "asld", "asr", "asra", - "asrb", "asrd", "asrx", "band", "bcc", "bclr", "bcs", "beor", - "beq", "bge", "bgnd", "bgt", "bhcc", "bhcs", "bhi", "biand", - "bieor", "bih", "bil", "bior", "bit", "bita", "bitb", "bitd", - "bitmd", "ble", "bls", "blt", "bmc", "bmi", "bms", "bne", - "bor", "bpl", "brclr", "brset", "bra", "brn", "bset", "bsr", - "bvc", "bvs", "call", "cba", "cbeq", "cbeqa", "cbeqx", "clc", - "cli", "clr", "clra", "clrb", "clrd", "clre", "clrf", "clrh", - "clrw", "clrx", "clv", "cmp", "cmpa", "cmpb", "cmpd", "cmpe", + "addw", "addx", "addy", "aded", "adex", "adey", "aim", "ais", + "aix", "and", "anda", "andb", "andx", "andy", "andcc", "andd", + "andr", "asl", "asla", "aslb", "asld", "aslw", "aslx", "asly", + "asr", "asra", "asrb", "asrd", "asrw", "asrx", "asry", "band", + "bcc", "bclr", "bcs", "beor", "beq", "bge", "bgnd", "bgt", + "bhcc", "bhcs", "bhi", "biand", "bieor", "bih", "bil", "bior", + "bit", "bita", "bitb", "bitx", "bity", "bitd", "bitmd", "ble", + "bls", "blt", "bmc", "bmi", "bms", "bne", "bor", "bpl", + "brclr", "brset", "bra", "brn", "bset", "bsr", "btas", "bvc", + "bvs", "call", "cba", "cbeq", "cbeqa", "cbeqx", "clc", "cli", + "clr", "clra", "clrb", "clrd", "clre", "clrf", "clrh", "clrw", + "clrx", "clry", "clv", "cmp", "cmpa", "cmpb", "cmpd", "cmpe", "cmpf", "cmpr", "cmps", "cmpu", "cmpw", "cmpx", "cmpy", "com", - "coma", "comb", "comd", "come", "comf", "comw", "comx", "cpd", - "cphx", "cps", "cpx", "cpy", "cwai", "daa", "dbeq", "dbne", - "dbnz", "dbnza", "dbnzx", "dec", "deca", "decb", "decd", "dece", - "decf", "decw", "decx", "des", "dex", "dey", "div", "divd", - "divq", "ediv", "edivs", "eim", "emacs", "emaxd", "emaxm", "emind", - "eminm", "emul", "emuls", "eor", "eora", "eorb", "eord", "eorr", - "etbl", "exg", "fdiv", "ibeq", "ibne", "idiv", "idivs", "illgl", - "inc", "inca", "incb", "incd", "ince", "incf", "incw", "incx", - "ins", "inx", "iny", "jmp", "jsr", "lbcc", "lbcs", "lbeq", - "lbge", "lbgt", "lbhi", "lble", "lbls", "lblt", "lbmi", "lbne", - "lbpl", "lbra", "lbrn", "lbsr", "lbvc", "lbvs", "lda", "ldaa", - "ldab", "ldb", "ldbt", "ldd", "lde", "ldf", "ldhx", "ldmd", - "ldq", "lds", "ldu", "ldw", "ldx", "ldy", "leas", "leau", - "leax", "leay", "lsl", "lsla", "lslb", "lsld", "lslx", "lsr", - "lsra", "lsrb", "lsrd", "lsrw", "lsrx", "maxa", "maxm", "mem", - "mina", "minm", "mov", "movb", "movw", "mul", "muld", "neg", - "nega", "negb", "negd", "negx", "nop", "nsa", "oim", "ora", - "oraa", "orab", "orb", "orcc", "ord", "orr", "psha", "pshb", - "pshc", "pshd", "pshh", "pshs", "pshsw", "pshu", "pshuw", "pshx", - "pshy", "pula", "pulb", "pulc", "puld", "pulh", "puls", "pulsw", - "pulu", "puluw", "pulx", "puly", "rev", "revw", "rol", "rola", - "rolb", "rold", "rolw", "rolx", "ror", "rora", "rorb", "rord", - "rorw", "rorx", "rsp", "rtc", "rti", "rts", "sba", "sbc", - "sbca", "sbcb", "sbcd", "sbcr", "sec", "sei", "sev", "sex", - "sexw", "sha", "sla", "slp", "sta", "staa", "stab", "stb", - "stbt", "std", "ste", "stf", "stop", "sthx", "stq", "sts", - "stu", "stw", "stx", "sty", "sub", "suba", "subb", "subd", - "sube", "subf", "subr", "subw", "swi", "swi2", "swi3", "sync", - "tab", "tap", "tax", "tba", "tbeq", "tbl", "tbne", "test", - "tfm", "tfr", "tim", "tpa", "tst", "tsta", "tstb", "tstd", - "tste", "tstf", "tstw", "tstx", "tsx", "tsy", "txa", "txs", - "tys", "wai", "wait", "wav", "wavr", "xgdx", "xgdy", + "coma", "comb", "comd", "come", "comf", "comw", "comx", "comy", + "cpd", "cped", "cpes", "cpex", "cpey", "cphx", "cps", "cpx", + "cpy", "cwai", "daa", "dbeq", "dbne", "dbnz", "dbnza", "dbnzx", + "dec", "deca", "decb", "decd", "dece", "decf", "decw", "decx", + "decy", "des", "dex", "dey", "div", "divd", "divq", "ediv", + "edivs", "eim", "emacs", "emaxd", "emaxm", "emind", "eminm", "emul", + "emuls", "eor", "eora", "eorb", "eord", "eorr", "eorx", "eory", + "etbl", "exg", "fdiv", "gldaa", "gldab", "gldd", "glds", "gldx", + "gldy", "gstaa", "gstab", "gstd", "gsts", "gstx", "gsty", "ibeq", + "ibne", "idiv", "idivs", "illgl", "inc", "inca", "incb", "incd", + "ince", "incf", "incw", "incx", "incy", "ins", "inx", "iny", + "jmp", "jsr", "lbcc", "lbcs", "lbeq", "lbge", "lbgt", "lbhi", + "lble", "lbls", "lblt", "lbmi", "lbne", "lbpl", "lbra", "lbrn", + "lbsr", "lbvc", "lbvs", "lda", "ldaa", "ldab", "ldb", "ldbt", + "ldd", "lde", "ldf", "ldhx", "ldmd", "ldq", "lds", "ldu", + "ldw", "ldx", "ldy", "leas", "leau", "leax", "leay", "lsl", + "lsla", "lslb", "lsld", "lslx", "lsr", "lsra", "lsrb", "lsrd", + "lsrw", "lsrx", "lsry", "maxa", "maxm", "mem", "mina", "minm", + "mov", "movb", "movw", "mul", "muld", "neg", "nega", "negb", + "negd", "negw", "negx", "negy", "nop", "nsa", "oim", "ora", + "oraa", "orab", "orb", "orcc", "ord", "orr", "orx", "ory", + "psha", "pshb", "pshc", "pshcw", "pshd", "pshh", "pshs", "pshsw", + "pshu", "pshuw", "pshx", "pshy", "pula", "pulb", "pulc", "pulcw", + "puld", "pulh", "puls", "pulsw", "pulu", "puluw", "pulx", "puly", + "rev", "revw", "rol", "rola", "rolb", "rold", "rolw", "rolx", + "roly", "ror", "rora", "rorb", "rord", "rorw", "rorx", "rory", + "rsp", "rtc", "rti", "rts", "sba", "sbc", "sbca", "sbcb", + "sbcd", "sbcr", "sbed", "sbex", "sbey", "sec", "sei", "sev", + "sex", "sexw", "sha", "sla", "slp", "sta", "staa", "stab", + "stb", "stbt", "std", "ste", "stf", "stop", "sthx", "stq", + "sts", "stu", "stw", "stx", "sty", "sub", "suba", "subb", + "subd", "sube", "subf", "subr", "subw", "subx", "suby", "swi", + "swi2", "swi3", "sync", "sys", "tab", "tap", "tax", "tba", + "tbeq", "tbl", "tbne", "test", "tfm", "tfr", "tim", "tpa", + "trap", "tst", "tsta", "tstb", "tstd", "tste", "tstf", "tstw", + "tstx", "tsty", "tsx", "tsy", "txa", "txs", "tys", "wai", + "wait", "wav", "wavr", "xgdx", "xgdy", }; static const name_map s_group_names[] = { diff --git a/arch/M680X/M680XModule.c b/arch/M680X/M680XModule.c index 7f52c7509..b465345ed 100644 --- a/arch/M680X/M680XModule.c +++ b/arch/M680X/M680XModule.c @@ -31,7 +31,8 @@ cs_err M680X_global_init(cs_struct *ud) ~(CS_MODE_M680X_6800 | CS_MODE_M680X_6801 | CS_MODE_M680X_6805 | CS_MODE_M680X_6808 | CS_MODE_M680X_6809 | CS_MODE_M680X_6811 | CS_MODE_M680X_6301 | CS_MODE_M680X_6309 | CS_MODE_M680X_CPU12 | - CS_MODE_M680X_HCS08 | CS_MODE_M680X_RS08)) { + CS_MODE_M680X_HCS08 | CS_MODE_M680X_RS08 | + CS_MODE_M680X_HCS12X)) { // At least one mode is not supported by M680X return CS_ERR_MODE; } @@ -40,7 +41,8 @@ cs_err M680X_global_init(cs_struct *ud) (CS_MODE_M680X_6800 | CS_MODE_M680X_6801 | CS_MODE_M680X_6805 | CS_MODE_M680X_6808 | CS_MODE_M680X_6809 | CS_MODE_M680X_6811 | CS_MODE_M680X_6301 | CS_MODE_M680X_6309 | CS_MODE_M680X_CPU12 | - CS_MODE_M680X_HCS08 | CS_MODE_M680X_RS08))) { + CS_MODE_M680X_HCS08 | CS_MODE_M680X_RS08 | + CS_MODE_M680X_HCS12X))) { // At least the cpu type has to be selected. No default. return CS_ERR_MODE; } diff --git a/arch/M680X/hcs12x.inc b/arch/M680X/hcs12x.inc new file mode 100644 index 000000000..2433c12d6 --- /dev/null +++ b/arch/M680X/hcs12x.inc @@ -0,0 +1,271 @@ +// Page 2 instructions for HCS12X +static const inst_pageX g_hcs12x_inst_page2_table[] = { + { 0x00, M680X_INS_MOVW, imm16i12x_hid, inh_hid }, + { 0x01, M680X_INS_MOVW, exti12x_hid, inh_hid }, + { 0x02, M680X_INS_MOVW, idx12_hid, idx12_hid }, + { 0x03, M680X_INS_MOVW, imm16_hid, ext_hid }, + { 0x04, M680X_INS_MOVW, ext_hid, ext_hid }, + { 0x05, M680X_INS_MOVW, idx12_hid, ext_hid }, + { 0x06, M680X_INS_ABA, inh_hid, inh_hid }, + { 0x07, M680X_INS_DAA, inh_hid, inh_hid }, + { 0x08, M680X_INS_MOVB, imm8i12x_hid, inh_hid }, + { 0x09, M680X_INS_MOVB, exti12x_hid, inh_hid }, + { 0x0A, M680X_INS_MOVB, idx12_hid, idx12_hid }, + { 0x0B, M680X_INS_MOVB, imm16_hid, ext_hid }, + { 0x0C, M680X_INS_MOVB, ext_hid, ext_hid }, + { 0x0D, M680X_INS_MOVB, idx12_hid, ext_hid }, + { 0x0E, M680X_INS_TAB, inh_hid, inh_hid }, + { 0x0F, M680X_INS_TBA, inh_hid, inh_hid }, + + { 0x10, M680X_INS_IDIV, inh_hid, inh_hid }, + { 0x11, M680X_INS_FDIV, inh_hid, inh_hid }, + { 0x12, M680X_INS_EMACS, ext_hid, inh_hid }, + { 0x13, M680X_INS_EMULS, inh_hid, inh_hid }, + { 0x14, M680X_INS_EDIVS, inh_hid, inh_hid }, + { 0x15, M680X_INS_IDIVS, inh_hid, inh_hid }, + { 0x16, M680X_INS_SBA, inh_hid, inh_hid }, + { 0x17, M680X_INS_CBA, inh_hid, inh_hid }, + { 0x18, M680X_INS_MAXA, idx12_hid, inh_hid }, + { 0x19, M680X_INS_MINA, idx12_hid, inh_hid }, + { 0x1A, M680X_INS_EMAXD, idx12_hid, inh_hid }, + { 0x1B, M680X_INS_EMIND, idx12_hid, inh_hid }, + { 0x1C, M680X_INS_MAXM, idx12_hid, inh_hid }, + { 0x1D, M680X_INS_MINM, idx12_hid, inh_hid }, + { 0x1E, M680X_INS_EMAXM, idx12_hid, inh_hid }, + { 0x1F, M680X_INS_EMINM, idx12_hid, inh_hid }, + + { 0x20, M680X_INS_LBRA, rel16_hid, inh_hid }, + { 0x21, M680X_INS_LBRN, rel16_hid, inh_hid }, + { 0x22, M680X_INS_LBHI, rel16_hid, inh_hid }, + { 0x23, M680X_INS_LBLS, rel16_hid, inh_hid }, + { 0x24, M680X_INS_LBCC, rel16_hid, inh_hid }, + { 0x25, M680X_INS_LBCS, rel16_hid, inh_hid }, + { 0x26, M680X_INS_LBNE, rel16_hid, inh_hid }, + { 0x27, M680X_INS_LBEQ, rel16_hid, inh_hid }, + { 0x28, M680X_INS_LBVC, rel16_hid, inh_hid }, + { 0x29, M680X_INS_LBVS, rel16_hid, inh_hid }, + { 0x2A, M680X_INS_LBPL, rel16_hid, inh_hid }, + { 0x2B, M680X_INS_LBMI, rel16_hid, inh_hid }, + { 0x2C, M680X_INS_LBGE, rel16_hid, inh_hid }, + { 0x2D, M680X_INS_LBLT, rel16_hid, inh_hid }, + { 0x2E, M680X_INS_LBGT, rel16_hid, inh_hid }, + { 0x2F, M680X_INS_LBLE, rel16_hid, inh_hid }, + + { 0x30, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0x31, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0x32, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0x33, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0x34, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0x35, M680X_INS_BTAS, dir_hid, inh_hid }, + { 0x36, M680X_INS_BTAS, ext_hid, inh_hid }, + { 0x37, M680X_INS_BTAS, idx12_hid, inh_hid }, + { 0x38, M680X_INS_PULCW, inh_hid, inh_hid }, + { 0x39, M680X_INS_PSHCW, inh_hid, inh_hid }, + { 0x3A, M680X_INS_REV, inh_hid, inh_hid }, + { 0x3B, M680X_INS_REVW, inh_hid, inh_hid }, + { 0x3C, M680X_INS_WAV, inh_hid, inh_hid }, + { 0x3D, M680X_INS_TBL, idx12s_hid, inh_hid }, + { 0x3E, M680X_INS_STOP, inh_hid, inh_hid }, + { 0x3F, M680X_INS_ETBL, idx12s_hid, inh_hid }, + + { 0x40, M680X_INS_NEGX, inh_hid, inh_hid }, + { 0x41, M680X_INS_COMX, inh_hid, inh_hid }, + { 0x42, M680X_INS_INCX, inh_hid, inh_hid }, + { 0x43, M680X_INS_DECX, inh_hid, inh_hid }, + { 0x44, M680X_INS_LSRX, inh_hid, inh_hid }, + { 0x45, M680X_INS_ROLX, inh_hid, inh_hid }, + { 0x46, M680X_INS_RORX, inh_hid, inh_hid }, + { 0x47, M680X_INS_ASRX, inh_hid, inh_hid }, + { 0x48, M680X_INS_ASLX, inh_hid, inh_hid }, + { 0x49, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0x4A, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0x4B, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0x4C, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0x4D, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0x4E, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0x4F, M680X_INS_TRAP, inh_hid, inh_hid }, + + { 0x50, M680X_INS_NEGY, inh_hid, inh_hid }, + { 0x51, M680X_INS_COMY, inh_hid, inh_hid }, + { 0x52, M680X_INS_INCY, inh_hid, inh_hid }, + { 0x53, M680X_INS_DECY, inh_hid, inh_hid }, + { 0x55, M680X_INS_ROLY, inh_hid, inh_hid }, + { 0x56, M680X_INS_RORY, inh_hid, inh_hid }, + { 0x57, M680X_INS_ASRY, inh_hid, inh_hid }, + { 0x58, M680X_INS_ASLY, inh_hid, inh_hid }, + { 0x59, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0x5A, M680X_INS_GSTAA, dir_hid, inh_hid }, + { 0x5B, M680X_INS_GSTAB, dir_hid, inh_hid }, + { 0x5C, M680X_INS_GSTD, dir_hid, inh_hid }, + { 0x5C, M680X_INS_GSTY, dir_hid, inh_hid }, + { 0x5E, M680X_INS_GSTX, dir_hid, inh_hid }, + { 0x5F, M680X_INS_GSTS, dir_hid, inh_hid }, + + { 0x60, M680X_INS_NEGW, idx12_hid, inh_hid }, + { 0x61, M680X_INS_COMW, idx12_hid, inh_hid }, + { 0x62, M680X_INS_INCW, idx12_hid, inh_hid }, + { 0x63, M680X_INS_DECW, idx12_hid, inh_hid }, + { 0x64, M680X_INS_LSRW, idx12_hid, inh_hid }, + { 0x65, M680X_INS_ROLW, idx12_hid, inh_hid }, + { 0x66, M680X_INS_RORW, idx12_hid, inh_hid }, + { 0x67, M680X_INS_ASRW, idx12_hid, inh_hid }, + { 0x68, M680X_INS_ASLW, idx12_hid, inh_hid }, + { 0x69, M680X_INS_CLRW, idx12_hid, inh_hid }, + { 0x6A, M680X_INS_GSTAA, idx12_hid, inh_hid }, + { 0x6B, M680X_INS_GSTAB, idx12_hid, inh_hid }, + { 0x6C, M680X_INS_GSTD, idx12_hid, inh_hid }, + { 0x6D, M680X_INS_GSTY, idx12_hid, inh_hid }, + { 0x6E, M680X_INS_GSTX, idx12_hid, inh_hid }, + { 0x6F, M680X_INS_GSTS, idx12_hid, inh_hid }, + + { 0x70, M680X_INS_NEGW, ext_hid, inh_hid }, + { 0x71, M680X_INS_COMW, ext_hid, inh_hid }, + { 0x72, M680X_INS_INCW, ext_hid, inh_hid }, + { 0x73, M680X_INS_DECW, ext_hid, inh_hid }, + { 0x75, M680X_INS_ROLW, ext_hid, inh_hid }, + { 0x76, M680X_INS_RORW, ext_hid, inh_hid }, + { 0x77, M680X_INS_ASRW, ext_hid, inh_hid }, + { 0x78, M680X_INS_ASLW, ext_hid, inh_hid }, + { 0x79, M680X_INS_CLRW, ext_hid, inh_hid }, + { 0x7A, M680X_INS_GSTAA, ext_hid, inh_hid }, + { 0x7B, M680X_INS_GSTAB, ext_hid, inh_hid }, + { 0x7C, M680X_INS_GSTD, ext_hid, inh_hid }, + { 0x7D, M680X_INS_GSTY, idx12_hid, inh_hid }, + { 0x7E, M680X_INS_GSTX, ext_hid, inh_hid }, + { 0x7F, M680X_INS_GSTS, ext_hid, inh_hid }, + + { 0x80, M680X_INS_SUBX, imm16_hid, inh_hid }, + { 0x81, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0x82, M680X_INS_SBEX, imm16_hid, inh_hid }, + { 0x83, M680X_INS_SBED, imm16_hid, inh_hid }, + { 0x84, M680X_INS_ANDX, imm8_hid, inh_hid }, + { 0x85, M680X_INS_BITX, imm8_hid, inh_hid }, + { 0x86, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0x87, M680X_INS_CLRX, inh_hid, inh_hid }, + { 0x88, M680X_INS_EORX, imm8_hid, inh_hid }, + { 0x89, M680X_INS_ADEX, imm8_hid, inh_hid }, + { 0x8A, M680X_INS_ORX, imm16_hid, inh_hid }, + { 0x8B, M680X_INS_ADDX, imm8_hid, inh_hid }, + { 0x8C, M680X_INS_CPED, imm8_hid, inh_hid }, + { 0x8D, M680X_INS_CPEY, imm8_hid, inh_hid }, + { 0x8E, M680X_INS_CPEX, imm8_hid, inh_hid }, + { 0x8F, M680X_INS_CPES, imm8_hid, inh_hid }, + + { 0x90, M680X_INS_SUBX, dir_hid, inh_hid }, + { 0x91, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0x92, M680X_INS_SBEX, dir_hid, inh_hid }, + { 0x93, M680X_INS_SBED, dir_hid, inh_hid }, + { 0x94, M680X_INS_ANDX, dir_hid, inh_hid }, + { 0x95, M680X_INS_BITX, dir_hid, inh_hid }, + { 0x96, M680X_INS_GLDAA, dir_hid, inh_hid }, + { 0x97, M680X_INS_TSTX, inh_hid, inh_hid }, + { 0x98, M680X_INS_EORX, dir_hid, inh_hid }, + { 0x99, M680X_INS_ADEX, dir_hid, inh_hid }, + { 0x9A, M680X_INS_ORX, dir_hid, inh_hid }, + { 0x9B, M680X_INS_ADDX, dir_hid, inh_hid }, + { 0x9C, M680X_INS_CPED, dir_hid, inh_hid }, + { 0x9D, M680X_INS_CPEY, dir_hid, inh_hid }, + { 0x9F, M680X_INS_CPES, dir_hid, inh_hid }, + + { 0xA0, M680X_INS_SUBX, idx12_hid, inh_hid }, + { 0xA1, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0xA2, M680X_INS_SBEX, idx12_hid, inh_hid }, + { 0xA3, M680X_INS_SBED, idx12_hid, inh_hid }, + { 0xA4, M680X_INS_ANDX, idx12_hid, inh_hid }, + { 0xA5, M680X_INS_BITX, idx12_hid, inh_hid }, + { 0xA6, M680X_INS_GLDAA, idx12_hid, inh_hid }, + { 0xA7, M680X_INS_SYS, inh_hid, inh_hid }, + { 0xA8, M680X_INS_EORX, idx12_hid, inh_hid }, + { 0xA9, M680X_INS_ADEX, idx12_hid, inh_hid }, + { 0xAA, M680X_INS_ORX, idx12_hid, inh_hid }, + { 0xAB, M680X_INS_ADDX, idx12_hid, inh_hid }, + { 0xAC, M680X_INS_CPED, idx12_hid, inh_hid }, + { 0xAD, M680X_INS_CPEY, idx12_hid, inh_hid }, + { 0xAE, M680X_INS_CPEX, idx12_hid, inh_hid }, + { 0xAF, M680X_INS_CPES, idx12_hid, inh_hid }, + + { 0xB0, M680X_INS_SUBX, ext_hid, inh_hid }, + { 0xB1, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0xB2, M680X_INS_SBEX, ext_hid, inh_hid }, + { 0xB3, M680X_INS_SBED, ext_hid, inh_hid }, + { 0xB4, M680X_INS_ANDX, ext_hid, inh_hid }, + { 0xB5, M680X_INS_BITX, ext_hid, inh_hid }, + { 0xB6, M680X_INS_GLDAA, ext_hid, inh_hid }, + { 0xB7, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0xB8, M680X_INS_EORX, ext_hid, inh_hid }, + { 0xB9, M680X_INS_ADEX, ext_hid, inh_hid }, + { 0xBA, M680X_INS_ORX, ext_hid, inh_hid }, + { 0xBB, M680X_INS_ADDX, ext_hid, inh_hid }, + { 0xBC, M680X_INS_CPED, ext_hid, inh_hid }, + { 0xBD, M680X_INS_CPEY, ext_hid, inh_hid }, + { 0xBE, M680X_INS_CPEX, ext_hid, inh_hid }, + { 0xBF, M680X_INS_CPES, ext_hid, inh_hid }, + + { 0xC0, M680X_INS_SUBY, imm16_hid, inh_hid }, + { 0xC1, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0xC2, M680X_INS_SBEY, ext_hid, inh_hid }, + { 0xC3, M680X_INS_ADED, imm8_hid, inh_hid }, + { 0xC4, M680X_INS_ANDY, imm8_hid, inh_hid }, + { 0xC5, M680X_INS_BITY, imm8_hid, inh_hid }, + { 0xC6, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0xC7, M680X_INS_CLRY, inh_hid, inh_hid }, + { 0xC8, M680X_INS_EORY, imm8_hid, inh_hid }, + { 0xC9, M680X_INS_ADEY, imm8_hid, inh_hid }, + { 0xCA, M680X_INS_ORY, imm16_hid, inh_hid }, + { 0xCB, M680X_INS_ADDY, imm8_hid, inh_hid }, + { 0xCC, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0xCD, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0xCE, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0xCF, M680X_INS_TRAP, inh_hid, inh_hid }, + + { 0xD0, M680X_INS_SUBY, dir_hid, inh_hid }, + { 0xD1, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0xD2, M680X_INS_SBEY, inh_hid, inh_hid }, + { 0xD3, M680X_INS_ADED, dir_hid, inh_hid }, + { 0xD4, M680X_INS_ANDY, dir_hid, inh_hid }, + { 0xD5, M680X_INS_BITY, dir_hid, inh_hid }, + { 0xD6, M680X_INS_GLDAB, dir_hid, inh_hid }, + { 0xD7, M680X_INS_TSTY, inh_hid, inh_hid }, + { 0xD8, M680X_INS_EORY, dir_hid, inh_hid }, + { 0xD9, M680X_INS_ADEY, dir_hid, inh_hid }, + { 0xDA, M680X_INS_ORY, dir_hid, inh_hid }, + { 0xDB, M680X_INS_ADDY, dir_hid, inh_hid }, + { 0xDC, M680X_INS_GLDD, dir_hid, inh_hid }, + { 0xDD, M680X_INS_GLDY, dir_hid, inh_hid }, + { 0xDE, M680X_INS_GLDX, dir_hid, inh_hid }, + { 0xDF, M680X_INS_GLDS, dir_hid, inh_hid }, + + { 0xE0, M680X_INS_SUBY, idx12_hid, inh_hid }, + { 0xE1, M680X_INS_TRAP, inh_hid, inh_hid }, + { 0xE2, M680X_INS_SBEY, inh_hid, inh_hid }, + { 0xE3, M680X_INS_ADED, idx12_hid, inh_hid }, + { 0xE4, M680X_INS_ANDY, idx12_hid, inh_hid }, + { 0xE5, M680X_INS_BITY, idx12_hid, inh_hid }, + { 0xE6, M680X_INS_GLDAB, idx12_hid, inh_hid }, + { 0xE7, M680X_INS_TSTW, idx12_hid, inh_hid }, + { 0xE8, M680X_INS_EORY, idx12_hid, inh_hid }, + { 0xE9, M680X_INS_ADEY, idx12_hid, inh_hid }, + { 0xEA, M680X_INS_ORY, idx12_hid, inh_hid }, + { 0xEB, M680X_INS_ADDY, idx12_hid, inh_hid }, + { 0xEC, M680X_INS_GLDD, idx12_hid, inh_hid }, + { 0xED, M680X_INS_GLDY, idx12_hid, inh_hid }, + { 0xEE, M680X_INS_GLDX, idx12_hid, inh_hid }, + { 0xEF, M680X_INS_GLDS, idx12_hid, inh_hid }, + + { 0xF0, M680X_INS_SUBY, ext_hid, inh_hid }, + { 0xF1, M680X_INS_TRAP, ext_hid, inh_hid }, + { 0xF2, M680X_INS_SBEY, ext_hid, inh_hid }, + { 0xF3, M680X_INS_ADED, ext_hid, inh_hid }, + { 0xF4, M680X_INS_ANDY, ext_hid, inh_hid }, + { 0xF5, M680X_INS_BITY, ext_hid, inh_hid }, + { 0xF6, M680X_INS_GLDAB, ext_hid, inh_hid }, + { 0xF7, M680X_INS_TSTW, ext_hid, inh_hid }, + { 0xF8, M680X_INS_EORY, ext_hid, inh_hid }, + { 0xF9, M680X_INS_ADEY, ext_hid, inh_hid }, + { 0xFA, M680X_INS_ORY, ext_hid, inh_hid }, + { 0xFB, M680X_INS_ADDY, ext_hid, inh_hid }, + { 0xFC, M680X_INS_GLDD, ext_hid, inh_hid }, + { 0xFD, M680X_INS_GLDY, ext_hid, inh_hid }, + { 0xFE, M680X_INS_GLDX, ext_hid, inh_hid }, + { 0xFF, M680X_INS_GLDS, ext_hid, inh_hid }, +}; diff --git a/arch/M680X/insn_props.inc b/arch/M680X/insn_props.inc index fcf5b0773..b6188a0a4 100644 --- a/arch/M680X/insn_props.inc +++ b/arch/M680X/insn_props.inc @@ -21,12 +21,19 @@ static const insn_props g_insn_props[] = { { NOG, mrrr, M680X_REG_F, NOR, true, false }, // ADDF { NOG, rmmm, NOR, NOR, true, false }, // ADDR { NOG, mrrr, M680X_REG_W, NOR, true, false }, // ADDW + { NOG, mrrr, M680X_REG_X, NOR, true, false }, // ADDX + { NOG, mrrr, M680X_REG_Y, NOR, true, false }, // ADDY + { NOG, mmmm, M680X_REG_A, M680X_REG_B, true, false }, // ADED + { NOG, mmmm, M680X_REG_A, M680X_REG_X, true, false }, // ADEX + { NOG, mmmm, M680X_REG_A, M680X_REG_Y, true, false }, // ADEY { NOG, rmmm, NOR, NOR, true, false }, // AIM { NOG, mrrr, M680X_REG_S, NOR, false, false }, // AIS { NOG, mrrr, M680X_REG_HX, NOR, false, false }, // AIX { NOG, mrrr, M680X_REG_A, NOR, true, false }, // AND { NOG, mrrr, M680X_REG_A, NOR, true, false }, // ANDA { NOG, mrrr, M680X_REG_B, NOR, true, false }, // ANDB + { NOG, mrrr, M680X_REG_X, NOR, true, false }, // ANDX + { NOG, mrrr, M680X_REG_Y, NOR, true, false }, // ANDY { NOG, mrrr, M680X_REG_CC, NOR, true, false }, // ANDCC { NOG, mrrr, M680X_REG_D, NOR, true, false }, // ANDD { NOG, rmmm, NOR, NOR, true, false }, // ANDR @@ -34,11 +41,16 @@ static const insn_props g_insn_props[] = { { NOG, mrrr, M680X_REG_A, NOR, true, false }, // ASLA { NOG, mrrr, M680X_REG_B, NOR, true, false }, // ASLB { NOG, mrrr, M680X_REG_D, NOR, true, false }, // ASLD + { NOG, mrrr, M680X_REG_W, NOR, true, false }, // ASLW + { NOG, mrrr, M680X_REG_X, NOR, true, false }, // ASLX + { NOG, mrrr, M680X_REG_Y, NOR, true, false }, // ASLY { NOG, mrrr, NOR, NOR, true, false }, // ASR { NOG, mrrr, M680X_REG_A, NOR, true, false }, // ASRA { NOG, mrrr, M680X_REG_B, NOR, true, false }, // ASRB { NOG, mrrr, M680X_REG_D, NOR, true, false }, // ASRD + { NOG, mrrr, M680X_REG_W, NOR, true, false }, // ASRW { NOG, mrrr, M680X_REG_X, NOR, true, false }, // ASRX + { NOG, mrrr, M680X_REG_Y, NOR, true, false }, // ASRY { NOG, mrrr, NOR, NOR, false, false }, // BAND { M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BCC { NOG, mrrr, NOR, NOR, true, false }, // BCLR @@ -61,6 +73,8 @@ static const insn_props g_insn_props[] = { { NOG, rrrr, M680X_REG_B, NOR, true, false }, // BITB { NOG, rrrr, M680X_REG_D, NOR, true, false }, // BITD { NOG, rrrr, M680X_REG_MD, NOR, true, false }, // BITMD + { NOG, rrrr, M680X_REG_X, NOR, true, false }, // BITX + { NOG, rrrr, M680X_REG_Y, NOR, true, false }, // BITY { M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BLE { M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BLS { M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BLT @@ -76,6 +90,7 @@ static const insn_props g_insn_props[] = { { M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BRN never branches { NOG, mrrr, NOR, NOR, true, false }, // BSET { M680X_GRP_CALL, uuuu, NOR, NOR, false, true }, // BSR + { M680X_GRP_JUMP, uuuu, NOR, NOR, false, true }, // BTAS { M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BVC { M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BVS { M680X_GRP_CALL, uuuu, NOR, NOR, false, true }, // CALL @@ -94,6 +109,7 @@ static const insn_props g_insn_props[] = { { NOG, wrrr, M680X_REG_H, NOR, true, false }, // CLRH { NOG, wrrr, M680X_REG_W, NOR, true, false }, // CLRW { NOG, wrrr, M680X_REG_X, NOR, true, false }, // CLRX + { NOG, wrrr, M680X_REG_Y, NOR, true, false }, // CLRY { NOG, uuuu, NOR, NOR, true, false }, // CLV { NOG, rrrr, M680X_REG_A, NOR, true, false }, // CMP { NOG, rrrr, M680X_REG_A, NOR, true, false }, // CMPA @@ -115,7 +131,12 @@ static const insn_props g_insn_props[] = { { NOG, mrrr, M680X_REG_F, NOR, true, false }, // COMF { NOG, mrrr, M680X_REG_W, NOR, true, false }, // COMW { NOG, mrrr, M680X_REG_X, NOR, true, false }, // COMX + { NOG, mrrr, M680X_REG_Y, NOR, true, false }, // COMY { NOG, rrrr, M680X_REG_D, NOR, true, false }, // CPD + { NOG, rrrr, M680X_REG_D, NOR, true, false }, // CPED + { NOG, rrrr, M680X_REG_S, NOR, true, false }, // CPES + { NOG, rrrr, M680X_REG_X, NOR, true, false }, // CPEX + { NOG, rrrr, M680X_REG_Y, NOR, true, false }, // CPEY { NOG, rrrr, M680X_REG_HX, NOR, true, false }, // CPHX { NOG, rrrr, M680X_REG_S, NOR, true, false }, // CPS { NOG, rrrr, M680X_REG_X, NOR, true, false }, // CPX @@ -135,6 +156,7 @@ static const insn_props g_insn_props[] = { { NOG, mrrr, M680X_REG_F, NOR, true, false }, // DECF { NOG, mrrr, M680X_REG_W, NOR, true, false }, // DECW { NOG, mrrr, M680X_REG_X, NOR, true, false }, // DECX + { NOG, mrrr, M680X_REG_Y, NOR, true, false }, // DECY { NOG, mrrr, M680X_REG_S, NOR, false, false }, // DES { NOG, mrrr, M680X_REG_X, NOR, true, false }, // DEX { NOG, mrrr, M680X_REG_Y, NOR, true, false }, // DEY @@ -156,9 +178,23 @@ static const insn_props g_insn_props[] = { { NOG, mrrr, M680X_REG_B, NOR, true, false }, // EORB { NOG, mrrr, M680X_REG_D, NOR, true, false }, // EORD { NOG, rmmm, NOR, NOR, true, false }, // EORR + { NOG, mmmm, M680X_REG_X, NOR, true, false }, // EORX + { NOG, mmmm, M680X_REG_Y, NOR, true, false }, // EORY { NOG, rmmm, NOR, NOR, true, true }, // ETBL { NOG, mmmm, NOR, NOR, false, false }, // EXG { NOG, mmmm, NOR, NOR, true, true }, // FDIV + { NOG, mmmm, M680X_REG_A, NOR, true, true }, // GLDAA + { NOG, mmmm, M680X_REG_B, NOR, true, true }, // GLDAB + { NOG, mmmm, M680X_REG_D, NOR, true, true }, // GLDD + { NOG, mmmm, M680X_REG_S, NOR, true, true }, // GLDS + { NOG, mmmm, M680X_REG_X, NOR, true, true }, // GLDX + { NOG, mmmm, M680X_REG_Y, NOR, true, true }, // GLDY + { NOG, rrrr, M680X_REG_A, NOR, true, true }, // GSTAA + { NOG, rrrr, M680X_REG_B, NOR, true, true }, // GSTAB + { NOG, rrrr, M680X_REG_D, NOR, true, true }, // GSTD + { NOG, rrrr, M680X_REG_S, NOR, true, true }, // GSTS + { NOG, rrrr, M680X_REG_X, NOR, true, true }, // GSTX + { NOG, rrrr, M680X_REG_Y, NOR, true, true }, // GSTY { M680X_GRP_JUMP, muuu, NOR, NOR, false, false }, // IBEQ { M680X_GRP_JUMP, muuu, NOR, NOR, false, false }, // IBNE { NOG, mmmm, NOR, NOR, true, true }, // IDIV @@ -172,6 +208,7 @@ static const insn_props g_insn_props[] = { { NOG, mrrr, M680X_REG_F, NOR, true, false }, // INCF { NOG, mrrr, M680X_REG_W, NOR, true, false }, // INCW { NOG, mrrr, M680X_REG_X, NOR, true, false }, // INCX + { NOG, mrrr, M680X_REG_Y, NOR, true, false }, // INCY { NOG, mrrr, M680X_REG_S, NOR, false, false }, // INS { NOG, mrrr, M680X_REG_X, NOR, true, false }, // INX { NOG, mrrr, M680X_REG_Y, NOR, true, false }, // INY @@ -225,6 +262,7 @@ static const insn_props g_insn_props[] = { { NOG, mrrr, M680X_REG_D, NOR, true, false }, // LSRD { NOG, mrrr, M680X_REG_W, NOR, true, false }, // LSRW { NOG, mrrr, M680X_REG_X, NOR, true, false }, // LSRX + { NOG, mrrr, M680X_REG_Y, NOR, true, false }, // LSRY { NOG, mrrr, M680X_REG_A, NOR, true, false }, // MAXA { NOG, mrrr, NOR, NOR, true, true }, // MAXM { NOG, mmrr, NOR, NOR, true, true }, // MEM @@ -239,7 +277,9 @@ static const insn_props g_insn_props[] = { { NOG, mrrr, M680X_REG_A, NOR, true, false }, // NEGA { NOG, mrrr, M680X_REG_B, NOR, true, false }, // NEGB { NOG, mrrr, M680X_REG_D, NOR, true, false }, // NEGD + { NOG, mrrr, M680X_REG_W, NOR, true, false }, // NEGW { NOG, mrrr, M680X_REG_X, NOR, true, false }, // NEGX + { NOG, mrrr, M680X_REG_Y, NOR, true, false }, // NEGY { NOG, uuuu, NOR, NOR, false, false }, // NOP { NOG, mrrr, M680X_REG_A, NOR, true, false }, // NSA { NOG, rmmm, NOR, NOR, true, false }, // OIM @@ -250,9 +290,12 @@ static const insn_props g_insn_props[] = { { NOG, mrrr, M680X_REG_CC, NOR, true, false }, // ORCC { NOG, mrrr, M680X_REG_D, NOR, true, false }, // ORD { NOG, rmmm, NOR, NOR, true, false }, // ORR + { NOG, rmmm, NOR, NOR, true, false }, // ORX + { NOG, rmmm, NOR, NOR, true, false }, // ORY { NOG, rmmm, M680X_REG_A, NOR, false, true }, // PSHA { NOG, rmmm, M680X_REG_B, NOR, false, true }, // PSHB { NOG, rmmm, M680X_REG_CC, NOR, false, true }, // PSHC + { NOG, rmmm, M680X_REG_CC, NOR, false, true }, // PSHCW { NOG, rmmm, M680X_REG_D, NOR, false, true }, // PSHD { NOG, rmmm, M680X_REG_H, NOR, false, true }, // PSHH { NOG, mrrr, M680X_REG_S, NOR, false, false }, // PSHS @@ -264,6 +307,7 @@ static const insn_props g_insn_props[] = { { NOG, wmmm, M680X_REG_A, NOR, false, true }, // PULA { NOG, wmmm, M680X_REG_B, NOR, false, true }, // PULB { NOG, wmmm, M680X_REG_CC, NOR, false, true }, // PULC + { NOG, wmmm, M680X_REG_CC, NOR, false, true }, // PULCW { NOG, wmmm, M680X_REG_D, NOR, false, true }, // PULD { NOG, wmmm, M680X_REG_H, NOR, false, true }, // PULH { NOG, mwww, M680X_REG_S, NOR, false, false }, // PULS @@ -280,12 +324,14 @@ static const insn_props g_insn_props[] = { { NOG, mrrr, M680X_REG_D, NOR, true, false }, // ROLD { NOG, mrrr, M680X_REG_W, NOR, true, false }, // ROLW { NOG, mrrr, M680X_REG_X, NOR, true, false }, // ROLX + { NOG, mrrr, M680X_REG_Y, NOR, true, false }, // ROLY { NOG, mrrr, NOR, NOR, true, false }, // ROR { NOG, mrrr, M680X_REG_A, NOR, true, false }, // RORA { NOG, mrrr, M680X_REG_B, NOR, true, false }, // RORB { NOG, mrrr, M680X_REG_D, NOR, true, false }, // RORD { NOG, mrrr, M680X_REG_W, NOR, true, false }, // RORW { NOG, mrrr, M680X_REG_X, NOR, true, false }, // RORX + { NOG, mrrr, M680X_REG_Y, NOR, true, false }, // RORY { NOG, wrrr, M680X_REG_S, NOR, false, false }, // RSP { M680X_GRP_RET, mwww, NOR, NOR, false, true }, // RTC { M680X_GRP_IRET, mwww, NOR, NOR, false, true }, // RTI @@ -296,6 +342,9 @@ static const insn_props g_insn_props[] = { { NOG, mrrr, M680X_REG_B, NOR, true, false }, // SBCB { NOG, mrrr, M680X_REG_D, NOR, true, false }, // SBCD { NOG, rmmm, NOR, NOR, true, false }, // SBCR + { NOG, mmmm, M680X_REG_D, NOR, true, false }, // SBED + { NOG, mmmm, M680X_REG_X, NOR, true, false }, // SBEX + { NOG, mmmm, M680X_REG_Y, NOR, true, false }, // SBEY { NOG, uuuu, NOR, NOR, true, false }, // SEC { NOG, uuuu, NOR, NOR, true, false }, // SEI { NOG, uuuu, NOR, NOR, true, false }, // SEV @@ -328,10 +377,13 @@ static const insn_props g_insn_props[] = { { NOG, mrrr, M680X_REG_F, NOR, true, false }, // SUBF { NOG, rmmm, NOR, NOR, true, false }, // SUBR { NOG, mrrr, M680X_REG_W, NOR, true, false }, // SUBW + { NOG, mrrr, M680X_REG_X, NOR, true, false }, // SUBX + { NOG, mrrr, M680X_REG_Y, NOR, true, false }, // SUBY { M680X_GRP_INT, mmrr, NOR, NOR, true, true }, // SWI { M680X_GRP_INT, mmrr, NOR, NOR, true, true }, // SWI2 { M680X_GRP_INT, mmrr, NOR, NOR, true, true }, // SWI3 { NOG, uuuu, NOR, NOR, false, false }, // SYNC + { NOG, muuu, M680X_REG_PC, NOR, false, false }, // SYS { NOG, rwww, M680X_REG_A, M680X_REG_B, true, false }, // TAB { NOG, rwww, M680X_REG_A, M680X_REG_CC, false, false }, // TAP { NOG, rwww, M680X_REG_A, M680X_REG_X, false, false }, // TAX @@ -344,6 +396,7 @@ static const insn_props g_insn_props[] = { { NOG, rwww, NOR, NOR, false, false }, // TFR { NOG, rrrr, NOR, NOR, true, false }, // TIM { NOG, rwww, M680X_REG_CC, M680X_REG_A, false, false }, // TPA + { NOG, uuuu, NOR, NOR, false, false }, // TRAP { NOG, rrrr, NOR, NOR, true, false }, // TST { NOG, rrrr, M680X_REG_A, NOR, true, false }, // TSTA { NOG, rrrr, M680X_REG_B, NOR, true, false }, // TSTB @@ -352,6 +405,7 @@ static const insn_props g_insn_props[] = { { NOG, rrrr, M680X_REG_F, NOR, true, false }, // TSTF { NOG, rrrr, M680X_REG_W, NOR, true, false }, // TSTW { NOG, rrrr, M680X_REG_X, NOR, true, false }, // TSTX + { NOG, rrrr, M680X_REG_Y, NOR, true, false }, // TSTY { NOG, rwww, M680X_REG_S, M680X_REG_HX, false, false }, // TSX { NOG, rwww, M680X_REG_S, M680X_REG_Y, false, false }, // TSY { NOG, rwww, M680X_REG_X, M680X_REG_A, false, false }, // TXA @@ -366,4 +420,3 @@ static const insn_props g_insn_props[] = { }; #undef NOR #undef NOG - diff --git a/bindings/python/capstone/__init__.py b/bindings/python/capstone/__init__.py index 2db5ae17d..3bde715d7 100755 --- a/bindings/python/capstone/__init__.py +++ b/bindings/python/capstone/__init__.py @@ -99,6 +99,7 @@ __all__ = [ "CS_MODE_M680X_CPU12", "CS_MODE_M680X_HCS08", "CS_MODE_M680X_RS08", + "CS_MODE_M680X_HCS12X", "CS_MODE_BPF_CLASSIC", "CS_MODE_BPF_EXTENDED", "CS_MODE_RISCV32", @@ -393,6 +394,7 @@ CS_MODE_M680X_6811 = 1 << 8 # M680X M68HC11 mode CS_MODE_M680X_CPU12 = 1 << 9 # M680X CPU12 mode CS_MODE_M680X_HCS08 = 1 << 10 # M680X HCS08 mode CS_MODE_M680X_RS08 = 1 << 11 # M680X RS08 mode +CS_MODE_M680X_HCS12X = 1 << 12 # M680X HCS12X mode CS_MODE_BPF_CLASSIC = 0 # Classic BPF mode (default) CS_MODE_BPF_EXTENDED = 1 << 0 # Extended BPF mode CS_MODE_RISCV32 = 1 << 0 # RISCV32 mode diff --git a/bindings/python/capstone/m680x_const.py b/bindings/python/capstone/m680x_const.py index 02ac06d2a..dd576c87b 100644 --- a/bindings/python/capstone/m680x_const.py +++ b/bindings/python/capstone/m680x_const.py @@ -73,346 +73,400 @@ M680X_INS_ADDE = 13 M680X_INS_ADDF = 14 M680X_INS_ADDR = 15 M680X_INS_ADDW = 16 -M680X_INS_AIM = 17 -M680X_INS_AIS = 18 -M680X_INS_AIX = 19 -M680X_INS_AND = 20 -M680X_INS_ANDA = 21 -M680X_INS_ANDB = 22 -M680X_INS_ANDCC = 23 -M680X_INS_ANDD = 24 -M680X_INS_ANDR = 25 -M680X_INS_ASL = 26 -M680X_INS_ASLA = 27 -M680X_INS_ASLB = 28 -M680X_INS_ASLD = 29 -M680X_INS_ASR = 30 -M680X_INS_ASRA = 31 -M680X_INS_ASRB = 32 -M680X_INS_ASRD = 33 -M680X_INS_ASRX = 34 -M680X_INS_BAND = 35 -M680X_INS_BCC = 36 -M680X_INS_BCLR = 37 -M680X_INS_BCS = 38 -M680X_INS_BEOR = 39 -M680X_INS_BEQ = 40 -M680X_INS_BGE = 41 -M680X_INS_BGND = 42 -M680X_INS_BGT = 43 -M680X_INS_BHCC = 44 -M680X_INS_BHCS = 45 -M680X_INS_BHI = 46 -M680X_INS_BIAND = 47 -M680X_INS_BIEOR = 48 -M680X_INS_BIH = 49 -M680X_INS_BIL = 50 -M680X_INS_BIOR = 51 -M680X_INS_BIT = 52 -M680X_INS_BITA = 53 -M680X_INS_BITB = 54 -M680X_INS_BITD = 55 -M680X_INS_BITMD = 56 -M680X_INS_BLE = 57 -M680X_INS_BLS = 58 -M680X_INS_BLT = 59 -M680X_INS_BMC = 60 -M680X_INS_BMI = 61 -M680X_INS_BMS = 62 -M680X_INS_BNE = 63 -M680X_INS_BOR = 64 -M680X_INS_BPL = 65 -M680X_INS_BRCLR = 66 -M680X_INS_BRSET = 67 -M680X_INS_BRA = 68 -M680X_INS_BRN = 69 -M680X_INS_BSET = 70 -M680X_INS_BSR = 71 -M680X_INS_BVC = 72 -M680X_INS_BVS = 73 -M680X_INS_CALL = 74 -M680X_INS_CBA = 75 -M680X_INS_CBEQ = 76 -M680X_INS_CBEQA = 77 -M680X_INS_CBEQX = 78 -M680X_INS_CLC = 79 -M680X_INS_CLI = 80 -M680X_INS_CLR = 81 -M680X_INS_CLRA = 82 -M680X_INS_CLRB = 83 -M680X_INS_CLRD = 84 -M680X_INS_CLRE = 85 -M680X_INS_CLRF = 86 -M680X_INS_CLRH = 87 -M680X_INS_CLRW = 88 -M680X_INS_CLRX = 89 -M680X_INS_CLV = 90 -M680X_INS_CMP = 91 -M680X_INS_CMPA = 92 -M680X_INS_CMPB = 93 -M680X_INS_CMPD = 94 -M680X_INS_CMPE = 95 -M680X_INS_CMPF = 96 -M680X_INS_CMPR = 97 -M680X_INS_CMPS = 98 -M680X_INS_CMPU = 99 -M680X_INS_CMPW = 100 -M680X_INS_CMPX = 101 -M680X_INS_CMPY = 102 -M680X_INS_COM = 103 -M680X_INS_COMA = 104 -M680X_INS_COMB = 105 -M680X_INS_COMD = 106 -M680X_INS_COME = 107 -M680X_INS_COMF = 108 -M680X_INS_COMW = 109 -M680X_INS_COMX = 110 -M680X_INS_CPD = 111 -M680X_INS_CPHX = 112 -M680X_INS_CPS = 113 -M680X_INS_CPX = 114 -M680X_INS_CPY = 115 -M680X_INS_CWAI = 116 -M680X_INS_DAA = 117 -M680X_INS_DBEQ = 118 -M680X_INS_DBNE = 119 -M680X_INS_DBNZ = 120 -M680X_INS_DBNZA = 121 -M680X_INS_DBNZX = 122 -M680X_INS_DEC = 123 -M680X_INS_DECA = 124 -M680X_INS_DECB = 125 -M680X_INS_DECD = 126 -M680X_INS_DECE = 127 -M680X_INS_DECF = 128 -M680X_INS_DECW = 129 -M680X_INS_DECX = 130 -M680X_INS_DES = 131 -M680X_INS_DEX = 132 -M680X_INS_DEY = 133 -M680X_INS_DIV = 134 -M680X_INS_DIVD = 135 -M680X_INS_DIVQ = 136 -M680X_INS_EDIV = 137 -M680X_INS_EDIVS = 138 -M680X_INS_EIM = 139 -M680X_INS_EMACS = 140 -M680X_INS_EMAXD = 141 -M680X_INS_EMAXM = 142 -M680X_INS_EMIND = 143 -M680X_INS_EMINM = 144 -M680X_INS_EMUL = 145 -M680X_INS_EMULS = 146 -M680X_INS_EOR = 147 -M680X_INS_EORA = 148 -M680X_INS_EORB = 149 -M680X_INS_EORD = 150 -M680X_INS_EORR = 151 -M680X_INS_ETBL = 152 -M680X_INS_EXG = 153 -M680X_INS_FDIV = 154 -M680X_INS_IBEQ = 155 -M680X_INS_IBNE = 156 -M680X_INS_IDIV = 157 -M680X_INS_IDIVS = 158 -M680X_INS_ILLGL = 159 -M680X_INS_INC = 160 -M680X_INS_INCA = 161 -M680X_INS_INCB = 162 -M680X_INS_INCD = 163 -M680X_INS_INCE = 164 -M680X_INS_INCF = 165 -M680X_INS_INCW = 166 -M680X_INS_INCX = 167 -M680X_INS_INS = 168 -M680X_INS_INX = 169 -M680X_INS_INY = 170 -M680X_INS_JMP = 171 -M680X_INS_JSR = 172 -M680X_INS_LBCC = 173 -M680X_INS_LBCS = 174 -M680X_INS_LBEQ = 175 -M680X_INS_LBGE = 176 -M680X_INS_LBGT = 177 -M680X_INS_LBHI = 178 -M680X_INS_LBLE = 179 -M680X_INS_LBLS = 180 -M680X_INS_LBLT = 181 -M680X_INS_LBMI = 182 -M680X_INS_LBNE = 183 -M680X_INS_LBPL = 184 -M680X_INS_LBRA = 185 -M680X_INS_LBRN = 186 -M680X_INS_LBSR = 187 -M680X_INS_LBVC = 188 -M680X_INS_LBVS = 189 -M680X_INS_LDA = 190 -M680X_INS_LDAA = 191 -M680X_INS_LDAB = 192 -M680X_INS_LDB = 193 -M680X_INS_LDBT = 194 -M680X_INS_LDD = 195 -M680X_INS_LDE = 196 -M680X_INS_LDF = 197 -M680X_INS_LDHX = 198 -M680X_INS_LDMD = 199 -M680X_INS_LDQ = 200 -M680X_INS_LDS = 201 -M680X_INS_LDU = 202 -M680X_INS_LDW = 203 -M680X_INS_LDX = 204 -M680X_INS_LDY = 205 -M680X_INS_LEAS = 206 -M680X_INS_LEAU = 207 -M680X_INS_LEAX = 208 -M680X_INS_LEAY = 209 -M680X_INS_LSL = 210 -M680X_INS_LSLA = 211 -M680X_INS_LSLB = 212 -M680X_INS_LSLD = 213 -M680X_INS_LSLX = 214 -M680X_INS_LSR = 215 -M680X_INS_LSRA = 216 -M680X_INS_LSRB = 217 -M680X_INS_LSRD = 218 -M680X_INS_LSRW = 219 -M680X_INS_LSRX = 220 -M680X_INS_MAXA = 221 -M680X_INS_MAXM = 222 -M680X_INS_MEM = 223 -M680X_INS_MINA = 224 -M680X_INS_MINM = 225 -M680X_INS_MOV = 226 -M680X_INS_MOVB = 227 -M680X_INS_MOVW = 228 -M680X_INS_MUL = 229 -M680X_INS_MULD = 230 -M680X_INS_NEG = 231 -M680X_INS_NEGA = 232 -M680X_INS_NEGB = 233 -M680X_INS_NEGD = 234 -M680X_INS_NEGX = 235 -M680X_INS_NOP = 236 -M680X_INS_NSA = 237 -M680X_INS_OIM = 238 -M680X_INS_ORA = 239 -M680X_INS_ORAA = 240 -M680X_INS_ORAB = 241 -M680X_INS_ORB = 242 -M680X_INS_ORCC = 243 -M680X_INS_ORD = 244 -M680X_INS_ORR = 245 -M680X_INS_PSHA = 246 -M680X_INS_PSHB = 247 -M680X_INS_PSHC = 248 -M680X_INS_PSHD = 249 -M680X_INS_PSHH = 250 -M680X_INS_PSHS = 251 -M680X_INS_PSHSW = 252 -M680X_INS_PSHU = 253 -M680X_INS_PSHUW = 254 -M680X_INS_PSHX = 255 -M680X_INS_PSHY = 256 -M680X_INS_PULA = 257 -M680X_INS_PULB = 258 -M680X_INS_PULC = 259 -M680X_INS_PULD = 260 -M680X_INS_PULH = 261 -M680X_INS_PULS = 262 -M680X_INS_PULSW = 263 -M680X_INS_PULU = 264 -M680X_INS_PULUW = 265 -M680X_INS_PULX = 266 -M680X_INS_PULY = 267 -M680X_INS_REV = 268 -M680X_INS_REVW = 269 -M680X_INS_ROL = 270 -M680X_INS_ROLA = 271 -M680X_INS_ROLB = 272 -M680X_INS_ROLD = 273 -M680X_INS_ROLW = 274 -M680X_INS_ROLX = 275 -M680X_INS_ROR = 276 -M680X_INS_RORA = 277 -M680X_INS_RORB = 278 -M680X_INS_RORD = 279 -M680X_INS_RORW = 280 -M680X_INS_RORX = 281 -M680X_INS_RSP = 282 -M680X_INS_RTC = 283 -M680X_INS_RTI = 284 -M680X_INS_RTS = 285 -M680X_INS_SBA = 286 -M680X_INS_SBC = 287 -M680X_INS_SBCA = 288 -M680X_INS_SBCB = 289 -M680X_INS_SBCD = 290 -M680X_INS_SBCR = 291 -M680X_INS_SEC = 292 -M680X_INS_SEI = 293 -M680X_INS_SEV = 294 -M680X_INS_SEX = 295 -M680X_INS_SEXW = 296 -M680X_INS_SHA = 297 -M680X_INS_SLA = 298 -M680X_INS_SLP = 299 -M680X_INS_STA = 300 -M680X_INS_STAA = 301 -M680X_INS_STAB = 302 -M680X_INS_STB = 303 -M680X_INS_STBT = 304 -M680X_INS_STD = 305 -M680X_INS_STE = 306 -M680X_INS_STF = 307 -M680X_INS_STOP = 308 -M680X_INS_STHX = 309 -M680X_INS_STQ = 310 -M680X_INS_STS = 311 -M680X_INS_STU = 312 -M680X_INS_STW = 313 -M680X_INS_STX = 314 -M680X_INS_STY = 315 -M680X_INS_SUB = 316 -M680X_INS_SUBA = 317 -M680X_INS_SUBB = 318 -M680X_INS_SUBD = 319 -M680X_INS_SUBE = 320 -M680X_INS_SUBF = 321 -M680X_INS_SUBR = 322 -M680X_INS_SUBW = 323 -M680X_INS_SWI = 324 -M680X_INS_SWI2 = 325 -M680X_INS_SWI3 = 326 -M680X_INS_SYNC = 327 -M680X_INS_TAB = 328 -M680X_INS_TAP = 329 -M680X_INS_TAX = 330 -M680X_INS_TBA = 331 -M680X_INS_TBEQ = 332 -M680X_INS_TBL = 333 -M680X_INS_TBNE = 334 -M680X_INS_TEST = 335 -M680X_INS_TFM = 336 -M680X_INS_TFR = 337 -M680X_INS_TIM = 338 -M680X_INS_TPA = 339 -M680X_INS_TST = 340 -M680X_INS_TSTA = 341 -M680X_INS_TSTB = 342 -M680X_INS_TSTD = 343 -M680X_INS_TSTE = 344 -M680X_INS_TSTF = 345 -M680X_INS_TSTW = 346 -M680X_INS_TSTX = 347 -M680X_INS_TSX = 348 -M680X_INS_TSY = 349 -M680X_INS_TXA = 350 -M680X_INS_TXS = 351 -M680X_INS_TYS = 352 -M680X_INS_WAI = 353 -M680X_INS_WAIT = 354 -M680X_INS_WAV = 355 -M680X_INS_WAVR = 356 -M680X_INS_XGDX = 357 -M680X_INS_XGDY = 358 -M680X_INS_ENDING = 359 +M680X_INS_ADDX = 17 +M680X_INS_ADDY = 18 +M680X_INS_ADED = 19 +M680X_INS_ADEX = 20 +M680X_INS_ADEY = 21 +M680X_INS_AIM = 22 +M680X_INS_AIS = 23 +M680X_INS_AIX = 24 +M680X_INS_AND = 25 +M680X_INS_ANDA = 26 +M680X_INS_ANDB = 27 +M680X_INS_ANDX = 28 +M680X_INS_ANDY = 29 +M680X_INS_ANDCC = 30 +M680X_INS_ANDD = 31 +M680X_INS_ANDR = 32 +M680X_INS_ASL = 33 +M680X_INS_ASLA = 34 +M680X_INS_ASLB = 35 +M680X_INS_ASLD = 36 +M680X_INS_ASLW = 37 +M680X_INS_ASLX = 38 +M680X_INS_ASLY = 39 +M680X_INS_ASR = 40 +M680X_INS_ASRA = 41 +M680X_INS_ASRB = 42 +M680X_INS_ASRD = 43 +M680X_INS_ASRW = 44 +M680X_INS_ASRX = 45 +M680X_INS_ASRY = 46 +M680X_INS_BAND = 47 +M680X_INS_BCC = 48 +M680X_INS_BCLR = 49 +M680X_INS_BCS = 50 +M680X_INS_BEOR = 51 +M680X_INS_BEQ = 52 +M680X_INS_BGE = 53 +M680X_INS_BGND = 54 +M680X_INS_BGT = 55 +M680X_INS_BHCC = 56 +M680X_INS_BHCS = 57 +M680X_INS_BHI = 58 +M680X_INS_BIAND = 59 +M680X_INS_BIEOR = 60 +M680X_INS_BIH = 61 +M680X_INS_BIL = 62 +M680X_INS_BIOR = 63 +M680X_INS_BIT = 64 +M680X_INS_BITA = 65 +M680X_INS_BITB = 66 +M680X_INS_BITD = 67 +M680X_INS_BITMD = 68 +M680X_INS_BITX = 69 +M680X_INS_BITY = 70 +M680X_INS_BLE = 71 +M680X_INS_BLS = 72 +M680X_INS_BLT = 73 +M680X_INS_BMC = 74 +M680X_INS_BMI = 75 +M680X_INS_BMS = 76 +M680X_INS_BNE = 77 +M680X_INS_BOR = 78 +M680X_INS_BPL = 79 +M680X_INS_BRCLR = 80 +M680X_INS_BRSET = 81 +M680X_INS_BRA = 82 +M680X_INS_BRN = 83 +M680X_INS_BSET = 84 +M680X_INS_BSR = 85 +M680X_INS_BTAS = 86 +M680X_INS_BVC = 87 +M680X_INS_BVS = 88 +M680X_INS_CALL = 89 +M680X_INS_CBA = 90 +M680X_INS_CBEQ = 91 +M680X_INS_CBEQA = 92 +M680X_INS_CBEQX = 93 +M680X_INS_CLC = 94 +M680X_INS_CLI = 95 +M680X_INS_CLR = 96 +M680X_INS_CLRA = 97 +M680X_INS_CLRB = 98 +M680X_INS_CLRD = 99 +M680X_INS_CLRE = 100 +M680X_INS_CLRF = 101 +M680X_INS_CLRH = 102 +M680X_INS_CLRW = 103 +M680X_INS_CLRX = 104 +M680X_INS_CLRY = 105 +M680X_INS_CLV = 106 +M680X_INS_CMP = 107 +M680X_INS_CMPA = 108 +M680X_INS_CMPB = 109 +M680X_INS_CMPD = 110 +M680X_INS_CMPE = 111 +M680X_INS_CMPF = 112 +M680X_INS_CMPR = 113 +M680X_INS_CMPS = 114 +M680X_INS_CMPU = 115 +M680X_INS_CMPW = 116 +M680X_INS_CMPX = 117 +M680X_INS_CMPY = 118 +M680X_INS_COM = 119 +M680X_INS_COMA = 120 +M680X_INS_COMB = 121 +M680X_INS_COMD = 122 +M680X_INS_COME = 123 +M680X_INS_COMF = 124 +M680X_INS_COMW = 125 +M680X_INS_COMX = 126 +M680X_INS_COMY = 127 +M680X_INS_CPD = 128 +M680X_INS_CPED = 129 +M680X_INS_CPES = 130 +M680X_INS_CPEX = 131 +M680X_INS_CPEY = 132 +M680X_INS_CPHX = 133 +M680X_INS_CPS = 134 +M680X_INS_CPX = 135 +M680X_INS_CPY = 136 +M680X_INS_CWAI = 137 +M680X_INS_DAA = 138 +M680X_INS_DBEQ = 139 +M680X_INS_DBNE = 140 +M680X_INS_DBNZ = 141 +M680X_INS_DBNZA = 142 +M680X_INS_DBNZX = 143 +M680X_INS_DEC = 144 +M680X_INS_DECA = 145 +M680X_INS_DECB = 146 +M680X_INS_DECD = 147 +M680X_INS_DECE = 148 +M680X_INS_DECF = 149 +M680X_INS_DECW = 150 +M680X_INS_DECX = 151 +M680X_INS_DECY = 152 +M680X_INS_DES = 153 +M680X_INS_DEX = 154 +M680X_INS_DEY = 155 +M680X_INS_DIV = 156 +M680X_INS_DIVD = 157 +M680X_INS_DIVQ = 158 +M680X_INS_EDIV = 159 +M680X_INS_EDIVS = 160 +M680X_INS_EIM = 161 +M680X_INS_EMACS = 162 +M680X_INS_EMAXD = 163 +M680X_INS_EMAXM = 164 +M680X_INS_EMIND = 165 +M680X_INS_EMINM = 166 +M680X_INS_EMUL = 167 +M680X_INS_EMULS = 168 +M680X_INS_EOR = 169 +M680X_INS_EORA = 170 +M680X_INS_EORB = 171 +M680X_INS_EORD = 172 +M680X_INS_EORR = 173 +M680X_INS_EORX = 174 +M680X_INS_EORY = 175 +M680X_INS_ETBL = 176 +M680X_INS_EXG = 177 +M680X_INS_FDIV = 178 +M680X_INS_GLDAA = 179 +M680X_INS_GLDAB = 180 +M680X_INS_GLDD = 181 +M680X_INS_GLDS = 182 +M680X_INS_GLDX = 183 +M680X_INS_GLDY = 184 +M680X_INS_GSTAA = 185 +M680X_INS_GSTAB = 186 +M680X_INS_GSTD = 187 +M680X_INS_GSTS = 188 +M680X_INS_GSTX = 189 +M680X_INS_GSTY = 190 +M680X_INS_IBEQ = 191 +M680X_INS_IBNE = 192 +M680X_INS_IDIV = 193 +M680X_INS_IDIVS = 194 +M680X_INS_ILLGL = 195 +M680X_INS_INC = 196 +M680X_INS_INCA = 197 +M680X_INS_INCB = 198 +M680X_INS_INCD = 199 +M680X_INS_INCE = 200 +M680X_INS_INCF = 201 +M680X_INS_INCW = 202 +M680X_INS_INCX = 203 +M680X_INS_INCY = 204 +M680X_INS_INS = 205 +M680X_INS_INX = 206 +M680X_INS_INY = 207 +M680X_INS_JMP = 208 +M680X_INS_JSR = 209 +M680X_INS_LBCC = 210 +M680X_INS_LBCS = 211 +M680X_INS_LBEQ = 212 +M680X_INS_LBGE = 213 +M680X_INS_LBGT = 214 +M680X_INS_LBHI = 215 +M680X_INS_LBLE = 216 +M680X_INS_LBLS = 217 +M680X_INS_LBLT = 218 +M680X_INS_LBMI = 219 +M680X_INS_LBNE = 220 +M680X_INS_LBPL = 221 +M680X_INS_LBRA = 222 +M680X_INS_LBRN = 223 +M680X_INS_LBSR = 224 +M680X_INS_LBVC = 225 +M680X_INS_LBVS = 226 +M680X_INS_LDA = 227 +M680X_INS_LDAA = 228 +M680X_INS_LDAB = 229 +M680X_INS_LDB = 230 +M680X_INS_LDBT = 231 +M680X_INS_LDD = 232 +M680X_INS_LDE = 233 +M680X_INS_LDF = 234 +M680X_INS_LDHX = 235 +M680X_INS_LDMD = 236 +M680X_INS_LDQ = 237 +M680X_INS_LDS = 238 +M680X_INS_LDU = 239 +M680X_INS_LDW = 240 +M680X_INS_LDX = 241 +M680X_INS_LDY = 242 +M680X_INS_LEAS = 243 +M680X_INS_LEAU = 244 +M680X_INS_LEAX = 245 +M680X_INS_LEAY = 246 +M680X_INS_LSL = 247 +M680X_INS_LSLA = 248 +M680X_INS_LSLB = 249 +M680X_INS_LSLD = 250 +M680X_INS_LSLX = 251 +M680X_INS_LSR = 252 +M680X_INS_LSRA = 253 +M680X_INS_LSRB = 254 +M680X_INS_LSRD = 255 +M680X_INS_LSRW = 256 +M680X_INS_LSRX = 257 +M680X_INS_LSRY = 258 +M680X_INS_MAXA = 259 +M680X_INS_MAXM = 260 +M680X_INS_MEM = 261 +M680X_INS_MINA = 262 +M680X_INS_MINM = 263 +M680X_INS_MOV = 264 +M680X_INS_MOVB = 265 +M680X_INS_MOVW = 266 +M680X_INS_MUL = 267 +M680X_INS_MULD = 268 +M680X_INS_NEG = 269 +M680X_INS_NEGA = 270 +M680X_INS_NEGB = 271 +M680X_INS_NEGD = 272 +M680X_INS_NEGW = 273 +M680X_INS_NEGX = 274 +M680X_INS_NEGY = 275 +M680X_INS_NOP = 276 +M680X_INS_NSA = 277 +M680X_INS_OIM = 278 +M680X_INS_ORA = 279 +M680X_INS_ORAA = 280 +M680X_INS_ORAB = 281 +M680X_INS_ORB = 282 +M680X_INS_ORCC = 283 +M680X_INS_ORD = 284 +M680X_INS_ORR = 285 +M680X_INS_ORX = 286 +M680X_INS_ORY = 287 +M680X_INS_PSHA = 288 +M680X_INS_PSHB = 289 +M680X_INS_PSHC = 290 +M680X_INS_PSHCW = 291 +M680X_INS_PSHD = 292 +M680X_INS_PSHH = 293 +M680X_INS_PSHS = 294 +M680X_INS_PSHSW = 295 +M680X_INS_PSHU = 296 +M680X_INS_PSHUW = 297 +M680X_INS_PSHX = 298 +M680X_INS_PSHY = 299 +M680X_INS_PULA = 300 +M680X_INS_PULB = 301 +M680X_INS_PULC = 302 +M680X_INS_PULCW = 303 +M680X_INS_PULD = 304 +M680X_INS_PULH = 305 +M680X_INS_PULS = 306 +M680X_INS_PULSW = 307 +M680X_INS_PULU = 308 +M680X_INS_PULUW = 309 +M680X_INS_PULX = 310 +M680X_INS_PULY = 311 +M680X_INS_REV = 312 +M680X_INS_REVW = 313 +M680X_INS_ROL = 314 +M680X_INS_ROLA = 315 +M680X_INS_ROLB = 316 +M680X_INS_ROLD = 317 +M680X_INS_ROLW = 318 +M680X_INS_ROLX = 319 +M680X_INS_ROLY = 320 +M680X_INS_ROR = 321 +M680X_INS_RORA = 322 +M680X_INS_RORB = 323 +M680X_INS_RORD = 324 +M680X_INS_RORW = 325 +M680X_INS_RORX = 326 +M680X_INS_RORY = 327 +M680X_INS_RSP = 328 +M680X_INS_RTC = 329 +M680X_INS_RTI = 330 +M680X_INS_RTS = 331 +M680X_INS_SBA = 332 +M680X_INS_SBC = 333 +M680X_INS_SBCA = 334 +M680X_INS_SBCB = 335 +M680X_INS_SBCD = 336 +M680X_INS_SBCR = 337 +M680X_INS_SBED = 338 +M680X_INS_SBEX = 339 +M680X_INS_SBEY = 340 +M680X_INS_SEC = 341 +M680X_INS_SEI = 342 +M680X_INS_SEV = 343 +M680X_INS_SEX = 344 +M680X_INS_SEXW = 345 +M680X_INS_SHA = 346 +M680X_INS_SLA = 347 +M680X_INS_SLP = 348 +M680X_INS_STA = 349 +M680X_INS_STAA = 350 +M680X_INS_STAB = 351 +M680X_INS_STB = 352 +M680X_INS_STBT = 353 +M680X_INS_STD = 354 +M680X_INS_STE = 355 +M680X_INS_STF = 356 +M680X_INS_STOP = 357 +M680X_INS_STHX = 358 +M680X_INS_STQ = 359 +M680X_INS_STS = 360 +M680X_INS_STU = 361 +M680X_INS_STW = 362 +M680X_INS_STX = 363 +M680X_INS_STY = 364 +M680X_INS_SUB = 365 +M680X_INS_SUBA = 366 +M680X_INS_SUBB = 367 +M680X_INS_SUBD = 368 +M680X_INS_SUBE = 369 +M680X_INS_SUBF = 370 +M680X_INS_SUBR = 371 +M680X_INS_SUBW = 372 +M680X_INS_SUBX = 373 +M680X_INS_SUBY = 374 +M680X_INS_SWI = 375 +M680X_INS_SWI2 = 376 +M680X_INS_SWI3 = 377 +M680X_INS_SYNC = 378 +M680X_INS_SYS = 379 +M680X_INS_TAB = 380 +M680X_INS_TAP = 381 +M680X_INS_TAX = 382 +M680X_INS_TBA = 383 +M680X_INS_TBEQ = 384 +M680X_INS_TBL = 385 +M680X_INS_TBNE = 386 +M680X_INS_TEST = 387 +M680X_INS_TFM = 388 +M680X_INS_TFR = 389 +M680X_INS_TIM = 390 +M680X_INS_TPA = 391 +M680X_INS_TRAP = 392 +M680X_INS_TST = 393 +M680X_INS_TSTA = 394 +M680X_INS_TSTB = 395 +M680X_INS_TSTD = 396 +M680X_INS_TSTE = 397 +M680X_INS_TSTF = 398 +M680X_INS_TSTW = 399 +M680X_INS_TSTX = 400 +M680X_INS_TSTY = 401 +M680X_INS_TSX = 402 +M680X_INS_TSY = 403 +M680X_INS_TXA = 404 +M680X_INS_TXS = 405 +M680X_INS_TYS = 406 +M680X_INS_WAI = 407 +M680X_INS_WAIT = 408 +M680X_INS_WAV = 409 +M680X_INS_WAVR = 410 +M680X_INS_XGDX = 411 +M680X_INS_XGDY = 412 +M680X_INS_ENDING = 413 diff --git a/cs.c b/cs.c index 9d770028f..28d66d522 100644 --- a/cs.c +++ b/cs.c @@ -185,7 +185,7 @@ typedef struct cs_arch_config { CS_MODE_M680X_6805 | CS_MODE_M680X_6808 | \ CS_MODE_M680X_6809 | CS_MODE_M680X_6811 | \ CS_MODE_M680X_CPU12 | CS_MODE_M680X_HCS08 | \ - CS_MODE_M680X_RS08), \ + CS_MODE_M680X_RS08 | CS_MODE_M680X_HCS12X), \ } #define CS_ARCH_CONFIG_EVM \ { \ diff --git a/cstool/cstool.c b/cstool/cstool.c index 576066abd..6b2b569b8 100644 --- a/cstool/cstool.c +++ b/cstool/cstool.c @@ -440,6 +440,7 @@ static struct { { "hd6309", "m680x, HD6309", CS_ARCH_M680X, CS_MODE_M680X_6309 }, { "hcs08", "m680x, HCS08", CS_ARCH_M680X, CS_MODE_M680X_HCS08 }, { "rs08", "m680x, RS08", CS_ARCH_M680X, CS_MODE_M680X_RS08 }, + { "hcs12x", "m680x, HCS12X", CS_ARCH_M680X, CS_MODE_M680X_HCS12X }, { "evm", "ethereum virtual machine", CS_ARCH_EVM, 0 }, { "wasm", "web assembly", CS_ARCH_WASM, 0 }, diff --git a/include/capstone/capstone.h b/include/capstone/capstone.h index 6b69bc1eb..8a3766729 100644 --- a/include/capstone/capstone.h +++ b/include/capstone/capstone.h @@ -207,6 +207,7 @@ typedef enum cs_mode { ///< used on M68HC12/HCS12 CS_MODE_M680X_HCS08 = 1 << 10, ///< M680X Freescale/NXP HCS08 mode CS_MODE_M680X_RS08 = 1 << 11, ///< M680X Freescale/NXP RS08 mode + CS_MODE_M680X_HCS12X = 1 << 12, ///< M680X Freescale/NXP HCS12X mode CS_MODE_BPF_CLASSIC = 0, ///< Classic BPF mode (default) CS_MODE_BPF_EXTENDED = 1 << 0, ///< Extended BPF mode CS_MODE_RISCV32 = 1 << 0, ///< RISCV RV32G diff --git a/include/capstone/m680x.h b/include/capstone/m680x.h index 7c2f3ef35..d0b9eb5b3 100644 --- a/include/capstone/m680x.h +++ b/include/capstone/m680x.h @@ -193,12 +193,19 @@ typedef enum m680x_insn { M680X_INS_ADDF, M680X_INS_ADDR, M680X_INS_ADDW, + M680X_INS_ADDX, ///< HCS12X + M680X_INS_ADDY, ///< HCS12X + M680X_INS_ADED, ///< HCS12X + M680X_INS_ADEX, ///< HCS12X + M680X_INS_ADEY, ///< HCS12X M680X_INS_AIM, M680X_INS_AIS, M680X_INS_AIX, M680X_INS_AND, M680X_INS_ANDA, M680X_INS_ANDB, + M680X_INS_ANDX, ///< HCS12X + M680X_INS_ANDY, ///< HCS12X M680X_INS_ANDCC, M680X_INS_ANDD, M680X_INS_ANDR, @@ -206,11 +213,16 @@ typedef enum m680x_insn { M680X_INS_ASLA, M680X_INS_ASLB, M680X_INS_ASLD, ///< or LSLD + M680X_INS_ASLW, ///< HCS12X + M680X_INS_ASLX, ///< HCS12X + M680X_INS_ASLY, ///< HCS12X M680X_INS_ASR, M680X_INS_ASRA, M680X_INS_ASRB, M680X_INS_ASRD, + M680X_INS_ASRW, ///< HCS12X M680X_INS_ASRX, + M680X_INS_ASRY, ///< HCS12X M680X_INS_BAND, M680X_INS_BCC, ///< or BHS M680X_INS_BCLR, @@ -233,6 +245,8 @@ typedef enum m680x_insn { M680X_INS_BITB, M680X_INS_BITD, M680X_INS_BITMD, + M680X_INS_BITX, ///< HCS12X + M680X_INS_BITY, ///< HCS12X M680X_INS_BLE, M680X_INS_BLS, M680X_INS_BLT, @@ -248,6 +262,7 @@ typedef enum m680x_insn { M680X_INS_BRN, M680X_INS_BSET, M680X_INS_BSR, + M680X_INS_BTAS, ///< HCS12X M680X_INS_BVC, M680X_INS_BVS, M680X_INS_CALL, @@ -266,6 +281,7 @@ typedef enum m680x_insn { M680X_INS_CLRH, M680X_INS_CLRW, M680X_INS_CLRX, + M680X_INS_CLRY, M680X_INS_CLV, ///< M6800/1/2/3 M680X_INS_CMP, M680X_INS_CMPA, @@ -287,7 +303,12 @@ typedef enum m680x_insn { M680X_INS_COMF, M680X_INS_COMW, M680X_INS_COMX, + M680X_INS_COMY, M680X_INS_CPD, + M680X_INS_CPED, ///< HCS12X + M680X_INS_CPES, ///< HCS12X + M680X_INS_CPEX, ///< HCS12X + M680X_INS_CPEY, ///< HCS12X M680X_INS_CPHX, M680X_INS_CPS, M680X_INS_CPX, ///< M6800/1/2/3 @@ -307,6 +328,7 @@ typedef enum m680x_insn { M680X_INS_DECF, M680X_INS_DECW, M680X_INS_DECX, + M680X_INS_DECY, M680X_INS_DES, ///< M6800/1/2/3 M680X_INS_DEX, ///< M6800/1/2/3 M680X_INS_DEY, @@ -328,9 +350,23 @@ typedef enum m680x_insn { M680X_INS_EORB, M680X_INS_EORD, M680X_INS_EORR, + M680X_INS_EORX, ///< HCS12X + M680X_INS_EORY, ///< HCS12X M680X_INS_ETBL, M680X_INS_EXG, M680X_INS_FDIV, + M680X_INS_GLDAA, ///< HCS12X + M680X_INS_GLDAB, ///< HCS12X + M680X_INS_GLDD, ///< HCS12X + M680X_INS_GLDS, ///< HCS12X + M680X_INS_GLDX, ///< HCS12X + M680X_INS_GLDY, ///< HCS12X + M680X_INS_GSTAA, ///< HCS12X + M680X_INS_GSTAB, ///< HCS12X + M680X_INS_GSTD, ///< HCS12X + M680X_INS_GSTS, ///< HCS12X + M680X_INS_GSTX, ///< HCS12X + M680X_INS_GSTY, ///< HCS12X M680X_INS_IBEQ, M680X_INS_IBNE, M680X_INS_IDIV, @@ -344,6 +380,7 @@ typedef enum m680x_insn { M680X_INS_INCF, M680X_INS_INCW, M680X_INS_INCX, + M680X_INS_INCY, M680X_INS_INS, ///< M6800/1/2/3 M680X_INS_INX, ///< M6800/1/2/3 M680X_INS_INY, @@ -397,6 +434,7 @@ typedef enum m680x_insn { M680X_INS_LSRD, ///< or ASRD M680X_INS_LSRW, M680X_INS_LSRX, + M680X_INS_LSRY, M680X_INS_MAXA, M680X_INS_MAXM, M680X_INS_MEM, @@ -411,7 +449,9 @@ typedef enum m680x_insn { M680X_INS_NEGA, M680X_INS_NEGB, M680X_INS_NEGD, + M680X_INS_NEGW, ///< HCS12X M680X_INS_NEGX, + M680X_INS_NEGY, ///< HCS12X M680X_INS_NOP, M680X_INS_NSA, M680X_INS_OIM, @@ -422,9 +462,12 @@ typedef enum m680x_insn { M680X_INS_ORCC, M680X_INS_ORD, M680X_INS_ORR, + M680X_INS_ORX, ///< HCS12X + M680X_INS_ORY, ///< HCS12X M680X_INS_PSHA, ///< M6800/1/2/3 M680X_INS_PSHB, ///< M6800/1/2/3 M680X_INS_PSHC, + M680X_INS_PSHCW, ///< HCS12X M680X_INS_PSHD, M680X_INS_PSHH, M680X_INS_PSHS, @@ -436,6 +479,7 @@ typedef enum m680x_insn { M680X_INS_PULA, ///< M6800/1/2/3 M680X_INS_PULB, ///< M6800/1/2/3 M680X_INS_PULC, + M680X_INS_PULCW, ///< HCS12X M680X_INS_PULD, M680X_INS_PULH, M680X_INS_PULS, @@ -452,12 +496,14 @@ typedef enum m680x_insn { M680X_INS_ROLD, M680X_INS_ROLW, M680X_INS_ROLX, + M680X_INS_ROLY, M680X_INS_ROR, M680X_INS_RORA, M680X_INS_RORB, M680X_INS_RORD, M680X_INS_RORW, M680X_INS_RORX, + M680X_INS_RORY, M680X_INS_RSP, M680X_INS_RTC, M680X_INS_RTI, @@ -468,6 +514,9 @@ typedef enum m680x_insn { M680X_INS_SBCB, M680X_INS_SBCD, M680X_INS_SBCR, + M680X_INS_SBED, ///< HCS12X + M680X_INS_SBEX, ///< HCS12X + M680X_INS_SBEY, ///< HCS12X M680X_INS_SEC, M680X_INS_SEI, M680X_INS_SEV, @@ -500,10 +549,13 @@ typedef enum m680x_insn { M680X_INS_SUBF, M680X_INS_SUBR, M680X_INS_SUBW, + M680X_INS_SUBX, ///< HCS12X + M680X_INS_SUBY, ///< HCS12X M680X_INS_SWI, M680X_INS_SWI2, M680X_INS_SWI3, M680X_INS_SYNC, + M680X_INS_SYS, ///< HCS12X M680X_INS_TAB, ///< M6800/1/2/3 M680X_INS_TAP, ///< M6800/1/2/3 M680X_INS_TAX, @@ -516,6 +568,7 @@ typedef enum m680x_insn { M680X_INS_TFR, M680X_INS_TIM, M680X_INS_TPA, ///< M6800/1/2/3 + M680X_INS_TRAP, M680X_INS_TST, M680X_INS_TSTA, M680X_INS_TSTB, @@ -524,6 +577,7 @@ typedef enum m680x_insn { M680X_INS_TSTF, M680X_INS_TSTW, M680X_INS_TSTX, + M680X_INS_TSTY, M680X_INS_TSX, ///< M6800/1/2/3 M680X_INS_TSY, M680X_INS_TXA, diff --git a/suite/cstest/include/test_mapping.h b/suite/cstest/include/test_mapping.h index 13353c65f..8634e0d05 100644 --- a/suite/cstest/include/test_mapping.h +++ b/suite/cstest/include/test_mapping.h @@ -95,6 +95,7 @@ static const cs_enum_id_map test_mode_map[] = { { .str = "CS_MODE_M680X_6811", .val = CS_MODE_M680X_6811 }, { .str = "CS_MODE_M680X_CPU12", .val = CS_MODE_M680X_CPU12 }, { .str = "CS_MODE_M680X_HCS08", .val = CS_MODE_M680X_HCS08 }, + { .str = "CS_MODE_M680X_HCS12X", .val = CS_MODE_M680X_HCS12X }, { .str = "CS_MODE_M680X_RS08", .val = CS_MODE_M680X_RS08 }, { .str = "CS_MODE_M68K_000", .val = CS_MODE_M68K_000 }, { .str = "CS_MODE_M68K_010", .val = CS_MODE_M68K_010 }, diff --git a/suite/fuzz/platform.c b/suite/fuzz/platform.c index 0404179b3..1393867e4 100644 --- a/suite/fuzz/platform.c +++ b/suite/fuzz/platform.c @@ -108,6 +108,8 @@ struct platform platforms[] = { { //item 43 CS_ARCH_M680X, (cs_mode)CS_MODE_M680X_HCS08, "M680X_M6808", "hcs08" }, { CS_ARCH_M680X, (cs_mode)CS_MODE_M680X_RS08, "M680X_RS08", "rs08" }, + { CS_ARCH_M680X, (cs_mode)CS_MODE_M680X_HCS12X, "M680X_HCS12X", + "hcs12x" }, { //item 44 CS_ARCH_RISCV, CS_MODE_RISCV32, "RISCV", "riscv32" }, { //item 45 diff --git a/tests/details/m680x.yaml b/tests/details/m680x.yaml index d856f74b8..5c2b26044 100644 --- a/tests/details/m680x.yaml +++ b/tests/details/m680x.yaml @@ -3502,4 +3502,133 @@ test_cases: access: CS_AC_WRITE size: 1 flags: [M680X_FIRST_OP_IN_MNEM] - regs_read: [ cc, a ] \ No newline at end of file + regs_read: [ cc, a ] + - + input: + bytes: [ 0x18, 0x92, 0xDD, 0x18, 0xB6, 0x12, 0x34, 0x18, 0x39, 0x18, 0x35, 0x12, 0x18, 0x42, 0x18, 0xA7, 0x18, 0xC0, 0x11, 0x11, 0x18, 0xC2, 0x11, 0x11, 0x18, 0x8A, 0x11, 0x11 ] + arch: "m680x" + options: [ CS_OPT_DETAIL, CS_MODE_M680X_HCS12X ] + address: 0x1000 + expected: + insns: + - + asm_text: "sbex $dd" + details: + m680x: + operands: + - + type: M680X_OP_REGISTER + reg: x + access: CS_AC_READ_WRITE + size: 2 + - + type: M680X_OP_DIRECT + direct_addr: 0x00DD + direct_addr_set: true + access: CS_AC_READ_WRITE + size: 2 + flags: [M680X_FIRST_OP_IN_MNEM] + regs_read: [ cc, x ] + - + asm_text: "gldaa $1234" + details: + m680x: + operands: + - + type: M680X_OP_REGISTER + reg: a + access: CS_AC_READ_WRITE + size: 1 + - + type: M680X_OP_EXTENDED + ext_address: 0x1234 + access: CS_AC_READ_WRITE + size: 1 + flags: [M680X_FIRST_OP_IN_MNEM] + regs_read: [ cc, a ] + regs_write: [ cc,a ] + - + asm_text: "pshcw" + details: + m680x: + operands: + - + type: M680X_OP_REGISTER + reg: cc + access: CS_AC_READ + size: 1 + flags: [M680X_FIRST_OP_IN_MNEM] + regs_read: [ cc ] + - + asm_text: "btas $12" + details: + m680x: + operands: + - + type: M680X_OP_DIRECT + direct_addr: 0x0012 + direct_addr_set: true + size: 1 + - + asm_text: "incx" + details: + m680x: + operands: + - + type: M680X_OP_REGISTER + reg: x + access: CS_AC_READ_WRITE + size: 2 + flags: [M680X_FIRST_OP_IN_MNEM] + regs_read: [ cc, x ] + regs_write: [ cc, x ] + - + asm_text: "sys" + - + asm_text: "suby #4369" + details: + m680x: + operands: + - + type: M680X_OP_REGISTER + reg: y + access: CS_AC_READ_WRITE + size: 2 + - + type: M680X_OP_IMMEDIATE + imm: 0x1111 + access: CS_AC_READ + size: 2 + flags: [M680X_FIRST_OP_IN_MNEM] + regs_read: [ cc, y ] + regs_write: [ cc, y ] + - + asm_text: "sbey $1111" + details: + m680x: + operands: + - + type: M680X_OP_REGISTER + reg: y + access: CS_AC_READ_WRITE + size: 2 + - + type: M680X_OP_EXTENDED + ext_address: 0x1111 + access: CS_AC_READ_WRITE + size: 2 + flags: [M680X_FIRST_OP_IN_MNEM] + regs_read: [ cc, y ] + regs_write: [ cc, y ] + - + asm_text: "orx #17" + details: + m680x: + operands: + - + type: M680X_OP_IMMEDIATE + imm: 0x11 + access: CS_AC_READ + size: 1 + regs_read: [ cc ] + regs_write: [ cc ] \ No newline at end of file