Changeset 106758 in vbox for trunk/src/VBox/Disassembler
- Timestamp:
- Oct 28, 2024 3:54:21 PM (6 months ago)
- svn:sync-xref-src-repo-rev:
- 165643
- Location:
- trunk/src/VBox/Disassembler
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Disassembler/DisasmCore-armv8.cpp
r106754 r106758 114 114 static FNDISPARSEARMV8 disArmV8ParseSf; 115 115 static FNDISPARSEARMV8 disArmV8ParseImmX16; 116 static FNDISPARSEARMV8 disArmV8ParseLdrPacImm; 117 static FNDISPARSEARMV8 disArmV8ParseLdrPacW; 116 118 /** @} */ 117 119 … … 172 174 disArmV8ParseImmHImmB, 173 175 disArmV8ParseSf, 174 disArmV8ParseImmX16 176 disArmV8ParseImmX16, 177 disArmV8ParseLdrPacImm, 178 disArmV8ParseLdrPacW 175 179 }; 176 180 … … 1030 1034 1031 1035 1036 static int disArmV8ParseLdrPacImm(PDISSTATE pDis, uint32_t u32Insn, PCDISARMV8OPCODE pOp, PCDISARMV8INSNCLASS pInsnClass, PDISOPPARAM pParam, PCDISARMV8INSNPARAM pInsnParm, bool *pf64Bit) 1037 { 1038 RT_NOREF(pDis, pOp, pInsnClass, pParam, pInsnParm, pf64Bit); 1039 1040 Assert(pInsnParm->cBits == 0); 1041 Assert(pInsnParm->idxBitStart == 0); 1042 Assert(pParam->armv8.enmType != kDisArmv8OpParmNone); 1043 1044 uint32_t u32 = disArmV8ExtractBitVecFromInsn(u32Insn, 12, 9) | ((u32Insn & RT_BIT_32(22)) >> 13); 1045 pParam->armv8.cb = sizeof(int16_t); 1046 pParam->armv8.u.offBase = disArmV8ExtractBitVecFromInsnSignExtend(u32, 0, 10) << 3; 1047 return VINF_SUCCESS; 1048 } 1049 1050 1051 static int disArmV8ParseLdrPacW(PDISSTATE pDis, uint32_t u32Insn, PCDISARMV8OPCODE pOp, PCDISARMV8INSNCLASS pInsnClass, PDISOPPARAM pParam, PCDISARMV8INSNPARAM pInsnParm, bool *pf64Bit) 1052 { 1053 RT_NOREF(pDis, pOp, pInsnClass, pParam, pInsnParm, pf64Bit); 1054 1055 Assert(pInsnParm->cBits == 1); 1056 Assert(pInsnParm->idxBitStart == 11); 1057 if (u32Insn & RT_BIT_32(11)) 1058 pParam->fUse |= DISUSE_PRE_INDEXED; 1059 return VINF_SUCCESS; 1060 } 1061 1062 1032 1063 static uint32_t disArmV8DecodeIllegal(PDISSTATE pDis, uint32_t u32Insn, PCDISARMV8INSNCLASS pInsnClass) 1033 1064 { -
trunk/src/VBox/Disassembler/DisasmInternal-armv8.h
r106754 r106758 92 92 kDisParmParseSf, 93 93 kDisParmParseImmX16, 94 kDisParmParseLdrPacImm, 95 kDisParmParseLdrPacW, 94 96 kDisParmParseMax 95 97 } DISPARMPARSEIDX; -
trunk/src/VBox/Disassembler/DisasmTables-armv8-a64-ld-st.cpp.h
r106757 r106758 170 170 171 171 172 /* LDRAA/LDRAB */ 173 DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER(LdStRegPac) 174 DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr, 0, 5, 0 /*idxParam*/), 175 DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp, 5, 5, 1 /*idxParam*/), 176 DIS_ARMV8_INSN_DECODE(kDisParmParseLdrPacImm, 0, 0, 1 /*idxParam*/), /* Hardcoded */ 177 DIS_ARMV8_INSN_DECODE(kDisParmParseLdrPacW, 11, 1, 1 /*idxParam*/), 178 DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_BEGIN(LdStRegPac) 179 DIS_ARMV8_OP(0xf8200400, "ldraa", OP_ARMV8_A64_LDRAA, DISOPTYPE_HARMLESS), 180 DIS_ARMV8_OP(0xf8a00400, "ldrab", OP_ARMV8_A64_LDRAB, DISOPTYPE_HARMLESS), 181 DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_END(LdStRegPac, 0xffa00400 /*fFixedInsn*/, 182 kDisArmV8OpcDecodeNop, 183 RT_BIT_32(23), 23); 184 185 172 186 /* 173 187 * C4.1.94 - Loads and Stores - Load/Store register variants … … 184 198 DIS_ARMV8_DECODE_MAP_DEFINE_BEGIN(LdStRegOp2_11_1) 185 199 DIS_ARMV8_DECODE_MAP_INVALID_ENTRY, /** @todo */ 186 DIS_ARMV8_DECODE_MAP_ INVALID_ENTRY, /** @todo */200 DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegPac), 187 201 DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegOff), 188 DIS_ARMV8_DECODE_MAP_ INVALID_ENTRY, /** @todo */202 DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegPac), 189 203 DIS_ARMV8_DECODE_MAP_DEFINE_END(LdStRegOp2_11_1, RT_BIT_32(10) | RT_BIT_32(11), 10); 190 204 -
trunk/src/VBox/Disassembler/testcase/tstDisasmArmv8-1-asm.S
r106757 r106758 1080 1080 ldrsw x0, [sp, w2, SXTW #2] 1081 1081 1082 1083 ; FEAT_PAuth memory loads 1084 1085 ldraa x0, [x1] 1086 ldraa x0, [x1, #-1024] 1087 ldraa x0, [x1, #-4096] 1088 ldraa x0, [x1, #4088] 1089 1090 ldraa xzr, [sp] 1091 ldraa xzr, [sp, #-1024] 1092 ldraa xzr, [sp, #-4096] 1093 ldraa xzr, [sp, #4088] 1094 1095 ldraa x0, [x1, #0]! 1096 ldraa x0, [x1, #-1024]! 1097 ldraa x0, [x1, #-4096]! 1098 ldraa x0, [x1, #4088]! 1099 1100 ldraa xzr, [sp, #0]! 1101 ldraa xzr, [sp, #-1024]! 1102 ldraa xzr, [sp, #-4096]! 1103 ldraa xzr, [sp, #4088]! 1104 1105 1106 ldrab x0, [x1] 1107 ldrab x0, [x1, #-1024] 1108 ldrab x0, [x1, #-4096] 1109 ldrab x0, [x1, #4088] 1110 1111 ldrab xzr, [sp] 1112 ldrab xzr, [sp, #-1024] 1113 ldrab xzr, [sp, #-4096] 1114 ldrab xzr, [sp, #4088] 1115 1116 ldrab x0, [x1, #0]! 1117 ldrab x0, [x1, #-1024]! 1118 ldrab x0, [x1, #-4096]! 1119 ldrab x0, [x1, #4088]! 1120 1121 ldrab xzr, [sp, #0]! 1122 ldrab xzr, [sp, #-1024]! 1123 ldrab xzr, [sp, #-4096]! 1124 ldrab xzr, [sp, #4088]! 1125 1126 1082 1127 ; Memory stores 1083 1128 strb w0, [x28]
Note:
See TracChangeset
for help on using the changeset viewer.