mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-30 10:47:28 +02:00
Merge pull request #7409 from SparkiDev/asm_x64_rip_fix
SHA-256 x64 ASM - fix use of %rip
This commit is contained in:
@ -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
|
||||||
|
@ -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
Reference in New Issue
Block a user