VirtualBox

Changeset 106705 in vbox for trunk/src/VBox/Disassembler


Ignore:
Timestamp:
Oct 25, 2024 3:08:49 PM (6 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
165578
Message:

Disassembler: Decode conditional select instructions, bugref:10394

Location:
trunk/src/VBox/Disassembler
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Disassembler/DisasmTables-armv8-a64.cpp

    r106693 r106705  
    786786
    787787
     788/* CSEL/CSINC/CSINV/CSNEG */
     789DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER(CondSel)
     790    DIS_ARMV8_INSN_DECODE(kDisParmParseSf,            31,  1, DIS_ARMV8_INSN_PARAM_UNSET),
     791    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr,          0,  5, 0 /*idxParam*/),
     792    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr,          5,  5, 1 /*idxParam*/),
     793    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr,         16,  5, 2 /*idxParam*/),
     794    DIS_ARMV8_INSN_DECODE(kDisParmParseCond,          12,  4, 3 /*idxParam*/),
     795DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_BEGIN(CondSel)
     796    DIS_ARMV8_OP(0x1a800000, "csel",            OP_ARMV8_A64_CSEL,      DISOPTYPE_HARMLESS),
     797    DIS_ARMV8_OP(0x1a800400, "csinc",           OP_ARMV8_A64_CSINC,     DISOPTYPE_HARMLESS),
     798    INVALID_OPCODE,
     799    INVALID_OPCODE,
     800    DIS_ARMV8_OP(0x5a800000, "csinv",           OP_ARMV8_A64_CSINC,     DISOPTYPE_HARMLESS),
     801    DIS_ARMV8_OP(0x5a800400, "csneg",           OP_ARMV8_A64_CSNEG,     DISOPTYPE_HARMLESS)
     802DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_END(CondSel, 0x7fe00c00 /*fFixedInsn*/, kDisArmV8OpcDecodeCollate,
     803                                       RT_BIT_32(10) | RT_BIT_32(11) | RT_BIT_32(30), 10);
     804
     805
    788806/*
    789807 * C4.1.95 - Data Processing - Register
     
    809827    DIS_ARMV8_DECODE_MAP_ENTRY(CondCmp),
    810828    DIS_ARMV8_DECODE_MAP_INVALID_ENTRY,
    811     DIS_ARMV8_DECODE_MAP_INVALID_ENTRY,             /** @todo Conditional select. */
     829    DIS_ARMV8_DECODE_MAP_ENTRY(CondSel),
    812830    DIS_ARMV8_DECODE_MAP_INVALID_ENTRY,
    813831    DIS_ARMV8_DECODE_MAP_ENTRY(Reg2Src1Src),
  • trunk/src/VBox/Disassembler/testcase/tstDisasmArmv8-1-asm.S

    r106694 r106705  
    503503        extr xzr, x0, x1, #63
    504504
     505        csel xzr, x1, x2, eq
     506        csel wzr, w1, w2, eq
     507
     508        csinc xzr, x1, x2, eq
     509        csinc wzr, w1, w2, eq
     510
     511        csinv xzr, x1, x2, eq
     512        csinv wzr, w1, w2, eq
     513
     514        csneg xzr, x1, x2, eq
     515        csneg wzr, w1, w2, eq
     516
    505517        ; Memory loads
    506518        ldrb w0, [x28]
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette