Changeset 66321 in vbox
- Timestamp:
- Mar 29, 2017 7:30:33 AM (8 years ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp
r66314 r66321 1381 1381 } 1382 1382 1383 IEM_DECL_IMPL_DEF(void, iemAImpl_movddup,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, uint64_t uSrc)) 1384 { 1385 RT_NOREF(pFpuState); 1386 puDst->au64[0] = uSrc; 1387 puDst->au64[1] = uSrc; 1388 } 1389 -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r66315 r66321 1406 1406 * @optest op1=-1 op2=0xdddddddd00000002eeeeeeee00000001 -> 1407 1407 * op1=0x00000002000000020000000100000001 1408 * @oponlytest1409 1408 */ 1410 1409 FNIEMOP_DEF(iemOp_vmovsldup_Vx_Wx) … … 1456 1455 } 1457 1456 return VINF_SUCCESS; 1458 1459 } 1460 1461 /** Opcode 0xf2 0x0f 0x12. */ 1462 FNIEMOP_STUB(iemOp_vmovddup_Vx_Wx); //NEXT 1457 } 1458 1459 1460 /** 1461 * @opcode 0x12 1462 * @oppfx 0xf2 1463 * @opcpuid sse3 1464 * @opgroup og_sse3_pcksclr_datamove 1465 * @opxcpttype 5 1466 * @optest op1=-1 op2=0xddddddddeeeeeeee2222222211111111 -> 1467 * op1=0x22222222111111112222222211111111 1468 */ 1469 FNIEMOP_DEF(iemOp_vmovddup_Vx_Wx) 1470 { 1471 IEMOP_MNEMONIC2(RM, MOVDDUP, movddup, Vdq, Wdq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 1472 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1473 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 1474 { 1475 /* 1476 * Register, register. 1477 */ 1478 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1479 IEM_MC_BEGIN(2, 0); 1480 IEM_MC_ARG(PRTUINT128U, puDst, 0); 1481 IEM_MC_ARG(uint64_t, uSrc, 1); 1482 1483 IEM_MC_MAYBE_RAISE_SSE3_RELATED_XCPT(); 1484 IEM_MC_PREPARE_SSE_USAGE(); 1485 1486 IEM_MC_FETCH_XREG_U64(uSrc, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 1487 IEM_MC_REF_XREG_U128(puDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1488 IEM_MC_CALL_SSE_AIMPL_2(iemAImpl_movddup, puDst, uSrc); 1489 1490 IEM_MC_ADVANCE_RIP(); 1491 IEM_MC_END(); 1492 } 1493 else 1494 { 1495 /* 1496 * Register, memory. 1497 */ 1498 IEM_MC_BEGIN(2, 2); 1499 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 1500 IEM_MC_ARG(PRTUINT128U, puDst, 0); 1501 IEM_MC_ARG(uint64_t, uSrc, 1); 1502 1503 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1504 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1505 IEM_MC_MAYBE_RAISE_SSE3_RELATED_XCPT(); 1506 IEM_MC_PREPARE_SSE_USAGE(); 1507 1508 IEM_MC_FETCH_MEM_U64(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 1509 IEM_MC_REF_XREG_U128(puDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1510 IEM_MC_CALL_SSE_AIMPL_2(iemAImpl_movddup, puDst, uSrc); 1511 1512 IEM_MC_ADVANCE_RIP(); 1513 IEM_MC_END(); 1514 } 1515 return VINF_SUCCESS; 1516 } 1517 1463 1518 1464 1519 /** Opcode 0x0f 0x13 - vmovlps Mq, Vq */ … … 7494 7549 /* Opcode 0x0f 0xd6 - invalid */ 7495 7550 /** Opcode 0x66 0x0f 0xd6 - vmovq Wq, Vq */ 7496 FNIEMOP_STUB(iemOp_vmovq_Wq_Vq); 7551 FNIEMOP_STUB(iemOp_vmovq_Wq_Vq); // NEXT! 7497 7552 /** Opcode 0xf3 0x0f 0xd6 - movq2dq Vdq, Nq */ 7498 7553 FNIEMOP_STUB(iemOp_movq2dq_Vdq_Nq); -
trunk/src/VBox/VMM/include/IEMInternal.h
r66314 r66321 1552 1552 * @{ */ 1553 1553 IEM_DECL_IMPL_DEF(void, iemAImpl_movsldup,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc)); 1554 IEM_DECL_IMPL_DEF(void, iemAImpl_movddup,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, uint64_t uSrc)); 1554 1555 /** @} */ 1555 1556
Note:
See TracChangeset
for help on using the changeset viewer.