Merge pull request #7409 from SparkiDev/asm_x64_rip_fix

SHA-256 x64 ASM - fix use of %rip
This commit is contained in:
Daniel Pouzzner
2024-04-19 02:33:47 -04:00
committed by GitHub
3 changed files with 319 additions and 259 deletions

View File

@ -1,6 +1,6 @@
/* chacha_asm.S */ /* chacha_asm.S */
/* /*
* Copyright (C) 2006-2023 wolfSSL Inc. * Copyright (C) 2006-2024 wolfSSL Inc.
* *
* This file is part of wolfSSL. * This file is part of wolfSSL.
* *
@ -536,9 +536,19 @@ chacha_encrypt_avx1:
.p2align 4 .p2align 4
_chacha_encrypt_avx1: _chacha_encrypt_avx1:
#endif /* __APPLE__ */ #endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
subq $0x190, %rsp subq $0x190, %rsp
movq %rsp, %r9 movq %rsp, %r9
leaq 256(%rsp), %r10 leaq 256(%rsp), %r10
leaq L_chacha20_avx1_rotl8(%rip), %r12
leaq L_chacha20_avx1_rotl16(%rip), %r13
leaq L_chacha20_avx1_add(%rip), %r14
leaq L_chacha20_avx1_four(%rip), %r15
addq $15, %r9
addq $15, %r10
andq $-16, %r9 andq $-16, %r9
andq $-16, %r10 andq $-16, %r10
movl %ecx, %eax movl %ecx, %eax
@ -560,7 +570,7 @@ _chacha_encrypt_avx1:
vpshufd $0x00, 52(%rdi), %xmm13 vpshufd $0x00, 52(%rdi), %xmm13
vpshufd $0x00, 56(%rdi), %xmm14 vpshufd $0x00, 56(%rdi), %xmm14
vpshufd $0x00, 60(%rdi), %xmm15 vpshufd $0x00, 60(%rdi), %xmm15
vpaddd L_chacha20_avx1_add(%rip), %xmm12, %xmm12 vpaddd (%r14), %xmm12, %xmm12
vmovdqa %xmm0, (%r9) vmovdqa %xmm0, (%r9)
vmovdqa %xmm1, 16(%r9) vmovdqa %xmm1, 16(%r9)
vmovdqa %xmm2, 32(%r9) vmovdqa %xmm2, 32(%r9)
@ -584,22 +594,22 @@ L_chacha20_avx1_loop128:
vpaddd %xmm4, %xmm0, %xmm0 vpaddd %xmm4, %xmm0, %xmm0
vpxor %xmm0, %xmm12, %xmm12 vpxor %xmm0, %xmm12, %xmm12
vmovdqa 48(%r10), %xmm11 vmovdqa 48(%r10), %xmm11
vpshufb L_chacha20_avx1_rotl16(%rip), %xmm12, %xmm12 vpshufb (%r13), %xmm12, %xmm12
vpaddd %xmm12, %xmm8, %xmm8 vpaddd %xmm12, %xmm8, %xmm8
vpxor %xmm8, %xmm4, %xmm4 vpxor %xmm8, %xmm4, %xmm4
vpaddd %xmm5, %xmm1, %xmm1 vpaddd %xmm5, %xmm1, %xmm1
vpxor %xmm1, %xmm13, %xmm13 vpxor %xmm1, %xmm13, %xmm13
vpshufb L_chacha20_avx1_rotl16(%rip), %xmm13, %xmm13 vpshufb (%r13), %xmm13, %xmm13
vpaddd %xmm13, %xmm9, %xmm9 vpaddd %xmm13, %xmm9, %xmm9
vpxor %xmm9, %xmm5, %xmm5 vpxor %xmm9, %xmm5, %xmm5
vpaddd %xmm6, %xmm2, %xmm2 vpaddd %xmm6, %xmm2, %xmm2
vpxor %xmm2, %xmm14, %xmm14 vpxor %xmm2, %xmm14, %xmm14
vpshufb L_chacha20_avx1_rotl16(%rip), %xmm14, %xmm14 vpshufb (%r13), %xmm14, %xmm14
vpaddd %xmm14, %xmm10, %xmm10 vpaddd %xmm14, %xmm10, %xmm10
vpxor %xmm10, %xmm6, %xmm6 vpxor %xmm10, %xmm6, %xmm6
vpaddd %xmm7, %xmm3, %xmm3 vpaddd %xmm7, %xmm3, %xmm3
vpxor %xmm3, %xmm15, %xmm15 vpxor %xmm3, %xmm15, %xmm15
vpshufb L_chacha20_avx1_rotl16(%rip), %xmm15, %xmm15 vpshufb (%r13), %xmm15, %xmm15
vpaddd %xmm15, %xmm11, %xmm11 vpaddd %xmm15, %xmm11, %xmm11
vpxor %xmm11, %xmm7, %xmm7 vpxor %xmm11, %xmm7, %xmm7
vmovdqa %xmm11, 48(%r10) vmovdqa %xmm11, 48(%r10)
@ -618,22 +628,22 @@ L_chacha20_avx1_loop128:
vpaddd %xmm4, %xmm0, %xmm0 vpaddd %xmm4, %xmm0, %xmm0
vpxor %xmm0, %xmm12, %xmm12 vpxor %xmm0, %xmm12, %xmm12
vmovdqa 48(%r10), %xmm11 vmovdqa 48(%r10), %xmm11
vpshufb L_chacha20_avx1_rotl8(%rip), %xmm12, %xmm12 vpshufb (%r12), %xmm12, %xmm12
vpaddd %xmm12, %xmm8, %xmm8 vpaddd %xmm12, %xmm8, %xmm8
vpxor %xmm8, %xmm4, %xmm4 vpxor %xmm8, %xmm4, %xmm4
vpaddd %xmm5, %xmm1, %xmm1 vpaddd %xmm5, %xmm1, %xmm1
vpxor %xmm1, %xmm13, %xmm13 vpxor %xmm1, %xmm13, %xmm13
vpshufb L_chacha20_avx1_rotl8(%rip), %xmm13, %xmm13 vpshufb (%r12), %xmm13, %xmm13
vpaddd %xmm13, %xmm9, %xmm9 vpaddd %xmm13, %xmm9, %xmm9
vpxor %xmm9, %xmm5, %xmm5 vpxor %xmm9, %xmm5, %xmm5
vpaddd %xmm6, %xmm2, %xmm2 vpaddd %xmm6, %xmm2, %xmm2
vpxor %xmm2, %xmm14, %xmm14 vpxor %xmm2, %xmm14, %xmm14
vpshufb L_chacha20_avx1_rotl8(%rip), %xmm14, %xmm14 vpshufb (%r12), %xmm14, %xmm14
vpaddd %xmm14, %xmm10, %xmm10 vpaddd %xmm14, %xmm10, %xmm10
vpxor %xmm10, %xmm6, %xmm6 vpxor %xmm10, %xmm6, %xmm6
vpaddd %xmm7, %xmm3, %xmm3 vpaddd %xmm7, %xmm3, %xmm3
vpxor %xmm3, %xmm15, %xmm15 vpxor %xmm3, %xmm15, %xmm15
vpshufb L_chacha20_avx1_rotl8(%rip), %xmm15, %xmm15 vpshufb (%r12), %xmm15, %xmm15
vpaddd %xmm15, %xmm11, %xmm11 vpaddd %xmm15, %xmm11, %xmm11
vpxor %xmm11, %xmm7, %xmm7 vpxor %xmm11, %xmm7, %xmm7
vmovdqa %xmm11, 48(%r10) vmovdqa %xmm11, 48(%r10)
@ -652,22 +662,22 @@ L_chacha20_avx1_loop128:
vpaddd %xmm5, %xmm0, %xmm0 vpaddd %xmm5, %xmm0, %xmm0
vpxor %xmm0, %xmm15, %xmm15 vpxor %xmm0, %xmm15, %xmm15
vmovdqa 48(%r10), %xmm11 vmovdqa 48(%r10), %xmm11
vpshufb L_chacha20_avx1_rotl16(%rip), %xmm15, %xmm15 vpshufb (%r13), %xmm15, %xmm15
vpaddd %xmm15, %xmm10, %xmm10 vpaddd %xmm15, %xmm10, %xmm10
vpxor %xmm10, %xmm5, %xmm5 vpxor %xmm10, %xmm5, %xmm5
vpaddd %xmm6, %xmm1, %xmm1 vpaddd %xmm6, %xmm1, %xmm1
vpxor %xmm1, %xmm12, %xmm12 vpxor %xmm1, %xmm12, %xmm12
vpshufb L_chacha20_avx1_rotl16(%rip), %xmm12, %xmm12 vpshufb (%r13), %xmm12, %xmm12
vpaddd %xmm12, %xmm11, %xmm11 vpaddd %xmm12, %xmm11, %xmm11
vpxor %xmm11, %xmm6, %xmm6 vpxor %xmm11, %xmm6, %xmm6
vpaddd %xmm7, %xmm2, %xmm2 vpaddd %xmm7, %xmm2, %xmm2
vpxor %xmm2, %xmm13, %xmm13 vpxor %xmm2, %xmm13, %xmm13
vpshufb L_chacha20_avx1_rotl16(%rip), %xmm13, %xmm13 vpshufb (%r13), %xmm13, %xmm13
vpaddd %xmm13, %xmm8, %xmm8 vpaddd %xmm13, %xmm8, %xmm8
vpxor %xmm8, %xmm7, %xmm7 vpxor %xmm8, %xmm7, %xmm7
vpaddd %xmm4, %xmm3, %xmm3 vpaddd %xmm4, %xmm3, %xmm3
vpxor %xmm3, %xmm14, %xmm14 vpxor %xmm3, %xmm14, %xmm14
vpshufb L_chacha20_avx1_rotl16(%rip), %xmm14, %xmm14 vpshufb (%r13), %xmm14, %xmm14
vpaddd %xmm14, %xmm9, %xmm9 vpaddd %xmm14, %xmm9, %xmm9
vpxor %xmm9, %xmm4, %xmm4 vpxor %xmm9, %xmm4, %xmm4
vmovdqa %xmm11, 48(%r10) vmovdqa %xmm11, 48(%r10)
@ -686,22 +696,22 @@ L_chacha20_avx1_loop128:
vpaddd %xmm5, %xmm0, %xmm0 vpaddd %xmm5, %xmm0, %xmm0
vpxor %xmm0, %xmm15, %xmm15 vpxor %xmm0, %xmm15, %xmm15
vmovdqa 48(%r10), %xmm11 vmovdqa 48(%r10), %xmm11
vpshufb L_chacha20_avx1_rotl8(%rip), %xmm15, %xmm15 vpshufb (%r12), %xmm15, %xmm15
vpaddd %xmm15, %xmm10, %xmm10 vpaddd %xmm15, %xmm10, %xmm10
vpxor %xmm10, %xmm5, %xmm5 vpxor %xmm10, %xmm5, %xmm5
vpaddd %xmm6, %xmm1, %xmm1 vpaddd %xmm6, %xmm1, %xmm1
vpxor %xmm1, %xmm12, %xmm12 vpxor %xmm1, %xmm12, %xmm12
vpshufb L_chacha20_avx1_rotl8(%rip), %xmm12, %xmm12 vpshufb (%r12), %xmm12, %xmm12
vpaddd %xmm12, %xmm11, %xmm11 vpaddd %xmm12, %xmm11, %xmm11
vpxor %xmm11, %xmm6, %xmm6 vpxor %xmm11, %xmm6, %xmm6
vpaddd %xmm7, %xmm2, %xmm2 vpaddd %xmm7, %xmm2, %xmm2
vpxor %xmm2, %xmm13, %xmm13 vpxor %xmm2, %xmm13, %xmm13
vpshufb L_chacha20_avx1_rotl8(%rip), %xmm13, %xmm13 vpshufb (%r12), %xmm13, %xmm13
vpaddd %xmm13, %xmm8, %xmm8 vpaddd %xmm13, %xmm8, %xmm8
vpxor %xmm8, %xmm7, %xmm7 vpxor %xmm8, %xmm7, %xmm7
vpaddd %xmm4, %xmm3, %xmm3 vpaddd %xmm4, %xmm3, %xmm3
vpxor %xmm3, %xmm14, %xmm14 vpxor %xmm3, %xmm14, %xmm14
vpshufb L_chacha20_avx1_rotl8(%rip), %xmm14, %xmm14 vpshufb (%r12), %xmm14, %xmm14
vpaddd %xmm14, %xmm9, %xmm9 vpaddd %xmm14, %xmm9, %xmm9
vpxor %xmm9, %xmm4, %xmm4 vpxor %xmm9, %xmm4, %xmm4
vmovdqa %xmm11, 48(%r10) vmovdqa %xmm11, 48(%r10)
@ -835,7 +845,7 @@ L_chacha20_avx1_loop128:
vmovdqa 192(%r9), %xmm12 vmovdqa 192(%r9), %xmm12
addq $0x100, %rsi addq $0x100, %rsi
addq $0x100, %rdx addq $0x100, %rdx
vpaddd L_chacha20_avx1_four(%rip), %xmm12, %xmm12 vpaddd (%r15), %xmm12, %xmm12
subl $0x100, %ecx subl $0x100, %ecx
vmovdqa %xmm12, 192(%r9) vmovdqa %xmm12, 192(%r9)
cmpl $0x100, %ecx cmpl $0x100, %ecx
@ -876,7 +886,7 @@ L_chacha20_avx1_block_start:
L_chacha20_avx1_block_crypt_start: L_chacha20_avx1_block_crypt_start:
vpaddd %xmm1, %xmm0, %xmm0 vpaddd %xmm1, %xmm0, %xmm0
vpxor %xmm0, %xmm3, %xmm3 vpxor %xmm0, %xmm3, %xmm3
vpshufb L_chacha20_avx1_rotl16(%rip), %xmm3, %xmm3 vpshufb (%r13), %xmm3, %xmm3
vpaddd %xmm3, %xmm2, %xmm2 vpaddd %xmm3, %xmm2, %xmm2
vpxor %xmm2, %xmm1, %xmm1 vpxor %xmm2, %xmm1, %xmm1
vpsrld $20, %xmm1, %xmm4 vpsrld $20, %xmm1, %xmm4
@ -884,7 +894,7 @@ L_chacha20_avx1_block_crypt_start:
vpxor %xmm4, %xmm1, %xmm1 vpxor %xmm4, %xmm1, %xmm1
vpaddd %xmm1, %xmm0, %xmm0 vpaddd %xmm1, %xmm0, %xmm0
vpxor %xmm0, %xmm3, %xmm3 vpxor %xmm0, %xmm3, %xmm3
vpshufb L_chacha20_avx1_rotl8(%rip), %xmm3, %xmm3 vpshufb (%r12), %xmm3, %xmm3
vpaddd %xmm3, %xmm2, %xmm2 vpaddd %xmm3, %xmm2, %xmm2
vpxor %xmm2, %xmm1, %xmm1 vpxor %xmm2, %xmm1, %xmm1
vpsrld $25, %xmm1, %xmm4 vpsrld $25, %xmm1, %xmm4
@ -895,7 +905,7 @@ L_chacha20_avx1_block_crypt_start:
vpshufd $0x93, %xmm3, %xmm3 vpshufd $0x93, %xmm3, %xmm3
vpaddd %xmm1, %xmm0, %xmm0 vpaddd %xmm1, %xmm0, %xmm0
vpxor %xmm0, %xmm3, %xmm3 vpxor %xmm0, %xmm3, %xmm3
vpshufb L_chacha20_avx1_rotl16(%rip), %xmm3, %xmm3 vpshufb (%r13), %xmm3, %xmm3
vpaddd %xmm3, %xmm2, %xmm2 vpaddd %xmm3, %xmm2, %xmm2
vpxor %xmm2, %xmm1, %xmm1 vpxor %xmm2, %xmm1, %xmm1
vpsrld $20, %xmm1, %xmm4 vpsrld $20, %xmm1, %xmm4
@ -903,7 +913,7 @@ L_chacha20_avx1_block_crypt_start:
vpxor %xmm4, %xmm1, %xmm1 vpxor %xmm4, %xmm1, %xmm1
vpaddd %xmm1, %xmm0, %xmm0 vpaddd %xmm1, %xmm0, %xmm0
vpxor %xmm0, %xmm3, %xmm3 vpxor %xmm0, %xmm3, %xmm3
vpshufb L_chacha20_avx1_rotl8(%rip), %xmm3, %xmm3 vpshufb (%r12), %xmm3, %xmm3
vpaddd %xmm3, %xmm2, %xmm2 vpaddd %xmm3, %xmm2, %xmm2
vpxor %xmm2, %xmm1, %xmm1 vpxor %xmm2, %xmm1, %xmm1
vpsrld $25, %xmm1, %xmm4 vpsrld $25, %xmm1, %xmm4
@ -952,7 +962,7 @@ L_chacha20_avx1_block_done:
L_chacha20_avx1_partial_crypt_start: L_chacha20_avx1_partial_crypt_start:
vpaddd %xmm1, %xmm0, %xmm0 vpaddd %xmm1, %xmm0, %xmm0
vpxor %xmm0, %xmm3, %xmm3 vpxor %xmm0, %xmm3, %xmm3
vpshufb L_chacha20_avx1_rotl16(%rip), %xmm3, %xmm3 vpshufb (%r13), %xmm3, %xmm3
vpaddd %xmm3, %xmm2, %xmm2 vpaddd %xmm3, %xmm2, %xmm2
vpxor %xmm2, %xmm1, %xmm1 vpxor %xmm2, %xmm1, %xmm1
vpsrld $20, %xmm1, %xmm4 vpsrld $20, %xmm1, %xmm4
@ -960,7 +970,7 @@ L_chacha20_avx1_partial_crypt_start:
vpxor %xmm4, %xmm1, %xmm1 vpxor %xmm4, %xmm1, %xmm1
vpaddd %xmm1, %xmm0, %xmm0 vpaddd %xmm1, %xmm0, %xmm0
vpxor %xmm0, %xmm3, %xmm3 vpxor %xmm0, %xmm3, %xmm3
vpshufb L_chacha20_avx1_rotl8(%rip), %xmm3, %xmm3 vpshufb (%r12), %xmm3, %xmm3
vpaddd %xmm3, %xmm2, %xmm2 vpaddd %xmm3, %xmm2, %xmm2
vpxor %xmm2, %xmm1, %xmm1 vpxor %xmm2, %xmm1, %xmm1
vpsrld $25, %xmm1, %xmm4 vpsrld $25, %xmm1, %xmm4
@ -971,7 +981,7 @@ L_chacha20_avx1_partial_crypt_start:
vpshufd $0x93, %xmm3, %xmm3 vpshufd $0x93, %xmm3, %xmm3
vpaddd %xmm1, %xmm0, %xmm0 vpaddd %xmm1, %xmm0, %xmm0
vpxor %xmm0, %xmm3, %xmm3 vpxor %xmm0, %xmm3, %xmm3
vpshufb L_chacha20_avx1_rotl16(%rip), %xmm3, %xmm3 vpshufb (%r13), %xmm3, %xmm3
vpaddd %xmm3, %xmm2, %xmm2 vpaddd %xmm3, %xmm2, %xmm2
vpxor %xmm2, %xmm1, %xmm1 vpxor %xmm2, %xmm1, %xmm1
vpsrld $20, %xmm1, %xmm4 vpsrld $20, %xmm1, %xmm4
@ -979,7 +989,7 @@ L_chacha20_avx1_partial_crypt_start:
vpxor %xmm4, %xmm1, %xmm1 vpxor %xmm4, %xmm1, %xmm1
vpaddd %xmm1, %xmm0, %xmm0 vpaddd %xmm1, %xmm0, %xmm0
vpxor %xmm0, %xmm3, %xmm3 vpxor %xmm0, %xmm3, %xmm3
vpshufb L_chacha20_avx1_rotl8(%rip), %xmm3, %xmm3 vpshufb (%r12), %xmm3, %xmm3
vpaddd %xmm3, %xmm2, %xmm2 vpaddd %xmm3, %xmm2, %xmm2
vpxor %xmm2, %xmm1, %xmm1 vpxor %xmm2, %xmm1, %xmm1
vpsrld $25, %xmm1, %xmm4 vpsrld $25, %xmm1, %xmm4
@ -1023,7 +1033,12 @@ L_chacha20_avx1_partial_end64:
subl %r11d, %r8d subl %r11d, %r8d
movl %r8d, 76(%rdi) movl %r8d, 76(%rdi)
L_chacha20_avx1_partial_done: L_chacha20_avx1_partial_done:
vzeroupper
addq $0x190, %rsp addq $0x190, %rsp
popq %r15
popq %r14
popq %r13
popq %r12
repz retq repz retq
#ifndef __APPLE__ #ifndef __APPLE__
.size chacha_encrypt_avx1,.-chacha_encrypt_avx1 .size chacha_encrypt_avx1,.-chacha_encrypt_avx1
@ -1094,9 +1109,18 @@ chacha_encrypt_avx2:
.p2align 4 .p2align 4
_chacha_encrypt_avx2: _chacha_encrypt_avx2:
#endif /* __APPLE__ */ #endif /* __APPLE__ */
subq $0x310, %rsp pushq %r12
pushq %r13
pushq %r14
subq $0x320, %rsp
movq %rsp, %r9 movq %rsp, %r9
leaq L_chacha20_avx2_rotl8(%rip), %r11
leaq L_chacha20_avx2_rotl16(%rip), %r12
leaq L_chacha20_avx2_add(%rip), %r13
leaq L_chacha20_avx2_eight(%rip), %r14
leaq 512(%rsp), %r10 leaq 512(%rsp), %r10
addq $31, %r9
addq $31, %r10
andq $-32, %r9 andq $-32, %r9
andq $-32, %r10 andq $-32, %r10
movl %ecx, %eax movl %ecx, %eax
@ -1118,7 +1142,7 @@ _chacha_encrypt_avx2:
vpbroadcastd 52(%rdi), %ymm13 vpbroadcastd 52(%rdi), %ymm13
vpbroadcastd 56(%rdi), %ymm14 vpbroadcastd 56(%rdi), %ymm14
vpbroadcastd 60(%rdi), %ymm15 vpbroadcastd 60(%rdi), %ymm15
vpaddd L_chacha20_avx2_add(%rip), %ymm12, %ymm12 vpaddd (%r13), %ymm12, %ymm12
vmovdqa %ymm0, (%r9) vmovdqa %ymm0, (%r9)
vmovdqa %ymm1, 32(%r9) vmovdqa %ymm1, 32(%r9)
vmovdqa %ymm2, 64(%r9) vmovdqa %ymm2, 64(%r9)
@ -1142,22 +1166,22 @@ L_chacha20_avx2_loop256:
vpaddd %ymm4, %ymm0, %ymm0 vpaddd %ymm4, %ymm0, %ymm0
vpxor %ymm0, %ymm12, %ymm12 vpxor %ymm0, %ymm12, %ymm12
vmovdqa 96(%r10), %ymm11 vmovdqa 96(%r10), %ymm11
vpshufb L_chacha20_avx2_rotl16(%rip), %ymm12, %ymm12 vpshufb (%r12), %ymm12, %ymm12
vpaddd %ymm12, %ymm8, %ymm8 vpaddd %ymm12, %ymm8, %ymm8
vpxor %ymm8, %ymm4, %ymm4 vpxor %ymm8, %ymm4, %ymm4
vpaddd %ymm5, %ymm1, %ymm1 vpaddd %ymm5, %ymm1, %ymm1
vpxor %ymm1, %ymm13, %ymm13 vpxor %ymm1, %ymm13, %ymm13
vpshufb L_chacha20_avx2_rotl16(%rip), %ymm13, %ymm13 vpshufb (%r12), %ymm13, %ymm13
vpaddd %ymm13, %ymm9, %ymm9 vpaddd %ymm13, %ymm9, %ymm9
vpxor %ymm9, %ymm5, %ymm5 vpxor %ymm9, %ymm5, %ymm5
vpaddd %ymm6, %ymm2, %ymm2 vpaddd %ymm6, %ymm2, %ymm2
vpxor %ymm2, %ymm14, %ymm14 vpxor %ymm2, %ymm14, %ymm14
vpshufb L_chacha20_avx2_rotl16(%rip), %ymm14, %ymm14 vpshufb (%r12), %ymm14, %ymm14
vpaddd %ymm14, %ymm10, %ymm10 vpaddd %ymm14, %ymm10, %ymm10
vpxor %ymm10, %ymm6, %ymm6 vpxor %ymm10, %ymm6, %ymm6
vpaddd %ymm7, %ymm3, %ymm3 vpaddd %ymm7, %ymm3, %ymm3
vpxor %ymm3, %ymm15, %ymm15 vpxor %ymm3, %ymm15, %ymm15
vpshufb L_chacha20_avx2_rotl16(%rip), %ymm15, %ymm15 vpshufb (%r12), %ymm15, %ymm15
vpaddd %ymm15, %ymm11, %ymm11 vpaddd %ymm15, %ymm11, %ymm11
vpxor %ymm11, %ymm7, %ymm7 vpxor %ymm11, %ymm7, %ymm7
vmovdqa %ymm11, 96(%r10) vmovdqa %ymm11, 96(%r10)
@ -1176,22 +1200,22 @@ L_chacha20_avx2_loop256:
vpaddd %ymm4, %ymm0, %ymm0 vpaddd %ymm4, %ymm0, %ymm0
vpxor %ymm0, %ymm12, %ymm12 vpxor %ymm0, %ymm12, %ymm12
vmovdqa 96(%r10), %ymm11 vmovdqa 96(%r10), %ymm11
vpshufb L_chacha20_avx2_rotl8(%rip), %ymm12, %ymm12 vpshufb (%r11), %ymm12, %ymm12
vpaddd %ymm12, %ymm8, %ymm8 vpaddd %ymm12, %ymm8, %ymm8
vpxor %ymm8, %ymm4, %ymm4 vpxor %ymm8, %ymm4, %ymm4
vpaddd %ymm5, %ymm1, %ymm1 vpaddd %ymm5, %ymm1, %ymm1
vpxor %ymm1, %ymm13, %ymm13 vpxor %ymm1, %ymm13, %ymm13
vpshufb L_chacha20_avx2_rotl8(%rip), %ymm13, %ymm13 vpshufb (%r11), %ymm13, %ymm13
vpaddd %ymm13, %ymm9, %ymm9 vpaddd %ymm13, %ymm9, %ymm9
vpxor %ymm9, %ymm5, %ymm5 vpxor %ymm9, %ymm5, %ymm5
vpaddd %ymm6, %ymm2, %ymm2 vpaddd %ymm6, %ymm2, %ymm2
vpxor %ymm2, %ymm14, %ymm14 vpxor %ymm2, %ymm14, %ymm14
vpshufb L_chacha20_avx2_rotl8(%rip), %ymm14, %ymm14 vpshufb (%r11), %ymm14, %ymm14
vpaddd %ymm14, %ymm10, %ymm10 vpaddd %ymm14, %ymm10, %ymm10
vpxor %ymm10, %ymm6, %ymm6 vpxor %ymm10, %ymm6, %ymm6
vpaddd %ymm7, %ymm3, %ymm3 vpaddd %ymm7, %ymm3, %ymm3
vpxor %ymm3, %ymm15, %ymm15 vpxor %ymm3, %ymm15, %ymm15
vpshufb L_chacha20_avx2_rotl8(%rip), %ymm15, %ymm15 vpshufb (%r11), %ymm15, %ymm15
vpaddd %ymm15, %ymm11, %ymm11 vpaddd %ymm15, %ymm11, %ymm11
vpxor %ymm11, %ymm7, %ymm7 vpxor %ymm11, %ymm7, %ymm7
vmovdqa %ymm11, 96(%r10) vmovdqa %ymm11, 96(%r10)
@ -1210,22 +1234,22 @@ L_chacha20_avx2_loop256:
vpaddd %ymm5, %ymm0, %ymm0 vpaddd %ymm5, %ymm0, %ymm0
vpxor %ymm0, %ymm15, %ymm15 vpxor %ymm0, %ymm15, %ymm15
vmovdqa 96(%r10), %ymm11 vmovdqa 96(%r10), %ymm11
vpshufb L_chacha20_avx2_rotl16(%rip), %ymm15, %ymm15 vpshufb (%r12), %ymm15, %ymm15
vpaddd %ymm15, %ymm10, %ymm10 vpaddd %ymm15, %ymm10, %ymm10
vpxor %ymm10, %ymm5, %ymm5 vpxor %ymm10, %ymm5, %ymm5
vpaddd %ymm6, %ymm1, %ymm1 vpaddd %ymm6, %ymm1, %ymm1
vpxor %ymm1, %ymm12, %ymm12 vpxor %ymm1, %ymm12, %ymm12
vpshufb L_chacha20_avx2_rotl16(%rip), %ymm12, %ymm12 vpshufb (%r12), %ymm12, %ymm12
vpaddd %ymm12, %ymm11, %ymm11 vpaddd %ymm12, %ymm11, %ymm11
vpxor %ymm11, %ymm6, %ymm6 vpxor %ymm11, %ymm6, %ymm6
vpaddd %ymm7, %ymm2, %ymm2 vpaddd %ymm7, %ymm2, %ymm2
vpxor %ymm2, %ymm13, %ymm13 vpxor %ymm2, %ymm13, %ymm13
vpshufb L_chacha20_avx2_rotl16(%rip), %ymm13, %ymm13 vpshufb (%r12), %ymm13, %ymm13
vpaddd %ymm13, %ymm8, %ymm8 vpaddd %ymm13, %ymm8, %ymm8
vpxor %ymm8, %ymm7, %ymm7 vpxor %ymm8, %ymm7, %ymm7
vpaddd %ymm4, %ymm3, %ymm3 vpaddd %ymm4, %ymm3, %ymm3
vpxor %ymm3, %ymm14, %ymm14 vpxor %ymm3, %ymm14, %ymm14
vpshufb L_chacha20_avx2_rotl16(%rip), %ymm14, %ymm14 vpshufb (%r12), %ymm14, %ymm14
vpaddd %ymm14, %ymm9, %ymm9 vpaddd %ymm14, %ymm9, %ymm9
vpxor %ymm9, %ymm4, %ymm4 vpxor %ymm9, %ymm4, %ymm4
vmovdqa %ymm11, 96(%r10) vmovdqa %ymm11, 96(%r10)
@ -1244,22 +1268,22 @@ L_chacha20_avx2_loop256:
vpaddd %ymm5, %ymm0, %ymm0 vpaddd %ymm5, %ymm0, %ymm0
vpxor %ymm0, %ymm15, %ymm15 vpxor %ymm0, %ymm15, %ymm15
vmovdqa 96(%r10), %ymm11 vmovdqa 96(%r10), %ymm11
vpshufb L_chacha20_avx2_rotl8(%rip), %ymm15, %ymm15 vpshufb (%r11), %ymm15, %ymm15
vpaddd %ymm15, %ymm10, %ymm10 vpaddd %ymm15, %ymm10, %ymm10
vpxor %ymm10, %ymm5, %ymm5 vpxor %ymm10, %ymm5, %ymm5
vpaddd %ymm6, %ymm1, %ymm1 vpaddd %ymm6, %ymm1, %ymm1
vpxor %ymm1, %ymm12, %ymm12 vpxor %ymm1, %ymm12, %ymm12
vpshufb L_chacha20_avx2_rotl8(%rip), %ymm12, %ymm12 vpshufb (%r11), %ymm12, %ymm12
vpaddd %ymm12, %ymm11, %ymm11 vpaddd %ymm12, %ymm11, %ymm11
vpxor %ymm11, %ymm6, %ymm6 vpxor %ymm11, %ymm6, %ymm6
vpaddd %ymm7, %ymm2, %ymm2 vpaddd %ymm7, %ymm2, %ymm2
vpxor %ymm2, %ymm13, %ymm13 vpxor %ymm2, %ymm13, %ymm13
vpshufb L_chacha20_avx2_rotl8(%rip), %ymm13, %ymm13 vpshufb (%r11), %ymm13, %ymm13
vpaddd %ymm13, %ymm8, %ymm8 vpaddd %ymm13, %ymm8, %ymm8
vpxor %ymm8, %ymm7, %ymm7 vpxor %ymm8, %ymm7, %ymm7
vpaddd %ymm4, %ymm3, %ymm3 vpaddd %ymm4, %ymm3, %ymm3
vpxor %ymm3, %ymm14, %ymm14 vpxor %ymm3, %ymm14, %ymm14
vpshufb L_chacha20_avx2_rotl8(%rip), %ymm14, %ymm14 vpshufb (%r11), %ymm14, %ymm14
vpaddd %ymm14, %ymm9, %ymm9 vpaddd %ymm14, %ymm9, %ymm9
vpxor %ymm9, %ymm4, %ymm4 vpxor %ymm9, %ymm4, %ymm4
vmovdqa %ymm11, 96(%r10) vmovdqa %ymm11, 96(%r10)
@ -1409,7 +1433,7 @@ L_chacha20_avx2_loop256:
vmovdqa 384(%r9), %ymm12 vmovdqa 384(%r9), %ymm12
addq $0x200, %rsi addq $0x200, %rsi
addq $0x200, %rdx addq $0x200, %rdx
vpaddd L_chacha20_avx2_eight(%rip), %ymm12, %ymm12 vpaddd (%r14), %ymm12, %ymm12
subl $0x200, %ecx subl $0x200, %ecx
vmovdqa %ymm12, 384(%r9) vmovdqa %ymm12, 384(%r9)
cmpl $0x200, %ecx cmpl $0x200, %ecx
@ -1440,7 +1464,11 @@ L_chacha20_avx2_end256:
#else #else
callq _chacha_encrypt_avx1 callq _chacha_encrypt_avx1
#endif /* __APPLE__ */ #endif /* __APPLE__ */
addq $0x310, %rsp vzeroupper
addq $0x320, %rsp
popq %r14
popq %r13
popq %r12
repz retq repz retq
#ifndef __APPLE__ #ifndef __APPLE__
.size chacha_encrypt_avx2,.-chacha_encrypt_avx2 .size chacha_encrypt_avx2,.-chacha_encrypt_avx2

View File

@ -1,6 +1,6 @@
/* poly1305_asm.S */ /* poly1305_asm.S */
/* /*
* Copyright (C) 2006-2023 wolfSSL Inc. * Copyright (C) 2006-2024 wolfSSL Inc.
* *
* This file is part of wolfSSL. * This file is part of wolfSSL.
* *
@ -699,7 +699,11 @@ _poly1305_blocks_avx2:
#endif /* __APPLE__ */ #endif /* __APPLE__ */
pushq %r12 pushq %r12
pushq %rbx pushq %rbx
pushq %r13
pushq %r14
subq $0x140, %rsp subq $0x140, %rsp
leaq L_poly1305_avx2_blocks_mask(%rip), %r13
leaq L_poly1305_avx2_blocks_hibit(%rip), %r14
movq %rsp, %rcx movq %rsp, %rcx
andq $-32, %rcx andq $-32, %rcx
addq $32, %rcx addq $32, %rcx
@ -720,11 +724,11 @@ _poly1305_blocks_avx2:
vpunpckhdq %ymm15, %ymm1, %ymm1 vpunpckhdq %ymm15, %ymm1, %ymm1
vpunpckldq %ymm15, %ymm3, %ymm2 vpunpckldq %ymm15, %ymm3, %ymm2
vpunpckhdq %ymm15, %ymm3, %ymm3 vpunpckhdq %ymm15, %ymm3, %ymm3
vmovdqu L_poly1305_avx2_blocks_hibit(%rip), %ymm4 vmovdqu (%r14), %ymm4
vpsllq $6, %ymm1, %ymm1 vpsllq $6, %ymm1, %ymm1
vpsllq $12, %ymm2, %ymm2 vpsllq $12, %ymm2, %ymm2
vpsllq $18, %ymm3, %ymm3 vpsllq $18, %ymm3, %ymm3
vmovdqu L_poly1305_avx2_blocks_mask(%rip), %ymm14 vmovdqu (%r13), %ymm14
# Reduce, in place, the message data # Reduce, in place, the message data
vpsrlq $26, %ymm0, %ymm10 vpsrlq $26, %ymm0, %ymm10
vpsrlq $26, %ymm3, %ymm11 vpsrlq $26, %ymm3, %ymm11
@ -811,7 +815,7 @@ L_poly1305_avx2_blocks_mul_5:
vmovdqa %ymm7, 64(%rcx) vmovdqa %ymm7, 64(%rcx)
vmovdqa %ymm8, 96(%rcx) vmovdqa %ymm8, 96(%rcx)
vmovdqa %ymm9, 128(%rcx) vmovdqa %ymm9, 128(%rcx)
vmovdqu L_poly1305_avx2_blocks_mask(%rip), %ymm14 vmovdqu (%r13), %ymm14
# If not finished then loop over data # If not finished then loop over data
cmpb $0x01, 616(%rdi) cmpb $0x01, 616(%rdi)
jne L_poly1305_avx2_blocks_start jne L_poly1305_avx2_blocks_start
@ -922,7 +926,7 @@ L_poly1305_avx2_blocks_start:
vpunpckhdq %ymm15, %ymm6, %ymm6 vpunpckhdq %ymm15, %ymm6, %ymm6
vpunpckldq %ymm15, %ymm8, %ymm7 vpunpckldq %ymm15, %ymm8, %ymm7
vpunpckhdq %ymm15, %ymm8, %ymm8 vpunpckhdq %ymm15, %ymm8, %ymm8
vmovdqu L_poly1305_avx2_blocks_hibit(%rip), %ymm9 vmovdqu (%r14), %ymm9
vpsllq $6, %ymm6, %ymm6 vpsllq $6, %ymm6, %ymm6
vpsllq $12, %ymm7, %ymm7 vpsllq $12, %ymm7, %ymm7
vpsllq $18, %ymm8, %ymm8 vpsllq $18, %ymm8, %ymm8
@ -1038,7 +1042,10 @@ L_poly1305_avx2_blocks_end_calc:
movq %rcx, 40(%rdi) movq %rcx, 40(%rdi)
L_poly1305_avx2_blocks_complete: L_poly1305_avx2_blocks_complete:
movb $0x01, 617(%rdi) movb $0x01, 617(%rdi)
vzeroupper
addq $0x140, %rsp addq $0x140, %rsp
popq %r14
popq %r13
popq %rbx popq %rbx
popq %r12 popq %r12
repz retq repz retq
@ -1118,6 +1125,7 @@ L_poly1305_avx2_final_cmp_copy:
vmovdqu %ymm0, 320(%rdi) vmovdqu %ymm0, 320(%rdi)
movq $0x00, 608(%rdi) movq $0x00, 608(%rdi)
movw $0x00, 616(%rdi) movw $0x00, 616(%rdi)
vzeroupper
repz retq repz retq
#ifndef __APPLE__ #ifndef __APPLE__
.size poly1305_final_avx2,.-poly1305_final_avx2 .size poly1305_final_avx2,.-poly1305_final_avx2

File diff suppressed because it is too large Load Diff