Changeset 66789 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- May 4, 2017 12:23:05 PM (8 years ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp
r66321 r66789 1381 1381 } 1382 1382 1383 1384 IEM_DECL_IMPL_DEF(void, iemAImpl_movshdup,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, PCRTUINT128U puSrc)) 1385 { 1386 RT_NOREF(pFpuState); 1387 puDst->au32[0] = puSrc->au32[1]; 1388 puDst->au32[1] = puSrc->au32[1]; 1389 puDst->au32[2] = puSrc->au32[3]; 1390 puDst->au32[3] = puSrc->au32[3]; 1391 } 1392 1393 1383 1394 IEM_DECL_IMPL_DEF(void, iemAImpl_movddup,(PCX86FXSTATE pFpuState, PRTUINT128U puDst, uint64_t uSrc)) 1384 1395 { … … 1388 1399 } 1389 1400 1401 -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r66787 r66789 1922 1922 1923 1923 1924 /** Opcode 0xf3 0x0f 0x16 - movshdup Vx, Wx */ 1925 FNIEMOP_STUB(iemOp_movshdup_Vx_Wx); //NEXT 1924 /** 1925 * @opcode 0x16 1926 * @oppfx 0xf3 1927 * @opcpuid sse3 1928 * @opgroup og_sse3_pcksclr_datamove 1929 * @opxcpttype 4 1930 * @optest op1=-1 op2=0x00000002dddddddd00000001eeeeeeee -> 1931 * op1=0x00000002000000020000000100000001 1932 * @oponly 1933 */ 1934 FNIEMOP_DEF(iemOp_movshdup_Vdq_Wdq) 1935 { 1936 IEMOP_MNEMONIC2(RM, MOVSHDUP, movshdup, Vdq, Wdq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 1937 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1938 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 1939 { 1940 /* 1941 * Register, register. 1942 */ 1943 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1944 IEM_MC_BEGIN(2, 0); 1945 IEM_MC_ARG(PRTUINT128U, puDst, 0); 1946 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); 1947 1948 IEM_MC_MAYBE_RAISE_SSE3_RELATED_XCPT(); 1949 IEM_MC_PREPARE_SSE_USAGE(); 1950 1951 IEM_MC_REF_XREG_U128_CONST(puSrc, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 1952 IEM_MC_REF_XREG_U128(puDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1953 IEM_MC_CALL_SSE_AIMPL_2(iemAImpl_movshdup, puDst, puSrc); 1954 1955 IEM_MC_ADVANCE_RIP(); 1956 IEM_MC_END(); 1957 } 1958 else 1959 { 1960 /* 1961 * Register, memory. 1962 */ 1963 IEM_MC_BEGIN(2, 2); 1964 IEM_MC_LOCAL(RTUINT128U, uSrc); 1965 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 1966 IEM_MC_ARG(PRTUINT128U, puDst, 0); 1967 IEM_MC_ARG_LOCAL_REF(PCRTUINT128U, puSrc, uSrc, 1); 1968 1969 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 1970 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1971 IEM_MC_MAYBE_RAISE_SSE3_RELATED_XCPT(); 1972 IEM_MC_PREPARE_SSE_USAGE(); 1973 1974 IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 1975 IEM_MC_REF_XREG_U128(puDst, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 1976 IEM_MC_CALL_SSE_AIMPL_2(iemAImpl_movshdup, puDst, puSrc); 1977 1978 IEM_MC_ADVANCE_RIP(); 1979 IEM_MC_END(); 1980 } 1981 return VINF_SUCCESS; 1982 } 1926 1983 1927 1984 /** … … 8671 8728 /* 0x14 */ iemOp_unpcklps_Vx_Wx, iemOp_unpcklpd_Vx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 8672 8729 /* 0x15 */ iemOp_unpckhps_Vx_Wx, iemOp_unpckhpd_Vx_Wx, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 8673 /* 0x16 */ iemOp_movhps_Vdq_Mq__movlhps_Vdq_Uq, iemOp_movhpd_Vdq_Mq, iemOp_movshdup_V x_Wx,iemOp_InvalidNeedRM,8730 /* 0x16 */ iemOp_movhps_Vdq_Mq__movlhps_Vdq_Uq, iemOp_movhpd_Vdq_Mq, iemOp_movshdup_Vdq_Wdq, iemOp_InvalidNeedRM, 8674 8731 /* 0x17 */ iemOp_movhps_Mq_Vq, iemOp_movhpd_Mq_Vq, iemOp_InvalidNeedRM, iemOp_InvalidNeedRM, 8675 8732 /* 0x18 */ IEMOP_X4(iemOp_prefetch_Grp16),
Note:
See TracChangeset
for help on using the changeset viewer.