VirtualBox

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


Ignore:
Timestamp:
Oct 28, 2024 2:09:29 PM (4 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
165636
Message:

Disassembler: Decode SIMD ldur/stur (unscaled immediate) instructions, bugref:10394

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

Legend:

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

    r106751 r106752  
    222222
    223223
     224/* SIMD STUR/LDUR */
     225DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER(LdStRegUnscaledImmSimd)
     226    DIS_ARMV8_INSN_DECODE(kDisParmParseSimdRegSize,        30,  2, DIS_ARMV8_INSN_PARAM_UNSET),
     227    DIS_ARMV8_INSN_DECODE(kDisParmParseSimdRegScalar,       0,  5, 0 /*idxParam*/),
     228    DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp,           5,  5, 1 /*idxParam*/),
     229    DIS_ARMV8_INSN_DECODE(kDisParmParseSImmMemOffUnscaled, 12,  9, 1 /*idxParam*/),
     230DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER_ALTERNATIVE(LdStRegUnscaledImmSimd128)
     231    DIS_ARMV8_INSN_DECODE(kDisParmParseSimdRegSize128,      0,  0, DIS_ARMV8_INSN_PARAM_UNSET),
     232    DIS_ARMV8_INSN_DECODE(kDisParmParseSimdRegScalar,       0,  5, 0 /*idxParam*/),
     233    DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp,           5,  5, 1 /*idxParam*/),
     234    DIS_ARMV8_INSN_DECODE(kDisParmParseSImmMemOffUnscaled, 12,  9, 1 /*idxParam*/),
     235DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_BEGIN(LdStRegUnscaledImmSimd)
     236    DIS_ARMV8_OP(           0x3c000000, "stur",            OP_ARMV8_A64_STUR,      DISOPTYPE_HARMLESS),
     237    DIS_ARMV8_OP(           0x3c400000, "ldur",            OP_ARMV8_A64_LDUR,      DISOPTYPE_HARMLESS),
     238    DIS_ARMV8_OP_ALT_DECODE(0x3c800000, "stur",            OP_ARMV8_A64_STUR,      DISOPTYPE_HARMLESS, LdStRegUnscaledImmSimd128), /** @todo size == 0. */
     239    DIS_ARMV8_OP_ALT_DECODE(0x3cc00000, "ldur",            OP_ARMV8_A64_LDUR,      DISOPTYPE_HARMLESS, LdStRegUnscaledImmSimd128), /** @todo size == 0. */
     240DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_END(LdStRegUnscaledImmSimd, 0x3fe00c00 /*fFixedInsn*/,
     241                                       kDisArmV8OpcDecodeNop,
     242                                       RT_BIT_32(22) | RT_BIT_32(23), 22);
     243
     244
    224245/*
    225246 * C4.1.94 - Loads and Stores - Load/Store register (register offset) variants
     
    234255DIS_ARMV8_DECODE_MAP_DEFINE_BEGIN(LdStRegUnscaledImm)
    235256    DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegUnscaledImmGpr),
    236     DIS_ARMV8_DECODE_MAP_INVALID_ENTRY,             /** @todo */
     257    DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegUnscaledImmSimd),
    237258DIS_ARMV8_DECODE_MAP_DEFINE_END(LdStRegUnscaledImm, RT_BIT_32(26), 26);
    238259
  • trunk/src/VBox/Disassembler/testcase/tstDisasmArmv8-1-asm.S

    r106751 r106752  
    15081508
    15091509
     1510        ldur b0,  [x0]
     1511        ldur b0,  [x0, #-256]
     1512        ldur b31, [x0, #255]
     1513
     1514        ldur b0,  [sp]
     1515        ldur b0,  [sp, #-256]
     1516        ldur b31, [sp, #255]
     1517
     1518        ldur h0,  [x0]
     1519        ldur h0,  [x0, #-256]
     1520        ldur h31, [x0, #255]
     1521
     1522        ldur h0,  [sp]
     1523        ldur h0,  [sp, #-256]
     1524        ldur h31, [sp, #255]
     1525
     1526        ldur s0,  [x0]
     1527        ldur s0,  [x0, #-256]
     1528        ldur s31, [x0, #255]
     1529
     1530        ldur s0,  [sp]
     1531        ldur s0,  [sp, #-256]
     1532        ldur s31, [sp, #255]
     1533
     1534        ldur d0,  [x0]
     1535        ldur d0,  [x0, #-256]
     1536        ldur d31, [x0, #255]
     1537
     1538        ldur d0,  [sp]
     1539        ldur d0,  [sp, #-256]
     1540        ldur d31, [sp, #255]
     1541
     1542        ldur q0,  [x0]
     1543        ldur q0,  [x0, #-256]
     1544        ldur q31, [x0, #255]
     1545
     1546        ldur q0,  [sp]
     1547        ldur q0,  [sp, #-256]
     1548        ldur q31, [sp, #255]
     1549
     1550
    15101551        ; SIMD memory stores
    15111552        str b0, [x0]
     
    16431684        str  q31, [sp, w2, UXTW #4]
    16441685        str  q31, [sp, w2, SXTW #4]
     1686
     1687
     1688        stur b0,  [x0]
     1689        stur b0,  [x0, #-256]
     1690        stur b31, [x0, #255]
     1691
     1692        stur b0,  [sp]
     1693        stur b0,  [sp, #-256]
     1694        stur b31, [sp, #255]
     1695
     1696        stur h0,  [x0]
     1697        stur h0,  [x0, #-256]
     1698        stur h31, [x0, #255]
     1699
     1700        stur h0,  [sp]
     1701        stur h0,  [sp, #-256]
     1702        stur h31, [sp, #255]
     1703
     1704        stur s0,  [x0]
     1705        stur s0,  [x0, #-256]
     1706        stur s31, [x0, #255]
     1707
     1708        stur s0,  [sp]
     1709        stur s0,  [sp, #-256]
     1710        stur s31, [sp, #255]
     1711
     1712        stur d0,  [x0]
     1713        stur d0,  [x0, #-256]
     1714        stur d31, [x0, #255]
     1715
     1716        stur d0,  [sp]
     1717        stur d0,  [sp, #-256]
     1718        stur d31, [sp, #255]
     1719
     1720        stur q0,  [x0]
     1721        stur q0,  [x0, #-256]
     1722        stur q31, [x0, #255]
     1723
     1724        stur q0,  [sp]
     1725        stur q0,  [sp, #-256]
     1726        stur q31, [sp, #255]
    16451727
    16461728
Note: See TracChangeset for help on using the changeset viewer.

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