VirtualBox

Ignore:
Timestamp:
Jul 5, 2022 9:36:07 PM (2 years ago)
Author:
vboxsync
Message:

VMM/IEM: Implemented [v]packsswb, [v]packssdw, [v]packuswb and [v]packusdw. bugref:9898

File:
1 edited

Legend:

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

    r95509 r95522  
    36243624
    36253625;;
     3626; Media instruction working on two full sized registers, but no FXSAVE state argument.
     3627;
     3628; @param    1       The instruction
     3629; @param    2       Whether there is an MMX variant (1) or not (0).
     3630;
     3631; @param    A0      Pointer to the first media register size operand (input/output).
     3632; @param    A1      Pointer to the second media register size operand (input).
     3633;
     3634%macro IEMIMPL_MEDIA_OPT_F2 2
     3635%if %2 != 0
     3636BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64, 8
     3637        PROLOGUE_2_ARGS
     3638        IEMIMPL_MMX_PROLOGUE
     3639
     3640        movq    mm0, [A0]
     3641        movq    mm1, [A1]
     3642        %1      mm0, mm1
     3643        movq    [A0], mm0
     3644
     3645        IEMIMPL_MMX_EPILOGUE
     3646        EPILOGUE_2_ARGS
     3647ENDPROC iemAImpl_ %+ %1 %+ _u64
     3648%endif
     3649
     3650BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u128, 8
     3651        PROLOGUE_2_ARGS
     3652        IEMIMPL_SSE_PROLOGUE
     3653
     3654        movdqu   xmm0, [A0]
     3655        movdqu   xmm1, [A1]
     3656        %1       xmm0, xmm1
     3657        movdqu   [A0], xmm0
     3658
     3659        IEMIMPL_SSE_EPILOGUE
     3660        EPILOGUE_2_ARGS
     3661ENDPROC iemAImpl_ %+ %1 %+ _u128
     3662%endmacro
     3663
     3664IEMIMPL_MEDIA_OPT_F2 packsswb, 1
     3665IEMIMPL_MEDIA_OPT_F2 packssdw, 1
     3666IEMIMPL_MEDIA_OPT_F2 packuswb, 1
     3667IEMIMPL_MEDIA_OPT_F2 packusdw, 0
     3668
     3669
     3670;;
    36263671; Media instruction working on one full sized and one half sized register (lower half).
    36273672;
     
    39263971BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u256, 16
    39273972        PROLOGUE_4_ARGS
    3928         IEMIMPL_SSE_PROLOGUE
     3973        IEMIMPL_AVX_PROLOGUE
    39293974
    39303975        vmovdqu  ymm0, [A2]
     
    39614006
    39624007
     4008;;
     4009; Media instruction working on two full sized source registers and one destination (AVX),
     4010; but no XSAVE state pointer argument.
     4011;
     4012; @param    1       The instruction
     4013;
     4014; @param    A0      Pointer to the destination media register size operand (output).
     4015; @param    A1      Pointer to the first source media register size operand (input).
     4016; @param    A2      Pointer to the second source media register size operand (input).
     4017;
     4018%macro IEMIMPL_MEDIA_OPT_F3 1
     4019BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u128, 12
     4020        PROLOGUE_3_ARGS
     4021        IEMIMPL_AVX_PROLOGUE
     4022
     4023        vmovdqu  xmm0, [A1]
     4024        vmovdqu  xmm1, [A2]
     4025        %1       xmm0, xmm0, xmm1
     4026        vmovdqu  [A0], xmm0
     4027
     4028        IEMIMPL_AVX_PROLOGUE
     4029        EPILOGUE_3_ARGS
     4030ENDPROC iemAImpl_ %+ %1 %+ _u128
     4031
     4032BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u256, 12
     4033        PROLOGUE_3_ARGS
     4034        IEMIMPL_AVX_PROLOGUE
     4035
     4036        vmovdqu  ymm0, [A1]
     4037        vmovdqu  ymm1, [A2]
     4038        %1       ymm0, ymm0, ymm1
     4039        vmovdqu  [A0], ymm0
     4040
     4041        IEMIMPL_AVX_PROLOGUE
     4042        EPILOGUE_3_ARGS
     4043ENDPROC iemAImpl_ %+ %1 %+ _u256
     4044%endmacro
     4045
     4046IEMIMPL_MEDIA_OPT_F3 vpacksswb
     4047IEMIMPL_MEDIA_OPT_F3 vpackssdw
     4048IEMIMPL_MEDIA_OPT_F3 vpackuswb
     4049IEMIMPL_MEDIA_OPT_F3 vpackusdw
     4050
     4051
    39634052;
    39644053; The SSE 4.2 crc32
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