Changeset 66315 in vbox
- Timestamp:
- Mar 28, 2017 9:34:58 PM (8 years ago)
- Location:
- trunk/src/VBox
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r66314 r66315 1397 1397 } 1398 1398 1399 #if 0 1400 FNIEMOP_STUB(iemOp_vmovsldup_Vx_Wx); //NEXT 1401 #else 1399 1402 1400 /** 1403 * opcode 0x12 1404 * opcodesub !11 mr/reg 1405 * oppfx 0xf3 1406 * opcpuid sse3 1407 * opgroup og_sse3_pcksclr_datamove 1408 * opxcpttype 4 1409 * optest op1=-1 op2=0xdddddddd00000002eeeeeeee00000001 -> 1401 * @opcode 0x12 1402 * @oppfx 0xf3 1403 * @opcpuid sse3 1404 * @opgroup og_sse3_pcksclr_datamove 1405 * @opxcpttype 4 1406 * @optest op1=-1 op2=0xdddddddd00000002eeeeeeee00000001 -> 1410 1407 * op1=0x00000002000000020000000100000001 1408 * @oponlytest 1411 1409 */ 1412 1410 FNIEMOP_DEF(iemOp_vmovsldup_Vx_Wx) … … 1450 1448 IEM_MC_PREPARE_SSE_USAGE(); 1451 1449 1452 IEM_MC_FETCH_MEM_U128 (uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);1450 IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 1453 1451 IEM_MC_REF_XREG_U128(puDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1454 1452 IEM_MC_CALL_SSE_AIMPL_2(iemAImpl_movsldup, puDst, puSrc); … … 1460 1458 1461 1459 } 1462 #endif1463 1460 1464 1461 /** Opcode 0xf2 0x0f 0x12. */ -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-template.c
r66313 r66315 1402 1402 break; 1403 1403 1404 case BS3CG1ENC_MODRM_Vdq_Wdq: 1405 if (iEncoding == 0) 1406 { 1407 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1408 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 1, 0); 1409 pThis->aOperands[pThis->iRmOp ].idxField = BS3CG1DST_XMM0; 1410 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM1; 1411 } 1412 else if (iEncoding == 1) 1413 { 1414 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM2; 1415 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1416 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 2 /*iReg*/, 16, 0, BS3CG1OPLOC_MEM); 1417 } 1418 else if (iEncoding == 2) 1419 { 1420 if (pThis->bMode == BS3_MODE_RM) 1421 break; /** @todo fix real mode #GP() context gathering. */ 1422 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM3; 1423 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1424 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 16, 1 /*cbMissalign*/, BS3CG1OPLOC_MEM); 1425 if (!Bs3Cg1XcptTypeIsUnaligned(pThis->enmXcptType)) 1426 pThis->bAlignmentXcpt = X86_XCPT_GP; 1427 } 1428 else 1429 break; 1430 pThis->cbCurInstr = off; 1431 iEncoding++; 1432 break; 1433 1404 1434 case BS3CG1ENC_MODRM_Gv_Ma: 1405 1435 cbOp = BS3_MODE_IS_16BIT_CODE(pThis->bMode) ? 2 : 4; … … 1671 1701 pThis->iRmOp = 0; 1672 1702 pThis->iRegOp = 1; 1703 pThis->aOperands[0].cbOp = 16; 1704 pThis->aOperands[1].cbOp = 16; 1705 pThis->aOperands[0].enmLocation = BS3CG1OPLOC_CTX; 1706 pThis->aOperands[1].enmLocation = BS3CG1OPLOC_CTX; 1707 break; 1708 1709 case BS3CG1ENC_MODRM_Vdq_Wdq: 1710 pThis->iRmOp = 1; 1711 pThis->iRegOp = 0; 1673 1712 pThis->aOperands[0].cbOp = 16; 1674 1713 pThis->aOperands[1].cbOp = 16; … … 3066 3105 pThis->bValueXcpt = UINT8_MAX; 3067 3106 if ( fInvalidInstr 3107 || pThis->bAlignmentXcpt != UINT8_MAX 3108 || pThis->bValueXcpt != UINT8_MAX 3068 3109 || Bs3Cg1RunContextModifier(pThis, &pThis->Ctx, pHdr, 3069 3110 pHdr->cbSelector + pHdr->cbInput, pHdr->cbOutput, -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1.h
r66313 r66315 48 48 BS3CG1OP_Wps, 49 49 BS3CG1OP_Wpd, 50 BS3CG1OP_Wdq, 50 51 51 52 BS3CG1OP_Gb, … … 58 59 BS3CG1OP_Vpd, 59 60 BS3CG1OP_Vq, 61 BS3CG1OP_Vdq, 60 62 61 63 BS3CG1OP_Ib, … … 96 98 BS3CG1ENC_MODRM_Vq_UqHi, 97 99 BS3CG1ENC_MODRM_Vq_Mq, 100 BS3CG1ENC_MODRM_Vdq_Wdq, 98 101 99 102 BS3CG1ENC_FIXED,
Note:
See TracChangeset
for help on using the changeset viewer.