VirtualBox

Changeset 106756 in vbox


Ignore:
Timestamp:
Oct 28, 2024 2:55:43 PM (5 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
165640
Message:

Disassembler: Decode SIMD ldr/str (immediate post index) 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

    r106754 r106756  
    341341
    342342
     343/* SIMD STR/LDR */
     344DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER(LdStRegImmPostIndexSimd)
     345    DIS_ARMV8_INSN_DECODE(kDisParmParseSimdRegSize,        30,  2, DIS_ARMV8_INSN_PARAM_UNSET),
     346    DIS_ARMV8_INSN_DECODE(kDisParmParseSimdRegScalar,       0,  5, 0 /*idxParam*/),
     347    DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp,           5,  5, 1 /*idxParam*/),
     348    DIS_ARMV8_INSN_DECODE(kDisParmParseSImmMemOffUnscaled, 12,  9, 1 /*idxParam*/),
     349    DIS_ARMV8_INSN_DECODE(kDisParmParseSetPostIndexed,      0,  0, 1 /*idxParam*/),
     350DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER_ALTERNATIVE(LdStRegImmPostIndexSimd128)
     351    DIS_ARMV8_INSN_DECODE(kDisParmParseSimdRegSize128,      0,  0, DIS_ARMV8_INSN_PARAM_UNSET),
     352    DIS_ARMV8_INSN_DECODE(kDisParmParseSimdRegScalar,       0,  5, 0 /*idxParam*/),
     353    DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp,           5,  5, 1 /*idxParam*/),
     354    DIS_ARMV8_INSN_DECODE(kDisParmParseSImmMemOffUnscaled, 12,  9, 1 /*idxParam*/),
     355    DIS_ARMV8_INSN_DECODE(kDisParmParseSetPostIndexed,      0,  0, 1 /*idxParam*/),
     356DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_BEGIN(LdStRegImmPostIndexSimd)
     357    DIS_ARMV8_OP(           0x3c000400, "str",             OP_ARMV8_A64_STR,       DISOPTYPE_HARMLESS),
     358    DIS_ARMV8_OP(           0x3c400400, "ldr",             OP_ARMV8_A64_LDR,       DISOPTYPE_HARMLESS),
     359    DIS_ARMV8_OP_ALT_DECODE(0x3c800400, "str",             OP_ARMV8_A64_STR,       DISOPTYPE_HARMLESS, LdStRegImmPostIndexSimd128), /** @todo size == 0. */
     360    DIS_ARMV8_OP_ALT_DECODE(0x3cc00400, "ldr",             OP_ARMV8_A64_LDR,       DISOPTYPE_HARMLESS, LdStRegImmPostIndexSimd128), /** @todo size == 0. */
     361DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_END(LdStRegImmPostIndexSimd, 0x3fe00c00 /*fFixedInsn*/,
     362                                       kDisArmV8OpcDecodeNop,
     363                                       RT_BIT_32(22) | RT_BIT_32(23), 22);
     364
     365
    343366/*
    344367 * C4.1.94.26 - Loads and Stores - Load/Store register (immediate post-indexed) variants
     
    353376DIS_ARMV8_DECODE_MAP_DEFINE_BEGIN(LdStRegImmPostIndex)
    354377    DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegImmPostIndexGpr),
    355     DIS_ARMV8_DECODE_MAP_INVALID_ENTRY,             /** @todo */
     378    DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegImmPostIndexSimd),
    356379DIS_ARMV8_DECODE_MAP_DEFINE_END(LdStRegImmPostIndex, RT_BIT_32(26), 26);
    357380
  • trunk/src/VBox/Disassembler/testcase/tstDisasmArmv8-1-asm.S

    r106754 r106756  
    15621562
    15631563
     1564        ldr b0, [x28], #0
     1565        ldr b0, [x28], #-256
     1566        ldr b0, [x28], #255
     1567
     1568        ldr b31, [sp], #0
     1569        ldr b31, [sp], #-256
     1570        ldr b31, [sp], #255
     1571
     1572        ldr h0, [x28], #0
     1573        ldr h0, [x28], #-256
     1574        ldr h0, [x28], #255
     1575
     1576        ldr h31, [sp], #0
     1577        ldr h31, [sp], #-256
     1578        ldr h31, [sp], #255
     1579
     1580        ldr s0, [x28], #0
     1581        ldr s0, [x28], #-256
     1582        ldr s0, [x28], #255
     1583
     1584        ldr s31, [sp], #0
     1585        ldr s31, [sp], #-256
     1586        ldr s31, [sp], #255
     1587
     1588        ldr d0, [x28], #0
     1589        ldr d0, [x28], #-256
     1590        ldr d0, [x28], #255
     1591
     1592        ldr d31, [sp], #0
     1593        ldr d31, [sp], #-256
     1594        ldr d31, [sp], #255
     1595
     1596        ldr q0, [x28], #0
     1597        ldr q0, [x28], #-256
     1598        ldr q0, [x28], #255
     1599
     1600        ldr q31, [sp], #0
     1601        ldr q31, [sp], #-256
     1602        ldr q31, [sp], #255
     1603
     1604
    15641605        ; SIMD memory stores
    15651606        str b0, [x0]
     
    17511792        stnp q30, q31, [x0, #-1024]
    17521793        stnp q23, q24, [x0, #1008]
     1794
     1795
     1796        str b0, [x28], #0
     1797        str b0, [x28], #-256
     1798        str b0, [x28], #255
     1799
     1800        str b31, [sp], #0
     1801        str b31, [sp], #-256
     1802        str b31, [sp], #255
     1803
     1804        str h0, [x28], #0
     1805        str h0, [x28], #-256
     1806        str h0, [x28], #255
     1807
     1808        str h31, [sp], #0
     1809        str h31, [sp], #-256
     1810        str h31, [sp], #255
     1811
     1812        str s0, [x28], #0
     1813        str s0, [x28], #-256
     1814        str s0, [x28], #255
     1815
     1816        str s31, [sp], #0
     1817        str s31, [sp], #-256
     1818        str s31, [sp], #255
     1819
     1820        str d0, [x28], #0
     1821        str d0, [x28], #-256
     1822        str d0, [x28], #255
     1823
     1824        str d31, [sp], #0
     1825        str d31, [sp], #-256
     1826        str d31, [sp], #255
     1827
     1828        str q0, [x28], #0
     1829        str q0, [x28], #-256
     1830        str q0, [x28], #255
     1831
     1832        str q31, [sp], #0
     1833        str q31, [sp], #-256
     1834        str q31, [sp], #255
    17531835
    17541836
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