VirtualBox

Changeset 66315 in vbox


Ignore:
Timestamp:
Mar 28, 2017 9:34:58 PM (8 years ago)
Author:
vboxsync
Message:

IEM: Implemented movsldup Vdq,Wdq (f3 0f 12)

Location:
trunk/src/VBox
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h

    r66314 r66315  
    13971397}
    13981398
    1399 #if 0
    1400 FNIEMOP_STUB(iemOp_vmovsldup_Vx_Wx); //NEXT
    1401 #else
     1399
    14021400/**
    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 ->
    14101407 *              op1=0x00000002000000020000000100000001
     1408 * @oponlytest
    14111409 */
    14121410FNIEMOP_DEF(iemOp_vmovsldup_Vx_Wx)
     
    14501448        IEM_MC_PREPARE_SSE_USAGE();
    14511449
    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);
    14531451        IEM_MC_REF_XREG_U128(puDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg);
    14541452        IEM_MC_CALL_SSE_AIMPL_2(iemAImpl_movsldup, puDst, puSrc);
     
    14601458
    14611459}
    1462 #endif
    14631460
    14641461/** Opcode 0xf2 0x0f 0x12. */
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-template.c

    r66313 r66315  
    14021402            break;
    14031403
     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
    14041434        case BS3CG1ENC_MODRM_Gv_Ma:
    14051435            cbOp = BS3_MODE_IS_16BIT_CODE(pThis->bMode) ? 2 : 4;
     
    16711701            pThis->iRmOp             = 0;
    16721702            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;
    16731712            pThis->aOperands[0].cbOp = 16;
    16741713            pThis->aOperands[1].cbOp = 16;
     
    30663105                                pThis->bValueXcpt      = UINT8_MAX;
    30673106                                if (   fInvalidInstr
     3107                                    || pThis->bAlignmentXcpt != UINT8_MAX
     3108                                    || pThis->bValueXcpt     != UINT8_MAX
    30683109                                    || Bs3Cg1RunContextModifier(pThis, &pThis->Ctx, pHdr,
    30693110                                                                pHdr->cbSelector + pHdr->cbInput, pHdr->cbOutput,
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1.h

    r66313 r66315  
    4848    BS3CG1OP_Wps,
    4949    BS3CG1OP_Wpd,
     50    BS3CG1OP_Wdq,
    5051
    5152    BS3CG1OP_Gb,
     
    5859    BS3CG1OP_Vpd,
    5960    BS3CG1OP_Vq,
     61    BS3CG1OP_Vdq,
    6062
    6163    BS3CG1OP_Ib,
     
    9698    BS3CG1ENC_MODRM_Vq_UqHi,
    9799    BS3CG1ENC_MODRM_Vq_Mq,
     100    BS3CG1ENC_MODRM_Vdq_Wdq,
    98101
    99102    BS3CG1ENC_FIXED,
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette