/* * Copyright (C) 2017 Jason A. Donenfeld . All Rights Reserved. * Based on algorithms from Samuel Neves */ #include .section .rodata.cst32.BLAKECONST, "aM", @progbits, 32 .align 32 IV: .octa 0xA54FF53A3C6EF372BB67AE856A09E667 .octa 0x5BE0CD191F83D9AB9B05688C510E527F .section .rodata.cst16.ROT16, "aM", @progbits, 16 .align 16 ROT16: .octa 0x0D0C0F0E09080B0A0504070601000302 .section .rodata.cst16.ROR328, "aM", @progbits, 16 .align 16 ROR328: .octa 0x0C0F0E0D080B0A090407060500030201 #ifdef CONFIG_AS_AVX512 .section .rodata.cst64.BLAKESIGMA, "aM", @progbits, 640 .align 64 SIGMA: .long 0, 2, 4, 6, 1, 3, 5, 7 .long 8, 10, 12, 14, 9, 11, 13, 15 .long 14, 4, 9, 13, 10, 8, 15, 6 .long 1, 0, 11, 5, 12, 2, 7, 3 .long 11, 12, 5, 15, 8, 0, 2, 13 .long 10, 3, 7, 9, 14, 6, 1, 4 .long 7, 3, 13, 11, 9, 1, 12, 14 .long 2, 5, 4, 15, 6, 10, 0, 8 .long 9, 5, 2, 10, 0, 7, 4, 15 .long 14, 11, 6, 3, 1, 12, 8, 13 .long 2, 6, 0, 8, 12, 10, 11, 3 .long 4, 7, 15, 1, 13, 5, 14, 9 .long 12, 1, 14, 4, 5, 15, 13, 10 .long 0, 6, 9, 8, 7, 3, 2, 11 .long 13, 7, 12, 3, 11, 14, 1, 9 .long 5, 15, 8, 2, 0, 4, 6, 10 .long 6, 14, 11, 0, 15, 9, 3, 8 .long 12, 13, 1, 10, 2, 7, 4, 5 .long 10, 8, 7, 1, 2, 4, 6, 5 .long 15, 9, 3, 13, 11, 14, 12, 0 #endif /* CONFIG_AS_AVX512 */ .text #ifdef CONFIG_AS_AVX ENTRY(blake2s_compress_avx) movl %ecx, %ecx testq %rdx, %rdx je .Lendofloop .align 32 .Lbeginofloop: addq %rcx, 32(%rdi) vmovdqu IV+16(%rip), %xmm1 vmovdqu (%rsi), %xmm4 vpxor 32(%rdi), %xmm1, %xmm1 vmovdqu 16(%rsi), %xmm3 vshufps $136, %xmm3, %xmm4, %xmm6 vmovdqa ROT16(%rip), %xmm7 vpaddd (%rdi), %xmm6, %xmm6 vpaddd 16(%rdi), %xmm6, %xmm6 vpxor %xmm6, %xmm1, %xmm1 vmovdqu IV(%rip), %xmm8 vpshufb %xmm7, %xmm1, %xmm1 vmovdqu 48(%rsi), %xmm5 vpaddd %xmm1, %xmm8, %xmm8 vpxor 16(%rdi), %xmm8, %xmm9 vmovdqu 32(%rsi), %xmm2 vpblendw $12, %xmm3, %xmm5, %xmm13 vshufps $221, %xmm5, %xmm2, %xmm12 vpunpckhqdq %xmm2, %xmm4, %xmm14 vpslld $20, %xmm9, %xmm0 vpsrld $12, %xmm9, %xmm9 vpxor %xmm0, %xmm9, %xmm0 vshufps $221, %xmm3, %xmm4, %xmm9 vpaddd %xmm9, %xmm6, %xmm9 vpaddd %xmm0, %xmm9, %xmm9 vpxor %xmm9, %xmm1, %xmm1 vmovdqa ROR328(%rip), %xmm6 vpshufb %xmm6, %xmm1, %xmm1 vpaddd %xmm1, %xmm8, %xmm8 vpxor %xmm8, %xmm0, %xmm0 vpshufd $147, %xmm1, %xmm1 vpshufd $78, %xmm8, %xmm8 vpslld $25, %xmm0, %xmm10 vpsrld $7, %xmm0, %xmm0 vpxor %xmm10, %xmm0, %xmm0 vshufps $136, %xmm5, %xmm2, %xmm10 vpshufd $57, %xmm0, %xmm0 vpaddd %xmm10, %xmm9, %xmm9 vpaddd %xmm0, %xmm9, %xmm9 vpxor %xmm9, %xmm1, %xmm1 vpaddd %xmm12, %xmm9, %xmm9 vpblendw $12, %xmm2, %xmm3, %xmm12 vpshufb %xmm7, %xmm1, %xmm1 vpaddd %xmm1, %xmm8, %xmm8 vpxor %xmm8, %xmm0, %xmm10 vpslld $20, %xmm10, %xmm0 vpsrld $12, %xmm10, %xmm10 vpxor %xmm0, %xmm10, %xmm0 vpaddd %xmm0, %xmm9, %xmm9 vpxor %xmm9, %xmm1, %xmm1 vpshufb %xmm6, %xmm1, %xmm1 vpaddd %xmm1, %xmm8, %xmm8 vpxor %xmm8, %xmm0, %xmm0 vpshufd $57, %xmm1, %xmm1 vpshufd $78, %xmm8, %xmm8 vpslld $25, %xmm0, %xmm10 vpsrld $7, %xmm0, %xmm0 vpxor %xmm10, %xmm0, %xmm0 vpslldq $4, %xmm5, %xmm10 vpblendw $240, %xmm10, %xmm12, %xmm12 vpshufd $147, %xmm0, %xmm0 vpshufd $147, %xmm12, %xmm12 vpaddd %xmm9, %xmm12, %xmm12 vpaddd %xmm0, %xmm12, %xmm12 vpxor %xmm12, %xmm1, %xmm1 vpshufb %xmm7, %xmm1, %xmm1 vpaddd %xmm1, %xmm8, %xmm8 vpxor %xmm8, %xmm0, %xmm11 vpslld $20, %xmm11, %xmm9 vpsrld $12, %xmm11, %xmm11 vpxor %xmm9, %xmm11, %xmm0 vpshufd $8, %xmm2, %xmm9 vpblendw $192, %xmm5, %xmm3, %xmm11 vpblendw $240, %xmm11, %xmm9, %xmm9 vpshufd $177, %xmm9, %xmm9 vpaddd %xmm12, %xmm9, %xmm9 vpaddd %xmm0, %xmm9, %xmm11 vpxor %xmm11, %xmm1, %xmm1 vpshufb %xmm6, %xmm1, %xmm1 vpaddd %xmm1, %xmm8, %xmm8 vpxor %xmm8, %xmm0, %xmm9 vpshufd $147, %xmm1, %xmm1 vpshufd $78, %xmm8, %xmm8 vpslld $25, %xmm9, %xmm0 vpsrld $7, %xmm9, %xmm9 vpxor %xmm0, %xmm9, %xmm0 vpslldq $4, %xmm3, %xmm9 vpblendw $48, %xmm9, %xmm2, %xmm9 vpblendw $240, %xmm9, %xmm4, %xmm9 vpshufd $57, %xmm0, %xmm0 vpshufd $177, %xmm9, %xmm9 vpaddd %xmm11, %xmm9, %xmm9 vpaddd %xmm0, %xmm9, %xmm9 vpxor %xmm9, %xmm1, %xmm1 vpshufb %xmm7, %xmm1, %xmm1 vpaddd %xmm1, %xmm8, %xmm11 vpxor %xmm11, %xmm0, %xmm0 vpslld $20, %xmm0, %xmm8 vpsrld $12, %xmm0, %xmm0 vpxor %xmm8, %xmm0, %xmm0 vpunpckhdq %xmm3, %xmm4, %xmm8 vpblendw $12, %xmm10, %xmm8, %xmm12 vpshufd $177, %xmm12, %xmm12 vpaddd %xmm9, %xmm12, %xmm9 vpaddd %xmm0, %xmm9, %xmm9 vpxor %xmm9, %xmm1, %xmm1 vpshufb %xmm6, %xmm1, %xmm1 vpaddd %xmm1, %xmm11, %xmm11 vpxor %xmm11, %xmm0, %xmm0 vpshufd $57, %xmm1, %xmm1 vpshufd $78, %xmm11, %xmm11 vpslld $25, %xmm0, %xmm12 vpsrld $7, %xmm0, %xmm0 vpxor %xmm12, %xmm0, %xmm0 vpunpckhdq %xmm5, %xmm2, %xmm12 vpshufd $147, %xmm0, %xmm0 vpblendw $15, %xmm13, %xmm12, %xmm12 vpslldq $8, %xmm5, %xmm13 vpshufd $210, %xmm12, %xmm12 vpaddd %xmm9, %xmm12, %xmm9 vpaddd %xmm0, %xmm9, %xmm9 vpxor %xmm9, %xmm1, %xmm1 vpshufb %xmm7, %xmm1, %xmm1 vpaddd %xmm1, %xmm11, %xmm11 vpxor %xmm11, %xmm0, %xmm0 vpslld $20, %xmm0, %xmm12 vpsrld $12, %xmm0, %xmm0 vpxor %xmm12, %xmm0, %xmm0 vpunpckldq %xmm4, %xmm2, %xmm12 vpblendw $240, %xmm4, %xmm12, %xmm12 vpblendw $192, %xmm13, %xmm12, %xmm12 vpsrldq $12, %xmm3, %xmm13 vpaddd %xmm12, %xmm9, %xmm9 vpaddd %xmm0, %xmm9, %xmm9 vpxor %xmm9, %xmm1, %xmm1 vpshufb %xmm6, %xmm1, %xmm1 vpaddd %xmm1, %xmm11, %xmm11 vpxor %xmm11, %xmm0, %xmm0 vpshufd $147, %xmm1, %xmm1 vpshufd $78, %xmm11, %xmm11 vpslld $25, %xmm0, %xmm12 vpsrld $7, %xmm0, %xmm0 vpxor %xmm12, %xmm0, %xmm0 vpblendw $60, %xmm2, %xmm4, %xmm12 vpblendw $3, %xmm13, %xmm12, %xmm12 vpshufd $57, %xmm0, %xmm0 vpshufd $78, %xmm12, %xmm12 vpaddd %xmm9, %xmm12, %xmm9 vpaddd %xmm0, %xmm9, %xmm9 vpxor %xmm9, %xmm1, %xmm1 vpshufb %xmm7, %xmm1, %xmm1 vpaddd %xmm1, %xmm11, %xmm11 vpxor %xmm11, %xmm0, %xmm12 vpslld $20, %xmm12, %xmm13 vpsrld $12, %xmm12, %xmm0 vpblendw $51, %xmm3, %xmm4, %xmm12 vpxor %xmm13, %xmm0, %xmm0 vpblendw $192, %xmm10, %xmm12, %xmm10 vpslldq $8, %xmm2, %xmm12 vpshufd $27, %xmm10, %xmm10 vpaddd %xmm9, %xmm10, %xmm9 vpaddd %xmm0, %xmm9, %xmm9 vpxor %xmm9, %xmm1, %xmm1 vpshufb %xmm6, %xmm1, %xmm1 vpaddd %xmm1, %xmm11, %xmm11 vpxor %xmm11, %xmm0, %xmm0 vpshufd $57, %xmm1, %xmm1 vpshufd $78, %xmm11, %xmm11 vpslld $25, %xmm0, %xmm10 vpsrld $7, %xmm0, %xmm0 vpxor %xmm10, %xmm0, %xmm0 vpunpckhdq %xmm2, %xmm8, %xmm10 vpshufd $147, %xmm0, %xmm0 vpblendw $12, %xmm5, %xmm10, %xmm10 vpshufd $210, %xmm10, %xmm10 vpaddd %xmm9, %xmm10, %xmm9 vpaddd %xmm0, %xmm9, %xmm9 vpxor %xmm9, %xmm1, %xmm1 vpshufb %xmm7, %xmm1, %xmm1 vpaddd %xmm1, %xmm11, %xmm11 vpxor %xmm11, %xmm0, %xmm10 vpslld $20, %xmm10, %xmm0 vpsrld $12, %xmm10, %xmm10 vpxor %xmm0, %xmm10, %xmm0 vpblendw $12, %xmm4, %xmm5, %xmm10 vpblendw $192, %xmm12, %xmm10, %xmm10 vpunpckldq %xmm2, %xmm4, %xmm12 vpshufd $135, %xmm10, %xmm10 vpaddd %xmm9, %xmm10, %xmm9 vpaddd %xmm0, %xmm9, %xmm9 vpxor %xmm9, %xmm1, %xmm1 vpshufb %xmm6, %xmm1, %xmm1 vpaddd %xmm1, %xmm11, %xmm13 vpxor %xmm13, %xmm0, %xmm0 vpshufd $147, %xmm1, %xmm1 vpshufd $78, %xmm13, %xmm13 vpslld $25, %xmm0, %xmm10 vpsrld $7, %xmm0, %xmm0 vpxor %xmm10, %xmm0, %xmm0 vpblendw $15, %xmm3, %xmm4, %xmm10 vpblendw $192, %xmm5, %xmm10, %xmm10 vpshufd $57, %xmm0, %xmm0 vpshufd $198, %xmm10, %xmm10 vpaddd %xmm9, %xmm10, %xmm10 vpaddd %xmm0, %xmm10, %xmm10 vpxor %xmm10, %xmm1, %xmm1 vpshufb %xmm7, %xmm1, %xmm1 vpaddd %xmm1, %xmm13, %xmm13 vpxor %xmm13, %xmm0, %xmm9 vpslld $20, %xmm9, %xmm0 vpsrld $12, %xmm9, %xmm9 vpxor %xmm0, %xmm9, %xmm0 vpunpckhdq %xmm2, %xmm3, %xmm9 vpunpcklqdq %xmm12, %xmm9, %xmm15 vpunpcklqdq %xmm12, %xmm8, %xmm12 vpblendw $15, %xmm5, %xmm8, %xmm8 vpaddd %xmm15, %xmm10, %xmm15 vpaddd %xmm0, %xmm15, %xmm15 vpxor %xmm15, %xmm1, %xmm1 vpshufd $141, %xmm8, %xmm8 vpshufb %xmm6, %xmm1, %xmm1 vpaddd %xmm1, %xmm13, %xmm13 vpxor %xmm13, %xmm0, %xmm0 vpshufd $57, %xmm1, %xmm1 vpshufd $78, %xmm13, %xmm13 vpslld $25, %xmm0, %xmm10 vpsrld $7, %xmm0, %xmm0 vpxor %xmm10, %xmm0, %xmm0 vpunpcklqdq %xmm2, %xmm3, %xmm10 vpshufd $147, %xmm0, %xmm0 vpblendw $51, %xmm14, %xmm10, %xmm14 vpshufd $135, %xmm14, %xmm14 vpaddd %xmm15, %xmm14, %xmm14 vpaddd %xmm0, %xmm14, %xmm14 vpxor %xmm14, %xmm1, %xmm1 vpunpcklqdq %xmm3, %xmm4, %xmm15 vpshufb %xmm7, %xmm1, %xmm1 vpaddd %xmm1, %xmm13, %xmm13 vpxor %xmm13, %xmm0, %xmm0 vpslld $20, %xmm0, %xmm11 vpsrld $12, %xmm0, %xmm0 vpxor %xmm11, %xmm0, %xmm0 vpunpckhqdq %xmm5, %xmm3, %xmm11 vpblendw $51, %xmm15, %xmm11, %xmm11 vpunpckhqdq %xmm3, %xmm5, %xmm15 vpaddd %xmm11, %xmm14, %xmm11 vpaddd %xmm0, %xmm11, %xmm11 vpxor %xmm11, %xmm1, %xmm1 vpshufb %xmm6, %xmm1, %xmm1 vpaddd %xmm1, %xmm13, %xmm13 vpxor %xmm13, %xmm0, %xmm0 vpshufd $147, %xmm1, %xmm1 vpshufd $78, %xmm13, %xmm13 vpslld $25, %xmm0, %xmm14 vpsrld $7, %xmm0, %xmm0 vpxor %xmm14, %xmm0, %xmm14 vpunpckhqdq %xmm4, %xmm2, %xmm0 vpshufd $57, %xmm14, %xmm14 vpblendw $51, %xmm15, %xmm0, %xmm15 vpaddd %xmm15, %xmm11, %xmm15 vpaddd %xmm14, %xmm15, %xmm15 vpxor %xmm15, %xmm1, %xmm1 vpshufb %xmm7, %xmm1, %xmm1 vpaddd %xmm1, %xmm13, %xmm13 vpxor %xmm13, %xmm14, %xmm14 vpslld $20, %xmm14, %xmm11 vpsrld $12, %xmm14, %xmm14 vpxor %xmm11, %xmm14, %xmm14 vpblendw $3, %xmm2, %xmm4, %xmm11 vpslldq $8, %xmm11, %xmm0 vpblendw $15, %xmm5, %xmm0, %xmm0 vpshufd $99, %xmm0, %xmm0 vpaddd %xmm15, %xmm0, %xmm15 vpaddd %xmm14, %xmm15, %xmm15 vpxor %xmm15, %xmm1, %xmm0 vpaddd %xmm12, %xmm15, %xmm15 vpshufb %xmm6, %xmm0, %xmm0 vpaddd %xmm0, %xmm13, %xmm13 vpxor %xmm13, %xmm14, %xmm14 vpshufd $57, %xmm0, %xmm0 vpshufd $78, %xmm13, %xmm13 vpslld $25, %xmm14, %xmm1 vpsrld $7, %xmm14, %xmm14 vpxor %xmm1, %xmm14, %xmm14 vpblendw $3, %xmm5, %xmm4, %xmm1 vpshufd $147, %xmm14, %xmm14 vpaddd %xmm14, %xmm15, %xmm15 vpxor %xmm15, %xmm0, %xmm0 vpshufb %xmm7, %xmm0, %xmm0 vpaddd %xmm0, %xmm13, %xmm13 vpxor %xmm13, %xmm14, %xmm14 vpslld $20, %xmm14, %xmm12 vpsrld $12, %xmm14, %xmm14 vpxor %xmm12, %xmm14, %xmm14 vpsrldq $4, %xmm2, %xmm12 vpblendw $60, %xmm12, %xmm1, %xmm1 vpaddd %xmm1, %xmm15, %xmm15 vpaddd %xmm14, %xmm15, %xmm15 vpxor %xmm15, %xmm0, %xmm0 vpblendw $12, %xmm4, %xmm3, %xmm1 vpshufb %xmm6, %xmm0, %xmm0 vpaddd %xmm0, %xmm13, %xmm13 vpxor %xmm13, %xmm14, %xmm14 vpshufd $147, %xmm0, %xmm0 vpshufd $78, %xmm13, %xmm13 vpslld $25, %xmm14, %xmm12 vpsrld $7, %xmm14, %xmm14 vpxor %xmm12, %xmm14, %xmm14 vpsrldq $4, %xmm5, %xmm12 vpblendw $48, %xmm12, %xmm1, %xmm1 vpshufd $33, %xmm5, %xmm12 vpshufd $57, %xmm14, %xmm14 vpshufd $108, %xmm1, %xmm1 vpblendw $51, %xmm12, %xmm10, %xmm12 vpaddd %xmm15, %xmm1, %xmm15 vpaddd %xmm14, %xmm15, %xmm15 vpxor %xmm15, %xmm0, %xmm0 vpaddd %xmm12, %xmm15, %xmm15 vpshufb %xmm7, %xmm0, %xmm0 vpaddd %xmm0, %xmm13, %xmm1 vpxor %xmm1, %xmm14, %xmm14 vpslld $20, %xmm14, %xmm13 vpsrld $12, %xmm14, %xmm14 vpxor %xmm13, %xmm14, %xmm14 vpslldq $12, %xmm3, %xmm13 vpaddd %xmm14, %xmm15, %xmm15 vpxor %xmm15, %xmm0, %xmm0 vpshufb %xmm6, %xmm0, %xmm0 vpaddd %xmm0, %xmm1, %xmm1 vpxor %xmm1, %xmm14, %xmm14 vpshufd $57, %xmm0, %xmm0 vpshufd $78, %xmm1, %xmm1 vpslld $25, %xmm14, %xmm12 vpsrld $7, %xmm14, %xmm14 vpxor %xmm12, %xmm14, %xmm14 vpblendw $51, %xmm5, %xmm4, %xmm12 vpshufd $147, %xmm14, %xmm14 vpblendw $192, %xmm13, %xmm12, %xmm12 vpaddd %xmm12, %xmm15, %xmm15 vpaddd %xmm14, %xmm15, %xmm15 vpxor %xmm15, %xmm0, %xmm0 vpsrldq $4, %xmm3, %xmm12 vpshufb %xmm7, %xmm0, %xmm0 vpaddd %xmm0, %xmm1, %xmm1 vpxor %xmm1, %xmm14, %xmm14 vpslld $20, %xmm14, %xmm13 vpsrld $12, %xmm14, %xmm14 vpxor %xmm13, %xmm14, %xmm14 vpblendw $48, %xmm2, %xmm5, %xmm13 vpblendw $3, %xmm12, %xmm13, %xmm13 vpshufd $156, %xmm13, %xmm13 vpaddd %xmm15, %xmm13, %xmm15 vpaddd %xmm14, %xmm15, %xmm15 vpxor %xmm15, %xmm0, %xmm0 vpshufb %xmm6, %xmm0, %xmm0 vpaddd %xmm0, %xmm1, %xmm1 vpxor %xmm1, %xmm14, %xmm14 vpshufd $147, %xmm0, %xmm0 vpshufd $78, %xmm1, %xmm1 vpslld $25, %xmm14, %xmm13 vpsrld $7, %xmm14, %xmm14 vpxor %xmm13, %xmm14, %xmm14 vpunpcklqdq %xmm2, %xmm4, %xmm13 vpshufd $57, %xmm14, %xmm14 vpblendw $12, %xmm12, %xmm13, %xmm12 vpshufd $180, %xmm12, %xmm12 vpaddd %xmm15, %xmm12, %xmm15 vpaddd %xmm14, %xmm15, %xmm15 vpxor %xmm15, %xmm0, %xmm0 vpshufb %xmm7, %xmm0, %xmm0 vpaddd %xmm0, %xmm1, %xmm1 vpxor %xmm1, %xmm14, %xmm14 vpslld $20, %xmm14, %xmm12 vpsrld $12, %xmm14, %xmm14 vpxor %xmm12, %xmm14, %xmm14 vpunpckhqdq %xmm9, %xmm4, %xmm12 vpshufd $198, %xmm12, %xmm12 vpaddd %xmm15, %xmm12, %xmm15 vpaddd %xmm14, %xmm15, %xmm15 vpxor %xmm15, %xmm0, %xmm0 vpaddd %xmm15, %xmm8, %xmm15 vpshufb %xmm6, %xmm0, %xmm0 vpaddd %xmm0, %xmm1, %xmm1 vpxor %xmm1, %xmm14, %xmm14 vpshufd $57, %xmm0, %xmm0 vpshufd $78, %xmm1, %xmm1 vpslld $25, %xmm14, %xmm12 vpsrld $7, %xmm14, %xmm14 vpxor %xmm12, %xmm14, %xmm14 vpsrldq $4, %xmm4, %xmm12 vpshufd $147, %xmm14, %xmm14 vpaddd %xmm14, %xmm15, %xmm15 vpxor %xmm15, %xmm0, %xmm0 vpshufb %xmm7, %xmm0, %xmm0 vpaddd %xmm0, %xmm1, %xmm1 vpxor %xmm1, %xmm14, %xmm14 vpslld $20, %xmm14, %xmm8 vpsrld $12, %xmm14, %xmm14 vpxor %xmm14, %xmm8, %xmm14 vpblendw $48, %xmm5, %xmm2, %xmm8 vpblendw $3, %xmm12, %xmm8, %xmm8 vpunpckhqdq %xmm5, %xmm4, %xmm12 vpshufd $75, %xmm8, %xmm8 vpblendw $60, %xmm10, %xmm12, %xmm10 vpaddd %xmm15, %xmm8, %xmm15 vpaddd %xmm14, %xmm15, %xmm15 vpxor %xmm0, %xmm15, %xmm0 vpshufd $45, %xmm10, %xmm10 vpshufb %xmm6, %xmm0, %xmm0 vpaddd %xmm15, %xmm10, %xmm15 vpaddd %xmm0, %xmm1, %xmm1 vpxor %xmm1, %xmm14, %xmm14 vpshufd $147, %xmm0, %xmm0 vpshufd $78, %xmm1, %xmm1 vpslld $25, %xmm14, %xmm8 vpsrld $7, %xmm14, %xmm14 vpxor %xmm14, %xmm8, %xmm8 vpshufd $57, %xmm8, %xmm8 vpaddd %xmm8, %xmm15, %xmm15 vpxor %xmm0, %xmm15, %xmm0 vpshufb %xmm7, %xmm0, %xmm0 vpaddd %xmm0, %xmm1, %xmm1 vpxor %xmm8, %xmm1, %xmm8 vpslld $20, %xmm8, %xmm10 vpsrld $12, %xmm8, %xmm8 vpxor %xmm8, %xmm10, %xmm10 vpunpckldq %xmm3, %xmm4, %xmm8 vpunpcklqdq %xmm9, %xmm8, %xmm9 vpaddd %xmm9, %xmm15, %xmm9 vpaddd %xmm10, %xmm9, %xmm9 vpxor %xmm0, %xmm9, %xmm8 vpshufb %xmm6, %xmm8, %xmm8 vpaddd %xmm8, %xmm1, %xmm1 vpxor %xmm1, %xmm10, %xmm10 vpshufd $57, %xmm8, %xmm8 vpshufd $78, %xmm1, %xmm1 vpslld $25, %xmm10, %xmm12 vpsrld $7, %xmm10, %xmm10 vpxor %xmm10, %xmm12, %xmm10 vpblendw $48, %xmm4, %xmm3, %xmm12 vpshufd $147, %xmm10, %xmm0 vpunpckhdq %xmm5, %xmm3, %xmm10 vpshufd $78, %xmm12, %xmm12 vpunpcklqdq %xmm4, %xmm10, %xmm10 vpblendw $192, %xmm2, %xmm10, %xmm10 vpshufhw $78, %xmm10, %xmm10 vpaddd %xmm10, %xmm9, %xmm10 vpaddd %xmm0, %xmm10, %xmm10 vpxor %xmm8, %xmm10, %xmm8 vpshufb %xmm7, %xmm8, %xmm8 vpaddd %xmm8, %xmm1, %xmm1 vpxor %xmm0, %xmm1, %xmm9 vpslld $20, %xmm9, %xmm0 vpsrld $12, %xmm9, %xmm9 vpxor %xmm9, %xmm0, %xmm0 vpunpckhdq %xmm5, %xmm4, %xmm9 vpblendw $240, %xmm9, %xmm2, %xmm13 vpshufd $39, %xmm13, %xmm13 vpaddd %xmm10, %xmm13, %xmm10 vpaddd %xmm0, %xmm10, %xmm10 vpxor %xmm8, %xmm10, %xmm8 vpblendw $12, %xmm4, %xmm2, %xmm13 vpshufb %xmm6, %xmm8, %xmm8 vpslldq $4, %xmm13, %xmm13 vpblendw $15, %xmm5, %xmm13, %xmm13 vpaddd %xmm8, %xmm1, %xmm1 vpxor %xmm1, %xmm0, %xmm0 vpaddd %xmm13, %xmm10, %xmm13 vpshufd $147, %xmm8, %xmm8 vpshufd $78, %xmm1, %xmm1 vpslld $25, %xmm0, %xmm14 vpsrld $7, %xmm0, %xmm0 vpxor %xmm0, %xmm14, %xmm14 vpshufd $57, %xmm14, %xmm14 vpaddd %xmm14, %xmm13, %xmm13 vpxor %xmm8, %xmm13, %xmm8 vpaddd %xmm13, %xmm12, %xmm12 vpshufb %xmm7, %xmm8, %xmm8 vpaddd %xmm8, %xmm1, %xmm1 vpxor %xmm14, %xmm1, %xmm14 vpslld $20, %xmm14, %xmm10 vpsrld $12, %xmm14, %xmm14 vpxor %xmm14, %xmm10, %xmm10 vpaddd %xmm10, %xmm12, %xmm12 vpxor %xmm8, %xmm12, %xmm8 vpshufb %xmm6, %xmm8, %xmm8 vpaddd %xmm8, %xmm1, %xmm1 vpxor %xmm1, %xmm10, %xmm0 vpshufd $57, %xmm8, %xmm8 vpshufd $78, %xmm1, %xmm1 vpslld $25, %xmm0, %xmm10 vpsrld $7, %xmm0, %xmm0 vpxor %xmm0, %xmm10, %xmm10 vpblendw $48, %xmm2, %xmm3, %xmm0 vpblendw $15, %xmm11, %xmm0, %xmm0 vpshufd $147, %xmm10, %xmm10 vpshufd $114, %xmm0, %xmm0 vpaddd %xmm12, %xmm0, %xmm0 vpaddd %xmm10, %xmm0, %xmm0 vpxor %xmm8, %xmm0, %xmm8 vpshufb %xmm7, %xmm8, %xmm8 vpaddd %xmm8, %xmm1, %xmm1 vpxor %xmm10, %xmm1, %xmm10 vpslld $20, %xmm10, %xmm11 vpsrld $12, %xmm10, %xmm10 vpxor %xmm10, %xmm11, %xmm10 vpslldq $4, %xmm4, %xmm11 vpblendw $192, %xmm11, %xmm3, %xmm3 vpunpckldq %xmm5, %xmm4, %xmm4 vpshufd $99, %xmm3, %xmm3 vpaddd %xmm0, %xmm3, %xmm3 vpaddd %xmm10, %xmm3, %xmm3 vpxor %xmm8, %xmm3, %xmm11 vpunpckldq %xmm5, %xmm2, %xmm0 vpblendw $192, %xmm2, %xmm5, %xmm2 vpshufb %xmm6, %xmm11, %xmm11 vpunpckhqdq %xmm0, %xmm9, %xmm0 vpblendw $15, %xmm4, %xmm2, %xmm4 vpaddd %xmm11, %xmm1, %xmm1 vpxor %xmm1, %xmm10, %xmm10 vpshufd $147, %xmm11, %xmm11 vpshufd $201, %xmm0, %xmm0 vpslld $25, %xmm10, %xmm8 vpsrld $7, %xmm10, %xmm10 vpxor %xmm10, %xmm8, %xmm10 vpshufd $78, %xmm1, %xmm1 vpaddd %xmm3, %xmm0, %xmm0 vpshufd $27, %xmm4, %xmm4 vpshufd $57, %xmm10, %xmm10 vpaddd %xmm10, %xmm0, %xmm0 vpxor %xmm11, %xmm0, %xmm11 vpaddd %xmm0, %xmm4, %xmm0 vpshufb %xmm7, %xmm11, %xmm7 vpaddd %xmm7, %xmm1, %xmm1 vpxor %xmm10, %xmm1, %xmm10 vpslld $20, %xmm10, %xmm8 vpsrld $12, %xmm10, %xmm10 vpxor %xmm10, %xmm8, %xmm8 vpaddd %xmm8, %xmm0, %xmm0 vpxor %xmm7, %xmm0, %xmm7 vpshufb %xmm6, %xmm7, %xmm6 vpaddd %xmm6, %xmm1, %xmm1 vpxor %xmm1, %xmm8, %xmm8 vpshufd $78, %xmm1, %xmm1 vpshufd $57, %xmm6, %xmm6 vpslld $25, %xmm8, %xmm2 vpsrld $7, %xmm8, %xmm8 vpxor %xmm8, %xmm2, %xmm8 vpxor (%rdi), %xmm1, %xmm1 vpshufd $147, %xmm8, %xmm8 vpxor %xmm0, %xmm1, %xmm0 vmovups %xmm0, (%rdi) vpxor 16(%rdi), %xmm8, %xmm0 vpxor %xmm6, %xmm0, %xmm6 vmovups %xmm6, 16(%rdi) addq $64, %rsi decq %rdx jnz .Lbeginofloop .Lendofloop: ret ENDPROC(blake2s_compress_avx) #endif /* CONFIG_AS_AVX */ #ifdef CONFIG_AS_AVX512 ENTRY(blake2s_compress_avx512) vmovdqu (%rdi),%xmm0 vmovdqu 0x10(%rdi),%xmm1 vmovdqu 0x20(%rdi),%xmm15 vmovq %rcx,%xmm13 jmp .Lblake2s_compress_avx512_mainloop .align 32 .Lblake2s_compress_avx512_mainloop: vpaddq %xmm13,%xmm15,%xmm15 vmovdqa IV(%rip),%xmm2 vpxor IV+16(%rip),%xmm15,%xmm3 lea SIGMA(%rip),%rax movl $10,%ecx .Lblake2s_compress_avx512_roundloop: add $0x40,%rax vmovdqa -0x40(%rax),%xmm7 vpcmpeqd %xmm14,%xmm14,%xmm14 vpgatherdd %xmm14,(%rsi,%xmm7,4),%xmm6 vpaddd %xmm6,%xmm0,%xmm0 vpaddd %xmm1,%xmm0,%xmm0 vpxor %xmm0,%xmm3,%xmm3 vprord $0x10,%xmm3,%xmm3 vpaddd %xmm3,%xmm2,%xmm2 vpxor %xmm2,%xmm1,%xmm1 vprord $0xc,%xmm1,%xmm1 vmovdqa -0x30(%rax),%xmm7 vpcmpeqd %xmm14,%xmm14,%xmm14 vpgatherdd %xmm14,(%rsi,%xmm7,4),%xmm6 vpaddd %xmm6,%xmm0,%xmm0 vpaddd %xmm1,%xmm0,%xmm0 vpxor %xmm0,%xmm3,%xmm3 vprord $0x8,%xmm3,%xmm3 vpaddd %xmm3,%xmm2,%xmm2 vpxor %xmm2,%xmm1,%xmm1 vprord $0x7,%xmm1,%xmm1 vpshufd $0x39,%xmm1,%xmm1 vpshufd $0x4e,%xmm2,%xmm2 vpshufd $0x93,%xmm3,%xmm3 vmovdqa -0x20(%rax),%xmm7 vpcmpeqd %xmm14,%xmm14,%xmm14 vpgatherdd %xmm14,(%rsi,%xmm7,4),%xmm6 vpaddd %xmm6,%xmm0,%xmm0 vpaddd %xmm1,%xmm0,%xmm0 vpxor %xmm0,%xmm3,%xmm3 vprord $0x10,%xmm3,%xmm3 vpaddd %xmm3,%xmm2,%xmm2 vpxor %xmm2,%xmm1,%xmm1 vprord $0xc,%xmm1,%xmm1 vmovdqa -0x10(%rax),%xmm7 vpcmpeqd %xmm14,%xmm14,%xmm14 vpgatherdd %xmm14,(%rsi,%xmm7,4),%xmm6 vpaddd %xmm6,%xmm0,%xmm0 vpaddd %xmm1,%xmm0,%xmm0 vpxor %xmm0,%xmm3,%xmm3 vprord $0x8,%xmm3,%xmm3 vpaddd %xmm3,%xmm2,%xmm2 vpxor %xmm2,%xmm1,%xmm1 vprord $0x7,%xmm1,%xmm1 vpshufd $0x93,%xmm1,%xmm1 vpshufd $0x4e,%xmm2,%xmm2 vpshufd $0x39,%xmm3,%xmm3 decl %ecx jne .Lblake2s_compress_avx512_roundloop add $0x40,%rsi vpxor (%rdi),%xmm0,%xmm0 vpxor 0x10(%rdi),%xmm1,%xmm1 vpxor %xmm2,%xmm0,%xmm0 vpxor %xmm3,%xmm1,%xmm1 vmovdqu %xmm0,(%rdi) vmovdqu %xmm1,0x10(%rdi) dec %rdx jne .Lblake2s_compress_avx512_mainloop vmovdqu %xmm15,0x20(%rdi) vzeroupper retq ENDPROC(blake2s_compress_avx512) #endif /* CONFIG_AS_AVX512 */