Changeset 104195 in vbox for trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h
- Timestamp:
- Apr 5, 2024 2:45:23 PM (11 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h
r104117 r104195 91 91 IEM_MC_BEGIN(0, 0); \ 92 92 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 93 IEM_MC_ARG(uint8_t, u8Src, 1); \93 IEM_MC_ARG(uint8_t, u8Src, 2); \ 94 94 IEM_MC_FETCH_GREG_U8(u8Src, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 95 95 IEM_MC_NATIVE_IF(a_fRegRegNativeArchs) { \ … … 101 101 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 102 102 } IEM_MC_NATIVE_ELSE() { \ 103 IEM_MC_ARG(uint8_t *, pu8Dst, 0); \103 IEM_MC_ARG(uint8_t *, pu8Dst, 1); \ 104 104 IEM_MC_REF_GREG_U8(pu8Dst, IEM_GET_MODRM_RM(pVCpu, a_bRm)); \ 105 IEM_MC_ARG (uint32_t *, pEFlags, 2); \106 IEM_MC_ REF_EFLAGS(pEFlags); \107 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u8), pu8Dst, u8Src, pEFlags); \105 IEM_MC_ARG_EFLAGS( fEFlags, 0); \ 106 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u8), fEFlags, pu8Dst, u8Src); \ 107 IEM_MC_COMMIT_EFLAGS_OPT(fEFlagsRet); \ 108 108 } IEM_MC_NATIVE_ENDIF(); \ 109 109 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 114 114 /* \ 115 115 * We're accessing memory. \ 116 * Note! We're putting the eflags on the stack here so we can commit them \117 * after the memory. \118 116 */ \ 119 117 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK) || (pVCpu->iem.s.fExec & IEM_F_X86_DISREGARD_LOCK)) \ 120 118 { \ 121 119 IEM_MC_BEGIN(0, 0); \ 122 IEM_MC_ARG(uint8_t *, pu8Dst, 0); \ 123 IEM_MC_ARG(uint8_t, u8Src, 1); \ 124 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 125 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 126 \ 120 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 127 121 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, a_bRm, 0); \ 128 122 IEMOP_HLP_DONE_DECODING(); \ 123 \ 124 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 125 IEM_MC_ARG(uint8_t *, pu8Dst, 1); \ 129 126 IEM_MC_MEM_MAP_U8_RW(pu8Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 127 IEM_MC_ARG(uint8_t, u8Src, 2); \ 130 128 IEM_MC_FETCH_GREG_U8(u8Src, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 131 IEM_MC_ARG_ LOCAL_EFLAGS(pEFlags, EFlags, 2); \132 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u8), pu8Dst, u8Src, pEFlags); \129 IEM_MC_ARG_EFLAGS( fEFlags, 0); \ 130 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u8), fEFlags, pu8Dst, u8Src); \ 133 131 \ 134 132 IEM_MC_MEM_COMMIT_AND_UNMAP_RW(bUnmapInfo); \ 135 IEM_MC_COMMIT_EFLAGS( EFlags); \133 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 136 134 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 137 135 IEM_MC_END(); \ … … 140 138 { \ 141 139 IEM_MC_BEGIN(0, 0); \ 142 IEM_MC_ARG(uint8_t *, pu8Dst, 0); \143 IEM_MC_ARG(uint8_t, u8Src, 1); \144 140 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 145 IEM_MC_LOCAL(uint8_t, bMapInfoDst); \146 \147 141 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, a_bRm, 0); \ 148 142 IEMOP_HLP_DONE_DECODING(); \ 143 \ 144 IEM_MC_LOCAL(uint8_t, bMapInfoDst); \ 145 IEM_MC_ARG(uint8_t *, pu8Dst, 1); \ 149 146 IEM_MC_MEM_MAP_U8_ATOMIC(pu8Dst, bMapInfoDst, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 147 IEM_MC_ARG(uint8_t, u8Src, 2); \ 150 148 IEM_MC_FETCH_GREG_U8(u8Src, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 151 IEM_MC_ARG_ LOCAL_EFLAGS(pEFlags, EFlags, 2); \152 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u8_locked), pu8Dst, u8Src, pEFlags); \149 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 150 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u8_locked), fEFlagsIn, pu8Dst, u8Src); \ 153 151 \ 154 152 IEM_MC_MEM_COMMIT_AND_UNMAP_ATOMIC(bMapInfoDst); \ 155 IEM_MC_COMMIT_EFLAGS( EFlags); \153 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 156 154 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 157 155 IEM_MC_END(); \ … … 172 170 IEM_MC_BEGIN(0, 0); \ 173 171 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 174 IEM_MC_ARG(uint8_t, u8Src, 1); \172 IEM_MC_ARG(uint8_t, u8Src, 2); \ 175 173 IEM_MC_FETCH_GREG_U8(u8Src, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 176 174 IEM_MC_NATIVE_IF(a_fNativeArchs) { \ … … 181 179 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 182 180 } IEM_MC_NATIVE_ELSE() { \ 183 IEM_MC_ARG(uint8_t *, pu8Dst, 0); \181 IEM_MC_ARG(uint8_t *, pu8Dst, 1); \ 184 182 IEM_MC_REF_GREG_U8(pu8Dst, IEM_GET_MODRM_RM(pVCpu, a_bRm)); \ 185 IEM_MC_ARG (uint32_t *, pEFlags, 2); \186 IEM_MC_ REF_EFLAGS(pEFlags); \187 IEM_MC_C ALL_VOID_AIMPL_3(a_fnNormalU8, pu8Dst, u8Src, pEFlags); \183 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 184 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, a_fnNormalU8, fEFlagsIn, pu8Dst, u8Src); \ 185 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 188 186 } IEM_MC_NATIVE_ENDIF(); \ 189 187 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 194 192 /* \ 195 193 * We're accessing memory. \ 196 * Note! We're putting the eflags on the stack here so we can commit them \197 * after the memory. \198 194 */ \ 199 195 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) \ … … 213 209 } IEM_MC_NATIVE_ELSE() { \ 214 210 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 215 IEM_MC_ARG(uint8_t const *, pu8Dst, 0); \211 IEM_MC_ARG(uint8_t const *, pu8Dst, 1); \ 216 212 IEM_MC_MEM_MAP_U8_RO(pu8Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 217 IEM_MC_ARG(uint8_t, u8Src, 1); \213 IEM_MC_ARG(uint8_t, u8Src, 2); \ 218 214 IEM_MC_FETCH_GREG_U8(u8Src, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 219 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags, 2); \220 IEM_MC_CALL_ VOID_AIMPL_3(a_fnNormalU8, pu8Dst, u8Src, pEFlags); \215 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 216 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, a_fnNormalU8, fEFlagsIn, pu8Dst, u8Src); \ 221 217 IEM_MC_MEM_COMMIT_AND_UNMAP_RO(bUnmapInfo); \ 222 IEM_MC_COMMIT_EFLAGS( EFlags); \218 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 223 219 } IEM_MC_NATIVE_ENDIF(); \ 224 220 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 246 242 IEM_MC_BEGIN(0, 0); \ 247 243 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 248 IEM_MC_ARG(uint8_t, u8Src, 1); \244 IEM_MC_ARG(uint8_t, u8Src, 2); \ 249 245 IEM_MC_FETCH_GREG_U8(u8Src, IEM_GET_MODRM_RM(pVCpu, a_bRm)); \ 250 246 IEM_MC_NATIVE_IF(a_fNativeArchs) { \ … … 256 252 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 257 253 } IEM_MC_NATIVE_ELSE() { \ 258 IEM_MC_ARG(uint8_t *, pu8Dst, 0); \254 IEM_MC_ARG(uint8_t *, pu8Dst, 1); \ 259 255 IEM_MC_REF_GREG_U8(pu8Dst, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 260 IEM_MC_ARG (uint32_t *, pEFlags, 2); \261 IEM_MC_ REF_EFLAGS(pEFlags); \262 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u8), pu8Dst, u8Src, pEFlags); \256 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 257 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u8), fEFlagsIn, pu8Dst, u8Src); \ 258 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 263 259 } IEM_MC_NATIVE_ENDIF(); \ 264 260 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 274 270 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, a_bRm, 0); \ 275 271 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 276 IEM_MC_ARG(uint8_t, u8Src, 1); \272 IEM_MC_ARG(uint8_t, u8Src, 2); \ 277 273 IEM_MC_FETCH_MEM_U8(u8Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 278 274 IEM_MC_NATIVE_IF(a_fNativeArchs) { \ … … 284 280 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 285 281 } IEM_MC_NATIVE_ELSE() { \ 286 IEM_MC_ARG(uint8_t *, pu8Dst, 0); \282 IEM_MC_ARG(uint8_t *, pu8Dst, 1); \ 287 283 IEM_MC_REF_GREG_U8(pu8Dst, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 288 IEM_MC_ARG (uint32_t *, pEFlags, 2); \289 IEM_MC_ REF_EFLAGS(pEFlags); \290 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u8), pu8Dst, u8Src, pEFlags); \284 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 285 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u8), fEFlagsIn, pu8Dst, u8Src); \ 286 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 291 287 } IEM_MC_NATIVE_ENDIF(); \ 292 288 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 306 302 IEM_MC_BEGIN(0, 0); \ 307 303 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 308 IEM_MC_ARG(uint8_t, u8Src, 1); \304 IEM_MC_ARG(uint8_t, u8Src, 2); \ 309 305 IEM_MC_FETCH_GREG_U8(u8Src, IEM_GET_MODRM_RM(pVCpu, a_bRm)); \ 310 306 IEM_MC_NATIVE_IF(a_fNativeArchs) { \ … … 315 311 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 316 312 } IEM_MC_NATIVE_ELSE() { \ 317 IEM_MC_ARG(uint8_t *, pu8Dst, 0); \313 IEM_MC_ARG(uint8_t *, pu8Dst, 1); \ 318 314 IEM_MC_REF_GREG_U8(pu8Dst, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 319 IEM_MC_ARG (uint32_t *, pEFlags, 2); \320 IEM_MC_ REF_EFLAGS(pEFlags); \321 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u8), pu8Dst, u8Src, pEFlags); \315 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 316 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u8), fEFlagsIn, pu8Dst, u8Src); \ 317 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 322 318 } IEM_MC_NATIVE_ENDIF(); \ 323 319 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 333 329 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, a_bRm, 0); \ 334 330 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 335 IEM_MC_ARG(uint8_t, u8Src, 1); \331 IEM_MC_ARG(uint8_t, u8Src, 2); \ 336 332 IEM_MC_FETCH_MEM_U8(u8Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 337 333 IEM_MC_NATIVE_IF(a_fNativeArchs) { \ … … 342 338 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 343 339 } IEM_MC_NATIVE_ELSE() { \ 344 IEM_MC_ARG(uint8_t *, pu8Dst, 0); \340 IEM_MC_ARG(uint8_t *, pu8Dst, 1); \ 345 341 IEM_MC_REF_GREG_U8(pu8Dst, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 346 IEM_MC_ARG (uint32_t *, pEFlags, 2); \347 IEM_MC_ REF_EFLAGS(pEFlags); \348 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u8), pu8Dst, u8Src, pEFlags); \342 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 343 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u8), fEFlagsIn, pu8Dst, u8Src); \ 344 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 349 345 } IEM_MC_NATIVE_ENDIF(); \ 350 346 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 369 365 IEM_MC_BEGIN(0, 0); \ 370 366 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 371 IEM_MC_ARG(uint16_t, u16Src, 1); \367 IEM_MC_ARG(uint16_t, u16Src, 2); \ 372 368 IEM_MC_FETCH_GREG_U16(u16Src, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 373 369 IEM_MC_NATIVE_IF(a_fRegRegNativeArchs) { \ 374 IEM_MC_LOCAL(uint16_t, 370 IEM_MC_LOCAL(uint16_t, u16Dst); \ 375 371 IEM_MC_FETCH_GREG_U16(u16Dst, IEM_GET_MODRM_RM(pVCpu, a_bRm)); \ 376 372 IEM_MC_LOCAL_EFLAGS(uEFlags); \ … … 379 375 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 380 376 } IEM_MC_NATIVE_ELSE() { \ 381 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \377 IEM_MC_ARG(uint16_t *, pu16Dst, 1); \ 382 378 IEM_MC_REF_GREG_U16(pu16Dst, IEM_GET_MODRM_RM(pVCpu, a_bRm)); \ 383 IEM_MC_ARG (uint32_t *, pEFlags, 2); \384 IEM_MC_ REF_EFLAGS(pEFlags); \385 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u16), pu16Dst, u16Src, pEFlags); \379 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 380 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u16), fEFlagsIn, pu16Dst, u16Src); \ 381 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 386 382 } IEM_MC_NATIVE_ENDIF(); \ 387 383 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 392 388 IEM_MC_BEGIN(IEM_MC_F_MIN_386, 0); \ 393 389 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 394 IEM_MC_ARG(uint32_t, u32Src, 1); \390 IEM_MC_ARG(uint32_t, u32Src, 2); \ 395 391 IEM_MC_FETCH_GREG_U32(u32Src, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 396 392 IEM_MC_NATIVE_IF(a_fRegRegNativeArchs) { \ 397 IEM_MC_LOCAL(uint32_t, 393 IEM_MC_LOCAL(uint32_t, u32Dst); \ 398 394 IEM_MC_FETCH_GREG_U32(u32Dst, IEM_GET_MODRM_RM(pVCpu, a_bRm)); \ 399 395 IEM_MC_LOCAL_EFLAGS(uEFlags); \ … … 402 398 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 403 399 } IEM_MC_NATIVE_ELSE() { \ 404 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \400 IEM_MC_ARG(uint32_t *, pu32Dst, 1); \ 405 401 IEM_MC_REF_GREG_U32(pu32Dst, IEM_GET_MODRM_RM(pVCpu, a_bRm)); \ 406 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 407 IEM_MC_REF_EFLAGS(pEFlags); \ 408 IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u32), pu32Dst, u32Src, pEFlags); \ 402 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 403 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u32), fEFlagsIn, pu32Dst, u32Src); \ 409 404 IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_RM(pVCpu, a_bRm)); \ 405 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 410 406 } IEM_MC_NATIVE_ENDIF(); \ 411 407 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 416 412 IEM_MC_BEGIN(IEM_MC_F_64BIT, 0); \ 417 413 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 418 IEM_MC_ARG(uint64_t, u64Src, 1); \414 IEM_MC_ARG(uint64_t, u64Src, 2); \ 419 415 IEM_MC_FETCH_GREG_U64(u64Src, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 420 416 IEM_MC_NATIVE_IF(a_fRegRegNativeArchs) { \ … … 426 422 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 427 423 } IEM_MC_NATIVE_ELSE() { \ 428 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \424 IEM_MC_ARG(uint64_t *, pu64Dst, 1); \ 429 425 IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_RM(pVCpu, a_bRm)); \ 430 IEM_MC_ARG (uint32_t *, pEFlags, 2); \431 IEM_MC_ REF_EFLAGS(pEFlags); \432 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u64), pu64Dst, u64Src, pEFlags); \426 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 427 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u64), fEFlagsIn, pu64Dst, u64Src); \ 428 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 433 429 } IEM_MC_NATIVE_ENDIF(); \ 434 430 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 443 439 /* \ 444 440 * We're accessing memory. \ 445 * Note! We're putting the eflags on the stack here so we can commit them \446 * after the memory. \447 441 */ \ 448 442 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK) || (pVCpu->iem.s.fExec & IEM_F_X86_DISREGARD_LOCK)) \ … … 452 446 case IEMMODE_16BIT: \ 453 447 IEM_MC_BEGIN(0, 0); \ 454 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \455 IEM_MC_ARG(uint16_t, u16Src, 1); \456 448 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 457 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \458 \459 449 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, a_bRm, 0); \ 460 450 IEMOP_HLP_DONE_DECODING(); \ 451 \ 452 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 453 IEM_MC_ARG(uint16_t *, pu16Dst, 1); \ 461 454 IEM_MC_MEM_MAP_U16_RW(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 455 IEM_MC_ARG(uint16_t, u16Src, 2); \ 462 456 IEM_MC_FETCH_GREG_U16(u16Src, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 463 IEM_MC_ARG_ LOCAL_EFLAGS(pEFlags, EFlags, 2); \464 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u16), pu16Dst, u16Src, pEFlags); \457 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 458 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u16), fEFlagsIn, pu16Dst, u16Src); \ 465 459 \ 466 460 IEM_MC_MEM_COMMIT_AND_UNMAP_RW(bUnmapInfo); \ 467 IEM_MC_COMMIT_EFLAGS( EFlags); \461 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 468 462 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 469 463 IEM_MC_END(); \ … … 472 466 case IEMMODE_32BIT: \ 473 467 IEM_MC_BEGIN(IEM_MC_F_MIN_386, 0); \ 474 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \475 IEM_MC_ARG(uint32_t, u32Src, 1); \476 468 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 477 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \478 \479 469 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, a_bRm, 0); \ 480 470 IEMOP_HLP_DONE_DECODING(); \ 471 \ 472 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 473 IEM_MC_ARG(uint32_t *, pu32Dst, 1); \ 481 474 IEM_MC_MEM_MAP_U32_RW(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 475 IEM_MC_ARG(uint32_t, u32Src, 2); \ 482 476 IEM_MC_FETCH_GREG_U32(u32Src, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 483 IEM_MC_ARG_ LOCAL_EFLAGS(pEFlags, EFlags, 2); \484 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u32), pu32Dst, u32Src, pEFlags); \477 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 478 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u32), fEFlagsIn, pu32Dst, u32Src); \ 485 479 \ 486 480 IEM_MC_MEM_COMMIT_AND_UNMAP_RW(bUnmapInfo); \ 487 IEM_MC_COMMIT_EFLAGS( EFlags); \481 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 488 482 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 489 483 IEM_MC_END(); \ … … 492 486 case IEMMODE_64BIT: \ 493 487 IEM_MC_BEGIN(IEM_MC_F_64BIT, 0); \ 494 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \495 IEM_MC_ARG(uint64_t, u64Src, 1); \496 488 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 497 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \498 \499 489 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, a_bRm, 0); \ 500 490 IEMOP_HLP_DONE_DECODING(); \ 491 \ 492 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 493 IEM_MC_ARG(uint64_t *, pu64Dst, 1); \ 501 494 IEM_MC_MEM_MAP_U64_RW(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 495 IEM_MC_ARG(uint64_t, u64Src, 2); \ 502 496 IEM_MC_FETCH_GREG_U64(u64Src, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 503 IEM_MC_ARG_ LOCAL_EFLAGS(pEFlags, EFlags, 2); \504 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u64), pu64Dst, u64Src, pEFlags); \497 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 498 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u64), fEFlagsIn, pu64Dst, u64Src); \ 505 499 \ 506 500 IEM_MC_MEM_COMMIT_AND_UNMAP_RW(bUnmapInfo); \ 507 IEM_MC_COMMIT_EFLAGS( EFlags); \501 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 508 502 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 509 503 IEM_MC_END(); \ … … 522 516 case IEMMODE_16BIT: \ 523 517 IEM_MC_BEGIN(0, 0); \ 524 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \525 IEM_MC_ARG(uint16_t, u16Src, 1); \526 518 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 527 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \528 \529 519 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, a_bRm, 0); \ 530 520 IEMOP_HLP_DONE_DECODING(); \ 521 \ 522 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 523 IEM_MC_ARG(uint16_t *, pu16Dst, 1); \ 531 524 IEM_MC_MEM_MAP_U16_ATOMIC(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 525 IEM_MC_ARG(uint16_t, u16Src, 2); \ 532 526 IEM_MC_FETCH_GREG_U16(u16Src, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 533 IEM_MC_ARG_ LOCAL_EFLAGS(pEFlags, EFlags, 2); \534 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u16_locked), pu16Dst, u16Src, pEFlags); \527 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 528 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u16_locked), fEFlagsIn, pu16Dst, u16Src); \ 535 529 \ 536 530 IEM_MC_MEM_COMMIT_AND_UNMAP_ATOMIC(bUnmapInfo); \ 537 IEM_MC_COMMIT_EFLAGS( EFlags); \531 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 538 532 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 539 533 IEM_MC_END(); \ … … 542 536 case IEMMODE_32BIT: \ 543 537 IEM_MC_BEGIN(IEM_MC_F_MIN_386, 0); \ 544 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \545 IEM_MC_ARG(uint32_t, u32Src, 1); \546 538 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 547 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \548 \549 539 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, a_bRm, 0); \ 550 540 IEMOP_HLP_DONE_DECODING(); \ 541 \ 542 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 543 IEM_MC_ARG(uint32_t *, pu32Dst, 1); \ 551 544 IEM_MC_MEM_MAP_U32_ATOMIC(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 545 IEM_MC_ARG(uint32_t, u32Src, 2); \ 552 546 IEM_MC_FETCH_GREG_U32(u32Src, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 553 IEM_MC_ARG_ LOCAL_EFLAGS(pEFlags, EFlags, 2); \554 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u32_locked), pu32Dst, u32Src, pEFlags); \547 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 548 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u32_locked), fEFlagsIn, pu32Dst, u32Src); \ 555 549 \ 556 550 IEM_MC_MEM_COMMIT_AND_UNMAP_ATOMIC(bUnmapInfo /* CMP,TEST */); \ 557 IEM_MC_COMMIT_EFLAGS( EFlags); \551 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 558 552 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 559 553 IEM_MC_END(); \ … … 562 556 case IEMMODE_64BIT: \ 563 557 IEM_MC_BEGIN(IEM_MC_F_64BIT, 0); \ 564 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \565 IEM_MC_ARG(uint64_t, u64Src, 1); \566 558 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 567 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \568 \569 559 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, a_bRm, 0); \ 570 560 IEMOP_HLP_DONE_DECODING(); \ 561 \ 562 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 563 IEM_MC_ARG(uint64_t *, pu64Dst, 1); \ 571 564 IEM_MC_MEM_MAP_U64_ATOMIC(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 565 IEM_MC_ARG(uint64_t, u64Src, 2); \ 572 566 IEM_MC_FETCH_GREG_U64(u64Src, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 573 IEM_MC_ARG_ LOCAL_EFLAGS(pEFlags, EFlags, 2); \574 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u64_locked), pu64Dst, u64Src, pEFlags); \567 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 568 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u64_locked), fEFlagsIn, pu64Dst, u64Src); \ 575 569 \ 576 570 IEM_MC_MEM_COMMIT_AND_UNMAP_ATOMIC(bUnmapInfo); \ 577 IEM_MC_COMMIT_EFLAGS( EFlags); \571 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 578 572 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 579 573 IEM_MC_END(); \ … … 601 595 IEM_MC_BEGIN(0, 0); \ 602 596 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 603 IEM_MC_ARG(uint16_t, u16Src, 1); \597 IEM_MC_ARG(uint16_t, u16Src, 2); \ 604 598 IEM_MC_FETCH_GREG_U16(u16Src, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 605 599 IEM_MC_NATIVE_IF(a_fNativeArchs) { \ 606 IEM_MC_LOCAL(uint16_t, 600 IEM_MC_LOCAL(uint16_t, u16Dst); \ 607 601 IEM_MC_FETCH_GREG_U16(u16Dst, IEM_GET_MODRM_RM(pVCpu, a_bRm)); \ 608 602 IEM_MC_LOCAL_EFLAGS(uEFlags); \ … … 610 604 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 611 605 } IEM_MC_NATIVE_ELSE() { \ 612 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \606 IEM_MC_ARG(uint16_t *, pu16Dst, 1); \ 613 607 IEM_MC_REF_GREG_U16(pu16Dst, IEM_GET_MODRM_RM(pVCpu, a_bRm)); \ 614 IEM_MC_ARG (uint32_t *, pEFlags, 2); \615 IEM_MC_ REF_EFLAGS(pEFlags); \616 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u16), pu16Dst, u16Src, pEFlags); \608 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 609 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u16), fEFlagsIn, pu16Dst, u16Src); \ 610 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 617 611 } IEM_MC_NATIVE_ENDIF(); \ 618 612 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 623 617 IEM_MC_BEGIN(IEM_MC_F_MIN_386, 0); \ 624 618 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 625 IEM_MC_ARG(uint32_t, u32Src, 1); \619 IEM_MC_ARG(uint32_t, u32Src, 2); \ 626 620 IEM_MC_FETCH_GREG_U32(u32Src, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 627 621 IEM_MC_NATIVE_IF(a_fNativeArchs) { \ 628 IEM_MC_LOCAL(uint32_t, 622 IEM_MC_LOCAL(uint32_t, u32Dst); \ 629 623 IEM_MC_FETCH_GREG_U32(u32Dst, IEM_GET_MODRM_RM(pVCpu, a_bRm)); \ 630 624 IEM_MC_LOCAL_EFLAGS(uEFlags); \ … … 632 626 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 633 627 } IEM_MC_NATIVE_ELSE() { \ 634 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \628 IEM_MC_ARG(uint32_t *, pu32Dst, 1); \ 635 629 IEM_MC_REF_GREG_U32(pu32Dst, IEM_GET_MODRM_RM(pVCpu, a_bRm)); \ 636 IEM_MC_ARG (uint32_t *, pEFlags, 2); \637 IEM_MC_ REF_EFLAGS(pEFlags); \638 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u32), pu32Dst, u32Src, pEFlags); \630 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 631 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u32), fEFlagsIn, pu32Dst, u32Src); \ 632 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 639 633 } IEM_MC_NATIVE_ENDIF(); \ 640 634 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 645 639 IEM_MC_BEGIN(IEM_MC_F_64BIT, 0); \ 646 640 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 647 IEM_MC_ARG(uint64_t, u64Src, 1); \641 IEM_MC_ARG(uint64_t, u64Src, 2); \ 648 642 IEM_MC_FETCH_GREG_U64(u64Src, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 649 643 IEM_MC_NATIVE_IF(a_fNativeArchs) { \ … … 654 648 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 655 649 } IEM_MC_NATIVE_ELSE() { \ 656 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \650 IEM_MC_ARG(uint64_t *, pu64Dst, 1); \ 657 651 IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_RM(pVCpu, a_bRm)); \ 658 IEM_MC_ARG (uint32_t *, pEFlags, 2); \659 IEM_MC_ REF_EFLAGS(pEFlags); \660 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u64), pu64Dst, u64Src, pEFlags); \652 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 653 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u64), fEFlagsIn, pu64Dst, u64Src); \ 654 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 661 655 } IEM_MC_NATIVE_ENDIF(); \ 662 656 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 671 665 /* \ 672 666 * We're accessing memory. \ 673 * Note! We're putting the eflags on the stack here so we can commit them \674 * after the memory. \675 667 */ \ 676 668 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK) || (pVCpu->iem.s.fExec & IEM_F_X86_DISREGARD_LOCK)) \ … … 692 684 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 693 685 } IEM_MC_NATIVE_ELSE() { \ 694 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \695 IEM_MC_ARG(uint16_t const *, pu16Dst, 0); \686 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 687 IEM_MC_ARG(uint16_t const *, pu16Dst, 1); \ 696 688 IEM_MC_MEM_MAP_U16_RO(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 697 IEM_MC_ARG(uint16_t, u16Src, 1); \689 IEM_MC_ARG(uint16_t, u16Src, 2); \ 698 690 IEM_MC_FETCH_GREG_U16(u16Src, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 699 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags, 2); \700 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u16), pu16Dst, u16Src, pEFlags); \691 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 692 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u16), fEFlagsIn, pu16Dst, u16Src); \ 701 693 IEM_MC_MEM_COMMIT_AND_UNMAP_RO(bUnmapInfo); \ 702 IEM_MC_COMMIT_EFLAGS( EFlags); \694 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 703 695 } IEM_MC_NATIVE_ENDIF(); \ 704 696 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 720 712 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 721 713 } IEM_MC_NATIVE_ELSE() { \ 722 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \723 IEM_MC_ARG(uint32_t const *, pu32Dst, 0); \714 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 715 IEM_MC_ARG(uint32_t const *, pu32Dst, 1); \ 724 716 IEM_MC_MEM_MAP_U32_RO(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 725 IEM_MC_ARG(uint32_t, u32Src, 1); \717 IEM_MC_ARG(uint32_t, u32Src, 2); \ 726 718 IEM_MC_FETCH_GREG_U32(u32Src, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 727 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags, 2); \728 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u32), pu32Dst, u32Src, pEFlags); \719 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 720 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u32), fEFlagsIn, pu32Dst, u32Src); \ 729 721 IEM_MC_MEM_COMMIT_AND_UNMAP_RO(bUnmapInfo); \ 730 IEM_MC_COMMIT_EFLAGS( EFlags); \722 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 731 723 } IEM_MC_NATIVE_ENDIF(); \ 732 724 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 748 740 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 749 741 } IEM_MC_NATIVE_ELSE() { \ 750 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \751 IEM_MC_ARG(uint64_t const *, pu64Dst, 0); \742 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 743 IEM_MC_ARG(uint64_t const *, pu64Dst, 1); \ 752 744 IEM_MC_MEM_MAP_U64_RO(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 753 IEM_MC_ARG(uint64_t, u64Src, 1); \745 IEM_MC_ARG(uint64_t, u64Src, 2); \ 754 746 IEM_MC_FETCH_GREG_U64(u64Src, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 755 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags, 2); \756 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u64), pu64Dst, u64Src, pEFlags); \747 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 748 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u64), fEFlagsIn, pu64Dst, u64Src); \ 757 749 IEM_MC_MEM_COMMIT_AND_UNMAP_RO(bUnmapInfo); \ 758 IEM_MC_COMMIT_EFLAGS( EFlags); \750 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 759 751 } IEM_MC_NATIVE_ENDIF(); \ 760 752 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 791 783 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 792 784 } IEM_MC_NATIVE_ELSE() { \ 793 IEM_MC_ARG_CONST(uint8_t, u8Src,/*=*/ u8Imm, 1); \ 794 IEM_MC_ARG(uint8_t *, pu8Dst, 0); \ 785 IEM_MC_ARG(uint8_t *, pu8Dst, 1); \ 795 786 IEM_MC_REF_GREG_U8(pu8Dst, X86_GREG_xAX); \ 796 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 797 IEM_MC_REF_EFLAGS(pEFlags); \ 798 IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u8), pu8Dst, u8Src, pEFlags); \ 787 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 788 IEM_MC_ARG_CONST(uint8_t, u8Src,/*=*/ u8Imm, 2); \ 789 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u8), fEFlagsIn, pu8Dst, u8Src); \ 790 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 799 791 } IEM_MC_NATIVE_ENDIF(); \ 800 792 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 822 814 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 823 815 } IEM_MC_NATIVE_ELSE() { \ 824 IEM_MC_ARG_CONST(uint16_t, u16Src,/*=*/ u16Imm, 1); \825 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \816 IEM_MC_ARG_CONST(uint16_t, u16Src,/*=*/ u16Imm, 2); \ 817 IEM_MC_ARG(uint16_t *, pu16Dst, 1); \ 826 818 IEM_MC_REF_GREG_U16(pu16Dst, X86_GREG_xAX); \ 827 IEM_MC_ARG (uint32_t *, pEFlags, 2); \828 IEM_MC_ REF_EFLAGS(pEFlags); \829 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u16), pu16Dst, u16Src, pEFlags); \819 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 820 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u16), fEFlagsIn, pu16Dst, u16Src); \ 821 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 830 822 } IEM_MC_NATIVE_ENDIF(); \ 831 823 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 847 839 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 848 840 } IEM_MC_NATIVE_ELSE() { \ 849 IEM_MC_ARG_CONST(uint32_t, u32Src,/*=*/ u32Imm, 1); \850 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \841 IEM_MC_ARG_CONST(uint32_t, u32Src,/*=*/ u32Imm, 2); \ 842 IEM_MC_ARG(uint32_t *, pu32Dst, 1); \ 851 843 IEM_MC_REF_GREG_U32(pu32Dst, X86_GREG_xAX); \ 852 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 853 IEM_MC_REF_EFLAGS(pEFlags); \ 854 IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u32), pu32Dst, u32Src, pEFlags); \ 844 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 845 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u32), fEFlagsIn, pu32Dst, u32Src); \ 855 846 IEM_MC_CLEAR_HIGH_GREG_U64(X86_GREG_xAX); \ 847 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 856 848 } IEM_MC_NATIVE_ENDIF(); \ 857 849 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 873 865 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 874 866 } IEM_MC_NATIVE_ELSE() { \ 875 IEM_MC_ARG_CONST(uint64_t, u64Src,/*=*/ u64Imm, 1); \876 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \867 IEM_MC_ARG_CONST(uint64_t, u64Src,/*=*/ u64Imm, 2); \ 868 IEM_MC_ARG(uint64_t *, pu64Dst, 1); \ 877 869 IEM_MC_REF_GREG_U64(pu64Dst, X86_GREG_xAX); \ 878 IEM_MC_ARG (uint32_t *, pEFlags, 2); \879 IEM_MC_ REF_EFLAGS(pEFlags); \880 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u64), pu64Dst, u64Src, pEFlags); \870 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 871 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u64), fEFlagsIn, pu64Dst, u64Src); \ 872 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 881 873 } IEM_MC_NATIVE_ENDIF(); \ 882 874 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 908 900 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 909 901 } IEM_MC_NATIVE_ELSE() { \ 910 IEM_MC_ARG_CONST(uint16_t, u16Src,/*=*/ u16Imm, 1); \911 IEM_MC_ARG(uint16_t const *,pu16Dst, 0); \902 IEM_MC_ARG_CONST(uint16_t, u16Src,/*=*/ u16Imm, 2); \ 903 IEM_MC_ARG(uint16_t const *,pu16Dst, 1); \ 912 904 IEM_MC_REF_GREG_U16_CONST(pu16Dst, X86_GREG_xAX); \ 913 IEM_MC_ARG (uint32_t *, pEFlags, 2); \914 IEM_MC_ REF_EFLAGS(pEFlags); \915 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u16), pu16Dst, u16Src, pEFlags); \905 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 906 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u16), fEFlagsIn, pu16Dst, u16Src); \ 907 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 916 908 } IEM_MC_NATIVE_ENDIF(); \ 917 909 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 932 924 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 933 925 } IEM_MC_NATIVE_ELSE() { \ 934 IEM_MC_ARG_CONST(uint32_t, u32Src,/*=*/ u32Imm, 1); \935 IEM_MC_ARG(uint32_t const *,pu32Dst, 0); \926 IEM_MC_ARG_CONST(uint32_t, u32Src,/*=*/ u32Imm, 2); \ 927 IEM_MC_ARG(uint32_t const *,pu32Dst, 1); \ 936 928 IEM_MC_REF_GREG_U32_CONST(pu32Dst, X86_GREG_xAX); \ 937 IEM_MC_ARG (uint32_t *, pEFlags, 2); \938 IEM_MC_ REF_EFLAGS(pEFlags); \939 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u32), pu32Dst, u32Src, pEFlags); \929 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 930 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u32), fEFlagsIn, pu32Dst, u32Src); \ 931 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 940 932 } IEM_MC_NATIVE_ENDIF(); \ 941 933 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 956 948 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 957 949 } IEM_MC_NATIVE_ELSE() { \ 958 IEM_MC_ARG_CONST(uint64_t, u64Src,/*=*/ u64Imm, 1); \959 IEM_MC_ARG(uint64_t const *,pu64Dst, 0); \950 IEM_MC_ARG_CONST(uint64_t, u64Src,/*=*/ u64Imm, 2); \ 951 IEM_MC_ARG(uint64_t const *,pu64Dst, 1); \ 960 952 IEM_MC_REF_GREG_U64_CONST(pu64Dst, X86_GREG_xAX); \ 961 IEM_MC_ARG (uint32_t *, pEFlags, 2); \962 IEM_MC_ REF_EFLAGS(pEFlags); \963 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u64), pu64Dst, u64Src, pEFlags); \953 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 954 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u64), fEFlagsIn, pu64Dst, u64Src); \ 955 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 964 956 } IEM_MC_NATIVE_ENDIF(); \ 965 957 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 1612 1604 IEM_MC_DEFER_TO_CIMPL_0_RET(IEM_CIMPL_F_STATUS_FLAGS, RT_BIT_64(kIemNativeGstReg_GprFirst + X86_GREG_xAX), iemCImpl_daa); 1613 1605 } 1606 1607 1608 /** 1609 * Special case body for word/dword/qword instruction like SUB and XOR that can 1610 * be used to zero a register. 1611 * 1612 * This can be used both for the rv_rm and rm_rv forms since it's working on the 1613 * same register. 1614 */ 1615 #define IEMOP_BODY_BINARY_rv_SAME_REG_ZERO(a_bRm) \ 1616 if ( (a_bRm >> X86_MODRM_REG_SHIFT) == ((a_bRm & X86_MODRM_RM_MASK) | (X86_MOD_REG << X86_MODRM_REG_SHIFT)) \ 1617 && pVCpu->iem.s.uRexReg == pVCpu->iem.s.uRexB) \ 1618 { \ 1619 switch (pVCpu->iem.s.enmEffOpSize) \ 1620 { \ 1621 case IEMMODE_16BIT: \ 1622 IEM_MC_BEGIN(0, 0); \ 1623 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 1624 IEM_MC_STORE_GREG_U16_CONST(IEM_GET_MODRM_RM(pVCpu, a_bRm), 0); \ 1625 IEM_MC_LOCAL_EFLAGS(fEFlags); \ 1626 IEM_MC_AND_LOCAL_U32(fEFlags, ~(uint32_t)X86_EFL_STATUS_BITS); \ 1627 IEM_MC_OR_LOCAL_U32(fEFlags, X86_EFL_PF | X86_EFL_ZF); \ 1628 IEM_MC_COMMIT_EFLAGS(fEFlags); \ 1629 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 1630 IEM_MC_END(); \ 1631 break; \ 1632 \ 1633 case IEMMODE_32BIT: \ 1634 IEM_MC_BEGIN(IEM_MC_F_MIN_386, 0); \ 1635 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 1636 IEM_MC_STORE_GREG_U32_CONST(IEM_GET_MODRM_RM(pVCpu, a_bRm), 0); \ 1637 IEM_MC_LOCAL_EFLAGS(fEFlags); \ 1638 IEM_MC_AND_LOCAL_U32(fEFlags, ~(uint32_t)X86_EFL_STATUS_BITS); \ 1639 IEM_MC_OR_LOCAL_U32(fEFlags, X86_EFL_PF | X86_EFL_ZF); \ 1640 IEM_MC_COMMIT_EFLAGS(fEFlags); \ 1641 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 1642 IEM_MC_END(); \ 1643 break; \ 1644 \ 1645 case IEMMODE_64BIT: \ 1646 IEM_MC_BEGIN(IEM_MC_F_64BIT, 0); \ 1647 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 1648 IEM_MC_STORE_GREG_U64_CONST(IEM_GET_MODRM_RM(pVCpu, a_bRm), 0); \ 1649 IEM_MC_LOCAL_EFLAGS(fEFlags); \ 1650 IEM_MC_AND_LOCAL_U32(fEFlags, ~(uint32_t)X86_EFL_STATUS_BITS); \ 1651 IEM_MC_OR_LOCAL_U32(fEFlags, X86_EFL_PF | X86_EFL_ZF); \ 1652 IEM_MC_COMMIT_EFLAGS(fEFlags); \ 1653 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 1654 IEM_MC_END(); \ 1655 break; \ 1656 \ 1657 IEM_NOT_REACHED_DEFAULT_CASE_RET(); \ 1658 } \ 1659 } ((void)0) 1614 1660 1615 1661 … … 1885 1931 IEM_MC_DEFER_TO_CIMPL_0_RET(IEM_CIMPL_F_STATUS_FLAGS, RT_BIT_64(kIemNativeGstReg_GprFirst + X86_GREG_xAX), iemCImpl_aaa); 1886 1932 } 1933 1934 1935 /** 1936 * Body for word/dword/qword the instruction CMP, ++ with a register as the 1937 * destination. 1938 * 1939 * @note Used both in OneByte and TwoByte0f. 1940 */ 1941 #define IEMOP_BODY_BINARY_rv_rm_RO(a_bRm, a_InsNm, a_fNativeArchs) \ 1942 /* \ 1943 * If rm is denoting a register, no more instruction bytes. \ 1944 */ \ 1945 if (IEM_IS_MODRM_REG_MODE(a_bRm)) \ 1946 { \ 1947 switch (pVCpu->iem.s.enmEffOpSize) \ 1948 { \ 1949 case IEMMODE_16BIT: \ 1950 IEM_MC_BEGIN(0, 0); \ 1951 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 1952 IEM_MC_ARG(uint16_t, u16Src, 2); \ 1953 IEM_MC_FETCH_GREG_U16(u16Src, IEM_GET_MODRM_RM(pVCpu, a_bRm)); \ 1954 IEM_MC_NATIVE_IF(a_fNativeArchs) { \ 1955 IEM_MC_LOCAL(uint16_t, u16Dst); \ 1956 IEM_MC_FETCH_GREG_U16(u16Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 1957 IEM_MC_LOCAL_EFLAGS(uEFlags); \ 1958 IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_r_efl), u16Dst, u16Src, uEFlags, 16); \ 1959 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 1960 } IEM_MC_NATIVE_ELSE() { \ 1961 IEM_MC_ARG(uint16_t *, pu16Dst, 1); \ 1962 IEM_MC_REF_GREG_U16(pu16Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 1963 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 1964 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u16), fEFlagsIn, pu16Dst, u16Src); \ 1965 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 1966 } IEM_MC_NATIVE_ENDIF(); \ 1967 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 1968 IEM_MC_END(); \ 1969 break; \ 1970 \ 1971 case IEMMODE_32BIT: \ 1972 IEM_MC_BEGIN(IEM_MC_F_MIN_386, 0); \ 1973 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 1974 IEM_MC_ARG(uint32_t, u32Src, 2); \ 1975 IEM_MC_FETCH_GREG_U32(u32Src, IEM_GET_MODRM_RM(pVCpu, a_bRm)); \ 1976 IEM_MC_NATIVE_IF(a_fNativeArchs) { \ 1977 IEM_MC_LOCAL(uint32_t, u32Dst); \ 1978 IEM_MC_FETCH_GREG_U32(u32Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 1979 IEM_MC_LOCAL_EFLAGS(uEFlags); \ 1980 IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_r_efl), u32Dst, u32Src, uEFlags, 32); \ 1981 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 1982 } IEM_MC_NATIVE_ELSE() { \ 1983 IEM_MC_ARG(uint32_t *, pu32Dst, 1); \ 1984 IEM_MC_REF_GREG_U32(pu32Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 1985 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 1986 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u32), fEFlagsIn, pu32Dst, u32Src); \ 1987 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 1988 } IEM_MC_NATIVE_ENDIF(); \ 1989 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 1990 IEM_MC_END(); \ 1991 break; \ 1992 \ 1993 case IEMMODE_64BIT: \ 1994 IEM_MC_BEGIN(IEM_MC_F_64BIT, 0); \ 1995 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 1996 IEM_MC_ARG(uint64_t, u64Src, 2); \ 1997 IEM_MC_FETCH_GREG_U64(u64Src, IEM_GET_MODRM_RM(pVCpu, a_bRm)); \ 1998 IEM_MC_NATIVE_IF(a_fNativeArchs) { \ 1999 IEM_MC_LOCAL(uint64_t, u64Dst); \ 2000 IEM_MC_FETCH_GREG_U64(u64Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 2001 IEM_MC_LOCAL_EFLAGS(uEFlags); \ 2002 IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_r_efl), u64Dst, u64Src, uEFlags, 64); \ 2003 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 2004 } IEM_MC_NATIVE_ELSE() { \ 2005 IEM_MC_ARG(uint64_t *, pu64Dst, 1); \ 2006 IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 2007 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 2008 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u64), fEFlagsIn, pu64Dst, u64Src); \ 2009 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 2010 } IEM_MC_NATIVE_ENDIF(); \ 2011 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 2012 IEM_MC_END(); \ 2013 break; \ 2014 \ 2015 IEM_NOT_REACHED_DEFAULT_CASE_RET(); \ 2016 } \ 2017 } \ 2018 else \ 2019 { \ 2020 /* \ 2021 * We're accessing memory. \ 2022 */ \ 2023 switch (pVCpu->iem.s.enmEffOpSize) \ 2024 { \ 2025 case IEMMODE_16BIT: \ 2026 IEM_MC_BEGIN(0, 0); \ 2027 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 2028 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, a_bRm, 0); \ 2029 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 2030 IEM_MC_ARG(uint16_t, u16Src, 2); \ 2031 IEM_MC_FETCH_MEM_U16(u16Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 2032 IEM_MC_NATIVE_IF(a_fNativeArchs) { \ 2033 IEM_MC_LOCAL(uint16_t, u16Dst); \ 2034 IEM_MC_FETCH_GREG_U16(u16Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 2035 IEM_MC_LOCAL_EFLAGS(uEFlags); \ 2036 IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_r_efl), u16Dst, u16Src, uEFlags, 16); \ 2037 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 2038 } IEM_MC_NATIVE_ELSE() { \ 2039 IEM_MC_ARG(uint16_t *, pu16Dst, 1); \ 2040 IEM_MC_REF_GREG_U16(pu16Dst, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 2041 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 2042 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u16), fEFlagsIn, pu16Dst, u16Src); \ 2043 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 2044 } IEM_MC_NATIVE_ENDIF(); \ 2045 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 2046 IEM_MC_END(); \ 2047 break; \ 2048 \ 2049 case IEMMODE_32BIT: \ 2050 IEM_MC_BEGIN(IEM_MC_F_MIN_386, 0); \ 2051 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 2052 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, a_bRm, 0); \ 2053 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 2054 IEM_MC_ARG(uint32_t, u32Src, 2); \ 2055 IEM_MC_FETCH_MEM_U32(u32Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 2056 IEM_MC_NATIVE_IF(a_fNativeArchs) { \ 2057 IEM_MC_LOCAL(uint32_t, u32Dst); \ 2058 IEM_MC_FETCH_GREG_U32(u32Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 2059 IEM_MC_LOCAL_EFLAGS(uEFlags); \ 2060 IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_r_efl), u32Dst, u32Src, uEFlags, 32); \ 2061 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 2062 } IEM_MC_NATIVE_ELSE() { \ 2063 IEM_MC_ARG(uint32_t *, pu32Dst, 1); \ 2064 IEM_MC_REF_GREG_U32(pu32Dst, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 2065 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 2066 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u32), fEFlagsIn, pu32Dst, u32Src); \ 2067 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 2068 } IEM_MC_NATIVE_ENDIF(); \ 2069 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 2070 IEM_MC_END(); \ 2071 break; \ 2072 \ 2073 case IEMMODE_64BIT: \ 2074 IEM_MC_BEGIN(IEM_MC_F_64BIT, 0); \ 2075 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 2076 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, a_bRm, 0); \ 2077 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 2078 IEM_MC_ARG(uint64_t, u64Src, 2); \ 2079 IEM_MC_FETCH_MEM_U64(u64Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 2080 IEM_MC_NATIVE_IF(a_fNativeArchs) { \ 2081 IEM_MC_LOCAL(uint64_t, u64Dst); \ 2082 IEM_MC_FETCH_GREG_U64(u64Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 2083 IEM_MC_LOCAL_EFLAGS(uEFlags); \ 2084 IEM_MC_NATIVE_EMIT_4(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_r_efl), u64Dst, u64Src, uEFlags, 64); \ 2085 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 2086 } IEM_MC_NATIVE_ELSE() { \ 2087 IEM_MC_ARG(uint64_t *, pu64Dst, 1); \ 2088 IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_REG(pVCpu, a_bRm)); \ 2089 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 2090 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u64), fEFlagsIn, pu64Dst, u64Src); \ 2091 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 2092 } IEM_MC_NATIVE_ENDIF(); \ 2093 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 2094 IEM_MC_END(); \ 2095 break; \ 2096 \ 2097 IEM_NOT_REACHED_DEFAULT_CASE_RET(); \ 2098 } \ 2099 } \ 2100 (void)0 1887 2101 1888 2102 … … 3172 3386 case IEMMODE_16BIT: 3173 3387 { 3174 PFNIEMAIMPLBIN U16 const pfnAImplU16 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u16_eflags);3388 PFNIEMAIMPLBINTODOU16 const pfnAImplU16 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u16_eflags); 3175 3389 if (IEM_IS_MODRM_REG_MODE(bRm)) 3176 3390 { … … 3219 3433 case IEMMODE_32BIT: 3220 3434 { 3221 PFNIEMAIMPLBIN U32 const pfnAImplU32 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u32_eflags);3435 PFNIEMAIMPLBINTODOU32 const pfnAImplU32 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u32_eflags); 3222 3436 if (IEM_IS_MODRM_REG_MODE(bRm)) 3223 3437 { … … 3267 3481 case IEMMODE_64BIT: 3268 3482 { 3269 PFNIEMAIMPLBIN U64 const pfnAImplU64 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u64_eflags);3483 PFNIEMAIMPLBINTODOU64 const pfnAImplU64 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u64_eflags); 3270 3484 if (IEM_IS_MODRM_REG_MODE(bRm)) 3271 3485 { … … 3374 3588 case IEMMODE_16BIT: 3375 3589 { 3376 PFNIEMAIMPLBIN U16 const pfnAImplU16 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u16_eflags);3590 PFNIEMAIMPLBINTODOU16 const pfnAImplU16 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u16_eflags); 3377 3591 if (IEM_IS_MODRM_REG_MODE(bRm)) 3378 3592 { … … 3424 3638 case IEMMODE_32BIT: 3425 3639 { 3426 PFNIEMAIMPLBIN U32 const pfnAImplU32 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u32_eflags);3640 PFNIEMAIMPLBINTODOU32 const pfnAImplU32 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u32_eflags); 3427 3641 if (IEM_IS_MODRM_REG_MODE(bRm)) 3428 3642 { … … 3472 3686 case IEMMODE_64BIT: 3473 3687 { 3474 PFNIEMAIMPLBIN U64 const pfnAImplU64 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u64_eflags);3688 PFNIEMAIMPLBINTODOU64 const pfnAImplU64 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u64_eflags); 3475 3689 if (IEM_IS_MODRM_REG_MODE(bRm)) 3476 3690 { … … 4199 4413 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 4200 4414 } IEM_MC_NATIVE_ELSE() { \ 4201 IEM_MC_ARG_CONST(uint8_t, u8Src, /*=*/ u8Imm, 1); \ 4202 IEM_MC_ARG(uint8_t *, pu8Dst, 0); \ 4415 IEM_MC_ARG(uint8_t *, pu8Dst, 1); \ 4203 4416 IEM_MC_REF_GREG_U8(pu8Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 4204 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 4205 IEM_MC_REF_EFLAGS(pEFlags); \ 4206 IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u8), pu8Dst, u8Src, pEFlags); \ 4417 IEM_MC_ARG_CONST(uint8_t, u8Src, /*=*/ u8Imm, 2); \ 4418 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 4419 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u8), fEFlagsIn, pu8Dst, u8Src); \ 4420 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 4207 4421 } IEM_MC_NATIVE_ENDIF(); \ 4208 4422 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 4217 4431 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 4218 4432 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1); \ 4219 \4220 4433 uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); \ 4221 IEM_MC_ARG_CONST(uint8_t, u8Src, /*=*/ u8Imm, 1); \4222 4434 IEMOP_HLP_DONE_DECODING(); \ 4223 4435 \ 4224 4436 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 4225 IEM_MC_ARG(uint8_t *, pu8Dst, 0); \4437 IEM_MC_ARG(uint8_t *, pu8Dst, 1); \ 4226 4438 IEM_MC_MEM_MAP_U8_RW(pu8Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 4227 IEM_MC_ARG_LOCAL_EFLAGS( pEFlags, EFlags, 2); \ 4228 IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u8), pu8Dst, u8Src, pEFlags); \ 4439 IEM_MC_ARG_CONST(uint8_t, u8Src, /*=*/ u8Imm, 2); \ 4440 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 4441 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u8), fEFlagsIn, pu8Dst, u8Src); \ 4229 4442 \ 4230 4443 IEM_MC_MEM_COMMIT_AND_UNMAP_RW(bUnmapInfo); \ 4231 IEM_MC_COMMIT_EFLAGS( EFlags); \4444 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 4232 4445 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 4233 4446 IEM_MC_END(); \ … … 4236 4449 { \ 4237 4450 IEM_MC_BEGIN(0, 0); \ 4238 IEM_MC_ARG(uint8_t *, pu8Dst, 0); \4239 4451 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 4240 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \4241 \4242 4452 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 1); \ 4243 4453 uint8_t u8Imm; IEM_OPCODE_GET_NEXT_U8(&u8Imm); \ 4244 IEM_MC_ARG_CONST(uint8_t, u8Src, /*=*/ u8Imm, 1); \4245 4454 IEMOP_HLP_DONE_DECODING(); \ 4246 4455 \ 4456 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 4457 IEM_MC_ARG(uint8_t *, pu8Dst, 1); \ 4247 4458 IEM_MC_MEM_MAP_U8_ATOMIC(pu8Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 4248 IEM_MC_ARG_LOCAL_EFLAGS( pEFlags, EFlags, 2); \ 4249 IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u8_locked), pu8Dst, u8Src, pEFlags); \ 4459 IEM_MC_ARG_CONST(uint8_t, u8Src, /*=*/ u8Imm, 2); \ 4460 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 4461 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u8_locked), fEFlagsIn, pu8Dst, u8Src); \ 4250 4462 \ 4251 4463 IEM_MC_MEM_COMMIT_AND_UNMAP_ATOMIC(bUnmapInfo); \ 4252 IEM_MC_COMMIT_EFLAGS( EFlags); \4464 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 4253 4465 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 4254 4466 IEM_MC_END(); \ … … 4271 4483 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 4272 4484 } IEM_MC_NATIVE_ELSE() { \ 4273 IEM_MC_ARG_CONST(uint8_t, u8Src, /*=*/ u8Imm, 1); \ 4274 IEM_MC_ARG(uint8_t const *, pu8Dst, 0); \ 4485 IEM_MC_ARG(uint8_t const *, pu8Dst, 1); \ 4275 4486 IEM_MC_REF_GREG_U8_CONST(pu8Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 4276 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 4277 IEM_MC_REF_EFLAGS(pEFlags); \ 4278 IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u8), pu8Dst, u8Src, pEFlags); \ 4487 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 4488 IEM_MC_ARG_CONST(uint8_t, u8Src, /*=*/ u8Imm, 2); \ 4489 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u8), fEFlagsIn, pu8Dst, u8Src); \ 4490 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 4279 4491 } IEM_MC_NATIVE_ENDIF(); \ 4280 4492 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 4299 4511 } IEM_MC_NATIVE_ELSE() { \ 4300 4512 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 4301 IEM_MC_ARG(uint8_t const *, pu8Dst, 0); \4513 IEM_MC_ARG(uint8_t const *, pu8Dst, 1); \ 4302 4514 IEM_MC_MEM_MAP_U8_RO(pu8Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 4303 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags, 2); \4304 IEM_MC_ARG_CONST(uint8_t, u8Src, /*=*/ u8Imm, 1); \4305 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u8), pu8Dst, u8Src, pEFlags); \4515 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 4516 IEM_MC_ARG_CONST(uint8_t, u8Src, /*=*/ u8Imm, 2); \ 4517 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u8), fEFlagsIn, pu8Dst, u8Src); \ 4306 4518 IEM_MC_MEM_COMMIT_AND_UNMAP_RO(bUnmapInfo); \ 4307 IEM_MC_COMMIT_EFLAGS( EFlags); \4519 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 4308 4520 } IEM_MC_NATIVE_ENDIF(); \ 4309 4521 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 4460 4672 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 4461 4673 } IEM_MC_NATIVE_ELSE() { \ 4462 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \4674 IEM_MC_ARG(uint16_t *, pu16Dst, 1); \ 4463 4675 IEM_MC_REF_GREG_U16(pu16Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 4464 IEM_MC_ARG (uint32_t *, pEFlags, 2); \4465 IEM_MC_ REF_EFLAGS(pEFlags); \4466 IEM_MC_ ARG_CONST(uint16_t, u16Src, /*=*/ u16Imm, 1); \4467 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u16), pu16Dst, u16Src, pEFlags); \4676 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 4677 IEM_MC_ARG_CONST(uint16_t, u16Src, /*=*/ u16Imm, 2); \ 4678 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u16), fEFlagsIn, pu16Dst, u16Src); \ 4679 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 4468 4680 } IEM_MC_NATIVE_ENDIF(); \ 4469 4681 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 4486 4698 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 4487 4699 } IEM_MC_NATIVE_ELSE() { \ 4488 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \4700 IEM_MC_ARG(uint32_t *, pu32Dst, 1); \ 4489 4701 IEM_MC_REF_GREG_U32(pu32Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 4490 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 4491 IEM_MC_REF_EFLAGS(pEFlags); \ 4492 IEM_MC_ARG_CONST(uint32_t, u32Src, /*=*/ u32Imm, 1); \ 4493 IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u32), pu32Dst, u32Src, pEFlags); \ 4702 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 4703 IEM_MC_ARG_CONST(uint32_t, u32Src, /*=*/ u32Imm, 2); \ 4704 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u32), fEFlagsIn, pu32Dst, u32Src); \ 4494 4705 IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm)); \ 4706 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 4495 4707 } IEM_MC_NATIVE_ENDIF(); \ 4496 4708 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 4513 4725 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 4514 4726 } IEM_MC_NATIVE_ELSE() { \ 4515 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \4727 IEM_MC_ARG(uint64_t *, pu64Dst, 1); \ 4516 4728 IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 4517 IEM_MC_ARG (uint32_t *, pEFlags, 2); \4518 IEM_MC_ REF_EFLAGS(pEFlags); \4519 IEM_MC_ ARG_CONST(uint64_t, u64Src, /*=*/ u64Imm, 1); \4520 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u64), pu64Dst, u64Src, pEFlags); \4729 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 4730 IEM_MC_ARG_CONST(uint64_t, u64Src, /*=*/ u64Imm, 2); \ 4731 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u64), fEFlagsIn, pu64Dst, u64Src); \ 4732 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 4521 4733 } IEM_MC_NATIVE_ENDIF(); \ 4522 4734 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 4545 4757 \ 4546 4758 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 4547 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \4759 IEM_MC_ARG(uint16_t *, pu16Dst, 1); \ 4548 4760 IEM_MC_MEM_MAP_U16_RW(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 4549 4761 \ 4550 IEM_MC_ARG_CONST(uint16_t, u16Src, u16Imm, 1); \4551 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags, 2); \4552 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u16), pu16Dst, u16Src, pEFlags); \4762 IEM_MC_ARG_CONST(uint16_t, u16Src, u16Imm, 2); \ 4763 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 4764 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u16), fEFlagsIn, pu16Dst, u16Src); \ 4553 4765 \ 4554 4766 IEM_MC_MEM_COMMIT_AND_UNMAP_RW(bUnmapInfo); \ 4555 IEM_MC_COMMIT_EFLAGS( EFlags); \4767 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 4556 4768 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 4557 4769 IEM_MC_END(); \ … … 4569 4781 \ 4570 4782 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 4571 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \4783 IEM_MC_ARG(uint32_t *, pu32Dst, 1); \ 4572 4784 IEM_MC_MEM_MAP_U32_RW(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 4573 4785 \ 4574 IEM_MC_ARG_CONST(uint32_t, u32Src, u32Imm, 1); \4575 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags, 2); \4576 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u32), pu32Dst, u32Src, pEFlags); \4786 IEM_MC_ARG_CONST(uint32_t, u32Src, u32Imm, 2); \ 4787 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 4788 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u32), fEFlagsIn, pu32Dst, u32Src); \ 4577 4789 \ 4578 4790 IEM_MC_MEM_COMMIT_AND_UNMAP_RW(bUnmapInfo); \ 4579 IEM_MC_COMMIT_EFLAGS( EFlags); \4791 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 4580 4792 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 4581 4793 IEM_MC_END(); \ … … 4594 4806 \ 4595 4807 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 4596 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \4808 IEM_MC_ARG(uint64_t *, pu64Dst, 1); \ 4597 4809 IEM_MC_MEM_MAP_U64_RW(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 4598 4810 \ 4599 IEM_MC_ARG_CONST(uint64_t, u64Src, u64Imm, 1); \4600 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags, 2); \4601 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u64), pu64Dst, u64Src, pEFlags); \4811 IEM_MC_ARG_CONST(uint64_t, u64Src, u64Imm, 2); \ 4812 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 4813 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u64), fEFlagsIn, pu64Dst, u64Src); \ 4602 4814 \ 4603 4815 IEM_MC_MEM_COMMIT_AND_UNMAP_RW(bUnmapInfo); \ 4604 IEM_MC_COMMIT_EFLAGS( EFlags); \4816 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 4605 4817 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 4606 4818 IEM_MC_END(); \ … … 4625 4837 \ 4626 4838 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 4627 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \4839 IEM_MC_ARG(uint16_t *, pu16Dst, 1); \ 4628 4840 IEM_MC_MEM_MAP_U16_ATOMIC(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 4629 4841 \ 4630 IEM_MC_ARG_CONST(uint16_t, u16Src, u16Imm, 1); \4631 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags, 2); \4632 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u16_locked), pu16Dst, u16Src, pEFlags); \4842 IEM_MC_ARG_CONST(uint16_t, u16Src, u16Imm, 2); \ 4843 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 4844 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u16_locked), fEFlagsIn, pu16Dst, u16Src); \ 4633 4845 \ 4634 4846 IEM_MC_MEM_COMMIT_AND_UNMAP_ATOMIC(bUnmapInfo); \ 4635 IEM_MC_COMMIT_EFLAGS( EFlags); \4847 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 4636 4848 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 4637 4849 IEM_MC_END(); \ … … 4649 4861 \ 4650 4862 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 4651 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \4863 IEM_MC_ARG(uint32_t *, pu32Dst, 1); \ 4652 4864 IEM_MC_MEM_MAP_U32_ATOMIC(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 4653 4865 \ 4654 IEM_MC_ARG_CONST(uint32_t, u32Src, u32Imm, 1); \4655 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags, 2); \4656 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u32_locked), pu32Dst, u32Src, pEFlags); \4866 IEM_MC_ARG_CONST(uint32_t, u32Src, u32Imm, 2); \ 4867 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 4868 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u32_locked), fEFlagsIn, pu32Dst, u32Src); \ 4657 4869 \ 4658 4870 IEM_MC_MEM_COMMIT_AND_UNMAP_ATOMIC(bUnmapInfo); \ 4659 IEM_MC_COMMIT_EFLAGS( EFlags); \4871 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 4660 4872 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 4661 4873 IEM_MC_END(); \ … … 4673 4885 \ 4674 4886 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 4675 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \4887 IEM_MC_ARG(uint64_t *, pu64Dst, 1); \ 4676 4888 IEM_MC_MEM_MAP_U64_ATOMIC(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 4677 4889 \ 4678 IEM_MC_ARG_CONST(uint64_t, u64Src, u64Imm, 1); \4679 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags, 2); \4680 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u64_locked), pu64Dst, u64Src, pEFlags); \4890 IEM_MC_ARG_CONST(uint64_t, u64Src, u64Imm, 2); \ 4891 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 4892 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u64_locked), fEFlagsIn, pu64Dst, u64Src); \ 4681 4893 \ 4682 4894 IEM_MC_MEM_COMMIT_AND_UNMAP_ATOMIC(bUnmapInfo); \ 4683 IEM_MC_COMMIT_EFLAGS( EFlags); \4895 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 4684 4896 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 4685 4897 IEM_MC_END(); \ … … 4713 4925 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 4714 4926 } IEM_MC_NATIVE_ELSE() { \ 4715 IEM_MC_ARG(uint16_t const *,pu16Dst, 0); \4927 IEM_MC_ARG(uint16_t const *,pu16Dst, 1); \ 4716 4928 IEM_MC_REF_GREG_U16_CONST(pu16Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 4717 IEM_MC_ARG (uint32_t *, pEFlags, 2); \4718 IEM_MC_ REF_EFLAGS(pEFlags); \4719 IEM_MC_ ARG_CONST(uint16_t, u16Src, /*=*/ u16Imm, 1); \4720 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u16), pu16Dst, u16Src, pEFlags); \4929 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 4930 IEM_MC_ARG_CONST(uint16_t, u16Src, /*=*/ u16Imm, 2); \ 4931 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u16), fEFlagsIn, pu16Dst, u16Src); \ 4932 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 4721 4933 } IEM_MC_NATIVE_ENDIF(); \ 4722 4934 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 4738 4950 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 4739 4951 } IEM_MC_NATIVE_ELSE() { \ 4740 IEM_MC_ARG(uint32_t const *,pu32Dst, 0); \4952 IEM_MC_ARG(uint32_t const *,pu32Dst, 1); \ 4741 4953 IEM_MC_REF_GREG_U32_CONST (pu32Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 4742 IEM_MC_ARG (uint32_t *, pEFlags, 2); \4743 IEM_MC_ REF_EFLAGS(pEFlags); \4744 IEM_MC_ ARG_CONST(uint32_t, u32Src, /*=*/ u32Imm, 1); \4745 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u32), pu32Dst, u32Src, pEFlags); \4954 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 4955 IEM_MC_ARG_CONST(uint32_t, u32Src, /*=*/ u32Imm, 2); \ 4956 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u32), fEFlagsIn, pu32Dst, u32Src); \ 4957 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 4746 4958 } IEM_MC_NATIVE_ENDIF(); \ 4747 4959 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 4763 4975 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 4764 4976 } IEM_MC_NATIVE_ELSE() { \ 4765 IEM_MC_ARG(uint64_t const *,pu64Dst, 0); \4977 IEM_MC_ARG(uint64_t const *,pu64Dst, 1); \ 4766 4978 IEM_MC_REF_GREG_U64_CONST(pu64Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 4767 IEM_MC_ARG (uint32_t *, pEFlags, 2); \4768 IEM_MC_ REF_EFLAGS(pEFlags); \4769 IEM_MC_ ARG_CONST(uint64_t, u64Src, /*=*/ u64Imm, 1); \4770 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u64), pu64Dst, u64Src, pEFlags); \4979 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 4980 IEM_MC_ARG_CONST(uint64_t, u64Src, /*=*/ u64Imm, 2); \ 4981 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u64), fEFlagsIn, pu64Dst, u64Src); \ 4982 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 4771 4983 } IEM_MC_NATIVE_ENDIF(); \ 4772 4984 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 4800 5012 } IEM_MC_NATIVE_ELSE() { \ 4801 5013 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 4802 IEM_MC_ARG(uint16_t const *, pu16Dst, 0); \5014 IEM_MC_ARG(uint16_t const *, pu16Dst, 1); \ 4803 5015 IEM_MC_MEM_MAP_U16_RO(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 4804 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags, 2); \4805 IEM_MC_ARG_CONST(uint16_t, u16Src, u16Imm, 1); \4806 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u16), pu16Dst, u16Src, pEFlags); \5016 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 5017 IEM_MC_ARG_CONST(uint16_t, u16Src, u16Imm, 2); \ 5018 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u16), fEFlagsIn, pu16Dst, u16Src); \ 4807 5019 IEM_MC_MEM_COMMIT_AND_UNMAP_RO(bUnmapInfo); \ 4808 IEM_MC_COMMIT_EFLAGS( EFlags); \5020 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 4809 5021 } IEM_MC_NATIVE_ENDIF(); \ 4810 5022 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 4828 5040 } IEM_MC_NATIVE_ELSE() { \ 4829 5041 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 4830 IEM_MC_ARG(uint32_t const *, pu32Dst, 0); \5042 IEM_MC_ARG(uint32_t const *, pu32Dst, 1); \ 4831 5043 IEM_MC_MEM_MAP_U32_RO(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 4832 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags, 2); \4833 IEM_MC_ARG_CONST(uint32_t, u32Src, u32Imm, 1); \4834 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u32), pu32Dst, u32Src, pEFlags); \5044 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 5045 IEM_MC_ARG_CONST(uint32_t, u32Src, u32Imm, 2); \ 5046 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u32), fEFlagsIn, pu32Dst, u32Src); \ 4835 5047 IEM_MC_MEM_COMMIT_AND_UNMAP_RO(bUnmapInfo); \ 4836 IEM_MC_COMMIT_EFLAGS( EFlags); \5048 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 4837 5049 } IEM_MC_NATIVE_ENDIF(); \ 4838 5050 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 4856 5068 } IEM_MC_NATIVE_ELSE() { \ 4857 5069 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 4858 IEM_MC_ARG(uint64_t const *, pu64Dst, 0); \5070 IEM_MC_ARG(uint64_t const *, pu64Dst, 1); \ 4859 5071 IEM_MC_MEM_MAP_U64_RO(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 4860 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags, 2); \4861 IEM_MC_ARG_CONST(uint64_t, u64Src, u64Imm, 1); \4862 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u64), pu64Dst, u64Src, pEFlags); \5072 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 5073 IEM_MC_ARG_CONST(uint64_t, u64Src, u64Imm, 2); \ 5074 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u64), fEFlagsIn, pu64Dst, u64Src); \ 4863 5075 IEM_MC_MEM_COMMIT_AND_UNMAP_RO(bUnmapInfo); \ 4864 IEM_MC_COMMIT_EFLAGS( EFlags); \5076 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 4865 5077 } IEM_MC_NATIVE_ENDIF(); \ 4866 5078 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 5035 5247 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 5036 5248 } IEM_MC_NATIVE_ELSE() { \ 5037 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \5249 IEM_MC_ARG(uint16_t *, pu16Dst, 1); \ 5038 5250 IEM_MC_REF_GREG_U16(pu16Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 5039 IEM_MC_ARG (uint32_t *, pEFlags, 2); \5040 IEM_MC_ REF_EFLAGS(pEFlags); \5041 IEM_MC_ ARG_CONST(uint16_t, u16Src, /*=*/ (uint16_t)(int16_t)(int8_t)u8Imm, 1); \5042 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u16), pu16Dst, u16Src, pEFlags); \5251 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 5252 IEM_MC_ARG_CONST(uint16_t, u16Src, /*=*/ (uint16_t)(int16_t)(int8_t)u8Imm, 2); \ 5253 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u16), fEFlagsIn, pu16Dst, u16Src); \ 5254 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 5043 5255 } IEM_MC_NATIVE_ENDIF(); \ 5044 5256 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 5058 5270 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 5059 5271 } IEM_MC_NATIVE_ELSE() { \ 5060 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \5272 IEM_MC_ARG(uint32_t *, pu32Dst, 1); \ 5061 5273 IEM_MC_REF_GREG_U32(pu32Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 5062 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 5063 IEM_MC_REF_EFLAGS(pEFlags); \ 5064 IEM_MC_ARG_CONST(uint32_t, u32Src, /*=*/ (uint32_t)(int32_t)(int8_t)u8Imm, 1); \ 5065 IEM_MC_CALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u32), pu32Dst, u32Src, pEFlags); \ 5274 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 5275 IEM_MC_ARG_CONST(uint32_t, u32Src, /*=*/ (uint32_t)(int32_t)(int8_t)u8Imm, 2); \ 5276 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u32), fEFlagsIn, pu32Dst, u32Src); \ 5066 5277 IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm)); \ 5278 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 5067 5279 } IEM_MC_NATIVE_ENDIF(); \ 5068 5280 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 5082 5294 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 5083 5295 } IEM_MC_NATIVE_ELSE() { \ 5084 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \5296 IEM_MC_ARG(uint64_t *, pu64Dst, 1); \ 5085 5297 IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 5086 IEM_MC_ARG (uint32_t *, pEFlags, 2); \5087 IEM_MC_ REF_EFLAGS(pEFlags); \5088 IEM_MC_ ARG_CONST(uint64_t, u64Src, /*=*/ (uint64_t)(int64_t)(int8_t)u8Imm, 1); \5089 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u64), pu64Dst, u64Src, pEFlags); \5298 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 5299 IEM_MC_ARG_CONST(uint64_t, u64Src, /*=*/ (uint64_t)(int64_t)(int8_t)u8Imm, 2); \ 5300 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u64), fEFlagsIn, pu64Dst, u64Src); \ 5301 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 5090 5302 } IEM_MC_NATIVE_ENDIF(); \ 5091 5303 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 5114 5326 \ 5115 5327 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 5116 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \5328 IEM_MC_ARG(uint16_t *, pu16Dst, 1); \ 5117 5329 IEM_MC_MEM_MAP_U16_RW(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 5118 5330 \ 5119 IEM_MC_ARG_ CONST(uint16_t, u16Src, (uint16_t)(int16_t)(int8_t)u8Imm, 1); \5120 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags,2); \5121 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u16), pu16Dst, u16Src, pEFlags); \5331 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 5332 IEM_MC_ARG_CONST(uint16_t, u16Src, (uint16_t)(int16_t)(int8_t)u8Imm, 2); \ 5333 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u16), fEFlagsIn, pu16Dst, u16Src); \ 5122 5334 \ 5123 5335 IEM_MC_MEM_COMMIT_AND_UNMAP_RW(bUnmapInfo); \ 5124 IEM_MC_COMMIT_EFLAGS( EFlags); \5336 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 5125 5337 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 5126 5338 IEM_MC_END(); \ … … 5136 5348 \ 5137 5349 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 5138 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \5350 IEM_MC_ARG(uint32_t *, pu32Dst, 1); \ 5139 5351 IEM_MC_MEM_MAP_U32_RW(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 5140 5352 \ 5141 IEM_MC_ARG_ CONST(uint32_t, u32Src, (uint32_t)(int32_t)(int8_t)u8Imm, 1); \5142 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags,2); \5143 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u32), pu32Dst, u32Src, pEFlags); \5353 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 5354 IEM_MC_ARG_CONST(uint32_t, u32Src, (uint32_t)(int32_t)(int8_t)u8Imm, 2); \ 5355 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u32), fEFlagsIn, pu32Dst, u32Src); \ 5144 5356 \ 5145 5357 IEM_MC_MEM_COMMIT_AND_UNMAP_RW(bUnmapInfo); \ 5146 IEM_MC_COMMIT_EFLAGS( EFlags); \5358 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 5147 5359 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 5148 5360 IEM_MC_END(); \ … … 5158 5370 \ 5159 5371 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 5160 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \5372 IEM_MC_ARG(uint64_t *, pu64Dst, 1); \ 5161 5373 IEM_MC_MEM_MAP_U64_RW(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 5162 5374 \ 5163 IEM_MC_ARG_ CONST(uint64_t, u64Src, (uint64_t)(int64_t)(int8_t)u8Imm, 1); \5164 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags,2); \5165 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u64), pu64Dst, u64Src, pEFlags); \5375 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 5376 IEM_MC_ARG_CONST(uint64_t, u64Src, (uint64_t)(int64_t)(int8_t)u8Imm, 2); \ 5377 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u64), fEFlagsIn, pu64Dst, u64Src); \ 5166 5378 \ 5167 5379 IEM_MC_MEM_COMMIT_AND_UNMAP_RW(bUnmapInfo); \ 5168 IEM_MC_COMMIT_EFLAGS( EFlags); \5380 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 5169 5381 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 5170 5382 IEM_MC_END(); \ … … 5187 5399 \ 5188 5400 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 5189 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \5401 IEM_MC_ARG(uint16_t *, pu16Dst, 1); \ 5190 5402 IEM_MC_MEM_MAP_U16_ATOMIC(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 5191 5403 \ 5192 IEM_MC_ARG_ CONST(uint16_t, u16Src, (uint16_t)(int16_t)(int8_t)u8Imm, 1); \5193 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags,2); \5194 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u16_locked), pu16Dst, u16Src, pEFlags); \5404 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 5405 IEM_MC_ARG_CONST(uint16_t, u16Src, (uint16_t)(int16_t)(int8_t)u8Imm, 2); \ 5406 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u16_locked), fEFlagsIn, pu16Dst, u16Src); \ 5195 5407 \ 5196 5408 IEM_MC_MEM_COMMIT_AND_UNMAP_ATOMIC(bUnmapInfo); \ 5197 IEM_MC_COMMIT_EFLAGS( EFlags); \5409 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 5198 5410 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 5199 5411 IEM_MC_END(); \ … … 5209 5421 \ 5210 5422 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 5211 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \5423 IEM_MC_ARG(uint32_t *, pu32Dst, 1); \ 5212 5424 IEM_MC_MEM_MAP_U32_ATOMIC(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 5213 5425 \ 5214 IEM_MC_ARG_ CONST(uint32_t, u32Src, (uint32_t)(int32_t)(int8_t)u8Imm, 1); \5215 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags,2); \5216 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u32_locked), pu32Dst, u32Src, pEFlags); \5426 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 5427 IEM_MC_ARG_CONST(uint32_t, u32Src, (uint32_t)(int32_t)(int8_t)u8Imm, 2); \ 5428 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u32_locked), fEFlagsIn, pu32Dst, u32Src); \ 5217 5429 \ 5218 5430 IEM_MC_MEM_COMMIT_AND_UNMAP_ATOMIC(bUnmapInfo); \ 5219 IEM_MC_COMMIT_EFLAGS( EFlags); \5431 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 5220 5432 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 5221 5433 IEM_MC_END(); \ … … 5231 5443 \ 5232 5444 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 5233 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \5445 IEM_MC_ARG(uint64_t *, pu64Dst, 1); \ 5234 5446 IEM_MC_MEM_MAP_U64_ATOMIC(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 5235 5447 \ 5236 IEM_MC_ARG_ CONST(uint64_t, u64Src, (uint64_t)(int64_t)(int8_t)u8Imm, 1); \5237 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags,2); \5238 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u64_locked), pu64Dst, u64Src, pEFlags); \5448 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 5449 IEM_MC_ARG_CONST(uint64_t, u64Src, (uint64_t)(int64_t)(int8_t)u8Imm, 2); \ 5450 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u64_locked), fEFlagsIn, pu64Dst, u64Src); \ 5239 5451 \ 5240 5452 IEM_MC_MEM_COMMIT_AND_UNMAP_ATOMIC(bUnmapInfo); \ 5241 IEM_MC_COMMIT_EFLAGS( EFlags); \5453 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 5242 5454 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ 5243 5455 IEM_MC_END(); \ … … 5266 5478 IEM_MC_LOCAL(uint16_t, u16Dst); \ 5267 5479 IEM_MC_FETCH_GREG_U16(u16Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 5268 IEM_MC_LOCAL(uint32_t, uEFlags); \ 5269 IEM_MC_FETCH_EFLAGS(uEFlags); \ 5480 IEM_MC_LOCAL_EFLAGS( uEFlags); \ 5270 5481 IEM_MC_NATIVE_EMIT_5(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_i_efl), u16Dst, (uint16_t)(int16_t)(int8_t)u8Imm, uEFlags, 16, 8); \ 5271 5482 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 5272 5483 } IEM_MC_NATIVE_ELSE() { \ 5273 IEM_MC_ARG(uint16_t const *, pu16Dst, 0); \5484 IEM_MC_ARG(uint16_t const *,pu16Dst, 1); \ 5274 5485 IEM_MC_REF_GREG_U16_CONST(pu16Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 5275 IEM_MC_ARG (uint32_t *, pEFlags, 2); \5276 IEM_MC_ARG_CONST(uint16_t, u16Src, /*=*/ (uint16_t)(int16_t)(int8_t)u8Imm, 1); \5277 IEM_MC_ REF_EFLAGS(pEFlags); \5278 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u16), pu16Dst, u16Src, pEFlags); \5486 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 5487 IEM_MC_ARG_CONST(uint16_t, u16Src, /*=*/ (uint16_t)(int16_t)(int8_t)u8Imm, 2); \ 5488 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u16), fEFlagsIn, pu16Dst, u16Src); \ 5489 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 5279 5490 } IEM_MC_NATIVE_ENDIF(); \ 5280 5491 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 5288 5499 IEM_MC_LOCAL(uint32_t, u32Dst); \ 5289 5500 IEM_MC_FETCH_GREG_U32(u32Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 5290 IEM_MC_LOCAL(uint32_t, uEFlags); \ 5291 IEM_MC_FETCH_EFLAGS(uEFlags); \ 5501 IEM_MC_LOCAL_EFLAGS( uEFlags); \ 5292 5502 IEM_MC_NATIVE_EMIT_5(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_i_efl), u32Dst, (uint32_t)(int32_t)(int8_t)u8Imm, uEFlags, 32, 8); \ 5293 5503 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 5294 5504 } IEM_MC_NATIVE_ELSE() { \ 5295 IEM_MC_ARG(uint32_t const *, pu32Dst, 0); \5505 IEM_MC_ARG(uint32_t const *,pu32Dst, 1); \ 5296 5506 IEM_MC_REF_GREG_U32_CONST(pu32Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 5297 IEM_MC_ARG (uint32_t *, pEFlags, 2); \5298 IEM_MC_ REF_EFLAGS(pEFlags); \5299 IEM_MC_ ARG_CONST(uint32_t, u32Src, /*=*/ (uint32_t)(int32_t)(int8_t)u8Imm, 1); \5300 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u32), pu32Dst, u32Src, pEFlags); \5507 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 5508 IEM_MC_ARG_CONST(uint32_t, u32Src, /*=*/ (uint32_t)(int32_t)(int8_t)u8Imm, 2); \ 5509 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u32), fEFlagsIn, pu32Dst, u32Src); \ 5510 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 5301 5511 } IEM_MC_NATIVE_ENDIF(); \ 5302 5512 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 5310 5520 IEM_MC_LOCAL(uint64_t, u64Dst); \ 5311 5521 IEM_MC_FETCH_GREG_U64(u64Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 5312 IEM_MC_LOCAL(uint32_t, uEFlags); \ 5313 IEM_MC_FETCH_EFLAGS(uEFlags); \ 5522 IEM_MC_LOCAL_EFLAGS( uEFlags); \ 5314 5523 IEM_MC_NATIVE_EMIT_5(RT_CONCAT3(iemNativeEmit_,a_InsNm,_r_i_efl), u64Dst, (uint64_t)(int64_t)(int8_t)u8Imm, uEFlags, 64, 8); \ 5315 5524 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); \ 5316 5525 } IEM_MC_NATIVE_ELSE() { \ 5317 IEM_MC_ARG(uint64_t const *, pu64Dst, 0); \5526 IEM_MC_ARG(uint64_t const *,pu64Dst, 1); \ 5318 5527 IEM_MC_REF_GREG_U64_CONST(pu64Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 5319 IEM_MC_ARG (uint32_t *, pEFlags, 2); \5320 IEM_MC_ REF_EFLAGS(pEFlags); \5321 IEM_MC_ ARG_CONST(uint64_t, u64Src, /*=*/ (uint64_t)(int64_t)(int8_t)u8Imm, 1); \5322 IEM_MC_C ALL_VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u64), pu64Dst, u64Src, pEFlags); \5528 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 5529 IEM_MC_ARG_CONST(uint64_t, u64Src, /*=*/ (uint64_t)(int64_t)(int8_t)u8Imm, 2); \ 5530 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u64), fEFlagsIn, pu64Dst, u64Src); \ 5531 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 5323 5532 } IEM_MC_NATIVE_ENDIF(); \ 5324 5533 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 5352 5561 } IEM_MC_NATIVE_ELSE() { \ 5353 5562 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 5354 IEM_MC_ARG(uint16_t const *, pu16Dst, 0); \5563 IEM_MC_ARG(uint16_t const *, pu16Dst, 1); \ 5355 5564 IEM_MC_MEM_MAP_U16_RO(pu16Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 5356 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags, 2); \5357 IEM_MC_ARG_CONST(uint16_t, u16Src, (uint16_t)(int16_t)(int8_t)u8Imm, 1); \5358 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u16), pu16Dst, u16Src, pEFlags); \5565 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 5566 IEM_MC_ARG_CONST(uint16_t, u16Src, (uint16_t)(int16_t)(int8_t)u8Imm, 2); \ 5567 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u16), fEFlagsIn, pu16Dst, u16Src); \ 5359 5568 IEM_MC_MEM_COMMIT_AND_UNMAP_RO(bUnmapInfo); \ 5360 IEM_MC_COMMIT_EFLAGS( EFlags); \5569 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 5361 5570 } IEM_MC_NATIVE_ENDIF(); \ 5362 5571 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 5378 5587 } IEM_MC_NATIVE_ELSE() { \ 5379 5588 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 5380 IEM_MC_ARG(uint32_t const *, pu32Dst, 0); \5589 IEM_MC_ARG(uint32_t const *, pu32Dst, 1); \ 5381 5590 IEM_MC_MEM_MAP_U32_RO(pu32Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 5382 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags, 2); \5383 IEM_MC_ARG_CONST(uint32_t, u32Src, (uint32_t)(int32_t)(int8_t)u8Imm, 1); \5384 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u32), pu32Dst, u32Src, pEFlags); \5591 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 5592 IEM_MC_ARG_CONST(uint32_t, u32Src, (uint32_t)(int32_t)(int8_t)u8Imm, 2); \ 5593 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u32), fEFlagsIn, pu32Dst, u32Src); \ 5385 5594 IEM_MC_MEM_COMMIT_AND_UNMAP_RO(bUnmapInfo); \ 5386 IEM_MC_COMMIT_EFLAGS( EFlags); \5595 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 5387 5596 } IEM_MC_NATIVE_ENDIF(); \ 5388 5597 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 5404 5613 } IEM_MC_NATIVE_ELSE() { \ 5405 5614 IEM_MC_LOCAL(uint8_t, bUnmapInfo); \ 5406 IEM_MC_ARG(uint64_t const *, pu64Dst, 0); \5615 IEM_MC_ARG(uint64_t const *, pu64Dst, 1); \ 5407 5616 IEM_MC_MEM_MAP_U64_RO(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \ 5408 IEM_MC_ARG_ LOCAL_EFLAGS( pEFlags, EFlags, 2); \5409 IEM_MC_ARG_CONST(uint64_t, u64Src, (uint64_t)(int64_t)(int8_t)u8Imm, 1); \5410 IEM_MC_CALL_ VOID_AIMPL_3(RT_CONCAT3(iemAImpl_,a_InsNm,_u64), pu64Dst, u64Src, pEFlags); \5617 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 5618 IEM_MC_ARG_CONST(uint64_t, u64Src, (uint64_t)(int64_t)(int8_t)u8Imm, 2); \ 5619 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, RT_CONCAT3(iemAImpl_,a_InsNm,_u64), fEFlagsIn, pu64Dst, u64Src); \ 5411 5620 IEM_MC_MEM_COMMIT_AND_UNMAP_RO(bUnmapInfo); \ 5412 IEM_MC_COMMIT_EFLAGS( EFlags); \5621 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 5413 5622 } IEM_MC_NATIVE_ENDIF(); \ 5414 5623 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 5567 5776 IEM_MC_BEGIN(0, 0); 5568 5777 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5569 IEM_MC_ARG(uint8_t, u8Src, 1);5778 IEM_MC_ARG(uint8_t, u8Src, 2); 5570 5779 IEM_MC_FETCH_GREG_U8(u8Src, IEM_GET_MODRM_REG(pVCpu, bRm)); 5571 5780 IEM_MC_NATIVE_IF(RT_ARCH_VAL_AMD64 | RT_ARCH_VAL_ARM64) { … … 5574 5783 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); 5575 5784 } IEM_MC_NATIVE_ELSE() { 5576 IEM_MC_ARG(uint8_t *, pu8Dst, 0);5785 IEM_MC_ARG(uint8_t *, pu8Dst, 1); 5577 5786 IEM_MC_REF_GREG_U8(pu8Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); /* == IEM_GET_MODRM_RM(pVCpu, bRm) */ 5578 IEM_MC_ARG (uint32_t *, pEFlags, 2);5579 IEM_MC_ REF_EFLAGS(pEFlags);5580 IEM_MC_C ALL_VOID_AIMPL_3(iemAImpl_test_u8, pu8Dst, u8Src, pEFlags);5787 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); 5788 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, iemAImpl_test_u8, fEFlagsIn, pu8Dst, u8Src); 5789 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); 5581 5790 } IEM_MC_NATIVE_ENDIF(); 5582 5791 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 5611 5820 IEM_MC_BEGIN(0, 0); 5612 5821 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5613 IEM_MC_ARG(uint16_t, u16Src, 1);5822 IEM_MC_ARG(uint16_t, u16Src, 2); 5614 5823 IEM_MC_FETCH_GREG_U16(u16Src, IEM_GET_MODRM_REG(pVCpu, bRm)); 5615 5824 IEM_MC_NATIVE_IF(RT_ARCH_VAL_AMD64 | RT_ARCH_VAL_ARM64) { … … 5618 5827 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); 5619 5828 } IEM_MC_NATIVE_ELSE() { 5620 IEM_MC_ARG(uint16_t *, pu16Dst, 0);5829 IEM_MC_ARG(uint16_t *, pu16Dst, 1); 5621 5830 IEM_MC_REF_GREG_U16(pu16Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); /* == IEM_GET_MODRM_RM(pVCpu, bRm) */ 5622 IEM_MC_ARG (uint32_t *, pEFlags, 2);5623 IEM_MC_ REF_EFLAGS(pEFlags);5624 IEM_MC_C ALL_VOID_AIMPL_3(iemAImpl_test_u16, pu16Dst, u16Src, pEFlags);5831 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); 5832 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, iemAImpl_test_u16, fEFlagsIn, pu16Dst, u16Src); 5833 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); 5625 5834 } IEM_MC_NATIVE_ENDIF(); 5626 5835 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 5631 5840 IEM_MC_BEGIN(IEM_MC_F_MIN_386, 0); 5632 5841 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5633 IEM_MC_ARG(uint32_t, u32Src, 1);5842 IEM_MC_ARG(uint32_t, u32Src, 2); 5634 5843 IEM_MC_FETCH_GREG_U32(u32Src, IEM_GET_MODRM_REG(pVCpu, bRm)); 5635 5844 IEM_MC_NATIVE_IF(RT_ARCH_VAL_AMD64 | RT_ARCH_VAL_ARM64) { … … 5638 5847 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); 5639 5848 } IEM_MC_NATIVE_ELSE() { 5640 IEM_MC_ARG(uint32_t *, pu32Dst, 0);5849 IEM_MC_ARG(uint32_t *, pu32Dst, 1); 5641 5850 IEM_MC_REF_GREG_U32(pu32Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); /* == IEM_GET_MODRM_RM(pVCpu, bRm) */ 5642 IEM_MC_ARG (uint32_t *, pEFlags, 2);5643 IEM_MC_ REF_EFLAGS(pEFlags);5644 IEM_MC_C ALL_VOID_AIMPL_3(iemAImpl_test_u32, pu32Dst, u32Src, pEFlags);5851 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); 5852 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, iemAImpl_test_u32, fEFlagsIn, pu32Dst, u32Src); 5853 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); 5645 5854 } IEM_MC_NATIVE_ENDIF(); 5646 5855 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 5651 5860 IEM_MC_BEGIN(IEM_MC_F_64BIT, 0); 5652 5861 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 5653 IEM_MC_ARG(uint64_t, u64Src, 1);5862 IEM_MC_ARG(uint64_t, u64Src, 2); 5654 5863 IEM_MC_FETCH_GREG_U64(u64Src, IEM_GET_MODRM_REG(pVCpu, bRm)); 5655 5864 IEM_MC_NATIVE_IF(RT_ARCH_VAL_AMD64 | RT_ARCH_VAL_ARM64) { … … 5658 5867 IEM_MC_COMMIT_EFLAGS_OPT(uEFlags); 5659 5868 } IEM_MC_NATIVE_ELSE() { 5660 IEM_MC_ARG(uint64_t *, pu64Dst, 0);5869 IEM_MC_ARG(uint64_t *, pu64Dst, 1); 5661 5870 IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); /* == IEM_GET_MODRM_RM(pVCpu, bRm) */ 5662 IEM_MC_ARG (uint32_t *, pEFlags, 2);5663 IEM_MC_ REF_EFLAGS(pEFlags);5664 IEM_MC_C ALL_VOID_AIMPL_3(iemAImpl_test_u64, pu64Dst, u64Src, pEFlags);5871 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); 5872 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, iemAImpl_test_u64, fEFlagsIn, pu64Dst, u64Src); 5873 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); 5665 5874 } IEM_MC_NATIVE_ENDIF(); 5666 5875 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 7395 7604 IEM_MC_LOCAL(RTGCPTR, uAddr2); \ 7396 7605 IEM_MC_FETCH_GREG_U##AddrBits##_ZX_U64(uAddr2, X86_GREG_xDI); \ 7397 IEM_MC_ARG(uint##ValBits##_t, uValue2, 1); \7606 IEM_MC_ARG(uint##ValBits##_t, uValue2, 2); \ 7398 7607 IEM_MC_FETCH_MEM_U##ValBits(uValue2, X86_SREG_ES, uAddr2); \ 7399 7608 \ 7400 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 7401 IEM_MC_REF_EFLAGS(pEFlags); \ 7402 IEM_MC_ARG_LOCAL_REF(uint##ValBits##_t *, puValue1, uValue1, 0); \ 7403 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cmp_u##ValBits, puValue1, uValue2, pEFlags); \ 7609 IEM_MC_ARG_LOCAL_REF(uint##ValBits##_t *, puValue1, uValue1, 1); \ 7610 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 7611 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, iemAImpl_cmp_u##ValBits, fEFlagsIn, puValue1, uValue2); \ 7404 7612 \ 7613 IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \ 7405 7614 IEM_MC_IF_EFL_BIT_SET(X86_EFL_DF) { \ 7406 7615 IEM_MC_SUB_GREG_U##AddrBits(X86_GREG_xDI, ValBits / 8); \ … … 8098 8307 IEM_MC_BEGIN(a_fMcFlags, 0); \ 8099 8308 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \ 8100 IEM_MC_ARG(uint##ValBits##_t *, puRax, 0); \ 8101 IEM_MC_ARG(uint##ValBits##_t, uValue, 1); \ 8102 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 8309 \ 8103 8310 IEM_MC_LOCAL(RTGCPTR, uAddr); \ 8311 IEM_MC_FETCH_GREG_U##AddrBits##_ZX_U64(uAddr, X86_GREG_xDI); \ 8104 8312 \ 8105 IEM_MC_ FETCH_GREG_U##AddrBits##_ZX_U64(uAddr, X86_GREG_xDI); \8313 IEM_MC_ARG(uint##ValBits##_t, uValue, 2); \ 8106 8314 IEM_MC_FETCH_MEM_U##ValBits(uValue, X86_SREG_ES, uAddr); \ 8315 IEM_MC_ARG(uint##ValBits##_t *, puRax, 1); \ 8107 8316 IEM_MC_REF_GREG_U##ValBits(puRax, X86_GREG_xAX); \ 8108 IEM_MC_ REF_EFLAGS(pEFlags); \8109 IEM_MC_CALL_ VOID_AIMPL_3(iemAImpl_cmp_u##ValBits, puRax, uValue, pEFlags); \8317 IEM_MC_ARG_EFLAGS( fEFlagsIn, 0); \ 8318 IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, iemAImpl_cmp_u##ValBits, fEFlagsIn, puRax, uValue); \ 8110 8319 \ 8320 IEM_MC_COMMIT_EFLAGS(fEFlagsRet);\ 8111 8321 IEM_MC_IF_EFL_BIT_SET(X86_EFL_DF) { \ 8112 8322 IEM_MC_SUB_GREG_U##AddrBits(X86_GREG_xDI, ValBits / 8); \ … … 14358 14568 IEM_MC_ARG(uint8_t, u8Value, 1); \ 14359 14569 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 14360 IEM_MC_LOCAL(int32_t, rc); \14361 14570 \ 14362 14571 IEM_MC_FETCH_GREG_U8(u8Value, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 14363 14572 IEM_MC_REF_GREG_U16(pu16AX, X86_GREG_xAX); \ 14364 14573 IEM_MC_REF_EFLAGS(pEFlags); \ 14365 IEM_MC_CALL_AIMPL_3( rc, pfnU8, pu16AX, u8Value, pEFlags); \14574 IEM_MC_CALL_AIMPL_3(int32_t, rc, pfnU8, pu16AX, u8Value, pEFlags); \ 14366 14575 IEM_MC_IF_LOCAL_IS_Z(rc) { \ 14367 14576 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 14380 14589 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 14381 14590 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 14382 IEM_MC_LOCAL(int32_t, rc); \14383 14591 \ 14384 14592 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \ … … 14387 14595 IEM_MC_REF_GREG_U16(pu16AX, X86_GREG_xAX); \ 14388 14596 IEM_MC_REF_EFLAGS(pEFlags); \ 14389 IEM_MC_CALL_AIMPL_3( rc, pfnU8, pu16AX, u8Value, pEFlags); \14597 IEM_MC_CALL_AIMPL_3(int32_t, rc, pfnU8, pu16AX, u8Value, pEFlags); \ 14390 14598 IEM_MC_IF_LOCAL_IS_Z(rc) { \ 14391 14599 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 14413 14621 IEM_MC_ARG(uint16_t, u16Value, 2); \ 14414 14622 IEM_MC_ARG(uint32_t *, pEFlags, 3); \ 14415 IEM_MC_LOCAL(int32_t, rc); \14416 14623 \ 14417 14624 IEM_MC_FETCH_GREG_U16(u16Value, IEM_GET_MODRM_RM(pVCpu, bRm)); \ … … 14419 14626 IEM_MC_REF_GREG_U16(pu16DX, X86_GREG_xDX); \ 14420 14627 IEM_MC_REF_EFLAGS(pEFlags); \ 14421 IEM_MC_CALL_AIMPL_4( rc, pImpl->pfnU16, pu16AX, pu16DX, u16Value, pEFlags); \14628 IEM_MC_CALL_AIMPL_4(int32_t, rc, pImpl->pfnU16, pu16AX, pu16DX, u16Value, pEFlags); \ 14422 14629 IEM_MC_IF_LOCAL_IS_Z(rc) { \ 14423 14630 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 14436 14643 IEM_MC_ARG(uint32_t, u32Value, 2); \ 14437 14644 IEM_MC_ARG(uint32_t *, pEFlags, 3); \ 14438 IEM_MC_LOCAL(int32_t, rc); \14439 14645 \ 14440 14646 IEM_MC_FETCH_GREG_U32(u32Value, IEM_GET_MODRM_RM(pVCpu, bRm)); \ … … 14442 14648 IEM_MC_REF_GREG_U32(pu32DX, X86_GREG_xDX); \ 14443 14649 IEM_MC_REF_EFLAGS(pEFlags); \ 14444 IEM_MC_CALL_AIMPL_4( rc, pImpl->pfnU32, pu32AX, pu32DX, u32Value, pEFlags); \14650 IEM_MC_CALL_AIMPL_4(int32_t, rc, pImpl->pfnU32, pu32AX, pu32DX, u32Value, pEFlags); \ 14445 14651 IEM_MC_IF_LOCAL_IS_Z(rc) { \ 14446 14652 IEM_MC_CLEAR_HIGH_GREG_U64(X86_GREG_xAX); \ … … 14461 14667 IEM_MC_ARG(uint64_t, u64Value, 2); \ 14462 14668 IEM_MC_ARG(uint32_t *, pEFlags, 3); \ 14463 IEM_MC_LOCAL(int32_t, rc); \14464 14669 \ 14465 14670 IEM_MC_FETCH_GREG_U64(u64Value, IEM_GET_MODRM_RM(pVCpu, bRm)); \ … … 14467 14672 IEM_MC_REF_GREG_U64(pu64DX, X86_GREG_xDX); \ 14468 14673 IEM_MC_REF_EFLAGS(pEFlags); \ 14469 IEM_MC_CALL_AIMPL_4( rc, pImpl->pfnU64, pu64AX, pu64DX, u64Value, pEFlags); \14674 IEM_MC_CALL_AIMPL_4(int32_t, rc, pImpl->pfnU64, pu64AX, pu64DX, u64Value, pEFlags); \ 14470 14675 IEM_MC_IF_LOCAL_IS_Z(rc) { \ 14471 14676 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 14492 14697 IEM_MC_ARG(uint32_t *, pEFlags, 3); \ 14493 14698 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 14494 IEM_MC_LOCAL(int32_t, rc); \14495 14699 \ 14496 14700 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \ … … 14500 14704 IEM_MC_REF_GREG_U16(pu16DX, X86_GREG_xDX); \ 14501 14705 IEM_MC_REF_EFLAGS(pEFlags); \ 14502 IEM_MC_CALL_AIMPL_4( rc, pImpl->pfnU16, pu16AX, pu16DX, u16Value, pEFlags); \14706 IEM_MC_CALL_AIMPL_4(int32_t, rc, pImpl->pfnU16, pu16AX, pu16DX, u16Value, pEFlags); \ 14503 14707 IEM_MC_IF_LOCAL_IS_Z(rc) { \ 14504 14708 IEM_MC_ADVANCE_RIP_AND_FINISH(); \ … … 14517 14721 IEM_MC_ARG(uint32_t *, pEFlags, 3); \ 14518 14722 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 14519 IEM_MC_LOCAL(int32_t, rc); \14520 14723 \ 14521 14724 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \ … … 14525 14728 IEM_MC_REF_GREG_U32(pu32DX, X86_GREG_xDX); \ 14526 14729 IEM_MC_REF_EFLAGS(pEFlags); \ 14527 IEM_MC_CALL_AIMPL_4( rc, pImpl->pfnU32, pu32AX, pu32DX, u32Value, pEFlags); \14730 IEM_MC_CALL_AIMPL_4(int32_t, rc, pImpl->pfnU32, pu32AX, pu32DX, u32Value, pEFlags); \ 14528 14731 IEM_MC_IF_LOCAL_IS_Z(rc) { \ 14529 14732 IEM_MC_CLEAR_HIGH_GREG_U64(X86_GREG_xAX); \ … … 14544 14747 IEM_MC_ARG(uint32_t *, pEFlags, 3); \ 14545 14748 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); \ 14546 IEM_MC_LOCAL(int32_t, rc); \14547 14749 \ 14548 14750 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \ … … 14552 14754 IEM_MC_REF_GREG_U64(pu64DX, X86_GREG_xDX); \ 14553 14755 IEM_MC_REF_EFLAGS(pEFlags); \ 14554 IEM_MC_CALL_AIMPL_4( rc, pImpl->pfnU64, pu64AX, pu64DX, u64Value, pEFlags); \14756 IEM_MC_CALL_AIMPL_4(int32_t, rc, pImpl->pfnU64, pu64AX, pu64DX, u64Value, pEFlags); \ 14555 14757 IEM_MC_IF_LOCAL_IS_Z(rc) { \ 14556 14758 IEM_MC_ADVANCE_RIP_AND_FINISH(); \
Note:
See TracChangeset
for help on using the changeset viewer.