Changeset 95509 in vbox for trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm
- Timestamp:
- Jul 4, 2022 10:53:58 PM (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm
r95499 r95509 3629 3629 ; @param 2 1 if MMX is included, 0 if not. 3630 3630 ; 3631 ; @param A0 FPU context (fxsave). 3632 ; @param A1 Pointer to the first full sized media register operand (input/output). 3633 ; @param A2 Pointer to the second half sized media register operand (input). 3631 ; @param A0 Pointer to the first full sized media register operand (input/output). 3632 ; @param A1 Pointer to the second half sized media register operand (input). 3634 3633 ; 3635 3634 %macro IEMIMPL_MEDIA_F1L1 2 3636 3635 %if %2 != 0 3637 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64, 123638 PROLOGUE_ 3_ARGS3636 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64, 8 3637 PROLOGUE_2_ARGS 3639 3638 IEMIMPL_MMX_PROLOGUE 3640 3639 3641 movq mm0, [A 1]3642 mov d mm1, [A2]3640 movq mm0, [A0] 3641 movq mm1, [A1] 3643 3642 %1 mm0, mm1 3644 movq [A 1], mm03643 movq [A0], mm0 3645 3644 3646 3645 IEMIMPL_MMX_EPILOGUE 3647 EPILOGUE_ 3_ARGS3646 EPILOGUE_2_ARGS 3648 3647 ENDPROC iemAImpl_ %+ %1 %+ _u64 3649 3648 %endif 3650 3649 3651 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u128, 123652 PROLOGUE_ 3_ARGS3650 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u128, 8 3651 PROLOGUE_2_ARGS 3653 3652 IEMIMPL_SSE_PROLOGUE 3654 3653 3655 movdqu xmm0, [A 1]3656 mov q xmm1, [A2]3654 movdqu xmm0, [A0] 3655 movdqu xmm1, [A1] 3657 3656 %1 xmm0, xmm1 3658 movdqu [A 1], xmm03657 movdqu [A0], xmm0 3659 3658 3660 3659 IEMIMPL_SSE_EPILOGUE 3661 EPILOGUE_ 3_ARGS3660 EPILOGUE_2_ARGS 3662 3661 ENDPROC iemAImpl_ %+ %1 %+ _u128 3663 3662 %endmacro … … 3670 3669 3671 3670 ;; 3671 ; Media instruction working two half sized input registers (lower half) and a full sized 3672 ; destination register (vpunpckh*). 3673 ; 3674 ; @param 1 The instruction 3675 ; 3676 ; @param A0 Pointer to the destination register (full sized, output only). 3677 ; @param A1 Pointer to the first full sized media source register operand, where we 3678 ; will only use the lower half as input - but we'll be loading it in full. 3679 ; @param A2 Pointer to the second full sized media source register operand, where we 3680 ; will only use the lower half as input - but we'll be loading it in full. 3681 ; 3682 %macro IEMIMPL_MEDIA_F1L1L1 1 3683 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u128, 12 3684 PROLOGUE_3_ARGS 3685 IEMIMPL_AVX_PROLOGUE 3686 3687 vmovdqu xmm0, [A1] 3688 vmovdqu xmm1, [A2] 3689 %1 xmm0, xmm0, xmm1 3690 vmovdqu [A0], xmm0 3691 3692 IEMIMPL_AVX_PROLOGUE 3693 EPILOGUE_3_ARGS 3694 ENDPROC iemAImpl_ %+ %1 %+ _u128 3695 3696 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u256, 12 3697 PROLOGUE_3_ARGS 3698 IEMIMPL_AVX_PROLOGUE 3699 3700 vmovdqu ymm0, [A1] 3701 vmovdqu ymm1, [A2] 3702 %1 ymm0, ymm0, ymm1 3703 vmovdqu [A0], ymm0 3704 3705 IEMIMPL_AVX_PROLOGUE 3706 EPILOGUE_3_ARGS 3707 ENDPROC iemAImpl_ %+ %1 %+ _u256 3708 %endmacro 3709 3710 IEMIMPL_MEDIA_F1L1L1 vpunpcklbw 3711 IEMIMPL_MEDIA_F1L1L1 vpunpcklwd 3712 IEMIMPL_MEDIA_F1L1L1 vpunpckldq 3713 IEMIMPL_MEDIA_F1L1L1 vpunpcklqdq 3714 3715 3716 ;; 3672 3717 ; Media instruction working on one full sized and one half sized register (high half). 3673 3718 ; … … 3675 3720 ; @param 2 1 if MMX is included, 0 if not. 3676 3721 ; 3677 ; @param A0 FPU context (fxsave). 3678 ; @param A1 Pointer to the first full sized media register operand (input/output). 3679 ; @param A2 Pointer to the second full sized media register operand, where we 3680 ; will only use the upper half (input). 3722 ; @param A0 Pointer to the first full sized media register operand (input/output). 3723 ; @param A1 Pointer to the second full sized media register operand, where we 3724 ; will only use the upper half as input - but we'll load it in full. 3681 3725 ; 3682 3726 %macro IEMIMPL_MEDIA_F1H1 2 3683 %if %2 != 0 3684 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64, 12 3685 PROLOGUE_3_ARGS 3686 IEMIMPL_MMX_PROLOGUE 3687 3688 movq mm0, [A1] 3689 movq mm1, [A2] 3690 %1 mm0, mm1 3691 movq [A1], mm0 3692 3693 IEMIMPL_MMX_EPILOGUE 3694 EPILOGUE_3_ARGS 3695 ENDPROC iemAImpl_ %+ %1 %+ _u64 3696 %endif 3697 3698 BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u128, 12 3699 PROLOGUE_3_ARGS 3700 IEMIMPL_SSE_PROLOGUE 3701 3702 movdqu xmm0, [A1] 3703 movdqu xmm1, [A2] 3704 %1 xmm0, xmm1 3705 movdqu [A1], xmm0 3706 3707 IEMIMPL_SSE_EPILOGUE 3708 EPILOGUE_3_ARGS 3709 ENDPROC iemAImpl_ %+ %1 %+ _u128 3727 IEMIMPL_MEDIA_F1L1 %1, %2 3710 3728 %endmacro 3711 3729 … … 3714 3732 IEMIMPL_MEDIA_F1L1 punpckhdq, 1 3715 3733 IEMIMPL_MEDIA_F1L1 punpckhqdq, 0 3734 3735 3736 ;; 3737 ; Media instruction working two half sized input registers (high half) and a full sized 3738 ; destination register (vpunpckh*). 3739 ; 3740 ; @param 1 The instruction 3741 ; 3742 ; @param A0 Pointer to the destination register (full sized, output only). 3743 ; @param A1 Pointer to the first full sized media source register operand, where we 3744 ; will only use the upper half as input - but we'll be loading it in full. 3745 ; @param A2 Pointer to the second full sized media source register operand, where we 3746 ; will only use the upper half as input - but we'll be loading it in full. 3747 ; 3748 %macro IEMIMPL_MEDIA_F1H1H1 1 3749 IEMIMPL_MEDIA_F1L1L1 %1 3750 %endmacro 3751 3752 IEMIMPL_MEDIA_F1H1H1 vpunpckhbw 3753 IEMIMPL_MEDIA_F1H1H1 vpunpckhwd 3754 IEMIMPL_MEDIA_F1H1H1 vpunpckhdq 3755 IEMIMPL_MEDIA_F1H1H1 vpunpckhqdq 3716 3756 3717 3757
Note:
See TracChangeset
for help on using the changeset viewer.