VirtualBox

Changeset 106694 in vbox


Ignore:
Timestamp:
Oct 25, 2024 12:55:26 PM (4 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
165565
Message:

Disassembler: Decode ldnp/stnp non temporal hint load/store 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

    r106693 r106694  
    449449
    450450/*
     451 * stnp/LDNP - no-allocate variant.
     452 *
     453 * Note: The opc,L bitfields are concatenated to form an index.
     454 */
     455DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER(LdStRegPairNoAllocGpr)
     456    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr,           0,  5, 0 /*idxParam*/),
     457    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr,          10,  5, 1 /*idxParam*/),
     458    DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp,       5,  5, 2 /*idxParam*/),
     459    DIS_ARMV8_INSN_DECODE(kDisParmParseSImmMemOff,     15,  7, 2 /*idxParam*/),
     460DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_BEGIN(LdStRegPairNoAllocGpr)
     461 DIS_ARMV8_OP_EX(0x28000000, "stnp",            OP_ARMV8_A64_STNP,      DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_32BIT),
     462 DIS_ARMV8_OP_EX(0x28400000, "ldnp",            OP_ARMV8_A64_LDNP,      DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_32BIT),
     463    INVALID_OPCODE,
     464    INVALID_OPCODE,
     465 DIS_ARMV8_OP_EX(0xa8000000, "stnp",            OP_ARMV8_A64_STNP,      DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_64BIT),
     466 DIS_ARMV8_OP_EX(0xa8400000, "ldnp",            OP_ARMV8_A64_LDNP,      DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_64BIT),
     467    INVALID_OPCODE,
     468    INVALID_OPCODE,
     469DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_END(LdStRegPairNoAllocGpr, 0xffc00000 /*fFixedInsn*/,
     470                                       kDisArmV8OpcDecodeCollate,
     471                                       RT_BIT_32(22) | RT_BIT_32(30) | RT_BIT_32(31), 22);
     472
     473
     474/*
     475 * C4.1.94.21 - Loads and Stores - Load/Store register (immediate post-indexed) variants
     476 *
     477 * Differentiate further based on the VR field.
     478 *
     479 *     Bit  26
     480 *     +-------------------------------------------
     481 *           0 GPR variants.
     482 *           1 SIMD/FP variants
     483 */
     484DIS_ARMV8_DECODE_MAP_DEFINE_BEGIN(LdStRegPairNoAlloc)
     485    DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegPairNoAllocGpr),
     486    DIS_ARMV8_DECODE_MAP_INVALID_ENTRY,             /** @todo */
     487DIS_ARMV8_DECODE_MAP_DEFINE_END(LdStRegPairNoAlloc, RT_BIT_32(26), 26);
     488
     489
     490/*
    451491 * C4.1.94 - Loads and Stores - Load/Store register pair variants
    452492 *
     
    461501 */
    462502DIS_ARMV8_DECODE_MAP_DEFINE_BEGIN(LdStRegPair)
    463     DIS_ARMV8_DECODE_MAP_INVALID_ENTRY,             /** @todo */
     503    DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegPairNoAlloc),
    464504    DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegPairPostIndex),
    465505    DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegPairOff),
  • trunk/src/VBox/Disassembler/testcase/tstDisasmArmv8-1-asm.S

    r106680 r106694  
    919919        ldp x0, x1, [sp], #504
    920920
     921        ldnp w0, w1, [x28]
     922        ldnp w0, w1, [x28, #4]
     923        ldnp w0, w1, [x28, #-256]
     924        ldnp w0, w1, [x28, #252]
     925
     926        ldnp w0, w1, [sp]
     927        ldnp w0, w1, [sp, #4]
     928        ldnp w0, w1, [sp, #-256]
     929        ldnp w0, w1, [sp, #252]
     930
     931        ldnp x0, x1, [x28]
     932        ldnp x0, x1, [x28, #8]
     933        ldnp x0, x1, [x28, #-512]
     934        ldnp x0, x1, [x28, #504]
     935
     936        ldnp x0, x1, [sp]
     937        ldnp x0, x1, [sp, #8]
     938        ldnp x0, x1, [sp, #-512]
     939        ldnp x0, x1, [sp, #504]
     940
    921941        ldr  x0, [x1, x2]
    922942        ldr  w0, [x1, x2]
     
    12381258        stp x0, x1, [sp], #-512
    12391259        stp x0, x1, [sp], #504
     1260
     1261
     1262        stnp w0, w1, [x28]
     1263        stnp w0, w1, [x28, #4]
     1264        stnp w0, w1, [x28, #-256]
     1265        stnp w0, w1, [x28, #252]
     1266
     1267        stnp w0, w1, [sp]
     1268        stnp w0, w1, [sp, #4]
     1269        stnp w0, w1, [sp, #-256]
     1270        stnp w0, w1, [sp, #252]
     1271
     1272        stnp x0, x1, [x28]
     1273        stnp x0, x1, [x28, #8]
     1274        stnp x0, x1, [x28, #-512]
     1275        stnp x0, x1, [x28, #504]
     1276
     1277        stnp x0, x1, [sp]
     1278        stnp x0, x1, [sp, #8]
     1279        stnp x0, x1, [sp, #-512]
     1280        stnp x0, x1, [sp, #504]
     1281
    12401282
    12411283        str  x0, [x1, x2]
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