AArch64 assembly pack: authenticate return addresses.
[openssl.git] / crypto / chacha / asm / chacha-armv8.pl
index f7e10747145026f336a7d847e51234a2147d7e26..ae50fc98ae9b120986840444d3ac36c95af9fd07 100755 (executable)
@@ -15,7 +15,7 @@
 # ====================================================================
 #
 # June 2015
-# 
+#
 # ChaCha20 for ARMv8.
 #
 # Performance in cycles per byte out of large buffer.
@@ -28,6 +28,7 @@
 # Denver               4.50/+82%       2.63            2.67(*)
 # X-Gene               9.50/+46%       8.82            8.89(*)
 # Mongoose             8.00/+44%       3.64            3.25
+# Kryo                 8.17/+50%       4.83            4.65
 #
 # (*)  it's expected that doubling interleave factor doesn't help
 #      all processors, only those with higher NEON latency and
@@ -156,6 +157,7 @@ ChaCha20_ctr32:
        b.ne    ChaCha20_neon
 
 .Lshort:
+       .inst   0xd503233f                      // paciasp
        stp     x29,x30,[sp,#-96]!
        add     x29,sp,#0
 
@@ -201,7 +203,7 @@ ChaCha20_ctr32:
        mov     $ctr,#10
        subs    $len,$len,#64
 .Loop:
-       sub     $ctr,$ctr,#1    
+       sub     $ctr,$ctr,#1
 ___
        foreach (&ROUND(0, 4, 8,12)) { eval; }
        foreach (&ROUND(0, 5,10,15)) { eval; }
@@ -275,6 +277,7 @@ $code.=<<___;
        ldp     x25,x26,[x29,#64]
        ldp     x27,x28,[x29,#80]
        ldp     x29,x30,[sp],#96
+       .inst   0xd50323bf                      // autiasp
 .Labort:
        ret
 
@@ -331,6 +334,7 @@ $code.=<<___;
        ldp     x25,x26,[x29,#64]
        ldp     x27,x28,[x29,#80]
        ldp     x29,x30,[sp],#96
+       .inst   0xd50323bf                      // autiasp
        ret
 .size  ChaCha20_ctr32,.-ChaCha20_ctr32
 ___
@@ -376,6 +380,7 @@ $code.=<<___;
 .type  ChaCha20_neon,%function
 .align 5
 ChaCha20_neon:
+       .inst   0xd503233f                      // paciasp
        stp     x29,x30,[sp,#-96]!
        add     x29,sp,#0
 
@@ -574,6 +579,7 @@ $code.=<<___;
        ldp     x25,x26,[x29,#64]
        ldp     x27,x28,[x29,#80]
        ldp     x29,x30,[sp],#96
+       .inst   0xd50323bf                      // autiasp
        ret
 
 .Ltail_neon:
@@ -683,6 +689,7 @@ $code.=<<___;
        ldp     x25,x26,[x29,#64]
        ldp     x27,x28,[x29,#80]
        ldp     x29,x30,[sp],#96
+       .inst   0xd50323bf                      // autiasp
        ret
 .size  ChaCha20_neon,.-ChaCha20_neon
 ___
@@ -695,6 +702,7 @@ $code.=<<___;
 .type  ChaCha20_512_neon,%function
 .align 5
 ChaCha20_512_neon:
+       .inst   0xd503233f                      // paciasp
        stp     x29,x30,[sp,#-96]!
        add     x29,sp,#0
 
@@ -1113,6 +1121,7 @@ $code.=<<___;
        ldp     x25,x26,[x29,#64]
        ldp     x27,x28,[x29,#80]
        ldp     x29,x30,[sp],#96
+       .inst   0xd50323bf                      // autiasp
        ret
 .size  ChaCha20_512_neon,.-ChaCha20_512_neon
 ___