VirtualBox

Ignore:
Timestamp:
Aug 24, 2022 12:53:47 PM (2 years ago)
Author:
vboxsync
Message:

VMM/IEM: Implement [v]pblendvb/[v]blendvps/[v]blendvpd instructions, bugref:9898

File:
1 edited

Legend:

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

    r96438 r96454  
    49554955IEMIMPL_MEDIA_AVX_VSHUFPX vshufps
    49564956IEMIMPL_MEDIA_AVX_VSHUFPX vshufpd
     4957
     4958
     4959;;
     4960; One of the [p]blendv{b,ps,pd} variants
     4961;
     4962; @param    1       The instruction
     4963;
     4964; @param    A0      Pointer to the first media register sized operand (input/output).
     4965; @param    A1      Pointer to the second media sized value (input).
     4966; @param    A2      Pointer to the media register sized mask value (input).
     4967;
     4968%macro IEMIMPL_P_BLEND 1
     4969BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u128, 16
     4970        PROLOGUE_3_ARGS
     4971        IEMIMPL_SSE_PROLOGUE
     4972
     4973        movdqu   xmm0, [A2] ; This is implicit
     4974        movdqu   xmm1, [A0]
     4975        movdqu   xmm2, [A1] ; @todo Do I need to save the original value here first?
     4976        %1       xmm1, xmm2
     4977        movdqu   [A0], xmm1
     4978
     4979        IEMIMPL_SSE_PROLOGUE
     4980        EPILOGUE_3_ARGS
     4981ENDPROC iemAImpl_ %+ %1 %+ _u128
     4982%endmacro
     4983
     4984IEMIMPL_P_BLEND pblendvb
     4985IEMIMPL_P_BLEND blendvps
     4986IEMIMPL_P_BLEND blendvpd
     4987
     4988
     4989;;
     4990; One of the v[p]blendv{b,ps,pd} variants
     4991;
     4992; @param    1       The instruction
     4993;
     4994; @param    A0      Pointer to the first media register sized operand (output).
     4995; @param    A1      Pointer to the first media register sized operand (input).
     4996; @param    A2      Pointer to the second media register sized operand (input).
     4997; @param    A3      Pointer to the media register sized mask value (input);
     4998%macro IEMIMPL_AVX_P_BLEND 1
     4999BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u128, 16
     5000        PROLOGUE_4_ARGS
     5001        IEMIMPL_AVX_PROLOGUE
     5002
     5003        vmovdqu   xmm0, [A1]
     5004        vmovdqu   xmm1, [A2]
     5005        vmovdqu   xmm2, [A3]
     5006        %1        xmm0, xmm0, xmm1, xmm2
     5007        vmovdqu   [A0], xmm0
     5008
     5009        IEMIMPL_AVX_PROLOGUE
     5010        EPILOGUE_4_ARGS
     5011ENDPROC iemAImpl_ %+ %1 %+ _u128
     5012
     5013BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u256, 16
     5014        PROLOGUE_4_ARGS
     5015        IEMIMPL_AVX_PROLOGUE
     5016
     5017        vmovdqu   ymm0, [A1]
     5018        vmovdqu   ymm1, [A2]
     5019        vmovdqu   ymm2, [A3]
     5020        %1        ymm0, ymm0, ymm1, ymm2
     5021        vmovdqu   [A0], ymm0
     5022
     5023        IEMIMPL_AVX_PROLOGUE
     5024        EPILOGUE_4_ARGS
     5025ENDPROC iemAImpl_ %+ %1 %+ _u256
     5026%endmacro
     5027
     5028IEMIMPL_AVX_P_BLEND vpblendvb
     5029IEMIMPL_AVX_P_BLEND vblendvps
     5030IEMIMPL_AVX_P_BLEND vblendvpd
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