VirtualBox

Changeset 96115 in vbox


Ignore:
Timestamp:
Aug 8, 2022 8:04:00 PM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
152917
Message:

VMM/IEM: Implement [v]pmov{s,z}x[bw,bd,bq,wd,wq,dq] instructions, bugref:9898 (review is required)

Location:
trunk/src/VBox/VMM
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm

    r96109 r96115  
    43434343ENDPROC             iemAImpl_vptest_u256
    43444344
     4345
     4346;;
     4347; Template for the [v]pmov{s,z}x* instructions
     4348;
     4349; @param    1       The instruction
     4350;
     4351; @param    A0      Pointer to the destination media register size operand (output).
     4352; @param    A1      The source operand value (input).
     4353;
     4354%macro IEMIMPL_V_PMOV_SZ_X 1
     4355BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u128, 12
     4356        PROLOGUE_2_ARGS
     4357        IEMIMPL_AVX_PROLOGUE
     4358
     4359        movd     xmm0, A1
     4360        %1       xmm0, xmm0
     4361        vmovdqu  [A0], xmm0
     4362
     4363        IEMIMPL_AVX_PROLOGUE
     4364        EPILOGUE_2_ARGS
     4365ENDPROC iemAImpl_ %+ %1 %+ _u128
     4366
     4367BEGINPROC_FASTCALL iemAImpl_v %+ %1 %+ _u128, 12
     4368        PROLOGUE_2_ARGS
     4369        IEMIMPL_AVX_PROLOGUE
     4370
     4371        movd     xmm0, A1
     4372        v %+ %1  xmm0, xmm0
     4373        vmovdqu  [A0], xmm0
     4374
     4375        IEMIMPL_AVX_PROLOGUE
     4376        EPILOGUE_2_ARGS
     4377ENDPROC iemAImpl_v %+ %1 %+ _u128
     4378
     4379BEGINPROC_FASTCALL iemAImpl_v %+ %1 %+ _u256, 12
     4380        PROLOGUE_2_ARGS
     4381        IEMIMPL_AVX_PROLOGUE
     4382
     4383        movd     xmm0, A1
     4384        v %+ %1  ymm0, xmm0
     4385        vmovdqu  [A0], ymm0
     4386
     4387        IEMIMPL_AVX_PROLOGUE
     4388        EPILOGUE_2_ARGS
     4389ENDPROC iemAImpl_v %+ %1 %+ _u256
     4390%endmacro
     4391
     4392IEMIMPL_V_PMOV_SZ_X pmovsxbw
     4393IEMIMPL_V_PMOV_SZ_X pmovsxbd
     4394IEMIMPL_V_PMOV_SZ_X pmovsxbq
     4395IEMIMPL_V_PMOV_SZ_X pmovsxwd
     4396IEMIMPL_V_PMOV_SZ_X pmovsxwq
     4397IEMIMPL_V_PMOV_SZ_X pmovsxdq
     4398
     4399IEMIMPL_V_PMOV_SZ_X pmovzxbw
     4400IEMIMPL_V_PMOV_SZ_X pmovzxbd
     4401IEMIMPL_V_PMOV_SZ_X pmovzxbq
     4402IEMIMPL_V_PMOV_SZ_X pmovzxwd
     4403IEMIMPL_V_PMOV_SZ_X pmovzxwq
     4404IEMIMPL_V_PMOV_SZ_X pmovzxdq
     4405
  • trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp

    r96109 r96115  
    1347013470}
    1347113471
     13472
     13473/*
     13474 * PMOVSXBW / VPMOVSXBW
     13475 */
     13476IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxbw_u128_fallback,(PRTUINT128U puDst, uint64_t uSrc))
     13477{
     13478    RTUINT64U uSrc1 = { uSrc };
     13479    puDst->ai16[0] = uSrc1.ai8[0];
     13480    puDst->ai16[1] = uSrc1.ai8[1];
     13481    puDst->ai16[2] = uSrc1.ai8[2];
     13482    puDst->ai16[3] = uSrc1.ai8[3];
     13483    puDst->ai16[4] = uSrc1.ai8[4];
     13484    puDst->ai16[5] = uSrc1.ai8[5];
     13485    puDst->ai16[6] = uSrc1.ai8[6];
     13486    puDst->ai16[7] = uSrc1.ai8[7];
     13487}
     13488
     13489
     13490IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxbw_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc))
     13491{
     13492    RTUINT128U uSrc1 = *puSrc; /* puDst could overlap */
     13493    puDst->ai16[ 0] = uSrc1.ai8[ 0];
     13494    puDst->ai16[ 1] = uSrc1.ai8[ 1];
     13495    puDst->ai16[ 2] = uSrc1.ai8[ 2];
     13496    puDst->ai16[ 3] = uSrc1.ai8[ 3];
     13497    puDst->ai16[ 4] = uSrc1.ai8[ 4];
     13498    puDst->ai16[ 5] = uSrc1.ai8[ 5];
     13499    puDst->ai16[ 6] = uSrc1.ai8[ 6];
     13500    puDst->ai16[ 7] = uSrc1.ai8[ 7];
     13501    puDst->ai16[ 8] = uSrc1.ai8[ 8];
     13502    puDst->ai16[ 9] = uSrc1.ai8[ 9];
     13503    puDst->ai16[10] = uSrc1.ai8[10];
     13504    puDst->ai16[11] = uSrc1.ai8[11];
     13505    puDst->ai16[12] = uSrc1.ai8[12];
     13506    puDst->ai16[13] = uSrc1.ai8[13];
     13507    puDst->ai16[14] = uSrc1.ai8[14];
     13508    puDst->ai16[15] = uSrc1.ai8[15];
     13509}
     13510
     13511
     13512/*
     13513 * PMOVSXBD / VPMOVSXBD
     13514 */
     13515IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxbd_u128_fallback,(PRTUINT128U puDst, uint32_t uSrc))
     13516{
     13517    RTUINT32U uSrc1 = { uSrc };
     13518    puDst->ai32[0] = uSrc1.ai8[0];
     13519    puDst->ai32[1] = uSrc1.ai8[1];
     13520    puDst->ai32[2] = uSrc1.ai8[2];
     13521    puDst->ai32[3] = uSrc1.ai8[3];
     13522}
     13523
     13524
     13525IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxbd_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc))
     13526{
     13527    RTUINT128U uSrc1 = *puSrc; /* puDst could overlap */
     13528    puDst->ai32[0] = uSrc1.ai8[0];
     13529    puDst->ai32[1] = uSrc1.ai8[1];
     13530    puDst->ai32[2] = uSrc1.ai8[2];
     13531    puDst->ai32[3] = uSrc1.ai8[3];
     13532    puDst->ai32[4] = uSrc1.ai8[4];
     13533    puDst->ai32[5] = uSrc1.ai8[5];
     13534    puDst->ai32[6] = uSrc1.ai8[6];
     13535    puDst->ai32[7] = uSrc1.ai8[7];
     13536}
     13537
     13538
     13539/*
     13540 * PMOVSXBQ / VPMOVSXBQ
     13541 */
     13542IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxbq_u128_fallback,(PRTUINT128U puDst, uint16_t uSrc))
     13543{
     13544    RTUINT16U uSrc1 = { uSrc };
     13545    puDst->ai64[0] = uSrc1.ai8[0];
     13546    puDst->ai64[1] = uSrc1.ai8[1];
     13547}
     13548
     13549
     13550IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxbq_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc))
     13551{
     13552    RTUINT128U uSrc1 = *puSrc; /* puDst could overlap */
     13553    puDst->ai64[0] = uSrc1.ai8[0];
     13554    puDst->ai64[1] = uSrc1.ai8[1];
     13555    puDst->ai64[2] = uSrc1.ai8[2];
     13556    puDst->ai64[3] = uSrc1.ai8[3];
     13557}
     13558
     13559
     13560/*
     13561 * PMOVSXWD / VPMOVSXWD
     13562 */
     13563IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxwd_u128_fallback,(PRTUINT128U puDst, uint64_t uSrc))
     13564{
     13565    RTUINT64U uSrc1 = { uSrc };
     13566    puDst->ai32[0] = uSrc1.ai16[0];
     13567    puDst->ai32[1] = uSrc1.ai16[1];
     13568    puDst->ai32[2] = uSrc1.ai16[2];
     13569    puDst->ai32[3] = uSrc1.ai16[3];
     13570}
     13571
     13572
     13573IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxwd_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc))
     13574{
     13575    RTUINT128U uSrc1 = *puSrc; /* puDst could overlap */
     13576    puDst->ai32[0] = uSrc1.ai16[0];
     13577    puDst->ai32[1] = uSrc1.ai16[1];
     13578    puDst->ai32[2] = uSrc1.ai16[2];
     13579    puDst->ai32[3] = uSrc1.ai16[3];
     13580    puDst->ai32[4] = uSrc1.ai16[4];
     13581    puDst->ai32[5] = uSrc1.ai16[5];
     13582    puDst->ai32[6] = uSrc1.ai16[6];
     13583    puDst->ai32[7] = uSrc1.ai16[7];
     13584}
     13585
     13586
     13587/*
     13588 * PMOVSXWQ / VPMOVSXWQ
     13589 */
     13590IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxwq_u128_fallback,(PRTUINT128U puDst, uint32_t uSrc))
     13591{
     13592    RTUINT32U uSrc1 = { uSrc };
     13593    puDst->ai64[0] = uSrc1.ai16[0];
     13594    puDst->ai64[1] = uSrc1.ai16[1];
     13595}
     13596
     13597
     13598IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxwq_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc))
     13599{
     13600    RTUINT128U uSrc1 = *puSrc; /* puDst could overlap */
     13601    puDst->ai64[0] = uSrc1.ai16[0];
     13602    puDst->ai64[1] = uSrc1.ai16[1];
     13603    puDst->ai64[2] = uSrc1.ai16[2];
     13604    puDst->ai64[3] = uSrc1.ai16[3];
     13605}
     13606
     13607
     13608/*
     13609 * PMOVSXDQ / VPMOVSXDQ
     13610 */
     13611IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxdq_u128_fallback,(PRTUINT128U puDst, uint64_t uSrc))
     13612{
     13613    RTUINT64U uSrc1 = { uSrc };
     13614    puDst->ai64[0] = uSrc1.ai32[0];
     13615    puDst->ai64[1] = uSrc1.ai32[1];
     13616}
     13617
     13618
     13619IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxdq_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc))
     13620{
     13621    RTUINT128U uSrc1 = *puSrc; /* puDst could overlap */
     13622    puDst->ai64[0] = uSrc1.ai32[0];
     13623    puDst->ai64[1] = uSrc1.ai32[1];
     13624    puDst->ai64[2] = uSrc1.ai32[2];
     13625    puDst->ai64[3] = uSrc1.ai32[3];
     13626}
     13627
     13628
     13629/*
     13630 * PMOVZXBW / VPMOVZXBW
     13631 */
     13632IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxbw_u128_fallback,(PRTUINT128U puDst, uint64_t uSrc))
     13633{
     13634    RTUINT64U uSrc1 = { uSrc };
     13635    puDst->au16[0] = uSrc1.au8[0];
     13636    puDst->au16[1] = uSrc1.au8[1];
     13637    puDst->au16[2] = uSrc1.au8[2];
     13638    puDst->au16[3] = uSrc1.au8[3];
     13639    puDst->au16[4] = uSrc1.au8[4];
     13640    puDst->au16[5] = uSrc1.au8[5];
     13641    puDst->au16[6] = uSrc1.au8[6];
     13642    puDst->au16[7] = uSrc1.au8[7];
     13643}
     13644
     13645
     13646IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxbw_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc))
     13647{
     13648    RTUINT128U uSrc1 = *puSrc; /* puDst could overlap */
     13649    puDst->au16[ 0] = uSrc1.au8[ 0];
     13650    puDst->au16[ 1] = uSrc1.au8[ 1];
     13651    puDst->au16[ 2] = uSrc1.au8[ 2];
     13652    puDst->au16[ 3] = uSrc1.au8[ 3];
     13653    puDst->au16[ 4] = uSrc1.au8[ 4];
     13654    puDst->au16[ 5] = uSrc1.au8[ 5];
     13655    puDst->au16[ 6] = uSrc1.au8[ 6];
     13656    puDst->au16[ 7] = uSrc1.au8[ 7];
     13657    puDst->au16[ 8] = uSrc1.au8[ 8];
     13658    puDst->au16[ 9] = uSrc1.au8[ 9];
     13659    puDst->au16[10] = uSrc1.au8[10];
     13660    puDst->au16[11] = uSrc1.au8[11];
     13661    puDst->au16[12] = uSrc1.au8[12];
     13662    puDst->au16[13] = uSrc1.au8[13];
     13663    puDst->au16[14] = uSrc1.au8[14];
     13664    puDst->au16[15] = uSrc1.au8[15];
     13665}
     13666
     13667
     13668/*
     13669 * PMOVZXBD / VPMOVZXBD
     13670 */
     13671IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxbd_u128_fallback,(PRTUINT128U puDst, uint32_t uSrc))
     13672{
     13673    RTUINT32U uSrc1 = { uSrc };
     13674    puDst->au32[0] = uSrc1.au8[0];
     13675    puDst->au32[1] = uSrc1.au8[1];
     13676    puDst->au32[2] = uSrc1.au8[2];
     13677    puDst->au32[3] = uSrc1.au8[3];
     13678}
     13679
     13680
     13681IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxbd_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc))
     13682{
     13683    RTUINT128U uSrc1 = *puSrc; /* puDst could overlap */
     13684    puDst->au32[0] = uSrc1.au8[0];
     13685    puDst->au32[1] = uSrc1.au8[1];
     13686    puDst->au32[2] = uSrc1.au8[2];
     13687    puDst->au32[3] = uSrc1.au8[3];
     13688    puDst->au32[4] = uSrc1.au8[4];
     13689    puDst->au32[5] = uSrc1.au8[5];
     13690    puDst->au32[6] = uSrc1.au8[6];
     13691    puDst->au32[7] = uSrc1.au8[7];
     13692}
     13693
     13694
     13695/*
     13696 * PMOVZXBQ / VPMOVZXBQ
     13697 */
     13698IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxbq_u128_fallback,(PRTUINT128U puDst, uint16_t uSrc))
     13699{
     13700    RTUINT16U uSrc1 = { uSrc };
     13701    puDst->au64[0] = uSrc1.au8[0];
     13702    puDst->au64[1] = uSrc1.au8[1];
     13703}
     13704
     13705
     13706IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxbq_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc))
     13707{
     13708    RTUINT128U uSrc1 = *puSrc; /* puDst could overlap */
     13709    puDst->au64[0] = uSrc1.au8[0];
     13710    puDst->au64[1] = uSrc1.au8[1];
     13711    puDst->au64[2] = uSrc1.au8[2];
     13712    puDst->au64[3] = uSrc1.au8[3];
     13713}
     13714
     13715
     13716/*
     13717 * PMOVZXWD / VPMOVZXWD
     13718 */
     13719IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxwd_u128_fallback,(PRTUINT128U puDst, uint64_t uSrc))
     13720{
     13721    RTUINT64U uSrc1 = { uSrc };
     13722    puDst->au32[0] = uSrc1.au16[0];
     13723    puDst->au32[1] = uSrc1.au16[1];
     13724    puDst->au32[2] = uSrc1.au16[2];
     13725    puDst->au32[3] = uSrc1.au16[3];
     13726}
     13727
     13728
     13729IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxwd_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc))
     13730{
     13731    RTUINT128U uSrc1 = *puSrc; /* puDst could overlap */
     13732    puDst->au32[0] = uSrc1.au16[0];
     13733    puDst->au32[1] = uSrc1.au16[1];
     13734    puDst->au32[2] = uSrc1.au16[2];
     13735    puDst->au32[3] = uSrc1.au16[3];
     13736    puDst->au32[4] = uSrc1.au16[4];
     13737    puDst->au32[5] = uSrc1.au16[5];
     13738    puDst->au32[6] = uSrc1.au16[6];
     13739    puDst->au32[7] = uSrc1.au16[7];
     13740}
     13741
     13742
     13743/*
     13744 * PMOVZXWQ / VPMOVZXWQ
     13745 */
     13746IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxwq_u128_fallback,(PRTUINT128U puDst, uint32_t uSrc))
     13747{
     13748    RTUINT32U uSrc1 = { uSrc };
     13749    puDst->au64[0] = uSrc1.au16[0];
     13750    puDst->au64[1] = uSrc1.au16[1];
     13751}
     13752
     13753
     13754IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxwq_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc))
     13755{
     13756    RTUINT128U uSrc1 = *puSrc; /* puDst could overlap */
     13757    puDst->au64[0] = uSrc1.au16[0];
     13758    puDst->au64[1] = uSrc1.au16[1];
     13759    puDst->au64[2] = uSrc1.au16[2];
     13760    puDst->au64[3] = uSrc1.au16[3];
     13761}
     13762
     13763
     13764/*
     13765 * PMOVZXDQ / VPMOVZXDQ
     13766 */
     13767IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxdq_u128_fallback,(PRTUINT128U puDst, uint64_t uSrc))
     13768{
     13769    RTUINT64U uSrc1 = { uSrc };
     13770    puDst->au64[0] = uSrc1.au32[0];
     13771    puDst->au64[1] = uSrc1.au32[1];
     13772}
     13773
     13774
     13775IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxdq_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc))
     13776{
     13777    RTUINT128U uSrc1 = *puSrc; /* puDst could overlap */
     13778    puDst->au64[0] = uSrc1.au32[0];
     13779    puDst->au64[1] = uSrc1.au32[1];
     13780    puDst->au64[2] = uSrc1.au32[2];
     13781    puDst->au64[3] = uSrc1.au32[3];
     13782}
     13783
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsThree0f38.cpp.h

    r96099 r96115  
    655655
    656656
     657/** Body for the pmov{s,z}x* instructions. */
     658#define IEMOP_BODY_PMOV_S_Z(a_Instr, a_SrcWidth) \
     659    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); \
     660    if (IEM_IS_MODRM_REG_MODE(bRm)) \
     661    { \
     662        /* \
     663         * Register, register. \
     664         */ \
     665        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
     666        IEM_MC_BEGIN(2, 0); \
     667        IEM_MC_ARG(PRTUINT128U,                 puDst, 0); \
     668        IEM_MC_ARG(uint64_t,    uSrc, 1); \
     669        IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();  \
     670        IEM_MC_PREPARE_SSE_USAGE();  \
     671        IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); \
     672        IEM_MC_REF_XREG_U128(puDst, IEM_GET_MODRM_REG(pVCpu, bRm)); \
     673        IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fSse41, \
     674                                                             iemAImpl_ ## a_Instr ## _u128, \
     675                                                             iemAImpl_v ## a_Instr ## _u128_fallback), \
     676                                 puDst, uSrc); \
     677        IEM_MC_ADVANCE_RIP(); \
     678        IEM_MC_END(); \
     679    } \
     680    else \
     681    { \
     682        /* \
     683         * Register, memory. \
     684         */ \
     685        IEM_MC_BEGIN(2, 2); \
     686        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc); \
     687        IEM_MC_ARG(PRTUINT128U,                 puDst, 0); \
     688        IEM_MC_ARG(uint ## a_SrcWidth ## _t,    uSrc, 1); \
     689        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); \
     690        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
     691        IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT(); \
     692        IEM_MC_PREPARE_SSE_USAGE(); \
     693        IEM_MC_FETCH_MEM_U## a_SrcWidth (uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); \
     694        IEM_MC_REF_XREG_U128(puDst, IEM_GET_MODRM_REG(pVCpu, bRm)); \
     695        IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fSse41, \
     696                                                             iemAImpl_ ## a_Instr ## _u128, \
     697                                                             iemAImpl_v ## a_Instr ## _u128_fallback), \
     698                                 puDst, uSrc); \
     699        IEM_MC_ADVANCE_RIP(); \
     700        IEM_MC_END(); \
     701    } \
     702    return VINF_SUCCESS
     703
     704
    657705/** Opcode 0x66 0x0f 0x38 0x20. */
    658 FNIEMOP_STUB(iemOp_pmovsxbw_Vx_UxMq);
     706FNIEMOP_DEF(iemOp_pmovsxbw_Vx_UxMq)
     707{
     708     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     709    IEMOP_MNEMONIC2(RM, PMOVSXBW, pmovsxbw, Vx, Wq, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES);
     710    IEMOP_BODY_PMOV_S_Z(pmovsxbw, 64);
     711}
     712
     713
    659714/** Opcode 0x66 0x0f 0x38 0x21. */
    660 FNIEMOP_STUB(iemOp_pmovsxbd_Vx_UxMd);
     715FNIEMOP_DEF(iemOp_pmovsxbd_Vx_UxMd)
     716{
     717     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     718    IEMOP_MNEMONIC2(RM, PMOVSXBD, pmovsxbd, Vx, Wq, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES);
     719    IEMOP_BODY_PMOV_S_Z(pmovsxbd, 32);
     720}
     721
     722
    661723/** Opcode 0x66 0x0f 0x38 0x22. */
    662 FNIEMOP_STUB(iemOp_pmovsxbq_Vx_UxMw);
     724FNIEMOP_DEF(iemOp_pmovsxbq_Vx_UxMw)
     725{
     726     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     727    IEMOP_MNEMONIC2(RM, PMOVSXBQ, pmovsxbq, Vx, Wq, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES);
     728    IEMOP_BODY_PMOV_S_Z(pmovsxbq, 16);
     729}
     730
     731
    663732/** Opcode 0x66 0x0f 0x38 0x23. */
    664 FNIEMOP_STUB(iemOp_pmovsxwd_Vx_UxMq);
     733FNIEMOP_DEF(iemOp_pmovsxwd_Vx_UxMq)
     734{
     735     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     736    IEMOP_MNEMONIC2(RM, PMOVSXWD, pmovsxwd, Vx, Wq, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES);
     737    IEMOP_BODY_PMOV_S_Z(pmovsxwd, 64);
     738}
     739
     740
    665741/** Opcode 0x66 0x0f 0x38 0x24. */
    666 FNIEMOP_STUB(iemOp_pmovsxwq_Vx_UxMd);
     742FNIEMOP_DEF(iemOp_pmovsxwq_Vx_UxMd)
     743{
     744     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     745    IEMOP_MNEMONIC2(RM, PMOVSXWQ, pmovsxwq, Vx, Wq, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES);
     746    IEMOP_BODY_PMOV_S_Z(pmovsxwq, 32);
     747}
     748
     749
    667750/** Opcode 0x66 0x0f 0x38 0x25. */
    668 FNIEMOP_STUB(iemOp_pmovsxdq_Vx_UxMq);
     751FNIEMOP_DEF(iemOp_pmovsxdq_Vx_UxMq)
     752{
     753     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     754    IEMOP_MNEMONIC2(RM, PMOVSXDQ, pmovsxdq, Vx, Wq, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES);
     755    IEMOP_BODY_PMOV_S_Z(pmovsxdq, 64);
     756}
     757
     758
    669759/*  Opcode 0x66 0x0f 0x38 0x26 - invalid */
    670760/*  Opcode 0x66 0x0f 0x38 0x27 - invalid */
     
    751841
    752842/** Opcode 0x66 0x0f 0x38 0x30. */
    753 FNIEMOP_STUB(iemOp_pmovzxbw_Vx_UxMq);
     843FNIEMOP_DEF(iemOp_pmovzxbw_Vx_UxMq)
     844{
     845     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     846    IEMOP_MNEMONIC2(RM, PMOVZXBW, pmovzxbw, Vx, Wq, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES);
     847    IEMOP_BODY_PMOV_S_Z(pmovzxbw, 64);
     848}
     849
     850
    754851/** Opcode 0x66 0x0f 0x38 0x31. */
    755 FNIEMOP_STUB(iemOp_pmovzxbd_Vx_UxMd);
     852FNIEMOP_DEF(iemOp_pmovzxbd_Vx_UxMd)
     853{
     854     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     855    IEMOP_MNEMONIC2(RM, PMOVZXBD, pmovzxbd, Vx, Wq, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES);
     856    IEMOP_BODY_PMOV_S_Z(pmovzxbd, 32);
     857}
     858
     859
    756860/** Opcode 0x66 0x0f 0x38 0x32. */
    757 FNIEMOP_STUB(iemOp_pmovzxbq_Vx_UxMw);
     861FNIEMOP_DEF(iemOp_pmovzxbq_Vx_UxMw)
     862{
     863     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     864    IEMOP_MNEMONIC2(RM, PMOVZXBQ, pmovzxbq, Vx, Wq, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES);
     865    IEMOP_BODY_PMOV_S_Z(pmovzxbq, 16);
     866}
     867
     868
    758869/** Opcode 0x66 0x0f 0x38 0x33. */
    759 FNIEMOP_STUB(iemOp_pmovzxwd_Vx_UxMq);
     870FNIEMOP_DEF(iemOp_pmovzxwd_Vx_UxMq)
     871{
     872     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     873    IEMOP_MNEMONIC2(RM, PMOVZXWD, pmovzxwd, Vx, Wq, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES);
     874    IEMOP_BODY_PMOV_S_Z(pmovzxwd, 64);
     875}
     876
     877
    760878/** Opcode 0x66 0x0f 0x38 0x34. */
    761 FNIEMOP_STUB(iemOp_pmovzxwq_Vx_UxMd);
     879FNIEMOP_DEF(iemOp_pmovzxwq_Vx_UxMd)
     880{
     881     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     882    IEMOP_MNEMONIC2(RM, PMOVZXWQ, pmovzxwq, Vx, Wq, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES);
     883    IEMOP_BODY_PMOV_S_Z(pmovzxwq, 32);
     884}
     885
     886
    762887/** Opcode 0x66 0x0f 0x38 0x35. */
    763 FNIEMOP_STUB(iemOp_pmovzxdq_Vx_UxMq);
     888FNIEMOP_DEF(iemOp_pmovzxdq_Vx_UxMq)
     889{
     890     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     891    IEMOP_MNEMONIC2(RM, PMOVZXDQ, pmovzxdq, Vx, Wq, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES);
     892    IEMOP_BODY_PMOV_S_Z(pmovzxdq, 64);
     893}
     894
     895
    764896/*  Opcode 0x66 0x0f 0x38 0x36 - invalid (vex only). */
    765897
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap2.cpp.h

    r96099 r96115  
    352352
    353353
     354/** Body for the vpmov{s,z}x* instructions. */
     355#define IEMOP_BODY_VPMOV_S_Z(a_Instr, a_SrcWidth) \
     356    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); \
     357    if (IEM_IS_MODRM_REG_MODE(bRm)) \
     358    { \
     359        /* \
     360         * Register, register. \
     361         */ \
     362        if (pVCpu->iem.s.uVexLength) \
     363        { \
     364            IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx2); \
     365            IEM_MC_BEGIN(2, 1); \
     366            IEM_MC_LOCAL(RTUINT256U,            uDst); \
     367            IEM_MC_ARG_LOCAL_REF(PRTUINT256U,   puDst, uDst, 0); \
     368            IEM_MC_ARG(PCRTUINT128U,            puSrc,       1); \
     369            IEM_MC_MAYBE_RAISE_AVX2_RELATED_XCPT(); \
     370            IEM_MC_PREPARE_AVX_USAGE(); \
     371            IEM_MC_REF_XREG_U128_CONST(puSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); \
     372            IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fAvx2, iemAImpl_ ## a_Instr ## _u256, \
     373                                                                 iemAImpl_ ## a_Instr ## _u256_fallback), \
     374                                     puDst, puSrc); \
     375            IEM_MC_STORE_YREG_U256_ZX_VLMAX(IEM_GET_MODRM_REG(pVCpu, bRm), uDst); \
     376            IEM_MC_ADVANCE_RIP(); \
     377            IEM_MC_END(); \
     378        } \
     379        else \
     380        { \
     381            IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); \
     382            IEM_MC_BEGIN(2, 0); \
     383            IEM_MC_ARG(PRTUINT128U,          puDst,  0); \
     384            IEM_MC_ARG(uint64_t,             uSrc,   1); \
     385            IEM_MC_MAYBE_RAISE_AVX2_RELATED_XCPT(); \
     386            IEM_MC_PREPARE_AVX_USAGE(); \
     387            IEM_MC_REF_XREG_U128(puDst,  IEM_GET_MODRM_REG(pVCpu, bRm)); \
     388            IEM_MC_FETCH_XREG_U64(uSrc,  IEM_GET_MODRM_RM(pVCpu, bRm)); \
     389            IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fAvx2, iemAImpl_ ## a_Instr ## _u128, \
     390                                                                 iemAImpl_## a_Instr ## _u128_fallback), \
     391                                     puDst, uSrc); \
     392            IEM_MC_CLEAR_YREG_128_UP(          IEM_GET_MODRM_REG(pVCpu, bRm)); \
     393            IEM_MC_ADVANCE_RIP(); \
     394            IEM_MC_END(); \
     395        } \
     396    } \
     397    else \
     398    { \
     399        /* \
     400         * Register, memory. \
     401         */ \
     402        if (pVCpu->iem.s.uVexLength) \
     403        { \
     404            IEM_MC_BEGIN(2, 3); \
     405            IEM_MC_LOCAL(RTUINT256U,            uDst); \
     406            IEM_MC_LOCAL(RTUINT128U,            uSrc); \
     407            IEM_MC_LOCAL(RTGCPTR,               GCPtrEffSrc); \
     408            IEM_MC_ARG_LOCAL_REF(PRTUINT256U,   puDst, uDst, 0); \
     409            IEM_MC_ARG_LOCAL_REF(PCRTUINT128U,  puSrc, uSrc, 1); \
     410            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); \
     411            IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx2); \
     412            IEM_MC_MAYBE_RAISE_AVX2_RELATED_XCPT(); \
     413            IEM_MC_PREPARE_AVX_USAGE(); \
     414            IEM_MC_FETCH_MEM_U128(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); \
     415            IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fAvx2, iemAImpl_ ## a_Instr ## _u256, \
     416                                                                 iemAImpl_ ## a_Instr ## _u256_fallback), \
     417                                     puDst, puSrc); \
     418            IEM_MC_STORE_YREG_U256_ZX_VLMAX(   IEM_GET_MODRM_REG(pVCpu, bRm), uDst); \
     419            IEM_MC_ADVANCE_RIP(); \
     420            IEM_MC_END(); \
     421        } \
     422        else \
     423        { \
     424            IEM_MC_BEGIN(2, 1); \
     425            IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc); \
     426            IEM_MC_ARG(PRTUINT128U,                 puDst,       0); \
     427            IEM_MC_ARG(uint ## a_SrcWidth ##_t,     uSrc,        1); \
     428            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); \
     429            IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx); \
     430            IEM_MC_MAYBE_RAISE_AVX2_RELATED_XCPT(); \
     431            IEM_MC_PREPARE_AVX_USAGE(); \
     432            IEM_MC_REF_XREG_U128(puDst,  IEM_GET_MODRM_REG(pVCpu, bRm)); \
     433            IEM_MC_FETCH_MEM_U ## a_SrcWidth (uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); \
     434            IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fAvx2, iemAImpl_ ## a_Instr ## _u128, \
     435                                                                 iemAImpl_ ## a_Instr ## _u128_fallback), \
     436                                     puDst, uSrc); \
     437            IEM_MC_CLEAR_YREG_128_UP(           IEM_GET_MODRM_REG(pVCpu, bRm)); \
     438            IEM_MC_ADVANCE_RIP(); \
     439            IEM_MC_END(); \
     440        } \
     441    } \
     442    return VINF_SUCCESS \
     443
    354444/** Opcode VEX.66.0F38 0x20. */
    355 FNIEMOP_STUB(iemOp_vpmovsxbw_Vx_UxMq);
     445FNIEMOP_DEF(iemOp_vpmovsxbw_Vx_UxMq)
     446{
     447     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     448    IEMOP_MNEMONIC2(VEX_RM, VPMOVSXBW, vpmovsxbw, Vx, Wq, DISOPTYPE_HARMLESS, 0);
     449    IEMOP_BODY_VPMOV_S_Z(vpmovsxbw, 64);
     450}
     451
     452
    356453/** Opcode VEX.66.0F38 0x21. */
    357 FNIEMOP_STUB(iemOp_vpmovsxbd_Vx_UxMd);
     454FNIEMOP_DEF(iemOp_vpmovsxbd_Vx_UxMd)
     455{
     456     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     457    IEMOP_MNEMONIC2(VEX_RM, VPMOVSXBD, vpmovsxbd, Vx, Wq, DISOPTYPE_HARMLESS, 0);
     458    IEMOP_BODY_VPMOV_S_Z(vpmovsxbd, 32);
     459}
     460
     461
    358462/** Opcode VEX.66.0F38 0x22. */
    359 FNIEMOP_STUB(iemOp_vpmovsxbq_Vx_UxMw);
     463FNIEMOP_DEF(iemOp_vpmovsxbq_Vx_UxMw)
     464{
     465     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     466    IEMOP_MNEMONIC2(VEX_RM, VPMOVSXBQ, vpmovsxbq, Vx, Wq, DISOPTYPE_HARMLESS, 0);
     467    IEMOP_BODY_VPMOV_S_Z(vpmovsxbq, 16);
     468}
     469
     470
    360471/** Opcode VEX.66.0F38 0x23. */
    361 FNIEMOP_STUB(iemOp_vpmovsxwd_Vx_UxMq);
     472FNIEMOP_DEF(iemOp_vpmovsxwd_Vx_UxMq)
     473{
     474     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     475    IEMOP_MNEMONIC2(VEX_RM, VPMOVSXWD, vpmovsxwd, Vx, Wq, DISOPTYPE_HARMLESS, 0);
     476    IEMOP_BODY_VPMOV_S_Z(vpmovsxwd, 64);
     477}
     478
     479
    362480/** Opcode VEX.66.0F38 0x24. */
    363 FNIEMOP_STUB(iemOp_vpmovsxwq_Vx_UxMd);
     481FNIEMOP_DEF(iemOp_vpmovsxwq_Vx_UxMd)
     482{
     483     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     484    IEMOP_MNEMONIC2(VEX_RM, VPMOVSXWQ, vpmovsxwq, Vx, Wq, DISOPTYPE_HARMLESS, 0);
     485    IEMOP_BODY_VPMOV_S_Z(vpmovsxwq, 32);
     486}
     487
     488
    364489/** Opcode VEX.66.0F38 0x25. */
    365 FNIEMOP_STUB(iemOp_vpmovsxdq_Vx_UxMq);
     490FNIEMOP_DEF(iemOp_vpmovsxdq_Vx_UxMq)
     491{
     492     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     493    IEMOP_MNEMONIC2(VEX_RM, VPMOVSXDQ, vpmovsxdq, Vx, Wq, DISOPTYPE_HARMLESS, 0);
     494    IEMOP_BODY_VPMOV_S_Z(vpmovsxdq, 64);
     495}
     496
     497
    366498/*  Opcode VEX.66.0F38 0x26 - invalid */
    367499/*  Opcode VEX.66.0F38 0x27 - invalid */
     
    488620FNIEMOP_STUB(iemOp_vmaskmovpd_Mx_Hx_Vx);
    489621
     622
    490623/** Opcode VEX.66.0F38 0x30. */
    491 FNIEMOP_STUB(iemOp_vpmovzxbw_Vx_UxMq);
     624FNIEMOP_DEF(iemOp_vpmovzxbw_Vx_UxMq)
     625{
     626     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     627    IEMOP_MNEMONIC2(VEX_RM, VPMOVZXBW, vpmovzxbw, Vx, Wq, DISOPTYPE_HARMLESS, 0);
     628    IEMOP_BODY_VPMOV_S_Z(vpmovzxbw, 64);
     629}
     630
     631
    492632/** Opcode VEX.66.0F38 0x31. */
    493 FNIEMOP_STUB(iemOp_vpmovzxbd_Vx_UxMd);
     633FNIEMOP_DEF(iemOp_vpmovzxbd_Vx_UxMd)
     634{
     635     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     636    IEMOP_MNEMONIC2(VEX_RM, VPMOVZXBD, vpmovzxbd, Vx, Wq, DISOPTYPE_HARMLESS, 0);
     637    IEMOP_BODY_VPMOV_S_Z(vpmovzxbd, 32);
     638}
     639
     640
    494641/** Opcode VEX.66.0F38 0x32. */
    495 FNIEMOP_STUB(iemOp_vpmovzxbq_Vx_UxMw);
     642FNIEMOP_DEF(iemOp_vpmovzxbq_Vx_UxMw)
     643{
     644     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     645    IEMOP_MNEMONIC2(VEX_RM, VPMOVZXBQ, vpmovzxbq, Vx, Wq, DISOPTYPE_HARMLESS, 0);
     646    IEMOP_BODY_VPMOV_S_Z(vpmovzxbq, 16);
     647}
     648
     649
    496650/** Opcode VEX.66.0F38 0x33. */
    497 FNIEMOP_STUB(iemOp_vpmovzxwd_Vx_UxMq);
     651FNIEMOP_DEF(iemOp_vpmovzxwd_Vx_UxMq)
     652{
     653     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     654    IEMOP_MNEMONIC2(VEX_RM, VPMOVZXWD, vpmovzxwd, Vx, Wq, DISOPTYPE_HARMLESS, 0);
     655    IEMOP_BODY_VPMOV_S_Z(vpmovzxwd, 64);
     656}
     657
     658
    498659/** Opcode VEX.66.0F38 0x34. */
    499 FNIEMOP_STUB(iemOp_vpmovzxwq_Vx_UxMd);
     660FNIEMOP_DEF(iemOp_vpmovzxwq_Vx_UxMd)
     661{
     662     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     663    IEMOP_MNEMONIC2(VEX_RM, VPMOVZXWQ, vpmovzxwq, Vx, Wq, DISOPTYPE_HARMLESS, 0);
     664    IEMOP_BODY_VPMOV_S_Z(vpmovzxwq, 32);
     665}
     666
     667
    500668/** Opcode VEX.66.0F38 0x35. */
    501 FNIEMOP_STUB(iemOp_vpmovzxdq_Vx_UxMq);
     669FNIEMOP_DEF(iemOp_vpmovzxdq_Vx_UxMq)
     670{
     671     /** @todo r=aeichner Review code, the naming of this function and the parameter type specifiers. */
     672    IEMOP_MNEMONIC2(VEX_RM, VPMOVZXDQ, vpmovzxdq, Vx, Wq, DISOPTYPE_HARMLESS, 0);
     673    IEMOP_BODY_VPMOV_S_Z(vpmovzxdq, 64);
     674}
     675
     676
    502677/*  Opcode VEX.66.0F38 0x36. */
    503678FNIEMOP_STUB(iemOp_vpermd_Vqq_Hqq_Wqq);
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r96109 r96115  
    20772077IEM_DECL_IMPL_DEF(void, iemAImpl_vmovddup_256_rr,(PX86XSAVEAREA pXState, uint8_t iYRegDst, uint8_t iYRegSrc));
    20782078IEM_DECL_IMPL_DEF(void, iemAImpl_vmovddup_256_rm,(PX86XSAVEAREA pXState, uint8_t iYRegDst, PCRTUINT256U pSrc));
     2079
     2080IEM_DECL_IMPL_DEF(void, iemAImpl_pmovsxbw_u128,(PRTUINT128U puDst, uint64_t uSrc));
     2081IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxbw_u128,(PRTUINT128U puDst, uint64_t uSrc));
     2082IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxbw_u128_fallback,(PRTUINT128U puDst, uint64_t uSrc));
     2083IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxbw_u256,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2084IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxbw_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2085
     2086IEM_DECL_IMPL_DEF(void, iemAImpl_pmovsxbd_u128,(PRTUINT128U puDst, uint32_t uSrc));
     2087IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxbd_u128,(PRTUINT128U puDst, uint32_t uSrc));
     2088IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxbd_u128_fallback,(PRTUINT128U puDst, uint32_t uSrc));
     2089IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxbd_u256,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2090IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxbd_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2091
     2092IEM_DECL_IMPL_DEF(void, iemAImpl_pmovsxbq_u128,(PRTUINT128U puDst, uint16_t uSrc));
     2093IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxbq_u128,(PRTUINT128U puDst, uint16_t uSrc));
     2094IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxbq_u128_fallback,(PRTUINT128U puDst, uint16_t uSrc));
     2095IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxbq_u256,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2096IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxbq_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2097
     2098IEM_DECL_IMPL_DEF(void, iemAImpl_pmovsxwd_u128,(PRTUINT128U puDst, uint64_t uSrc));
     2099IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxwd_u128,(PRTUINT128U puDst, uint64_t uSrc));
     2100IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxwd_u128_fallback,(PRTUINT128U puDst, uint64_t uSrc));
     2101IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxwd_u256,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2102IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxwd_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2103
     2104IEM_DECL_IMPL_DEF(void, iemAImpl_pmovsxwq_u128,(PRTUINT128U puDst, uint32_t uSrc));
     2105IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxwq_u128,(PRTUINT128U puDst, uint32_t uSrc));
     2106IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxwq_u128_fallback,(PRTUINT128U puDst, uint32_t uSrc));
     2107IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxwq_u256,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2108IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxwq_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2109
     2110IEM_DECL_IMPL_DEF(void, iemAImpl_pmovsxdq_u128,(PRTUINT128U puDst, uint64_t uSrc));
     2111IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxdq_u128,(PRTUINT128U puDst, uint64_t uSrc));
     2112IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxdq_u128_fallback,(PRTUINT128U puDst, uint64_t uSrc));
     2113IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxdq_u256,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2114IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovsxdq_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2115
     2116IEM_DECL_IMPL_DEF(void, iemAImpl_pmovzxbw_u128,(PRTUINT128U puDst, uint64_t uSrc));
     2117IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxbw_u128,(PRTUINT128U puDst, uint64_t uSrc));
     2118IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxbw_u128_fallback,(PRTUINT128U puDst, uint64_t uSrc));
     2119IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxbw_u256,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2120IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxbw_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2121
     2122IEM_DECL_IMPL_DEF(void, iemAImpl_pmovzxbd_u128,(PRTUINT128U puDst, uint32_t uSrc));
     2123IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxbd_u128,(PRTUINT128U puDst, uint32_t uSrc));
     2124IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxbd_u128_fallback,(PRTUINT128U puDst, uint32_t uSrc));
     2125IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxbd_u256,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2126IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxbd_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2127
     2128IEM_DECL_IMPL_DEF(void, iemAImpl_pmovzxbq_u128,(PRTUINT128U puDst, uint16_t uSrc));
     2129IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxbq_u128,(PRTUINT128U puDst, uint16_t uSrc));
     2130IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxbq_u128_fallback,(PRTUINT128U puDst, uint16_t uSrc));
     2131IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxbq_u256,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2132IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxbq_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2133
     2134IEM_DECL_IMPL_DEF(void, iemAImpl_pmovzxwd_u128,(PRTUINT128U puDst, uint64_t uSrc));
     2135IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxwd_u128,(PRTUINT128U puDst, uint64_t uSrc));
     2136IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxwd_u128_fallback,(PRTUINT128U puDst, uint64_t uSrc));
     2137IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxwd_u256,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2138IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxwd_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2139
     2140IEM_DECL_IMPL_DEF(void, iemAImpl_pmovzxwq_u128,(PRTUINT128U puDst, uint32_t uSrc));
     2141IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxwq_u128,(PRTUINT128U puDst, uint32_t uSrc));
     2142IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxwq_u128_fallback,(PRTUINT128U puDst, uint32_t uSrc));
     2143IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxwq_u256,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2144IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxwq_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2145
     2146IEM_DECL_IMPL_DEF(void, iemAImpl_pmovzxdq_u128,(PRTUINT128U puDst, uint64_t uSrc));
     2147IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxdq_u128,(PRTUINT128U puDst, uint64_t uSrc));
     2148IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxdq_u128_fallback,(PRTUINT128U puDst, uint64_t uSrc));
     2149IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxdq_u256,(PRTUINT256U puDst, PCRTUINT128U puSrc));
     2150IEM_DECL_IMPL_DEF(void, iemAImpl_vpmovzxdq_u256_fallback,(PRTUINT256U puDst, PCRTUINT128U puSrc));
    20792151
    20802152/** @} */
Note: See TracChangeset for help on using the changeset viewer.

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