root/usr/src/test/util-tests/tests/dis/i386/32.avx512.s
/*
 * This file and its contents are supplied under the terms of the
 * Common Development and Distribution License ("CDDL"), version 1.0.
 * You may only use this file in accordance with the terms of version
 * 1.0 of the CDDL.
 *
 * A full copy of the text of the CDDL should have accompanied this
 * source.  A copy of the CDDL is also available via the Internet at
 * http://www.illumos.org/license/CDDL.
 */

/*
 * Copyright 2019 Joyent, Inc.
 */

/*
 * Basic test for AVX512 instructions
 */

.text
.align 16
.globl libdis_test
.type libdis_test, @function
libdis_test:
        /* bound is not AVX512, but shares the 0x62 opcode on 32-bit. */
        bound           %eax, (%ebx)

        vmovaps         %xmm0, %xmm1
        vmovaps         %xmm2, %xmm3
        vmovaps         %xmm4, %xmm5
        vmovaps         %xmm6, %xmm7

        vmovaps         %ymm0, %ymm1
        vmovaps         %ymm2, %ymm3
        vmovaps         %ymm4, %ymm5
        vmovaps         %ymm6, %ymm7

        vmovaps         %zmm0, %zmm1
        vmovaps         %zmm2, %zmm3
        vmovaps         %zmm4, %zmm5
        vmovaps         %zmm6, %zmm7

        vmovaps         %zmm4, 0x8(%esp)
        vmovaps         0x8(%esp), %zmm3
        vmovaps         %zmm1, %zmm7{%k1}{z}
        vmovaps         %zmm6, %zmm4{%k7}
        vmovaps         %zmm2, %zmm3

        vmovaps         %xmm7, %xmm2{%k3}{z}
        vmovaps         %ymm1, %ymm3{%k5}

        vmovapd         %zmm2, %zmm7

        vmovups         %zmm7, 0x20(%ebp)
        vmovups         0x8(%esp), %zmm7
        vmovups         (%eax), %zmm3

        vmovupd         (%esp), %zmm1{%k2}
        vmovupd         %zmm6, (%esp)

        /* Test offset handling for both disp8*N and full. */
        vmovaps         %zmm5, (%esp)
        vmovaps         %zmm5, 0x20(%esp)
        vmovaps         %zmm4, 0x40(%esp)
        vmovaps         %zmm4, 0x60(%esp)
        vmovaps         %zmm4, 0x80(%esp)
        vmovaps         %zmm4, -0x80(%esp)
        vmovaps         %zmm4, -0x20(%esp)

        vmovaps         (%esp), %zmm5
        vmovaps         0x20(%esp), %zmm5
        vmovaps         0x40(%esp), %zmm5
        vmovaps         0x60(%esp), %zmm5
        vmovaps         0x80(%esp), %zmm5
        vmovaps         -0x80(%esp), %zmm5
        vmovaps         -0x20(%esp), %zmm5

        vmovdqa32       %zmm6, 0x100(%esp)
        vmovdqa32       %ymm6, 0x100(%esp)
        vmovdqa32       %xmm6, 0x100(%esp)
        vmovdqa32       (%eax), %zmm6
        vmovdqa32       (%eax), %ymm6
        vmovdqa32       (%eax), %xmm6

        vmovdqa64       %zmm6, 0x100(%esp)
        vmovdqa64       %ymm6, 0x100(%esp)
        vmovdqa64       %xmm6, 0x100(%esp)
        vmovdqa64       0x800(%esp), %zmm6
        vmovdqa64       0x800(%esp), %ymm6
        vmovdqa64       0x800(%esp), %xmm6

        vmovdqu8        %zmm0, (%esp)
        vmovdqu16       %zmm0, (%esp)
        vmovdqu32       %zmm0, (%esp)
        vmovdqu64       %zmm0, (%esp)
        vmovdqu8        (%esp), %zmm0
        vmovdqu16       (%esp), %zmm0
        vmovdqu32       (%esp), %zmm0
        vmovdqu64       (%esp), %zmm0

        vandnpd %xmm0, %xmm1, %xmm2{%k1}{z}
        vandnpd (%eax), %xmm3, %xmm4{%k1}{z}
        vandnpd 0x42(%ecx), %xmm5, %xmm6{%k1}{z}
        vandnpd %ymm0, %ymm1, %ymm2{%k1}
        vandnpd (%ebx), %ymm3, %ymm4{%k1}
        vandnpd 0x42(%edx), %ymm5, %ymm6{%k1}
        vandnpd %zmm0, %zmm1, %zmm2
        vandnpd (%ebx), %zmm3, %zmm4
        vandnpd 0x42(%edx), %zmm5, %zmm6

        vandnps %xmm0, %xmm1, %xmm2{%k1}{z}
        vandnps (%eax), %xmm3, %xmm4{%k1}{z}
        vandnps 0x42(%ecx), %xmm5, %xmm6{%k1}{z}
        vandnps %ymm0, %ymm1, %ymm2{%k1}
        vandnps (%ebx), %ymm3, %ymm4{%k1}
        vandnps 0x42(%edx), %ymm5, %ymm6{%k1}
        vandnps %zmm0, %zmm1, %zmm2
        vandnps (%ebx), %zmm3, %zmm4
        vandnps 0x42(%edx), %zmm5, %zmm6

        vandpd  %xmm0, %xmm1, %xmm2{%k1}{z}
        vandpd  (%eax), %xmm3, %xmm4{%k1}{z}
        vandpd  0x42(%ecx), %xmm5, %xmm6{%k1}{z}
        vandpd  %ymm0, %ymm1, %ymm2{%k1}
        vandpd  (%ebx), %ymm3, %ymm4{%k1}
        vandpd  0x42(%edx), %ymm5, %ymm6{%k1}
        vandpd  %zmm0, %zmm1, %zmm2
        vandpd  (%ebx), %zmm3, %zmm4
        vandpd  0x42(%edx), %zmm5, %zmm6

        vandps  %xmm0, %xmm1, %xmm2{%k1}{z}
        vandps  (%eax), %xmm3, %xmm4{%k1}{z}
        vandps  0x42(%ecx), %xmm5, %xmm6{%k1}{z}
        vandps  %ymm0, %ymm1, %ymm2{%k1}
        vandps  (%ebx), %ymm3, %ymm4{%k1}
        vandps  0x42(%edx), %ymm5, %ymm6{%k1}
        vandps  %zmm0, %zmm1, %zmm2
        vandps  (%ebx), %zmm3, %zmm4
        vandps  0x42(%edx), %zmm5, %zmm6

        vpandd  %xmm0, %xmm1, %xmm2
        vpandd  (%eax), %xmm3, %xmm4
        vpandd  0x42(%ecx), %xmm5, %xmm6
        vpandd  %ymm0, %ymm1, %ymm2
        vpandd  (%ebx), %ymm3, %ymm4
        vpandd  0x42(%edx), %ymm5, %ymm6
        vpandd  %zmm0, %zmm1, %zmm2
        vpandd  (%ebx), %zmm3, %zmm4
        vpandd  0x42(%edx), %zmm5, %zmm6

        vpandq  %xmm0, %xmm1, %xmm2
        vpandq  (%eax), %xmm3, %xmm4
        vpandq  0x42(%ecx), %xmm5, %xmm6
        vpandq  %ymm0, %ymm1, %ymm2
        vpandq  (%ebx), %ymm3, %ymm4
        vpandq  0x42(%edx), %ymm5, %ymm6
        vpandq  %zmm0, %zmm1, %zmm2
        vpandq  (%ebx), %zmm3, %zmm4
        vpandq  0x42(%edx), %zmm5, %zmm6

        vpandnd %xmm0, %xmm1, %xmm2
        vpandnd (%eax), %xmm3, %xmm4
        vpandnd 0x42(%ecx), %xmm5, %xmm6
        vpandnd %ymm0, %ymm1, %ymm2
        vpandnd (%ebx), %ymm3, %ymm4
        vpandnd 0x42(%edx), %ymm5, %ymm6
        vpandnd %zmm0, %zmm1, %zmm2
        vpandnd (%ebx), %zmm3, %zmm4
        vpandnd 0x42(%edx), %zmm5, %zmm6

        vpandnq %xmm0, %xmm1, %xmm2
        vpandnq (%eax), %xmm3, %xmm4
        vpandnq 0x42(%ecx), %xmm5, %xmm6
        vpandnq %ymm0, %ymm1, %ymm2
        vpandnq (%ebx), %ymm3, %ymm4
        vpandnq 0x42(%edx), %ymm5, %ymm6
        vpandnq %zmm0, %zmm1, %zmm2
        vpandnq (%ebx), %zmm3, %zmm4
        vpandnq 0x42(%edx), %zmm5, %zmm6

        vorpd   %xmm0, %xmm1, %xmm2{%k1}{z}
        vorpd   (%eax), %xmm3, %xmm4{%k1}{z}
        vorpd   0x42(%ecx), %xmm5, %xmm6{%k1}{z}
        vorpd   %ymm0, %ymm1, %ymm2{%k1}
        vorpd   (%ebx), %ymm3, %ymm4{%k1}
        vorpd   0x42(%edx), %ymm5, %ymm6{%k1}
        vorpd   %zmm0, %zmm1, %zmm2
        vorpd   (%eax), %zmm3, %zmm4
        vorpd   0x42(%ecx), %zmm5, %zmm6

        vorps   %xmm0, %xmm1, %xmm2{%k1}{z}
        vorps   (%eax), %xmm3, %xmm4{%k1}{z}
        vorps   0x42(%ecx), %xmm5, %xmm6{%k1}{z}
        vorps   %ymm0, %ymm1, %ymm2{%k1}
        vorps   (%ebx), %ymm3, %ymm4{%k1}
        vorps   0x42(%edx), %ymm5, %ymm6{%k1}
        vorps   %zmm0, %zmm1, %zmm2
        vorps   (%eax), %zmm3, %zmm4
        vorps   0x42(%ecx), %zmm5, %zmm6

        vpord   %xmm0, %xmm1, %xmm2
        vpord   (%eax), %xmm3, %xmm4
        vpord   0x42(%ecx), %xmm5, %xmm6
        vpord   %ymm0, %ymm1, %ymm2
        vpord   (%ebx), %ymm3, %ymm4
        vpord   0x42(%edx), %ymm5, %ymm6
        vpord   %zmm0, %zmm1, %zmm2
        vpord   (%eax), %zmm3, %zmm4
        vpord   0x42(%ecx), %zmm5, %zmm6

        vporq   %xmm0, %xmm1, %xmm2
        vporq   (%eax), %xmm3, %xmm4
        vporq   0x42(%ecx), %xmm5, %xmm6
        vporq   %ymm0, %ymm1, %ymm2
        vporq   (%ebx), %ymm3, %ymm4
        vporq   0x42(%edx), %ymm5, %ymm6
        vporq   %zmm0, %zmm1, %zmm2
        vporq   (%eax), %zmm3, %zmm4
        vporq   0x42(%ecx), %zmm5, %zmm6

        vpxord  %xmm0, %xmm1, %xmm2
        vpxord  (%eax), %xmm3, %xmm4
        vpxord  0x42(%ecx), %xmm5, %xmm6
        vpxord  %ymm0, %ymm1, %ymm2
        vpxord  (%ebx), %ymm3, %ymm4
        vpxord  0x42(%edx), %ymm5, %ymm6
        vpxord  %zmm0, %zmm1, %zmm2
        vpxord  (%eax), %zmm3, %zmm4
        vpxord  0x42(%ecx), %zmm5, %zmm6

        vpxorq  %xmm0, %xmm1, %xmm2
        vpxorq  (%eax), %xmm3, %xmm4
        vpxorq  0x42(%ecx), %xmm5, %xmm6
        vpxorq  %ymm0, %ymm1, %ymm2
        vpxorq  (%ebx), %ymm3, %ymm4
        vpxorq  0x42(%edx), %ymm5, %ymm6
        vpxorq  %zmm0, %zmm1, %zmm2
        vpxorq  (%eax), %zmm3, %zmm4
        vpxorq  0x42(%ecx), %zmm5, %zmm6

        vxorpd  %xmm0, %xmm1, %xmm2{%k1}{z}
        vxorpd  (%eax), %xmm3, %xmm4{%k1}{z}
        vxorpd  0x42(%ecx), %xmm5, %xmm6{%k1}{z}
        vxorpd  %ymm0, %ymm1, %ymm2{%k1}
        vxorpd  (%ebx), %ymm3, %ymm4{%k1}
        vxorpd  0x42(%edx), %ymm5, %ymm6{%k1}
        vxorpd  %zmm0, %zmm1, %zmm2
        vxorpd  (%ebx), %zmm3, %zmm4
        vxorpd  0x42(%edx), %zmm5, %zmm6

        vxorps  %xmm0, %xmm1, %xmm2{%k1}{z}
        vxorps  (%eax), %xmm3, %xmm4{%k1}{z}
        vxorps  0x42(%ecx), %xmm5, %xmm6{%k1}{z}
        vxorps  %ymm0, %ymm1, %ymm2{%k1}
        vxorps  (%ebx), %ymm3, %ymm4{%k1}
        vxorps  0x42(%edx), %ymm5, %ymm6{%k1}
        vxorps  %zmm0, %zmm1, %zmm2
        vxorps  (%ebx), %zmm3, %zmm4
        vxorps  0x42(%edx), %zmm5, %zmm6
.size libdis_test, [.-libdis_test]