Changeset 67014 in vbox for trunk/src/VBox
- Timestamp:
- May 22, 2017 12:47:58 PM (8 years ago)
- Location:
- trunk/src/VBox
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r67013 r67014 3558 3558 } 3559 3559 3560 /** Opcode 0x66 0x0f 0x6e - movd/q Vy, Ey */3561 3560 FNIEMOP_DEF(iemOp_movd_q_Vy_Ey) 3562 3561 { … … 4399 4398 * @optest 64-bit / op1=1 op2=2 -> op1=2 ftw=0xff 4400 4399 * @optest 64-bit / op1=0 op2=-42 -> op1=-42 ftw=0xff 4401 * @oponly4402 4400 */ 4403 4401 IEMOP_MNEMONIC2(MR, MOVQ, movq, Eq_WO, Pq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OZ_PFX); … … 4452 4450 * @optest op1=1 op2=2 -> op1=2 ftw=0xff 4453 4451 * @optest op1=0 op2=-42 -> op1=-42 ftw=0xff 4454 * @oponly4455 4452 */ 4456 4453 IEMOP_MNEMONIC2(MR, MOVD, movd, Ed_WO, Pd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OZ_PFX); … … 4497 4494 4498 4495 4499 /** Opcode 0x66 0x0f 0x7e - movd_q Ey, Vy */4500 4496 FNIEMOP_DEF(iemOp_movd_q_Ey_Vy) 4501 4497 { 4502 4498 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 4503 4499 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) 4504 IEMOP_MNEMONIC(movq_Eq_Wq, "movq Eq,Wq"); 4505 else 4506 IEMOP_MNEMONIC(movd_Ed_Wd, "movd Ed,Wd"); 4507 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 4508 { 4509 /* greg, XMM */ 4510 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 4511 IEM_MC_BEGIN(0, 1); 4512 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 4513 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 4514 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) 4500 { 4501 /** 4502 * @opcode 0x7e 4503 * @opcodesub rex.w=1 4504 * @oppfx 0x66 4505 * @opcpuid sse2 4506 * @opgroup og_sse2_simdint_datamove 4507 * @opxcpttype 5 4508 * @optest 64-bit / op1=1 op2=2 -> op1=2 4509 * @optest 64-bit / op1=0 op2=-42 -> op1=-42 4510 * @oponly 4511 */ 4512 IEMOP_MNEMONIC2(MR, MOVQ, movq, Eq_WO, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OZ_PFX); 4513 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 4515 4514 { 4515 /* greg64, XMM */ 4516 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 4517 IEM_MC_BEGIN(0, 1); 4516 4518 IEM_MC_LOCAL(uint64_t, u64Tmp); 4519 4520 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 4521 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 4522 4517 4523 IEM_MC_FETCH_XREG_U64(u64Tmp, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 4518 4524 IEM_MC_STORE_GREG_U64((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u64Tmp); 4525 4526 IEM_MC_ADVANCE_RIP(); 4527 IEM_MC_END(); 4519 4528 } 4520 4529 else 4521 4530 { 4531 /* [mem64], XMM */ 4532 IEM_MC_BEGIN(0, 2); 4533 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 4534 IEM_MC_LOCAL(uint64_t, u64Tmp); 4535 4536 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 4537 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 4538 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 4539 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 4540 4541 IEM_MC_FETCH_XREG_U64(u64Tmp, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 4542 IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, u64Tmp); 4543 4544 IEM_MC_ADVANCE_RIP(); 4545 IEM_MC_END(); 4546 } 4547 } 4548 else 4549 { 4550 /** 4551 * @opdone 4552 * @opcode 0x7e 4553 * @opcodesub rex.w=0 4554 * @oppfx 0x66 4555 * @opcpuid sse2 4556 * @opgroup og_sse2_simdint_datamove 4557 * @opxcpttype 5 4558 * @opfunction iemOp_movd_q_Vy_Ey 4559 * @optest op1=1 op2=2 -> op1=2 4560 * @optest op1=0 op2=-42 -> op1=-42 4561 * @oponly 4562 */ 4563 IEMOP_MNEMONIC2(MR, MOVD, movd, Ed_WO, Vd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OZ_PFX); 4564 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 4565 { 4566 /* greg32, XMM */ 4567 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 4568 IEM_MC_BEGIN(0, 1); 4522 4569 IEM_MC_LOCAL(uint32_t, u32Tmp); 4570 4571 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 4572 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 4573 4523 4574 IEM_MC_FETCH_XREG_U32(u32Tmp, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 4524 4575 IEM_MC_STORE_GREG_U32((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, u32Tmp); 4525 } 4526 IEM_MC_ADVANCE_RIP(); 4527 IEM_MC_END(); 4528 } 4529 else 4530 { 4531 /* [mem], XMM */ 4532 IEM_MC_BEGIN(0, 2); 4533 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 4534 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 4535 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1); 4536 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 4537 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 4538 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) 4539 { 4540 IEM_MC_LOCAL(uint64_t, u64Tmp); 4541 IEM_MC_FETCH_XREG_U64(u64Tmp, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 4542 IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, u64Tmp); 4576 4577 IEM_MC_ADVANCE_RIP(); 4578 IEM_MC_END(); 4543 4579 } 4544 4580 else 4545 4581 { 4582 /* [mem32], XMM */ 4583 IEM_MC_BEGIN(0, 2); 4584 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 4546 4585 IEM_MC_LOCAL(uint32_t, u32Tmp); 4586 4587 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 4588 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 4589 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 4590 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 4591 4547 4592 IEM_MC_FETCH_XREG_U32(u32Tmp, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 4548 4593 IEM_MC_STORE_MEM_U32(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, u32Tmp); 4594 4595 IEM_MC_ADVANCE_RIP(); 4596 IEM_MC_END(); 4549 4597 } 4550 IEM_MC_ADVANCE_RIP(); 4551 IEM_MC_END(); 4552 } 4553 return VINF_SUCCESS; 4554 } 4555 4598 } 4599 return VINF_SUCCESS; 4600 4601 } 4556 4602 4557 4603 /** -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-template.c
r67013 r67014 4194 4194 break; 4195 4195 4196 case BS3CG1ENC_MODRM_Ed_WO_Vd_WZ: 4197 pThis->pfnEncoder = Bs3Cg1EncodeNext_MODRM_Vd_WO_Ed_WZ; 4198 pThis->iRmOp = 0; 4199 pThis->iRegOp = 1; 4200 pThis->aOperands[0].cbOp = 4; 4201 pThis->aOperands[1].cbOp = 4; 4202 pThis->aOperands[0].idxFieldBase = BS3CG1DST_EAX; 4203 pThis->aOperands[1].idxFieldBase = BS3CG1DST_XMM0; 4204 pThis->aOperands[0].enmLocation = BS3CG1OPLOC_CTX; 4205 pThis->aOperands[0].enmLocationReg = BS3CG1OPLOC_CTX; 4206 pThis->aOperands[0].enmLocationMem = BS3CG1OPLOC_MEM_WO; 4207 pThis->aOperands[1].enmLocation = BS3CG1OPLOC_CTX; 4208 break; 4209 4210 case BS3CG1ENC_MODRM_Eq_WO_Vq_WNZ: 4211 pThis->pfnEncoder = Bs3Cg1EncodeNext_MODRM_Vq_WO_Eq_WNZ; 4212 pThis->iRmOp = 0; 4213 pThis->iRegOp = 1; 4214 pThis->aOperands[0].cbOp = 8; 4215 pThis->aOperands[1].cbOp = 8; 4216 pThis->aOperands[0].idxFieldBase = BS3CG1DST_RAX; 4217 pThis->aOperands[1].idxFieldBase = BS3CG1DST_XMM0; 4218 pThis->aOperands[0].enmLocation = BS3CG1OPLOC_CTX; 4219 pThis->aOperands[0].enmLocationReg = BS3CG1OPLOC_CTX; 4220 pThis->aOperands[0].enmLocationMem = BS3CG1OPLOC_MEM_WO; 4221 pThis->aOperands[1].enmLocation = BS3CG1OPLOC_CTX; 4222 break; 4223 4196 4224 case BS3CG1ENC_MODRM_Gb_Eb: 4197 4225 pThis->iRmOp = 1; -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1.h
r67013 r67014 140 140 BS3CG1ENC_MODRM_Ed_WO_Pd_WZ, 141 141 BS3CG1ENC_MODRM_Eq_WO_Pq_WNZ, 142 BS3CG1ENC_MODRM_Ed_WO_Vd_WZ, 143 BS3CG1ENC_MODRM_Eq_WO_Vq_WNZ, 142 144 BS3CG1ENC_MODRM_Pq_WO_Qq, 143 145 BS3CG1ENC_MODRM_Wss_WO_Vss,
Note:
See TracChangeset
for help on using the changeset viewer.