xref: /freebsd-src/sys/contrib/openzfs/module/icp/asm-x86_64/blake3/blake3_sse41.S (revision 15f0b8c309dea1dcb14d3e374686576ff68ac43f)
11f1e2261SMartin Matuska/*
21f1e2261SMartin Matuska * CDDL HEADER START
31f1e2261SMartin Matuska *
41f1e2261SMartin Matuska * The contents of this file are subject to the terms of the
51f1e2261SMartin Matuska * Common Development and Distribution License (the "License").
61f1e2261SMartin Matuska * You may not use this file except in compliance with the License.
71f1e2261SMartin Matuska *
81f1e2261SMartin Matuska * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9271171e0SMartin Matuska * or https://opensource.org/licenses/CDDL-1.0.
101f1e2261SMartin Matuska * See the License for the specific language governing permissions
111f1e2261SMartin Matuska * and limitations under the License.
121f1e2261SMartin Matuska *
131f1e2261SMartin Matuska * When distributing Covered Code, include this CDDL HEADER in each
141f1e2261SMartin Matuska * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
151f1e2261SMartin Matuska * If applicable, add the following below this CDDL HEADER, with the
161f1e2261SMartin Matuska * fields enclosed by brackets "[]" replaced with your own identifying
171f1e2261SMartin Matuska * information: Portions Copyright [yyyy] [name of copyright owner]
181f1e2261SMartin Matuska *
191f1e2261SMartin Matuska * CDDL HEADER END
201f1e2261SMartin Matuska */
211f1e2261SMartin Matuska
221f1e2261SMartin Matuska/*
231f1e2261SMartin Matuska * Based on BLAKE3 v1.3.1, https://github.com/BLAKE3-team/BLAKE3
241f1e2261SMartin Matuska * Copyright (c) 2019-2020 Samuel Neves
251f1e2261SMartin Matuska * Copyright (c) 2022 Tino Reichardt <milky-zfs@mcmilk.de>
261f1e2261SMartin Matuska */
271f1e2261SMartin Matuska
281f1e2261SMartin Matuska#if defined(HAVE_SSE4_1)
291f1e2261SMartin Matuska
301f1e2261SMartin Matuska#define _ASM
311f1e2261SMartin Matuska#include <sys/asm_linkage.h>
321f1e2261SMartin Matuska
331f1e2261SMartin Matuska.intel_syntax noprefix
341f1e2261SMartin Matuska
351f1e2261SMartin Matuska.text
361f1e2261SMartin Matuska
37*15f0b8c3SMartin MatuskaENTRY_ALIGN(zfs_blake3_hash_many_sse41, 64)
38dbd5678dSMartin Matuska        ENDBR
391f1e2261SMartin Matuska        push    r15
401f1e2261SMartin Matuska        push    r14
411f1e2261SMartin Matuska        push    r13
421f1e2261SMartin Matuska        push    r12
431f1e2261SMartin Matuska        push    rbx
441f1e2261SMartin Matuska        push    rbp
451f1e2261SMartin Matuska        mov     rbp, rsp
461f1e2261SMartin Matuska        sub     rsp, 360
471f1e2261SMartin Matuska        and     rsp, 0xFFFFFFFFFFFFFFC0
481f1e2261SMartin Matuska        neg     r9d
491f1e2261SMartin Matuska        movd    xmm0, r9d
501f1e2261SMartin Matuska        pshufd  xmm0, xmm0, 0x00
511f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x130], xmm0
521f1e2261SMartin Matuska        movdqa  xmm1, xmm0
531f1e2261SMartin Matuska        pand    xmm1, xmmword ptr [ADD0+rip]
541f1e2261SMartin Matuska        pand    xmm0, xmmword ptr [ADD1+rip]
551f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x150], xmm0
561f1e2261SMartin Matuska        movd    xmm0, r8d
571f1e2261SMartin Matuska        pshufd  xmm0, xmm0, 0x00
581f1e2261SMartin Matuska        paddd   xmm0, xmm1
591f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x110], xmm0
601f1e2261SMartin Matuska        pxor    xmm0, xmmword ptr [CMP_MSB_MASK+rip]
611f1e2261SMartin Matuska        pxor    xmm1, xmmword ptr [CMP_MSB_MASK+rip]
621f1e2261SMartin Matuska        pcmpgtd xmm1, xmm0
631f1e2261SMartin Matuska        shr     r8, 32
641f1e2261SMartin Matuska        movd    xmm2, r8d
651f1e2261SMartin Matuska        pshufd  xmm2, xmm2, 0x00
661f1e2261SMartin Matuska        psubd   xmm2, xmm1
671f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x120], xmm2
681f1e2261SMartin Matuska        mov     rbx, qword ptr [rbp+0x50]
691f1e2261SMartin Matuska        mov     r15, rdx
701f1e2261SMartin Matuska        shl     r15, 6
711f1e2261SMartin Matuska        movzx   r13d, byte ptr [rbp+0x38]
721f1e2261SMartin Matuska        movzx   r12d, byte ptr [rbp+0x48]
731f1e2261SMartin Matuska        cmp     rsi, 4
741f1e2261SMartin Matuska        jc      3f
751f1e2261SMartin Matuska2:
761f1e2261SMartin Matuska        movdqu  xmm3, xmmword ptr [rcx]
771f1e2261SMartin Matuska        pshufd  xmm0, xmm3, 0x00
781f1e2261SMartin Matuska        pshufd  xmm1, xmm3, 0x55
791f1e2261SMartin Matuska        pshufd  xmm2, xmm3, 0xAA
801f1e2261SMartin Matuska        pshufd  xmm3, xmm3, 0xFF
811f1e2261SMartin Matuska        movdqu  xmm7, xmmword ptr [rcx+0x10]
821f1e2261SMartin Matuska        pshufd  xmm4, xmm7, 0x00
831f1e2261SMartin Matuska        pshufd  xmm5, xmm7, 0x55
841f1e2261SMartin Matuska        pshufd  xmm6, xmm7, 0xAA
851f1e2261SMartin Matuska        pshufd  xmm7, xmm7, 0xFF
861f1e2261SMartin Matuska        mov     r8, qword ptr [rdi]
871f1e2261SMartin Matuska        mov     r9, qword ptr [rdi+0x8]
881f1e2261SMartin Matuska        mov     r10, qword ptr [rdi+0x10]
891f1e2261SMartin Matuska        mov     r11, qword ptr [rdi+0x18]
901f1e2261SMartin Matuska        movzx   eax, byte ptr [rbp+0x40]
911f1e2261SMartin Matuska        or      eax, r13d
921f1e2261SMartin Matuska        xor     edx, edx
931f1e2261SMartin Matuska9:
941f1e2261SMartin Matuska        mov     r14d, eax
951f1e2261SMartin Matuska        or      eax, r12d
961f1e2261SMartin Matuska        add     rdx, 64
971f1e2261SMartin Matuska        cmp     rdx, r15
981f1e2261SMartin Matuska        cmovne  eax, r14d
991f1e2261SMartin Matuska        movdqu  xmm8, xmmword ptr [r8+rdx-0x40]
1001f1e2261SMartin Matuska        movdqu  xmm9, xmmword ptr [r9+rdx-0x40]
1011f1e2261SMartin Matuska        movdqu  xmm10, xmmword ptr [r10+rdx-0x40]
1021f1e2261SMartin Matuska        movdqu  xmm11, xmmword ptr [r11+rdx-0x40]
1031f1e2261SMartin Matuska        movdqa  xmm12, xmm8
1041f1e2261SMartin Matuska        punpckldq xmm8, xmm9
1051f1e2261SMartin Matuska        punpckhdq xmm12, xmm9
1061f1e2261SMartin Matuska        movdqa  xmm14, xmm10
1071f1e2261SMartin Matuska        punpckldq xmm10, xmm11
1081f1e2261SMartin Matuska        punpckhdq xmm14, xmm11
1091f1e2261SMartin Matuska        movdqa  xmm9, xmm8
1101f1e2261SMartin Matuska        punpcklqdq xmm8, xmm10
1111f1e2261SMartin Matuska        punpckhqdq xmm9, xmm10
1121f1e2261SMartin Matuska        movdqa  xmm13, xmm12
1131f1e2261SMartin Matuska        punpcklqdq xmm12, xmm14
1141f1e2261SMartin Matuska        punpckhqdq xmm13, xmm14
1151f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp], xmm8
1161f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x10], xmm9
1171f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x20], xmm12
1181f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x30], xmm13
1191f1e2261SMartin Matuska        movdqu  xmm8, xmmword ptr [r8+rdx-0x30]
1201f1e2261SMartin Matuska        movdqu  xmm9, xmmword ptr [r9+rdx-0x30]
1211f1e2261SMartin Matuska        movdqu  xmm10, xmmword ptr [r10+rdx-0x30]
1221f1e2261SMartin Matuska        movdqu  xmm11, xmmword ptr [r11+rdx-0x30]
1231f1e2261SMartin Matuska        movdqa  xmm12, xmm8
1241f1e2261SMartin Matuska        punpckldq xmm8, xmm9
1251f1e2261SMartin Matuska        punpckhdq xmm12, xmm9
1261f1e2261SMartin Matuska        movdqa  xmm14, xmm10
1271f1e2261SMartin Matuska        punpckldq xmm10, xmm11
1281f1e2261SMartin Matuska        punpckhdq xmm14, xmm11
1291f1e2261SMartin Matuska        movdqa  xmm9, xmm8
1301f1e2261SMartin Matuska        punpcklqdq xmm8, xmm10
1311f1e2261SMartin Matuska        punpckhqdq xmm9, xmm10
1321f1e2261SMartin Matuska        movdqa  xmm13, xmm12
1331f1e2261SMartin Matuska        punpcklqdq xmm12, xmm14
1341f1e2261SMartin Matuska        punpckhqdq xmm13, xmm14
1351f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x40], xmm8
1361f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x50], xmm9
1371f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x60], xmm12
1381f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x70], xmm13
1391f1e2261SMartin Matuska        movdqu  xmm8, xmmword ptr [r8+rdx-0x20]
1401f1e2261SMartin Matuska        movdqu  xmm9, xmmword ptr [r9+rdx-0x20]
1411f1e2261SMartin Matuska        movdqu  xmm10, xmmword ptr [r10+rdx-0x20]
1421f1e2261SMartin Matuska        movdqu  xmm11, xmmword ptr [r11+rdx-0x20]
1431f1e2261SMartin Matuska        movdqa  xmm12, xmm8
1441f1e2261SMartin Matuska        punpckldq xmm8, xmm9
1451f1e2261SMartin Matuska        punpckhdq xmm12, xmm9
1461f1e2261SMartin Matuska        movdqa  xmm14, xmm10
1471f1e2261SMartin Matuska        punpckldq xmm10, xmm11
1481f1e2261SMartin Matuska        punpckhdq xmm14, xmm11
1491f1e2261SMartin Matuska        movdqa  xmm9, xmm8
1501f1e2261SMartin Matuska        punpcklqdq xmm8, xmm10
1511f1e2261SMartin Matuska        punpckhqdq xmm9, xmm10
1521f1e2261SMartin Matuska        movdqa  xmm13, xmm12
1531f1e2261SMartin Matuska        punpcklqdq xmm12, xmm14
1541f1e2261SMartin Matuska        punpckhqdq xmm13, xmm14
1551f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x80], xmm8
1561f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x90], xmm9
1571f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0xA0], xmm12
1581f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0xB0], xmm13
1591f1e2261SMartin Matuska        movdqu  xmm8, xmmword ptr [r8+rdx-0x10]
1601f1e2261SMartin Matuska        movdqu  xmm9, xmmword ptr [r9+rdx-0x10]
1611f1e2261SMartin Matuska        movdqu  xmm10, xmmword ptr [r10+rdx-0x10]
1621f1e2261SMartin Matuska        movdqu  xmm11, xmmword ptr [r11+rdx-0x10]
1631f1e2261SMartin Matuska        movdqa  xmm12, xmm8
1641f1e2261SMartin Matuska        punpckldq xmm8, xmm9
1651f1e2261SMartin Matuska        punpckhdq xmm12, xmm9
1661f1e2261SMartin Matuska        movdqa  xmm14, xmm10
1671f1e2261SMartin Matuska        punpckldq xmm10, xmm11
1681f1e2261SMartin Matuska        punpckhdq xmm14, xmm11
1691f1e2261SMartin Matuska        movdqa  xmm9, xmm8
1701f1e2261SMartin Matuska        punpcklqdq xmm8, xmm10
1711f1e2261SMartin Matuska        punpckhqdq xmm9, xmm10
1721f1e2261SMartin Matuska        movdqa  xmm13, xmm12
1731f1e2261SMartin Matuska        punpcklqdq xmm12, xmm14
1741f1e2261SMartin Matuska        punpckhqdq xmm13, xmm14
1751f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0xC0], xmm8
1761f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0xD0], xmm9
1771f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0xE0], xmm12
1781f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0xF0], xmm13
1791f1e2261SMartin Matuska        movdqa  xmm9, xmmword ptr [BLAKE3_IV_1+rip]
1801f1e2261SMartin Matuska        movdqa  xmm10, xmmword ptr [BLAKE3_IV_2+rip]
1811f1e2261SMartin Matuska        movdqa  xmm11, xmmword ptr [BLAKE3_IV_3+rip]
1821f1e2261SMartin Matuska        movdqa  xmm12, xmmword ptr [rsp+0x110]
1831f1e2261SMartin Matuska        movdqa  xmm13, xmmword ptr [rsp+0x120]
1841f1e2261SMartin Matuska        movdqa  xmm14, xmmword ptr [BLAKE3_BLOCK_LEN+rip]
1851f1e2261SMartin Matuska        movd    xmm15, eax
1861f1e2261SMartin Matuska        pshufd  xmm15, xmm15, 0x00
1871f1e2261SMartin Matuska        prefetcht0 [r8+rdx+0x80]
1881f1e2261SMartin Matuska        prefetcht0 [r9+rdx+0x80]
1891f1e2261SMartin Matuska        prefetcht0 [r10+rdx+0x80]
1901f1e2261SMartin Matuska        prefetcht0 [r11+rdx+0x80]
1911f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp]
1921f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0x20]
1931f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0x40]
1941f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0x60]
1951f1e2261SMartin Matuska        paddd   xmm0, xmm4
1961f1e2261SMartin Matuska        paddd   xmm1, xmm5
1971f1e2261SMartin Matuska        paddd   xmm2, xmm6
1981f1e2261SMartin Matuska        paddd   xmm3, xmm7
1991f1e2261SMartin Matuska        pxor    xmm12, xmm0
2001f1e2261SMartin Matuska        pxor    xmm13, xmm1
2011f1e2261SMartin Matuska        pxor    xmm14, xmm2
2021f1e2261SMartin Matuska        pxor    xmm15, xmm3
2031f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT16+rip]
2041f1e2261SMartin Matuska        pshufb  xmm12, xmm8
2051f1e2261SMartin Matuska        pshufb  xmm13, xmm8
2061f1e2261SMartin Matuska        pshufb  xmm14, xmm8
2071f1e2261SMartin Matuska        pshufb  xmm15, xmm8
2081f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [BLAKE3_IV_0+rip]
2091f1e2261SMartin Matuska        paddd   xmm8, xmm12
2101f1e2261SMartin Matuska        paddd   xmm9, xmm13
2111f1e2261SMartin Matuska        paddd   xmm10, xmm14
2121f1e2261SMartin Matuska        paddd   xmm11, xmm15
2131f1e2261SMartin Matuska        pxor    xmm4, xmm8
2141f1e2261SMartin Matuska        pxor    xmm5, xmm9
2151f1e2261SMartin Matuska        pxor    xmm6, xmm10
2161f1e2261SMartin Matuska        pxor    xmm7, xmm11
2171f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
2181f1e2261SMartin Matuska        movdqa  xmm8, xmm4
2191f1e2261SMartin Matuska        psrld   xmm8, 12
2201f1e2261SMartin Matuska        pslld   xmm4, 20
2211f1e2261SMartin Matuska        por     xmm4, xmm8
2221f1e2261SMartin Matuska        movdqa  xmm8, xmm5
2231f1e2261SMartin Matuska        psrld   xmm8, 12
2241f1e2261SMartin Matuska        pslld   xmm5, 20
2251f1e2261SMartin Matuska        por     xmm5, xmm8
2261f1e2261SMartin Matuska        movdqa  xmm8, xmm6
2271f1e2261SMartin Matuska        psrld   xmm8, 12
2281f1e2261SMartin Matuska        pslld   xmm6, 20
2291f1e2261SMartin Matuska        por     xmm6, xmm8
2301f1e2261SMartin Matuska        movdqa  xmm8, xmm7
2311f1e2261SMartin Matuska        psrld   xmm8, 12
2321f1e2261SMartin Matuska        pslld   xmm7, 20
2331f1e2261SMartin Matuska        por     xmm7, xmm8
2341f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0x10]
2351f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0x30]
2361f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0x50]
2371f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0x70]
2381f1e2261SMartin Matuska        paddd   xmm0, xmm4
2391f1e2261SMartin Matuska        paddd   xmm1, xmm5
2401f1e2261SMartin Matuska        paddd   xmm2, xmm6
2411f1e2261SMartin Matuska        paddd   xmm3, xmm7
2421f1e2261SMartin Matuska        pxor    xmm12, xmm0
2431f1e2261SMartin Matuska        pxor    xmm13, xmm1
2441f1e2261SMartin Matuska        pxor    xmm14, xmm2
2451f1e2261SMartin Matuska        pxor    xmm15, xmm3
2461f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT8+rip]
2471f1e2261SMartin Matuska        pshufb  xmm12, xmm8
2481f1e2261SMartin Matuska        pshufb  xmm13, xmm8
2491f1e2261SMartin Matuska        pshufb  xmm14, xmm8
2501f1e2261SMartin Matuska        pshufb  xmm15, xmm8
2511f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
2521f1e2261SMartin Matuska        paddd   xmm8, xmm12
2531f1e2261SMartin Matuska        paddd   xmm9, xmm13
2541f1e2261SMartin Matuska        paddd   xmm10, xmm14
2551f1e2261SMartin Matuska        paddd   xmm11, xmm15
2561f1e2261SMartin Matuska        pxor    xmm4, xmm8
2571f1e2261SMartin Matuska        pxor    xmm5, xmm9
2581f1e2261SMartin Matuska        pxor    xmm6, xmm10
2591f1e2261SMartin Matuska        pxor    xmm7, xmm11
2601f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
2611f1e2261SMartin Matuska        movdqa  xmm8, xmm4
2621f1e2261SMartin Matuska        psrld   xmm8, 7
2631f1e2261SMartin Matuska        pslld   xmm4, 25
2641f1e2261SMartin Matuska        por     xmm4, xmm8
2651f1e2261SMartin Matuska        movdqa  xmm8, xmm5
2661f1e2261SMartin Matuska        psrld   xmm8, 7
2671f1e2261SMartin Matuska        pslld   xmm5, 25
2681f1e2261SMartin Matuska        por     xmm5, xmm8
2691f1e2261SMartin Matuska        movdqa  xmm8, xmm6
2701f1e2261SMartin Matuska        psrld   xmm8, 7
2711f1e2261SMartin Matuska        pslld   xmm6, 25
2721f1e2261SMartin Matuska        por     xmm6, xmm8
2731f1e2261SMartin Matuska        movdqa  xmm8, xmm7
2741f1e2261SMartin Matuska        psrld   xmm8, 7
2751f1e2261SMartin Matuska        pslld   xmm7, 25
2761f1e2261SMartin Matuska        por     xmm7, xmm8
2771f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0x80]
2781f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0xA0]
2791f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0xC0]
2801f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0xE0]
2811f1e2261SMartin Matuska        paddd   xmm0, xmm5
2821f1e2261SMartin Matuska        paddd   xmm1, xmm6
2831f1e2261SMartin Matuska        paddd   xmm2, xmm7
2841f1e2261SMartin Matuska        paddd   xmm3, xmm4
2851f1e2261SMartin Matuska        pxor    xmm15, xmm0
2861f1e2261SMartin Matuska        pxor    xmm12, xmm1
2871f1e2261SMartin Matuska        pxor    xmm13, xmm2
2881f1e2261SMartin Matuska        pxor    xmm14, xmm3
2891f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT16+rip]
2901f1e2261SMartin Matuska        pshufb  xmm15, xmm8
2911f1e2261SMartin Matuska        pshufb  xmm12, xmm8
2921f1e2261SMartin Matuska        pshufb  xmm13, xmm8
2931f1e2261SMartin Matuska        pshufb  xmm14, xmm8
2941f1e2261SMartin Matuska        paddd   xmm10, xmm15
2951f1e2261SMartin Matuska        paddd   xmm11, xmm12
2961f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
2971f1e2261SMartin Matuska        paddd   xmm8, xmm13
2981f1e2261SMartin Matuska        paddd   xmm9, xmm14
2991f1e2261SMartin Matuska        pxor    xmm5, xmm10
3001f1e2261SMartin Matuska        pxor    xmm6, xmm11
3011f1e2261SMartin Matuska        pxor    xmm7, xmm8
3021f1e2261SMartin Matuska        pxor    xmm4, xmm9
3031f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
3041f1e2261SMartin Matuska        movdqa  xmm8, xmm5
3051f1e2261SMartin Matuska        psrld   xmm8, 12
3061f1e2261SMartin Matuska        pslld   xmm5, 20
3071f1e2261SMartin Matuska        por     xmm5, xmm8
3081f1e2261SMartin Matuska        movdqa  xmm8, xmm6
3091f1e2261SMartin Matuska        psrld   xmm8, 12
3101f1e2261SMartin Matuska        pslld   xmm6, 20
3111f1e2261SMartin Matuska        por     xmm6, xmm8
3121f1e2261SMartin Matuska        movdqa  xmm8, xmm7
3131f1e2261SMartin Matuska        psrld   xmm8, 12
3141f1e2261SMartin Matuska        pslld   xmm7, 20
3151f1e2261SMartin Matuska        por     xmm7, xmm8
3161f1e2261SMartin Matuska        movdqa  xmm8, xmm4
3171f1e2261SMartin Matuska        psrld   xmm8, 12
3181f1e2261SMartin Matuska        pslld   xmm4, 20
3191f1e2261SMartin Matuska        por     xmm4, xmm8
3201f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0x90]
3211f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0xB0]
3221f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0xD0]
3231f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0xF0]
3241f1e2261SMartin Matuska        paddd   xmm0, xmm5
3251f1e2261SMartin Matuska        paddd   xmm1, xmm6
3261f1e2261SMartin Matuska        paddd   xmm2, xmm7
3271f1e2261SMartin Matuska        paddd   xmm3, xmm4
3281f1e2261SMartin Matuska        pxor    xmm15, xmm0
3291f1e2261SMartin Matuska        pxor    xmm12, xmm1
3301f1e2261SMartin Matuska        pxor    xmm13, xmm2
3311f1e2261SMartin Matuska        pxor    xmm14, xmm3
3321f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT8+rip]
3331f1e2261SMartin Matuska        pshufb  xmm15, xmm8
3341f1e2261SMartin Matuska        pshufb  xmm12, xmm8
3351f1e2261SMartin Matuska        pshufb  xmm13, xmm8
3361f1e2261SMartin Matuska        pshufb  xmm14, xmm8
3371f1e2261SMartin Matuska        paddd   xmm10, xmm15
3381f1e2261SMartin Matuska        paddd   xmm11, xmm12
3391f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
3401f1e2261SMartin Matuska        paddd   xmm8, xmm13
3411f1e2261SMartin Matuska        paddd   xmm9, xmm14
3421f1e2261SMartin Matuska        pxor    xmm5, xmm10
3431f1e2261SMartin Matuska        pxor    xmm6, xmm11
3441f1e2261SMartin Matuska        pxor    xmm7, xmm8
3451f1e2261SMartin Matuska        pxor    xmm4, xmm9
3461f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
3471f1e2261SMartin Matuska        movdqa  xmm8, xmm5
3481f1e2261SMartin Matuska        psrld   xmm8, 7
3491f1e2261SMartin Matuska        pslld   xmm5, 25
3501f1e2261SMartin Matuska        por     xmm5, xmm8
3511f1e2261SMartin Matuska        movdqa  xmm8, xmm6
3521f1e2261SMartin Matuska        psrld   xmm8, 7
3531f1e2261SMartin Matuska        pslld   xmm6, 25
3541f1e2261SMartin Matuska        por     xmm6, xmm8
3551f1e2261SMartin Matuska        movdqa  xmm8, xmm7
3561f1e2261SMartin Matuska        psrld   xmm8, 7
3571f1e2261SMartin Matuska        pslld   xmm7, 25
3581f1e2261SMartin Matuska        por     xmm7, xmm8
3591f1e2261SMartin Matuska        movdqa  xmm8, xmm4
3601f1e2261SMartin Matuska        psrld   xmm8, 7
3611f1e2261SMartin Matuska        pslld   xmm4, 25
3621f1e2261SMartin Matuska        por     xmm4, xmm8
3631f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0x20]
3641f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0x30]
3651f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0x70]
3661f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0x40]
3671f1e2261SMartin Matuska        paddd   xmm0, xmm4
3681f1e2261SMartin Matuska        paddd   xmm1, xmm5
3691f1e2261SMartin Matuska        paddd   xmm2, xmm6
3701f1e2261SMartin Matuska        paddd   xmm3, xmm7
3711f1e2261SMartin Matuska        pxor    xmm12, xmm0
3721f1e2261SMartin Matuska        pxor    xmm13, xmm1
3731f1e2261SMartin Matuska        pxor    xmm14, xmm2
3741f1e2261SMartin Matuska        pxor    xmm15, xmm3
3751f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT16+rip]
3761f1e2261SMartin Matuska        pshufb  xmm12, xmm8
3771f1e2261SMartin Matuska        pshufb  xmm13, xmm8
3781f1e2261SMartin Matuska        pshufb  xmm14, xmm8
3791f1e2261SMartin Matuska        pshufb  xmm15, xmm8
3801f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
3811f1e2261SMartin Matuska        paddd   xmm8, xmm12
3821f1e2261SMartin Matuska        paddd   xmm9, xmm13
3831f1e2261SMartin Matuska        paddd   xmm10, xmm14
3841f1e2261SMartin Matuska        paddd   xmm11, xmm15
3851f1e2261SMartin Matuska        pxor    xmm4, xmm8
3861f1e2261SMartin Matuska        pxor    xmm5, xmm9
3871f1e2261SMartin Matuska        pxor    xmm6, xmm10
3881f1e2261SMartin Matuska        pxor    xmm7, xmm11
3891f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
3901f1e2261SMartin Matuska        movdqa  xmm8, xmm4
3911f1e2261SMartin Matuska        psrld   xmm8, 12
3921f1e2261SMartin Matuska        pslld   xmm4, 20
3931f1e2261SMartin Matuska        por     xmm4, xmm8
3941f1e2261SMartin Matuska        movdqa  xmm8, xmm5
3951f1e2261SMartin Matuska        psrld   xmm8, 12
3961f1e2261SMartin Matuska        pslld   xmm5, 20
3971f1e2261SMartin Matuska        por     xmm5, xmm8
3981f1e2261SMartin Matuska        movdqa  xmm8, xmm6
3991f1e2261SMartin Matuska        psrld   xmm8, 12
4001f1e2261SMartin Matuska        pslld   xmm6, 20
4011f1e2261SMartin Matuska        por     xmm6, xmm8
4021f1e2261SMartin Matuska        movdqa  xmm8, xmm7
4031f1e2261SMartin Matuska        psrld   xmm8, 12
4041f1e2261SMartin Matuska        pslld   xmm7, 20
4051f1e2261SMartin Matuska        por     xmm7, xmm8
4061f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0x60]
4071f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0xA0]
4081f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp]
4091f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0xD0]
4101f1e2261SMartin Matuska        paddd   xmm0, xmm4
4111f1e2261SMartin Matuska        paddd   xmm1, xmm5
4121f1e2261SMartin Matuska        paddd   xmm2, xmm6
4131f1e2261SMartin Matuska        paddd   xmm3, xmm7
4141f1e2261SMartin Matuska        pxor    xmm12, xmm0
4151f1e2261SMartin Matuska        pxor    xmm13, xmm1
4161f1e2261SMartin Matuska        pxor    xmm14, xmm2
4171f1e2261SMartin Matuska        pxor    xmm15, xmm3
4181f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT8+rip]
4191f1e2261SMartin Matuska        pshufb  xmm12, xmm8
4201f1e2261SMartin Matuska        pshufb  xmm13, xmm8
4211f1e2261SMartin Matuska        pshufb  xmm14, xmm8
4221f1e2261SMartin Matuska        pshufb  xmm15, xmm8
4231f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
4241f1e2261SMartin Matuska        paddd   xmm8, xmm12
4251f1e2261SMartin Matuska        paddd   xmm9, xmm13
4261f1e2261SMartin Matuska        paddd   xmm10, xmm14
4271f1e2261SMartin Matuska        paddd   xmm11, xmm15
4281f1e2261SMartin Matuska        pxor    xmm4, xmm8
4291f1e2261SMartin Matuska        pxor    xmm5, xmm9
4301f1e2261SMartin Matuska        pxor    xmm6, xmm10
4311f1e2261SMartin Matuska        pxor    xmm7, xmm11
4321f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
4331f1e2261SMartin Matuska        movdqa  xmm8, xmm4
4341f1e2261SMartin Matuska        psrld   xmm8, 7
4351f1e2261SMartin Matuska        pslld   xmm4, 25
4361f1e2261SMartin Matuska        por     xmm4, xmm8
4371f1e2261SMartin Matuska        movdqa  xmm8, xmm5
4381f1e2261SMartin Matuska        psrld   xmm8, 7
4391f1e2261SMartin Matuska        pslld   xmm5, 25
4401f1e2261SMartin Matuska        por     xmm5, xmm8
4411f1e2261SMartin Matuska        movdqa  xmm8, xmm6
4421f1e2261SMartin Matuska        psrld   xmm8, 7
4431f1e2261SMartin Matuska        pslld   xmm6, 25
4441f1e2261SMartin Matuska        por     xmm6, xmm8
4451f1e2261SMartin Matuska        movdqa  xmm8, xmm7
4461f1e2261SMartin Matuska        psrld   xmm8, 7
4471f1e2261SMartin Matuska        pslld   xmm7, 25
4481f1e2261SMartin Matuska        por     xmm7, xmm8
4491f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0x10]
4501f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0xC0]
4511f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0x90]
4521f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0xF0]
4531f1e2261SMartin Matuska        paddd   xmm0, xmm5
4541f1e2261SMartin Matuska        paddd   xmm1, xmm6
4551f1e2261SMartin Matuska        paddd   xmm2, xmm7
4561f1e2261SMartin Matuska        paddd   xmm3, xmm4
4571f1e2261SMartin Matuska        pxor    xmm15, xmm0
4581f1e2261SMartin Matuska        pxor    xmm12, xmm1
4591f1e2261SMartin Matuska        pxor    xmm13, xmm2
4601f1e2261SMartin Matuska        pxor    xmm14, xmm3
4611f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT16+rip]
4621f1e2261SMartin Matuska        pshufb  xmm15, xmm8
4631f1e2261SMartin Matuska        pshufb  xmm12, xmm8
4641f1e2261SMartin Matuska        pshufb  xmm13, xmm8
4651f1e2261SMartin Matuska        pshufb  xmm14, xmm8
4661f1e2261SMartin Matuska        paddd   xmm10, xmm15
4671f1e2261SMartin Matuska        paddd   xmm11, xmm12
4681f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
4691f1e2261SMartin Matuska        paddd   xmm8, xmm13
4701f1e2261SMartin Matuska        paddd   xmm9, xmm14
4711f1e2261SMartin Matuska        pxor    xmm5, xmm10
4721f1e2261SMartin Matuska        pxor    xmm6, xmm11
4731f1e2261SMartin Matuska        pxor    xmm7, xmm8
4741f1e2261SMartin Matuska        pxor    xmm4, xmm9
4751f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
4761f1e2261SMartin Matuska        movdqa  xmm8, xmm5
4771f1e2261SMartin Matuska        psrld   xmm8, 12
4781f1e2261SMartin Matuska        pslld   xmm5, 20
4791f1e2261SMartin Matuska        por     xmm5, xmm8
4801f1e2261SMartin Matuska        movdqa  xmm8, xmm6
4811f1e2261SMartin Matuska        psrld   xmm8, 12
4821f1e2261SMartin Matuska        pslld   xmm6, 20
4831f1e2261SMartin Matuska        por     xmm6, xmm8
4841f1e2261SMartin Matuska        movdqa  xmm8, xmm7
4851f1e2261SMartin Matuska        psrld   xmm8, 12
4861f1e2261SMartin Matuska        pslld   xmm7, 20
4871f1e2261SMartin Matuska        por     xmm7, xmm8
4881f1e2261SMartin Matuska        movdqa  xmm8, xmm4
4891f1e2261SMartin Matuska        psrld   xmm8, 12
4901f1e2261SMartin Matuska        pslld   xmm4, 20
4911f1e2261SMartin Matuska        por     xmm4, xmm8
4921f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0xB0]
4931f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0x50]
4941f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0xE0]
4951f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0x80]
4961f1e2261SMartin Matuska        paddd   xmm0, xmm5
4971f1e2261SMartin Matuska        paddd   xmm1, xmm6
4981f1e2261SMartin Matuska        paddd   xmm2, xmm7
4991f1e2261SMartin Matuska        paddd   xmm3, xmm4
5001f1e2261SMartin Matuska        pxor    xmm15, xmm0
5011f1e2261SMartin Matuska        pxor    xmm12, xmm1
5021f1e2261SMartin Matuska        pxor    xmm13, xmm2
5031f1e2261SMartin Matuska        pxor    xmm14, xmm3
5041f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT8+rip]
5051f1e2261SMartin Matuska        pshufb  xmm15, xmm8
5061f1e2261SMartin Matuska        pshufb  xmm12, xmm8
5071f1e2261SMartin Matuska        pshufb  xmm13, xmm8
5081f1e2261SMartin Matuska        pshufb  xmm14, xmm8
5091f1e2261SMartin Matuska        paddd   xmm10, xmm15
5101f1e2261SMartin Matuska        paddd   xmm11, xmm12
5111f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
5121f1e2261SMartin Matuska        paddd   xmm8, xmm13
5131f1e2261SMartin Matuska        paddd   xmm9, xmm14
5141f1e2261SMartin Matuska        pxor    xmm5, xmm10
5151f1e2261SMartin Matuska        pxor    xmm6, xmm11
5161f1e2261SMartin Matuska        pxor    xmm7, xmm8
5171f1e2261SMartin Matuska        pxor    xmm4, xmm9
5181f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
5191f1e2261SMartin Matuska        movdqa  xmm8, xmm5
5201f1e2261SMartin Matuska        psrld   xmm8, 7
5211f1e2261SMartin Matuska        pslld   xmm5, 25
5221f1e2261SMartin Matuska        por     xmm5, xmm8
5231f1e2261SMartin Matuska        movdqa  xmm8, xmm6
5241f1e2261SMartin Matuska        psrld   xmm8, 7
5251f1e2261SMartin Matuska        pslld   xmm6, 25
5261f1e2261SMartin Matuska        por     xmm6, xmm8
5271f1e2261SMartin Matuska        movdqa  xmm8, xmm7
5281f1e2261SMartin Matuska        psrld   xmm8, 7
5291f1e2261SMartin Matuska        pslld   xmm7, 25
5301f1e2261SMartin Matuska        por     xmm7, xmm8
5311f1e2261SMartin Matuska        movdqa  xmm8, xmm4
5321f1e2261SMartin Matuska        psrld   xmm8, 7
5331f1e2261SMartin Matuska        pslld   xmm4, 25
5341f1e2261SMartin Matuska        por     xmm4, xmm8
5351f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0x30]
5361f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0xA0]
5371f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0xD0]
5381f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0x70]
5391f1e2261SMartin Matuska        paddd   xmm0, xmm4
5401f1e2261SMartin Matuska        paddd   xmm1, xmm5
5411f1e2261SMartin Matuska        paddd   xmm2, xmm6
5421f1e2261SMartin Matuska        paddd   xmm3, xmm7
5431f1e2261SMartin Matuska        pxor    xmm12, xmm0
5441f1e2261SMartin Matuska        pxor    xmm13, xmm1
5451f1e2261SMartin Matuska        pxor    xmm14, xmm2
5461f1e2261SMartin Matuska        pxor    xmm15, xmm3
5471f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT16+rip]
5481f1e2261SMartin Matuska        pshufb  xmm12, xmm8
5491f1e2261SMartin Matuska        pshufb  xmm13, xmm8
5501f1e2261SMartin Matuska        pshufb  xmm14, xmm8
5511f1e2261SMartin Matuska        pshufb  xmm15, xmm8
5521f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
5531f1e2261SMartin Matuska        paddd   xmm8, xmm12
5541f1e2261SMartin Matuska        paddd   xmm9, xmm13
5551f1e2261SMartin Matuska        paddd   xmm10, xmm14
5561f1e2261SMartin Matuska        paddd   xmm11, xmm15
5571f1e2261SMartin Matuska        pxor    xmm4, xmm8
5581f1e2261SMartin Matuska        pxor    xmm5, xmm9
5591f1e2261SMartin Matuska        pxor    xmm6, xmm10
5601f1e2261SMartin Matuska        pxor    xmm7, xmm11
5611f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
5621f1e2261SMartin Matuska        movdqa  xmm8, xmm4
5631f1e2261SMartin Matuska        psrld   xmm8, 12
5641f1e2261SMartin Matuska        pslld   xmm4, 20
5651f1e2261SMartin Matuska        por     xmm4, xmm8
5661f1e2261SMartin Matuska        movdqa  xmm8, xmm5
5671f1e2261SMartin Matuska        psrld   xmm8, 12
5681f1e2261SMartin Matuska        pslld   xmm5, 20
5691f1e2261SMartin Matuska        por     xmm5, xmm8
5701f1e2261SMartin Matuska        movdqa  xmm8, xmm6
5711f1e2261SMartin Matuska        psrld   xmm8, 12
5721f1e2261SMartin Matuska        pslld   xmm6, 20
5731f1e2261SMartin Matuska        por     xmm6, xmm8
5741f1e2261SMartin Matuska        movdqa  xmm8, xmm7
5751f1e2261SMartin Matuska        psrld   xmm8, 12
5761f1e2261SMartin Matuska        pslld   xmm7, 20
5771f1e2261SMartin Matuska        por     xmm7, xmm8
5781f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0x40]
5791f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0xC0]
5801f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0x20]
5811f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0xE0]
5821f1e2261SMartin Matuska        paddd   xmm0, xmm4
5831f1e2261SMartin Matuska        paddd   xmm1, xmm5
5841f1e2261SMartin Matuska        paddd   xmm2, xmm6
5851f1e2261SMartin Matuska        paddd   xmm3, xmm7
5861f1e2261SMartin Matuska        pxor    xmm12, xmm0
5871f1e2261SMartin Matuska        pxor    xmm13, xmm1
5881f1e2261SMartin Matuska        pxor    xmm14, xmm2
5891f1e2261SMartin Matuska        pxor    xmm15, xmm3
5901f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT8+rip]
5911f1e2261SMartin Matuska        pshufb  xmm12, xmm8
5921f1e2261SMartin Matuska        pshufb  xmm13, xmm8
5931f1e2261SMartin Matuska        pshufb  xmm14, xmm8
5941f1e2261SMartin Matuska        pshufb  xmm15, xmm8
5951f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
5961f1e2261SMartin Matuska        paddd   xmm8, xmm12
5971f1e2261SMartin Matuska        paddd   xmm9, xmm13
5981f1e2261SMartin Matuska        paddd   xmm10, xmm14
5991f1e2261SMartin Matuska        paddd   xmm11, xmm15
6001f1e2261SMartin Matuska        pxor    xmm4, xmm8
6011f1e2261SMartin Matuska        pxor    xmm5, xmm9
6021f1e2261SMartin Matuska        pxor    xmm6, xmm10
6031f1e2261SMartin Matuska        pxor    xmm7, xmm11
6041f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
6051f1e2261SMartin Matuska        movdqa  xmm8, xmm4
6061f1e2261SMartin Matuska        psrld   xmm8, 7
6071f1e2261SMartin Matuska        pslld   xmm4, 25
6081f1e2261SMartin Matuska        por     xmm4, xmm8
6091f1e2261SMartin Matuska        movdqa  xmm8, xmm5
6101f1e2261SMartin Matuska        psrld   xmm8, 7
6111f1e2261SMartin Matuska        pslld   xmm5, 25
6121f1e2261SMartin Matuska        por     xmm5, xmm8
6131f1e2261SMartin Matuska        movdqa  xmm8, xmm6
6141f1e2261SMartin Matuska        psrld   xmm8, 7
6151f1e2261SMartin Matuska        pslld   xmm6, 25
6161f1e2261SMartin Matuska        por     xmm6, xmm8
6171f1e2261SMartin Matuska        movdqa  xmm8, xmm7
6181f1e2261SMartin Matuska        psrld   xmm8, 7
6191f1e2261SMartin Matuska        pslld   xmm7, 25
6201f1e2261SMartin Matuska        por     xmm7, xmm8
6211f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0x60]
6221f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0x90]
6231f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0xB0]
6241f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0x80]
6251f1e2261SMartin Matuska        paddd   xmm0, xmm5
6261f1e2261SMartin Matuska        paddd   xmm1, xmm6
6271f1e2261SMartin Matuska        paddd   xmm2, xmm7
6281f1e2261SMartin Matuska        paddd   xmm3, xmm4
6291f1e2261SMartin Matuska        pxor    xmm15, xmm0
6301f1e2261SMartin Matuska        pxor    xmm12, xmm1
6311f1e2261SMartin Matuska        pxor    xmm13, xmm2
6321f1e2261SMartin Matuska        pxor    xmm14, xmm3
6331f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT16+rip]
6341f1e2261SMartin Matuska        pshufb  xmm15, xmm8
6351f1e2261SMartin Matuska        pshufb  xmm12, xmm8
6361f1e2261SMartin Matuska        pshufb  xmm13, xmm8
6371f1e2261SMartin Matuska        pshufb  xmm14, xmm8
6381f1e2261SMartin Matuska        paddd   xmm10, xmm15
6391f1e2261SMartin Matuska        paddd   xmm11, xmm12
6401f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
6411f1e2261SMartin Matuska        paddd   xmm8, xmm13
6421f1e2261SMartin Matuska        paddd   xmm9, xmm14
6431f1e2261SMartin Matuska        pxor    xmm5, xmm10
6441f1e2261SMartin Matuska        pxor    xmm6, xmm11
6451f1e2261SMartin Matuska        pxor    xmm7, xmm8
6461f1e2261SMartin Matuska        pxor    xmm4, xmm9
6471f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
6481f1e2261SMartin Matuska        movdqa  xmm8, xmm5
6491f1e2261SMartin Matuska        psrld   xmm8, 12
6501f1e2261SMartin Matuska        pslld   xmm5, 20
6511f1e2261SMartin Matuska        por     xmm5, xmm8
6521f1e2261SMartin Matuska        movdqa  xmm8, xmm6
6531f1e2261SMartin Matuska        psrld   xmm8, 12
6541f1e2261SMartin Matuska        pslld   xmm6, 20
6551f1e2261SMartin Matuska        por     xmm6, xmm8
6561f1e2261SMartin Matuska        movdqa  xmm8, xmm7
6571f1e2261SMartin Matuska        psrld   xmm8, 12
6581f1e2261SMartin Matuska        pslld   xmm7, 20
6591f1e2261SMartin Matuska        por     xmm7, xmm8
6601f1e2261SMartin Matuska        movdqa  xmm8, xmm4
6611f1e2261SMartin Matuska        psrld   xmm8, 12
6621f1e2261SMartin Matuska        pslld   xmm4, 20
6631f1e2261SMartin Matuska        por     xmm4, xmm8
6641f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0x50]
6651f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp]
6661f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0xF0]
6671f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0x10]
6681f1e2261SMartin Matuska        paddd   xmm0, xmm5
6691f1e2261SMartin Matuska        paddd   xmm1, xmm6
6701f1e2261SMartin Matuska        paddd   xmm2, xmm7
6711f1e2261SMartin Matuska        paddd   xmm3, xmm4
6721f1e2261SMartin Matuska        pxor    xmm15, xmm0
6731f1e2261SMartin Matuska        pxor    xmm12, xmm1
6741f1e2261SMartin Matuska        pxor    xmm13, xmm2
6751f1e2261SMartin Matuska        pxor    xmm14, xmm3
6761f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT8+rip]
6771f1e2261SMartin Matuska        pshufb  xmm15, xmm8
6781f1e2261SMartin Matuska        pshufb  xmm12, xmm8
6791f1e2261SMartin Matuska        pshufb  xmm13, xmm8
6801f1e2261SMartin Matuska        pshufb  xmm14, xmm8
6811f1e2261SMartin Matuska        paddd   xmm10, xmm15
6821f1e2261SMartin Matuska        paddd   xmm11, xmm12
6831f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
6841f1e2261SMartin Matuska        paddd   xmm8, xmm13
6851f1e2261SMartin Matuska        paddd   xmm9, xmm14
6861f1e2261SMartin Matuska        pxor    xmm5, xmm10
6871f1e2261SMartin Matuska        pxor    xmm6, xmm11
6881f1e2261SMartin Matuska        pxor    xmm7, xmm8
6891f1e2261SMartin Matuska        pxor    xmm4, xmm9
6901f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
6911f1e2261SMartin Matuska        movdqa  xmm8, xmm5
6921f1e2261SMartin Matuska        psrld   xmm8, 7
6931f1e2261SMartin Matuska        pslld   xmm5, 25
6941f1e2261SMartin Matuska        por     xmm5, xmm8
6951f1e2261SMartin Matuska        movdqa  xmm8, xmm6
6961f1e2261SMartin Matuska        psrld   xmm8, 7
6971f1e2261SMartin Matuska        pslld   xmm6, 25
6981f1e2261SMartin Matuska        por     xmm6, xmm8
6991f1e2261SMartin Matuska        movdqa  xmm8, xmm7
7001f1e2261SMartin Matuska        psrld   xmm8, 7
7011f1e2261SMartin Matuska        pslld   xmm7, 25
7021f1e2261SMartin Matuska        por     xmm7, xmm8
7031f1e2261SMartin Matuska        movdqa  xmm8, xmm4
7041f1e2261SMartin Matuska        psrld   xmm8, 7
7051f1e2261SMartin Matuska        pslld   xmm4, 25
7061f1e2261SMartin Matuska        por     xmm4, xmm8
7071f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0xA0]
7081f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0xC0]
7091f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0xE0]
7101f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0xD0]
7111f1e2261SMartin Matuska        paddd   xmm0, xmm4
7121f1e2261SMartin Matuska        paddd   xmm1, xmm5
7131f1e2261SMartin Matuska        paddd   xmm2, xmm6
7141f1e2261SMartin Matuska        paddd   xmm3, xmm7
7151f1e2261SMartin Matuska        pxor    xmm12, xmm0
7161f1e2261SMartin Matuska        pxor    xmm13, xmm1
7171f1e2261SMartin Matuska        pxor    xmm14, xmm2
7181f1e2261SMartin Matuska        pxor    xmm15, xmm3
7191f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT16+rip]
7201f1e2261SMartin Matuska        pshufb  xmm12, xmm8
7211f1e2261SMartin Matuska        pshufb  xmm13, xmm8
7221f1e2261SMartin Matuska        pshufb  xmm14, xmm8
7231f1e2261SMartin Matuska        pshufb  xmm15, xmm8
7241f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
7251f1e2261SMartin Matuska        paddd   xmm8, xmm12
7261f1e2261SMartin Matuska        paddd   xmm9, xmm13
7271f1e2261SMartin Matuska        paddd   xmm10, xmm14
7281f1e2261SMartin Matuska        paddd   xmm11, xmm15
7291f1e2261SMartin Matuska        pxor    xmm4, xmm8
7301f1e2261SMartin Matuska        pxor    xmm5, xmm9
7311f1e2261SMartin Matuska        pxor    xmm6, xmm10
7321f1e2261SMartin Matuska        pxor    xmm7, xmm11
7331f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
7341f1e2261SMartin Matuska        movdqa  xmm8, xmm4
7351f1e2261SMartin Matuska        psrld   xmm8, 12
7361f1e2261SMartin Matuska        pslld   xmm4, 20
7371f1e2261SMartin Matuska        por     xmm4, xmm8
7381f1e2261SMartin Matuska        movdqa  xmm8, xmm5
7391f1e2261SMartin Matuska        psrld   xmm8, 12
7401f1e2261SMartin Matuska        pslld   xmm5, 20
7411f1e2261SMartin Matuska        por     xmm5, xmm8
7421f1e2261SMartin Matuska        movdqa  xmm8, xmm6
7431f1e2261SMartin Matuska        psrld   xmm8, 12
7441f1e2261SMartin Matuska        pslld   xmm6, 20
7451f1e2261SMartin Matuska        por     xmm6, xmm8
7461f1e2261SMartin Matuska        movdqa  xmm8, xmm7
7471f1e2261SMartin Matuska        psrld   xmm8, 12
7481f1e2261SMartin Matuska        pslld   xmm7, 20
7491f1e2261SMartin Matuska        por     xmm7, xmm8
7501f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0x70]
7511f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0x90]
7521f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0x30]
7531f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0xF0]
7541f1e2261SMartin Matuska        paddd   xmm0, xmm4
7551f1e2261SMartin Matuska        paddd   xmm1, xmm5
7561f1e2261SMartin Matuska        paddd   xmm2, xmm6
7571f1e2261SMartin Matuska        paddd   xmm3, xmm7
7581f1e2261SMartin Matuska        pxor    xmm12, xmm0
7591f1e2261SMartin Matuska        pxor    xmm13, xmm1
7601f1e2261SMartin Matuska        pxor    xmm14, xmm2
7611f1e2261SMartin Matuska        pxor    xmm15, xmm3
7621f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT8+rip]
7631f1e2261SMartin Matuska        pshufb  xmm12, xmm8
7641f1e2261SMartin Matuska        pshufb  xmm13, xmm8
7651f1e2261SMartin Matuska        pshufb  xmm14, xmm8
7661f1e2261SMartin Matuska        pshufb  xmm15, xmm8
7671f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
7681f1e2261SMartin Matuska        paddd   xmm8, xmm12
7691f1e2261SMartin Matuska        paddd   xmm9, xmm13
7701f1e2261SMartin Matuska        paddd   xmm10, xmm14
7711f1e2261SMartin Matuska        paddd   xmm11, xmm15
7721f1e2261SMartin Matuska        pxor    xmm4, xmm8
7731f1e2261SMartin Matuska        pxor    xmm5, xmm9
7741f1e2261SMartin Matuska        pxor    xmm6, xmm10
7751f1e2261SMartin Matuska        pxor    xmm7, xmm11
7761f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
7771f1e2261SMartin Matuska        movdqa  xmm8, xmm4
7781f1e2261SMartin Matuska        psrld   xmm8, 7
7791f1e2261SMartin Matuska        pslld   xmm4, 25
7801f1e2261SMartin Matuska        por     xmm4, xmm8
7811f1e2261SMartin Matuska        movdqa  xmm8, xmm5
7821f1e2261SMartin Matuska        psrld   xmm8, 7
7831f1e2261SMartin Matuska        pslld   xmm5, 25
7841f1e2261SMartin Matuska        por     xmm5, xmm8
7851f1e2261SMartin Matuska        movdqa  xmm8, xmm6
7861f1e2261SMartin Matuska        psrld   xmm8, 7
7871f1e2261SMartin Matuska        pslld   xmm6, 25
7881f1e2261SMartin Matuska        por     xmm6, xmm8
7891f1e2261SMartin Matuska        movdqa  xmm8, xmm7
7901f1e2261SMartin Matuska        psrld   xmm8, 7
7911f1e2261SMartin Matuska        pslld   xmm7, 25
7921f1e2261SMartin Matuska        por     xmm7, xmm8
7931f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0x40]
7941f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0xB0]
7951f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0x50]
7961f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0x10]
7971f1e2261SMartin Matuska        paddd   xmm0, xmm5
7981f1e2261SMartin Matuska        paddd   xmm1, xmm6
7991f1e2261SMartin Matuska        paddd   xmm2, xmm7
8001f1e2261SMartin Matuska        paddd   xmm3, xmm4
8011f1e2261SMartin Matuska        pxor    xmm15, xmm0
8021f1e2261SMartin Matuska        pxor    xmm12, xmm1
8031f1e2261SMartin Matuska        pxor    xmm13, xmm2
8041f1e2261SMartin Matuska        pxor    xmm14, xmm3
8051f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT16+rip]
8061f1e2261SMartin Matuska        pshufb  xmm15, xmm8
8071f1e2261SMartin Matuska        pshufb  xmm12, xmm8
8081f1e2261SMartin Matuska        pshufb  xmm13, xmm8
8091f1e2261SMartin Matuska        pshufb  xmm14, xmm8
8101f1e2261SMartin Matuska        paddd   xmm10, xmm15
8111f1e2261SMartin Matuska        paddd   xmm11, xmm12
8121f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
8131f1e2261SMartin Matuska        paddd   xmm8, xmm13
8141f1e2261SMartin Matuska        paddd   xmm9, xmm14
8151f1e2261SMartin Matuska        pxor    xmm5, xmm10
8161f1e2261SMartin Matuska        pxor    xmm6, xmm11
8171f1e2261SMartin Matuska        pxor    xmm7, xmm8
8181f1e2261SMartin Matuska        pxor    xmm4, xmm9
8191f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
8201f1e2261SMartin Matuska        movdqa  xmm8, xmm5
8211f1e2261SMartin Matuska        psrld   xmm8, 12
8221f1e2261SMartin Matuska        pslld   xmm5, 20
8231f1e2261SMartin Matuska        por     xmm5, xmm8
8241f1e2261SMartin Matuska        movdqa  xmm8, xmm6
8251f1e2261SMartin Matuska        psrld   xmm8, 12
8261f1e2261SMartin Matuska        pslld   xmm6, 20
8271f1e2261SMartin Matuska        por     xmm6, xmm8
8281f1e2261SMartin Matuska        movdqa  xmm8, xmm7
8291f1e2261SMartin Matuska        psrld   xmm8, 12
8301f1e2261SMartin Matuska        pslld   xmm7, 20
8311f1e2261SMartin Matuska        por     xmm7, xmm8
8321f1e2261SMartin Matuska        movdqa  xmm8, xmm4
8331f1e2261SMartin Matuska        psrld   xmm8, 12
8341f1e2261SMartin Matuska        pslld   xmm4, 20
8351f1e2261SMartin Matuska        por     xmm4, xmm8
8361f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp]
8371f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0x20]
8381f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0x80]
8391f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0x60]
8401f1e2261SMartin Matuska        paddd   xmm0, xmm5
8411f1e2261SMartin Matuska        paddd   xmm1, xmm6
8421f1e2261SMartin Matuska        paddd   xmm2, xmm7
8431f1e2261SMartin Matuska        paddd   xmm3, xmm4
8441f1e2261SMartin Matuska        pxor    xmm15, xmm0
8451f1e2261SMartin Matuska        pxor    xmm12, xmm1
8461f1e2261SMartin Matuska        pxor    xmm13, xmm2
8471f1e2261SMartin Matuska        pxor    xmm14, xmm3
8481f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT8+rip]
8491f1e2261SMartin Matuska        pshufb  xmm15, xmm8
8501f1e2261SMartin Matuska        pshufb  xmm12, xmm8
8511f1e2261SMartin Matuska        pshufb  xmm13, xmm8
8521f1e2261SMartin Matuska        pshufb  xmm14, xmm8
8531f1e2261SMartin Matuska        paddd   xmm10, xmm15
8541f1e2261SMartin Matuska        paddd   xmm11, xmm12
8551f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
8561f1e2261SMartin Matuska        paddd   xmm8, xmm13
8571f1e2261SMartin Matuska        paddd   xmm9, xmm14
8581f1e2261SMartin Matuska        pxor    xmm5, xmm10
8591f1e2261SMartin Matuska        pxor    xmm6, xmm11
8601f1e2261SMartin Matuska        pxor    xmm7, xmm8
8611f1e2261SMartin Matuska        pxor    xmm4, xmm9
8621f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
8631f1e2261SMartin Matuska        movdqa  xmm8, xmm5
8641f1e2261SMartin Matuska        psrld   xmm8, 7
8651f1e2261SMartin Matuska        pslld   xmm5, 25
8661f1e2261SMartin Matuska        por     xmm5, xmm8
8671f1e2261SMartin Matuska        movdqa  xmm8, xmm6
8681f1e2261SMartin Matuska        psrld   xmm8, 7
8691f1e2261SMartin Matuska        pslld   xmm6, 25
8701f1e2261SMartin Matuska        por     xmm6, xmm8
8711f1e2261SMartin Matuska        movdqa  xmm8, xmm7
8721f1e2261SMartin Matuska        psrld   xmm8, 7
8731f1e2261SMartin Matuska        pslld   xmm7, 25
8741f1e2261SMartin Matuska        por     xmm7, xmm8
8751f1e2261SMartin Matuska        movdqa  xmm8, xmm4
8761f1e2261SMartin Matuska        psrld   xmm8, 7
8771f1e2261SMartin Matuska        pslld   xmm4, 25
8781f1e2261SMartin Matuska        por     xmm4, xmm8
8791f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0xC0]
8801f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0x90]
8811f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0xF0]
8821f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0xE0]
8831f1e2261SMartin Matuska        paddd   xmm0, xmm4
8841f1e2261SMartin Matuska        paddd   xmm1, xmm5
8851f1e2261SMartin Matuska        paddd   xmm2, xmm6
8861f1e2261SMartin Matuska        paddd   xmm3, xmm7
8871f1e2261SMartin Matuska        pxor    xmm12, xmm0
8881f1e2261SMartin Matuska        pxor    xmm13, xmm1
8891f1e2261SMartin Matuska        pxor    xmm14, xmm2
8901f1e2261SMartin Matuska        pxor    xmm15, xmm3
8911f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT16+rip]
8921f1e2261SMartin Matuska        pshufb  xmm12, xmm8
8931f1e2261SMartin Matuska        pshufb  xmm13, xmm8
8941f1e2261SMartin Matuska        pshufb  xmm14, xmm8
8951f1e2261SMartin Matuska        pshufb  xmm15, xmm8
8961f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
8971f1e2261SMartin Matuska        paddd   xmm8, xmm12
8981f1e2261SMartin Matuska        paddd   xmm9, xmm13
8991f1e2261SMartin Matuska        paddd   xmm10, xmm14
9001f1e2261SMartin Matuska        paddd   xmm11, xmm15
9011f1e2261SMartin Matuska        pxor    xmm4, xmm8
9021f1e2261SMartin Matuska        pxor    xmm5, xmm9
9031f1e2261SMartin Matuska        pxor    xmm6, xmm10
9041f1e2261SMartin Matuska        pxor    xmm7, xmm11
9051f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
9061f1e2261SMartin Matuska        movdqa  xmm8, xmm4
9071f1e2261SMartin Matuska        psrld   xmm8, 12
9081f1e2261SMartin Matuska        pslld   xmm4, 20
9091f1e2261SMartin Matuska        por     xmm4, xmm8
9101f1e2261SMartin Matuska        movdqa  xmm8, xmm5
9111f1e2261SMartin Matuska        psrld   xmm8, 12
9121f1e2261SMartin Matuska        pslld   xmm5, 20
9131f1e2261SMartin Matuska        por     xmm5, xmm8
9141f1e2261SMartin Matuska        movdqa  xmm8, xmm6
9151f1e2261SMartin Matuska        psrld   xmm8, 12
9161f1e2261SMartin Matuska        pslld   xmm6, 20
9171f1e2261SMartin Matuska        por     xmm6, xmm8
9181f1e2261SMartin Matuska        movdqa  xmm8, xmm7
9191f1e2261SMartin Matuska        psrld   xmm8, 12
9201f1e2261SMartin Matuska        pslld   xmm7, 20
9211f1e2261SMartin Matuska        por     xmm7, xmm8
9221f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0xD0]
9231f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0xB0]
9241f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0xA0]
9251f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0x80]
9261f1e2261SMartin Matuska        paddd   xmm0, xmm4
9271f1e2261SMartin Matuska        paddd   xmm1, xmm5
9281f1e2261SMartin Matuska        paddd   xmm2, xmm6
9291f1e2261SMartin Matuska        paddd   xmm3, xmm7
9301f1e2261SMartin Matuska        pxor    xmm12, xmm0
9311f1e2261SMartin Matuska        pxor    xmm13, xmm1
9321f1e2261SMartin Matuska        pxor    xmm14, xmm2
9331f1e2261SMartin Matuska        pxor    xmm15, xmm3
9341f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT8+rip]
9351f1e2261SMartin Matuska        pshufb  xmm12, xmm8
9361f1e2261SMartin Matuska        pshufb  xmm13, xmm8
9371f1e2261SMartin Matuska        pshufb  xmm14, xmm8
9381f1e2261SMartin Matuska        pshufb  xmm15, xmm8
9391f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
9401f1e2261SMartin Matuska        paddd   xmm8, xmm12
9411f1e2261SMartin Matuska        paddd   xmm9, xmm13
9421f1e2261SMartin Matuska        paddd   xmm10, xmm14
9431f1e2261SMartin Matuska        paddd   xmm11, xmm15
9441f1e2261SMartin Matuska        pxor    xmm4, xmm8
9451f1e2261SMartin Matuska        pxor    xmm5, xmm9
9461f1e2261SMartin Matuska        pxor    xmm6, xmm10
9471f1e2261SMartin Matuska        pxor    xmm7, xmm11
9481f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
9491f1e2261SMartin Matuska        movdqa  xmm8, xmm4
9501f1e2261SMartin Matuska        psrld   xmm8, 7
9511f1e2261SMartin Matuska        pslld   xmm4, 25
9521f1e2261SMartin Matuska        por     xmm4, xmm8
9531f1e2261SMartin Matuska        movdqa  xmm8, xmm5
9541f1e2261SMartin Matuska        psrld   xmm8, 7
9551f1e2261SMartin Matuska        pslld   xmm5, 25
9561f1e2261SMartin Matuska        por     xmm5, xmm8
9571f1e2261SMartin Matuska        movdqa  xmm8, xmm6
9581f1e2261SMartin Matuska        psrld   xmm8, 7
9591f1e2261SMartin Matuska        pslld   xmm6, 25
9601f1e2261SMartin Matuska        por     xmm6, xmm8
9611f1e2261SMartin Matuska        movdqa  xmm8, xmm7
9621f1e2261SMartin Matuska        psrld   xmm8, 7
9631f1e2261SMartin Matuska        pslld   xmm7, 25
9641f1e2261SMartin Matuska        por     xmm7, xmm8
9651f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0x70]
9661f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0x50]
9671f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp]
9681f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0x60]
9691f1e2261SMartin Matuska        paddd   xmm0, xmm5
9701f1e2261SMartin Matuska        paddd   xmm1, xmm6
9711f1e2261SMartin Matuska        paddd   xmm2, xmm7
9721f1e2261SMartin Matuska        paddd   xmm3, xmm4
9731f1e2261SMartin Matuska        pxor    xmm15, xmm0
9741f1e2261SMartin Matuska        pxor    xmm12, xmm1
9751f1e2261SMartin Matuska        pxor    xmm13, xmm2
9761f1e2261SMartin Matuska        pxor    xmm14, xmm3
9771f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT16+rip]
9781f1e2261SMartin Matuska        pshufb  xmm15, xmm8
9791f1e2261SMartin Matuska        pshufb  xmm12, xmm8
9801f1e2261SMartin Matuska        pshufb  xmm13, xmm8
9811f1e2261SMartin Matuska        pshufb  xmm14, xmm8
9821f1e2261SMartin Matuska        paddd   xmm10, xmm15
9831f1e2261SMartin Matuska        paddd   xmm11, xmm12
9841f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
9851f1e2261SMartin Matuska        paddd   xmm8, xmm13
9861f1e2261SMartin Matuska        paddd   xmm9, xmm14
9871f1e2261SMartin Matuska        pxor    xmm5, xmm10
9881f1e2261SMartin Matuska        pxor    xmm6, xmm11
9891f1e2261SMartin Matuska        pxor    xmm7, xmm8
9901f1e2261SMartin Matuska        pxor    xmm4, xmm9
9911f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
9921f1e2261SMartin Matuska        movdqa  xmm8, xmm5
9931f1e2261SMartin Matuska        psrld   xmm8, 12
9941f1e2261SMartin Matuska        pslld   xmm5, 20
9951f1e2261SMartin Matuska        por     xmm5, xmm8
9961f1e2261SMartin Matuska        movdqa  xmm8, xmm6
9971f1e2261SMartin Matuska        psrld   xmm8, 12
9981f1e2261SMartin Matuska        pslld   xmm6, 20
9991f1e2261SMartin Matuska        por     xmm6, xmm8
10001f1e2261SMartin Matuska        movdqa  xmm8, xmm7
10011f1e2261SMartin Matuska        psrld   xmm8, 12
10021f1e2261SMartin Matuska        pslld   xmm7, 20
10031f1e2261SMartin Matuska        por     xmm7, xmm8
10041f1e2261SMartin Matuska        movdqa  xmm8, xmm4
10051f1e2261SMartin Matuska        psrld   xmm8, 12
10061f1e2261SMartin Matuska        pslld   xmm4, 20
10071f1e2261SMartin Matuska        por     xmm4, xmm8
10081f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0x20]
10091f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0x30]
10101f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0x10]
10111f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0x40]
10121f1e2261SMartin Matuska        paddd   xmm0, xmm5
10131f1e2261SMartin Matuska        paddd   xmm1, xmm6
10141f1e2261SMartin Matuska        paddd   xmm2, xmm7
10151f1e2261SMartin Matuska        paddd   xmm3, xmm4
10161f1e2261SMartin Matuska        pxor    xmm15, xmm0
10171f1e2261SMartin Matuska        pxor    xmm12, xmm1
10181f1e2261SMartin Matuska        pxor    xmm13, xmm2
10191f1e2261SMartin Matuska        pxor    xmm14, xmm3
10201f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT8+rip]
10211f1e2261SMartin Matuska        pshufb  xmm15, xmm8
10221f1e2261SMartin Matuska        pshufb  xmm12, xmm8
10231f1e2261SMartin Matuska        pshufb  xmm13, xmm8
10241f1e2261SMartin Matuska        pshufb  xmm14, xmm8
10251f1e2261SMartin Matuska        paddd   xmm10, xmm15
10261f1e2261SMartin Matuska        paddd   xmm11, xmm12
10271f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
10281f1e2261SMartin Matuska        paddd   xmm8, xmm13
10291f1e2261SMartin Matuska        paddd   xmm9, xmm14
10301f1e2261SMartin Matuska        pxor    xmm5, xmm10
10311f1e2261SMartin Matuska        pxor    xmm6, xmm11
10321f1e2261SMartin Matuska        pxor    xmm7, xmm8
10331f1e2261SMartin Matuska        pxor    xmm4, xmm9
10341f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
10351f1e2261SMartin Matuska        movdqa  xmm8, xmm5
10361f1e2261SMartin Matuska        psrld   xmm8, 7
10371f1e2261SMartin Matuska        pslld   xmm5, 25
10381f1e2261SMartin Matuska        por     xmm5, xmm8
10391f1e2261SMartin Matuska        movdqa  xmm8, xmm6
10401f1e2261SMartin Matuska        psrld   xmm8, 7
10411f1e2261SMartin Matuska        pslld   xmm6, 25
10421f1e2261SMartin Matuska        por     xmm6, xmm8
10431f1e2261SMartin Matuska        movdqa  xmm8, xmm7
10441f1e2261SMartin Matuska        psrld   xmm8, 7
10451f1e2261SMartin Matuska        pslld   xmm7, 25
10461f1e2261SMartin Matuska        por     xmm7, xmm8
10471f1e2261SMartin Matuska        movdqa  xmm8, xmm4
10481f1e2261SMartin Matuska        psrld   xmm8, 7
10491f1e2261SMartin Matuska        pslld   xmm4, 25
10501f1e2261SMartin Matuska        por     xmm4, xmm8
10511f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0x90]
10521f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0xB0]
10531f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0x80]
10541f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0xF0]
10551f1e2261SMartin Matuska        paddd   xmm0, xmm4
10561f1e2261SMartin Matuska        paddd   xmm1, xmm5
10571f1e2261SMartin Matuska        paddd   xmm2, xmm6
10581f1e2261SMartin Matuska        paddd   xmm3, xmm7
10591f1e2261SMartin Matuska        pxor    xmm12, xmm0
10601f1e2261SMartin Matuska        pxor    xmm13, xmm1
10611f1e2261SMartin Matuska        pxor    xmm14, xmm2
10621f1e2261SMartin Matuska        pxor    xmm15, xmm3
10631f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT16+rip]
10641f1e2261SMartin Matuska        pshufb  xmm12, xmm8
10651f1e2261SMartin Matuska        pshufb  xmm13, xmm8
10661f1e2261SMartin Matuska        pshufb  xmm14, xmm8
10671f1e2261SMartin Matuska        pshufb  xmm15, xmm8
10681f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
10691f1e2261SMartin Matuska        paddd   xmm8, xmm12
10701f1e2261SMartin Matuska        paddd   xmm9, xmm13
10711f1e2261SMartin Matuska        paddd   xmm10, xmm14
10721f1e2261SMartin Matuska        paddd   xmm11, xmm15
10731f1e2261SMartin Matuska        pxor    xmm4, xmm8
10741f1e2261SMartin Matuska        pxor    xmm5, xmm9
10751f1e2261SMartin Matuska        pxor    xmm6, xmm10
10761f1e2261SMartin Matuska        pxor    xmm7, xmm11
10771f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
10781f1e2261SMartin Matuska        movdqa  xmm8, xmm4
10791f1e2261SMartin Matuska        psrld   xmm8, 12
10801f1e2261SMartin Matuska        pslld   xmm4, 20
10811f1e2261SMartin Matuska        por     xmm4, xmm8
10821f1e2261SMartin Matuska        movdqa  xmm8, xmm5
10831f1e2261SMartin Matuska        psrld   xmm8, 12
10841f1e2261SMartin Matuska        pslld   xmm5, 20
10851f1e2261SMartin Matuska        por     xmm5, xmm8
10861f1e2261SMartin Matuska        movdqa  xmm8, xmm6
10871f1e2261SMartin Matuska        psrld   xmm8, 12
10881f1e2261SMartin Matuska        pslld   xmm6, 20
10891f1e2261SMartin Matuska        por     xmm6, xmm8
10901f1e2261SMartin Matuska        movdqa  xmm8, xmm7
10911f1e2261SMartin Matuska        psrld   xmm8, 12
10921f1e2261SMartin Matuska        pslld   xmm7, 20
10931f1e2261SMartin Matuska        por     xmm7, xmm8
10941f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0xE0]
10951f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0x50]
10961f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0xC0]
10971f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0x10]
10981f1e2261SMartin Matuska        paddd   xmm0, xmm4
10991f1e2261SMartin Matuska        paddd   xmm1, xmm5
11001f1e2261SMartin Matuska        paddd   xmm2, xmm6
11011f1e2261SMartin Matuska        paddd   xmm3, xmm7
11021f1e2261SMartin Matuska        pxor    xmm12, xmm0
11031f1e2261SMartin Matuska        pxor    xmm13, xmm1
11041f1e2261SMartin Matuska        pxor    xmm14, xmm2
11051f1e2261SMartin Matuska        pxor    xmm15, xmm3
11061f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT8+rip]
11071f1e2261SMartin Matuska        pshufb  xmm12, xmm8
11081f1e2261SMartin Matuska        pshufb  xmm13, xmm8
11091f1e2261SMartin Matuska        pshufb  xmm14, xmm8
11101f1e2261SMartin Matuska        pshufb  xmm15, xmm8
11111f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
11121f1e2261SMartin Matuska        paddd   xmm8, xmm12
11131f1e2261SMartin Matuska        paddd   xmm9, xmm13
11141f1e2261SMartin Matuska        paddd   xmm10, xmm14
11151f1e2261SMartin Matuska        paddd   xmm11, xmm15
11161f1e2261SMartin Matuska        pxor    xmm4, xmm8
11171f1e2261SMartin Matuska        pxor    xmm5, xmm9
11181f1e2261SMartin Matuska        pxor    xmm6, xmm10
11191f1e2261SMartin Matuska        pxor    xmm7, xmm11
11201f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
11211f1e2261SMartin Matuska        movdqa  xmm8, xmm4
11221f1e2261SMartin Matuska        psrld   xmm8, 7
11231f1e2261SMartin Matuska        pslld   xmm4, 25
11241f1e2261SMartin Matuska        por     xmm4, xmm8
11251f1e2261SMartin Matuska        movdqa  xmm8, xmm5
11261f1e2261SMartin Matuska        psrld   xmm8, 7
11271f1e2261SMartin Matuska        pslld   xmm5, 25
11281f1e2261SMartin Matuska        por     xmm5, xmm8
11291f1e2261SMartin Matuska        movdqa  xmm8, xmm6
11301f1e2261SMartin Matuska        psrld   xmm8, 7
11311f1e2261SMartin Matuska        pslld   xmm6, 25
11321f1e2261SMartin Matuska        por     xmm6, xmm8
11331f1e2261SMartin Matuska        movdqa  xmm8, xmm7
11341f1e2261SMartin Matuska        psrld   xmm8, 7
11351f1e2261SMartin Matuska        pslld   xmm7, 25
11361f1e2261SMartin Matuska        por     xmm7, xmm8
11371f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0xD0]
11381f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp]
11391f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0x20]
11401f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0x40]
11411f1e2261SMartin Matuska        paddd   xmm0, xmm5
11421f1e2261SMartin Matuska        paddd   xmm1, xmm6
11431f1e2261SMartin Matuska        paddd   xmm2, xmm7
11441f1e2261SMartin Matuska        paddd   xmm3, xmm4
11451f1e2261SMartin Matuska        pxor    xmm15, xmm0
11461f1e2261SMartin Matuska        pxor    xmm12, xmm1
11471f1e2261SMartin Matuska        pxor    xmm13, xmm2
11481f1e2261SMartin Matuska        pxor    xmm14, xmm3
11491f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT16+rip]
11501f1e2261SMartin Matuska        pshufb  xmm15, xmm8
11511f1e2261SMartin Matuska        pshufb  xmm12, xmm8
11521f1e2261SMartin Matuska        pshufb  xmm13, xmm8
11531f1e2261SMartin Matuska        pshufb  xmm14, xmm8
11541f1e2261SMartin Matuska        paddd   xmm10, xmm15
11551f1e2261SMartin Matuska        paddd   xmm11, xmm12
11561f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
11571f1e2261SMartin Matuska        paddd   xmm8, xmm13
11581f1e2261SMartin Matuska        paddd   xmm9, xmm14
11591f1e2261SMartin Matuska        pxor    xmm5, xmm10
11601f1e2261SMartin Matuska        pxor    xmm6, xmm11
11611f1e2261SMartin Matuska        pxor    xmm7, xmm8
11621f1e2261SMartin Matuska        pxor    xmm4, xmm9
11631f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
11641f1e2261SMartin Matuska        movdqa  xmm8, xmm5
11651f1e2261SMartin Matuska        psrld   xmm8, 12
11661f1e2261SMartin Matuska        pslld   xmm5, 20
11671f1e2261SMartin Matuska        por     xmm5, xmm8
11681f1e2261SMartin Matuska        movdqa  xmm8, xmm6
11691f1e2261SMartin Matuska        psrld   xmm8, 12
11701f1e2261SMartin Matuska        pslld   xmm6, 20
11711f1e2261SMartin Matuska        por     xmm6, xmm8
11721f1e2261SMartin Matuska        movdqa  xmm8, xmm7
11731f1e2261SMartin Matuska        psrld   xmm8, 12
11741f1e2261SMartin Matuska        pslld   xmm7, 20
11751f1e2261SMartin Matuska        por     xmm7, xmm8
11761f1e2261SMartin Matuska        movdqa  xmm8, xmm4
11771f1e2261SMartin Matuska        psrld   xmm8, 12
11781f1e2261SMartin Matuska        pslld   xmm4, 20
11791f1e2261SMartin Matuska        por     xmm4, xmm8
11801f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0x30]
11811f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0xA0]
11821f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0x60]
11831f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0x70]
11841f1e2261SMartin Matuska        paddd   xmm0, xmm5
11851f1e2261SMartin Matuska        paddd   xmm1, xmm6
11861f1e2261SMartin Matuska        paddd   xmm2, xmm7
11871f1e2261SMartin Matuska        paddd   xmm3, xmm4
11881f1e2261SMartin Matuska        pxor    xmm15, xmm0
11891f1e2261SMartin Matuska        pxor    xmm12, xmm1
11901f1e2261SMartin Matuska        pxor    xmm13, xmm2
11911f1e2261SMartin Matuska        pxor    xmm14, xmm3
11921f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT8+rip]
11931f1e2261SMartin Matuska        pshufb  xmm15, xmm8
11941f1e2261SMartin Matuska        pshufb  xmm12, xmm8
11951f1e2261SMartin Matuska        pshufb  xmm13, xmm8
11961f1e2261SMartin Matuska        pshufb  xmm14, xmm8
11971f1e2261SMartin Matuska        paddd   xmm10, xmm15
11981f1e2261SMartin Matuska        paddd   xmm11, xmm12
11991f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
12001f1e2261SMartin Matuska        paddd   xmm8, xmm13
12011f1e2261SMartin Matuska        paddd   xmm9, xmm14
12021f1e2261SMartin Matuska        pxor    xmm5, xmm10
12031f1e2261SMartin Matuska        pxor    xmm6, xmm11
12041f1e2261SMartin Matuska        pxor    xmm7, xmm8
12051f1e2261SMartin Matuska        pxor    xmm4, xmm9
12061f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
12071f1e2261SMartin Matuska        movdqa  xmm8, xmm5
12081f1e2261SMartin Matuska        psrld   xmm8, 7
12091f1e2261SMartin Matuska        pslld   xmm5, 25
12101f1e2261SMartin Matuska        por     xmm5, xmm8
12111f1e2261SMartin Matuska        movdqa  xmm8, xmm6
12121f1e2261SMartin Matuska        psrld   xmm8, 7
12131f1e2261SMartin Matuska        pslld   xmm6, 25
12141f1e2261SMartin Matuska        por     xmm6, xmm8
12151f1e2261SMartin Matuska        movdqa  xmm8, xmm7
12161f1e2261SMartin Matuska        psrld   xmm8, 7
12171f1e2261SMartin Matuska        pslld   xmm7, 25
12181f1e2261SMartin Matuska        por     xmm7, xmm8
12191f1e2261SMartin Matuska        movdqa  xmm8, xmm4
12201f1e2261SMartin Matuska        psrld   xmm8, 7
12211f1e2261SMartin Matuska        pslld   xmm4, 25
12221f1e2261SMartin Matuska        por     xmm4, xmm8
12231f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0xB0]
12241f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0x50]
12251f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0x10]
12261f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0x80]
12271f1e2261SMartin Matuska        paddd   xmm0, xmm4
12281f1e2261SMartin Matuska        paddd   xmm1, xmm5
12291f1e2261SMartin Matuska        paddd   xmm2, xmm6
12301f1e2261SMartin Matuska        paddd   xmm3, xmm7
12311f1e2261SMartin Matuska        pxor    xmm12, xmm0
12321f1e2261SMartin Matuska        pxor    xmm13, xmm1
12331f1e2261SMartin Matuska        pxor    xmm14, xmm2
12341f1e2261SMartin Matuska        pxor    xmm15, xmm3
12351f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT16+rip]
12361f1e2261SMartin Matuska        pshufb  xmm12, xmm8
12371f1e2261SMartin Matuska        pshufb  xmm13, xmm8
12381f1e2261SMartin Matuska        pshufb  xmm14, xmm8
12391f1e2261SMartin Matuska        pshufb  xmm15, xmm8
12401f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
12411f1e2261SMartin Matuska        paddd   xmm8, xmm12
12421f1e2261SMartin Matuska        paddd   xmm9, xmm13
12431f1e2261SMartin Matuska        paddd   xmm10, xmm14
12441f1e2261SMartin Matuska        paddd   xmm11, xmm15
12451f1e2261SMartin Matuska        pxor    xmm4, xmm8
12461f1e2261SMartin Matuska        pxor    xmm5, xmm9
12471f1e2261SMartin Matuska        pxor    xmm6, xmm10
12481f1e2261SMartin Matuska        pxor    xmm7, xmm11
12491f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
12501f1e2261SMartin Matuska        movdqa  xmm8, xmm4
12511f1e2261SMartin Matuska        psrld   xmm8, 12
12521f1e2261SMartin Matuska        pslld   xmm4, 20
12531f1e2261SMartin Matuska        por     xmm4, xmm8
12541f1e2261SMartin Matuska        movdqa  xmm8, xmm5
12551f1e2261SMartin Matuska        psrld   xmm8, 12
12561f1e2261SMartin Matuska        pslld   xmm5, 20
12571f1e2261SMartin Matuska        por     xmm5, xmm8
12581f1e2261SMartin Matuska        movdqa  xmm8, xmm6
12591f1e2261SMartin Matuska        psrld   xmm8, 12
12601f1e2261SMartin Matuska        pslld   xmm6, 20
12611f1e2261SMartin Matuska        por     xmm6, xmm8
12621f1e2261SMartin Matuska        movdqa  xmm8, xmm7
12631f1e2261SMartin Matuska        psrld   xmm8, 12
12641f1e2261SMartin Matuska        pslld   xmm7, 20
12651f1e2261SMartin Matuska        por     xmm7, xmm8
12661f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0xF0]
12671f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp]
12681f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0x90]
12691f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0x60]
12701f1e2261SMartin Matuska        paddd   xmm0, xmm4
12711f1e2261SMartin Matuska        paddd   xmm1, xmm5
12721f1e2261SMartin Matuska        paddd   xmm2, xmm6
12731f1e2261SMartin Matuska        paddd   xmm3, xmm7
12741f1e2261SMartin Matuska        pxor    xmm12, xmm0
12751f1e2261SMartin Matuska        pxor    xmm13, xmm1
12761f1e2261SMartin Matuska        pxor    xmm14, xmm2
12771f1e2261SMartin Matuska        pxor    xmm15, xmm3
12781f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT8+rip]
12791f1e2261SMartin Matuska        pshufb  xmm12, xmm8
12801f1e2261SMartin Matuska        pshufb  xmm13, xmm8
12811f1e2261SMartin Matuska        pshufb  xmm14, xmm8
12821f1e2261SMartin Matuska        pshufb  xmm15, xmm8
12831f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
12841f1e2261SMartin Matuska        paddd   xmm8, xmm12
12851f1e2261SMartin Matuska        paddd   xmm9, xmm13
12861f1e2261SMartin Matuska        paddd   xmm10, xmm14
12871f1e2261SMartin Matuska        paddd   xmm11, xmm15
12881f1e2261SMartin Matuska        pxor    xmm4, xmm8
12891f1e2261SMartin Matuska        pxor    xmm5, xmm9
12901f1e2261SMartin Matuska        pxor    xmm6, xmm10
12911f1e2261SMartin Matuska        pxor    xmm7, xmm11
12921f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
12931f1e2261SMartin Matuska        movdqa  xmm8, xmm4
12941f1e2261SMartin Matuska        psrld   xmm8, 7
12951f1e2261SMartin Matuska        pslld   xmm4, 25
12961f1e2261SMartin Matuska        por     xmm4, xmm8
12971f1e2261SMartin Matuska        movdqa  xmm8, xmm5
12981f1e2261SMartin Matuska        psrld   xmm8, 7
12991f1e2261SMartin Matuska        pslld   xmm5, 25
13001f1e2261SMartin Matuska        por     xmm5, xmm8
13011f1e2261SMartin Matuska        movdqa  xmm8, xmm6
13021f1e2261SMartin Matuska        psrld   xmm8, 7
13031f1e2261SMartin Matuska        pslld   xmm6, 25
13041f1e2261SMartin Matuska        por     xmm6, xmm8
13051f1e2261SMartin Matuska        movdqa  xmm8, xmm7
13061f1e2261SMartin Matuska        psrld   xmm8, 7
13071f1e2261SMartin Matuska        pslld   xmm7, 25
13081f1e2261SMartin Matuska        por     xmm7, xmm8
13091f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0xE0]
13101f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0x20]
13111f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0x30]
13121f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0x70]
13131f1e2261SMartin Matuska        paddd   xmm0, xmm5
13141f1e2261SMartin Matuska        paddd   xmm1, xmm6
13151f1e2261SMartin Matuska        paddd   xmm2, xmm7
13161f1e2261SMartin Matuska        paddd   xmm3, xmm4
13171f1e2261SMartin Matuska        pxor    xmm15, xmm0
13181f1e2261SMartin Matuska        pxor    xmm12, xmm1
13191f1e2261SMartin Matuska        pxor    xmm13, xmm2
13201f1e2261SMartin Matuska        pxor    xmm14, xmm3
13211f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT16+rip]
13221f1e2261SMartin Matuska        pshufb  xmm15, xmm8
13231f1e2261SMartin Matuska        pshufb  xmm12, xmm8
13241f1e2261SMartin Matuska        pshufb  xmm13, xmm8
13251f1e2261SMartin Matuska        pshufb  xmm14, xmm8
13261f1e2261SMartin Matuska        paddd   xmm10, xmm15
13271f1e2261SMartin Matuska        paddd   xmm11, xmm12
13281f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
13291f1e2261SMartin Matuska        paddd   xmm8, xmm13
13301f1e2261SMartin Matuska        paddd   xmm9, xmm14
13311f1e2261SMartin Matuska        pxor    xmm5, xmm10
13321f1e2261SMartin Matuska        pxor    xmm6, xmm11
13331f1e2261SMartin Matuska        pxor    xmm7, xmm8
13341f1e2261SMartin Matuska        pxor    xmm4, xmm9
13351f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x100], xmm8
13361f1e2261SMartin Matuska        movdqa  xmm8, xmm5
13371f1e2261SMartin Matuska        psrld   xmm8, 12
13381f1e2261SMartin Matuska        pslld   xmm5, 20
13391f1e2261SMartin Matuska        por     xmm5, xmm8
13401f1e2261SMartin Matuska        movdqa  xmm8, xmm6
13411f1e2261SMartin Matuska        psrld   xmm8, 12
13421f1e2261SMartin Matuska        pslld   xmm6, 20
13431f1e2261SMartin Matuska        por     xmm6, xmm8
13441f1e2261SMartin Matuska        movdqa  xmm8, xmm7
13451f1e2261SMartin Matuska        psrld   xmm8, 12
13461f1e2261SMartin Matuska        pslld   xmm7, 20
13471f1e2261SMartin Matuska        por     xmm7, xmm8
13481f1e2261SMartin Matuska        movdqa  xmm8, xmm4
13491f1e2261SMartin Matuska        psrld   xmm8, 12
13501f1e2261SMartin Matuska        pslld   xmm4, 20
13511f1e2261SMartin Matuska        por     xmm4, xmm8
13521f1e2261SMartin Matuska        paddd   xmm0, xmmword ptr [rsp+0xA0]
13531f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0xC0]
13541f1e2261SMartin Matuska        paddd   xmm2, xmmword ptr [rsp+0x40]
13551f1e2261SMartin Matuska        paddd   xmm3, xmmword ptr [rsp+0xD0]
13561f1e2261SMartin Matuska        paddd   xmm0, xmm5
13571f1e2261SMartin Matuska        paddd   xmm1, xmm6
13581f1e2261SMartin Matuska        paddd   xmm2, xmm7
13591f1e2261SMartin Matuska        paddd   xmm3, xmm4
13601f1e2261SMartin Matuska        pxor    xmm15, xmm0
13611f1e2261SMartin Matuska        pxor    xmm12, xmm1
13621f1e2261SMartin Matuska        pxor    xmm13, xmm2
13631f1e2261SMartin Matuska        pxor    xmm14, xmm3
13641f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [ROT8+rip]
13651f1e2261SMartin Matuska        pshufb  xmm15, xmm8
13661f1e2261SMartin Matuska        pshufb  xmm12, xmm8
13671f1e2261SMartin Matuska        pshufb  xmm13, xmm8
13681f1e2261SMartin Matuska        pshufb  xmm14, xmm8
13691f1e2261SMartin Matuska        paddd   xmm10, xmm15
13701f1e2261SMartin Matuska        paddd   xmm11, xmm12
13711f1e2261SMartin Matuska        movdqa  xmm8, xmmword ptr [rsp+0x100]
13721f1e2261SMartin Matuska        paddd   xmm8, xmm13
13731f1e2261SMartin Matuska        paddd   xmm9, xmm14
13741f1e2261SMartin Matuska        pxor    xmm5, xmm10
13751f1e2261SMartin Matuska        pxor    xmm6, xmm11
13761f1e2261SMartin Matuska        pxor    xmm7, xmm8
13771f1e2261SMartin Matuska        pxor    xmm4, xmm9
13781f1e2261SMartin Matuska        pxor    xmm0, xmm8
13791f1e2261SMartin Matuska        pxor    xmm1, xmm9
13801f1e2261SMartin Matuska        pxor    xmm2, xmm10
13811f1e2261SMartin Matuska        pxor    xmm3, xmm11
13821f1e2261SMartin Matuska        movdqa  xmm8, xmm5
13831f1e2261SMartin Matuska        psrld   xmm8, 7
13841f1e2261SMartin Matuska        pslld   xmm5, 25
13851f1e2261SMartin Matuska        por     xmm5, xmm8
13861f1e2261SMartin Matuska        movdqa  xmm8, xmm6
13871f1e2261SMartin Matuska        psrld   xmm8, 7
13881f1e2261SMartin Matuska        pslld   xmm6, 25
13891f1e2261SMartin Matuska        por     xmm6, xmm8
13901f1e2261SMartin Matuska        movdqa  xmm8, xmm7
13911f1e2261SMartin Matuska        psrld   xmm8, 7
13921f1e2261SMartin Matuska        pslld   xmm7, 25
13931f1e2261SMartin Matuska        por     xmm7, xmm8
13941f1e2261SMartin Matuska        movdqa  xmm8, xmm4
13951f1e2261SMartin Matuska        psrld   xmm8, 7
13961f1e2261SMartin Matuska        pslld   xmm4, 25
13971f1e2261SMartin Matuska        por     xmm4, xmm8
13981f1e2261SMartin Matuska        pxor    xmm4, xmm12
13991f1e2261SMartin Matuska        pxor    xmm5, xmm13
14001f1e2261SMartin Matuska        pxor    xmm6, xmm14
14011f1e2261SMartin Matuska        pxor    xmm7, xmm15
14021f1e2261SMartin Matuska        mov     eax, r13d
14031f1e2261SMartin Matuska        jne     9b
14041f1e2261SMartin Matuska        movdqa  xmm9, xmm0
14051f1e2261SMartin Matuska        punpckldq xmm0, xmm1
14061f1e2261SMartin Matuska        punpckhdq xmm9, xmm1
14071f1e2261SMartin Matuska        movdqa  xmm11, xmm2
14081f1e2261SMartin Matuska        punpckldq xmm2, xmm3
14091f1e2261SMartin Matuska        punpckhdq xmm11, xmm3
14101f1e2261SMartin Matuska        movdqa  xmm1, xmm0
14111f1e2261SMartin Matuska        punpcklqdq xmm0, xmm2
14121f1e2261SMartin Matuska        punpckhqdq xmm1, xmm2
14131f1e2261SMartin Matuska        movdqa  xmm3, xmm9
14141f1e2261SMartin Matuska        punpcklqdq xmm9, xmm11
14151f1e2261SMartin Matuska        punpckhqdq xmm3, xmm11
14161f1e2261SMartin Matuska        movdqu  xmmword ptr [rbx], xmm0
14171f1e2261SMartin Matuska        movdqu  xmmword ptr [rbx+0x20], xmm1
14181f1e2261SMartin Matuska        movdqu  xmmword ptr [rbx+0x40], xmm9
14191f1e2261SMartin Matuska        movdqu  xmmword ptr [rbx+0x60], xmm3
14201f1e2261SMartin Matuska        movdqa  xmm9, xmm4
14211f1e2261SMartin Matuska        punpckldq xmm4, xmm5
14221f1e2261SMartin Matuska        punpckhdq xmm9, xmm5
14231f1e2261SMartin Matuska        movdqa  xmm11, xmm6
14241f1e2261SMartin Matuska        punpckldq xmm6, xmm7
14251f1e2261SMartin Matuska        punpckhdq xmm11, xmm7
14261f1e2261SMartin Matuska        movdqa  xmm5, xmm4
14271f1e2261SMartin Matuska        punpcklqdq xmm4, xmm6
14281f1e2261SMartin Matuska        punpckhqdq xmm5, xmm6
14291f1e2261SMartin Matuska        movdqa  xmm7, xmm9
14301f1e2261SMartin Matuska        punpcklqdq xmm9, xmm11
14311f1e2261SMartin Matuska        punpckhqdq xmm7, xmm11
14321f1e2261SMartin Matuska        movdqu  xmmword ptr [rbx+0x10], xmm4
14331f1e2261SMartin Matuska        movdqu  xmmword ptr [rbx+0x30], xmm5
14341f1e2261SMartin Matuska        movdqu  xmmword ptr [rbx+0x50], xmm9
14351f1e2261SMartin Matuska        movdqu  xmmword ptr [rbx+0x70], xmm7
14361f1e2261SMartin Matuska        movdqa  xmm1, xmmword ptr [rsp+0x110]
14371f1e2261SMartin Matuska        movdqa  xmm0, xmm1
14381f1e2261SMartin Matuska        paddd   xmm1, xmmword ptr [rsp+0x150]
14391f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x110], xmm1
14401f1e2261SMartin Matuska        pxor    xmm0, xmmword ptr [CMP_MSB_MASK+rip]
14411f1e2261SMartin Matuska        pxor    xmm1, xmmword ptr [CMP_MSB_MASK+rip]
14421f1e2261SMartin Matuska        pcmpgtd xmm0, xmm1
14431f1e2261SMartin Matuska        movdqa  xmm1, xmmword ptr [rsp+0x120]
14441f1e2261SMartin Matuska        psubd   xmm1, xmm0
14451f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x120], xmm1
14461f1e2261SMartin Matuska        add     rbx, 128
14471f1e2261SMartin Matuska        add     rdi, 32
14481f1e2261SMartin Matuska        sub     rsi, 4
14491f1e2261SMartin Matuska        cmp     rsi, 4
14501f1e2261SMartin Matuska        jnc     2b
14511f1e2261SMartin Matuska        test    rsi, rsi
14521f1e2261SMartin Matuska        jnz     3f
14531f1e2261SMartin Matuska4:
14541f1e2261SMartin Matuska        mov     rsp, rbp
14551f1e2261SMartin Matuska        pop     rbp
14561f1e2261SMartin Matuska        pop     rbx
14571f1e2261SMartin Matuska        pop     r12
14581f1e2261SMartin Matuska        pop     r13
14591f1e2261SMartin Matuska        pop     r14
14601f1e2261SMartin Matuska        pop     r15
1461a0b956f5SMartin Matuska        RET
14621f1e2261SMartin Matuska.p2align 5
14631f1e2261SMartin Matuska3:
14641f1e2261SMartin Matuska        test    esi, 0x2
14651f1e2261SMartin Matuska        je      3f
14661f1e2261SMartin Matuska        movups  xmm0, xmmword ptr [rcx]
14671f1e2261SMartin Matuska        movups  xmm1, xmmword ptr [rcx+0x10]
14681f1e2261SMartin Matuska        movaps  xmm8, xmm0
14691f1e2261SMartin Matuska        movaps  xmm9, xmm1
14701f1e2261SMartin Matuska        movd    xmm13, dword ptr [rsp+0x110]
14711f1e2261SMartin Matuska        pinsrd  xmm13, dword ptr [rsp+0x120], 1
14721f1e2261SMartin Matuska        pinsrd  xmm13, dword ptr [BLAKE3_BLOCK_LEN+rip], 2
14731f1e2261SMartin Matuska        movaps  xmmword ptr [rsp], xmm13
14741f1e2261SMartin Matuska        movd    xmm14, dword ptr [rsp+0x114]
14751f1e2261SMartin Matuska        pinsrd  xmm14, dword ptr [rsp+0x124], 1
14761f1e2261SMartin Matuska        pinsrd  xmm14, dword ptr [BLAKE3_BLOCK_LEN+rip], 2
14771f1e2261SMartin Matuska        movaps  xmmword ptr [rsp+0x10], xmm14
14781f1e2261SMartin Matuska        mov     r8, qword ptr [rdi]
14791f1e2261SMartin Matuska        mov     r9, qword ptr [rdi+0x8]
14801f1e2261SMartin Matuska        movzx   eax, byte ptr [rbp+0x40]
14811f1e2261SMartin Matuska        or      eax, r13d
14821f1e2261SMartin Matuska        xor     edx, edx
14831f1e2261SMartin Matuska2:
14841f1e2261SMartin Matuska        mov     r14d, eax
14851f1e2261SMartin Matuska        or      eax, r12d
14861f1e2261SMartin Matuska        add     rdx, 64
14871f1e2261SMartin Matuska        cmp     rdx, r15
14881f1e2261SMartin Matuska        cmovne  eax, r14d
14891f1e2261SMartin Matuska        movaps  xmm2, xmmword ptr [BLAKE3_IV+rip]
14901f1e2261SMartin Matuska        movaps  xmm10, xmm2
14911f1e2261SMartin Matuska        movups  xmm4, xmmword ptr [r8+rdx-0x40]
14921f1e2261SMartin Matuska        movups  xmm5, xmmword ptr [r8+rdx-0x30]
14931f1e2261SMartin Matuska        movaps  xmm3, xmm4
14941f1e2261SMartin Matuska        shufps  xmm4, xmm5, 136
14951f1e2261SMartin Matuska        shufps  xmm3, xmm5, 221
14961f1e2261SMartin Matuska        movaps  xmm5, xmm3
14971f1e2261SMartin Matuska        movups  xmm6, xmmword ptr [r8+rdx-0x20]
14981f1e2261SMartin Matuska        movups  xmm7, xmmword ptr [r8+rdx-0x10]
14991f1e2261SMartin Matuska        movaps  xmm3, xmm6
15001f1e2261SMartin Matuska        shufps  xmm6, xmm7, 136
15011f1e2261SMartin Matuska        pshufd  xmm6, xmm6, 0x93
15021f1e2261SMartin Matuska        shufps  xmm3, xmm7, 221
15031f1e2261SMartin Matuska        pshufd  xmm7, xmm3, 0x93
15041f1e2261SMartin Matuska        movups  xmm12, xmmword ptr [r9+rdx-0x40]
15051f1e2261SMartin Matuska        movups  xmm13, xmmword ptr [r9+rdx-0x30]
15061f1e2261SMartin Matuska        movaps  xmm11, xmm12
15071f1e2261SMartin Matuska        shufps  xmm12, xmm13, 136
15081f1e2261SMartin Matuska        shufps  xmm11, xmm13, 221
15091f1e2261SMartin Matuska        movaps  xmm13, xmm11
15101f1e2261SMartin Matuska        movups  xmm14, xmmword ptr [r9+rdx-0x20]
15111f1e2261SMartin Matuska        movups  xmm15, xmmword ptr [r9+rdx-0x10]
15121f1e2261SMartin Matuska        movaps  xmm11, xmm14
15131f1e2261SMartin Matuska        shufps  xmm14, xmm15, 136
15141f1e2261SMartin Matuska        pshufd  xmm14, xmm14, 0x93
15151f1e2261SMartin Matuska        shufps  xmm11, xmm15, 221
15161f1e2261SMartin Matuska        pshufd  xmm15, xmm11, 0x93
15171f1e2261SMartin Matuska        movaps  xmm3, xmmword ptr [rsp]
15181f1e2261SMartin Matuska        movaps  xmm11, xmmword ptr [rsp+0x10]
15191f1e2261SMartin Matuska        pinsrd  xmm3, eax, 3
15201f1e2261SMartin Matuska        pinsrd  xmm11, eax, 3
15211f1e2261SMartin Matuska        mov     al, 7
15221f1e2261SMartin Matuska9:
15231f1e2261SMartin Matuska        paddd   xmm0, xmm4
15241f1e2261SMartin Matuska        paddd   xmm8, xmm12
15251f1e2261SMartin Matuska        movaps  xmmword ptr [rsp+0x20], xmm4
15261f1e2261SMartin Matuska        movaps  xmmword ptr [rsp+0x30], xmm12
15271f1e2261SMartin Matuska        paddd   xmm0, xmm1
15281f1e2261SMartin Matuska        paddd   xmm8, xmm9
15291f1e2261SMartin Matuska        pxor    xmm3, xmm0
15301f1e2261SMartin Matuska        pxor    xmm11, xmm8
15311f1e2261SMartin Matuska        movaps  xmm12, xmmword ptr [ROT16+rip]
15321f1e2261SMartin Matuska        pshufb  xmm3, xmm12
15331f1e2261SMartin Matuska        pshufb  xmm11, xmm12
15341f1e2261SMartin Matuska        paddd   xmm2, xmm3
15351f1e2261SMartin Matuska        paddd   xmm10, xmm11
15361f1e2261SMartin Matuska        pxor    xmm1, xmm2
15371f1e2261SMartin Matuska        pxor    xmm9, xmm10
15381f1e2261SMartin Matuska        movdqa  xmm4, xmm1
15391f1e2261SMartin Matuska        pslld   xmm1, 20
15401f1e2261SMartin Matuska        psrld   xmm4, 12
15411f1e2261SMartin Matuska        por     xmm1, xmm4
15421f1e2261SMartin Matuska        movdqa  xmm4, xmm9
15431f1e2261SMartin Matuska        pslld   xmm9, 20
15441f1e2261SMartin Matuska        psrld   xmm4, 12
15451f1e2261SMartin Matuska        por     xmm9, xmm4
15461f1e2261SMartin Matuska        paddd   xmm0, xmm5
15471f1e2261SMartin Matuska        paddd   xmm8, xmm13
15481f1e2261SMartin Matuska        movaps  xmmword ptr [rsp+0x40], xmm5
15491f1e2261SMartin Matuska        movaps  xmmword ptr [rsp+0x50], xmm13
15501f1e2261SMartin Matuska        paddd   xmm0, xmm1
15511f1e2261SMartin Matuska        paddd   xmm8, xmm9
15521f1e2261SMartin Matuska        pxor    xmm3, xmm0
15531f1e2261SMartin Matuska        pxor    xmm11, xmm8
15541f1e2261SMartin Matuska        movaps  xmm13, xmmword ptr [ROT8+rip]
15551f1e2261SMartin Matuska        pshufb  xmm3, xmm13
15561f1e2261SMartin Matuska        pshufb  xmm11, xmm13
15571f1e2261SMartin Matuska        paddd   xmm2, xmm3
15581f1e2261SMartin Matuska        paddd   xmm10, xmm11
15591f1e2261SMartin Matuska        pxor    xmm1, xmm2
15601f1e2261SMartin Matuska        pxor    xmm9, xmm10
15611f1e2261SMartin Matuska        movdqa  xmm4, xmm1
15621f1e2261SMartin Matuska        pslld   xmm1, 25
15631f1e2261SMartin Matuska        psrld   xmm4, 7
15641f1e2261SMartin Matuska        por     xmm1, xmm4
15651f1e2261SMartin Matuska        movdqa  xmm4, xmm9
15661f1e2261SMartin Matuska        pslld   xmm9, 25
15671f1e2261SMartin Matuska        psrld   xmm4, 7
15681f1e2261SMartin Matuska        por     xmm9, xmm4
15691f1e2261SMartin Matuska        pshufd  xmm0, xmm0, 0x93
15701f1e2261SMartin Matuska        pshufd  xmm8, xmm8, 0x93
15711f1e2261SMartin Matuska        pshufd  xmm3, xmm3, 0x4E
15721f1e2261SMartin Matuska        pshufd  xmm11, xmm11, 0x4E
15731f1e2261SMartin Matuska        pshufd  xmm2, xmm2, 0x39
15741f1e2261SMartin Matuska        pshufd  xmm10, xmm10, 0x39
15751f1e2261SMartin Matuska        paddd   xmm0, xmm6
15761f1e2261SMartin Matuska        paddd   xmm8, xmm14
15771f1e2261SMartin Matuska        paddd   xmm0, xmm1
15781f1e2261SMartin Matuska        paddd   xmm8, xmm9
15791f1e2261SMartin Matuska        pxor    xmm3, xmm0
15801f1e2261SMartin Matuska        pxor    xmm11, xmm8
15811f1e2261SMartin Matuska        pshufb  xmm3, xmm12
15821f1e2261SMartin Matuska        pshufb  xmm11, xmm12
15831f1e2261SMartin Matuska        paddd   xmm2, xmm3
15841f1e2261SMartin Matuska        paddd   xmm10, xmm11
15851f1e2261SMartin Matuska        pxor    xmm1, xmm2
15861f1e2261SMartin Matuska        pxor    xmm9, xmm10
15871f1e2261SMartin Matuska        movdqa  xmm4, xmm1
15881f1e2261SMartin Matuska        pslld   xmm1, 20
15891f1e2261SMartin Matuska        psrld   xmm4, 12
15901f1e2261SMartin Matuska        por     xmm1, xmm4
15911f1e2261SMartin Matuska        movdqa  xmm4, xmm9
15921f1e2261SMartin Matuska        pslld   xmm9, 20
15931f1e2261SMartin Matuska        psrld   xmm4, 12
15941f1e2261SMartin Matuska        por     xmm9, xmm4
15951f1e2261SMartin Matuska        paddd   xmm0, xmm7
15961f1e2261SMartin Matuska        paddd   xmm8, xmm15
15971f1e2261SMartin Matuska        paddd   xmm0, xmm1
15981f1e2261SMartin Matuska        paddd   xmm8, xmm9
15991f1e2261SMartin Matuska        pxor    xmm3, xmm0
16001f1e2261SMartin Matuska        pxor    xmm11, xmm8
16011f1e2261SMartin Matuska        pshufb  xmm3, xmm13
16021f1e2261SMartin Matuska        pshufb  xmm11, xmm13
16031f1e2261SMartin Matuska        paddd   xmm2, xmm3
16041f1e2261SMartin Matuska        paddd   xmm10, xmm11
16051f1e2261SMartin Matuska        pxor    xmm1, xmm2
16061f1e2261SMartin Matuska        pxor    xmm9, xmm10
16071f1e2261SMartin Matuska        movdqa  xmm4, xmm1
16081f1e2261SMartin Matuska        pslld   xmm1, 25
16091f1e2261SMartin Matuska        psrld   xmm4, 7
16101f1e2261SMartin Matuska        por     xmm1, xmm4
16111f1e2261SMartin Matuska        movdqa  xmm4, xmm9
16121f1e2261SMartin Matuska        pslld   xmm9, 25
16131f1e2261SMartin Matuska        psrld   xmm4, 7
16141f1e2261SMartin Matuska        por     xmm9, xmm4
16151f1e2261SMartin Matuska        pshufd  xmm0, xmm0, 0x39
16161f1e2261SMartin Matuska        pshufd  xmm8, xmm8, 0x39
16171f1e2261SMartin Matuska        pshufd  xmm3, xmm3, 0x4E
16181f1e2261SMartin Matuska        pshufd  xmm11, xmm11, 0x4E
16191f1e2261SMartin Matuska        pshufd  xmm2, xmm2, 0x93
16201f1e2261SMartin Matuska        pshufd  xmm10, xmm10, 0x93
16211f1e2261SMartin Matuska        dec     al
16221f1e2261SMartin Matuska        je      9f
16231f1e2261SMartin Matuska        movdqa  xmm12, xmmword ptr [rsp+0x20]
16241f1e2261SMartin Matuska        movdqa  xmm5, xmmword ptr [rsp+0x40]
16251f1e2261SMartin Matuska        pshufd  xmm13, xmm12, 0x0F
16261f1e2261SMartin Matuska        shufps  xmm12, xmm5, 214
16271f1e2261SMartin Matuska        pshufd  xmm4, xmm12, 0x39
16281f1e2261SMartin Matuska        movdqa  xmm12, xmm6
16291f1e2261SMartin Matuska        shufps  xmm12, xmm7, 250
16301f1e2261SMartin Matuska        pblendw xmm13, xmm12, 0xCC
16311f1e2261SMartin Matuska        movdqa  xmm12, xmm7
16321f1e2261SMartin Matuska        punpcklqdq xmm12, xmm5
16331f1e2261SMartin Matuska        pblendw xmm12, xmm6, 0xC0
16341f1e2261SMartin Matuska        pshufd  xmm12, xmm12, 0x78
16351f1e2261SMartin Matuska        punpckhdq xmm5, xmm7
16361f1e2261SMartin Matuska        punpckldq xmm6, xmm5
16371f1e2261SMartin Matuska        pshufd  xmm7, xmm6, 0x1E
16381f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x20], xmm13
16391f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x40], xmm12
16401f1e2261SMartin Matuska        movdqa  xmm5, xmmword ptr [rsp+0x30]
16411f1e2261SMartin Matuska        movdqa  xmm13, xmmword ptr [rsp+0x50]
16421f1e2261SMartin Matuska        pshufd  xmm6, xmm5, 0x0F
16431f1e2261SMartin Matuska        shufps  xmm5, xmm13, 214
16441f1e2261SMartin Matuska        pshufd  xmm12, xmm5, 0x39
16451f1e2261SMartin Matuska        movdqa  xmm5, xmm14
16461f1e2261SMartin Matuska        shufps  xmm5, xmm15, 250
16471f1e2261SMartin Matuska        pblendw xmm6, xmm5, 0xCC
16481f1e2261SMartin Matuska        movdqa  xmm5, xmm15
16491f1e2261SMartin Matuska        punpcklqdq xmm5, xmm13
16501f1e2261SMartin Matuska        pblendw xmm5, xmm14, 0xC0
16511f1e2261SMartin Matuska        pshufd  xmm5, xmm5, 0x78
16521f1e2261SMartin Matuska        punpckhdq xmm13, xmm15
16531f1e2261SMartin Matuska        punpckldq xmm14, xmm13
16541f1e2261SMartin Matuska        pshufd  xmm15, xmm14, 0x1E
16551f1e2261SMartin Matuska        movdqa  xmm13, xmm6
16561f1e2261SMartin Matuska        movdqa  xmm14, xmm5
16571f1e2261SMartin Matuska        movdqa  xmm5, xmmword ptr [rsp+0x20]
16581f1e2261SMartin Matuska        movdqa  xmm6, xmmword ptr [rsp+0x40]
16591f1e2261SMartin Matuska        jmp     9b
16601f1e2261SMartin Matuska9:
16611f1e2261SMartin Matuska        pxor    xmm0, xmm2
16621f1e2261SMartin Matuska        pxor    xmm1, xmm3
16631f1e2261SMartin Matuska        pxor    xmm8, xmm10
16641f1e2261SMartin Matuska        pxor    xmm9, xmm11
16651f1e2261SMartin Matuska        mov     eax, r13d
16661f1e2261SMartin Matuska        cmp     rdx, r15
16671f1e2261SMartin Matuska        jne     2b
16681f1e2261SMartin Matuska        movups  xmmword ptr [rbx], xmm0
16691f1e2261SMartin Matuska        movups  xmmword ptr [rbx+0x10], xmm1
16701f1e2261SMartin Matuska        movups  xmmword ptr [rbx+0x20], xmm8
16711f1e2261SMartin Matuska        movups  xmmword ptr [rbx+0x30], xmm9
16721f1e2261SMartin Matuska        movdqa  xmm0, xmmword ptr [rsp+0x130]
16731f1e2261SMartin Matuska        movdqa  xmm1, xmmword ptr [rsp+0x110]
16741f1e2261SMartin Matuska        movdqa  xmm2, xmmword ptr [rsp+0x120]
16751f1e2261SMartin Matuska        movdqu  xmm3, xmmword ptr [rsp+0x118]
16761f1e2261SMartin Matuska        movdqu  xmm4, xmmword ptr [rsp+0x128]
16771f1e2261SMartin Matuska        blendvps xmm1, xmm3, xmm0
16781f1e2261SMartin Matuska        blendvps xmm2, xmm4, xmm0
16791f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x110], xmm1
16801f1e2261SMartin Matuska        movdqa  xmmword ptr [rsp+0x120], xmm2
16811f1e2261SMartin Matuska        add     rdi, 16
16821f1e2261SMartin Matuska        add     rbx, 64
16831f1e2261SMartin Matuska        sub     rsi, 2
16841f1e2261SMartin Matuska3:
16851f1e2261SMartin Matuska        test    esi, 0x1
16861f1e2261SMartin Matuska        je      4b
16871f1e2261SMartin Matuska        movups  xmm0, xmmword ptr [rcx]
16881f1e2261SMartin Matuska        movups  xmm1, xmmword ptr [rcx+0x10]
16891f1e2261SMartin Matuska        movd    xmm13, dword ptr [rsp+0x110]
16901f1e2261SMartin Matuska        pinsrd  xmm13, dword ptr [rsp+0x120], 1
16911f1e2261SMartin Matuska        pinsrd  xmm13, dword ptr [BLAKE3_BLOCK_LEN+rip], 2
16921f1e2261SMartin Matuska        movaps  xmm14, xmmword ptr [ROT8+rip]
16931f1e2261SMartin Matuska        movaps  xmm15, xmmword ptr [ROT16+rip]
16941f1e2261SMartin Matuska        mov     r8, qword ptr [rdi]
16951f1e2261SMartin Matuska        movzx   eax, byte ptr [rbp+0x40]
16961f1e2261SMartin Matuska        or      eax, r13d
16971f1e2261SMartin Matuska        xor     edx, edx
16981f1e2261SMartin Matuska2:
16991f1e2261SMartin Matuska        mov     r14d, eax
17001f1e2261SMartin Matuska        or      eax, r12d
17011f1e2261SMartin Matuska        add     rdx, 64
17021f1e2261SMartin Matuska        cmp     rdx, r15
17031f1e2261SMartin Matuska        cmovne  eax, r14d
17041f1e2261SMartin Matuska        movaps  xmm2, xmmword ptr [BLAKE3_IV+rip]
17051f1e2261SMartin Matuska        movaps  xmm3, xmm13
17061f1e2261SMartin Matuska        pinsrd  xmm3, eax, 3
17071f1e2261SMartin Matuska        movups  xmm4, xmmword ptr [r8+rdx-0x40]
17081f1e2261SMartin Matuska        movups  xmm5, xmmword ptr [r8+rdx-0x30]
17091f1e2261SMartin Matuska        movaps  xmm8, xmm4
17101f1e2261SMartin Matuska        shufps  xmm4, xmm5, 136
17111f1e2261SMartin Matuska        shufps  xmm8, xmm5, 221
17121f1e2261SMartin Matuska        movaps  xmm5, xmm8
17131f1e2261SMartin Matuska        movups  xmm6, xmmword ptr [r8+rdx-0x20]
17141f1e2261SMartin Matuska        movups  xmm7, xmmword ptr [r8+rdx-0x10]
17151f1e2261SMartin Matuska        movaps  xmm8, xmm6
17161f1e2261SMartin Matuska        shufps  xmm6, xmm7, 136
17171f1e2261SMartin Matuska        pshufd  xmm6, xmm6, 0x93
17181f1e2261SMartin Matuska        shufps  xmm8, xmm7, 221
17191f1e2261SMartin Matuska        pshufd  xmm7, xmm8, 0x93
17201f1e2261SMartin Matuska        mov     al, 7
17211f1e2261SMartin Matuska9:
17221f1e2261SMartin Matuska        paddd   xmm0, xmm4
17231f1e2261SMartin Matuska        paddd   xmm0, xmm1
17241f1e2261SMartin Matuska        pxor    xmm3, xmm0
17251f1e2261SMartin Matuska        pshufb  xmm3, xmm15
17261f1e2261SMartin Matuska        paddd   xmm2, xmm3
17271f1e2261SMartin Matuska        pxor    xmm1, xmm2
17281f1e2261SMartin Matuska        movdqa  xmm11, xmm1
17291f1e2261SMartin Matuska        pslld   xmm1, 20
17301f1e2261SMartin Matuska        psrld   xmm11, 12
17311f1e2261SMartin Matuska        por     xmm1, xmm11
17321f1e2261SMartin Matuska        paddd   xmm0, xmm5
17331f1e2261SMartin Matuska        paddd   xmm0, xmm1
17341f1e2261SMartin Matuska        pxor    xmm3, xmm0
17351f1e2261SMartin Matuska        pshufb  xmm3, xmm14
17361f1e2261SMartin Matuska        paddd   xmm2, xmm3
17371f1e2261SMartin Matuska        pxor    xmm1, xmm2
17381f1e2261SMartin Matuska        movdqa  xmm11, xmm1
17391f1e2261SMartin Matuska        pslld   xmm1, 25
17401f1e2261SMartin Matuska        psrld   xmm11, 7
17411f1e2261SMartin Matuska        por     xmm1, xmm11
17421f1e2261SMartin Matuska        pshufd  xmm0, xmm0, 0x93
17431f1e2261SMartin Matuska        pshufd  xmm3, xmm3, 0x4E
17441f1e2261SMartin Matuska        pshufd  xmm2, xmm2, 0x39
17451f1e2261SMartin Matuska        paddd   xmm0, xmm6
17461f1e2261SMartin Matuska        paddd   xmm0, xmm1
17471f1e2261SMartin Matuska        pxor    xmm3, xmm0
17481f1e2261SMartin Matuska        pshufb  xmm3, xmm15
17491f1e2261SMartin Matuska        paddd   xmm2, xmm3
17501f1e2261SMartin Matuska        pxor    xmm1, xmm2
17511f1e2261SMartin Matuska        movdqa  xmm11, xmm1
17521f1e2261SMartin Matuska        pslld   xmm1, 20
17531f1e2261SMartin Matuska        psrld   xmm11, 12
17541f1e2261SMartin Matuska        por     xmm1, xmm11
17551f1e2261SMartin Matuska        paddd   xmm0, xmm7
17561f1e2261SMartin Matuska        paddd   xmm0, xmm1
17571f1e2261SMartin Matuska        pxor    xmm3, xmm0
17581f1e2261SMartin Matuska        pshufb  xmm3, xmm14
17591f1e2261SMartin Matuska        paddd   xmm2, xmm3
17601f1e2261SMartin Matuska        pxor    xmm1, xmm2
17611f1e2261SMartin Matuska        movdqa  xmm11, xmm1
17621f1e2261SMartin Matuska        pslld   xmm1, 25
17631f1e2261SMartin Matuska        psrld   xmm11, 7
17641f1e2261SMartin Matuska        por     xmm1, xmm11
17651f1e2261SMartin Matuska        pshufd  xmm0, xmm0, 0x39
17661f1e2261SMartin Matuska        pshufd  xmm3, xmm3, 0x4E
17671f1e2261SMartin Matuska        pshufd  xmm2, xmm2, 0x93
17681f1e2261SMartin Matuska        dec     al
17691f1e2261SMartin Matuska        jz      9f
17701f1e2261SMartin Matuska        movdqa  xmm8, xmm4
17711f1e2261SMartin Matuska        shufps  xmm8, xmm5, 214
17721f1e2261SMartin Matuska        pshufd  xmm9, xmm4, 0x0F
17731f1e2261SMartin Matuska        pshufd  xmm4, xmm8, 0x39
17741f1e2261SMartin Matuska        movdqa  xmm8, xmm6
17751f1e2261SMartin Matuska        shufps  xmm8, xmm7, 250
17761f1e2261SMartin Matuska        pblendw xmm9, xmm8, 0xCC
17771f1e2261SMartin Matuska        movdqa  xmm8, xmm7
17781f1e2261SMartin Matuska        punpcklqdq xmm8, xmm5
17791f1e2261SMartin Matuska        pblendw xmm8, xmm6, 0xC0
17801f1e2261SMartin Matuska        pshufd  xmm8, xmm8, 0x78
17811f1e2261SMartin Matuska        punpckhdq xmm5, xmm7
17821f1e2261SMartin Matuska        punpckldq xmm6, xmm5
17831f1e2261SMartin Matuska        pshufd  xmm7, xmm6, 0x1E
17841f1e2261SMartin Matuska        movdqa  xmm5, xmm9
17851f1e2261SMartin Matuska        movdqa  xmm6, xmm8
17861f1e2261SMartin Matuska        jmp     9b
17871f1e2261SMartin Matuska9:
17881f1e2261SMartin Matuska        pxor    xmm0, xmm2
17891f1e2261SMartin Matuska        pxor    xmm1, xmm3
17901f1e2261SMartin Matuska        mov     eax, r13d
17911f1e2261SMartin Matuska        cmp     rdx, r15
17921f1e2261SMartin Matuska        jne     2b
17931f1e2261SMartin Matuska        movups  xmmword ptr [rbx], xmm0
17941f1e2261SMartin Matuska        movups  xmmword ptr [rbx+0x10], xmm1
17951f1e2261SMartin Matuska        jmp     4b
1796*15f0b8c3SMartin MatuskaSET_SIZE(zfs_blake3_hash_many_sse41)
1797*15f0b8c3SMartin Matuska
1798*15f0b8c3SMartin MatuskaENTRY_ALIGN(zfs_blake3_compress_in_place_sse41, 64)
1799dbd5678dSMartin Matuska        ENDBR
18001f1e2261SMartin Matuska        movups  xmm0, xmmword ptr [rdi]
18011f1e2261SMartin Matuska        movups  xmm1, xmmword ptr [rdi+0x10]
18021f1e2261SMartin Matuska        movaps  xmm2, xmmword ptr [BLAKE3_IV+rip]
18031f1e2261SMartin Matuska        shl     r8, 32
18041f1e2261SMartin Matuska        add     rdx, r8
18051f1e2261SMartin Matuska        movq    xmm3, rcx
18061f1e2261SMartin Matuska        movq    xmm4, rdx
18071f1e2261SMartin Matuska        punpcklqdq xmm3, xmm4
18081f1e2261SMartin Matuska        movups  xmm4, xmmword ptr [rsi]
18091f1e2261SMartin Matuska        movups  xmm5, xmmword ptr [rsi+0x10]
18101f1e2261SMartin Matuska        movaps  xmm8, xmm4
18111f1e2261SMartin Matuska        shufps  xmm4, xmm5, 136
18121f1e2261SMartin Matuska        shufps  xmm8, xmm5, 221
18131f1e2261SMartin Matuska        movaps  xmm5, xmm8
18141f1e2261SMartin Matuska        movups  xmm6, xmmword ptr [rsi+0x20]
18151f1e2261SMartin Matuska        movups  xmm7, xmmword ptr [rsi+0x30]
18161f1e2261SMartin Matuska        movaps  xmm8, xmm6
18171f1e2261SMartin Matuska        shufps  xmm6, xmm7, 136
18181f1e2261SMartin Matuska        pshufd  xmm6, xmm6, 0x93
18191f1e2261SMartin Matuska        shufps  xmm8, xmm7, 221
18201f1e2261SMartin Matuska        pshufd  xmm7, xmm8, 0x93
18211f1e2261SMartin Matuska        movaps  xmm14, xmmword ptr [ROT8+rip]
18221f1e2261SMartin Matuska        movaps  xmm15, xmmword ptr [ROT16+rip]
18231f1e2261SMartin Matuska        mov     al, 7
18241f1e2261SMartin Matuska9:
18251f1e2261SMartin Matuska        paddd   xmm0, xmm4
18261f1e2261SMartin Matuska        paddd   xmm0, xmm1
18271f1e2261SMartin Matuska        pxor    xmm3, xmm0
18281f1e2261SMartin Matuska        pshufb  xmm3, xmm15
18291f1e2261SMartin Matuska        paddd   xmm2, xmm3
18301f1e2261SMartin Matuska        pxor    xmm1, xmm2
18311f1e2261SMartin Matuska        movdqa  xmm11, xmm1
18321f1e2261SMartin Matuska        pslld   xmm1, 20
18331f1e2261SMartin Matuska        psrld   xmm11, 12
18341f1e2261SMartin Matuska        por     xmm1, xmm11
18351f1e2261SMartin Matuska        paddd   xmm0, xmm5
18361f1e2261SMartin Matuska        paddd   xmm0, xmm1
18371f1e2261SMartin Matuska        pxor    xmm3, xmm0
18381f1e2261SMartin Matuska        pshufb  xmm3, xmm14
18391f1e2261SMartin Matuska        paddd   xmm2, xmm3
18401f1e2261SMartin Matuska        pxor    xmm1, xmm2
18411f1e2261SMartin Matuska        movdqa  xmm11, xmm1
18421f1e2261SMartin Matuska        pslld   xmm1, 25
18431f1e2261SMartin Matuska        psrld   xmm11, 7
18441f1e2261SMartin Matuska        por     xmm1, xmm11
18451f1e2261SMartin Matuska        pshufd  xmm0, xmm0, 0x93
18461f1e2261SMartin Matuska        pshufd  xmm3, xmm3, 0x4E
18471f1e2261SMartin Matuska        pshufd  xmm2, xmm2, 0x39
18481f1e2261SMartin Matuska        paddd   xmm0, xmm6
18491f1e2261SMartin Matuska        paddd   xmm0, xmm1
18501f1e2261SMartin Matuska        pxor    xmm3, xmm0
18511f1e2261SMartin Matuska        pshufb  xmm3, xmm15
18521f1e2261SMartin Matuska        paddd   xmm2, xmm3
18531f1e2261SMartin Matuska        pxor    xmm1, xmm2
18541f1e2261SMartin Matuska        movdqa  xmm11, xmm1
18551f1e2261SMartin Matuska        pslld   xmm1, 20
18561f1e2261SMartin Matuska        psrld   xmm11, 12
18571f1e2261SMartin Matuska        por     xmm1, xmm11
18581f1e2261SMartin Matuska        paddd   xmm0, xmm7
18591f1e2261SMartin Matuska        paddd   xmm0, xmm1
18601f1e2261SMartin Matuska        pxor    xmm3, xmm0
18611f1e2261SMartin Matuska        pshufb  xmm3, xmm14
18621f1e2261SMartin Matuska        paddd   xmm2, xmm3
18631f1e2261SMartin Matuska        pxor    xmm1, xmm2
18641f1e2261SMartin Matuska        movdqa  xmm11, xmm1
18651f1e2261SMartin Matuska        pslld   xmm1, 25
18661f1e2261SMartin Matuska        psrld   xmm11, 7
18671f1e2261SMartin Matuska        por     xmm1, xmm11
18681f1e2261SMartin Matuska        pshufd  xmm0, xmm0, 0x39
18691f1e2261SMartin Matuska        pshufd  xmm3, xmm3, 0x4E
18701f1e2261SMartin Matuska        pshufd  xmm2, xmm2, 0x93
18711f1e2261SMartin Matuska        dec     al
18721f1e2261SMartin Matuska        jz      9f
18731f1e2261SMartin Matuska        movdqa  xmm8, xmm4
18741f1e2261SMartin Matuska        shufps  xmm8, xmm5, 214
18751f1e2261SMartin Matuska        pshufd  xmm9, xmm4, 0x0F
18761f1e2261SMartin Matuska        pshufd  xmm4, xmm8, 0x39
18771f1e2261SMartin Matuska        movdqa  xmm8, xmm6
18781f1e2261SMartin Matuska        shufps  xmm8, xmm7, 250
18791f1e2261SMartin Matuska        pblendw xmm9, xmm8, 0xCC
18801f1e2261SMartin Matuska        movdqa  xmm8, xmm7
18811f1e2261SMartin Matuska        punpcklqdq xmm8, xmm5
18821f1e2261SMartin Matuska        pblendw xmm8, xmm6, 0xC0
18831f1e2261SMartin Matuska        pshufd  xmm8, xmm8, 0x78
18841f1e2261SMartin Matuska        punpckhdq xmm5, xmm7
18851f1e2261SMartin Matuska        punpckldq xmm6, xmm5
18861f1e2261SMartin Matuska        pshufd  xmm7, xmm6, 0x1E
18871f1e2261SMartin Matuska        movdqa  xmm5, xmm9
18881f1e2261SMartin Matuska        movdqa  xmm6, xmm8
18891f1e2261SMartin Matuska        jmp     9b
18901f1e2261SMartin Matuska9:
18911f1e2261SMartin Matuska        pxor    xmm0, xmm2
18921f1e2261SMartin Matuska        pxor    xmm1, xmm3
18931f1e2261SMartin Matuska        movups  xmmword ptr [rdi], xmm0
18941f1e2261SMartin Matuska        movups  xmmword ptr [rdi+0x10], xmm1
1895a0b956f5SMartin Matuska        RET
1896*15f0b8c3SMartin MatuskaSET_SIZE(zfs_blake3_compress_in_place_sse41)
1897*15f0b8c3SMartin Matuska
1898*15f0b8c3SMartin MatuskaENTRY_ALIGN(zfs_blake3_compress_xof_sse41, 64)
1899dbd5678dSMartin Matuska        ENDBR
19001f1e2261SMartin Matuska        movups  xmm0, xmmword ptr [rdi]
19011f1e2261SMartin Matuska        movups  xmm1, xmmword ptr [rdi+0x10]
19021f1e2261SMartin Matuska        movaps  xmm2, xmmword ptr [BLAKE3_IV+rip]
19031f1e2261SMartin Matuska        movzx   eax, r8b
19041f1e2261SMartin Matuska        movzx   edx, dl
19051f1e2261SMartin Matuska        shl     rax, 32
19061f1e2261SMartin Matuska        add     rdx, rax
19071f1e2261SMartin Matuska        movq    xmm3, rcx
19081f1e2261SMartin Matuska        movq    xmm4, rdx
19091f1e2261SMartin Matuska        punpcklqdq xmm3, xmm4
19101f1e2261SMartin Matuska        movups  xmm4, xmmword ptr [rsi]
19111f1e2261SMartin Matuska        movups  xmm5, xmmword ptr [rsi+0x10]
19121f1e2261SMartin Matuska        movaps  xmm8, xmm4
19131f1e2261SMartin Matuska        shufps  xmm4, xmm5, 136
19141f1e2261SMartin Matuska        shufps  xmm8, xmm5, 221
19151f1e2261SMartin Matuska        movaps  xmm5, xmm8
19161f1e2261SMartin Matuska        movups  xmm6, xmmword ptr [rsi+0x20]
19171f1e2261SMartin Matuska        movups  xmm7, xmmword ptr [rsi+0x30]
19181f1e2261SMartin Matuska        movaps  xmm8, xmm6
19191f1e2261SMartin Matuska        shufps  xmm6, xmm7, 136
19201f1e2261SMartin Matuska        pshufd  xmm6, xmm6, 0x93
19211f1e2261SMartin Matuska        shufps  xmm8, xmm7, 221
19221f1e2261SMartin Matuska        pshufd  xmm7, xmm8, 0x93
19231f1e2261SMartin Matuska        movaps  xmm14, xmmword ptr [ROT8+rip]
19241f1e2261SMartin Matuska        movaps  xmm15, xmmword ptr [ROT16+rip]
19251f1e2261SMartin Matuska        mov     al, 7
19261f1e2261SMartin Matuska9:
19271f1e2261SMartin Matuska        paddd   xmm0, xmm4
19281f1e2261SMartin Matuska        paddd   xmm0, xmm1
19291f1e2261SMartin Matuska        pxor    xmm3, xmm0
19301f1e2261SMartin Matuska        pshufb  xmm3, xmm15
19311f1e2261SMartin Matuska        paddd   xmm2, xmm3
19321f1e2261SMartin Matuska        pxor    xmm1, xmm2
19331f1e2261SMartin Matuska        movdqa  xmm11, xmm1
19341f1e2261SMartin Matuska        pslld   xmm1, 20
19351f1e2261SMartin Matuska        psrld   xmm11, 12
19361f1e2261SMartin Matuska        por     xmm1, xmm11
19371f1e2261SMartin Matuska        paddd   xmm0, xmm5
19381f1e2261SMartin Matuska        paddd   xmm0, xmm1
19391f1e2261SMartin Matuska        pxor    xmm3, xmm0
19401f1e2261SMartin Matuska        pshufb  xmm3, xmm14
19411f1e2261SMartin Matuska        paddd   xmm2, xmm3
19421f1e2261SMartin Matuska        pxor    xmm1, xmm2
19431f1e2261SMartin Matuska        movdqa  xmm11, xmm1
19441f1e2261SMartin Matuska        pslld   xmm1, 25
19451f1e2261SMartin Matuska        psrld   xmm11, 7
19461f1e2261SMartin Matuska        por     xmm1, xmm11
19471f1e2261SMartin Matuska        pshufd  xmm0, xmm0, 0x93
19481f1e2261SMartin Matuska        pshufd  xmm3, xmm3, 0x4E
19491f1e2261SMartin Matuska        pshufd  xmm2, xmm2, 0x39
19501f1e2261SMartin Matuska        paddd   xmm0, xmm6
19511f1e2261SMartin Matuska        paddd   xmm0, xmm1
19521f1e2261SMartin Matuska        pxor    xmm3, xmm0
19531f1e2261SMartin Matuska        pshufb  xmm3, xmm15
19541f1e2261SMartin Matuska        paddd   xmm2, xmm3
19551f1e2261SMartin Matuska        pxor    xmm1, xmm2
19561f1e2261SMartin Matuska        movdqa  xmm11, xmm1
19571f1e2261SMartin Matuska        pslld   xmm1, 20
19581f1e2261SMartin Matuska        psrld   xmm11, 12
19591f1e2261SMartin Matuska        por     xmm1, xmm11
19601f1e2261SMartin Matuska        paddd   xmm0, xmm7
19611f1e2261SMartin Matuska        paddd   xmm0, xmm1
19621f1e2261SMartin Matuska        pxor    xmm3, xmm0
19631f1e2261SMartin Matuska        pshufb  xmm3, xmm14
19641f1e2261SMartin Matuska        paddd   xmm2, xmm3
19651f1e2261SMartin Matuska        pxor    xmm1, xmm2
19661f1e2261SMartin Matuska        movdqa  xmm11, xmm1
19671f1e2261SMartin Matuska        pslld   xmm1, 25
19681f1e2261SMartin Matuska        psrld   xmm11, 7
19691f1e2261SMartin Matuska        por     xmm1, xmm11
19701f1e2261SMartin Matuska        pshufd  xmm0, xmm0, 0x39
19711f1e2261SMartin Matuska        pshufd  xmm3, xmm3, 0x4E
19721f1e2261SMartin Matuska        pshufd  xmm2, xmm2, 0x93
19731f1e2261SMartin Matuska        dec     al
19741f1e2261SMartin Matuska        jz      9f
19751f1e2261SMartin Matuska        movdqa  xmm8, xmm4
19761f1e2261SMartin Matuska        shufps  xmm8, xmm5, 214
19771f1e2261SMartin Matuska        pshufd  xmm9, xmm4, 0x0F
19781f1e2261SMartin Matuska        pshufd  xmm4, xmm8, 0x39
19791f1e2261SMartin Matuska        movdqa  xmm8, xmm6
19801f1e2261SMartin Matuska        shufps  xmm8, xmm7, 250
19811f1e2261SMartin Matuska        pblendw xmm9, xmm8, 0xCC
19821f1e2261SMartin Matuska        movdqa  xmm8, xmm7
19831f1e2261SMartin Matuska        punpcklqdq xmm8, xmm5
19841f1e2261SMartin Matuska        pblendw xmm8, xmm6, 0xC0
19851f1e2261SMartin Matuska        pshufd  xmm8, xmm8, 0x78
19861f1e2261SMartin Matuska        punpckhdq xmm5, xmm7
19871f1e2261SMartin Matuska        punpckldq xmm6, xmm5
19881f1e2261SMartin Matuska        pshufd  xmm7, xmm6, 0x1E
19891f1e2261SMartin Matuska        movdqa  xmm5, xmm9
19901f1e2261SMartin Matuska        movdqa  xmm6, xmm8
19911f1e2261SMartin Matuska        jmp     9b
19921f1e2261SMartin Matuska9:
19931f1e2261SMartin Matuska        movdqu  xmm4, xmmword ptr [rdi]
19941f1e2261SMartin Matuska        movdqu  xmm5, xmmword ptr [rdi+0x10]
19951f1e2261SMartin Matuska        pxor    xmm0, xmm2
19961f1e2261SMartin Matuska        pxor    xmm1, xmm3
19971f1e2261SMartin Matuska        pxor    xmm2, xmm4
19981f1e2261SMartin Matuska        pxor    xmm3, xmm5
19991f1e2261SMartin Matuska        movups  xmmword ptr [r9], xmm0
20001f1e2261SMartin Matuska        movups  xmmword ptr [r9+0x10], xmm1
20011f1e2261SMartin Matuska        movups  xmmword ptr [r9+0x20], xmm2
20021f1e2261SMartin Matuska        movups  xmmword ptr [r9+0x30], xmm3
2003a0b956f5SMartin Matuska        RET
2004*15f0b8c3SMartin MatuskaSET_SIZE(zfs_blake3_compress_xof_sse41)
20051f1e2261SMartin Matuska
2006*15f0b8c3SMartin MatuskaSECTION_STATIC
20071f1e2261SMartin Matuska
20081f1e2261SMartin Matuska.p2align  6
20091f1e2261SMartin MatuskaBLAKE3_IV:
20101f1e2261SMartin Matuska        .long  0x6A09E667, 0xBB67AE85
20111f1e2261SMartin Matuska        .long  0x3C6EF372, 0xA54FF53A
20121f1e2261SMartin MatuskaROT16:
20131f1e2261SMartin Matuska        .byte  2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13
20141f1e2261SMartin MatuskaROT8:
20151f1e2261SMartin Matuska        .byte  1, 2, 3, 0, 5, 6, 7, 4, 9, 10, 11, 8, 13, 14, 15, 12
20161f1e2261SMartin MatuskaADD0:
20171f1e2261SMartin Matuska        .long  0, 1, 2, 3
20181f1e2261SMartin MatuskaADD1:
20191f1e2261SMartin Matuska	.long  4, 4, 4, 4
20201f1e2261SMartin MatuskaBLAKE3_IV_0:
20211f1e2261SMartin Matuska	.long  0x6A09E667, 0x6A09E667, 0x6A09E667, 0x6A09E667
20221f1e2261SMartin MatuskaBLAKE3_IV_1:
20231f1e2261SMartin Matuska	.long  0xBB67AE85, 0xBB67AE85, 0xBB67AE85, 0xBB67AE85
20241f1e2261SMartin MatuskaBLAKE3_IV_2:
20251f1e2261SMartin Matuska	.long  0x3C6EF372, 0x3C6EF372, 0x3C6EF372, 0x3C6EF372
20261f1e2261SMartin MatuskaBLAKE3_IV_3:
20271f1e2261SMartin Matuska	.long  0xA54FF53A, 0xA54FF53A, 0xA54FF53A, 0xA54FF53A
20281f1e2261SMartin MatuskaBLAKE3_BLOCK_LEN:
20291f1e2261SMartin Matuska	.long  64, 64, 64, 64
20301f1e2261SMartin MatuskaCMP_MSB_MASK:
20311f1e2261SMartin Matuska	.long  0x80000000, 0x80000000, 0x80000000, 0x80000000
20321f1e2261SMartin Matuska
20331f1e2261SMartin Matuska#endif	/* HAVE_SSE4_1 */
20341f1e2261SMartin Matuska
20351f1e2261SMartin Matuska#ifdef __ELF__
20361f1e2261SMartin Matuska.section .note.GNU-stack,"",%progbits
20371f1e2261SMartin Matuska#endif
2038