VirtualBox

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


Ignore:
Timestamp:
Oct 24, 2024 12:55:19 PM (3 months ago)
Author:
vboxsync
Message:

Disassembler: Decode post-indexed load/store instructions, bugref:10394

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

Legend:

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

    r106657 r106659  
    10251025
    10261026/*
     1027 * STRB/LDRB/LDRSB/STRH/LDRH/LDRSH/STR/LDR/LDRSW/STR/LDR
     1028 *
     1029 * Note: The size,opc bitfields are concatenated to form an index.
     1030 */
     1031DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER(LdStRegImmPostIndexGpr)
     1032    DIS_ARMV8_INSN_DECODE(kDisParmParseSize,               30,  2, DIS_ARMV8_INSN_PARAM_UNSET),
     1033    DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr,               0,  5, 0 /*idxParam*/),
     1034    DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp,           5,  5, 1 /*idxParam*/),
     1035    DIS_ARMV8_INSN_DECODE(kDisParmParseSImmMemOffUnscaled, 12,  9, 1 /*idxParam*/),
     1036    DIS_ARMV8_INSN_DECODE(kDisParmParseSetPostIndexed,      0,  0, 1 /*idxParam*/),
     1037DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_BEGIN(LdStRegImmPostIndexGpr)
     1038    DIS_ARMV8_OP(0x38000400, "strb",            OP_ARMV8_A64_STRB,      DISOPTYPE_HARMLESS),
     1039    DIS_ARMV8_OP(0x38400400, "ldrb",            OP_ARMV8_A64_LDRB,      DISOPTYPE_HARMLESS),
     1040 DIS_ARMV8_OP_EX(0x38800400, "ldrsb",           OP_ARMV8_A64_LDRSB,     DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_64BIT),
     1041 DIS_ARMV8_OP_EX(0x38c00400, "ldrsb",           OP_ARMV8_A64_LDRSB,     DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_32BIT),
     1042    DIS_ARMV8_OP(0x78000400, "strh",            OP_ARMV8_A64_STRH,      DISOPTYPE_HARMLESS),
     1043    DIS_ARMV8_OP(0x78400400, "ldrh",            OP_ARMV8_A64_LDRH,      DISOPTYPE_HARMLESS),
     1044 DIS_ARMV8_OP_EX(0x78800400, "ldrsh",           OP_ARMV8_A64_LDURSH,    DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_64BIT),
     1045 DIS_ARMV8_OP_EX(0x78c00400, "ldrsh",           OP_ARMV8_A64_LDURSH,    DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_32BIT),
     1046    DIS_ARMV8_OP(0xb8000400, "str",             OP_ARMV8_A64_STR,       DISOPTYPE_HARMLESS),
     1047    DIS_ARMV8_OP(0xb8400400, "ldr",             OP_ARMV8_A64_LDR,       DISOPTYPE_HARMLESS),
     1048 DIS_ARMV8_OP_EX(0xb8800400, "ldrsw",           OP_ARMV8_A64_LDURSW,    DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_64BIT),
     1049    INVALID_OPCODE,
     1050    DIS_ARMV8_OP(0xf8000400, "str",             OP_ARMV8_A64_STR,       DISOPTYPE_HARMLESS),
     1051    DIS_ARMV8_OP(0xf8400400, "ldr",             OP_ARMV8_A64_LDR,       DISOPTYPE_HARMLESS),
     1052    INVALID_OPCODE,
     1053    INVALID_OPCODE,
     1054DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_END(LdStRegImmPostIndexGpr, 0xffe00c00 /*fFixedInsn*/,
     1055                                       kDisArmV8OpcDecodeCollate,
     1056                                       RT_BIT_32(22) | RT_BIT_32(23) | RT_BIT_32(30) | RT_BIT_32(31), 22);
     1057
     1058
     1059/*
     1060 * C4.1.94.26 - Loads and Stores - Load/Store register (immediate post-indexed) variants
     1061 *
     1062 * Differentiate further based on the VR field.
     1063 *
     1064 *     Bit  26
     1065 *     +-------------------------------------------
     1066 *           0 GPR variants.
     1067 *           1 SIMD/FP variants
     1068 */
     1069DIS_ARMV8_DECODE_MAP_DEFINE_BEGIN(LdStRegImmPostIndex)
     1070    DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegImmPostIndexGpr),
     1071    DIS_ARMV8_DECODE_MAP_INVALID_ENTRY,             /** @todo */
     1072DIS_ARMV8_DECODE_MAP_DEFINE_END(LdStRegImmPostIndex, RT_BIT_32(26), 26);
     1073
     1074
     1075/*
    10271076 * C4.1.94 - Loads and Stores - Load/Store register variants
    10281077 *
     
    10381087DIS_ARMV8_DECODE_MAP_DEFINE_BEGIN(LdStRegOp2_11_0)
    10391088    DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegUnscaledImm),
    1040     DIS_ARMV8_DECODE_MAP_INVALID_ENTRY,         /** @todo */
     1089    DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegImmPostIndex),
    10411090    DIS_ARMV8_DECODE_MAP_INVALID_ENTRY,         /** @todo */
    10421091    DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegImmPreIndex),
  • trunk/src/VBox/Disassembler/testcase/tstDisasmArmv8-1-asm.S

    r106657 r106659  
    642642        ldrsw x0, [sp, #255]!
    643643
     644        ldrb w0, [x28], #0
     645        ldrb w0, [x28], #-256
     646        ldrb w0, [x28], #255
     647
     648        ldrb w0, [sp], #0
     649        ldrb w0, [sp], #-256
     650        ldrb w0, [sp], #255
     651
     652        ldrsb w0, [x28], #0
     653        ldrsb w0, [x28], #-256
     654        ldrsb w0, [x28], #255
     655
     656        ldrsb w0, [sp], #0
     657        ldrsb w0, [sp], #-256
     658        ldrsb w0, [sp], #255
     659
     660        ldrsb x0, [x28], #0
     661        ldrsb x0, [x28], #-256
     662        ldrsb x0, [x28], #255
     663
     664        ldrsb x0, [sp], #0
     665        ldrsb x0, [sp], #-256
     666        ldrsb x0, [sp], #255
     667
     668        ldrh w0, [x28], #0
     669        ldrh w0, [x28], #-256
     670        ldrh w0, [x28], #255
     671
     672        ldrh w0, [sp], #0
     673        ldrh w0, [sp], #-256
     674        ldrh w0, [sp], #255
     675
     676        ldrsh w0, [x28], #0
     677        ldrsh w0, [x28], #-256
     678        ldrsh w0, [x28], #255
     679
     680        ldrsh w0, [sp], #0
     681        ldrsh w0, [sp], #-256
     682        ldrsh w0, [sp], #255
     683
     684        ldrsh x0, [x28], #0
     685        ldrsh x0, [x28], #-256
     686        ldrsh x0, [x28], #255
     687
     688        ldrsh x0, [sp], #0
     689        ldrsh x0, [sp], #-256
     690        ldrsh x0, [sp], #255
     691
     692        ldr x0, [x28], #0
     693        ldr x0, [x28], #-256
     694        ldr x0, [x28], #255
     695
     696        ldr x0, [sp], #0
     697        ldr x0, [sp], #-256
     698        ldr x0, [sp], #255
     699
     700        ldr w0, [x28], #0
     701        ldr w0, [x28], #-256
     702        ldr w0, [x28], #255
     703
     704        ldr w0, [sp], #0
     705        ldr w0, [sp], #-256
     706        ldr w0, [sp], #255
     707
     708        ldrsw x0, [x28], #0
     709        ldrsw x0, [x28], #-256
     710        ldrsw x0, [x28], #255
     711
     712        ldrsw x0, [sp], #0
     713        ldrsw x0, [sp], #-256
     714        ldrsw x0, [sp], #255
     715
    644716
    645717        ldurb w0, [x28]
     
    903975        str w0, [sp, #4]
    904976        str w0, [sp, #16380]
     977
     978        strb w0, [x28, #0]!
     979        strb w0, [x28, #-256]!
     980        strb w0, [x28, #255]!
     981
     982        strb w0, [sp, #0]!
     983        strb w0, [sp, #-256]!
     984        strb w0, [sp, #255]!
     985
     986        strh w0, [x28, #0]!
     987        strh w0, [x28, #-256]!
     988        strh w0, [x28, #255]!
     989
     990        strh w0, [sp, #0]!
     991        strh w0, [sp, #-256]!
     992        strh w0, [sp, #255]!
     993
     994        str x0, [x28, #0]!
     995        str x0, [x28, #-256]!
     996        str x0, [x28, #255]!
     997
     998        str x0, [sp, #0]!
     999        str x0, [sp, #-256]!
     1000        str x0, [sp, #255]!
     1001
     1002        str w0, [x28, #0]!
     1003        str w0, [x28, #-256]!
     1004        str w0, [x28, #255]!
     1005
     1006        str w0, [sp, #0]!
     1007        str w0, [sp, #-256]!
     1008        str w0, [sp, #255]!
     1009
     1010
     1011        strb w0, [x28], #0
     1012        strb w0, [x28], #-256
     1013        strb w0, [x28], #255
     1014
     1015        strb w0, [sp], #0
     1016        strb w0, [sp], #-256
     1017        strb w0, [sp], #255
     1018
     1019        strh w0, [x28], #0
     1020        strh w0, [x28], #-256
     1021        strh w0, [x28], #255
     1022
     1023        strh w0, [sp], #0
     1024        strh w0, [sp], #-256
     1025        strh w0, [sp], #255
     1026
     1027        str x0, [x28], #0
     1028        str x0, [x28], #-256
     1029        str x0, [x28], #255
     1030
     1031        str x0, [sp], #0
     1032        str x0, [sp], #-256
     1033        str x0, [sp], #255
     1034
     1035        str w0, [x28], #0
     1036        str w0, [x28], #-256
     1037        str w0, [x28], #255
     1038
     1039        str w0, [sp], #0
     1040        str w0, [sp], #-256
     1041        str w0, [sp], #255
    9051042
    9061043        sturb w0, [x28]
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