Changeset 102572 in vbox for trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h
- Timestamp:
- Dec 11, 2023 3:20:48 PM (14 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h
r102522 r102572 2352 2352 { 2353 2353 case IEMMODE_16BIT: 2354 IEM_MC_BEGIN(0, 1, 0, 0);2354 IEM_MC_BEGIN(0, 0, 0, 0); 2355 2355 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2356 IEM_MC_LOCAL(uint16_t *, pu16Dst); 2357 IEM_MC_REF_GREG_U16(pu16Dst, iReg); 2358 IEM_MC_POP_U16(pu16Dst); 2356 IEM_MC_POP_GREG_U16(iReg); 2359 2357 IEM_MC_ADVANCE_RIP_AND_FINISH(); 2360 2358 IEM_MC_END(); … … 2362 2360 2363 2361 case IEMMODE_32BIT: 2364 IEM_MC_BEGIN(0, 1, IEM_MC_F_MIN_386 | IEM_MC_F_NOT_64BIT, 0);2362 IEM_MC_BEGIN(0, 0, IEM_MC_F_MIN_386 | IEM_MC_F_NOT_64BIT, 0); 2365 2363 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2366 IEM_MC_LOCAL(uint32_t *, pu32Dst); 2367 IEM_MC_REF_GREG_U32(pu32Dst, iReg); 2368 IEM_MC_POP_U32(pu32Dst); 2369 IEM_MC_CLEAR_HIGH_GREG_U64(iReg); /** @todo testcase*/ 2364 IEM_MC_POP_GREG_U32(iReg); 2370 2365 IEM_MC_ADVANCE_RIP_AND_FINISH(); 2371 2366 IEM_MC_END(); … … 2373 2368 2374 2369 case IEMMODE_64BIT: 2375 IEM_MC_BEGIN(0, 1, IEM_MC_F_64BIT, 0);2370 IEM_MC_BEGIN(0, 0, IEM_MC_F_64BIT, 0); 2376 2371 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 2377 IEM_MC_LOCAL(uint64_t *, pu64Dst); 2378 IEM_MC_REF_GREG_U64(pu64Dst, iReg); 2379 IEM_MC_POP_U64(pu64Dst); 2372 IEM_MC_POP_GREG_U64(iReg); 2380 2373 IEM_MC_ADVANCE_RIP_AND_FINISH(); 2381 2374 IEM_MC_END(); … … 2433 2426 { 2434 2427 IEMOP_MNEMONIC(pop_rSP, "pop rSP"); 2435 if (IEM_IS_64BIT_CODE(pVCpu)) 2436 { 2437 if (pVCpu->iem.s.uRexB) 2438 return FNIEMOP_CALL_1(iemOpCommonPopGReg, X86_GREG_xSP); 2439 pVCpu->iem.s.enmDefOpSize = IEMMODE_64BIT; 2440 pVCpu->iem.s.enmEffOpSize = !(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_OP) ? IEMMODE_64BIT : IEMMODE_16BIT; 2441 } 2442 2443 /** @todo add testcase for this instruction. */ 2444 switch (pVCpu->iem.s.enmEffOpSize) 2445 { 2446 case IEMMODE_16BIT: 2447 IEM_MC_BEGIN(0, 2, 0, 0); 2448 IEMOP_HLP_DECODED_NL_1(OP_POP, IEMOPFORM_FIXED, OP_PARM_REG_ESP, 2449 DISOPTYPE_HARMLESS | DISOPTYPE_X86_DEFAULT_64_OP_SIZE | DISOPTYPE_X86_REXB_EXTENDS_OPREG); 2450 IEM_MC_LOCAL(uint16_t, u16Dst); 2451 IEM_MC_LOCAL(uint16_t *, pu16Dst); 2452 IEM_MC_REF_LOCAL(pu16Dst, u16Dst); 2453 IEM_MC_POP_U16(pu16Dst); /** @todo not correct MC, fix later. */ 2454 IEM_MC_STORE_GREG_U16(X86_GREG_xSP, u16Dst); 2455 IEM_MC_ADVANCE_RIP_AND_FINISH(); 2456 IEM_MC_END(); 2457 break; 2458 2459 case IEMMODE_32BIT: 2460 IEM_MC_BEGIN(0, 2, IEM_MC_F_MIN_386, 0); 2461 IEMOP_HLP_DECODED_NL_1(OP_POP, IEMOPFORM_FIXED, OP_PARM_REG_ESP, 2462 DISOPTYPE_HARMLESS | DISOPTYPE_X86_DEFAULT_64_OP_SIZE | DISOPTYPE_X86_REXB_EXTENDS_OPREG); 2463 IEM_MC_LOCAL(uint32_t, u32Dst); 2464 IEM_MC_LOCAL(uint32_t *, pu32Dst); 2465 IEM_MC_REF_LOCAL(pu32Dst, u32Dst); 2466 IEM_MC_POP_U32(pu32Dst); 2467 IEM_MC_STORE_GREG_U32(X86_GREG_xSP, u32Dst); 2468 IEM_MC_ADVANCE_RIP_AND_FINISH(); 2469 IEM_MC_END(); 2470 break; 2471 2472 case IEMMODE_64BIT: 2473 IEM_MC_BEGIN(0, 2, IEM_MC_F_64BIT, 0); 2474 IEMOP_HLP_DECODED_NL_1(OP_POP, IEMOPFORM_FIXED, OP_PARM_REG_ESP, 2475 DISOPTYPE_HARMLESS | DISOPTYPE_X86_DEFAULT_64_OP_SIZE | DISOPTYPE_X86_REXB_EXTENDS_OPREG); 2476 IEM_MC_LOCAL(uint64_t, u64Dst); 2477 IEM_MC_LOCAL(uint64_t *, pu64Dst); 2478 IEM_MC_REF_LOCAL(pu64Dst, u64Dst); 2479 IEM_MC_POP_U64(pu64Dst); 2480 IEM_MC_STORE_GREG_U64(X86_GREG_xSP, u64Dst); 2481 IEM_MC_ADVANCE_RIP_AND_FINISH(); 2482 IEM_MC_END(); 2483 break; 2484 2485 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 2486 } 2428 return FNIEMOP_CALL_1(iemOpCommonPopGReg, X86_GREG_xSP); 2487 2429 } 2488 2430
Note:
See TracChangeset
for help on using the changeset viewer.