Changeset 102426 in vbox
- Timestamp:
- Dec 1, 2023 11:09:09 PM (17 months ago)
- svn:sync-xref-src-repo-rev:
- 160569
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h
r102425 r102426 12150 12150 { 12151 12151 IEMOP_MNEMONIC(fisttp_m16i, "fisttp m16i"); 12152 IEM_MC_BEGIN(3, 2, 0, 0);12152 IEM_MC_BEGIN(3, 3, 0, 0); 12153 12153 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 12154 IEM_MC_LOCAL(uint16_t, u16Fsw);12155 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Fsw, u16Fsw, 0);12156 IEM_MC_ARG(int16_t *, pi16Dst, 1);12157 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2);12158 12159 12154 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 12155 12160 12156 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12161 12157 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 12162 12158 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 12163 12164 IEM_MC_MEM_MAP(pi16Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/);12165 12159 IEM_MC_PREPARE_FPU_USAGE(); 12160 12161 IEM_MC_LOCAL(uint8_t, bUnmapInfo); 12162 IEM_MC_ARG(int16_t *, pi16Dst, 1); 12163 IEM_MC_MEM_MAP_I16_WO(pi16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 12164 12165 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2); 12166 12166 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 12167 IEM_MC_LOCAL(uint16_t, u16Fsw); 12168 IEM_MC_ARG_LOCAL_REF(uint16_t *,pu16Fsw, u16Fsw, 0); 12167 12169 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fistt_r80_to_i16, pu16Fsw, pi16Dst, pr80Value); 12168 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE (pi16Dst, IEM_ACCESS_DATA_W, u16Fsw);12170 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE_WO(pi16Dst, bUnmapInfo, u16Fsw); 12169 12171 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 12170 12172 } IEM_MC_ELSE() { 12171 12173 IEM_MC_IF_FCW_IM() { 12172 12174 IEM_MC_STORE_MEM_I16_CONST_BY_REF(pi16Dst, INT16_MIN /* (integer indefinite) */); 12173 IEM_MC_MEM_COMMIT_AND_UNMAP(pi16Dst, IEM_ACCESS_DATA_W); 12175 IEM_MC_MEM_COMMIT_AND_UNMAP_WO(pi16Dst, bUnmapInfo); 12176 } IEM_MC_ELSE() { 12177 IEM_MC_MEM_ROLLBACK_AND_UNMAP_WO(pi16Dst, bUnmapInfo); 12174 12178 } IEM_MC_ENDIF(); 12175 12179 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); … … 12185 12189 { 12186 12190 IEMOP_MNEMONIC(fist_m16i, "fist m16i"); 12187 IEM_MC_BEGIN(3, 2, 0, 0);12191 IEM_MC_BEGIN(3, 3, 0, 0); 12188 12192 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 12189 IEM_MC_LOCAL(uint16_t, u16Fsw);12190 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Fsw, u16Fsw, 0);12191 IEM_MC_ARG(int16_t *, pi16Dst, 1);12192 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2);12193 12194 12193 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 12194 12195 12195 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12196 12196 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 12197 12197 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 12198 12199 IEM_MC_MEM_MAP(pi16Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/);12200 12198 IEM_MC_PREPARE_FPU_USAGE(); 12199 12200 IEM_MC_LOCAL(uint8_t, bUnmapInfo); 12201 IEM_MC_ARG(int16_t *, pi16Dst, 1); 12202 IEM_MC_MEM_MAP_I16_WO(pi16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 12203 12204 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2); 12201 12205 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 12206 IEM_MC_LOCAL(uint16_t, u16Fsw); 12207 IEM_MC_ARG_LOCAL_REF(uint16_t *,pu16Fsw, u16Fsw, 0); 12202 12208 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i16, pu16Fsw, pi16Dst, pr80Value); 12203 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE (pi16Dst, IEM_ACCESS_DATA_W, u16Fsw);12209 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE_WO(pi16Dst, bUnmapInfo, u16Fsw); 12204 12210 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 12205 12211 } IEM_MC_ELSE() { 12206 12212 IEM_MC_IF_FCW_IM() { 12207 12213 IEM_MC_STORE_MEM_I16_CONST_BY_REF(pi16Dst, INT16_MIN /* (integer indefinite) */); 12208 IEM_MC_MEM_COMMIT_AND_UNMAP(pi16Dst, IEM_ACCESS_DATA_W); 12214 IEM_MC_MEM_COMMIT_AND_UNMAP_WO(pi16Dst, bUnmapInfo); 12215 } IEM_MC_ELSE() { 12216 IEM_MC_MEM_ROLLBACK_AND_UNMAP_WO(pi16Dst, bUnmapInfo); 12209 12217 } IEM_MC_ENDIF(); 12210 12218 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); … … 12220 12228 { 12221 12229 IEMOP_MNEMONIC(fistp_m16i, "fistp m16i"); 12222 IEM_MC_BEGIN(3, 2, 0, 0);12230 IEM_MC_BEGIN(3, 3, 0, 0); 12223 12231 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 12224 IEM_MC_LOCAL(uint16_t, u16Fsw);12225 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Fsw, u16Fsw, 0);12226 IEM_MC_ARG(int16_t *, pi16Dst, 1);12227 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2);12228 12229 12232 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 12233 12230 12234 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12231 12235 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 12232 12236 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 12233 12234 IEM_MC_MEM_MAP(pi16Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/);12235 12237 IEM_MC_PREPARE_FPU_USAGE(); 12238 12239 IEM_MC_LOCAL(uint8_t, bUnmapInfo); 12240 IEM_MC_ARG(int16_t *, pi16Dst, 1); 12241 IEM_MC_MEM_MAP_I16_WO(pi16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 12242 12243 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2); 12236 12244 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 12245 IEM_MC_LOCAL(uint16_t, u16Fsw); 12246 IEM_MC_ARG_LOCAL_REF(uint16_t *,pu16Fsw, u16Fsw, 0); 12237 12247 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i16, pu16Fsw, pi16Dst, pr80Value); 12238 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE (pi16Dst, IEM_ACCESS_DATA_W, u16Fsw);12248 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE_WO(pi16Dst, bUnmapInfo, u16Fsw); 12239 12249 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 12240 12250 } IEM_MC_ELSE() { 12241 12251 IEM_MC_IF_FCW_IM() { 12242 12252 IEM_MC_STORE_MEM_I16_CONST_BY_REF(pi16Dst, INT16_MIN /* (integer indefinite) */); 12243 IEM_MC_MEM_COMMIT_AND_UNMAP(pi16Dst, IEM_ACCESS_DATA_W); 12253 IEM_MC_MEM_COMMIT_AND_UNMAP_WO(pi16Dst, bUnmapInfo); 12254 } IEM_MC_ELSE() { 12255 IEM_MC_MEM_ROLLBACK_AND_UNMAP_WO(pi16Dst, bUnmapInfo); 12244 12256 } IEM_MC_ENDIF(); 12245 12257 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); … … 12354 12366 { 12355 12367 IEMOP_MNEMONIC(fistp_m64i, "fistp m64i"); 12356 IEM_MC_BEGIN(3, 2, 0, 0);12368 IEM_MC_BEGIN(3, 3, 0, 0); 12357 12369 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 12358 IEM_MC_LOCAL(uint16_t, u16Fsw);12359 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16Fsw, u16Fsw, 0);12360 IEM_MC_ARG(int64_t *, pi64Dst, 1);12361 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2);12362 12363 12370 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 12371 12364 12372 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12365 12373 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 12366 12374 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 12367 12368 IEM_MC_MEM_MAP(pi64Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/);12369 12375 IEM_MC_PREPARE_FPU_USAGE(); 12376 12377 IEM_MC_LOCAL(uint8_t, bUnmapInfo); 12378 IEM_MC_ARG(int64_t *, pi64Dst, 1); 12379 IEM_MC_MEM_MAP_I64_WO(pi64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 12380 12381 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2); 12370 12382 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 12383 IEM_MC_LOCAL(uint16_t, u16Fsw); 12384 IEM_MC_ARG_LOCAL_REF(uint16_t *,pu16Fsw, u16Fsw, 0); 12371 12385 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i64, pu16Fsw, pi64Dst, pr80Value); 12372 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE (pi64Dst, IEM_ACCESS_DATA_W, u16Fsw);12386 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE_WO(pi64Dst, bUnmapInfo, u16Fsw); 12373 12387 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); 12374 12388 } IEM_MC_ELSE() { 12375 12389 IEM_MC_IF_FCW_IM() { 12376 12390 IEM_MC_STORE_MEM_I64_CONST_BY_REF(pi64Dst, INT64_MIN /* (integer indefinite) */); 12377 IEM_MC_MEM_COMMIT_AND_UNMAP(pi64Dst, IEM_ACCESS_DATA_W); 12391 IEM_MC_MEM_COMMIT_AND_UNMAP_WO(pi64Dst, bUnmapInfo); 12392 } IEM_MC_ELSE() { 12393 IEM_MC_MEM_ROLLBACK_AND_UNMAP_WO(pi64Dst, bUnmapInfo); 12378 12394 } IEM_MC_ENDIF(); 12379 12395 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst, pVCpu->iem.s.uFpuOpcode); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstPython.py
r102425 r102426 3028 3028 'IEM_MC_MEM_MAP': (McBlock.parseMcGeneric, True, False, ), 3029 3029 'IEM_MC_MEM_MAP_EX': (McBlock.parseMcGeneric, True, False, ), 3030 'IEM_MC_MEM_MAP_I16_WO': (McBlock.parseMcGeneric, True, False, ), 3030 3031 'IEM_MC_MEM_MAP_I32_WO': (McBlock.parseMcGeneric, True, False, ), 3031 3032 'IEM_MC_MEM_MAP_I64_WO': (McBlock.parseMcGeneric, True, False, ), -
trunk/src/VBox/VMM/VMMAll/IEMAllN8vePython.py
r102425 r102426 146 146 'IEM_MC_MEM_FLAT_MAP_EX': (None, True, False, ), 147 147 'IEM_MC_MEM_FLAT_MAP': (None, True, False, ), 148 'IEM_MC_MEM_FLAT_MAP_I16_WO': (None, True, False, ), 148 149 'IEM_MC_MEM_FLAT_MAP_I32_WO': (None, True, False, ), 149 150 'IEM_MC_MEM_FLAT_MAP_I64_WO': (None, True, False, ), -
trunk/src/VBox/VMM/VMMAll/IEMAllThrdPython.py
r102425 r102426 705 705 'IEM_MC_STORE_MEM_U256_ALIGN_AVX': ( 0, 'IEM_MC_STORE_MEM_FLAT_U256_ALIGN_AVX' ), 706 706 'IEM_MC_MEM_MAP': ( 2, 'IEM_MC_MEM_FLAT_MAP' ), 707 'IEM_MC_MEM_MAP_I16_WO': ( 2, 'IEM_MC_MEM_FLAT_MAP_I16_WO' ), 707 708 'IEM_MC_MEM_MAP_I32_WO': ( 2, 'IEM_MC_MEM_FLAT_MAP_I32_WO' ), 708 709 'IEM_MC_MEM_MAP_I64_WO': ( 2, 'IEM_MC_MEM_FLAT_MAP_I64_WO' ), -
trunk/src/VBox/VMM/include/IEMMc.h
r102425 r102426 1801 1801 # define IEM_MC_MEM_FLAT_MAP_U16_RO(a_pu16Mem, a_bUnmapInfo, a_GCPtrMem) \ 1802 1802 (a_pu16Mem) = iemMemFlatMapDataU16RoJmp(pVCpu, &(a_bUnmapInfo), (a_GCPtrMem)) 1803 #endif 1804 1805 /** int16_t alias. */ 1806 #ifndef IEM_WITH_SETJMP 1807 # define IEM_MC_MEM_MAP_I16_WO(a_pi16Mem, a_bUnmapInfo, a_iSeg, a_GCPtrMem) \ 1808 IEM_MC_MEM_MAP_U16_WO(a_pi16Mem, a_bUnmapInfo, a_iSeg, a_GCPtrMem) 1809 #else 1810 # define IEM_MC_MEM_MAP_I16_WO(a_pi16Mem, a_bUnmapInfo, a_iSeg, a_GCPtrMem) \ 1811 (a_pi16Mem) = (int16_t *)iemMemMapDataU16WoJmp(pVCpu, &(a_bUnmapInfo), (a_iSeg), (a_GCPtrMem)) 1812 #endif 1813 1814 /** Flat int16_t alias. */ 1815 #ifndef IEM_WITH_SETJMP 1816 # define IEM_MC_MEM_FLAT_MAP_I16_WO(a_pi16Mem, a_bUnmapInfo, a_GCPtrMem) \ 1817 IEM_MC_MEM_FLAT_MAP_U16_WO(a_pi16Mem, a_bUnmapInfo, a_GCPtrMem) 1818 #else 1819 # define IEM_MC_MEM_FLAT_MAP_I16_WO(a_pi16Mem, a_bUnmapInfo, a_GCPtrMem) \ 1820 (a_pi16Mem) = (int16_t *)iemMemFlatMapDataU16WoJmp(pVCpu, &(a_bUnmapInfo), (a_GCPtrMem)) 1803 1821 #endif 1804 1822 -
trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp
r102425 r102426 930 930 #define IEM_MC_POP_U64(a_pu64Value) do { CHK_VAR(a_pu64Value); (void)fMcBegin; } while (0) 931 931 932 #define IEM_MC_MEM_MAP_I16_WO(a_pi16Mem, a_bUnmapInfo, a_iSeg, a_GCPtrMem) do { CHK_VAR(a_pi16Mem); (a_pi16Mem) = NULL; CHK_PTYPE(int16_t *, a_pi16Mem); CHK_VAR(a_bUnmapInfo); CHK_TYPE(uint8_t, a_bUnmapInfo); a_bUnmapInfo = 1; CHK_GCPTR(a_GCPtrMem); CHK_VAR(a_GCPtrMem); CHK_SEG_IDX(a_iSeg); (void)fMcBegin; } while (0) 932 933 #define IEM_MC_MEM_MAP_I32_WO(a_pi32Mem, a_bUnmapInfo, a_iSeg, a_GCPtrMem) do { CHK_VAR(a_pi32Mem); (a_pi32Mem) = NULL; CHK_PTYPE(int32_t *, a_pi32Mem); CHK_VAR(a_bUnmapInfo); CHK_TYPE(uint8_t, a_bUnmapInfo); a_bUnmapInfo = 1; CHK_GCPTR(a_GCPtrMem); CHK_VAR(a_GCPtrMem); CHK_SEG_IDX(a_iSeg); (void)fMcBegin; } while (0) 933 934 #define IEM_MC_MEM_MAP_I64_WO(a_pi64Mem, a_bUnmapInfo, a_iSeg, a_GCPtrMem) do { CHK_VAR(a_pi64Mem); (a_pi64Mem) = NULL; CHK_PTYPE(int64_t *, a_pi64Mem); CHK_VAR(a_bUnmapInfo); CHK_TYPE(uint8_t, a_bUnmapInfo); a_bUnmapInfo = 1; CHK_GCPTR(a_GCPtrMem); CHK_VAR(a_GCPtrMem); CHK_SEG_IDX(a_iSeg); (void)fMcBegin; } while (0)
Note:
See TracChangeset
for help on using the changeset viewer.