|
@@ -48,7 +48,6 @@ if ($flavour && $flavour ne "void") {
|
|
|
$code.=<<___;
|
|
|
#include "arm_arch.h"
|
|
|
|
|
|
-.text
|
|
|
#if defined(__thumb2__)
|
|
|
.syntax unified
|
|
|
.thumb
|
|
@@ -56,6 +55,8 @@ $code.=<<___;
|
|
|
.code 32
|
|
|
#endif
|
|
|
|
|
|
+.text
|
|
|
+
|
|
|
.globl poly1305_emit
|
|
|
.globl poly1305_blocks
|
|
|
.globl poly1305_init
|
|
@@ -100,8 +101,10 @@ poly1305_init:
|
|
|
and r4,r4,r10
|
|
|
|
|
|
#if __ARM_MAX_ARCH__>=7
|
|
|
+# if !defined(_WIN32)
|
|
|
ldr r12,[r11,r12] @ OPENSSL_armcap_P
|
|
|
-# ifdef __APPLE__
|
|
|
+# endif
|
|
|
+# if defined(__APPLE__) || defined(_WIN32)
|
|
|
ldr r12,[r12]
|
|
|
# endif
|
|
|
#endif
|
|
@@ -116,31 +119,21 @@ poly1305_init:
|
|
|
|
|
|
#if __ARM_MAX_ARCH__>=7
|
|
|
tst r12,#ARMV7_NEON @ check for NEON
|
|
|
-# ifdef __APPLE__
|
|
|
- adr r9,poly1305_blocks_neon
|
|
|
- adr r11,poly1305_blocks
|
|
|
-# ifdef __thumb2__
|
|
|
- it ne
|
|
|
-# endif
|
|
|
+# ifdef __thumb2__
|
|
|
+ adr r9,.Lpoly1305_blocks_neon
|
|
|
+ adr r11,.Lpoly1305_blocks
|
|
|
+ adr r12,.Lpoly1305_emit
|
|
|
+ adr r10,.Lpoly1305_emit_neon
|
|
|
+ itt ne
|
|
|
movne r11,r9
|
|
|
- adr r12,poly1305_emit
|
|
|
- adr r10,poly1305_emit_neon
|
|
|
-# ifdef __thumb2__
|
|
|
- it ne
|
|
|
-# endif
|
|
|
movne r12,r10
|
|
|
+ orr r11,r11,#1 @ thumb-ify address
|
|
|
+ orr r12,r12,#1
|
|
|
# else
|
|
|
-# ifdef __thumb2__
|
|
|
- itete eq
|
|
|
-# endif
|
|
|
- addeq r12,r11,#(poly1305_emit-.Lpoly1305_init)
|
|
|
- addne r12,r11,#(poly1305_emit_neon-.Lpoly1305_init)
|
|
|
- addeq r11,r11,#(poly1305_blocks-.Lpoly1305_init)
|
|
|
- addne r11,r11,#(poly1305_blocks_neon-.Lpoly1305_init)
|
|
|
-# endif
|
|
|
-# ifdef __thumb2__
|
|
|
- orr r12,r12,#1 @ thumb-ify address
|
|
|
- orr r11,r11,#1
|
|
|
+ addeq r12,r11,#(.Lpoly1305_emit-.Lpoly1305_init)
|
|
|
+ addne r12,r11,#(.Lpoly1305_emit_neon-.Lpoly1305_init)
|
|
|
+ addeq r11,r11,#(.Lpoly1305_blocks-.Lpoly1305_init)
|
|
|
+ addne r11,r11,#(.Lpoly1305_blocks_neon-.Lpoly1305_init)
|
|
|
# endif
|
|
|
#endif
|
|
|
ldrb r9,[$inp,#11]
|
|
@@ -352,6 +345,7 @@ $code.=<<___;
|
|
|
.type poly1305_emit,%function
|
|
|
.align 5
|
|
|
poly1305_emit:
|
|
|
+.Lpoly1305_emit:
|
|
|
stmdb sp!,{r4-r11}
|
|
|
.Lpoly1305_emit_enter:
|
|
|
|
|
@@ -671,6 +665,7 @@ poly1305_init_neon:
|
|
|
.type poly1305_blocks_neon,%function
|
|
|
.align 5
|
|
|
poly1305_blocks_neon:
|
|
|
+.Lpoly1305_blocks_neon:
|
|
|
ldr ip,[$ctx,#36] @ is_base2_26
|
|
|
ands $len,$len,#-16
|
|
|
beq .Lno_data_neon
|
|
@@ -1157,6 +1152,7 @@ poly1305_blocks_neon:
|
|
|
.type poly1305_emit_neon,%function
|
|
|
.align 5
|
|
|
poly1305_emit_neon:
|
|
|
+.Lpoly1305_emit_neon:
|
|
|
ldr ip,[$ctx,#36] @ is_base2_26
|
|
|
|
|
|
stmdb sp!,{r4-r11}
|
|
@@ -1229,7 +1225,11 @@ poly1305_emit_neon:
|
|
|
.Lzeros:
|
|
|
.long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
|
.LOPENSSL_armcap:
|
|
|
+# ifdef _WIN32
|
|
|
+.word OPENSSL_armcap_P
|
|
|
+# else
|
|
|
.word OPENSSL_armcap_P-.Lpoly1305_init
|
|
|
+# endif
|
|
|
#endif
|
|
|
___
|
|
|
} }
|