Latest update
This commit is contained in:
@@ -113,8 +113,6 @@ my @T = map([ 8*$_, 8*($_+1), 8*($_+2), 8*($_+3), 8*($_+4) ], (30,35,40,45,50));
|
||||
$code.=<<___;
|
||||
#include "arm_arch.h"
|
||||
|
||||
.text
|
||||
|
||||
#if defined(__thumb2__)
|
||||
.syntax unified
|
||||
.thumb
|
||||
@@ -122,6 +120,8 @@ $code.=<<___;
|
||||
.code 32
|
||||
#endif
|
||||
|
||||
.text
|
||||
|
||||
.type iotas32, %object
|
||||
.align 5
|
||||
iotas32:
|
||||
@@ -691,7 +691,14 @@ ___
|
||||
$code.=<<___;
|
||||
blo .Lround2x
|
||||
|
||||
#if __ARM_ARCH__>=5
|
||||
ldr pc,[sp,#440]
|
||||
#else
|
||||
ldr lr,[sp,#440]
|
||||
tst lr,#1
|
||||
moveq pc,lr @ be binary compatible with V4, yet
|
||||
bx lr @ interoperable with Thumb ISA:-)
|
||||
#endif
|
||||
.size KeccakF1600_int,.-KeccakF1600_int
|
||||
|
||||
.type KeccakF1600, %function
|
||||
@@ -730,7 +737,14 @@ KeccakF1600:
|
||||
stmia @E[1], {@C[0]-@C[9]}
|
||||
|
||||
add sp,sp,#440+20
|
||||
#if __ARM_ARCH__>=5
|
||||
ldmia sp!,{r4-r11,pc}
|
||||
#else
|
||||
ldmia sp!,{r4-r11,lr}
|
||||
tst lr,#1
|
||||
moveq pc,lr @ be binary compatible with V4, yet
|
||||
bx lr @ interoperable with Thumb ISA:-)
|
||||
#endif
|
||||
.size KeccakF1600,.-KeccakF1600
|
||||
___
|
||||
{ my ($A_flat,$inp,$len,$bsz) = map("r$_",(10..12,14));
|
||||
@@ -905,7 +919,14 @@ SHA3_absorb:
|
||||
.Labsorb_abort:
|
||||
add sp,sp,#456+32
|
||||
mov r0,$len @ return value
|
||||
#if __ARM_ARCH__>=5
|
||||
ldmia sp!,{r4-r12,pc}
|
||||
#else
|
||||
ldmia sp!,{r4-r12,lr}
|
||||
tst lr,#1
|
||||
moveq pc,lr @ be binary compatible with V4, yet
|
||||
bx lr @ interoperable with Thumb ISA:-)
|
||||
#endif
|
||||
.size SHA3_absorb,.-SHA3_absorb
|
||||
___
|
||||
}
|
||||
@@ -1055,7 +1076,14 @@ SHA3_squeeze:
|
||||
.align 4
|
||||
.Lsqueeze_done:
|
||||
add sp,sp,#24
|
||||
#if __ARM_ARCH__>=5
|
||||
ldmia sp!,{r4-r10,pc}
|
||||
#else
|
||||
ldmia sp!,{r4-r10,lr}
|
||||
tst lr,#1
|
||||
moveq pc,lr @ be binary compatible with V4, yet
|
||||
bx lr @ interoperable with Thumb ISA:-)
|
||||
#endif
|
||||
.size SHA3_squeeze,.-SHA3_squeeze
|
||||
___
|
||||
}
|
||||
@@ -1265,7 +1293,7 @@ KeccakF1600_neon:
|
||||
subs r3, r3, #1
|
||||
bne .Loop_neon
|
||||
|
||||
bx lr
|
||||
ret
|
||||
.size KeccakF1600_neon,.-KeccakF1600_neon
|
||||
|
||||
.global SHA3_absorb_neon
|
||||
|
||||
@@ -121,6 +121,7 @@ $code.=<<___;
|
||||
.align 5
|
||||
KeccakF1600_int:
|
||||
adr $C[2],iotas
|
||||
.inst 0xd503233f // paciasp
|
||||
stp $C[2],x30,[sp,#16] // 32 bytes on top are mine
|
||||
b .Loop
|
||||
.align 4
|
||||
@@ -292,12 +293,14 @@ $code.=<<___;
|
||||
bne .Loop
|
||||
|
||||
ldr x30,[sp,#24]
|
||||
.inst 0xd50323bf // autiasp
|
||||
ret
|
||||
.size KeccakF1600_int,.-KeccakF1600_int
|
||||
|
||||
.type KeccakF1600,%function
|
||||
.align 5
|
||||
KeccakF1600:
|
||||
.inst 0xd503233f // paciasp
|
||||
stp x29,x30,[sp,#-128]!
|
||||
add x29,sp,#0
|
||||
stp x19,x20,[sp,#16]
|
||||
@@ -347,6 +350,7 @@ KeccakF1600:
|
||||
ldp x25,x26,[x29,#64]
|
||||
ldp x27,x28,[x29,#80]
|
||||
ldp x29,x30,[sp],#128
|
||||
.inst 0xd50323bf // autiasp
|
||||
ret
|
||||
.size KeccakF1600,.-KeccakF1600
|
||||
|
||||
@@ -354,6 +358,7 @@ KeccakF1600:
|
||||
.type SHA3_absorb,%function
|
||||
.align 5
|
||||
SHA3_absorb:
|
||||
.inst 0xd503233f // paciasp
|
||||
stp x29,x30,[sp,#-128]!
|
||||
add x29,sp,#0
|
||||
stp x19,x20,[sp,#16]
|
||||
@@ -451,6 +456,7 @@ $code.=<<___;
|
||||
ldp x25,x26,[x29,#64]
|
||||
ldp x27,x28,[x29,#80]
|
||||
ldp x29,x30,[sp],#128
|
||||
.inst 0xd50323bf // autiasp
|
||||
ret
|
||||
.size SHA3_absorb,.-SHA3_absorb
|
||||
___
|
||||
@@ -461,6 +467,7 @@ $code.=<<___;
|
||||
.type SHA3_squeeze,%function
|
||||
.align 5
|
||||
SHA3_squeeze:
|
||||
.inst 0xd503233f // paciasp
|
||||
stp x29,x30,[sp,#-48]!
|
||||
add x29,sp,#0
|
||||
stp x19,x20,[sp,#16]
|
||||
@@ -523,6 +530,7 @@ SHA3_squeeze:
|
||||
ldp x19,x20,[sp,#16]
|
||||
ldp x21,x22,[sp,#32]
|
||||
ldp x29,x30,[sp],#48
|
||||
.inst 0xd50323bf // autiasp
|
||||
ret
|
||||
.size SHA3_squeeze,.-SHA3_squeeze
|
||||
___
|
||||
@@ -641,6 +649,7 @@ KeccakF1600_ce:
|
||||
.type KeccakF1600_cext,%function
|
||||
.align 5
|
||||
KeccakF1600_cext:
|
||||
.inst 0xd503233f // paciasp
|
||||
stp x29,x30,[sp,#-80]!
|
||||
add x29,sp,#0
|
||||
stp d8,d9,[sp,#16] // per ABI requirement
|
||||
@@ -673,6 +682,7 @@ $code.=<<___;
|
||||
ldp d12,d13,[sp,#48]
|
||||
ldp d14,d15,[sp,#64]
|
||||
ldr x29,[sp],#80
|
||||
.inst 0xd50323bf // autiasp
|
||||
ret
|
||||
.size KeccakF1600_cext,.-KeccakF1600_cext
|
||||
___
|
||||
@@ -685,6 +695,7 @@ $code.=<<___;
|
||||
.type SHA3_absorb_cext,%function
|
||||
.align 5
|
||||
SHA3_absorb_cext:
|
||||
.inst 0xd503233f // paciasp
|
||||
stp x29,x30,[sp,#-80]!
|
||||
add x29,sp,#0
|
||||
stp d8,d9,[sp,#16] // per ABI requirement
|
||||
@@ -756,6 +767,7 @@ $code.=<<___;
|
||||
ldp d12,d13,[sp,#48]
|
||||
ldp d14,d15,[sp,#64]
|
||||
ldp x29,x30,[sp],#80
|
||||
.inst 0xd50323bf // autiasp
|
||||
ret
|
||||
.size SHA3_absorb_cext,.-SHA3_absorb_cext
|
||||
___
|
||||
@@ -767,6 +779,7 @@ $code.=<<___;
|
||||
.type SHA3_squeeze_cext,%function
|
||||
.align 5
|
||||
SHA3_squeeze_cext:
|
||||
.inst 0xd503233f // paciasp
|
||||
stp x29,x30,[sp,#-16]!
|
||||
add x29,sp,#0
|
||||
mov x9,$ctx
|
||||
@@ -822,6 +835,7 @@ SHA3_squeeze_cext:
|
||||
|
||||
.Lsqueeze_done_ce:
|
||||
ldr x29,[sp],#16
|
||||
.inst 0xd50323bf // autiasp
|
||||
ret
|
||||
.size SHA3_squeeze_cext,.-SHA3_squeeze_cext
|
||||
___
|
||||
|
||||
@@ -187,7 +187,6 @@ ___
|
||||
$code=<<___;
|
||||
#include "arm_arch.h"
|
||||
|
||||
.text
|
||||
#if defined(__thumb2__)
|
||||
.syntax unified
|
||||
.thumb
|
||||
@@ -195,6 +194,8 @@ $code=<<___;
|
||||
.code 32
|
||||
#endif
|
||||
|
||||
.text
|
||||
|
||||
.global sha1_block_data_order
|
||||
.type sha1_block_data_order,%function
|
||||
|
||||
@@ -202,12 +203,14 @@ $code=<<___;
|
||||
sha1_block_data_order:
|
||||
#if __ARM_MAX_ARCH__>=7
|
||||
.Lsha1_block:
|
||||
adr r3,.Lsha1_block
|
||||
ldr r12,.LOPENSSL_armcap
|
||||
# if !defined(_WIN32)
|
||||
adr r3,.Lsha1_block
|
||||
ldr r12,[r3,r12] @ OPENSSL_armcap_P
|
||||
#ifdef __APPLE__
|
||||
# endif
|
||||
# if defined(__APPLE__) || defined(_WIN32)
|
||||
ldr r12,[r12]
|
||||
#endif
|
||||
# endif
|
||||
tst r12,#ARMV8_SHA1
|
||||
bne .LARMv8
|
||||
tst r12,#ARMV7_NEON
|
||||
@@ -311,7 +314,11 @@ $code.=<<___;
|
||||
.LK_60_79: .word 0xca62c1d6
|
||||
#if __ARM_MAX_ARCH__>=7
|
||||
.LOPENSSL_armcap:
|
||||
# ifdef _WIN32
|
||||
.word OPENSSL_armcap_P
|
||||
# else
|
||||
.word OPENSSL_armcap_P-.Lsha1_block
|
||||
# endif
|
||||
#endif
|
||||
.asciz "SHA1 block transform for ARMv4/NEON/ARMv8, CRYPTOGAMS by <appro\@openssl.org>"
|
||||
.align 5
|
||||
@@ -613,14 +620,15 @@ my ($ABCD,$E,$E0,$E1)=map("q$_",(0..3));
|
||||
my @MSG=map("q$_",(4..7));
|
||||
my @Kxx=map("q$_",(8..11));
|
||||
my ($W0,$W1,$ABCD_SAVE)=map("q$_",(12..14));
|
||||
my $_byte = ($flavour =~ /win/ ? "DCB" : ".byte");
|
||||
|
||||
$code.=<<___;
|
||||
#if __ARM_MAX_ARCH__>=7
|
||||
|
||||
# if defined(__thumb2__)
|
||||
# define INST(a,b,c,d) .byte c,d|0xf,a,b
|
||||
# define INST(a,b,c,d) $_byte c,d|0xf,a,b
|
||||
# else
|
||||
# define INST(a,b,c,d) .byte a,b,c,d|0x10
|
||||
# define INST(a,b,c,d) $_byte a,b,c,d|0x10
|
||||
# endif
|
||||
|
||||
.type sha1_block_data_order_armv8,%function
|
||||
|
||||
@@ -58,10 +58,10 @@ $code.=<<___ if ($i<15 && !($i&1));
|
||||
lsr @Xx[$i+1],@Xx[$i],#32
|
||||
___
|
||||
$code.=<<___ if ($i<14 && !($i&1));
|
||||
ldr @Xx[$i+2],[$inp,#`($i+2)*4-64`]
|
||||
ldur @Xx[$i+2],[$inp,#`($i+2)*4-64`]
|
||||
___
|
||||
$code.=<<___ if ($i<14 && ($i&1));
|
||||
#ifdef __ARMEB__
|
||||
#ifdef __AARCH64EB__
|
||||
ror @Xx[$i+1],@Xx[$i+1],#32
|
||||
#else
|
||||
rev32 @Xx[$i+1],@Xx[$i+1]
|
||||
@@ -171,23 +171,19 @@ ___
|
||||
}
|
||||
|
||||
$code.=<<___;
|
||||
#include "arm_arch.h"
|
||||
#ifndef __KERNEL__
|
||||
# include "arm_arch.h"
|
||||
.extern OPENSSL_armcap_P
|
||||
#endif
|
||||
|
||||
.text
|
||||
|
||||
.extern OPENSSL_armcap_P
|
||||
.globl sha1_block_data_order
|
||||
.type sha1_block_data_order,%function
|
||||
.align 6
|
||||
sha1_block_data_order:
|
||||
#ifdef __ILP32__
|
||||
ldrsw x16,.LOPENSSL_armcap_P
|
||||
#else
|
||||
ldr x16,.LOPENSSL_armcap_P
|
||||
#endif
|
||||
adr x17,.LOPENSSL_armcap_P
|
||||
add x16,x16,x17
|
||||
ldr w16,[x16]
|
||||
adrp x16,OPENSSL_armcap_P
|
||||
ldr w16,[x16,#:lo12:OPENSSL_armcap_P]
|
||||
tst w16,#ARMV8_SHA1
|
||||
b.ne .Lv8_entry
|
||||
|
||||
@@ -208,7 +204,7 @@ sha1_block_data_order:
|
||||
movz $K,#0x7999
|
||||
sub $num,$num,#1
|
||||
movk $K,#0x5a82,lsl#16
|
||||
#ifdef __ARMEB__
|
||||
#ifdef __AARCH64EB__
|
||||
ror $Xx[0],@Xx[0],#32
|
||||
#else
|
||||
rev32 @Xx[0],@Xx[0]
|
||||
@@ -321,15 +317,11 @@ $code.=<<___;
|
||||
.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 //K_20_39
|
||||
.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc //K_40_59
|
||||
.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 //K_60_79
|
||||
.LOPENSSL_armcap_P:
|
||||
#ifdef __ILP32__
|
||||
.long OPENSSL_armcap_P-.
|
||||
#else
|
||||
.quad OPENSSL_armcap_P-.
|
||||
#endif
|
||||
.asciz "SHA1 block transform for ARMv8, CRYPTOGAMS by <appro\@openssl.org>"
|
||||
.align 2
|
||||
#if !defined(__KERNELL__) && !defined(_WIN64)
|
||||
.comm OPENSSL_armcap_P,4,4
|
||||
#endif
|
||||
___
|
||||
}}}
|
||||
|
||||
|
||||
@@ -181,7 +181,6 @@ $code=<<___;
|
||||
# define __ARM_MAX_ARCH__ 7
|
||||
#endif
|
||||
|
||||
.text
|
||||
#if defined(__thumb2__)
|
||||
.syntax unified
|
||||
.thumb
|
||||
@@ -189,6 +188,8 @@ $code=<<___;
|
||||
.code 32
|
||||
#endif
|
||||
|
||||
.text
|
||||
|
||||
.type K256,%object
|
||||
.align 5
|
||||
K256:
|
||||
@@ -212,7 +213,11 @@ K256:
|
||||
.word 0 @ terminator
|
||||
#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
|
||||
.LOPENSSL_armcap:
|
||||
# ifdef _WIN32
|
||||
.word OPENSSL_armcap_P
|
||||
# else
|
||||
.word OPENSSL_armcap_P-.Lsha256_block_data_order
|
||||
# endif
|
||||
#endif
|
||||
.align 5
|
||||
|
||||
@@ -227,10 +232,12 @@ sha256_block_data_order:
|
||||
#endif
|
||||
#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
|
||||
ldr r12,.LOPENSSL_armcap
|
||||
# if !defined(_WIN32)
|
||||
ldr r12,[r3,r12] @ OPENSSL_armcap_P
|
||||
#ifdef __APPLE__
|
||||
# endif
|
||||
# if defined(__APPLE__) || defined(_WIN32)
|
||||
ldr r12,[r12]
|
||||
#endif
|
||||
# endif
|
||||
tst r12,#ARMV8_SHA256
|
||||
bne .LARMv8
|
||||
tst r12,#ARMV7_NEON
|
||||
@@ -598,14 +605,15 @@ my ($ABCD,$EFGH,$abcd)=map("q$_",(0..2));
|
||||
my @MSG=map("q$_",(8..11));
|
||||
my ($W0,$W1,$ABCD_SAVE,$EFGH_SAVE)=map("q$_",(12..15));
|
||||
my $Ktbl="r3";
|
||||
my $_byte = ($flavour =~ /win/ ? "DCB" : ".byte");
|
||||
|
||||
$code.=<<___;
|
||||
#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
|
||||
|
||||
# if defined(__thumb2__)
|
||||
# define INST(a,b,c,d) .byte c,d|0xc,a,b
|
||||
# define INST(a,b,c,d) $_byte c,d|0xc,a,b
|
||||
# else
|
||||
# define INST(a,b,c,d) .byte a,b,c,d
|
||||
# define INST(a,b,c,d) $_byte a,b,c,d
|
||||
# endif
|
||||
|
||||
.type sha256_block_data_order_armv8,%function
|
||||
|
||||
@@ -196,6 +196,9 @@ $code.=<<___;
|
||||
add $Ktbl,$Ktbl,#8
|
||||
___
|
||||
}
|
||||
|
||||
my $_word = ($flavour =~ /win/ ? "DCDU" : ".word");
|
||||
|
||||
$code=<<___;
|
||||
#ifndef __KERNEL__
|
||||
# include "arm_arch.h"
|
||||
@@ -211,14 +214,13 @@ $code=<<___;
|
||||
#ifdef __ARMEL__
|
||||
# define LO 0
|
||||
# define HI 4
|
||||
# define WORD64(hi0,lo0,hi1,lo1) .word lo0,hi0, lo1,hi1
|
||||
# define WORD64(hi0,lo0,hi1,lo1) $_word lo0,hi0, lo1,hi1
|
||||
#else
|
||||
# define HI 0
|
||||
# define LO 4
|
||||
# define WORD64(hi0,lo0,hi1,lo1) .word hi0,lo0, hi1,lo1
|
||||
# define WORD64(hi0,lo0,hi1,lo1) $_word hi0,lo0, hi1,lo1
|
||||
#endif
|
||||
|
||||
.text
|
||||
#if defined(__thumb2__)
|
||||
.syntax unified
|
||||
.thumb
|
||||
@@ -227,6 +229,8 @@ $code=<<___;
|
||||
.code 32
|
||||
#endif
|
||||
|
||||
.text
|
||||
|
||||
.type K512,%object
|
||||
.align 5
|
||||
K512:
|
||||
@@ -273,7 +277,11 @@ WORD64(0x5fcb6fab,0x3ad6faec, 0x6c44198c,0x4a475817)
|
||||
.size K512,.-K512
|
||||
#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
|
||||
.LOPENSSL_armcap:
|
||||
# ifdef _WIN32
|
||||
.word OPENSSL_armcap_P
|
||||
# else
|
||||
.word OPENSSL_armcap_P-.Lsha512_block_data_order
|
||||
# endif
|
||||
.skip 32-4
|
||||
#else
|
||||
.skip 32
|
||||
@@ -290,10 +298,12 @@ sha512_block_data_order:
|
||||
#endif
|
||||
#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
|
||||
ldr r12,.LOPENSSL_armcap
|
||||
# if !defined(_WIN32)
|
||||
ldr r12,[r3,r12] @ OPENSSL_armcap_P
|
||||
#ifdef __APPLE__
|
||||
# endif
|
||||
# if defined(__APPLE__) || defined(_WIN32)
|
||||
ldr r12,[r12]
|
||||
#endif
|
||||
# endif
|
||||
tst r12,#ARMV7_NEON
|
||||
bne .LNEON
|
||||
#endif
|
||||
|
||||
@@ -188,24 +188,18 @@ ___
|
||||
$code.=<<___;
|
||||
#ifndef __KERNEL__
|
||||
# include "arm_arch.h"
|
||||
.extern OPENSSL_armcap_P
|
||||
#endif
|
||||
|
||||
.text
|
||||
|
||||
.extern OPENSSL_armcap_P
|
||||
.globl $func
|
||||
.type $func,%function
|
||||
.align 6
|
||||
$func:
|
||||
#ifndef __KERNEL__
|
||||
# ifdef __ILP32__
|
||||
ldrsw x16,.LOPENSSL_armcap_P
|
||||
# else
|
||||
ldr x16,.LOPENSSL_armcap_P
|
||||
# endif
|
||||
adr x17,.LOPENSSL_armcap_P
|
||||
add x16,x16,x17
|
||||
ldr w16,[x16]
|
||||
adrp x16,OPENSSL_armcap_P
|
||||
ldr w16,[x16,#:lo12:OPENSSL_armcap_P]
|
||||
___
|
||||
$code.=<<___ if ($SZ==4);
|
||||
tst w16,#ARMV8_SHA256
|
||||
@@ -219,6 +213,7 @@ $code.=<<___ if ($SZ==8);
|
||||
___
|
||||
$code.=<<___;
|
||||
#endif
|
||||
.inst 0xd503233f // paciasp
|
||||
stp x29,x30,[sp,#-128]!
|
||||
add x29,sp,#0
|
||||
|
||||
@@ -280,6 +275,7 @@ $code.=<<___;
|
||||
ldp x25,x26,[x29,#64]
|
||||
ldp x27,x28,[x29,#80]
|
||||
ldp x29,x30,[sp],#128
|
||||
.inst 0xd50323bf // autiasp
|
||||
ret
|
||||
.size $func,.-$func
|
||||
|
||||
@@ -351,15 +347,6 @@ $code.=<<___ if ($SZ==4);
|
||||
___
|
||||
$code.=<<___;
|
||||
.size .LK$BITS,.-.LK$BITS
|
||||
#ifndef __KERNEL__
|
||||
.align 3
|
||||
.LOPENSSL_armcap_P:
|
||||
# ifdef __ILP32__
|
||||
.long OPENSSL_armcap_P-.
|
||||
# else
|
||||
.quad OPENSSL_armcap_P-.
|
||||
# endif
|
||||
#endif
|
||||
.asciz "SHA$BITS block transform for ARMv8, CRYPTOGAMS by <appro\@openssl.org>"
|
||||
.align 2
|
||||
___
|
||||
@@ -839,7 +826,7 @@ ___
|
||||
}
|
||||
|
||||
$code.=<<___;
|
||||
#ifndef __KERNEL__
|
||||
#if !defined(__KERNEL__) && !defined(_WIN64)
|
||||
.comm OPENSSL_armcap_P,4,4
|
||||
#endif
|
||||
___
|
||||
|
||||
Reference in New Issue
Block a user