Changeset 106657 in vbox for trunk/src/VBox/Disassembler
- Timestamp:
- Oct 24, 2024 12:42:39 PM (4 months ago)
- svn:sync-xref-src-repo-rev:
- 165504
- Location:
- trunk/src/VBox/Disassembler
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Disassembler/DisasmFormatArmV8.cpp
r106616 r106657 817 817 PUT_STR(pszReg, cchReg); 818 818 } 819 else if (pParam->armv8.u.offBase) 819 else if ( pParam->armv8.u.offBase 820 || (pParam->fUse & (DISUSE_POST_INDEXED | DISUSE_PRE_INDEXED))) 820 821 { 821 822 PUT_SZ(", #"); -
trunk/src/VBox/Disassembler/DisasmTables-armv8-a64.cpp
r106652 r106657 976 976 977 977 /* 978 * STRB/LDRB/LDRSB/STRH/LDRH/LDRSH/STR/LDR/LDRSW/STR/LDR 979 * 980 * Note: The size,opc bitfields are concatenated to form an index. 981 */ 982 DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER(LdStRegImmPreIndexGpr) 983 DIS_ARMV8_INSN_DECODE(kDisParmParseSize, 30, 2, DIS_ARMV8_INSN_PARAM_UNSET), 984 DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr, 0, 5, 0 /*idxParam*/), 985 DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp, 5, 5, 1 /*idxParam*/), 986 DIS_ARMV8_INSN_DECODE(kDisParmParseSImmMemOffUnscaled, 12, 9, 1 /*idxParam*/), 987 DIS_ARMV8_INSN_DECODE(kDisParmParseSetPreIndexed, 0, 0, 1 /*idxParam*/), 988 DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_BEGIN(LdStRegImmPreIndexGpr) 989 DIS_ARMV8_OP(0x38000c00, "strb", OP_ARMV8_A64_STRB, DISOPTYPE_HARMLESS), 990 DIS_ARMV8_OP(0x38400c00, "ldrb", OP_ARMV8_A64_LDRB, DISOPTYPE_HARMLESS), 991 DIS_ARMV8_OP_EX(0x38800c00, "ldrsb", OP_ARMV8_A64_LDRSB, DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_64BIT), 992 DIS_ARMV8_OP_EX(0x38c00c00, "ldrsb", OP_ARMV8_A64_LDRSB, DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_32BIT), 993 DIS_ARMV8_OP(0x78000c00, "strh", OP_ARMV8_A64_STRH, DISOPTYPE_HARMLESS), 994 DIS_ARMV8_OP(0x78400c00, "ldrh", OP_ARMV8_A64_LDRH, DISOPTYPE_HARMLESS), 995 DIS_ARMV8_OP_EX(0x78800c00, "ldrsh", OP_ARMV8_A64_LDURSH, DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_64BIT), 996 DIS_ARMV8_OP_EX(0x78c00c00, "ldrsh", OP_ARMV8_A64_LDURSH, DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_32BIT), 997 DIS_ARMV8_OP(0xb8000c00, "str", OP_ARMV8_A64_STR, DISOPTYPE_HARMLESS), 998 DIS_ARMV8_OP(0xb8400c00, "ldr", OP_ARMV8_A64_LDR, DISOPTYPE_HARMLESS), 999 DIS_ARMV8_OP_EX(0xb8800c00, "ldrsw", OP_ARMV8_A64_LDURSW, DISOPTYPE_HARMLESS, DISARMV8INSNCLASS_F_FORCED_64BIT), 1000 INVALID_OPCODE, 1001 DIS_ARMV8_OP(0xf8000c00, "str", OP_ARMV8_A64_STR, DISOPTYPE_HARMLESS), 1002 DIS_ARMV8_OP(0xf8400c00, "ldr", OP_ARMV8_A64_LDR, DISOPTYPE_HARMLESS), 1003 INVALID_OPCODE, 1004 INVALID_OPCODE, 1005 DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_END(LdStRegImmPreIndexGpr, 0xffe00c00 /*fFixedInsn*/, 1006 kDisArmV8OpcDecodeCollate, 1007 RT_BIT_32(22) | RT_BIT_32(23) | RT_BIT_32(30) | RT_BIT_32(31), 22); 1008 1009 1010 /* 1011 * C4.1.94.28 - Loads and Stores - Load/Store register (immediate pre-indexed) variants 1012 * 1013 * Differentiate further based on the VR field. 1014 * 1015 * Bit 26 1016 * +------------------------------------------- 1017 * 0 GPR variants. 1018 * 1 SIMD/FP variants 1019 */ 1020 DIS_ARMV8_DECODE_MAP_DEFINE_BEGIN(LdStRegImmPreIndex) 1021 DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegImmPreIndexGpr), 1022 DIS_ARMV8_DECODE_MAP_INVALID_ENTRY, /** @todo */ 1023 DIS_ARMV8_DECODE_MAP_DEFINE_END(LdStRegImmPreIndex, RT_BIT_32(26), 26); 1024 1025 1026 /* 978 1027 * C4.1.94 - Loads and Stores - Load/Store register variants 979 1028 * … … 991 1040 DIS_ARMV8_DECODE_MAP_INVALID_ENTRY, /** @todo */ 992 1041 DIS_ARMV8_DECODE_MAP_INVALID_ENTRY, /** @todo */ 993 DIS_ARMV8_DECODE_MAP_ INVALID_ENTRY, /** @todo */1042 DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegImmPreIndex), 994 1043 DIS_ARMV8_DECODE_MAP_DEFINE_END(LdStRegOp2_11_0, RT_BIT_32(10) | RT_BIT_32(11), 10); 995 1044 -
trunk/src/VBox/Disassembler/testcase/tstDisasmArmv8-1-asm.S
r106649 r106657 570 570 ldrsw x0, [sp, #16380] 571 571 572 ldrb w0, [x28, #0]! 573 ldrb w0, [x28, #-256]! 574 ldrb w0, [x28, #255]! 575 576 ldrb w0, [sp, #0]! 577 ldrb w0, [sp, #-256]! 578 ldrb w0, [sp, #255]! 579 580 ldrsb w0, [x28, #0]! 581 ldrsb w0, [x28, #-256]! 582 ldrsb w0, [x28, #255]! 583 584 ldrsb w0, [sp, #0]! 585 ldrsb w0, [sp, #-256]! 586 ldrsb w0, [sp, #255]! 587 588 ldrsb x0, [x28, #0]! 589 ldrsb x0, [x28, #-256]! 590 ldrsb x0, [x28, #255]! 591 592 ldrsb x0, [sp, #0]! 593 ldrsb x0, [sp, #-256]! 594 ldrsb x0, [sp, #255]! 595 596 ldrh w0, [x28, #0]! 597 ldrh w0, [x28, #-256]! 598 ldrh w0, [x28, #255]! 599 600 ldrh w0, [sp, #0]! 601 ldrh w0, [sp, #-256]! 602 ldrh w0, [sp, #255]! 603 604 ldrsh w0, [x28, #0]! 605 ldrsh w0, [x28, #-256]! 606 ldrsh w0, [x28, #255]! 607 608 ldrsh w0, [sp, #0]! 609 ldrsh w0, [sp, #-256]! 610 ldrsh w0, [sp, #255]! 611 612 ldrsh x0, [x28, #0]! 613 ldrsh x0, [x28, #-256]! 614 ldrsh x0, [x28, #255]! 615 616 ldrsh x0, [sp, #0]! 617 ldrsh x0, [sp, #-256]! 618 ldrsh x0, [sp, #255]! 619 620 ldr x0, [x28, #0]! 621 ldr x0, [x28, #-256]! 622 ldr x0, [x28, #255]! 623 624 ldr x0, [sp, #0]! 625 ldr x0, [sp, #-256]! 626 ldr x0, [sp, #255]! 627 628 ldr w0, [x28, #0]! 629 ldr w0, [x28, #-256]! 630 ldr w0, [x28, #255]! 631 632 ldr w0, [sp, #0]! 633 ldr w0, [sp, #-256]! 634 ldr w0, [sp, #255]! 635 636 ldrsw x0, [x28, #0]! 637 ldrsw x0, [x28, #-256]! 638 ldrsw x0, [x28, #255]! 639 640 ldrsw x0, [sp, #0]! 641 ldrsw x0, [sp, #-256]! 642 ldrsw x0, [sp, #255]! 643 644 572 645 ldurb w0, [x28] 573 646 ldurb w0, [x28, #-256]
Note:
See TracChangeset
for help on using the changeset viewer.