Changeset 66920 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- May 16, 2017 7:21:21 PM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 115447
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r66909 r66920 11493 11493 } while (0) 11494 11494 11495 #define IEM_MC_FETCH_YREG_U32(a_u32Dst, a_iYRegSrc) \ 11496 do { PX86XSAVEAREA pXStateTmp = IEM_GET_CTX(pVCpu)->CTX_SUFF(pXState); \ 11497 uintptr_t const iYRegSrcTmp = (a_iYRegSrc); \ 11498 (a_u32Dst) = pXStateTmp->x87.aXMM[iYRegSrcTmp].au32[0]; \ 11499 } while (0) 11495 11500 #define IEM_MC_FETCH_YREG_U64(a_u64Dst, a_iYRegSrc) \ 11496 11501 do { PX86XSAVEAREA pXStateTmp = IEM_GET_CTX(pVCpu)->CTX_SUFF(pXState); \ 11497 11502 uintptr_t const iYRegSrcTmp = (a_iYRegSrc); \ 11498 (a_u64Dst) .au64[0]= pXStateTmp->x87.aXMM[iYRegSrcTmp].au64[0]; \11503 (a_u64Dst) = pXStateTmp->x87.aXMM[iYRegSrcTmp].au64[0]; \ 11499 11504 } while (0) 11500 11505 #define IEM_MC_FETCH_YREG_U128(a_u128Dst, a_iYRegSrc) \ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py
r66909 r66920 233 233 'UqHi': ( 'IDX_UseModRM', 'rm', '%Uq', 'UqHi', ), 234 234 'Uss': ( 'IDX_UseModRM', 'rm', '%Uss', 'Uss', ), 235 'Uss_WO': ( 'IDX_UseModRM', 'rm', '%Uss', 'Uss', ), 235 236 'Usd': ( 'IDX_UseModRM', 'rm', '%Usd', 'Usd', ), 236 237 'Nq': ( 'IDX_UseModRM', 'rm', '%Qq', 'Nq', ), -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h
r66919 r66920 306 306 * @opgroup og_avx_simdfp_datamove 307 307 * @opxcpttype 5 308 * @opfunction iemOp_vmovs s_Vss_Hss_Wss308 * @opfunction iemOp_vmovsd_Vsd_Hsd_Wsd 309 309 * @optest op1=1 op2=2 -> op1=2 310 310 * @optest op1=0 op2=-22 -> op1=-22 … … 415 415 * @optest op1=1 op2=2 -> op1=2 416 416 * @optest op1=0 op2=-22 -> op1=-22 417 * @oponly418 417 */ 419 418 FNIEMOP_DEF(iemOp_vmovupd_Wpd_Vpd) … … 483 482 } 484 483 485 /** 486 * @ opcode 0x11 487 * @ oppfx 0xf3 488 * @ opcpuid sse 489 * @ opgroup og_sse_simdfp_datamove 490 * @ opxcpttype 5 491 * @ optest op1=1 op2=2 -> op1=2 492 * @ optest op1=0 op2=-22 -> op1=-22 493 */ 494 FNIEMOP_STUB(iemOp_vmovss_Wss_Hx_Vss); 495 //FNIEMOP_DEF(iemOp_vmovss_Wss_Hx_Vss) 496 //{ 497 // IEMOP_MNEMONIC2(MR, VMOVSS, vmovss, Wss, Vss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 498 // uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 499 // if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 500 // { 501 // /* 502 // * Register, register. 503 // */ 504 // IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 505 // IEM_MC_BEGIN(0, 1); 506 // IEM_MC_LOCAL(uint32_t, uSrc); 507 // 508 // IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 509 // IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 510 // IEM_MC_FETCH_XREG_U32(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 511 // IEM_MC_STORE_XREG_U32((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, uSrc); 512 // 513 // IEM_MC_ADVANCE_RIP(); 514 // IEM_MC_END(); 515 // } 516 // else 517 // { 518 // /* 519 // * Memory, register. 520 // */ 521 // IEM_MC_BEGIN(0, 2); 522 // IEM_MC_LOCAL(uint32_t, uSrc); 523 // IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 524 // 525 // IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 526 // IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 527 // IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 528 // IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 529 // 530 // IEM_MC_FETCH_XREG_U32(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 531 // IEM_MC_STORE_MEM_U32(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 532 // 533 // IEM_MC_ADVANCE_RIP(); 534 // IEM_MC_END(); 535 // } 536 // return VINF_SUCCESS; 537 //} 484 485 FNIEMOP_DEF(iemOp_vmovss_Wss_Hss_Vss) 486 { 487 Assert(pVCpu->iem.s.uVexLength <= 1); 488 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 489 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 490 { 491 /** 492 * @opcode 0x11 493 * @oppfx 0xf3 494 * @opcodesub 11 mr/reg 495 * @opcpuid avx 496 * @opgroup og_avx_simdfp_datamerge 497 * @opxcpttype 5 498 * @optest op1=1 op2=0 op3=2 -> op1=2 499 * @optest op1=0 op2=0 op3=-22 -> op1=0xffffffea 500 * @optest op1=3 op2=-1 op3=0x77 -> op1=-4294967177 501 */ 502 IEMOP_MNEMONIC3(VEX_MVR, VMOVSS, vmovss, Uss_WO, HdqCss, Vss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 503 IEMOP_HLP_DONE_DECODING_NO_AVX_PREFIX(); 504 IEM_MC_BEGIN(0, 0); 505 506 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 507 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); 508 IEM_MC_MERGE_YREG_U32_U96_ZX_VLMAX((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB /*U32*/, 509 ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 510 pVCpu->iem.s.uVex3rdReg /*Hss*/); 511 IEM_MC_ADVANCE_RIP(); 512 IEM_MC_END(); 513 } 514 else 515 { 516 /** 517 * @opdone 518 * @opcode 0x11 519 * @oppfx 0xf3 520 * @opcodesub 11 mr/reg 521 * @opcpuid avx 522 * @opgroup og_avx_simdfp_datamove 523 * @opxcpttype 5 524 * @opfunction iemOp_vmovss_Vss_Hss_Wss 525 * @optest op1=1 op2=2 -> op1=2 526 * @optest op1=0 op2=-22 -> op1=-22 527 */ 528 IEMOP_MNEMONIC2(VEX_MR, VMOVSS, vmovss, Md_WO, Vss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 529 IEM_MC_BEGIN(0, 2); 530 IEM_MC_LOCAL(uint32_t, uSrc); 531 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 532 533 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 534 IEMOP_HLP_DONE_DECODING_NO_AVX_PREFIX_AND_NO_VVVV(); 535 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 536 IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ(); 537 538 IEM_MC_FETCH_YREG_U32(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 539 IEM_MC_STORE_MEM_U32(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 540 541 IEM_MC_ADVANCE_RIP(); 542 IEM_MC_END(); 543 } 544 545 return VINF_SUCCESS; 546 } 538 547 539 548 … … 3069 3078 3070 3079 /* 0x10 */ iemOp_vmovups_Vps_Wps, iemOp_vmovupd_Vpd_Wpd, iemOp_vmovss_Vss_Hss_Wss, iemOp_vmovsd_Vsd_Hsd_Wsd, 3071 /* 0x11 */ iemOp_vmovups_Wps_Vps, iemOp_vmovupd_Wpd_Vpd, iemOp_vmovss_Wss_H x_Vss,iemOp_vmovsd_Wsd_Hx_Vsd,3080 /* 0x11 */ iemOp_vmovups_Wps_Vps, iemOp_vmovupd_Wpd_Vpd, iemOp_vmovss_Wss_Hss_Vss, iemOp_vmovsd_Wsd_Hx_Vsd, 3072 3081 /* 0x12 */ iemOp_vmovlps_Vq_Hq_Mq__vmovhlps, iemOp_vmovlpd_Vq_Hq_Mq, iemOp_vmovsldup_Vx_Wx, iemOp_vmovddup_Vx_Wx, 3073 3082 /* 0x13 */ iemOp_vmovlps_Mq_Vq, iemOp_vmovlpd_Mq_Vq, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM,
Note:
See TracChangeset
for help on using the changeset viewer.