Latest update
This commit is contained in:
@@ -57,13 +57,14 @@ if ($flavour && $flavour ne "void") {
|
||||
$code=<<___;
|
||||
#include "arm_arch.h"
|
||||
|
||||
.text
|
||||
#if defined(__thumb2__)
|
||||
.syntax unified
|
||||
.thumb
|
||||
#else
|
||||
.code 32
|
||||
#endif
|
||||
|
||||
.text
|
||||
___
|
||||
################
|
||||
# private interface to mul_1x1_ialu
|
||||
@@ -176,11 +177,13 @@ bn_GF2m_mul_2x2:
|
||||
#if __ARM_MAX_ARCH__>=7
|
||||
stmdb sp!,{r10,lr}
|
||||
ldr r12,.LOPENSSL_armcap
|
||||
# if !defined(_WIN32)
|
||||
adr r10,.LOPENSSL_armcap
|
||||
ldr r12,[r12,r10]
|
||||
#ifdef __APPLE__
|
||||
# endif
|
||||
# if defined(__APPLE__) || defined(_WIN32)
|
||||
ldr r12,[r12]
|
||||
#endif
|
||||
# endif
|
||||
tst r12,#ARMV7_NEON
|
||||
itt ne
|
||||
ldrne r10,[sp],#8
|
||||
@@ -310,7 +313,11 @@ $code.=<<___;
|
||||
#if __ARM_MAX_ARCH__>=7
|
||||
.align 5
|
||||
.LOPENSSL_armcap:
|
||||
# ifdef _WIN32
|
||||
.word OPENSSL_armcap_P
|
||||
# else
|
||||
.word OPENSSL_armcap_P-.
|
||||
# endif
|
||||
#endif
|
||||
.asciz "GF(2^m) Multiplication for ARMv4/NEON, CRYPTOGAMS by <appro\@openssl.org>"
|
||||
.align 5
|
||||
|
||||
@@ -97,7 +97,6 @@ $_num="$num,#15*4"; $_bpend=$_num;
|
||||
$code=<<___;
|
||||
#include "arm_arch.h"
|
||||
|
||||
.text
|
||||
#if defined(__thumb2__)
|
||||
.syntax unified
|
||||
.thumb
|
||||
@@ -105,10 +104,16 @@ $code=<<___;
|
||||
.code 32
|
||||
#endif
|
||||
|
||||
.text
|
||||
|
||||
#if __ARM_MAX_ARCH__>=7
|
||||
.align 5
|
||||
.LOPENSSL_armcap:
|
||||
# ifdef _WIN32
|
||||
.word OPENSSL_armcap_P
|
||||
# else
|
||||
.word OPENSSL_armcap_P-.Lbn_mul_mont
|
||||
# endif
|
||||
#endif
|
||||
|
||||
.global bn_mul_mont
|
||||
@@ -122,12 +127,14 @@ bn_mul_mont:
|
||||
#if __ARM_MAX_ARCH__>=7
|
||||
tst ip,#7
|
||||
bne .Lialu
|
||||
adr r0,.Lbn_mul_mont
|
||||
ldr r2,.LOPENSSL_armcap
|
||||
ldr r0,.LOPENSSL_armcap
|
||||
#if !defined(_WIN32)
|
||||
adr r2,.Lbn_mul_mont
|
||||
ldr r0,[r0,r2]
|
||||
#ifdef __APPLE__
|
||||
# endif
|
||||
# if defined(__APPLE__) || defined(_WIN32)
|
||||
ldr r0,[r0]
|
||||
#endif
|
||||
# endif
|
||||
tst r0,#ARMV7_NEON @ NEON available?
|
||||
ldmia sp, {r0,r2}
|
||||
beq .Lialu
|
||||
|
||||
@@ -197,7 +197,7 @@ bn_mul_mont:
|
||||
mul $nlo,$nj,$m1 // np[j]*m1
|
||||
adds $lo1,$lo1,$lo0
|
||||
umulh $nhi,$nj,$m1
|
||||
str $lo1,[$tp,#-16] // tp[j-1]
|
||||
stur $lo1,[$tp,#-16] // tp[j-1]
|
||||
cbnz $j,.Linner
|
||||
|
||||
.Linner_skip:
|
||||
@@ -253,13 +253,13 @@ bn_mul_mont:
|
||||
csel $nj,$tj,$aj,lo // did it borrow?
|
||||
ldr $tj,[$tp],#8
|
||||
ldr $aj,[$rp],#8
|
||||
str xzr,[$tp,#-16] // wipe tp
|
||||
str $nj,[$rp,#-16]
|
||||
stur xzr,[$tp,#-16] // wipe tp
|
||||
stur $nj,[$rp,#-16]
|
||||
cbnz $num,.Lcond_copy
|
||||
|
||||
csel $nj,$tj,$aj,lo
|
||||
str xzr,[$tp,#-8] // wipe tp
|
||||
str $nj,[$rp,#-8]
|
||||
stur xzr,[$tp,#-8] // wipe tp
|
||||
stur $nj,[$rp,#-8]
|
||||
|
||||
ldp x19,x20,[x29,#16]
|
||||
mov sp,x29
|
||||
@@ -287,6 +287,7 @@ __bn_sqr8x_mont:
|
||||
cmp $ap,$bp
|
||||
b.ne __bn_mul4x_mont
|
||||
.Lsqr8x_mont:
|
||||
.inst 0xd503233f // paciasp
|
||||
stp x29,x30,[sp,#-128]!
|
||||
add x29,sp,#0
|
||||
stp x19,x20,[sp,#16]
|
||||
@@ -595,7 +596,7 @@ __bn_sqr8x_mont:
|
||||
ldp $a4,$a5,[$tp,#8*4]
|
||||
ldp $a6,$a7,[$tp,#8*6]
|
||||
adds $acc0,$acc0,$a0
|
||||
ldr $n0,[$rp,#-8*8]
|
||||
ldur $n0,[$rp,#-8*8]
|
||||
adcs $acc1,$acc1,$a1
|
||||
ldp $a0,$a1,[$ap,#8*0]
|
||||
adcs $acc2,$acc2,$a2
|
||||
@@ -793,7 +794,7 @@ $code.=<<___;
|
||||
//adc $carry,xzr,xzr // moved below
|
||||
cbz $cnt,.Lsqr8x8_post_condition
|
||||
|
||||
ldr $n0,[$tp,#-8*8]
|
||||
ldur $n0,[$tp,#-8*8]
|
||||
ldp $a0,$a1,[$np,#8*0]
|
||||
ldp $a2,$a3,[$np,#8*2]
|
||||
ldp $a4,$a5,[$np,#8*4]
|
||||
@@ -851,7 +852,7 @@ $code.=<<___;
|
||||
ldp $a6,$a7,[$tp,#8*6]
|
||||
cbz $cnt,.Lsqr8x_tail_break
|
||||
|
||||
ldr $n0,[$rp,#-8*8]
|
||||
ldur $n0,[$rp,#-8*8]
|
||||
adds $acc0,$acc0,$a0
|
||||
adcs $acc1,$acc1,$a1
|
||||
ldp $a0,$a1,[$np,#8*0]
|
||||
@@ -1040,6 +1041,7 @@ $code.=<<___;
|
||||
ldp x25,x26,[x29,#64]
|
||||
ldp x27,x28,[x29,#80]
|
||||
ldr x29,[sp],#128
|
||||
.inst 0xd50323bf // autiasp
|
||||
ret
|
||||
.size __bn_sqr8x_mont,.-__bn_sqr8x_mont
|
||||
___
|
||||
@@ -1063,6 +1065,7 @@ $code.=<<___;
|
||||
.type __bn_mul4x_mont,%function
|
||||
.align 5
|
||||
__bn_mul4x_mont:
|
||||
.inst 0xd503233f // paciasp
|
||||
stp x29,x30,[sp,#-128]!
|
||||
add x29,sp,#0
|
||||
stp x19,x20,[sp,#16]
|
||||
@@ -1496,6 +1499,7 @@ __bn_mul4x_mont:
|
||||
ldp x25,x26,[x29,#64]
|
||||
ldp x27,x28,[x29,#80]
|
||||
ldr x29,[sp],#128
|
||||
.inst 0xd50323bf // autiasp
|
||||
ret
|
||||
.size __bn_mul4x_mont,.-__bn_mul4x_mont
|
||||
___
|
||||
|
||||
@@ -1492,6 +1492,7 @@ $code.=<<___;
|
||||
.type rsaz_1024_red2norm_avx2,\@abi-omnipotent
|
||||
.align 32
|
||||
rsaz_1024_red2norm_avx2:
|
||||
.cfi_startproc
|
||||
sub \$-128,$inp # size optimization
|
||||
xor %rax,%rax
|
||||
___
|
||||
@@ -1525,12 +1526,14 @@ ___
|
||||
}
|
||||
$code.=<<___;
|
||||
ret
|
||||
.cfi_endproc
|
||||
.size rsaz_1024_red2norm_avx2,.-rsaz_1024_red2norm_avx2
|
||||
|
||||
.globl rsaz_1024_norm2red_avx2
|
||||
.type rsaz_1024_norm2red_avx2,\@abi-omnipotent
|
||||
.align 32
|
||||
rsaz_1024_norm2red_avx2:
|
||||
.cfi_startproc
|
||||
sub \$-128,$out # size optimization
|
||||
mov ($inp),@T[0]
|
||||
mov \$0x1fffffff,%eax
|
||||
@@ -1562,6 +1565,7 @@ $code.=<<___;
|
||||
mov @T[0],`8*($j+2)-128`($out)
|
||||
mov @T[0],`8*($j+3)-128`($out)
|
||||
ret
|
||||
.cfi_endproc
|
||||
.size rsaz_1024_norm2red_avx2,.-rsaz_1024_norm2red_avx2
|
||||
___
|
||||
}
|
||||
@@ -1573,6 +1577,7 @@ $code.=<<___;
|
||||
.type rsaz_1024_scatter5_avx2,\@abi-omnipotent
|
||||
.align 32
|
||||
rsaz_1024_scatter5_avx2:
|
||||
.cfi_startproc
|
||||
vzeroupper
|
||||
vmovdqu .Lscatter_permd(%rip),%ymm5
|
||||
shl \$4,$power
|
||||
@@ -1592,6 +1597,7 @@ rsaz_1024_scatter5_avx2:
|
||||
|
||||
vzeroupper
|
||||
ret
|
||||
.cfi_endproc
|
||||
.size rsaz_1024_scatter5_avx2,.-rsaz_1024_scatter5_avx2
|
||||
|
||||
.globl rsaz_1024_gather5_avx2
|
||||
|
||||
@@ -2910,6 +2910,7 @@ bn_powerx5:
|
||||
.align 32
|
||||
bn_sqrx8x_internal:
|
||||
__bn_sqrx8x_internal:
|
||||
.cfi_startproc
|
||||
##################################################################
|
||||
# Squaring part:
|
||||
#
|
||||
@@ -3542,6 +3543,7 @@ __bn_sqrx8x_reduction:
|
||||
cmp 8+8(%rsp),%r8 # end of t[]?
|
||||
jb .Lsqrx8x_reduction_loop
|
||||
ret
|
||||
.cfi_endproc
|
||||
.size bn_sqrx8x_internal,.-bn_sqrx8x_internal
|
||||
___
|
||||
}
|
||||
|
||||
+3
-1
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved.
|
||||
* Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
@@ -227,6 +227,8 @@ BIGNUM *BN_CTX_get(BN_CTX *ctx)
|
||||
}
|
||||
/* OK, make sure the returned bignum is "zero" */
|
||||
BN_zero(ret);
|
||||
/* clear BN_FLG_CONSTTIME if leaked from previous frames */
|
||||
ret->flags &= (~BN_FLG_CONSTTIME);
|
||||
ctx->used++;
|
||||
CTXDBG_RET(ctx, ret);
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user