1*53a2e263SMartin Matuska// SPDX-License-Identifier: Apache-2.0 2*53a2e263SMartin Matuska// This file is generated from a similarly-named Perl script in the BoringSSL 3*53a2e263SMartin Matuska// source tree. Do not edit by hand. 4*53a2e263SMartin Matuska 5*53a2e263SMartin Matuska#if defined(__x86_64__) && defined(HAVE_AVX) && \ 6*53a2e263SMartin Matuska defined(HAVE_VAES) && defined(HAVE_VPCLMULQDQ) 7*53a2e263SMartin Matuska 8*53a2e263SMartin Matuska#define _ASM 9*53a2e263SMartin Matuska#include <sys/asm_linkage.h> 10*53a2e263SMartin Matuska 11*53a2e263SMartin Matuska/* Windows userland links with OpenSSL */ 12*53a2e263SMartin Matuska#if !defined (_WIN32) || defined (_KERNEL) 13*53a2e263SMartin Matuska 14*53a2e263SMartin Matuska.section .rodata 15*53a2e263SMartin Matuska.balign 16 16*53a2e263SMartin Matuska 17*53a2e263SMartin Matuska 18*53a2e263SMartin Matuska.Lbswap_mask: 19*53a2e263SMartin Matuska.quad 0x08090a0b0c0d0e0f, 0x0001020304050607 20*53a2e263SMartin Matuska 21*53a2e263SMartin Matuska 22*53a2e263SMartin Matuska 23*53a2e263SMartin Matuska 24*53a2e263SMartin Matuska 25*53a2e263SMartin Matuska 26*53a2e263SMartin Matuska 27*53a2e263SMartin Matuska 28*53a2e263SMartin Matuska.Lgfpoly: 29*53a2e263SMartin Matuska.quad 1, 0xc200000000000000 30*53a2e263SMartin Matuska 31*53a2e263SMartin Matuska 32*53a2e263SMartin Matuska.Lgfpoly_and_internal_carrybit: 33*53a2e263SMartin Matuska.quad 1, 0xc200000000000001 34*53a2e263SMartin Matuska 35*53a2e263SMartin Matuska.balign 32 36*53a2e263SMartin Matuska 37*53a2e263SMartin Matuska.Lctr_pattern: 38*53a2e263SMartin Matuska.quad 0, 0 39*53a2e263SMartin Matuska.quad 1, 0 40*53a2e263SMartin Matuska.Linc_2blocks: 41*53a2e263SMartin Matuska.quad 2, 0 42*53a2e263SMartin Matuska.quad 2, 0 43*53a2e263SMartin Matuska 44*53a2e263SMartin MatuskaENTRY_ALIGN(gcm_init_vpclmulqdq_avx2, 32) 45*53a2e263SMartin Matuska.cfi_startproc 46*53a2e263SMartin Matuska 47*53a2e263SMartin MatuskaENDBR 48*53a2e263SMartin Matuska 49*53a2e263SMartin Matuska 50*53a2e263SMartin Matuska 51*53a2e263SMartin Matuska 52*53a2e263SMartin Matuska 53*53a2e263SMartin Matuska vmovdqu (%rsi),%xmm3 54*53a2e263SMartin Matuska // KCF/ICP stores H in network byte order with the hi qword first 55*53a2e263SMartin Matuska // so we need to swap all bytes, not the 2 qwords. 56*53a2e263SMartin Matuska vmovdqu .Lbswap_mask(%rip),%xmm4 57*53a2e263SMartin Matuska vpshufb %xmm4,%xmm3,%xmm3 58*53a2e263SMartin Matuska 59*53a2e263SMartin Matuska 60*53a2e263SMartin Matuska 61*53a2e263SMartin Matuska 62*53a2e263SMartin Matuska 63*53a2e263SMartin Matuska vpshufd $0xd3,%xmm3,%xmm0 64*53a2e263SMartin Matuska vpsrad $31,%xmm0,%xmm0 65*53a2e263SMartin Matuska vpaddq %xmm3,%xmm3,%xmm3 66*53a2e263SMartin Matuska vpand .Lgfpoly_and_internal_carrybit(%rip),%xmm0,%xmm0 67*53a2e263SMartin Matuska vpxor %xmm0,%xmm3,%xmm3 68*53a2e263SMartin Matuska 69*53a2e263SMartin Matuska vbroadcasti128 .Lgfpoly(%rip),%ymm6 70*53a2e263SMartin Matuska 71*53a2e263SMartin Matuska 72*53a2e263SMartin Matuska vpclmulqdq $0x00,%xmm3,%xmm3,%xmm0 73*53a2e263SMartin Matuska vpclmulqdq $0x11,%xmm3,%xmm3,%xmm5 74*53a2e263SMartin Matuska vpclmulqdq $0x01,%xmm0,%xmm6,%xmm1 75*53a2e263SMartin Matuska vpshufd $0x4e,%xmm0,%xmm0 76*53a2e263SMartin Matuska vpxor %xmm0,%xmm1,%xmm1 77*53a2e263SMartin Matuska vpclmulqdq $0x01,%xmm1,%xmm6,%xmm0 78*53a2e263SMartin Matuska vpshufd $0x4e,%xmm1,%xmm1 79*53a2e263SMartin Matuska vpxor %xmm1,%xmm5,%xmm5 80*53a2e263SMartin Matuska vpxor %xmm0,%xmm5,%xmm5 81*53a2e263SMartin Matuska 82*53a2e263SMartin Matuska 83*53a2e263SMartin Matuska 84*53a2e263SMartin Matuska vinserti128 $1,%xmm3,%ymm5,%ymm3 85*53a2e263SMartin Matuska vinserti128 $1,%xmm5,%ymm5,%ymm5 86*53a2e263SMartin Matuska 87*53a2e263SMartin Matuska 88*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm5,%ymm3,%ymm0 89*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm5,%ymm3,%ymm1 90*53a2e263SMartin Matuska vpclmulqdq $0x10,%ymm5,%ymm3,%ymm2 91*53a2e263SMartin Matuska vpxor %ymm2,%ymm1,%ymm1 92*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm0,%ymm6,%ymm2 93*53a2e263SMartin Matuska vpshufd $0x4e,%ymm0,%ymm0 94*53a2e263SMartin Matuska vpxor %ymm0,%ymm1,%ymm1 95*53a2e263SMartin Matuska vpxor %ymm2,%ymm1,%ymm1 96*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm5,%ymm3,%ymm4 97*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm1,%ymm6,%ymm0 98*53a2e263SMartin Matuska vpshufd $0x4e,%ymm1,%ymm1 99*53a2e263SMartin Matuska vpxor %ymm1,%ymm4,%ymm4 100*53a2e263SMartin Matuska vpxor %ymm0,%ymm4,%ymm4 101*53a2e263SMartin Matuska 102*53a2e263SMartin Matuska 103*53a2e263SMartin Matuska 104*53a2e263SMartin Matuska vmovdqu %ymm3,96(%rdi) 105*53a2e263SMartin Matuska vmovdqu %ymm4,64(%rdi) 106*53a2e263SMartin Matuska 107*53a2e263SMartin Matuska 108*53a2e263SMartin Matuska 109*53a2e263SMartin Matuska vpunpcklqdq %ymm3,%ymm4,%ymm0 110*53a2e263SMartin Matuska vpunpckhqdq %ymm3,%ymm4,%ymm1 111*53a2e263SMartin Matuska vpxor %ymm1,%ymm0,%ymm0 112*53a2e263SMartin Matuska vmovdqu %ymm0,128+32(%rdi) 113*53a2e263SMartin Matuska 114*53a2e263SMartin Matuska 115*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm5,%ymm4,%ymm0 116*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm5,%ymm4,%ymm1 117*53a2e263SMartin Matuska vpclmulqdq $0x10,%ymm5,%ymm4,%ymm2 118*53a2e263SMartin Matuska vpxor %ymm2,%ymm1,%ymm1 119*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm0,%ymm6,%ymm2 120*53a2e263SMartin Matuska vpshufd $0x4e,%ymm0,%ymm0 121*53a2e263SMartin Matuska vpxor %ymm0,%ymm1,%ymm1 122*53a2e263SMartin Matuska vpxor %ymm2,%ymm1,%ymm1 123*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm5,%ymm4,%ymm3 124*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm1,%ymm6,%ymm0 125*53a2e263SMartin Matuska vpshufd $0x4e,%ymm1,%ymm1 126*53a2e263SMartin Matuska vpxor %ymm1,%ymm3,%ymm3 127*53a2e263SMartin Matuska vpxor %ymm0,%ymm3,%ymm3 128*53a2e263SMartin Matuska 129*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm5,%ymm3,%ymm0 130*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm5,%ymm3,%ymm1 131*53a2e263SMartin Matuska vpclmulqdq $0x10,%ymm5,%ymm3,%ymm2 132*53a2e263SMartin Matuska vpxor %ymm2,%ymm1,%ymm1 133*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm0,%ymm6,%ymm2 134*53a2e263SMartin Matuska vpshufd $0x4e,%ymm0,%ymm0 135*53a2e263SMartin Matuska vpxor %ymm0,%ymm1,%ymm1 136*53a2e263SMartin Matuska vpxor %ymm2,%ymm1,%ymm1 137*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm5,%ymm3,%ymm4 138*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm1,%ymm6,%ymm0 139*53a2e263SMartin Matuska vpshufd $0x4e,%ymm1,%ymm1 140*53a2e263SMartin Matuska vpxor %ymm1,%ymm4,%ymm4 141*53a2e263SMartin Matuska vpxor %ymm0,%ymm4,%ymm4 142*53a2e263SMartin Matuska 143*53a2e263SMartin Matuska vmovdqu %ymm3,32(%rdi) 144*53a2e263SMartin Matuska vmovdqu %ymm4,0(%rdi) 145*53a2e263SMartin Matuska 146*53a2e263SMartin Matuska 147*53a2e263SMartin Matuska 148*53a2e263SMartin Matuska vpunpcklqdq %ymm3,%ymm4,%ymm0 149*53a2e263SMartin Matuska vpunpckhqdq %ymm3,%ymm4,%ymm1 150*53a2e263SMartin Matuska vpxor %ymm1,%ymm0,%ymm0 151*53a2e263SMartin Matuska vmovdqu %ymm0,128(%rdi) 152*53a2e263SMartin Matuska 153*53a2e263SMartin Matuska vzeroupper 154*53a2e263SMartin Matuska RET 155*53a2e263SMartin Matuska 156*53a2e263SMartin Matuska.cfi_endproc 157*53a2e263SMartin MatuskaSET_SIZE(gcm_init_vpclmulqdq_avx2) 158*53a2e263SMartin MatuskaENTRY_ALIGN(gcm_gmult_vpclmulqdq_avx2, 32) 159*53a2e263SMartin Matuska.cfi_startproc 160*53a2e263SMartin Matuska 161*53a2e263SMartin MatuskaENDBR 162*53a2e263SMartin Matuska 163*53a2e263SMartin Matuska 164*53a2e263SMartin Matuska 165*53a2e263SMartin Matuska vmovdqu (%rdi),%xmm0 166*53a2e263SMartin Matuska vmovdqu .Lbswap_mask(%rip),%xmm1 167*53a2e263SMartin Matuska vmovdqu 128-16(%rsi),%xmm2 168*53a2e263SMartin Matuska vmovdqu .Lgfpoly(%rip),%xmm3 169*53a2e263SMartin Matuska vpshufb %xmm1,%xmm0,%xmm0 170*53a2e263SMartin Matuska 171*53a2e263SMartin Matuska vpclmulqdq $0x00,%xmm2,%xmm0,%xmm4 172*53a2e263SMartin Matuska vpclmulqdq $0x01,%xmm2,%xmm0,%xmm5 173*53a2e263SMartin Matuska vpclmulqdq $0x10,%xmm2,%xmm0,%xmm6 174*53a2e263SMartin Matuska vpxor %xmm6,%xmm5,%xmm5 175*53a2e263SMartin Matuska vpclmulqdq $0x01,%xmm4,%xmm3,%xmm6 176*53a2e263SMartin Matuska vpshufd $0x4e,%xmm4,%xmm4 177*53a2e263SMartin Matuska vpxor %xmm4,%xmm5,%xmm5 178*53a2e263SMartin Matuska vpxor %xmm6,%xmm5,%xmm5 179*53a2e263SMartin Matuska vpclmulqdq $0x11,%xmm2,%xmm0,%xmm0 180*53a2e263SMartin Matuska vpclmulqdq $0x01,%xmm5,%xmm3,%xmm4 181*53a2e263SMartin Matuska vpshufd $0x4e,%xmm5,%xmm5 182*53a2e263SMartin Matuska vpxor %xmm5,%xmm0,%xmm0 183*53a2e263SMartin Matuska vpxor %xmm4,%xmm0,%xmm0 184*53a2e263SMartin Matuska 185*53a2e263SMartin Matuska 186*53a2e263SMartin Matuska vpshufb %xmm1,%xmm0,%xmm0 187*53a2e263SMartin Matuska vmovdqu %xmm0,(%rdi) 188*53a2e263SMartin Matuska 189*53a2e263SMartin Matuska 190*53a2e263SMartin Matuska RET 191*53a2e263SMartin Matuska 192*53a2e263SMartin Matuska.cfi_endproc 193*53a2e263SMartin MatuskaSET_SIZE(gcm_gmult_vpclmulqdq_avx2) 194*53a2e263SMartin MatuskaENTRY_ALIGN(gcm_ghash_vpclmulqdq_avx2, 32) 195*53a2e263SMartin Matuska.cfi_startproc 196*53a2e263SMartin Matuska 197*53a2e263SMartin MatuskaENDBR 198*53a2e263SMartin Matuska 199*53a2e263SMartin Matuska 200*53a2e263SMartin Matuska 201*53a2e263SMartin Matuska 202*53a2e263SMartin Matuska 203*53a2e263SMartin Matuska 204*53a2e263SMartin Matuska vmovdqu .Lbswap_mask(%rip),%xmm6 205*53a2e263SMartin Matuska vmovdqu .Lgfpoly(%rip),%xmm7 206*53a2e263SMartin Matuska 207*53a2e263SMartin Matuska 208*53a2e263SMartin Matuska vmovdqu (%rdi),%xmm5 209*53a2e263SMartin Matuska vpshufb %xmm6,%xmm5,%xmm5 210*53a2e263SMartin Matuska 211*53a2e263SMartin Matuska 212*53a2e263SMartin Matuska cmpq $32,%rcx 213*53a2e263SMartin Matuska jb .Lghash_lastblock 214*53a2e263SMartin Matuska 215*53a2e263SMartin Matuska 216*53a2e263SMartin Matuska 217*53a2e263SMartin Matuska vinserti128 $1,%xmm6,%ymm6,%ymm6 218*53a2e263SMartin Matuska vinserti128 $1,%xmm7,%ymm7,%ymm7 219*53a2e263SMartin Matuska 220*53a2e263SMartin Matuska cmpq $127,%rcx 221*53a2e263SMartin Matuska jbe .Lghash_loop_1x 222*53a2e263SMartin Matuska 223*53a2e263SMartin Matuska 224*53a2e263SMartin Matuska vmovdqu 128(%rsi),%ymm8 225*53a2e263SMartin Matuska vmovdqu 128+32(%rsi),%ymm9 226*53a2e263SMartin Matuska.Lghash_loop_4x: 227*53a2e263SMartin Matuska 228*53a2e263SMartin Matuska vmovdqu 0(%rdx),%ymm1 229*53a2e263SMartin Matuska vpshufb %ymm6,%ymm1,%ymm1 230*53a2e263SMartin Matuska vmovdqu 0(%rsi),%ymm2 231*53a2e263SMartin Matuska vpxor %ymm5,%ymm1,%ymm1 232*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm2,%ymm1,%ymm3 233*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm2,%ymm1,%ymm5 234*53a2e263SMartin Matuska vpunpckhqdq %ymm1,%ymm1,%ymm0 235*53a2e263SMartin Matuska vpxor %ymm1,%ymm0,%ymm0 236*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm8,%ymm0,%ymm4 237*53a2e263SMartin Matuska 238*53a2e263SMartin Matuska vmovdqu 32(%rdx),%ymm1 239*53a2e263SMartin Matuska vpshufb %ymm6,%ymm1,%ymm1 240*53a2e263SMartin Matuska vmovdqu 32(%rsi),%ymm2 241*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm2,%ymm1,%ymm0 242*53a2e263SMartin Matuska vpxor %ymm0,%ymm3,%ymm3 243*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm2,%ymm1,%ymm0 244*53a2e263SMartin Matuska vpxor %ymm0,%ymm5,%ymm5 245*53a2e263SMartin Matuska vpunpckhqdq %ymm1,%ymm1,%ymm0 246*53a2e263SMartin Matuska vpxor %ymm1,%ymm0,%ymm0 247*53a2e263SMartin Matuska vpclmulqdq $0x10,%ymm8,%ymm0,%ymm0 248*53a2e263SMartin Matuska vpxor %ymm0,%ymm4,%ymm4 249*53a2e263SMartin Matuska 250*53a2e263SMartin Matuska vmovdqu 64(%rdx),%ymm1 251*53a2e263SMartin Matuska vpshufb %ymm6,%ymm1,%ymm1 252*53a2e263SMartin Matuska vmovdqu 64(%rsi),%ymm2 253*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm2,%ymm1,%ymm0 254*53a2e263SMartin Matuska vpxor %ymm0,%ymm3,%ymm3 255*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm2,%ymm1,%ymm0 256*53a2e263SMartin Matuska vpxor %ymm0,%ymm5,%ymm5 257*53a2e263SMartin Matuska vpunpckhqdq %ymm1,%ymm1,%ymm0 258*53a2e263SMartin Matuska vpxor %ymm1,%ymm0,%ymm0 259*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm9,%ymm0,%ymm0 260*53a2e263SMartin Matuska vpxor %ymm0,%ymm4,%ymm4 261*53a2e263SMartin Matuska 262*53a2e263SMartin Matuska 263*53a2e263SMartin Matuska vmovdqu 96(%rdx),%ymm1 264*53a2e263SMartin Matuska vpshufb %ymm6,%ymm1,%ymm1 265*53a2e263SMartin Matuska vmovdqu 96(%rsi),%ymm2 266*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm2,%ymm1,%ymm0 267*53a2e263SMartin Matuska vpxor %ymm0,%ymm3,%ymm3 268*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm2,%ymm1,%ymm0 269*53a2e263SMartin Matuska vpxor %ymm0,%ymm5,%ymm5 270*53a2e263SMartin Matuska vpunpckhqdq %ymm1,%ymm1,%ymm0 271*53a2e263SMartin Matuska vpxor %ymm1,%ymm0,%ymm0 272*53a2e263SMartin Matuska vpclmulqdq $0x10,%ymm9,%ymm0,%ymm0 273*53a2e263SMartin Matuska vpxor %ymm0,%ymm4,%ymm4 274*53a2e263SMartin Matuska 275*53a2e263SMartin Matuska vpxor %ymm3,%ymm4,%ymm4 276*53a2e263SMartin Matuska vpxor %ymm5,%ymm4,%ymm4 277*53a2e263SMartin Matuska 278*53a2e263SMartin Matuska 279*53a2e263SMartin Matuska vbroadcasti128 .Lgfpoly(%rip),%ymm2 280*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm3,%ymm2,%ymm0 281*53a2e263SMartin Matuska vpshufd $0x4e,%ymm3,%ymm3 282*53a2e263SMartin Matuska vpxor %ymm3,%ymm4,%ymm4 283*53a2e263SMartin Matuska vpxor %ymm0,%ymm4,%ymm4 284*53a2e263SMartin Matuska 285*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm4,%ymm2,%ymm0 286*53a2e263SMartin Matuska vpshufd $0x4e,%ymm4,%ymm4 287*53a2e263SMartin Matuska vpxor %ymm4,%ymm5,%ymm5 288*53a2e263SMartin Matuska vpxor %ymm0,%ymm5,%ymm5 289*53a2e263SMartin Matuska vextracti128 $1,%ymm5,%xmm0 290*53a2e263SMartin Matuska vpxor %xmm0,%xmm5,%xmm5 291*53a2e263SMartin Matuska 292*53a2e263SMartin Matuska subq $-128,%rdx 293*53a2e263SMartin Matuska addq $-128,%rcx 294*53a2e263SMartin Matuska cmpq $127,%rcx 295*53a2e263SMartin Matuska ja .Lghash_loop_4x 296*53a2e263SMartin Matuska 297*53a2e263SMartin Matuska 298*53a2e263SMartin Matuska cmpq $32,%rcx 299*53a2e263SMartin Matuska jb .Lghash_loop_1x_done 300*53a2e263SMartin Matuska.Lghash_loop_1x: 301*53a2e263SMartin Matuska vmovdqu (%rdx),%ymm0 302*53a2e263SMartin Matuska vpshufb %ymm6,%ymm0,%ymm0 303*53a2e263SMartin Matuska vpxor %ymm0,%ymm5,%ymm5 304*53a2e263SMartin Matuska vmovdqu 128-32(%rsi),%ymm0 305*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm0,%ymm5,%ymm1 306*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm0,%ymm5,%ymm2 307*53a2e263SMartin Matuska vpclmulqdq $0x10,%ymm0,%ymm5,%ymm3 308*53a2e263SMartin Matuska vpxor %ymm3,%ymm2,%ymm2 309*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm1,%ymm7,%ymm3 310*53a2e263SMartin Matuska vpshufd $0x4e,%ymm1,%ymm1 311*53a2e263SMartin Matuska vpxor %ymm1,%ymm2,%ymm2 312*53a2e263SMartin Matuska vpxor %ymm3,%ymm2,%ymm2 313*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm0,%ymm5,%ymm5 314*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm2,%ymm7,%ymm1 315*53a2e263SMartin Matuska vpshufd $0x4e,%ymm2,%ymm2 316*53a2e263SMartin Matuska vpxor %ymm2,%ymm5,%ymm5 317*53a2e263SMartin Matuska vpxor %ymm1,%ymm5,%ymm5 318*53a2e263SMartin Matuska 319*53a2e263SMartin Matuska vextracti128 $1,%ymm5,%xmm0 320*53a2e263SMartin Matuska vpxor %xmm0,%xmm5,%xmm5 321*53a2e263SMartin Matuska addq $32,%rdx 322*53a2e263SMartin Matuska subq $32,%rcx 323*53a2e263SMartin Matuska cmpq $32,%rcx 324*53a2e263SMartin Matuska jae .Lghash_loop_1x 325*53a2e263SMartin Matuska.Lghash_loop_1x_done: 326*53a2e263SMartin Matuska 327*53a2e263SMartin Matuska 328*53a2e263SMartin Matuska.Lghash_lastblock: 329*53a2e263SMartin Matuska testq %rcx,%rcx 330*53a2e263SMartin Matuska jz .Lghash_done 331*53a2e263SMartin Matuska vmovdqu (%rdx),%xmm0 332*53a2e263SMartin Matuska vpshufb %xmm6,%xmm0,%xmm0 333*53a2e263SMartin Matuska vpxor %xmm0,%xmm5,%xmm5 334*53a2e263SMartin Matuska vmovdqu 128-16(%rsi),%xmm0 335*53a2e263SMartin Matuska vpclmulqdq $0x00,%xmm0,%xmm5,%xmm1 336*53a2e263SMartin Matuska vpclmulqdq $0x01,%xmm0,%xmm5,%xmm2 337*53a2e263SMartin Matuska vpclmulqdq $0x10,%xmm0,%xmm5,%xmm3 338*53a2e263SMartin Matuska vpxor %xmm3,%xmm2,%xmm2 339*53a2e263SMartin Matuska vpclmulqdq $0x01,%xmm1,%xmm7,%xmm3 340*53a2e263SMartin Matuska vpshufd $0x4e,%xmm1,%xmm1 341*53a2e263SMartin Matuska vpxor %xmm1,%xmm2,%xmm2 342*53a2e263SMartin Matuska vpxor %xmm3,%xmm2,%xmm2 343*53a2e263SMartin Matuska vpclmulqdq $0x11,%xmm0,%xmm5,%xmm5 344*53a2e263SMartin Matuska vpclmulqdq $0x01,%xmm2,%xmm7,%xmm1 345*53a2e263SMartin Matuska vpshufd $0x4e,%xmm2,%xmm2 346*53a2e263SMartin Matuska vpxor %xmm2,%xmm5,%xmm5 347*53a2e263SMartin Matuska vpxor %xmm1,%xmm5,%xmm5 348*53a2e263SMartin Matuska 349*53a2e263SMartin Matuska 350*53a2e263SMartin Matuska.Lghash_done: 351*53a2e263SMartin Matuska 352*53a2e263SMartin Matuska vpshufb %xmm6,%xmm5,%xmm5 353*53a2e263SMartin Matuska vmovdqu %xmm5,(%rdi) 354*53a2e263SMartin Matuska 355*53a2e263SMartin Matuska vzeroupper 356*53a2e263SMartin Matuska RET 357*53a2e263SMartin Matuska 358*53a2e263SMartin Matuska.cfi_endproc 359*53a2e263SMartin MatuskaSET_SIZE(gcm_ghash_vpclmulqdq_avx2) 360*53a2e263SMartin MatuskaENTRY_ALIGN(aes_gcm_enc_update_vaes_avx2, 32) 361*53a2e263SMartin Matuska.cfi_startproc 362*53a2e263SMartin Matuska 363*53a2e263SMartin MatuskaENDBR 364*53a2e263SMartin Matuska pushq %r12 365*53a2e263SMartin Matuska.cfi_adjust_cfa_offset 8 366*53a2e263SMartin Matuska.cfi_offset %r12,-16 367*53a2e263SMartin Matuska 368*53a2e263SMartin Matuska movq 16(%rsp),%r12 369*53a2e263SMartin Matuska#ifdef BORINGSSL_DISPATCH_TEST 370*53a2e263SMartin Matuska.extern BORINGSSL_function_hit 371*53a2e263SMartin Matuska.hidden BORINGSSL_function_hit 372*53a2e263SMartin Matuska movb $1,BORINGSSL_function_hit+6(%rip) 373*53a2e263SMartin Matuska#endif 374*53a2e263SMartin Matuska vbroadcasti128 .Lbswap_mask(%rip),%ymm0 375*53a2e263SMartin Matuska 376*53a2e263SMartin Matuska 377*53a2e263SMartin Matuska 378*53a2e263SMartin Matuska vmovdqu (%r12),%xmm1 379*53a2e263SMartin Matuska vpshufb %xmm0,%xmm1,%xmm1 380*53a2e263SMartin Matuska vbroadcasti128 (%r8),%ymm11 381*53a2e263SMartin Matuska vpshufb %ymm0,%ymm11,%ymm11 382*53a2e263SMartin Matuska 383*53a2e263SMartin Matuska 384*53a2e263SMartin Matuska 385*53a2e263SMartin Matuska movl 504(%rcx),%r10d // ICP has a larger offset for rounds. 386*53a2e263SMartin Matuska leal -24(,%r10,4),%r10d // ICP uses 10,12,14 not 9,11,13 for rounds. 387*53a2e263SMartin Matuska 388*53a2e263SMartin Matuska 389*53a2e263SMartin Matuska 390*53a2e263SMartin Matuska 391*53a2e263SMartin Matuska leaq 96(%rcx,%r10,4),%r11 392*53a2e263SMartin Matuska vbroadcasti128 (%rcx),%ymm9 393*53a2e263SMartin Matuska vbroadcasti128 (%r11),%ymm10 394*53a2e263SMartin Matuska 395*53a2e263SMartin Matuska 396*53a2e263SMartin Matuska vpaddd .Lctr_pattern(%rip),%ymm11,%ymm11 397*53a2e263SMartin Matuska 398*53a2e263SMartin Matuska 399*53a2e263SMartin Matuska 400*53a2e263SMartin Matuska cmpq $127,%rdx 401*53a2e263SMartin Matuska jbe .Lcrypt_loop_4x_done__func1 402*53a2e263SMartin Matuska 403*53a2e263SMartin Matuska vmovdqu 128(%r9),%ymm7 404*53a2e263SMartin Matuska vmovdqu 128+32(%r9),%ymm8 405*53a2e263SMartin Matuska 406*53a2e263SMartin Matuska 407*53a2e263SMartin Matuska 408*53a2e263SMartin Matuska vmovdqu .Linc_2blocks(%rip),%ymm2 409*53a2e263SMartin Matuska vpshufb %ymm0,%ymm11,%ymm12 410*53a2e263SMartin Matuska vpaddd %ymm2,%ymm11,%ymm11 411*53a2e263SMartin Matuska vpshufb %ymm0,%ymm11,%ymm13 412*53a2e263SMartin Matuska vpaddd %ymm2,%ymm11,%ymm11 413*53a2e263SMartin Matuska vpshufb %ymm0,%ymm11,%ymm14 414*53a2e263SMartin Matuska vpaddd %ymm2,%ymm11,%ymm11 415*53a2e263SMartin Matuska vpshufb %ymm0,%ymm11,%ymm15 416*53a2e263SMartin Matuska vpaddd %ymm2,%ymm11,%ymm11 417*53a2e263SMartin Matuska 418*53a2e263SMartin Matuska 419*53a2e263SMartin Matuska vpxor %ymm9,%ymm12,%ymm12 420*53a2e263SMartin Matuska vpxor %ymm9,%ymm13,%ymm13 421*53a2e263SMartin Matuska vpxor %ymm9,%ymm14,%ymm14 422*53a2e263SMartin Matuska vpxor %ymm9,%ymm15,%ymm15 423*53a2e263SMartin Matuska 424*53a2e263SMartin Matuska leaq 16(%rcx),%rax 425*53a2e263SMartin Matuska.Lvaesenc_loop_first_4_vecs__func1: 426*53a2e263SMartin Matuska vbroadcasti128 (%rax),%ymm2 427*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 428*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 429*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 430*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 431*53a2e263SMartin Matuska 432*53a2e263SMartin Matuska addq $16,%rax 433*53a2e263SMartin Matuska cmpq %rax,%r11 434*53a2e263SMartin Matuska jne .Lvaesenc_loop_first_4_vecs__func1 435*53a2e263SMartin Matuska vpxor 0(%rdi),%ymm10,%ymm2 436*53a2e263SMartin Matuska vpxor 32(%rdi),%ymm10,%ymm3 437*53a2e263SMartin Matuska vpxor 64(%rdi),%ymm10,%ymm5 438*53a2e263SMartin Matuska vpxor 96(%rdi),%ymm10,%ymm6 439*53a2e263SMartin Matuska vaesenclast %ymm2,%ymm12,%ymm12 440*53a2e263SMartin Matuska vaesenclast %ymm3,%ymm13,%ymm13 441*53a2e263SMartin Matuska vaesenclast %ymm5,%ymm14,%ymm14 442*53a2e263SMartin Matuska vaesenclast %ymm6,%ymm15,%ymm15 443*53a2e263SMartin Matuska vmovdqu %ymm12,0(%rsi) 444*53a2e263SMartin Matuska vmovdqu %ymm13,32(%rsi) 445*53a2e263SMartin Matuska vmovdqu %ymm14,64(%rsi) 446*53a2e263SMartin Matuska vmovdqu %ymm15,96(%rsi) 447*53a2e263SMartin Matuska 448*53a2e263SMartin Matuska subq $-128,%rdi 449*53a2e263SMartin Matuska addq $-128,%rdx 450*53a2e263SMartin Matuska cmpq $127,%rdx 451*53a2e263SMartin Matuska jbe .Lghash_last_ciphertext_4x__func1 452*53a2e263SMartin Matuska.balign 16 453*53a2e263SMartin Matuska.Lcrypt_loop_4x__func1: 454*53a2e263SMartin Matuska 455*53a2e263SMartin Matuska 456*53a2e263SMartin Matuska 457*53a2e263SMartin Matuska 458*53a2e263SMartin Matuska vmovdqu .Linc_2blocks(%rip),%ymm2 459*53a2e263SMartin Matuska vpshufb %ymm0,%ymm11,%ymm12 460*53a2e263SMartin Matuska vpaddd %ymm2,%ymm11,%ymm11 461*53a2e263SMartin Matuska vpshufb %ymm0,%ymm11,%ymm13 462*53a2e263SMartin Matuska vpaddd %ymm2,%ymm11,%ymm11 463*53a2e263SMartin Matuska vpshufb %ymm0,%ymm11,%ymm14 464*53a2e263SMartin Matuska vpaddd %ymm2,%ymm11,%ymm11 465*53a2e263SMartin Matuska vpshufb %ymm0,%ymm11,%ymm15 466*53a2e263SMartin Matuska vpaddd %ymm2,%ymm11,%ymm11 467*53a2e263SMartin Matuska 468*53a2e263SMartin Matuska 469*53a2e263SMartin Matuska vpxor %ymm9,%ymm12,%ymm12 470*53a2e263SMartin Matuska vpxor %ymm9,%ymm13,%ymm13 471*53a2e263SMartin Matuska vpxor %ymm9,%ymm14,%ymm14 472*53a2e263SMartin Matuska vpxor %ymm9,%ymm15,%ymm15 473*53a2e263SMartin Matuska 474*53a2e263SMartin Matuska cmpl $24,%r10d 475*53a2e263SMartin Matuska jl .Laes128__func1 476*53a2e263SMartin Matuska je .Laes192__func1 477*53a2e263SMartin Matuska 478*53a2e263SMartin Matuska vbroadcasti128 -208(%r11),%ymm2 479*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 480*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 481*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 482*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 483*53a2e263SMartin Matuska 484*53a2e263SMartin Matuska vbroadcasti128 -192(%r11),%ymm2 485*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 486*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 487*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 488*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 489*53a2e263SMartin Matuska 490*53a2e263SMartin Matuska.Laes192__func1: 491*53a2e263SMartin Matuska vbroadcasti128 -176(%r11),%ymm2 492*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 493*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 494*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 495*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 496*53a2e263SMartin Matuska 497*53a2e263SMartin Matuska vbroadcasti128 -160(%r11),%ymm2 498*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 499*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 500*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 501*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 502*53a2e263SMartin Matuska 503*53a2e263SMartin Matuska.Laes128__func1: 504*53a2e263SMartin Matuska prefetcht0 512(%rdi) 505*53a2e263SMartin Matuska prefetcht0 512+64(%rdi) 506*53a2e263SMartin Matuska 507*53a2e263SMartin Matuska vmovdqu 0(%rsi),%ymm3 508*53a2e263SMartin Matuska vpshufb %ymm0,%ymm3,%ymm3 509*53a2e263SMartin Matuska vmovdqu 0(%r9),%ymm4 510*53a2e263SMartin Matuska vpxor %ymm1,%ymm3,%ymm3 511*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm4,%ymm3,%ymm5 512*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm4,%ymm3,%ymm1 513*53a2e263SMartin Matuska vpunpckhqdq %ymm3,%ymm3,%ymm2 514*53a2e263SMartin Matuska vpxor %ymm3,%ymm2,%ymm2 515*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm7,%ymm2,%ymm6 516*53a2e263SMartin Matuska 517*53a2e263SMartin Matuska vbroadcasti128 -144(%r11),%ymm2 518*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 519*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 520*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 521*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 522*53a2e263SMartin Matuska 523*53a2e263SMartin Matuska 524*53a2e263SMartin Matuska vbroadcasti128 -128(%r11),%ymm2 525*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 526*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 527*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 528*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 529*53a2e263SMartin Matuska 530*53a2e263SMartin Matuska 531*53a2e263SMartin Matuska vmovdqu 32(%rsi),%ymm3 532*53a2e263SMartin Matuska vpshufb %ymm0,%ymm3,%ymm3 533*53a2e263SMartin Matuska vmovdqu 32(%r9),%ymm4 534*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2 535*53a2e263SMartin Matuska vpxor %ymm2,%ymm5,%ymm5 536*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2 537*53a2e263SMartin Matuska vpxor %ymm2,%ymm1,%ymm1 538*53a2e263SMartin Matuska vpunpckhqdq %ymm3,%ymm3,%ymm2 539*53a2e263SMartin Matuska vpxor %ymm3,%ymm2,%ymm2 540*53a2e263SMartin Matuska vpclmulqdq $0x10,%ymm7,%ymm2,%ymm2 541*53a2e263SMartin Matuska vpxor %ymm2,%ymm6,%ymm6 542*53a2e263SMartin Matuska 543*53a2e263SMartin Matuska vbroadcasti128 -112(%r11),%ymm2 544*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 545*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 546*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 547*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 548*53a2e263SMartin Matuska 549*53a2e263SMartin Matuska 550*53a2e263SMartin Matuska vmovdqu 64(%rsi),%ymm3 551*53a2e263SMartin Matuska vpshufb %ymm0,%ymm3,%ymm3 552*53a2e263SMartin Matuska vmovdqu 64(%r9),%ymm4 553*53a2e263SMartin Matuska 554*53a2e263SMartin Matuska vbroadcasti128 -96(%r11),%ymm2 555*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 556*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 557*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 558*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 559*53a2e263SMartin Matuska 560*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2 561*53a2e263SMartin Matuska vpxor %ymm2,%ymm5,%ymm5 562*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2 563*53a2e263SMartin Matuska vpxor %ymm2,%ymm1,%ymm1 564*53a2e263SMartin Matuska 565*53a2e263SMartin Matuska vbroadcasti128 -80(%r11),%ymm2 566*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 567*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 568*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 569*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 570*53a2e263SMartin Matuska 571*53a2e263SMartin Matuska vpunpckhqdq %ymm3,%ymm3,%ymm2 572*53a2e263SMartin Matuska vpxor %ymm3,%ymm2,%ymm2 573*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm8,%ymm2,%ymm2 574*53a2e263SMartin Matuska vpxor %ymm2,%ymm6,%ymm6 575*53a2e263SMartin Matuska 576*53a2e263SMartin Matuska 577*53a2e263SMartin Matuska vmovdqu 96(%rsi),%ymm3 578*53a2e263SMartin Matuska vpshufb %ymm0,%ymm3,%ymm3 579*53a2e263SMartin Matuska 580*53a2e263SMartin Matuska vbroadcasti128 -64(%r11),%ymm2 581*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 582*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 583*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 584*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 585*53a2e263SMartin Matuska 586*53a2e263SMartin Matuska vmovdqu 96(%r9),%ymm4 587*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2 588*53a2e263SMartin Matuska vpxor %ymm2,%ymm5,%ymm5 589*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2 590*53a2e263SMartin Matuska vpxor %ymm2,%ymm1,%ymm1 591*53a2e263SMartin Matuska vpunpckhqdq %ymm3,%ymm3,%ymm2 592*53a2e263SMartin Matuska vpxor %ymm3,%ymm2,%ymm2 593*53a2e263SMartin Matuska vpclmulqdq $0x10,%ymm8,%ymm2,%ymm2 594*53a2e263SMartin Matuska vpxor %ymm2,%ymm6,%ymm6 595*53a2e263SMartin Matuska 596*53a2e263SMartin Matuska vbroadcasti128 -48(%r11),%ymm2 597*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 598*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 599*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 600*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 601*53a2e263SMartin Matuska 602*53a2e263SMartin Matuska 603*53a2e263SMartin Matuska vpxor %ymm5,%ymm6,%ymm6 604*53a2e263SMartin Matuska vpxor %ymm1,%ymm6,%ymm6 605*53a2e263SMartin Matuska 606*53a2e263SMartin Matuska 607*53a2e263SMartin Matuska vbroadcasti128 .Lgfpoly(%rip),%ymm4 608*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm5,%ymm4,%ymm2 609*53a2e263SMartin Matuska vpshufd $0x4e,%ymm5,%ymm5 610*53a2e263SMartin Matuska vpxor %ymm5,%ymm6,%ymm6 611*53a2e263SMartin Matuska vpxor %ymm2,%ymm6,%ymm6 612*53a2e263SMartin Matuska 613*53a2e263SMartin Matuska vbroadcasti128 -32(%r11),%ymm2 614*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 615*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 616*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 617*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 618*53a2e263SMartin Matuska 619*53a2e263SMartin Matuska 620*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm6,%ymm4,%ymm2 621*53a2e263SMartin Matuska vpshufd $0x4e,%ymm6,%ymm6 622*53a2e263SMartin Matuska vpxor %ymm6,%ymm1,%ymm1 623*53a2e263SMartin Matuska vpxor %ymm2,%ymm1,%ymm1 624*53a2e263SMartin Matuska 625*53a2e263SMartin Matuska vbroadcasti128 -16(%r11),%ymm2 626*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 627*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 628*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 629*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 630*53a2e263SMartin Matuska 631*53a2e263SMartin Matuska vextracti128 $1,%ymm1,%xmm2 632*53a2e263SMartin Matuska vpxor %xmm2,%xmm1,%xmm1 633*53a2e263SMartin Matuska 634*53a2e263SMartin Matuska 635*53a2e263SMartin Matuska subq $-128,%rsi 636*53a2e263SMartin Matuska vpxor 0(%rdi),%ymm10,%ymm2 637*53a2e263SMartin Matuska vpxor 32(%rdi),%ymm10,%ymm3 638*53a2e263SMartin Matuska vpxor 64(%rdi),%ymm10,%ymm5 639*53a2e263SMartin Matuska vpxor 96(%rdi),%ymm10,%ymm6 640*53a2e263SMartin Matuska vaesenclast %ymm2,%ymm12,%ymm12 641*53a2e263SMartin Matuska vaesenclast %ymm3,%ymm13,%ymm13 642*53a2e263SMartin Matuska vaesenclast %ymm5,%ymm14,%ymm14 643*53a2e263SMartin Matuska vaesenclast %ymm6,%ymm15,%ymm15 644*53a2e263SMartin Matuska vmovdqu %ymm12,0(%rsi) 645*53a2e263SMartin Matuska vmovdqu %ymm13,32(%rsi) 646*53a2e263SMartin Matuska vmovdqu %ymm14,64(%rsi) 647*53a2e263SMartin Matuska vmovdqu %ymm15,96(%rsi) 648*53a2e263SMartin Matuska 649*53a2e263SMartin Matuska subq $-128,%rdi 650*53a2e263SMartin Matuska 651*53a2e263SMartin Matuska addq $-128,%rdx 652*53a2e263SMartin Matuska cmpq $127,%rdx 653*53a2e263SMartin Matuska ja .Lcrypt_loop_4x__func1 654*53a2e263SMartin Matuska.Lghash_last_ciphertext_4x__func1: 655*53a2e263SMartin Matuska 656*53a2e263SMartin Matuska vmovdqu 0(%rsi),%ymm3 657*53a2e263SMartin Matuska vpshufb %ymm0,%ymm3,%ymm3 658*53a2e263SMartin Matuska vmovdqu 0(%r9),%ymm4 659*53a2e263SMartin Matuska vpxor %ymm1,%ymm3,%ymm3 660*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm4,%ymm3,%ymm5 661*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm4,%ymm3,%ymm1 662*53a2e263SMartin Matuska vpunpckhqdq %ymm3,%ymm3,%ymm2 663*53a2e263SMartin Matuska vpxor %ymm3,%ymm2,%ymm2 664*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm7,%ymm2,%ymm6 665*53a2e263SMartin Matuska 666*53a2e263SMartin Matuska vmovdqu 32(%rsi),%ymm3 667*53a2e263SMartin Matuska vpshufb %ymm0,%ymm3,%ymm3 668*53a2e263SMartin Matuska vmovdqu 32(%r9),%ymm4 669*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2 670*53a2e263SMartin Matuska vpxor %ymm2,%ymm5,%ymm5 671*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2 672*53a2e263SMartin Matuska vpxor %ymm2,%ymm1,%ymm1 673*53a2e263SMartin Matuska vpunpckhqdq %ymm3,%ymm3,%ymm2 674*53a2e263SMartin Matuska vpxor %ymm3,%ymm2,%ymm2 675*53a2e263SMartin Matuska vpclmulqdq $0x10,%ymm7,%ymm2,%ymm2 676*53a2e263SMartin Matuska vpxor %ymm2,%ymm6,%ymm6 677*53a2e263SMartin Matuska 678*53a2e263SMartin Matuska vmovdqu 64(%rsi),%ymm3 679*53a2e263SMartin Matuska vpshufb %ymm0,%ymm3,%ymm3 680*53a2e263SMartin Matuska vmovdqu 64(%r9),%ymm4 681*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2 682*53a2e263SMartin Matuska vpxor %ymm2,%ymm5,%ymm5 683*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2 684*53a2e263SMartin Matuska vpxor %ymm2,%ymm1,%ymm1 685*53a2e263SMartin Matuska vpunpckhqdq %ymm3,%ymm3,%ymm2 686*53a2e263SMartin Matuska vpxor %ymm3,%ymm2,%ymm2 687*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm8,%ymm2,%ymm2 688*53a2e263SMartin Matuska vpxor %ymm2,%ymm6,%ymm6 689*53a2e263SMartin Matuska 690*53a2e263SMartin Matuska 691*53a2e263SMartin Matuska vmovdqu 96(%rsi),%ymm3 692*53a2e263SMartin Matuska vpshufb %ymm0,%ymm3,%ymm3 693*53a2e263SMartin Matuska vmovdqu 96(%r9),%ymm4 694*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2 695*53a2e263SMartin Matuska vpxor %ymm2,%ymm5,%ymm5 696*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2 697*53a2e263SMartin Matuska vpxor %ymm2,%ymm1,%ymm1 698*53a2e263SMartin Matuska vpunpckhqdq %ymm3,%ymm3,%ymm2 699*53a2e263SMartin Matuska vpxor %ymm3,%ymm2,%ymm2 700*53a2e263SMartin Matuska vpclmulqdq $0x10,%ymm8,%ymm2,%ymm2 701*53a2e263SMartin Matuska vpxor %ymm2,%ymm6,%ymm6 702*53a2e263SMartin Matuska 703*53a2e263SMartin Matuska vpxor %ymm5,%ymm6,%ymm6 704*53a2e263SMartin Matuska vpxor %ymm1,%ymm6,%ymm6 705*53a2e263SMartin Matuska 706*53a2e263SMartin Matuska 707*53a2e263SMartin Matuska vbroadcasti128 .Lgfpoly(%rip),%ymm4 708*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm5,%ymm4,%ymm2 709*53a2e263SMartin Matuska vpshufd $0x4e,%ymm5,%ymm5 710*53a2e263SMartin Matuska vpxor %ymm5,%ymm6,%ymm6 711*53a2e263SMartin Matuska vpxor %ymm2,%ymm6,%ymm6 712*53a2e263SMartin Matuska 713*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm6,%ymm4,%ymm2 714*53a2e263SMartin Matuska vpshufd $0x4e,%ymm6,%ymm6 715*53a2e263SMartin Matuska vpxor %ymm6,%ymm1,%ymm1 716*53a2e263SMartin Matuska vpxor %ymm2,%ymm1,%ymm1 717*53a2e263SMartin Matuska vextracti128 $1,%ymm1,%xmm2 718*53a2e263SMartin Matuska vpxor %xmm2,%xmm1,%xmm1 719*53a2e263SMartin Matuska 720*53a2e263SMartin Matuska subq $-128,%rsi 721*53a2e263SMartin Matuska.Lcrypt_loop_4x_done__func1: 722*53a2e263SMartin Matuska 723*53a2e263SMartin Matuska testq %rdx,%rdx 724*53a2e263SMartin Matuska jz .Ldone__func1 725*53a2e263SMartin Matuska 726*53a2e263SMartin Matuska 727*53a2e263SMartin Matuska 728*53a2e263SMartin Matuska 729*53a2e263SMartin Matuska 730*53a2e263SMartin Matuska leaq 128(%r9),%r8 731*53a2e263SMartin Matuska subq %rdx,%r8 732*53a2e263SMartin Matuska 733*53a2e263SMartin Matuska 734*53a2e263SMartin Matuska vpxor %xmm5,%xmm5,%xmm5 735*53a2e263SMartin Matuska vpxor %xmm6,%xmm6,%xmm6 736*53a2e263SMartin Matuska vpxor %xmm7,%xmm7,%xmm7 737*53a2e263SMartin Matuska 738*53a2e263SMartin Matuska cmpq $64,%rdx 739*53a2e263SMartin Matuska jb .Llessthan64bytes__func1 740*53a2e263SMartin Matuska 741*53a2e263SMartin Matuska 742*53a2e263SMartin Matuska vpshufb %ymm0,%ymm11,%ymm12 743*53a2e263SMartin Matuska vpaddd .Linc_2blocks(%rip),%ymm11,%ymm11 744*53a2e263SMartin Matuska vpshufb %ymm0,%ymm11,%ymm13 745*53a2e263SMartin Matuska vpaddd .Linc_2blocks(%rip),%ymm11,%ymm11 746*53a2e263SMartin Matuska vpxor %ymm9,%ymm12,%ymm12 747*53a2e263SMartin Matuska vpxor %ymm9,%ymm13,%ymm13 748*53a2e263SMartin Matuska leaq 16(%rcx),%rax 749*53a2e263SMartin Matuska.Lvaesenc_loop_tail_1__func1: 750*53a2e263SMartin Matuska vbroadcasti128 (%rax),%ymm2 751*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 752*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 753*53a2e263SMartin Matuska addq $16,%rax 754*53a2e263SMartin Matuska cmpq %rax,%r11 755*53a2e263SMartin Matuska jne .Lvaesenc_loop_tail_1__func1 756*53a2e263SMartin Matuska vaesenclast %ymm10,%ymm12,%ymm12 757*53a2e263SMartin Matuska vaesenclast %ymm10,%ymm13,%ymm13 758*53a2e263SMartin Matuska 759*53a2e263SMartin Matuska 760*53a2e263SMartin Matuska vmovdqu 0(%rdi),%ymm2 761*53a2e263SMartin Matuska vmovdqu 32(%rdi),%ymm3 762*53a2e263SMartin Matuska vpxor %ymm2,%ymm12,%ymm12 763*53a2e263SMartin Matuska vpxor %ymm3,%ymm13,%ymm13 764*53a2e263SMartin Matuska vmovdqu %ymm12,0(%rsi) 765*53a2e263SMartin Matuska vmovdqu %ymm13,32(%rsi) 766*53a2e263SMartin Matuska 767*53a2e263SMartin Matuska 768*53a2e263SMartin Matuska vpshufb %ymm0,%ymm12,%ymm12 769*53a2e263SMartin Matuska vpshufb %ymm0,%ymm13,%ymm13 770*53a2e263SMartin Matuska vpxor %ymm1,%ymm12,%ymm12 771*53a2e263SMartin Matuska vmovdqu (%r8),%ymm2 772*53a2e263SMartin Matuska vmovdqu 32(%r8),%ymm3 773*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm2,%ymm12,%ymm5 774*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm2,%ymm12,%ymm6 775*53a2e263SMartin Matuska vpclmulqdq $0x10,%ymm2,%ymm12,%ymm4 776*53a2e263SMartin Matuska vpxor %ymm4,%ymm6,%ymm6 777*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm2,%ymm12,%ymm7 778*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm3,%ymm13,%ymm4 779*53a2e263SMartin Matuska vpxor %ymm4,%ymm5,%ymm5 780*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm3,%ymm13,%ymm4 781*53a2e263SMartin Matuska vpxor %ymm4,%ymm6,%ymm6 782*53a2e263SMartin Matuska vpclmulqdq $0x10,%ymm3,%ymm13,%ymm4 783*53a2e263SMartin Matuska vpxor %ymm4,%ymm6,%ymm6 784*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm3,%ymm13,%ymm4 785*53a2e263SMartin Matuska vpxor %ymm4,%ymm7,%ymm7 786*53a2e263SMartin Matuska 787*53a2e263SMartin Matuska addq $64,%r8 788*53a2e263SMartin Matuska addq $64,%rdi 789*53a2e263SMartin Matuska addq $64,%rsi 790*53a2e263SMartin Matuska subq $64,%rdx 791*53a2e263SMartin Matuska jz .Lreduce__func1 792*53a2e263SMartin Matuska 793*53a2e263SMartin Matuska vpxor %xmm1,%xmm1,%xmm1 794*53a2e263SMartin Matuska 795*53a2e263SMartin Matuska 796*53a2e263SMartin Matuska.Llessthan64bytes__func1: 797*53a2e263SMartin Matuska vpshufb %ymm0,%ymm11,%ymm12 798*53a2e263SMartin Matuska vpaddd .Linc_2blocks(%rip),%ymm11,%ymm11 799*53a2e263SMartin Matuska vpshufb %ymm0,%ymm11,%ymm13 800*53a2e263SMartin Matuska vpxor %ymm9,%ymm12,%ymm12 801*53a2e263SMartin Matuska vpxor %ymm9,%ymm13,%ymm13 802*53a2e263SMartin Matuska leaq 16(%rcx),%rax 803*53a2e263SMartin Matuska.Lvaesenc_loop_tail_2__func1: 804*53a2e263SMartin Matuska vbroadcasti128 (%rax),%ymm2 805*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 806*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 807*53a2e263SMartin Matuska addq $16,%rax 808*53a2e263SMartin Matuska cmpq %rax,%r11 809*53a2e263SMartin Matuska jne .Lvaesenc_loop_tail_2__func1 810*53a2e263SMartin Matuska vaesenclast %ymm10,%ymm12,%ymm12 811*53a2e263SMartin Matuska vaesenclast %ymm10,%ymm13,%ymm13 812*53a2e263SMartin Matuska 813*53a2e263SMartin Matuska 814*53a2e263SMartin Matuska 815*53a2e263SMartin Matuska 816*53a2e263SMartin Matuska cmpq $32,%rdx 817*53a2e263SMartin Matuska jb .Lxor_one_block__func1 818*53a2e263SMartin Matuska je .Lxor_two_blocks__func1 819*53a2e263SMartin Matuska 820*53a2e263SMartin Matuska.Lxor_three_blocks__func1: 821*53a2e263SMartin Matuska vmovdqu 0(%rdi),%ymm2 822*53a2e263SMartin Matuska vmovdqu 32(%rdi),%xmm3 823*53a2e263SMartin Matuska vpxor %ymm2,%ymm12,%ymm12 824*53a2e263SMartin Matuska vpxor %xmm3,%xmm13,%xmm13 825*53a2e263SMartin Matuska vmovdqu %ymm12,0(%rsi) 826*53a2e263SMartin Matuska vmovdqu %xmm13,32(%rsi) 827*53a2e263SMartin Matuska 828*53a2e263SMartin Matuska vpshufb %ymm0,%ymm12,%ymm12 829*53a2e263SMartin Matuska vpshufb %xmm0,%xmm13,%xmm13 830*53a2e263SMartin Matuska vpxor %ymm1,%ymm12,%ymm12 831*53a2e263SMartin Matuska vmovdqu (%r8),%ymm2 832*53a2e263SMartin Matuska vmovdqu 32(%r8),%xmm3 833*53a2e263SMartin Matuska vpclmulqdq $0x00,%xmm3,%xmm13,%xmm4 834*53a2e263SMartin Matuska vpxor %ymm4,%ymm5,%ymm5 835*53a2e263SMartin Matuska vpclmulqdq $0x01,%xmm3,%xmm13,%xmm4 836*53a2e263SMartin Matuska vpxor %ymm4,%ymm6,%ymm6 837*53a2e263SMartin Matuska vpclmulqdq $0x10,%xmm3,%xmm13,%xmm4 838*53a2e263SMartin Matuska vpxor %ymm4,%ymm6,%ymm6 839*53a2e263SMartin Matuska vpclmulqdq $0x11,%xmm3,%xmm13,%xmm4 840*53a2e263SMartin Matuska vpxor %ymm4,%ymm7,%ymm7 841*53a2e263SMartin Matuska jmp .Lghash_mul_one_vec_unreduced__func1 842*53a2e263SMartin Matuska 843*53a2e263SMartin Matuska.Lxor_two_blocks__func1: 844*53a2e263SMartin Matuska vmovdqu (%rdi),%ymm2 845*53a2e263SMartin Matuska vpxor %ymm2,%ymm12,%ymm12 846*53a2e263SMartin Matuska vmovdqu %ymm12,(%rsi) 847*53a2e263SMartin Matuska vpshufb %ymm0,%ymm12,%ymm12 848*53a2e263SMartin Matuska vpxor %ymm1,%ymm12,%ymm12 849*53a2e263SMartin Matuska vmovdqu (%r8),%ymm2 850*53a2e263SMartin Matuska jmp .Lghash_mul_one_vec_unreduced__func1 851*53a2e263SMartin Matuska 852*53a2e263SMartin Matuska.Lxor_one_block__func1: 853*53a2e263SMartin Matuska vmovdqu (%rdi),%xmm2 854*53a2e263SMartin Matuska vpxor %xmm2,%xmm12,%xmm12 855*53a2e263SMartin Matuska vmovdqu %xmm12,(%rsi) 856*53a2e263SMartin Matuska vpshufb %xmm0,%xmm12,%xmm12 857*53a2e263SMartin Matuska vpxor %xmm1,%xmm12,%xmm12 858*53a2e263SMartin Matuska vmovdqu (%r8),%xmm2 859*53a2e263SMartin Matuska 860*53a2e263SMartin Matuska.Lghash_mul_one_vec_unreduced__func1: 861*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm2,%ymm12,%ymm4 862*53a2e263SMartin Matuska vpxor %ymm4,%ymm5,%ymm5 863*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm2,%ymm12,%ymm4 864*53a2e263SMartin Matuska vpxor %ymm4,%ymm6,%ymm6 865*53a2e263SMartin Matuska vpclmulqdq $0x10,%ymm2,%ymm12,%ymm4 866*53a2e263SMartin Matuska vpxor %ymm4,%ymm6,%ymm6 867*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm2,%ymm12,%ymm4 868*53a2e263SMartin Matuska vpxor %ymm4,%ymm7,%ymm7 869*53a2e263SMartin Matuska 870*53a2e263SMartin Matuska.Lreduce__func1: 871*53a2e263SMartin Matuska 872*53a2e263SMartin Matuska vbroadcasti128 .Lgfpoly(%rip),%ymm2 873*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm5,%ymm2,%ymm3 874*53a2e263SMartin Matuska vpshufd $0x4e,%ymm5,%ymm5 875*53a2e263SMartin Matuska vpxor %ymm5,%ymm6,%ymm6 876*53a2e263SMartin Matuska vpxor %ymm3,%ymm6,%ymm6 877*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm6,%ymm2,%ymm3 878*53a2e263SMartin Matuska vpshufd $0x4e,%ymm6,%ymm6 879*53a2e263SMartin Matuska vpxor %ymm6,%ymm7,%ymm7 880*53a2e263SMartin Matuska vpxor %ymm3,%ymm7,%ymm7 881*53a2e263SMartin Matuska vextracti128 $1,%ymm7,%xmm1 882*53a2e263SMartin Matuska vpxor %xmm7,%xmm1,%xmm1 883*53a2e263SMartin Matuska 884*53a2e263SMartin Matuska.Ldone__func1: 885*53a2e263SMartin Matuska 886*53a2e263SMartin Matuska vpshufb %xmm0,%xmm1,%xmm1 887*53a2e263SMartin Matuska vmovdqu %xmm1,(%r12) 888*53a2e263SMartin Matuska 889*53a2e263SMartin Matuska vzeroupper 890*53a2e263SMartin Matuska popq %r12 891*53a2e263SMartin Matuska.cfi_adjust_cfa_offset -8 892*53a2e263SMartin Matuska.cfi_restore %r12 893*53a2e263SMartin Matuska RET 894*53a2e263SMartin Matuska 895*53a2e263SMartin Matuska.cfi_endproc 896*53a2e263SMartin MatuskaSET_SIZE(aes_gcm_enc_update_vaes_avx2) 897*53a2e263SMartin MatuskaENTRY_ALIGN(aes_gcm_dec_update_vaes_avx2, 32) 898*53a2e263SMartin Matuska.cfi_startproc 899*53a2e263SMartin Matuska 900*53a2e263SMartin MatuskaENDBR 901*53a2e263SMartin Matuska pushq %r12 902*53a2e263SMartin Matuska.cfi_adjust_cfa_offset 8 903*53a2e263SMartin Matuska.cfi_offset %r12,-16 904*53a2e263SMartin Matuska 905*53a2e263SMartin Matuska movq 16(%rsp),%r12 906*53a2e263SMartin Matuska vbroadcasti128 .Lbswap_mask(%rip),%ymm0 907*53a2e263SMartin Matuska 908*53a2e263SMartin Matuska 909*53a2e263SMartin Matuska 910*53a2e263SMartin Matuska vmovdqu (%r12),%xmm1 911*53a2e263SMartin Matuska vpshufb %xmm0,%xmm1,%xmm1 912*53a2e263SMartin Matuska vbroadcasti128 (%r8),%ymm11 913*53a2e263SMartin Matuska vpshufb %ymm0,%ymm11,%ymm11 914*53a2e263SMartin Matuska 915*53a2e263SMartin Matuska 916*53a2e263SMartin Matuska 917*53a2e263SMartin Matuska movl 504(%rcx),%r10d // ICP has a larger offset for rounds. 918*53a2e263SMartin Matuska leal -24(,%r10,4),%r10d // ICP uses 10,12,14 not 9,11,13 for rounds. 919*53a2e263SMartin Matuska 920*53a2e263SMartin Matuska 921*53a2e263SMartin Matuska 922*53a2e263SMartin Matuska 923*53a2e263SMartin Matuska leaq 96(%rcx,%r10,4),%r11 924*53a2e263SMartin Matuska vbroadcasti128 (%rcx),%ymm9 925*53a2e263SMartin Matuska vbroadcasti128 (%r11),%ymm10 926*53a2e263SMartin Matuska 927*53a2e263SMartin Matuska 928*53a2e263SMartin Matuska vpaddd .Lctr_pattern(%rip),%ymm11,%ymm11 929*53a2e263SMartin Matuska 930*53a2e263SMartin Matuska 931*53a2e263SMartin Matuska 932*53a2e263SMartin Matuska cmpq $127,%rdx 933*53a2e263SMartin Matuska jbe .Lcrypt_loop_4x_done__func2 934*53a2e263SMartin Matuska 935*53a2e263SMartin Matuska vmovdqu 128(%r9),%ymm7 936*53a2e263SMartin Matuska vmovdqu 128+32(%r9),%ymm8 937*53a2e263SMartin Matuska.balign 16 938*53a2e263SMartin Matuska.Lcrypt_loop_4x__func2: 939*53a2e263SMartin Matuska 940*53a2e263SMartin Matuska 941*53a2e263SMartin Matuska 942*53a2e263SMartin Matuska 943*53a2e263SMartin Matuska vmovdqu .Linc_2blocks(%rip),%ymm2 944*53a2e263SMartin Matuska vpshufb %ymm0,%ymm11,%ymm12 945*53a2e263SMartin Matuska vpaddd %ymm2,%ymm11,%ymm11 946*53a2e263SMartin Matuska vpshufb %ymm0,%ymm11,%ymm13 947*53a2e263SMartin Matuska vpaddd %ymm2,%ymm11,%ymm11 948*53a2e263SMartin Matuska vpshufb %ymm0,%ymm11,%ymm14 949*53a2e263SMartin Matuska vpaddd %ymm2,%ymm11,%ymm11 950*53a2e263SMartin Matuska vpshufb %ymm0,%ymm11,%ymm15 951*53a2e263SMartin Matuska vpaddd %ymm2,%ymm11,%ymm11 952*53a2e263SMartin Matuska 953*53a2e263SMartin Matuska 954*53a2e263SMartin Matuska vpxor %ymm9,%ymm12,%ymm12 955*53a2e263SMartin Matuska vpxor %ymm9,%ymm13,%ymm13 956*53a2e263SMartin Matuska vpxor %ymm9,%ymm14,%ymm14 957*53a2e263SMartin Matuska vpxor %ymm9,%ymm15,%ymm15 958*53a2e263SMartin Matuska 959*53a2e263SMartin Matuska cmpl $24,%r10d 960*53a2e263SMartin Matuska jl .Laes128__func2 961*53a2e263SMartin Matuska je .Laes192__func2 962*53a2e263SMartin Matuska 963*53a2e263SMartin Matuska vbroadcasti128 -208(%r11),%ymm2 964*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 965*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 966*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 967*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 968*53a2e263SMartin Matuska 969*53a2e263SMartin Matuska vbroadcasti128 -192(%r11),%ymm2 970*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 971*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 972*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 973*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 974*53a2e263SMartin Matuska 975*53a2e263SMartin Matuska.Laes192__func2: 976*53a2e263SMartin Matuska vbroadcasti128 -176(%r11),%ymm2 977*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 978*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 979*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 980*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 981*53a2e263SMartin Matuska 982*53a2e263SMartin Matuska vbroadcasti128 -160(%r11),%ymm2 983*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 984*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 985*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 986*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 987*53a2e263SMartin Matuska 988*53a2e263SMartin Matuska.Laes128__func2: 989*53a2e263SMartin Matuska prefetcht0 512(%rdi) 990*53a2e263SMartin Matuska prefetcht0 512+64(%rdi) 991*53a2e263SMartin Matuska 992*53a2e263SMartin Matuska vmovdqu 0(%rdi),%ymm3 993*53a2e263SMartin Matuska vpshufb %ymm0,%ymm3,%ymm3 994*53a2e263SMartin Matuska vmovdqu 0(%r9),%ymm4 995*53a2e263SMartin Matuska vpxor %ymm1,%ymm3,%ymm3 996*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm4,%ymm3,%ymm5 997*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm4,%ymm3,%ymm1 998*53a2e263SMartin Matuska vpunpckhqdq %ymm3,%ymm3,%ymm2 999*53a2e263SMartin Matuska vpxor %ymm3,%ymm2,%ymm2 1000*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm7,%ymm2,%ymm6 1001*53a2e263SMartin Matuska 1002*53a2e263SMartin Matuska vbroadcasti128 -144(%r11),%ymm2 1003*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 1004*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 1005*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 1006*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 1007*53a2e263SMartin Matuska 1008*53a2e263SMartin Matuska 1009*53a2e263SMartin Matuska vbroadcasti128 -128(%r11),%ymm2 1010*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 1011*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 1012*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 1013*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 1014*53a2e263SMartin Matuska 1015*53a2e263SMartin Matuska 1016*53a2e263SMartin Matuska vmovdqu 32(%rdi),%ymm3 1017*53a2e263SMartin Matuska vpshufb %ymm0,%ymm3,%ymm3 1018*53a2e263SMartin Matuska vmovdqu 32(%r9),%ymm4 1019*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2 1020*53a2e263SMartin Matuska vpxor %ymm2,%ymm5,%ymm5 1021*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2 1022*53a2e263SMartin Matuska vpxor %ymm2,%ymm1,%ymm1 1023*53a2e263SMartin Matuska vpunpckhqdq %ymm3,%ymm3,%ymm2 1024*53a2e263SMartin Matuska vpxor %ymm3,%ymm2,%ymm2 1025*53a2e263SMartin Matuska vpclmulqdq $0x10,%ymm7,%ymm2,%ymm2 1026*53a2e263SMartin Matuska vpxor %ymm2,%ymm6,%ymm6 1027*53a2e263SMartin Matuska 1028*53a2e263SMartin Matuska vbroadcasti128 -112(%r11),%ymm2 1029*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 1030*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 1031*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 1032*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 1033*53a2e263SMartin Matuska 1034*53a2e263SMartin Matuska 1035*53a2e263SMartin Matuska vmovdqu 64(%rdi),%ymm3 1036*53a2e263SMartin Matuska vpshufb %ymm0,%ymm3,%ymm3 1037*53a2e263SMartin Matuska vmovdqu 64(%r9),%ymm4 1038*53a2e263SMartin Matuska 1039*53a2e263SMartin Matuska vbroadcasti128 -96(%r11),%ymm2 1040*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 1041*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 1042*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 1043*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 1044*53a2e263SMartin Matuska 1045*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2 1046*53a2e263SMartin Matuska vpxor %ymm2,%ymm5,%ymm5 1047*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2 1048*53a2e263SMartin Matuska vpxor %ymm2,%ymm1,%ymm1 1049*53a2e263SMartin Matuska 1050*53a2e263SMartin Matuska vbroadcasti128 -80(%r11),%ymm2 1051*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 1052*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 1053*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 1054*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 1055*53a2e263SMartin Matuska 1056*53a2e263SMartin Matuska vpunpckhqdq %ymm3,%ymm3,%ymm2 1057*53a2e263SMartin Matuska vpxor %ymm3,%ymm2,%ymm2 1058*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm8,%ymm2,%ymm2 1059*53a2e263SMartin Matuska vpxor %ymm2,%ymm6,%ymm6 1060*53a2e263SMartin Matuska 1061*53a2e263SMartin Matuska 1062*53a2e263SMartin Matuska vmovdqu 96(%rdi),%ymm3 1063*53a2e263SMartin Matuska vpshufb %ymm0,%ymm3,%ymm3 1064*53a2e263SMartin Matuska 1065*53a2e263SMartin Matuska vbroadcasti128 -64(%r11),%ymm2 1066*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 1067*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 1068*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 1069*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 1070*53a2e263SMartin Matuska 1071*53a2e263SMartin Matuska vmovdqu 96(%r9),%ymm4 1072*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm4,%ymm3,%ymm2 1073*53a2e263SMartin Matuska vpxor %ymm2,%ymm5,%ymm5 1074*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm4,%ymm3,%ymm2 1075*53a2e263SMartin Matuska vpxor %ymm2,%ymm1,%ymm1 1076*53a2e263SMartin Matuska vpunpckhqdq %ymm3,%ymm3,%ymm2 1077*53a2e263SMartin Matuska vpxor %ymm3,%ymm2,%ymm2 1078*53a2e263SMartin Matuska vpclmulqdq $0x10,%ymm8,%ymm2,%ymm2 1079*53a2e263SMartin Matuska vpxor %ymm2,%ymm6,%ymm6 1080*53a2e263SMartin Matuska 1081*53a2e263SMartin Matuska vbroadcasti128 -48(%r11),%ymm2 1082*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 1083*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 1084*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 1085*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 1086*53a2e263SMartin Matuska 1087*53a2e263SMartin Matuska 1088*53a2e263SMartin Matuska vpxor %ymm5,%ymm6,%ymm6 1089*53a2e263SMartin Matuska vpxor %ymm1,%ymm6,%ymm6 1090*53a2e263SMartin Matuska 1091*53a2e263SMartin Matuska 1092*53a2e263SMartin Matuska vbroadcasti128 .Lgfpoly(%rip),%ymm4 1093*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm5,%ymm4,%ymm2 1094*53a2e263SMartin Matuska vpshufd $0x4e,%ymm5,%ymm5 1095*53a2e263SMartin Matuska vpxor %ymm5,%ymm6,%ymm6 1096*53a2e263SMartin Matuska vpxor %ymm2,%ymm6,%ymm6 1097*53a2e263SMartin Matuska 1098*53a2e263SMartin Matuska vbroadcasti128 -32(%r11),%ymm2 1099*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 1100*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 1101*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 1102*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 1103*53a2e263SMartin Matuska 1104*53a2e263SMartin Matuska 1105*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm6,%ymm4,%ymm2 1106*53a2e263SMartin Matuska vpshufd $0x4e,%ymm6,%ymm6 1107*53a2e263SMartin Matuska vpxor %ymm6,%ymm1,%ymm1 1108*53a2e263SMartin Matuska vpxor %ymm2,%ymm1,%ymm1 1109*53a2e263SMartin Matuska 1110*53a2e263SMartin Matuska vbroadcasti128 -16(%r11),%ymm2 1111*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 1112*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 1113*53a2e263SMartin Matuska vaesenc %ymm2,%ymm14,%ymm14 1114*53a2e263SMartin Matuska vaesenc %ymm2,%ymm15,%ymm15 1115*53a2e263SMartin Matuska 1116*53a2e263SMartin Matuska vextracti128 $1,%ymm1,%xmm2 1117*53a2e263SMartin Matuska vpxor %xmm2,%xmm1,%xmm1 1118*53a2e263SMartin Matuska 1119*53a2e263SMartin Matuska 1120*53a2e263SMartin Matuska 1121*53a2e263SMartin Matuska vpxor 0(%rdi),%ymm10,%ymm2 1122*53a2e263SMartin Matuska vpxor 32(%rdi),%ymm10,%ymm3 1123*53a2e263SMartin Matuska vpxor 64(%rdi),%ymm10,%ymm5 1124*53a2e263SMartin Matuska vpxor 96(%rdi),%ymm10,%ymm6 1125*53a2e263SMartin Matuska vaesenclast %ymm2,%ymm12,%ymm12 1126*53a2e263SMartin Matuska vaesenclast %ymm3,%ymm13,%ymm13 1127*53a2e263SMartin Matuska vaesenclast %ymm5,%ymm14,%ymm14 1128*53a2e263SMartin Matuska vaesenclast %ymm6,%ymm15,%ymm15 1129*53a2e263SMartin Matuska vmovdqu %ymm12,0(%rsi) 1130*53a2e263SMartin Matuska vmovdqu %ymm13,32(%rsi) 1131*53a2e263SMartin Matuska vmovdqu %ymm14,64(%rsi) 1132*53a2e263SMartin Matuska vmovdqu %ymm15,96(%rsi) 1133*53a2e263SMartin Matuska 1134*53a2e263SMartin Matuska subq $-128,%rdi 1135*53a2e263SMartin Matuska subq $-128,%rsi 1136*53a2e263SMartin Matuska addq $-128,%rdx 1137*53a2e263SMartin Matuska cmpq $127,%rdx 1138*53a2e263SMartin Matuska ja .Lcrypt_loop_4x__func2 1139*53a2e263SMartin Matuska.Lcrypt_loop_4x_done__func2: 1140*53a2e263SMartin Matuska 1141*53a2e263SMartin Matuska testq %rdx,%rdx 1142*53a2e263SMartin Matuska jz .Ldone__func2 1143*53a2e263SMartin Matuska 1144*53a2e263SMartin Matuska 1145*53a2e263SMartin Matuska 1146*53a2e263SMartin Matuska 1147*53a2e263SMartin Matuska 1148*53a2e263SMartin Matuska leaq 128(%r9),%r8 1149*53a2e263SMartin Matuska subq %rdx,%r8 1150*53a2e263SMartin Matuska 1151*53a2e263SMartin Matuska 1152*53a2e263SMartin Matuska vpxor %xmm5,%xmm5,%xmm5 1153*53a2e263SMartin Matuska vpxor %xmm6,%xmm6,%xmm6 1154*53a2e263SMartin Matuska vpxor %xmm7,%xmm7,%xmm7 1155*53a2e263SMartin Matuska 1156*53a2e263SMartin Matuska cmpq $64,%rdx 1157*53a2e263SMartin Matuska jb .Llessthan64bytes__func2 1158*53a2e263SMartin Matuska 1159*53a2e263SMartin Matuska 1160*53a2e263SMartin Matuska vpshufb %ymm0,%ymm11,%ymm12 1161*53a2e263SMartin Matuska vpaddd .Linc_2blocks(%rip),%ymm11,%ymm11 1162*53a2e263SMartin Matuska vpshufb %ymm0,%ymm11,%ymm13 1163*53a2e263SMartin Matuska vpaddd .Linc_2blocks(%rip),%ymm11,%ymm11 1164*53a2e263SMartin Matuska vpxor %ymm9,%ymm12,%ymm12 1165*53a2e263SMartin Matuska vpxor %ymm9,%ymm13,%ymm13 1166*53a2e263SMartin Matuska leaq 16(%rcx),%rax 1167*53a2e263SMartin Matuska.Lvaesenc_loop_tail_1__func2: 1168*53a2e263SMartin Matuska vbroadcasti128 (%rax),%ymm2 1169*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 1170*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 1171*53a2e263SMartin Matuska addq $16,%rax 1172*53a2e263SMartin Matuska cmpq %rax,%r11 1173*53a2e263SMartin Matuska jne .Lvaesenc_loop_tail_1__func2 1174*53a2e263SMartin Matuska vaesenclast %ymm10,%ymm12,%ymm12 1175*53a2e263SMartin Matuska vaesenclast %ymm10,%ymm13,%ymm13 1176*53a2e263SMartin Matuska 1177*53a2e263SMartin Matuska 1178*53a2e263SMartin Matuska vmovdqu 0(%rdi),%ymm2 1179*53a2e263SMartin Matuska vmovdqu 32(%rdi),%ymm3 1180*53a2e263SMartin Matuska vpxor %ymm2,%ymm12,%ymm12 1181*53a2e263SMartin Matuska vpxor %ymm3,%ymm13,%ymm13 1182*53a2e263SMartin Matuska vmovdqu %ymm12,0(%rsi) 1183*53a2e263SMartin Matuska vmovdqu %ymm13,32(%rsi) 1184*53a2e263SMartin Matuska 1185*53a2e263SMartin Matuska 1186*53a2e263SMartin Matuska vpshufb %ymm0,%ymm2,%ymm12 1187*53a2e263SMartin Matuska vpshufb %ymm0,%ymm3,%ymm13 1188*53a2e263SMartin Matuska vpxor %ymm1,%ymm12,%ymm12 1189*53a2e263SMartin Matuska vmovdqu (%r8),%ymm2 1190*53a2e263SMartin Matuska vmovdqu 32(%r8),%ymm3 1191*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm2,%ymm12,%ymm5 1192*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm2,%ymm12,%ymm6 1193*53a2e263SMartin Matuska vpclmulqdq $0x10,%ymm2,%ymm12,%ymm4 1194*53a2e263SMartin Matuska vpxor %ymm4,%ymm6,%ymm6 1195*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm2,%ymm12,%ymm7 1196*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm3,%ymm13,%ymm4 1197*53a2e263SMartin Matuska vpxor %ymm4,%ymm5,%ymm5 1198*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm3,%ymm13,%ymm4 1199*53a2e263SMartin Matuska vpxor %ymm4,%ymm6,%ymm6 1200*53a2e263SMartin Matuska vpclmulqdq $0x10,%ymm3,%ymm13,%ymm4 1201*53a2e263SMartin Matuska vpxor %ymm4,%ymm6,%ymm6 1202*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm3,%ymm13,%ymm4 1203*53a2e263SMartin Matuska vpxor %ymm4,%ymm7,%ymm7 1204*53a2e263SMartin Matuska 1205*53a2e263SMartin Matuska addq $64,%r8 1206*53a2e263SMartin Matuska addq $64,%rdi 1207*53a2e263SMartin Matuska addq $64,%rsi 1208*53a2e263SMartin Matuska subq $64,%rdx 1209*53a2e263SMartin Matuska jz .Lreduce__func2 1210*53a2e263SMartin Matuska 1211*53a2e263SMartin Matuska vpxor %xmm1,%xmm1,%xmm1 1212*53a2e263SMartin Matuska 1213*53a2e263SMartin Matuska 1214*53a2e263SMartin Matuska.Llessthan64bytes__func2: 1215*53a2e263SMartin Matuska vpshufb %ymm0,%ymm11,%ymm12 1216*53a2e263SMartin Matuska vpaddd .Linc_2blocks(%rip),%ymm11,%ymm11 1217*53a2e263SMartin Matuska vpshufb %ymm0,%ymm11,%ymm13 1218*53a2e263SMartin Matuska vpxor %ymm9,%ymm12,%ymm12 1219*53a2e263SMartin Matuska vpxor %ymm9,%ymm13,%ymm13 1220*53a2e263SMartin Matuska leaq 16(%rcx),%rax 1221*53a2e263SMartin Matuska.Lvaesenc_loop_tail_2__func2: 1222*53a2e263SMartin Matuska vbroadcasti128 (%rax),%ymm2 1223*53a2e263SMartin Matuska vaesenc %ymm2,%ymm12,%ymm12 1224*53a2e263SMartin Matuska vaesenc %ymm2,%ymm13,%ymm13 1225*53a2e263SMartin Matuska addq $16,%rax 1226*53a2e263SMartin Matuska cmpq %rax,%r11 1227*53a2e263SMartin Matuska jne .Lvaesenc_loop_tail_2__func2 1228*53a2e263SMartin Matuska vaesenclast %ymm10,%ymm12,%ymm12 1229*53a2e263SMartin Matuska vaesenclast %ymm10,%ymm13,%ymm13 1230*53a2e263SMartin Matuska 1231*53a2e263SMartin Matuska 1232*53a2e263SMartin Matuska 1233*53a2e263SMartin Matuska 1234*53a2e263SMartin Matuska cmpq $32,%rdx 1235*53a2e263SMartin Matuska jb .Lxor_one_block__func2 1236*53a2e263SMartin Matuska je .Lxor_two_blocks__func2 1237*53a2e263SMartin Matuska 1238*53a2e263SMartin Matuska.Lxor_three_blocks__func2: 1239*53a2e263SMartin Matuska vmovdqu 0(%rdi),%ymm2 1240*53a2e263SMartin Matuska vmovdqu 32(%rdi),%xmm3 1241*53a2e263SMartin Matuska vpxor %ymm2,%ymm12,%ymm12 1242*53a2e263SMartin Matuska vpxor %xmm3,%xmm13,%xmm13 1243*53a2e263SMartin Matuska vmovdqu %ymm12,0(%rsi) 1244*53a2e263SMartin Matuska vmovdqu %xmm13,32(%rsi) 1245*53a2e263SMartin Matuska 1246*53a2e263SMartin Matuska vpshufb %ymm0,%ymm2,%ymm12 1247*53a2e263SMartin Matuska vpshufb %xmm0,%xmm3,%xmm13 1248*53a2e263SMartin Matuska vpxor %ymm1,%ymm12,%ymm12 1249*53a2e263SMartin Matuska vmovdqu (%r8),%ymm2 1250*53a2e263SMartin Matuska vmovdqu 32(%r8),%xmm3 1251*53a2e263SMartin Matuska vpclmulqdq $0x00,%xmm3,%xmm13,%xmm4 1252*53a2e263SMartin Matuska vpxor %ymm4,%ymm5,%ymm5 1253*53a2e263SMartin Matuska vpclmulqdq $0x01,%xmm3,%xmm13,%xmm4 1254*53a2e263SMartin Matuska vpxor %ymm4,%ymm6,%ymm6 1255*53a2e263SMartin Matuska vpclmulqdq $0x10,%xmm3,%xmm13,%xmm4 1256*53a2e263SMartin Matuska vpxor %ymm4,%ymm6,%ymm6 1257*53a2e263SMartin Matuska vpclmulqdq $0x11,%xmm3,%xmm13,%xmm4 1258*53a2e263SMartin Matuska vpxor %ymm4,%ymm7,%ymm7 1259*53a2e263SMartin Matuska jmp .Lghash_mul_one_vec_unreduced__func2 1260*53a2e263SMartin Matuska 1261*53a2e263SMartin Matuska.Lxor_two_blocks__func2: 1262*53a2e263SMartin Matuska vmovdqu (%rdi),%ymm2 1263*53a2e263SMartin Matuska vpxor %ymm2,%ymm12,%ymm12 1264*53a2e263SMartin Matuska vmovdqu %ymm12,(%rsi) 1265*53a2e263SMartin Matuska vpshufb %ymm0,%ymm2,%ymm12 1266*53a2e263SMartin Matuska vpxor %ymm1,%ymm12,%ymm12 1267*53a2e263SMartin Matuska vmovdqu (%r8),%ymm2 1268*53a2e263SMartin Matuska jmp .Lghash_mul_one_vec_unreduced__func2 1269*53a2e263SMartin Matuska 1270*53a2e263SMartin Matuska.Lxor_one_block__func2: 1271*53a2e263SMartin Matuska vmovdqu (%rdi),%xmm2 1272*53a2e263SMartin Matuska vpxor %xmm2,%xmm12,%xmm12 1273*53a2e263SMartin Matuska vmovdqu %xmm12,(%rsi) 1274*53a2e263SMartin Matuska vpshufb %xmm0,%xmm2,%xmm12 1275*53a2e263SMartin Matuska vpxor %xmm1,%xmm12,%xmm12 1276*53a2e263SMartin Matuska vmovdqu (%r8),%xmm2 1277*53a2e263SMartin Matuska 1278*53a2e263SMartin Matuska.Lghash_mul_one_vec_unreduced__func2: 1279*53a2e263SMartin Matuska vpclmulqdq $0x00,%ymm2,%ymm12,%ymm4 1280*53a2e263SMartin Matuska vpxor %ymm4,%ymm5,%ymm5 1281*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm2,%ymm12,%ymm4 1282*53a2e263SMartin Matuska vpxor %ymm4,%ymm6,%ymm6 1283*53a2e263SMartin Matuska vpclmulqdq $0x10,%ymm2,%ymm12,%ymm4 1284*53a2e263SMartin Matuska vpxor %ymm4,%ymm6,%ymm6 1285*53a2e263SMartin Matuska vpclmulqdq $0x11,%ymm2,%ymm12,%ymm4 1286*53a2e263SMartin Matuska vpxor %ymm4,%ymm7,%ymm7 1287*53a2e263SMartin Matuska 1288*53a2e263SMartin Matuska.Lreduce__func2: 1289*53a2e263SMartin Matuska 1290*53a2e263SMartin Matuska vbroadcasti128 .Lgfpoly(%rip),%ymm2 1291*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm5,%ymm2,%ymm3 1292*53a2e263SMartin Matuska vpshufd $0x4e,%ymm5,%ymm5 1293*53a2e263SMartin Matuska vpxor %ymm5,%ymm6,%ymm6 1294*53a2e263SMartin Matuska vpxor %ymm3,%ymm6,%ymm6 1295*53a2e263SMartin Matuska vpclmulqdq $0x01,%ymm6,%ymm2,%ymm3 1296*53a2e263SMartin Matuska vpshufd $0x4e,%ymm6,%ymm6 1297*53a2e263SMartin Matuska vpxor %ymm6,%ymm7,%ymm7 1298*53a2e263SMartin Matuska vpxor %ymm3,%ymm7,%ymm7 1299*53a2e263SMartin Matuska vextracti128 $1,%ymm7,%xmm1 1300*53a2e263SMartin Matuska vpxor %xmm7,%xmm1,%xmm1 1301*53a2e263SMartin Matuska 1302*53a2e263SMartin Matuska.Ldone__func2: 1303*53a2e263SMartin Matuska 1304*53a2e263SMartin Matuska vpshufb %xmm0,%xmm1,%xmm1 1305*53a2e263SMartin Matuska vmovdqu %xmm1,(%r12) 1306*53a2e263SMartin Matuska 1307*53a2e263SMartin Matuska vzeroupper 1308*53a2e263SMartin Matuska popq %r12 1309*53a2e263SMartin Matuska.cfi_adjust_cfa_offset -8 1310*53a2e263SMartin Matuska.cfi_restore %r12 1311*53a2e263SMartin Matuska RET 1312*53a2e263SMartin Matuska 1313*53a2e263SMartin Matuska.cfi_endproc 1314*53a2e263SMartin MatuskaSET_SIZE(aes_gcm_dec_update_vaes_avx2) 1315*53a2e263SMartin Matuska 1316*53a2e263SMartin Matuska#endif /* !_WIN32 || _KERNEL */ 1317*53a2e263SMartin Matuska 1318*53a2e263SMartin Matuska/* Mark the stack non-executable. */ 1319*53a2e263SMartin Matuska#if defined(__linux__) && defined(__ELF__) 1320*53a2e263SMartin Matuska.section .note.GNU-stack,"",%progbits 1321*53a2e263SMartin Matuska#endif 1322*53a2e263SMartin Matuska 1323*53a2e263SMartin Matuska#endif /* defined(__x86_64__) && defined(HAVE_AVX) && defined(HAVE_AES) ... */ 1324