Changeset 106772 in vbox
- Timestamp:
- Oct 29, 2024 2:07:47 PM (4 months ago)
- svn:sync-xref-src-repo-rev:
- 165661
- Location:
- trunk/src/VBox/Disassembler
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Disassembler/DisasmTables-armv8-a64-ld-st.cpp.h
r106770 r106772 1116 1116 1117 1117 /** 1118 * C4.1.94 - Loads and Stores 1118 * C4.1.94 - Loads and Stores - Compare and swap 1119 1119 * 1120 1120 * Differentiate between Load register (literal) and the other classes based on op2<14> (bit 24). … … 1124 1124 DIS_ARMV8_DECODE_MAP_ENTRY(LdStBit28_1_Bit29_0_Bit24_1), 1125 1125 DIS_ARMV8_DECODE_MAP_DEFINE_END_SINGLE_BIT(LdStBit28_1_Bit29_0, 24); 1126 1127 1128 /* C4.1.94.14 - Loads and Stores - Compare and swap */ 1129 DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER(LdStCas) 1130 DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr32, 16, 5, 0 /*idxParam*/), 1131 DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr32, 0, 5, 1 /*idxParam*/), 1132 DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp, 5, 5, 2 /*idxParam*/), 1133 DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_DECODER_ALTERNATIVE(LdStCas64) 1134 DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr64, 16, 5, 0 /*idxParam*/), 1135 DIS_ARMV8_INSN_DECODE(kDisParmParseGprZr64, 0, 5, 1 /*idxParam*/), 1136 DIS_ARMV8_INSN_DECODE(kDisParmParseAddrGprSp, 5, 5, 2 /*idxParam*/), 1137 DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_BEGIN(LdStCas) 1138 DIS_ARMV8_OP( 0x08a07c00, "casb", OP_ARMV8_A64_CASB, DISOPTYPE_HARMLESS), 1139 DIS_ARMV8_OP( 0x08a0fc00, "caslb", OP_ARMV8_A64_CASLB, DISOPTYPE_HARMLESS), 1140 DIS_ARMV8_OP( 0x08e07c00, "casab", OP_ARMV8_A64_CASAB, DISOPTYPE_HARMLESS), 1141 DIS_ARMV8_OP( 0x08e0fc00, "casalb", OP_ARMV8_A64_CASALB, DISOPTYPE_HARMLESS), 1142 DIS_ARMV8_OP( 0x48a07c00, "cash", OP_ARMV8_A64_CASH, DISOPTYPE_HARMLESS), 1143 DIS_ARMV8_OP( 0x48a0fc00, "caslh", OP_ARMV8_A64_CASLH, DISOPTYPE_HARMLESS), 1144 DIS_ARMV8_OP( 0x48e07c00, "casah", OP_ARMV8_A64_CASAH, DISOPTYPE_HARMLESS), 1145 DIS_ARMV8_OP( 0x48e0fc00, "casalh", OP_ARMV8_A64_CASALH, DISOPTYPE_HARMLESS), 1146 DIS_ARMV8_OP( 0x88a07c00, "cas", OP_ARMV8_A64_CAS, DISOPTYPE_HARMLESS), 1147 DIS_ARMV8_OP( 0x88a0fc00, "casl", OP_ARMV8_A64_CASL, DISOPTYPE_HARMLESS), 1148 DIS_ARMV8_OP( 0x88e07c00, "casa", OP_ARMV8_A64_CASA, DISOPTYPE_HARMLESS), 1149 DIS_ARMV8_OP( 0x88e0fc00, "casal", OP_ARMV8_A64_CASAL, DISOPTYPE_HARMLESS), 1150 DIS_ARMV8_OP_ALT_DECODE(0xc8a07c00, "cas", OP_ARMV8_A64_CAS, DISOPTYPE_HARMLESS, LdStCas64), 1151 DIS_ARMV8_OP_ALT_DECODE(0xc8a0fc00, "casl", OP_ARMV8_A64_CASL, DISOPTYPE_HARMLESS, LdStCas64), 1152 DIS_ARMV8_OP_ALT_DECODE(0xc8e07c00, "casa", OP_ARMV8_A64_CASA, DISOPTYPE_HARMLESS, LdStCas64), 1153 DIS_ARMV8_OP_ALT_DECODE(0xc8e0fc00, "casal", OP_ARMV8_A64_CASAL, DISOPTYPE_HARMLESS, LdStCas64), 1154 DIS_ARMV8_DECODE_INSN_CLASS_DEFINE_END(LdStCas, 0xffe0fc00 /*fFixedInsn*/, 1155 kDisArmV8OpcDecodeCollate, 1156 /* o0 */ RT_BIT_32(15) 1157 /* L */ | RT_BIT_32(22) 1158 /* size */ | RT_BIT_32(30) | RT_BIT_32(31), 15); 1159 1160 1161 /** 1162 * C4.1.94 - Loads and Stores 1163 * 1164 * Differentiate between Load/Store ordered and Compare and swap instruction classes based on op2<11> (bit 21). 1165 */ 1166 DIS_ARMV8_DECODE_MAP_DEFINE_BEGIN(LdStOrdered_Cas) 1167 DIS_ARMV8_DECODE_MAP_INVALID_ENTRY, /** @todo DIS_ARMV8_DECODE_MAP_ENTRY(LdStOrdered), */ 1168 DIS_ARMV8_DECODE_MAP_ENTRY(LdStCas), 1169 DIS_ARMV8_DECODE_MAP_DEFINE_END_SINGLE_BIT(LdStOrdered_Cas, 21); 1170 1171 1172 /** 1173 * C4.1.94 - Loads and Stores 1174 * 1175 * Differentiate between Advanced SIMD load/stores and the rest based on op2<13> (bit 23). 1176 */ 1177 DIS_ARMV8_DECODE_MAP_DEFINE_BEGIN(LdStBit28_1_Bit29_0_Bit26_1) 1178 DIS_ARMV8_DECODE_MAP_INVALID_ENTRY, /** @todo Load/store exclusive register */ 1179 DIS_ARMV8_DECODE_MAP_ENTRY(LdStOrdered_Cas), 1180 DIS_ARMV8_DECODE_MAP_DEFINE_END_SINGLE_BIT(LdStBit28_1_Bit29_0_Bit26_1, 23); 1181 1182 1183 /** 1184 * C4.1.94 - Loads and Stores 1185 * 1186 * Differentiate between Advanced SIMD load/stores and the rest based on op1 (bit 26). 1187 */ 1188 DIS_ARMV8_DECODE_MAP_DEFINE_BEGIN(LdStBit28_0_Bit29_0) 1189 DIS_ARMV8_DECODE_MAP_ENTRY(LdStBit28_1_Bit29_0_Bit26_1), 1190 DIS_ARMV8_DECODE_MAP_INVALID_ENTRY, /** @todo Advanced SIMD load/store multiple structures (post-indexed) / Advanced SIMD load/store single structure / Advanced SIMD load/store single structure (post-indexed) */ 1191 DIS_ARMV8_DECODE_MAP_DEFINE_END_SINGLE_BIT(LdStBit28_0_Bit29_0, 26); 1126 1192 1127 1193 … … 1142 1208 */ 1143 1209 DIS_ARMV8_DECODE_MAP_DEFINE_BEGIN(LdStOp0Lo) 1144 DIS_ARMV8_DECODE_MAP_ INVALID_ENTRY, /** @todo */1210 DIS_ARMV8_DECODE_MAP_ENTRY(LdStBit28_0_Bit29_0), 1145 1211 DIS_ARMV8_DECODE_MAP_ENTRY(LdStBit28_1_Bit29_0), 1146 1212 DIS_ARMV8_DECODE_MAP_ENTRY(LdStRegPair), -
trunk/src/VBox/Disassembler/testcase/tstDisasmArmv8-1-asm.S
r106770 r106772 28 28 .private_extern _TestProcA64 29 29 _TestProcA64: 30 31 casb w0, w1, [x0] 30 32 31 33 ; Miscellaneous instructions without a parameter … … 3707 3709 3708 3710 ; 3711 ; Compare and swap 3712 ; 3713 3714 casb w0, w1, [x0] 3715 casb wzr, wzr, [sp] 3716 3717 caslb w0, w1, [x0] 3718 caslb wzr, wzr, [sp] 3719 3720 casab w0, w1, [x0] 3721 casab wzr, wzr, [sp] 3722 3723 casalb w0, w1, [x0] 3724 casalb wzr, wzr, [sp] 3725 3726 cash w0, w1, [x0] 3727 cash wzr, wzr, [sp] 3728 3729 caslh w0, w1, [x0] 3730 caslh wzr, wzr, [sp] 3731 3732 casah w0, w1, [x0] 3733 casah wzr, wzr, [sp] 3734 3735 casalh w0, w1, [x0] 3736 casalh wzr, wzr, [sp] 3737 3738 cas w0, w1, [x0] 3739 cas wzr, wzr, [sp] 3740 3741 casl w0, w1, [x0] 3742 casl wzr, wzr, [sp] 3743 3744 casa w0, w1, [x0] 3745 casa wzr, wzr, [sp] 3746 3747 casal w0, w1, [x0] 3748 casal wzr, wzr, [sp] 3749 3750 cas x0, x1, [x0] 3751 cas xzr, xzr, [sp] 3752 3753 casl x0, x1, [x0] 3754 casl xzr, xzr, [sp] 3755 3756 casa x0, x1, [x0] 3757 casa xzr, xzr, [sp] 3758 3759 casal x0, x1, [x0] 3760 casal xzr, xzr, [sp] 3761 3762 ; 3709 3763 ; Keep last so the testcase can catch errors in 3710 3764 ; the disassembly of the last instruction.
Note:
See TracChangeset
for help on using the changeset viewer.