mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2026-07-07 21:40:50 +02:00
SP ECC Cache Resitance
SP ECC improved cache attack resistant implementation. On by defualt and turn off with WC_NO_CACHE_RESISTANT.
This commit is contained in:
+4
-4
@@ -252,10 +252,6 @@
|
||||
#include <wolfssl/wolfcrypt/asn.h>
|
||||
#endif
|
||||
|
||||
#if defined(WOLFSSL_SHA3) || defined(HAVE_PKCS7) || (!defined(NO_RSA) && \
|
||||
!defined(NO_SIG_WRAPPER)) || !defined(WC_NO_RNG)
|
||||
static int devId = INVALID_DEVID;
|
||||
#endif
|
||||
#ifndef NO_DSA
|
||||
#include <wolfssl/wolfcrypt/dsa.h>
|
||||
#ifndef ONEK_BUF
|
||||
@@ -422,6 +418,8 @@ enum {
|
||||
TESTING_ECC = 2
|
||||
};
|
||||
|
||||
static int devId = INVALID_DEVID;
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------*
|
||||
| Setup
|
||||
@@ -36061,6 +36059,8 @@ void ApiTest(void)
|
||||
#endif
|
||||
wolfSSL_Cleanup();
|
||||
|
||||
(void)devId;
|
||||
|
||||
printf(" End API Tests\n");
|
||||
|
||||
}
|
||||
|
||||
+666
-92
File diff suppressed because it is too large
Load Diff
+1114
-73
File diff suppressed because it is too large
Load Diff
+666
-92
File diff suppressed because it is too large
Load Diff
+1264
-547
File diff suppressed because it is too large
Load Diff
+1108
-547
File diff suppressed because it is too large
Load Diff
+666
-92
File diff suppressed because it is too large
Load Diff
@@ -43,7 +43,8 @@
|
||||
#include "hexagon_protos.h"
|
||||
#include "hexagon_types.h"
|
||||
|
||||
#if (defined(WOLFSSL_SP_CACHE_RESISTANT) || defined(WOLFSSL_SP_SMALL)) && (defined(WOLFSSL_HAVE_SP_ECC) || !defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
||||
#if (!defined(WC_NO_CACHE_RESISTANT) || defined(WOLFSSL_SP_SMALL)) && \
|
||||
(defined(WOLFSSL_HAVE_SP_ECC) || !defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
||||
/* Mask for address to obfuscate which of the two address will be used. */
|
||||
static const size_t addr_mask[2] = { 0, (size_t)-1 };
|
||||
#endif
|
||||
@@ -1995,7 +1996,7 @@ static int sp_256_ecc_mulmod_10(sp_point* r, const sp_point* g, const sp_digit*
|
||||
return err;
|
||||
}
|
||||
|
||||
#elif defined(WOLFSSL_SP_CACHE_RESISTANT)
|
||||
#elif !defined(WC_NO_CACHE_RESISTANT)
|
||||
/* Multiply the point by the scalar and return the result.
|
||||
* If map is true then convert result to affine co-ordinates.
|
||||
*
|
||||
|
||||
@@ -48,7 +48,6 @@
|
||||
* WOLFSSL_SP_4096: Enable RSA/RH 4096-bit support
|
||||
* WOLFSSL_SP_384 Enable ECC 384-bit SECP384R1 support
|
||||
* WOLFSSL_SP_NO_256 Disable ECC 256-bit SECP256R1 support
|
||||
* WOLFSSL_SP_CACHE_RESISTANT Enable cache resistantant code
|
||||
* WOLFSSL_SP_ASM Enable assembly speedups (detect platform)
|
||||
* WOLFSSL_SP_X86_64_ASM Enable Intel x86 assembly speedups like AVX/AVX2
|
||||
* WOLFSSL_SP_ARM32_ASM Enable Aarch32 assembly speedups
|
||||
@@ -688,6 +687,8 @@ void sp_rshb(sp_int* a, int n, sp_int* r)
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(WOLFSSL_SP_SMALL) || (defined(WOLFSSL_KEY_GEN) || \
|
||||
!defined(NO_DH) && !defined(WC_NO_RNG))
|
||||
/* Multiply a by digit n and put result into r shifting up o digits.
|
||||
* r = (a * n) << (o * SP_WORD_SIZE)
|
||||
*
|
||||
@@ -714,6 +715,7 @@ static void _sp_mul_d(sp_int* a, sp_int_digit n, sp_int* r, int o)
|
||||
r->used = i+o+1;
|
||||
sp_clamp(r);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Divide a two digit number by a digit number and return. (hi | lo) / d
|
||||
*
|
||||
|
||||
+676
-1362
File diff suppressed because it is too large
Load Diff
@@ -38994,6 +38994,124 @@ _sp_256_div2_4:
|
||||
#ifndef __APPLE__
|
||||
.size sp_256_div2_4,.-sp_256_div2_4
|
||||
#endif /* __APPLE__ */
|
||||
#ifndef WC_NO_CACHE_RESISTANT
|
||||
/* Touch each possible point that could be being copied.
|
||||
*
|
||||
* r Point to copy into.
|
||||
* table Table - start of the entires to access
|
||||
* idx Index of point to retrieve.
|
||||
*/
|
||||
#ifndef __APPLE__
|
||||
.globl sp_256_get_point_33_4
|
||||
.type sp_256_get_point_33_4,@function
|
||||
.align 16
|
||||
sp_256_get_point_33_4:
|
||||
#else
|
||||
.globl _sp_256_get_point_33_4
|
||||
.p2align 4
|
||||
_sp_256_get_point_33_4:
|
||||
#endif /* __APPLE__ */
|
||||
movq $1, %rax
|
||||
movd %edx, %xmm13
|
||||
addq $200, %rsi
|
||||
movd %eax, %xmm15
|
||||
movq $33, %rax
|
||||
pshufd $0, %xmm15, %xmm15
|
||||
pshufd $0, %xmm13, %xmm13
|
||||
pxor %xmm14, %xmm14
|
||||
pxor %xmm0, %xmm0
|
||||
pxor %xmm1, %xmm1
|
||||
pxor %xmm2, %xmm2
|
||||
pxor %xmm3, %xmm3
|
||||
pxor %xmm4, %xmm4
|
||||
pxor %xmm5, %xmm5
|
||||
movdqa %xmm15, %xmm14
|
||||
L_256_get_point_33_4_start:
|
||||
movdqa %xmm14, %xmm12
|
||||
paddd %xmm15, %xmm14
|
||||
pcmpeqd %xmm13, %xmm12
|
||||
movdqu (%rsi), %xmm6
|
||||
movdqu 16(%rsi), %xmm7
|
||||
movdqu 64(%rsi), %xmm8
|
||||
movdqu 80(%rsi), %xmm9
|
||||
movdqu 128(%rsi), %xmm10
|
||||
movdqu 144(%rsi), %xmm11
|
||||
addq $200, %rsi
|
||||
pand %xmm12, %xmm6
|
||||
pand %xmm12, %xmm7
|
||||
pand %xmm12, %xmm8
|
||||
pand %xmm12, %xmm9
|
||||
pand %xmm12, %xmm10
|
||||
pand %xmm12, %xmm11
|
||||
por %xmm6, %xmm0
|
||||
por %xmm7, %xmm1
|
||||
por %xmm8, %xmm2
|
||||
por %xmm9, %xmm3
|
||||
por %xmm10, %xmm4
|
||||
por %xmm11, %xmm5
|
||||
decq %rax
|
||||
jnz L_256_get_point_33_4_start
|
||||
movdqu %xmm0, (%rdi)
|
||||
movdqu %xmm1, 16(%rdi)
|
||||
movdqu %xmm2, 64(%rdi)
|
||||
movdqu %xmm3, 80(%rdi)
|
||||
movdqu %xmm4, 128(%rdi)
|
||||
movdqu %xmm5, 144(%rdi)
|
||||
repz retq
|
||||
#ifndef __APPLE__
|
||||
.size sp_256_get_point_33_4,.-sp_256_get_point_33_4
|
||||
#endif /* __APPLE__ */
|
||||
/* Touch each possible point that could be being copied.
|
||||
*
|
||||
* r Point to copy into.
|
||||
* table Table - start of the entires to access
|
||||
* idx Index of point to retrieve.
|
||||
*/
|
||||
#ifndef __APPLE__
|
||||
.globl sp_256_get_point_33_avx2_4
|
||||
.type sp_256_get_point_33_avx2_4,@function
|
||||
.align 16
|
||||
sp_256_get_point_33_avx2_4:
|
||||
#else
|
||||
.globl _sp_256_get_point_33_avx2_4
|
||||
.p2align 4
|
||||
_sp_256_get_point_33_avx2_4:
|
||||
#endif /* __APPLE__ */
|
||||
movq $1, %rax
|
||||
movd %edx, %xmm7
|
||||
addq $200, %rsi
|
||||
movd %eax, %xmm9
|
||||
movq $33, %rax
|
||||
vpxor %ymm8, %ymm8, %ymm8
|
||||
vpermd %ymm7, %ymm8, %ymm7
|
||||
vpermd %ymm9, %ymm8, %ymm9
|
||||
vpxor %ymm0, %ymm0, %ymm0
|
||||
vpxor %ymm1, %ymm1, %ymm1
|
||||
vpxor %ymm2, %ymm2, %ymm2
|
||||
vmovdqa %ymm9, %ymm8
|
||||
L_256_get_point_33_avx2_4_start:
|
||||
vpcmpeqd %ymm7, %ymm8, %ymm6
|
||||
vpaddd %ymm9, %ymm8, %ymm8
|
||||
vmovdqu (%rsi), %ymm3
|
||||
vmovdqu 64(%rsi), %ymm4
|
||||
vmovdqu 128(%rsi), %ymm5
|
||||
addq $200, %rsi
|
||||
vpand %ymm6, %ymm3, %ymm3
|
||||
vpand %ymm6, %ymm4, %ymm4
|
||||
vpand %ymm6, %ymm5, %ymm5
|
||||
vpor %ymm3, %ymm0, %ymm0
|
||||
vpor %ymm4, %ymm1, %ymm1
|
||||
vpor %ymm5, %ymm2, %ymm2
|
||||
decq %rax
|
||||
jnz L_256_get_point_33_avx2_4_start
|
||||
vmovdqu %ymm0, (%rdi)
|
||||
vmovdqu %ymm1, 64(%rdi)
|
||||
vmovdqu %ymm2, 128(%rdi)
|
||||
repz retq
|
||||
#ifndef __APPLE__
|
||||
.size sp_256_get_point_33_avx2_4,.-sp_256_get_point_33_avx2_4
|
||||
#endif /* __APPLE__ */
|
||||
#endif /* !WC_NO_CACHE_RESISTANT */
|
||||
/* Multiply two Montogmery form numbers mod the modulus (prime).
|
||||
* (r = a * b mod m)
|
||||
*
|
||||
@@ -39333,6 +39451,212 @@ _sp_256_mont_sqr_avx2_4:
|
||||
#ifndef __APPLE__
|
||||
.size sp_256_mont_sqr_avx2_4,.-sp_256_mont_sqr_avx2_4
|
||||
#endif /* __APPLE__ */
|
||||
#ifndef WC_NO_CACHE_RESISTANT
|
||||
/* Touch each possible entry that could be being copied.
|
||||
*
|
||||
* r Point to copy into.
|
||||
* table Table - start of the entires to access
|
||||
* idx Index of entry to retrieve.
|
||||
*/
|
||||
#ifndef __APPLE__
|
||||
.globl sp_256_get_entry_64_4
|
||||
.type sp_256_get_entry_64_4,@function
|
||||
.align 16
|
||||
sp_256_get_entry_64_4:
|
||||
#else
|
||||
.globl _sp_256_get_entry_64_4
|
||||
.p2align 4
|
||||
_sp_256_get_entry_64_4:
|
||||
#endif /* __APPLE__ */
|
||||
movq $1, %rax
|
||||
movd %edx, %xmm9
|
||||
addq $64, %rsi
|
||||
movd %eax, %xmm11
|
||||
movq $64, %rax
|
||||
pshufd $0, %xmm11, %xmm11
|
||||
pshufd $0, %xmm9, %xmm9
|
||||
pxor %xmm10, %xmm10
|
||||
pxor %xmm0, %xmm0
|
||||
pxor %xmm1, %xmm1
|
||||
pxor %xmm2, %xmm2
|
||||
pxor %xmm3, %xmm3
|
||||
movdqa %xmm11, %xmm10
|
||||
L_256_get_entry_64_4_start:
|
||||
movdqa %xmm10, %xmm8
|
||||
paddd %xmm11, %xmm10
|
||||
pcmpeqd %xmm9, %xmm8
|
||||
movdqa (%rsi), %xmm4
|
||||
movdqa 16(%rsi), %xmm5
|
||||
movdqa 32(%rsi), %xmm6
|
||||
movdqa 48(%rsi), %xmm7
|
||||
addq $64, %rsi
|
||||
pand %xmm8, %xmm4
|
||||
pand %xmm8, %xmm5
|
||||
pand %xmm8, %xmm6
|
||||
pand %xmm8, %xmm7
|
||||
por %xmm4, %xmm0
|
||||
por %xmm5, %xmm1
|
||||
por %xmm6, %xmm2
|
||||
por %xmm7, %xmm3
|
||||
decq %rax
|
||||
jnz L_256_get_entry_64_4_start
|
||||
movdqu %xmm0, (%rdi)
|
||||
movdqu %xmm1, 16(%rdi)
|
||||
movdqu %xmm2, 64(%rdi)
|
||||
movdqu %xmm3, 80(%rdi)
|
||||
repz retq
|
||||
#ifndef __APPLE__
|
||||
.size sp_256_get_entry_64_4,.-sp_256_get_entry_64_4
|
||||
#endif /* __APPLE__ */
|
||||
/* Touch each possible entry that could be being copied.
|
||||
*
|
||||
* r Point to copy into.
|
||||
* table Table - start of the entires to access
|
||||
* idx Index of entry to retrieve.
|
||||
*/
|
||||
#ifndef __APPLE__
|
||||
.globl sp_256_get_entry_64_avx2_4
|
||||
.type sp_256_get_entry_64_avx2_4,@function
|
||||
.align 16
|
||||
sp_256_get_entry_64_avx2_4:
|
||||
#else
|
||||
.globl _sp_256_get_entry_64_avx2_4
|
||||
.p2align 4
|
||||
_sp_256_get_entry_64_avx2_4:
|
||||
#endif /* __APPLE__ */
|
||||
movq $1, %rax
|
||||
movd %edx, %xmm5
|
||||
addq $64, %rsi
|
||||
movd %eax, %xmm7
|
||||
movq $64, %rax
|
||||
vpxor %ymm6, %ymm6, %ymm6
|
||||
vpermd %ymm5, %ymm6, %ymm5
|
||||
vpermd %ymm7, %ymm6, %ymm7
|
||||
vpxor %ymm0, %ymm0, %ymm0
|
||||
vpxor %ymm1, %ymm1, %ymm1
|
||||
vmovdqa %ymm7, %ymm6
|
||||
L_256_get_entry_64_avx2_4_start:
|
||||
vpcmpeqd %ymm5, %ymm6, %ymm4
|
||||
vpaddd %ymm7, %ymm6, %ymm6
|
||||
vmovdqu (%rsi), %ymm2
|
||||
vmovdqu 32(%rsi), %ymm3
|
||||
addq $64, %rsi
|
||||
vpand %ymm4, %ymm2, %ymm2
|
||||
vpand %ymm4, %ymm3, %ymm3
|
||||
vpor %ymm2, %ymm0, %ymm0
|
||||
vpor %ymm3, %ymm1, %ymm1
|
||||
decq %rax
|
||||
jnz L_256_get_entry_64_avx2_4_start
|
||||
vmovdqu %ymm0, (%rdi)
|
||||
vmovdqu %ymm1, 64(%rdi)
|
||||
repz retq
|
||||
#ifndef __APPLE__
|
||||
.size sp_256_get_entry_64_avx2_4,.-sp_256_get_entry_64_avx2_4
|
||||
#endif /* __APPLE__ */
|
||||
#endif /* !WC_NO_CACHE_RESISTANT */
|
||||
#ifndef WC_NO_CACHE_RESISTANT
|
||||
/* Touch each possible entry that could be being copied.
|
||||
*
|
||||
* r Point to copy into.
|
||||
* table Table - start of the entires to access
|
||||
* idx Index of entry to retrieve.
|
||||
*/
|
||||
#ifndef __APPLE__
|
||||
.globl sp_256_get_entry_65_4
|
||||
.type sp_256_get_entry_65_4,@function
|
||||
.align 16
|
||||
sp_256_get_entry_65_4:
|
||||
#else
|
||||
.globl _sp_256_get_entry_65_4
|
||||
.p2align 4
|
||||
_sp_256_get_entry_65_4:
|
||||
#endif /* __APPLE__ */
|
||||
movq $1, %rax
|
||||
movd %edx, %xmm9
|
||||
addq $64, %rsi
|
||||
movd %eax, %xmm11
|
||||
movq $65, %rax
|
||||
pshufd $0, %xmm11, %xmm11
|
||||
pshufd $0, %xmm9, %xmm9
|
||||
pxor %xmm10, %xmm10
|
||||
pxor %xmm0, %xmm0
|
||||
pxor %xmm1, %xmm1
|
||||
pxor %xmm2, %xmm2
|
||||
pxor %xmm3, %xmm3
|
||||
movdqa %xmm11, %xmm10
|
||||
L_256_get_entry_65_4_start:
|
||||
movdqa %xmm10, %xmm8
|
||||
paddd %xmm11, %xmm10
|
||||
pcmpeqd %xmm9, %xmm8
|
||||
movdqa (%rsi), %xmm4
|
||||
movdqa 16(%rsi), %xmm5
|
||||
movdqa 32(%rsi), %xmm6
|
||||
movdqa 48(%rsi), %xmm7
|
||||
addq $64, %rsi
|
||||
pand %xmm8, %xmm4
|
||||
pand %xmm8, %xmm5
|
||||
pand %xmm8, %xmm6
|
||||
pand %xmm8, %xmm7
|
||||
por %xmm4, %xmm0
|
||||
por %xmm5, %xmm1
|
||||
por %xmm6, %xmm2
|
||||
por %xmm7, %xmm3
|
||||
decq %rax
|
||||
jnz L_256_get_entry_65_4_start
|
||||
movdqu %xmm0, (%rdi)
|
||||
movdqu %xmm1, 16(%rdi)
|
||||
movdqu %xmm2, 64(%rdi)
|
||||
movdqu %xmm3, 80(%rdi)
|
||||
repz retq
|
||||
#ifndef __APPLE__
|
||||
.size sp_256_get_entry_65_4,.-sp_256_get_entry_65_4
|
||||
#endif /* __APPLE__ */
|
||||
/* Touch each possible entry that could be being copied.
|
||||
*
|
||||
* r Point to copy into.
|
||||
* table Table - start of the entires to access
|
||||
* idx Index of entry to retrieve.
|
||||
*/
|
||||
#ifndef __APPLE__
|
||||
.globl sp_256_get_entry_65_avx2_4
|
||||
.type sp_256_get_entry_65_avx2_4,@function
|
||||
.align 16
|
||||
sp_256_get_entry_65_avx2_4:
|
||||
#else
|
||||
.globl _sp_256_get_entry_65_avx2_4
|
||||
.p2align 4
|
||||
_sp_256_get_entry_65_avx2_4:
|
||||
#endif /* __APPLE__ */
|
||||
movq $1, %rax
|
||||
movd %edx, %xmm5
|
||||
addq $64, %rsi
|
||||
movd %eax, %xmm7
|
||||
movq $65, %rax
|
||||
vpxor %ymm6, %ymm6, %ymm6
|
||||
vpermd %ymm5, %ymm6, %ymm5
|
||||
vpermd %ymm7, %ymm6, %ymm7
|
||||
vpxor %ymm0, %ymm0, %ymm0
|
||||
vpxor %ymm1, %ymm1, %ymm1
|
||||
vmovdqa %ymm7, %ymm6
|
||||
L_256_get_entry_65_avx2_4_start:
|
||||
vpcmpeqd %ymm5, %ymm6, %ymm4
|
||||
vpaddd %ymm7, %ymm6, %ymm6
|
||||
vmovdqu (%rsi), %ymm2
|
||||
vmovdqu 32(%rsi), %ymm3
|
||||
addq $64, %rsi
|
||||
vpand %ymm4, %ymm2, %ymm2
|
||||
vpand %ymm4, %ymm3, %ymm3
|
||||
vpor %ymm2, %ymm0, %ymm0
|
||||
vpor %ymm3, %ymm1, %ymm1
|
||||
decq %rax
|
||||
jnz L_256_get_entry_65_avx2_4_start
|
||||
vmovdqu %ymm0, (%rdi)
|
||||
vmovdqu %ymm1, 64(%rdi)
|
||||
repz retq
|
||||
#ifndef __APPLE__
|
||||
.size sp_256_get_entry_65_avx2_4,.-sp_256_get_entry_65_avx2_4
|
||||
#endif /* __APPLE__ */
|
||||
#endif /* !WC_NO_CACHE_RESISTANT */
|
||||
/* Add 1 to a. (a = a + 1)
|
||||
*
|
||||
* a A single precision integer.
|
||||
@@ -41671,6 +41995,170 @@ _sp_384_div2_6:
|
||||
#ifndef __APPLE__
|
||||
.size sp_384_div2_6,.-sp_384_div2_6
|
||||
#endif /* __APPLE__ */
|
||||
#ifndef WC_NO_CACHE_RESISTANT
|
||||
/* Touch each possible point that could be being copied.
|
||||
*
|
||||
* r Point to copy into.
|
||||
* table Table - start of the entires to access
|
||||
* idx Index of point to retrieve.
|
||||
*/
|
||||
#ifndef __APPLE__
|
||||
.globl sp_384_get_point_33_6
|
||||
.type sp_384_get_point_33_6,@function
|
||||
.align 16
|
||||
sp_384_get_point_33_6:
|
||||
#else
|
||||
.globl _sp_384_get_point_33_6
|
||||
.p2align 4
|
||||
_sp_384_get_point_33_6:
|
||||
#endif /* __APPLE__ */
|
||||
movq $1, %rax
|
||||
movd %edx, %xmm13
|
||||
addq $296, %rsi
|
||||
movd %eax, %xmm15
|
||||
movq $33, %rax
|
||||
pshufd $0, %xmm15, %xmm15
|
||||
pshufd $0, %xmm13, %xmm13
|
||||
pxor %xmm14, %xmm14
|
||||
pxor %xmm0, %xmm0
|
||||
pxor %xmm1, %xmm1
|
||||
pxor %xmm2, %xmm2
|
||||
pxor %xmm3, %xmm3
|
||||
pxor %xmm4, %xmm4
|
||||
pxor %xmm5, %xmm5
|
||||
movdqa %xmm15, %xmm14
|
||||
L_384_get_point_33_6_start:
|
||||
movdqa %xmm14, %xmm12
|
||||
paddd %xmm15, %xmm14
|
||||
pcmpeqd %xmm13, %xmm12
|
||||
movdqu (%rsi), %xmm6
|
||||
movdqu 16(%rsi), %xmm7
|
||||
movdqu 32(%rsi), %xmm8
|
||||
movdqu 96(%rsi), %xmm9
|
||||
movdqu 112(%rsi), %xmm10
|
||||
movdqu 128(%rsi), %xmm11
|
||||
addq $296, %rsi
|
||||
pand %xmm12, %xmm6
|
||||
pand %xmm12, %xmm7
|
||||
pand %xmm12, %xmm8
|
||||
pand %xmm12, %xmm9
|
||||
pand %xmm12, %xmm10
|
||||
pand %xmm12, %xmm11
|
||||
por %xmm6, %xmm0
|
||||
por %xmm7, %xmm1
|
||||
por %xmm8, %xmm2
|
||||
por %xmm9, %xmm3
|
||||
por %xmm10, %xmm4
|
||||
por %xmm11, %xmm5
|
||||
decq %rax
|
||||
jnz L_384_get_point_33_6_start
|
||||
movdqu %xmm0, (%rdi)
|
||||
movdqu %xmm1, 16(%rdi)
|
||||
movdqu %xmm2, 32(%rdi)
|
||||
movdqu %xmm3, 96(%rdi)
|
||||
movdqu %xmm4, 112(%rdi)
|
||||
movdqu %xmm5, 128(%rdi)
|
||||
movq $1, %rax
|
||||
movd %edx, %xmm13
|
||||
addq $296, %rsi
|
||||
movd %eax, %xmm15
|
||||
movq $33, %rax
|
||||
pshufd $0, %xmm15, %xmm15
|
||||
pshufd $0, %xmm13, %xmm13
|
||||
pxor %xmm14, %xmm14
|
||||
pxor %xmm0, %xmm0
|
||||
pxor %xmm1, %xmm1
|
||||
pxor %xmm2, %xmm2
|
||||
movdqa %xmm15, %xmm14
|
||||
L_384_get_point_33_6_start_2:
|
||||
movdqa %xmm14, %xmm12
|
||||
paddd %xmm15, %xmm14
|
||||
pcmpeqd %xmm13, %xmm12
|
||||
movdqu 192(%rsi), %xmm6
|
||||
movdqu 208(%rsi), %xmm7
|
||||
movdqu 224(%rsi), %xmm8
|
||||
addq $296, %rsi
|
||||
pand %xmm12, %xmm6
|
||||
pand %xmm12, %xmm7
|
||||
pand %xmm12, %xmm8
|
||||
por %xmm6, %xmm0
|
||||
por %xmm7, %xmm1
|
||||
por %xmm8, %xmm2
|
||||
decq %rax
|
||||
jnz L_384_get_point_33_6_start_2
|
||||
movdqu %xmm0, 192(%rdi)
|
||||
movdqu %xmm1, 208(%rdi)
|
||||
movdqu %xmm2, 224(%rdi)
|
||||
repz retq
|
||||
#ifndef __APPLE__
|
||||
.size sp_384_get_point_33_6,.-sp_384_get_point_33_6
|
||||
#endif /* __APPLE__ */
|
||||
/* Touch each possible point that could be being copied.
|
||||
*
|
||||
* r Point to copy into.
|
||||
* table Table - start of the entires to access
|
||||
* idx Index of point to retrieve.
|
||||
*/
|
||||
#ifndef __APPLE__
|
||||
.globl sp_384_get_point_33_avx2_6
|
||||
.type sp_384_get_point_33_avx2_6,@function
|
||||
.align 16
|
||||
sp_384_get_point_33_avx2_6:
|
||||
#else
|
||||
.globl _sp_384_get_point_33_avx2_6
|
||||
.p2align 4
|
||||
_sp_384_get_point_33_avx2_6:
|
||||
#endif /* __APPLE__ */
|
||||
movq $1, %rax
|
||||
movd %edx, %xmm13
|
||||
addq $296, %rsi
|
||||
movd %eax, %xmm15
|
||||
movq $33, %rax
|
||||
vpxor %ymm14, %ymm14, %ymm14
|
||||
vpermd %ymm13, %ymm14, %ymm13
|
||||
vpermd %ymm15, %ymm14, %ymm15
|
||||
vpxor %ymm0, %ymm0, %ymm0
|
||||
vpxor %xmm1, %xmm1, %xmm1
|
||||
vpxor %ymm2, %ymm2, %ymm2
|
||||
vpxor %xmm3, %xmm3, %xmm3
|
||||
vpxor %ymm4, %ymm4, %ymm4
|
||||
vpxor %xmm5, %xmm5, %xmm5
|
||||
vmovdqa %ymm15, %ymm14
|
||||
L_384_get_point_33_avx2_6_start:
|
||||
vpcmpeqd %ymm13, %ymm14, %ymm12
|
||||
vpaddd %ymm15, %ymm14, %ymm14
|
||||
vmovdqu (%rsi), %ymm6
|
||||
vmovdqu 32(%rsi), %xmm7
|
||||
vmovdqu 96(%rsi), %ymm8
|
||||
vmovdqu 128(%rsi), %xmm9
|
||||
vmovdqu 192(%rsi), %ymm10
|
||||
vmovdqu 224(%rsi), %xmm11
|
||||
addq $296, %rsi
|
||||
vpand %ymm12, %ymm6, %ymm6
|
||||
vpand %xmm12, %xmm7, %xmm7
|
||||
vpand %ymm12, %ymm8, %ymm8
|
||||
vpand %xmm12, %xmm9, %xmm9
|
||||
vpand %ymm12, %ymm10, %ymm10
|
||||
vpand %xmm12, %xmm11, %xmm11
|
||||
vpor %ymm6, %ymm0, %ymm0
|
||||
vpor %xmm7, %xmm1, %xmm1
|
||||
vpor %ymm8, %ymm2, %ymm2
|
||||
vpor %xmm9, %xmm3, %xmm3
|
||||
vpor %ymm10, %ymm4, %ymm4
|
||||
vpor %xmm11, %xmm5, %xmm5
|
||||
decq %rax
|
||||
jnz L_384_get_point_33_avx2_6_start
|
||||
vmovdqu %ymm0, (%rdi)
|
||||
vmovdqu %xmm1, 32(%rdi)
|
||||
vmovdqu %ymm2, 96(%rdi)
|
||||
vmovdqu %xmm3, 128(%rdi)
|
||||
vmovdqu %ymm4, 192(%rdi)
|
||||
vmovdqu %xmm5, 224(%rdi)
|
||||
repz retq
|
||||
#ifndef __APPLE__
|
||||
.size sp_384_get_point_33_avx2_6,.-sp_384_get_point_33_avx2_6
|
||||
#endif /* __APPLE__ */
|
||||
#endif /* !WC_NO_CACHE_RESISTANT */
|
||||
/* Multiply a and b into r. (r = a * b)
|
||||
*
|
||||
* r Result of multiplication.
|
||||
@@ -42379,6 +42867,129 @@ _sp_384_sqr_avx2_6:
|
||||
#ifndef __APPLE__
|
||||
.size sp_384_sqr_avx2_6,.-sp_384_sqr_avx2_6
|
||||
#endif /* __APPLE__ */
|
||||
#ifndef WC_NO_CACHE_RESISTANT
|
||||
/* Touch each possible entry that could be being copied.
|
||||
*
|
||||
* r Point to copy into.
|
||||
* table Table - start of the entires to access
|
||||
* idx Index of entry to retrieve.
|
||||
*/
|
||||
#ifndef __APPLE__
|
||||
.globl sp_384_get_entry_256_6
|
||||
.type sp_384_get_entry_256_6,@function
|
||||
.align 16
|
||||
sp_384_get_entry_256_6:
|
||||
#else
|
||||
.globl _sp_384_get_entry_256_6
|
||||
.p2align 4
|
||||
_sp_384_get_entry_256_6:
|
||||
#endif /* __APPLE__ */
|
||||
movq $1, %rax
|
||||
movd %edx, %xmm13
|
||||
addq $96, %rsi
|
||||
movd %eax, %xmm15
|
||||
movq $256, %rax
|
||||
pshufd $0, %xmm15, %xmm15
|
||||
pshufd $0, %xmm13, %xmm13
|
||||
pxor %xmm14, %xmm14
|
||||
pxor %xmm0, %xmm0
|
||||
pxor %xmm1, %xmm1
|
||||
pxor %xmm2, %xmm2
|
||||
pxor %xmm3, %xmm3
|
||||
pxor %xmm4, %xmm4
|
||||
pxor %xmm5, %xmm5
|
||||
movdqa %xmm15, %xmm14
|
||||
L_384_get_entry_256_6_start:
|
||||
movdqa %xmm14, %xmm12
|
||||
paddd %xmm15, %xmm14
|
||||
pcmpeqd %xmm13, %xmm12
|
||||
movdqa (%rsi), %xmm6
|
||||
movdqa 16(%rsi), %xmm7
|
||||
movdqa 32(%rsi), %xmm8
|
||||
movdqa 48(%rsi), %xmm9
|
||||
movdqa 64(%rsi), %xmm10
|
||||
movdqa 80(%rsi), %xmm11
|
||||
addq $96, %rsi
|
||||
pand %xmm12, %xmm6
|
||||
pand %xmm12, %xmm7
|
||||
pand %xmm12, %xmm8
|
||||
pand %xmm12, %xmm9
|
||||
pand %xmm12, %xmm10
|
||||
pand %xmm12, %xmm11
|
||||
por %xmm6, %xmm0
|
||||
por %xmm7, %xmm1
|
||||
por %xmm8, %xmm2
|
||||
por %xmm9, %xmm3
|
||||
por %xmm10, %xmm4
|
||||
por %xmm11, %xmm5
|
||||
decq %rax
|
||||
jnz L_384_get_entry_256_6_start
|
||||
movdqu %xmm0, (%rdi)
|
||||
movdqu %xmm1, 16(%rdi)
|
||||
movdqu %xmm2, 32(%rdi)
|
||||
movdqu %xmm3, 96(%rdi)
|
||||
movdqu %xmm4, 112(%rdi)
|
||||
movdqu %xmm5, 128(%rdi)
|
||||
repz retq
|
||||
#ifndef __APPLE__
|
||||
.size sp_384_get_entry_256_6,.-sp_384_get_entry_256_6
|
||||
#endif /* __APPLE__ */
|
||||
/* Touch each possible entry that could be being copied.
|
||||
*
|
||||
* r Point to copy into.
|
||||
* table Table - start of the entires to access
|
||||
* idx Index of entry to retrieve.
|
||||
*/
|
||||
#ifndef __APPLE__
|
||||
.globl sp_384_get_entry_256_avx2_6
|
||||
.type sp_384_get_entry_256_avx2_6,@function
|
||||
.align 16
|
||||
sp_384_get_entry_256_avx2_6:
|
||||
#else
|
||||
.globl _sp_384_get_entry_256_avx2_6
|
||||
.p2align 4
|
||||
_sp_384_get_entry_256_avx2_6:
|
||||
#endif /* __APPLE__ */
|
||||
movq $1, %rax
|
||||
movd %edx, %xmm9
|
||||
addq $96, %rsi
|
||||
movd %eax, %xmm11
|
||||
movq $256, %rax
|
||||
vpxor %ymm10, %ymm10, %ymm10
|
||||
vpermd %ymm9, %ymm10, %ymm9
|
||||
vpermd %ymm11, %ymm10, %ymm11
|
||||
vpxor %ymm0, %ymm0, %ymm0
|
||||
vpxor %xmm1, %xmm1, %xmm1
|
||||
vpxor %ymm2, %ymm2, %ymm2
|
||||
vpxor %xmm3, %xmm3, %xmm3
|
||||
vmovdqa %ymm11, %ymm10
|
||||
L_384_get_entry_256_avx2_6_start:
|
||||
vpcmpeqd %ymm9, %ymm10, %ymm8
|
||||
vpaddd %ymm11, %ymm10, %ymm10
|
||||
vmovdqu (%rsi), %ymm4
|
||||
vmovdqu 32(%rsi), %xmm5
|
||||
vmovdqu 48(%rsi), %ymm6
|
||||
vmovdqu 80(%rsi), %xmm7
|
||||
addq $96, %rsi
|
||||
vpand %ymm8, %ymm4, %ymm4
|
||||
vpand %xmm8, %xmm5, %xmm5
|
||||
vpand %ymm8, %ymm6, %ymm6
|
||||
vpand %xmm8, %xmm7, %xmm7
|
||||
vpor %ymm4, %ymm0, %ymm0
|
||||
vpor %xmm5, %xmm1, %xmm1
|
||||
vpor %ymm6, %ymm2, %ymm2
|
||||
vpor %xmm7, %xmm3, %xmm3
|
||||
decq %rax
|
||||
jnz L_384_get_entry_256_avx2_6_start
|
||||
vmovdqu %ymm0, (%rdi)
|
||||
vmovdqu %xmm1, 32(%rdi)
|
||||
vmovdqu %ymm2, 96(%rdi)
|
||||
vmovdqu %xmm3, 128(%rdi)
|
||||
repz retq
|
||||
#ifndef __APPLE__
|
||||
.size sp_384_get_entry_256_avx2_6,.-sp_384_get_entry_256_avx2_6
|
||||
#endif /* __APPLE__ */
|
||||
#endif /* !WC_NO_CACHE_RESISTANT */
|
||||
/* Add 1 to a. (a = a + 1)
|
||||
*
|
||||
* a A single precision integer.
|
||||
|
||||
Reference in New Issue
Block a user