Changeset 106777 in vbox for trunk/src/VBox/Disassembler
- Timestamp:
- Oct 29, 2024 2:40:06 PM (3 months ago)
- Location:
- trunk/src/VBox/Disassembler
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Disassembler/DisasmTables-armv8-a64-ld-st.cpp.h
r106773 r106777 1170 1170 1171 1171 1172 /* C4.1.94.14 - Loads and Stores - Compare and swap */ 1173 DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER(LdStExclusiveReg) 1174 DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr32, 16, 5, 0 /*idxParam*/), 1175 DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr32, 0, 5, 1 /*idxParam*/), 1176 DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp, 5, 5, 2 /*idxParam*/), 1177 DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER_ALTERNATIVE(LdStExclusiveRegLd32) 1178 DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr32, 0, 5, 0 /*idxParam*/), 1179 DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp, 5, 5, 1 /*idxParam*/), 1180 DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER_ALTERNATIVE(LdStExclusiveRegLd64) 1181 DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr64, 0, 5, 0 /*idxParam*/), 1182 DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp, 5, 5, 1 /*idxParam*/), 1183 DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER_ALTERNATIVE(LdStExclusiveRegSt64) 1184 DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr32, 16, 5, 0 /*idxParam*/), 1185 DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr64, 0, 5, 1 /*idxParam*/), 1186 DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp, 5, 5, 2 /*idxParam*/), 1187 DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_BEGIN(LdStExclusiveReg) 1188 DIS_ARMV8_OP( 0x08000000, "stxrb", OP_ARMV8_A64_STXRB, DISOPTYPE_HARMLESS), 1189 DIS_ARMV8_OP( 0x08008000, "stlxrb", OP_ARMV8_A64_STLXRB, DISOPTYPE_HARMLESS), 1190 DIS_ARMV8_OP_ALT_DECODE(0x08400000, "ldxrb", OP_ARMV8_A64_LDXRB, DISOPTYPE_HARMLESS, LdStExclusiveRegLd32), 1191 DIS_ARMV8_OP_ALT_DECODE(0x08408000, "ldaxrb", OP_ARMV8_A64_LDAXRB, DISOPTYPE_HARMLESS, LdStExclusiveRegLd32), 1192 DIS_ARMV8_OP( 0x48000000, "stxrh", OP_ARMV8_A64_STXRH, DISOPTYPE_HARMLESS), 1193 DIS_ARMV8_OP( 0x48008000, "stlxrh", OP_ARMV8_A64_STLXRH, DISOPTYPE_HARMLESS), 1194 DIS_ARMV8_OP_ALT_DECODE(0x48400000, "ldxrh", OP_ARMV8_A64_LDXRH, DISOPTYPE_HARMLESS, LdStExclusiveRegLd32), 1195 DIS_ARMV8_OP_ALT_DECODE(0x48408000, "ldaxrh", OP_ARMV8_A64_LDAXRH, DISOPTYPE_HARMLESS, LdStExclusiveRegLd32), 1196 DIS_ARMV8_OP( 0x88000000, "stxr", OP_ARMV8_A64_STXR, DISOPTYPE_HARMLESS), 1197 DIS_ARMV8_OP( 0x88008000, "stlxr", OP_ARMV8_A64_STLXR, DISOPTYPE_HARMLESS), 1198 DIS_ARMV8_OP_ALT_DECODE(0x88400000, "ldxr", OP_ARMV8_A64_LDXR, DISOPTYPE_HARMLESS, LdStExclusiveRegLd32), 1199 DIS_ARMV8_OP_ALT_DECODE(0x88408000, "ldaxr", OP_ARMV8_A64_LDAXR, DISOPTYPE_HARMLESS, LdStExclusiveRegLd32), 1200 DIS_ARMV8_OP_ALT_DECODE(0xc8000000, "stxr", OP_ARMV8_A64_STXR, DISOPTYPE_HARMLESS, LdStExclusiveRegSt64), 1201 DIS_ARMV8_OP_ALT_DECODE(0xc8008000, "stlxr", OP_ARMV8_A64_STLXR, DISOPTYPE_HARMLESS, LdStExclusiveRegSt64), 1202 DIS_ARMV8_OP_ALT_DECODE(0xc8400000, "ldxr", OP_ARMV8_A64_LDXR, DISOPTYPE_HARMLESS, LdStExclusiveRegLd64), 1203 DIS_ARMV8_OP_ALT_DECODE(0xc8408000, "ldaxr", OP_ARMV8_A64_LDAXR, DISOPTYPE_HARMLESS, LdStExclusiveRegLd64), 1204 DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_END(LdStExclusiveReg, 0xffe08000 /*fFixedInsn*/, 1205 kDisArmV8OpcDecodeCollate, 1206 /* o0 */ RT_BIT_32(15) 1207 /* L */ | RT_BIT_32(22) 1208 /* size */ | RT_BIT_32(30) | RT_BIT_32(31), 15); 1209 1210 1172 1211 /** 1173 1212 * C4.1.94 - Loads and Stores 1174 1213 * 1214 * Differentiate between Load/Store exclusive register and pair instruction classes based on op2<11> (bit 21). 1215 */ 1216 DIS_ARMV8_DECODE_MAP_DEFINE_BEGIN(LdStExclusive) 1217 DIS_ARMV8_DECODE_MAP_ENTRY(LdStExclusiveReg), 1218 DIS_ARMV8_DECODE_MAP_INVALID_ENTRY, /** @todo DIS_ARMV8_DECODE_MAP_ENTRY(LdStExclusivePair), */ 1219 DIS_ARMV8_DECODE_MAP_DEFINE_END_SINGLE_BIT(LdStExclusive, 21); 1220 1221 1222 /** 1223 * C4.1.94 - Loads and Stores 1224 * 1175 1225 * Differentiate between Advanced SIMD load/stores and the rest based on op2<13> (bit 23). 1176 1226 */ 1177 1227 DIS_ARMV8_DECODE_MAP_DEFINE_BEGIN(LdStBit28_1_Bit29_0_Bit26_1) 1178 DIS_ARMV8_DECODE_MAP_ INVALID_ENTRY, /** @todo Load/store exclusive register */1228 DIS_ARMV8_DECODE_MAP_ENTRY(LdStExclusive), 1179 1229 DIS_ARMV8_DECODE_MAP_ENTRY(LdStOrdered_Cas), 1180 1230 DIS_ARMV8_DECODE_MAP_DEFINE_END_SINGLE_BIT(LdStBit28_1_Bit29_0_Bit26_1, 23); -
trunk/src/VBox/Disassembler/testcase/tstDisasmArmv8-1-asm.S
r106774 r106777 3759 3759 3760 3760 ; 3761 ; Load/store exclusive register 3762 ; 3763 3764 stxrb w0, w1, [x2] 3765 stxrb w0, wzr, [sp] 3766 stxrb wzr, w0, [sp] 3767 3768 stlxrb w0, w1, [x2] 3769 stlxrb w0, wzr, [sp] 3770 stlxrb wzr, w0, [sp] 3771 3772 ldxrb w0, [x2] 3773 ldxrb wzr, [sp] 3774 3775 ldaxrb w0, [x2] 3776 ldaxrb wzr, [sp] 3777 3778 stxrh w0, w1, [x2] 3779 stxrh w0, wzr, [sp] 3780 stxrh wzr, w0, [sp] 3781 3782 stlxrh w0, w1, [x2] 3783 stlxrh w0, wzr, [sp] 3784 stlxrh wzr, w0, [sp] 3785 3786 ldxrh w0, [x2] 3787 ldxrh wzr, [sp] 3788 3789 ldaxrh w0, [x2] 3790 ldaxrh wzr, [sp] 3791 3792 stxr w0, w1, [x2] 3793 stxr w0, wzr, [sp] 3794 stxr wzr, w0, [sp] 3795 3796 stlxr w0, w1, [x2] 3797 stlxr w0, wzr, [sp] 3798 stlxr wzr, w0, [sp] 3799 3800 ldxr w0, [x2] 3801 ldxr wzr, [sp] 3802 3803 ldaxr w0, [x2] 3804 ldaxr wzr, [sp] 3805 3806 stxr w0, x1, [x2] 3807 stxr w0, xzr, [sp] 3808 stxr wzr, x0, [sp] 3809 3810 stlxr w0, x1, [x2] 3811 stlxr w0, xzr, [sp] 3812 stlxr wzr, x0, [sp] 3813 3814 ldxr x0, [x2] 3815 ldxr xzr, [sp] 3816 3817 ldaxr x0, [x2] 3818 ldaxr xzr, [sp] 3819 3820 ; 3761 3821 ; Keep last so the testcase can catch errors in 3762 3822 ; the disassembly of the last instruction.
Note:
See TracChangeset
for help on using the changeset viewer.