The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/crypto/openssl/aarch64/sha256-armv8.S

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /* $FreeBSD$ */
    2 /* Do not modify. This file is auto-generated from sha512-armv8.pl. */
    3 // Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved.
    4 //
    5 // Licensed under the OpenSSL license (the "License").  You may not use
    6 // this file except in compliance with the License.  You can obtain a copy
    7 // in the file LICENSE in the source distribution or at
    8 // https://www.openssl.org/source/license.html
    9 
   10 // ====================================================================
   11 // Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
   12 // project. The module is, however, dual licensed under OpenSSL and
   13 // CRYPTOGAMS licenses depending on where you obtain it. For further
   14 // details see http://www.openssl.org/~appro/cryptogams/.
   15 //
   16 // Permission to use under GPLv2 terms is granted.
   17 // ====================================================================
   18 //
   19 // SHA256/512 for ARMv8.
   20 //
   21 // Performance in cycles per processed byte and improvement coefficient
   22 // over code generated with "default" compiler:
   23 //
   24 //              SHA256-hw       SHA256(*)       SHA512
   25 // Apple A7     1.97            10.5 (+33%)     6.73 (-1%(**))
   26 // Cortex-A53   2.38            15.5 (+115%)    10.0 (+150%(***))
   27 // Cortex-A57   2.31            11.6 (+86%)     7.51 (+260%(***))
   28 // Denver       2.01            10.5 (+26%)     6.70 (+8%)
   29 // X-Gene                       20.0 (+100%)    12.8 (+300%(***))
   30 // Mongoose     2.36            13.0 (+50%)     8.36 (+33%)
   31 // Kryo         1.92            17.4 (+30%)     11.2 (+8%)
   32 //
   33 // (*)  Software SHA256 results are of lesser relevance, presented
   34 //      mostly for informational purposes.
   35 // (**) The result is a trade-off: it's possible to improve it by
   36 //      10% (or by 1 cycle per round), but at the cost of 20% loss
   37 //      on Cortex-A53 (or by 4 cycles per round).
   38 // (***)        Super-impressive coefficients over gcc-generated code are
   39 //      indication of some compiler "pathology", most notably code
   40 //      generated with -mgeneral-regs-only is significantly faster
   41 //      and the gap is only 40-90%.
   42 //
   43 // October 2016.
   44 //
   45 // Originally it was reckoned that it makes no sense to implement NEON
   46 // version of SHA256 for 64-bit processors. This is because performance
   47 // improvement on most wide-spread Cortex-A5x processors was observed
   48 // to be marginal, same on Cortex-A53 and ~10% on A57. But then it was
   49 // observed that 32-bit NEON SHA256 performs significantly better than
   50 // 64-bit scalar version on *some* of the more recent processors. As
   51 // result 64-bit NEON version of SHA256 was added to provide best
   52 // all-round performance. For example it executes ~30% faster on X-Gene
   53 // and Mongoose. [For reference, NEON version of SHA512 is bound to
   54 // deliver much less improvement, likely *negative* on Cortex-A5x.
   55 // Which is why NEON support is limited to SHA256.]
   56 
   57 #ifndef __KERNEL__
   58 # include "arm_arch.h"
   59 #endif
   60 
   61 .text
   62 
   63 
   64 .hidden OPENSSL_armcap_P
   65 .globl  sha256_block_data_order
   66 .type   sha256_block_data_order,%function
   67 .align  6
   68 sha256_block_data_order:
   69 #ifndef __KERNEL__
   70 # ifdef __ILP32__
   71         ldrsw   x16,.LOPENSSL_armcap_P
   72 # else
   73         ldr     x16,.LOPENSSL_armcap_P
   74 # endif
   75         adr     x17,.LOPENSSL_armcap_P
   76         add     x16,x16,x17
   77         ldr     w16,[x16]
   78         tst     w16,#ARMV8_SHA256
   79         b.ne    .Lv8_entry
   80         tst     w16,#ARMV7_NEON
   81         b.ne    .Lneon_entry
   82 #endif
   83 .inst   0xd503233f                              // paciasp
   84         stp     x29,x30,[sp,#-128]!
   85         add     x29,sp,#0
   86 
   87         stp     x19,x20,[sp,#16]
   88         stp     x21,x22,[sp,#32]
   89         stp     x23,x24,[sp,#48]
   90         stp     x25,x26,[sp,#64]
   91         stp     x27,x28,[sp,#80]
   92         sub     sp,sp,#4*4
   93 
   94         ldp     w20,w21,[x0]                            // load context
   95         ldp     w22,w23,[x0,#2*4]
   96         ldp     w24,w25,[x0,#4*4]
   97         add     x2,x1,x2,lsl#6  // end of input
   98         ldp     w26,w27,[x0,#6*4]
   99         adr     x30,.LK256
  100         stp     x0,x2,[x29,#96]
  101 
  102 .Loop:
  103         ldp     w3,w4,[x1],#2*4
  104         ldr     w19,[x30],#4                    // *K++
  105         eor     w28,w21,w22                             // magic seed
  106         str     x1,[x29,#112]
  107 #ifndef __AARCH64EB__
  108         rev     w3,w3                   // 0
  109 #endif
  110         ror     w16,w24,#6
  111         add     w27,w27,w19                     // h+=K[i]
  112         eor     w6,w24,w24,ror#14
  113         and     w17,w25,w24
  114         bic     w19,w26,w24
  115         add     w27,w27,w3                      // h+=X[i]
  116         orr     w17,w17,w19                     // Ch(e,f,g)
  117         eor     w19,w20,w21                     // a^b, b^c in next round
  118         eor     w16,w16,w6,ror#11       // Sigma1(e)
  119         ror     w6,w20,#2
  120         add     w27,w27,w17                     // h+=Ch(e,f,g)
  121         eor     w17,w20,w20,ror#9
  122         add     w27,w27,w16                     // h+=Sigma1(e)
  123         and     w28,w28,w19                     // (b^c)&=(a^b)
  124         add     w23,w23,w27                     // d+=h
  125         eor     w28,w28,w21                     // Maj(a,b,c)
  126         eor     w17,w6,w17,ror#13       // Sigma0(a)
  127         add     w27,w27,w28                     // h+=Maj(a,b,c)
  128         ldr     w28,[x30],#4            // *K++, w19 in next round
  129         //add   w27,w27,w17                     // h+=Sigma0(a)
  130 #ifndef __AARCH64EB__
  131         rev     w4,w4                   // 1
  132 #endif
  133         ldp     w5,w6,[x1],#2*4
  134         add     w27,w27,w17                     // h+=Sigma0(a)
  135         ror     w16,w23,#6
  136         add     w26,w26,w28                     // h+=K[i]
  137         eor     w7,w23,w23,ror#14
  138         and     w17,w24,w23
  139         bic     w28,w25,w23
  140         add     w26,w26,w4                      // h+=X[i]
  141         orr     w17,w17,w28                     // Ch(e,f,g)
  142         eor     w28,w27,w20                     // a^b, b^c in next round
  143         eor     w16,w16,w7,ror#11       // Sigma1(e)
  144         ror     w7,w27,#2
  145         add     w26,w26,w17                     // h+=Ch(e,f,g)
  146         eor     w17,w27,w27,ror#9
  147         add     w26,w26,w16                     // h+=Sigma1(e)
  148         and     w19,w19,w28                     // (b^c)&=(a^b)
  149         add     w22,w22,w26                     // d+=h
  150         eor     w19,w19,w20                     // Maj(a,b,c)
  151         eor     w17,w7,w17,ror#13       // Sigma0(a)
  152         add     w26,w26,w19                     // h+=Maj(a,b,c)
  153         ldr     w19,[x30],#4            // *K++, w28 in next round
  154         //add   w26,w26,w17                     // h+=Sigma0(a)
  155 #ifndef __AARCH64EB__
  156         rev     w5,w5                   // 2
  157 #endif
  158         add     w26,w26,w17                     // h+=Sigma0(a)
  159         ror     w16,w22,#6
  160         add     w25,w25,w19                     // h+=K[i]
  161         eor     w8,w22,w22,ror#14
  162         and     w17,w23,w22
  163         bic     w19,w24,w22
  164         add     w25,w25,w5                      // h+=X[i]
  165         orr     w17,w17,w19                     // Ch(e,f,g)
  166         eor     w19,w26,w27                     // a^b, b^c in next round
  167         eor     w16,w16,w8,ror#11       // Sigma1(e)
  168         ror     w8,w26,#2
  169         add     w25,w25,w17                     // h+=Ch(e,f,g)
  170         eor     w17,w26,w26,ror#9
  171         add     w25,w25,w16                     // h+=Sigma1(e)
  172         and     w28,w28,w19                     // (b^c)&=(a^b)
  173         add     w21,w21,w25                     // d+=h
  174         eor     w28,w28,w27                     // Maj(a,b,c)
  175         eor     w17,w8,w17,ror#13       // Sigma0(a)
  176         add     w25,w25,w28                     // h+=Maj(a,b,c)
  177         ldr     w28,[x30],#4            // *K++, w19 in next round
  178         //add   w25,w25,w17                     // h+=Sigma0(a)
  179 #ifndef __AARCH64EB__
  180         rev     w6,w6                   // 3
  181 #endif
  182         ldp     w7,w8,[x1],#2*4
  183         add     w25,w25,w17                     // h+=Sigma0(a)
  184         ror     w16,w21,#6
  185         add     w24,w24,w28                     // h+=K[i]
  186         eor     w9,w21,w21,ror#14
  187         and     w17,w22,w21
  188         bic     w28,w23,w21
  189         add     w24,w24,w6                      // h+=X[i]
  190         orr     w17,w17,w28                     // Ch(e,f,g)
  191         eor     w28,w25,w26                     // a^b, b^c in next round
  192         eor     w16,w16,w9,ror#11       // Sigma1(e)
  193         ror     w9,w25,#2
  194         add     w24,w24,w17                     // h+=Ch(e,f,g)
  195         eor     w17,w25,w25,ror#9
  196         add     w24,w24,w16                     // h+=Sigma1(e)
  197         and     w19,w19,w28                     // (b^c)&=(a^b)
  198         add     w20,w20,w24                     // d+=h
  199         eor     w19,w19,w26                     // Maj(a,b,c)
  200         eor     w17,w9,w17,ror#13       // Sigma0(a)
  201         add     w24,w24,w19                     // h+=Maj(a,b,c)
  202         ldr     w19,[x30],#4            // *K++, w28 in next round
  203         //add   w24,w24,w17                     // h+=Sigma0(a)
  204 #ifndef __AARCH64EB__
  205         rev     w7,w7                   // 4
  206 #endif
  207         add     w24,w24,w17                     // h+=Sigma0(a)
  208         ror     w16,w20,#6
  209         add     w23,w23,w19                     // h+=K[i]
  210         eor     w10,w20,w20,ror#14
  211         and     w17,w21,w20
  212         bic     w19,w22,w20
  213         add     w23,w23,w7                      // h+=X[i]
  214         orr     w17,w17,w19                     // Ch(e,f,g)
  215         eor     w19,w24,w25                     // a^b, b^c in next round
  216         eor     w16,w16,w10,ror#11      // Sigma1(e)
  217         ror     w10,w24,#2
  218         add     w23,w23,w17                     // h+=Ch(e,f,g)
  219         eor     w17,w24,w24,ror#9
  220         add     w23,w23,w16                     // h+=Sigma1(e)
  221         and     w28,w28,w19                     // (b^c)&=(a^b)
  222         add     w27,w27,w23                     // d+=h
  223         eor     w28,w28,w25                     // Maj(a,b,c)
  224         eor     w17,w10,w17,ror#13      // Sigma0(a)
  225         add     w23,w23,w28                     // h+=Maj(a,b,c)
  226         ldr     w28,[x30],#4            // *K++, w19 in next round
  227         //add   w23,w23,w17                     // h+=Sigma0(a)
  228 #ifndef __AARCH64EB__
  229         rev     w8,w8                   // 5
  230 #endif
  231         ldp     w9,w10,[x1],#2*4
  232         add     w23,w23,w17                     // h+=Sigma0(a)
  233         ror     w16,w27,#6
  234         add     w22,w22,w28                     // h+=K[i]
  235         eor     w11,w27,w27,ror#14
  236         and     w17,w20,w27
  237         bic     w28,w21,w27
  238         add     w22,w22,w8                      // h+=X[i]
  239         orr     w17,w17,w28                     // Ch(e,f,g)
  240         eor     w28,w23,w24                     // a^b, b^c in next round
  241         eor     w16,w16,w11,ror#11      // Sigma1(e)
  242         ror     w11,w23,#2
  243         add     w22,w22,w17                     // h+=Ch(e,f,g)
  244         eor     w17,w23,w23,ror#9
  245         add     w22,w22,w16                     // h+=Sigma1(e)
  246         and     w19,w19,w28                     // (b^c)&=(a^b)
  247         add     w26,w26,w22                     // d+=h
  248         eor     w19,w19,w24                     // Maj(a,b,c)
  249         eor     w17,w11,w17,ror#13      // Sigma0(a)
  250         add     w22,w22,w19                     // h+=Maj(a,b,c)
  251         ldr     w19,[x30],#4            // *K++, w28 in next round
  252         //add   w22,w22,w17                     // h+=Sigma0(a)
  253 #ifndef __AARCH64EB__
  254         rev     w9,w9                   // 6
  255 #endif
  256         add     w22,w22,w17                     // h+=Sigma0(a)
  257         ror     w16,w26,#6
  258         add     w21,w21,w19                     // h+=K[i]
  259         eor     w12,w26,w26,ror#14
  260         and     w17,w27,w26
  261         bic     w19,w20,w26
  262         add     w21,w21,w9                      // h+=X[i]
  263         orr     w17,w17,w19                     // Ch(e,f,g)
  264         eor     w19,w22,w23                     // a^b, b^c in next round
  265         eor     w16,w16,w12,ror#11      // Sigma1(e)
  266         ror     w12,w22,#2
  267         add     w21,w21,w17                     // h+=Ch(e,f,g)
  268         eor     w17,w22,w22,ror#9
  269         add     w21,w21,w16                     // h+=Sigma1(e)
  270         and     w28,w28,w19                     // (b^c)&=(a^b)
  271         add     w25,w25,w21                     // d+=h
  272         eor     w28,w28,w23                     // Maj(a,b,c)
  273         eor     w17,w12,w17,ror#13      // Sigma0(a)
  274         add     w21,w21,w28                     // h+=Maj(a,b,c)
  275         ldr     w28,[x30],#4            // *K++, w19 in next round
  276         //add   w21,w21,w17                     // h+=Sigma0(a)
  277 #ifndef __AARCH64EB__
  278         rev     w10,w10                 // 7
  279 #endif
  280         ldp     w11,w12,[x1],#2*4
  281         add     w21,w21,w17                     // h+=Sigma0(a)
  282         ror     w16,w25,#6
  283         add     w20,w20,w28                     // h+=K[i]
  284         eor     w13,w25,w25,ror#14
  285         and     w17,w26,w25
  286         bic     w28,w27,w25
  287         add     w20,w20,w10                     // h+=X[i]
  288         orr     w17,w17,w28                     // Ch(e,f,g)
  289         eor     w28,w21,w22                     // a^b, b^c in next round
  290         eor     w16,w16,w13,ror#11      // Sigma1(e)
  291         ror     w13,w21,#2
  292         add     w20,w20,w17                     // h+=Ch(e,f,g)
  293         eor     w17,w21,w21,ror#9
  294         add     w20,w20,w16                     // h+=Sigma1(e)
  295         and     w19,w19,w28                     // (b^c)&=(a^b)
  296         add     w24,w24,w20                     // d+=h
  297         eor     w19,w19,w22                     // Maj(a,b,c)
  298         eor     w17,w13,w17,ror#13      // Sigma0(a)
  299         add     w20,w20,w19                     // h+=Maj(a,b,c)
  300         ldr     w19,[x30],#4            // *K++, w28 in next round
  301         //add   w20,w20,w17                     // h+=Sigma0(a)
  302 #ifndef __AARCH64EB__
  303         rev     w11,w11                 // 8
  304 #endif
  305         add     w20,w20,w17                     // h+=Sigma0(a)
  306         ror     w16,w24,#6
  307         add     w27,w27,w19                     // h+=K[i]
  308         eor     w14,w24,w24,ror#14
  309         and     w17,w25,w24
  310         bic     w19,w26,w24
  311         add     w27,w27,w11                     // h+=X[i]
  312         orr     w17,w17,w19                     // Ch(e,f,g)
  313         eor     w19,w20,w21                     // a^b, b^c in next round
  314         eor     w16,w16,w14,ror#11      // Sigma1(e)
  315         ror     w14,w20,#2
  316         add     w27,w27,w17                     // h+=Ch(e,f,g)
  317         eor     w17,w20,w20,ror#9
  318         add     w27,w27,w16                     // h+=Sigma1(e)
  319         and     w28,w28,w19                     // (b^c)&=(a^b)
  320         add     w23,w23,w27                     // d+=h
  321         eor     w28,w28,w21                     // Maj(a,b,c)
  322         eor     w17,w14,w17,ror#13      // Sigma0(a)
  323         add     w27,w27,w28                     // h+=Maj(a,b,c)
  324         ldr     w28,[x30],#4            // *K++, w19 in next round
  325         //add   w27,w27,w17                     // h+=Sigma0(a)
  326 #ifndef __AARCH64EB__
  327         rev     w12,w12                 // 9
  328 #endif
  329         ldp     w13,w14,[x1],#2*4
  330         add     w27,w27,w17                     // h+=Sigma0(a)
  331         ror     w16,w23,#6
  332         add     w26,w26,w28                     // h+=K[i]
  333         eor     w15,w23,w23,ror#14
  334         and     w17,w24,w23
  335         bic     w28,w25,w23
  336         add     w26,w26,w12                     // h+=X[i]
  337         orr     w17,w17,w28                     // Ch(e,f,g)
  338         eor     w28,w27,w20                     // a^b, b^c in next round
  339         eor     w16,w16,w15,ror#11      // Sigma1(e)
  340         ror     w15,w27,#2
  341         add     w26,w26,w17                     // h+=Ch(e,f,g)
  342         eor     w17,w27,w27,ror#9
  343         add     w26,w26,w16                     // h+=Sigma1(e)
  344         and     w19,w19,w28                     // (b^c)&=(a^b)
  345         add     w22,w22,w26                     // d+=h
  346         eor     w19,w19,w20                     // Maj(a,b,c)
  347         eor     w17,w15,w17,ror#13      // Sigma0(a)
  348         add     w26,w26,w19                     // h+=Maj(a,b,c)
  349         ldr     w19,[x30],#4            // *K++, w28 in next round
  350         //add   w26,w26,w17                     // h+=Sigma0(a)
  351 #ifndef __AARCH64EB__
  352         rev     w13,w13                 // 10
  353 #endif
  354         add     w26,w26,w17                     // h+=Sigma0(a)
  355         ror     w16,w22,#6
  356         add     w25,w25,w19                     // h+=K[i]
  357         eor     w0,w22,w22,ror#14
  358         and     w17,w23,w22
  359         bic     w19,w24,w22
  360         add     w25,w25,w13                     // h+=X[i]
  361         orr     w17,w17,w19                     // Ch(e,f,g)
  362         eor     w19,w26,w27                     // a^b, b^c in next round
  363         eor     w16,w16,w0,ror#11       // Sigma1(e)
  364         ror     w0,w26,#2
  365         add     w25,w25,w17                     // h+=Ch(e,f,g)
  366         eor     w17,w26,w26,ror#9
  367         add     w25,w25,w16                     // h+=Sigma1(e)
  368         and     w28,w28,w19                     // (b^c)&=(a^b)
  369         add     w21,w21,w25                     // d+=h
  370         eor     w28,w28,w27                     // Maj(a,b,c)
  371         eor     w17,w0,w17,ror#13       // Sigma0(a)
  372         add     w25,w25,w28                     // h+=Maj(a,b,c)
  373         ldr     w28,[x30],#4            // *K++, w19 in next round
  374         //add   w25,w25,w17                     // h+=Sigma0(a)
  375 #ifndef __AARCH64EB__
  376         rev     w14,w14                 // 11
  377 #endif
  378         ldp     w15,w0,[x1],#2*4
  379         add     w25,w25,w17                     // h+=Sigma0(a)
  380         str     w6,[sp,#12]
  381         ror     w16,w21,#6
  382         add     w24,w24,w28                     // h+=K[i]
  383         eor     w6,w21,w21,ror#14
  384         and     w17,w22,w21
  385         bic     w28,w23,w21
  386         add     w24,w24,w14                     // h+=X[i]
  387         orr     w17,w17,w28                     // Ch(e,f,g)
  388         eor     w28,w25,w26                     // a^b, b^c in next round
  389         eor     w16,w16,w6,ror#11       // Sigma1(e)
  390         ror     w6,w25,#2
  391         add     w24,w24,w17                     // h+=Ch(e,f,g)
  392         eor     w17,w25,w25,ror#9
  393         add     w24,w24,w16                     // h+=Sigma1(e)
  394         and     w19,w19,w28                     // (b^c)&=(a^b)
  395         add     w20,w20,w24                     // d+=h
  396         eor     w19,w19,w26                     // Maj(a,b,c)
  397         eor     w17,w6,w17,ror#13       // Sigma0(a)
  398         add     w24,w24,w19                     // h+=Maj(a,b,c)
  399         ldr     w19,[x30],#4            // *K++, w28 in next round
  400         //add   w24,w24,w17                     // h+=Sigma0(a)
  401 #ifndef __AARCH64EB__
  402         rev     w15,w15                 // 12
  403 #endif
  404         add     w24,w24,w17                     // h+=Sigma0(a)
  405         str     w7,[sp,#0]
  406         ror     w16,w20,#6
  407         add     w23,w23,w19                     // h+=K[i]
  408         eor     w7,w20,w20,ror#14
  409         and     w17,w21,w20
  410         bic     w19,w22,w20
  411         add     w23,w23,w15                     // h+=X[i]
  412         orr     w17,w17,w19                     // Ch(e,f,g)
  413         eor     w19,w24,w25                     // a^b, b^c in next round
  414         eor     w16,w16,w7,ror#11       // Sigma1(e)
  415         ror     w7,w24,#2
  416         add     w23,w23,w17                     // h+=Ch(e,f,g)
  417         eor     w17,w24,w24,ror#9
  418         add     w23,w23,w16                     // h+=Sigma1(e)
  419         and     w28,w28,w19                     // (b^c)&=(a^b)
  420         add     w27,w27,w23                     // d+=h
  421         eor     w28,w28,w25                     // Maj(a,b,c)
  422         eor     w17,w7,w17,ror#13       // Sigma0(a)
  423         add     w23,w23,w28                     // h+=Maj(a,b,c)
  424         ldr     w28,[x30],#4            // *K++, w19 in next round
  425         //add   w23,w23,w17                     // h+=Sigma0(a)
  426 #ifndef __AARCH64EB__
  427         rev     w0,w0                   // 13
  428 #endif
  429         ldp     w1,w2,[x1]
  430         add     w23,w23,w17                     // h+=Sigma0(a)
  431         str     w8,[sp,#4]
  432         ror     w16,w27,#6
  433         add     w22,w22,w28                     // h+=K[i]
  434         eor     w8,w27,w27,ror#14
  435         and     w17,w20,w27
  436         bic     w28,w21,w27
  437         add     w22,w22,w0                      // h+=X[i]
  438         orr     w17,w17,w28                     // Ch(e,f,g)
  439         eor     w28,w23,w24                     // a^b, b^c in next round
  440         eor     w16,w16,w8,ror#11       // Sigma1(e)
  441         ror     w8,w23,#2
  442         add     w22,w22,w17                     // h+=Ch(e,f,g)
  443         eor     w17,w23,w23,ror#9
  444         add     w22,w22,w16                     // h+=Sigma1(e)
  445         and     w19,w19,w28                     // (b^c)&=(a^b)
  446         add     w26,w26,w22                     // d+=h
  447         eor     w19,w19,w24                     // Maj(a,b,c)
  448         eor     w17,w8,w17,ror#13       // Sigma0(a)
  449         add     w22,w22,w19                     // h+=Maj(a,b,c)
  450         ldr     w19,[x30],#4            // *K++, w28 in next round
  451         //add   w22,w22,w17                     // h+=Sigma0(a)
  452 #ifndef __AARCH64EB__
  453         rev     w1,w1                   // 14
  454 #endif
  455         ldr     w6,[sp,#12]
  456         add     w22,w22,w17                     // h+=Sigma0(a)
  457         str     w9,[sp,#8]
  458         ror     w16,w26,#6
  459         add     w21,w21,w19                     // h+=K[i]
  460         eor     w9,w26,w26,ror#14
  461         and     w17,w27,w26
  462         bic     w19,w20,w26
  463         add     w21,w21,w1                      // h+=X[i]
  464         orr     w17,w17,w19                     // Ch(e,f,g)
  465         eor     w19,w22,w23                     // a^b, b^c in next round
  466         eor     w16,w16,w9,ror#11       // Sigma1(e)
  467         ror     w9,w22,#2
  468         add     w21,w21,w17                     // h+=Ch(e,f,g)
  469         eor     w17,w22,w22,ror#9
  470         add     w21,w21,w16                     // h+=Sigma1(e)
  471         and     w28,w28,w19                     // (b^c)&=(a^b)
  472         add     w25,w25,w21                     // d+=h
  473         eor     w28,w28,w23                     // Maj(a,b,c)
  474         eor     w17,w9,w17,ror#13       // Sigma0(a)
  475         add     w21,w21,w28                     // h+=Maj(a,b,c)
  476         ldr     w28,[x30],#4            // *K++, w19 in next round
  477         //add   w21,w21,w17                     // h+=Sigma0(a)
  478 #ifndef __AARCH64EB__
  479         rev     w2,w2                   // 15
  480 #endif
  481         ldr     w7,[sp,#0]
  482         add     w21,w21,w17                     // h+=Sigma0(a)
  483         str     w10,[sp,#12]
  484         ror     w16,w25,#6
  485         add     w20,w20,w28                     // h+=K[i]
  486         ror     w9,w4,#7
  487         and     w17,w26,w25
  488         ror     w8,w1,#17
  489         bic     w28,w27,w25
  490         ror     w10,w21,#2
  491         add     w20,w20,w2                      // h+=X[i]
  492         eor     w16,w16,w25,ror#11
  493         eor     w9,w9,w4,ror#18
  494         orr     w17,w17,w28                     // Ch(e,f,g)
  495         eor     w28,w21,w22                     // a^b, b^c in next round
  496         eor     w16,w16,w25,ror#25      // Sigma1(e)
  497         eor     w10,w10,w21,ror#13
  498         add     w20,w20,w17                     // h+=Ch(e,f,g)
  499         and     w19,w19,w28                     // (b^c)&=(a^b)
  500         eor     w8,w8,w1,ror#19
  501         eor     w9,w9,w4,lsr#3  // sigma0(X[i+1])
  502         add     w20,w20,w16                     // h+=Sigma1(e)
  503         eor     w19,w19,w22                     // Maj(a,b,c)
  504         eor     w17,w10,w21,ror#22      // Sigma0(a)
  505         eor     w8,w8,w1,lsr#10 // sigma1(X[i+14])
  506         add     w3,w3,w12
  507         add     w24,w24,w20                     // d+=h
  508         add     w20,w20,w19                     // h+=Maj(a,b,c)
  509         ldr     w19,[x30],#4            // *K++, w28 in next round
  510         add     w3,w3,w9
  511         add     w20,w20,w17                     // h+=Sigma0(a)
  512         add     w3,w3,w8
  513 .Loop_16_xx:
  514         ldr     w8,[sp,#4]
  515         str     w11,[sp,#0]
  516         ror     w16,w24,#6
  517         add     w27,w27,w19                     // h+=K[i]
  518         ror     w10,w5,#7
  519         and     w17,w25,w24
  520         ror     w9,w2,#17
  521         bic     w19,w26,w24
  522         ror     w11,w20,#2
  523         add     w27,w27,w3                      // h+=X[i]
  524         eor     w16,w16,w24,ror#11
  525         eor     w10,w10,w5,ror#18
  526         orr     w17,w17,w19                     // Ch(e,f,g)
  527         eor     w19,w20,w21                     // a^b, b^c in next round
  528         eor     w16,w16,w24,ror#25      // Sigma1(e)
  529         eor     w11,w11,w20,ror#13
  530         add     w27,w27,w17                     // h+=Ch(e,f,g)
  531         and     w28,w28,w19                     // (b^c)&=(a^b)
  532         eor     w9,w9,w2,ror#19
  533         eor     w10,w10,w5,lsr#3        // sigma0(X[i+1])
  534         add     w27,w27,w16                     // h+=Sigma1(e)
  535         eor     w28,w28,w21                     // Maj(a,b,c)
  536         eor     w17,w11,w20,ror#22      // Sigma0(a)
  537         eor     w9,w9,w2,lsr#10 // sigma1(X[i+14])
  538         add     w4,w4,w13
  539         add     w23,w23,w27                     // d+=h
  540         add     w27,w27,w28                     // h+=Maj(a,b,c)
  541         ldr     w28,[x30],#4            // *K++, w19 in next round
  542         add     w4,w4,w10
  543         add     w27,w27,w17                     // h+=Sigma0(a)
  544         add     w4,w4,w9
  545         ldr     w9,[sp,#8]
  546         str     w12,[sp,#4]
  547         ror     w16,w23,#6
  548         add     w26,w26,w28                     // h+=K[i]
  549         ror     w11,w6,#7
  550         and     w17,w24,w23
  551         ror     w10,w3,#17
  552         bic     w28,w25,w23
  553         ror     w12,w27,#2
  554         add     w26,w26,w4                      // h+=X[i]
  555         eor     w16,w16,w23,ror#11
  556         eor     w11,w11,w6,ror#18
  557         orr     w17,w17,w28                     // Ch(e,f,g)
  558         eor     w28,w27,w20                     // a^b, b^c in next round
  559         eor     w16,w16,w23,ror#25      // Sigma1(e)
  560         eor     w12,w12,w27,ror#13
  561         add     w26,w26,w17                     // h+=Ch(e,f,g)
  562         and     w19,w19,w28                     // (b^c)&=(a^b)
  563         eor     w10,w10,w3,ror#19
  564         eor     w11,w11,w6,lsr#3        // sigma0(X[i+1])
  565         add     w26,w26,w16                     // h+=Sigma1(e)
  566         eor     w19,w19,w20                     // Maj(a,b,c)
  567         eor     w17,w12,w27,ror#22      // Sigma0(a)
  568         eor     w10,w10,w3,lsr#10       // sigma1(X[i+14])
  569         add     w5,w5,w14
  570         add     w22,w22,w26                     // d+=h
  571         add     w26,w26,w19                     // h+=Maj(a,b,c)
  572         ldr     w19,[x30],#4            // *K++, w28 in next round
  573         add     w5,w5,w11
  574         add     w26,w26,w17                     // h+=Sigma0(a)
  575         add     w5,w5,w10
  576         ldr     w10,[sp,#12]
  577         str     w13,[sp,#8]
  578         ror     w16,w22,#6
  579         add     w25,w25,w19                     // h+=K[i]
  580         ror     w12,w7,#7
  581         and     w17,w23,w22
  582         ror     w11,w4,#17
  583         bic     w19,w24,w22
  584         ror     w13,w26,#2
  585         add     w25,w25,w5                      // h+=X[i]
  586         eor     w16,w16,w22,ror#11
  587         eor     w12,w12,w7,ror#18
  588         orr     w17,w17,w19                     // Ch(e,f,g)
  589         eor     w19,w26,w27                     // a^b, b^c in next round
  590         eor     w16,w16,w22,ror#25      // Sigma1(e)
  591         eor     w13,w13,w26,ror#13
  592         add     w25,w25,w17                     // h+=Ch(e,f,g)
  593         and     w28,w28,w19                     // (b^c)&=(a^b)
  594         eor     w11,w11,w4,ror#19
  595         eor     w12,w12,w7,lsr#3        // sigma0(X[i+1])
  596         add     w25,w25,w16                     // h+=Sigma1(e)
  597         eor     w28,w28,w27                     // Maj(a,b,c)
  598         eor     w17,w13,w26,ror#22      // Sigma0(a)
  599         eor     w11,w11,w4,lsr#10       // sigma1(X[i+14])
  600         add     w6,w6,w15
  601         add     w21,w21,w25                     // d+=h
  602         add     w25,w25,w28                     // h+=Maj(a,b,c)
  603         ldr     w28,[x30],#4            // *K++, w19 in next round
  604         add     w6,w6,w12
  605         add     w25,w25,w17                     // h+=Sigma0(a)
  606         add     w6,w6,w11
  607         ldr     w11,[sp,#0]
  608         str     w14,[sp,#12]
  609         ror     w16,w21,#6
  610         add     w24,w24,w28                     // h+=K[i]
  611         ror     w13,w8,#7
  612         and     w17,w22,w21
  613         ror     w12,w5,#17
  614         bic     w28,w23,w21
  615         ror     w14,w25,#2
  616         add     w24,w24,w6                      // h+=X[i]
  617         eor     w16,w16,w21,ror#11
  618         eor     w13,w13,w8,ror#18
  619         orr     w17,w17,w28                     // Ch(e,f,g)
  620         eor     w28,w25,w26                     // a^b, b^c in next round
  621         eor     w16,w16,w21,ror#25      // Sigma1(e)
  622         eor     w14,w14,w25,ror#13
  623         add     w24,w24,w17                     // h+=Ch(e,f,g)
  624         and     w19,w19,w28                     // (b^c)&=(a^b)
  625         eor     w12,w12,w5,ror#19
  626         eor     w13,w13,w8,lsr#3        // sigma0(X[i+1])
  627         add     w24,w24,w16                     // h+=Sigma1(e)
  628         eor     w19,w19,w26                     // Maj(a,b,c)
  629         eor     w17,w14,w25,ror#22      // Sigma0(a)
  630         eor     w12,w12,w5,lsr#10       // sigma1(X[i+14])
  631         add     w7,w7,w0
  632         add     w20,w20,w24                     // d+=h
  633         add     w24,w24,w19                     // h+=Maj(a,b,c)
  634         ldr     w19,[x30],#4            // *K++, w28 in next round
  635         add     w7,w7,w13
  636         add     w24,w24,w17                     // h+=Sigma0(a)
  637         add     w7,w7,w12
  638         ldr     w12,[sp,#4]
  639         str     w15,[sp,#0]
  640         ror     w16,w20,#6
  641         add     w23,w23,w19                     // h+=K[i]
  642         ror     w14,w9,#7
  643         and     w17,w21,w20
  644         ror     w13,w6,#17
  645         bic     w19,w22,w20
  646         ror     w15,w24,#2
  647         add     w23,w23,w7                      // h+=X[i]
  648         eor     w16,w16,w20,ror#11
  649         eor     w14,w14,w9,ror#18
  650         orr     w17,w17,w19                     // Ch(e,f,g)
  651         eor     w19,w24,w25                     // a^b, b^c in next round
  652         eor     w16,w16,w20,ror#25      // Sigma1(e)
  653         eor     w15,w15,w24,ror#13
  654         add     w23,w23,w17                     // h+=Ch(e,f,g)
  655         and     w28,w28,w19                     // (b^c)&=(a^b)
  656         eor     w13,w13,w6,ror#19
  657         eor     w14,w14,w9,lsr#3        // sigma0(X[i+1])
  658         add     w23,w23,w16                     // h+=Sigma1(e)
  659         eor     w28,w28,w25                     // Maj(a,b,c)
  660         eor     w17,w15,w24,ror#22      // Sigma0(a)
  661         eor     w13,w13,w6,lsr#10       // sigma1(X[i+14])
  662         add     w8,w8,w1
  663         add     w27,w27,w23                     // d+=h
  664         add     w23,w23,w28                     // h+=Maj(a,b,c)
  665         ldr     w28,[x30],#4            // *K++, w19 in next round
  666         add     w8,w8,w14
  667         add     w23,w23,w17                     // h+=Sigma0(a)
  668         add     w8,w8,w13
  669         ldr     w13,[sp,#8]
  670         str     w0,[sp,#4]
  671         ror     w16,w27,#6
  672         add     w22,w22,w28                     // h+=K[i]
  673         ror     w15,w10,#7
  674         and     w17,w20,w27
  675         ror     w14,w7,#17
  676         bic     w28,w21,w27
  677         ror     w0,w23,#2
  678         add     w22,w22,w8                      // h+=X[i]
  679         eor     w16,w16,w27,ror#11
  680         eor     w15,w15,w10,ror#18
  681         orr     w17,w17,w28                     // Ch(e,f,g)
  682         eor     w28,w23,w24                     // a^b, b^c in next round
  683         eor     w16,w16,w27,ror#25      // Sigma1(e)
  684         eor     w0,w0,w23,ror#13
  685         add     w22,w22,w17                     // h+=Ch(e,f,g)
  686         and     w19,w19,w28                     // (b^c)&=(a^b)
  687         eor     w14,w14,w7,ror#19
  688         eor     w15,w15,w10,lsr#3       // sigma0(X[i+1])
  689         add     w22,w22,w16                     // h+=Sigma1(e)
  690         eor     w19,w19,w24                     // Maj(a,b,c)
  691         eor     w17,w0,w23,ror#22       // Sigma0(a)
  692         eor     w14,w14,w7,lsr#10       // sigma1(X[i+14])
  693         add     w9,w9,w2
  694         add     w26,w26,w22                     // d+=h
  695         add     w22,w22,w19                     // h+=Maj(a,b,c)
  696         ldr     w19,[x30],#4            // *K++, w28 in next round
  697         add     w9,w9,w15
  698         add     w22,w22,w17                     // h+=Sigma0(a)
  699         add     w9,w9,w14
  700         ldr     w14,[sp,#12]
  701         str     w1,[sp,#8]
  702         ror     w16,w26,#6
  703         add     w21,w21,w19                     // h+=K[i]
  704         ror     w0,w11,#7
  705         and     w17,w27,w26
  706         ror     w15,w8,#17
  707         bic     w19,w20,w26
  708         ror     w1,w22,#2
  709         add     w21,w21,w9                      // h+=X[i]
  710         eor     w16,w16,w26,ror#11
  711         eor     w0,w0,w11,ror#18
  712         orr     w17,w17,w19                     // Ch(e,f,g)
  713         eor     w19,w22,w23                     // a^b, b^c in next round
  714         eor     w16,w16,w26,ror#25      // Sigma1(e)
  715         eor     w1,w1,w22,ror#13
  716         add     w21,w21,w17                     // h+=Ch(e,f,g)
  717         and     w28,w28,w19                     // (b^c)&=(a^b)
  718         eor     w15,w15,w8,ror#19
  719         eor     w0,w0,w11,lsr#3 // sigma0(X[i+1])
  720         add     w21,w21,w16                     // h+=Sigma1(e)
  721         eor     w28,w28,w23                     // Maj(a,b,c)
  722         eor     w17,w1,w22,ror#22       // Sigma0(a)
  723         eor     w15,w15,w8,lsr#10       // sigma1(X[i+14])
  724         add     w10,w10,w3
  725         add     w25,w25,w21                     // d+=h
  726         add     w21,w21,w28                     // h+=Maj(a,b,c)
  727         ldr     w28,[x30],#4            // *K++, w19 in next round
  728         add     w10,w10,w0
  729         add     w21,w21,w17                     // h+=Sigma0(a)
  730         add     w10,w10,w15
  731         ldr     w15,[sp,#0]
  732         str     w2,[sp,#12]
  733         ror     w16,w25,#6
  734         add     w20,w20,w28                     // h+=K[i]
  735         ror     w1,w12,#7
  736         and     w17,w26,w25
  737         ror     w0,w9,#17
  738         bic     w28,w27,w25
  739         ror     w2,w21,#2
  740         add     w20,w20,w10                     // h+=X[i]
  741         eor     w16,w16,w25,ror#11
  742         eor     w1,w1,w12,ror#18
  743         orr     w17,w17,w28                     // Ch(e,f,g)
  744         eor     w28,w21,w22                     // a^b, b^c in next round
  745         eor     w16,w16,w25,ror#25      // Sigma1(e)
  746         eor     w2,w2,w21,ror#13
  747         add     w20,w20,w17                     // h+=Ch(e,f,g)
  748         and     w19,w19,w28                     // (b^c)&=(a^b)
  749         eor     w0,w0,w9,ror#19
  750         eor     w1,w1,w12,lsr#3 // sigma0(X[i+1])
  751         add     w20,w20,w16                     // h+=Sigma1(e)
  752         eor     w19,w19,w22                     // Maj(a,b,c)
  753         eor     w17,w2,w21,ror#22       // Sigma0(a)
  754         eor     w0,w0,w9,lsr#10 // sigma1(X[i+14])
  755         add     w11,w11,w4
  756         add     w24,w24,w20                     // d+=h
  757         add     w20,w20,w19                     // h+=Maj(a,b,c)
  758         ldr     w19,[x30],#4            // *K++, w28 in next round
  759         add     w11,w11,w1
  760         add     w20,w20,w17                     // h+=Sigma0(a)
  761         add     w11,w11,w0
  762         ldr     w0,[sp,#4]
  763         str     w3,[sp,#0]
  764         ror     w16,w24,#6
  765         add     w27,w27,w19                     // h+=K[i]
  766         ror     w2,w13,#7
  767         and     w17,w25,w24
  768         ror     w1,w10,#17
  769         bic     w19,w26,w24
  770         ror     w3,w20,#2
  771         add     w27,w27,w11                     // h+=X[i]
  772         eor     w16,w16,w24,ror#11
  773         eor     w2,w2,w13,ror#18
  774         orr     w17,w17,w19                     // Ch(e,f,g)
  775         eor     w19,w20,w21                     // a^b, b^c in next round
  776         eor     w16,w16,w24,ror#25      // Sigma1(e)
  777         eor     w3,w3,w20,ror#13
  778         add     w27,w27,w17                     // h+=Ch(e,f,g)
  779         and     w28,w28,w19                     // (b^c)&=(a^b)
  780         eor     w1,w1,w10,ror#19
  781         eor     w2,w2,w13,lsr#3 // sigma0(X[i+1])
  782         add     w27,w27,w16                     // h+=Sigma1(e)
  783         eor     w28,w28,w21                     // Maj(a,b,c)
  784         eor     w17,w3,w20,ror#22       // Sigma0(a)
  785         eor     w1,w1,w10,lsr#10        // sigma1(X[i+14])
  786         add     w12,w12,w5
  787         add     w23,w23,w27                     // d+=h
  788         add     w27,w27,w28                     // h+=Maj(a,b,c)
  789         ldr     w28,[x30],#4            // *K++, w19 in next round
  790         add     w12,w12,w2
  791         add     w27,w27,w17                     // h+=Sigma0(a)
  792         add     w12,w12,w1
  793         ldr     w1,[sp,#8]
  794         str     w4,[sp,#4]
  795         ror     w16,w23,#6
  796         add     w26,w26,w28                     // h+=K[i]
  797         ror     w3,w14,#7
  798         and     w17,w24,w23
  799         ror     w2,w11,#17
  800         bic     w28,w25,w23
  801         ror     w4,w27,#2
  802         add     w26,w26,w12                     // h+=X[i]
  803         eor     w16,w16,w23,ror#11
  804         eor     w3,w3,w14,ror#18
  805         orr     w17,w17,w28                     // Ch(e,f,g)
  806         eor     w28,w27,w20                     // a^b, b^c in next round
  807         eor     w16,w16,w23,ror#25      // Sigma1(e)
  808         eor     w4,w4,w27,ror#13
  809         add     w26,w26,w17                     // h+=Ch(e,f,g)
  810         and     w19,w19,w28                     // (b^c)&=(a^b)
  811         eor     w2,w2,w11,ror#19
  812         eor     w3,w3,w14,lsr#3 // sigma0(X[i+1])
  813         add     w26,w26,w16                     // h+=Sigma1(e)
  814         eor     w19,w19,w20                     // Maj(a,b,c)
  815         eor     w17,w4,w27,ror#22       // Sigma0(a)
  816         eor     w2,w2,w11,lsr#10        // sigma1(X[i+14])
  817         add     w13,w13,w6
  818         add     w22,w22,w26                     // d+=h
  819         add     w26,w26,w19                     // h+=Maj(a,b,c)
  820         ldr     w19,[x30],#4            // *K++, w28 in next round
  821         add     w13,w13,w3
  822         add     w26,w26,w17                     // h+=Sigma0(a)
  823         add     w13,w13,w2
  824         ldr     w2,[sp,#12]
  825         str     w5,[sp,#8]
  826         ror     w16,w22,#6
  827         add     w25,w25,w19                     // h+=K[i]
  828         ror     w4,w15,#7
  829         and     w17,w23,w22
  830         ror     w3,w12,#17
  831         bic     w19,w24,w22
  832         ror     w5,w26,#2
  833         add     w25,w25,w13                     // h+=X[i]
  834         eor     w16,w16,w22,ror#11
  835         eor     w4,w4,w15,ror#18
  836         orr     w17,w17,w19                     // Ch(e,f,g)
  837         eor     w19,w26,w27                     // a^b, b^c in next round
  838         eor     w16,w16,w22,ror#25      // Sigma1(e)
  839         eor     w5,w5,w26,ror#13
  840         add     w25,w25,w17                     // h+=Ch(e,f,g)
  841         and     w28,w28,w19                     // (b^c)&=(a^b)
  842         eor     w3,w3,w12,ror#19
  843         eor     w4,w4,w15,lsr#3 // sigma0(X[i+1])
  844         add     w25,w25,w16                     // h+=Sigma1(e)
  845         eor     w28,w28,w27                     // Maj(a,b,c)
  846         eor     w17,w5,w26,ror#22       // Sigma0(a)
  847         eor     w3,w3,w12,lsr#10        // sigma1(X[i+14])
  848         add     w14,w14,w7
  849         add     w21,w21,w25                     // d+=h
  850         add     w25,w25,w28                     // h+=Maj(a,b,c)
  851         ldr     w28,[x30],#4            // *K++, w19 in next round
  852         add     w14,w14,w4
  853         add     w25,w25,w17                     // h+=Sigma0(a)
  854         add     w14,w14,w3
  855         ldr     w3,[sp,#0]
  856         str     w6,[sp,#12]
  857         ror     w16,w21,#6
  858         add     w24,w24,w28                     // h+=K[i]
  859         ror     w5,w0,#7
  860         and     w17,w22,w21
  861         ror     w4,w13,#17
  862         bic     w28,w23,w21
  863         ror     w6,w25,#2
  864         add     w24,w24,w14                     // h+=X[i]
  865         eor     w16,w16,w21,ror#11
  866         eor     w5,w5,w0,ror#18
  867         orr     w17,w17,w28                     // Ch(e,f,g)
  868         eor     w28,w25,w26                     // a^b, b^c in next round
  869         eor     w16,w16,w21,ror#25      // Sigma1(e)
  870         eor     w6,w6,w25,ror#13
  871         add     w24,w24,w17                     // h+=Ch(e,f,g)
  872         and     w19,w19,w28                     // (b^c)&=(a^b)
  873         eor     w4,w4,w13,ror#19
  874         eor     w5,w5,w0,lsr#3  // sigma0(X[i+1])
  875         add     w24,w24,w16                     // h+=Sigma1(e)
  876         eor     w19,w19,w26                     // Maj(a,b,c)
  877         eor     w17,w6,w25,ror#22       // Sigma0(a)
  878         eor     w4,w4,w13,lsr#10        // sigma1(X[i+14])
  879         add     w15,w15,w8
  880         add     w20,w20,w24                     // d+=h
  881         add     w24,w24,w19                     // h+=Maj(a,b,c)
  882         ldr     w19,[x30],#4            // *K++, w28 in next round
  883         add     w15,w15,w5
  884         add     w24,w24,w17                     // h+=Sigma0(a)
  885         add     w15,w15,w4
  886         ldr     w4,[sp,#4]
  887         str     w7,[sp,#0]
  888         ror     w16,w20,#6
  889         add     w23,w23,w19                     // h+=K[i]
  890         ror     w6,w1,#7
  891         and     w17,w21,w20
  892         ror     w5,w14,#17
  893         bic     w19,w22,w20
  894         ror     w7,w24,#2
  895         add     w23,w23,w15                     // h+=X[i]
  896         eor     w16,w16,w20,ror#11
  897         eor     w6,w6,w1,ror#18
  898         orr     w17,w17,w19                     // Ch(e,f,g)
  899         eor     w19,w24,w25                     // a^b, b^c in next round
  900         eor     w16,w16,w20,ror#25      // Sigma1(e)
  901         eor     w7,w7,w24,ror#13
  902         add     w23,w23,w17                     // h+=Ch(e,f,g)
  903         and     w28,w28,w19                     // (b^c)&=(a^b)
  904         eor     w5,w5,w14,ror#19
  905         eor     w6,w6,w1,lsr#3  // sigma0(X[i+1])
  906         add     w23,w23,w16                     // h+=Sigma1(e)
  907         eor     w28,w28,w25                     // Maj(a,b,c)
  908         eor     w17,w7,w24,ror#22       // Sigma0(a)
  909         eor     w5,w5,w14,lsr#10        // sigma1(X[i+14])
  910         add     w0,w0,w9
  911         add     w27,w27,w23                     // d+=h
  912         add     w23,w23,w28                     // h+=Maj(a,b,c)
  913         ldr     w28,[x30],#4            // *K++, w19 in next round
  914         add     w0,w0,w6
  915         add     w23,w23,w17                     // h+=Sigma0(a)
  916         add     w0,w0,w5
  917         ldr     w5,[sp,#8]
  918         str     w8,[sp,#4]
  919         ror     w16,w27,#6
  920         add     w22,w22,w28                     // h+=K[i]
  921         ror     w7,w2,#7
  922         and     w17,w20,w27
  923         ror     w6,w15,#17
  924         bic     w28,w21,w27
  925         ror     w8,w23,#2
  926         add     w22,w22,w0                      // h+=X[i]
  927         eor     w16,w16,w27,ror#11
  928         eor     w7,w7,w2,ror#18
  929         orr     w17,w17,w28                     // Ch(e,f,g)
  930         eor     w28,w23,w24                     // a^b, b^c in next round
  931         eor     w16,w16,w27,ror#25      // Sigma1(e)
  932         eor     w8,w8,w23,ror#13
  933         add     w22,w22,w17                     // h+=Ch(e,f,g)
  934         and     w19,w19,w28                     // (b^c)&=(a^b)
  935         eor     w6,w6,w15,ror#19
  936         eor     w7,w7,w2,lsr#3  // sigma0(X[i+1])
  937         add     w22,w22,w16                     // h+=Sigma1(e)
  938         eor     w19,w19,w24                     // Maj(a,b,c)
  939         eor     w17,w8,w23,ror#22       // Sigma0(a)
  940         eor     w6,w6,w15,lsr#10        // sigma1(X[i+14])
  941         add     w1,w1,w10
  942         add     w26,w26,w22                     // d+=h
  943         add     w22,w22,w19                     // h+=Maj(a,b,c)
  944         ldr     w19,[x30],#4            // *K++, w28 in next round
  945         add     w1,w1,w7
  946         add     w22,w22,w17                     // h+=Sigma0(a)
  947         add     w1,w1,w6
  948         ldr     w6,[sp,#12]
  949         str     w9,[sp,#8]
  950         ror     w16,w26,#6
  951         add     w21,w21,w19                     // h+=K[i]
  952         ror     w8,w3,#7
  953         and     w17,w27,w26
  954         ror     w7,w0,#17
  955         bic     w19,w20,w26
  956         ror     w9,w22,#2
  957         add     w21,w21,w1                      // h+=X[i]
  958         eor     w16,w16,w26,ror#11
  959         eor     w8,w8,w3,ror#18
  960         orr     w17,w17,w19                     // Ch(e,f,g)
  961         eor     w19,w22,w23                     // a^b, b^c in next round
  962         eor     w16,w16,w26,ror#25      // Sigma1(e)
  963         eor     w9,w9,w22,ror#13
  964         add     w21,w21,w17                     // h+=Ch(e,f,g)
  965         and     w28,w28,w19                     // (b^c)&=(a^b)
  966         eor     w7,w7,w0,ror#19
  967         eor     w8,w8,w3,lsr#3  // sigma0(X[i+1])
  968         add     w21,w21,w16                     // h+=Sigma1(e)
  969         eor     w28,w28,w23                     // Maj(a,b,c)
  970         eor     w17,w9,w22,ror#22       // Sigma0(a)
  971         eor     w7,w7,w0,lsr#10 // sigma1(X[i+14])
  972         add     w2,w2,w11
  973         add     w25,w25,w21                     // d+=h
  974         add     w21,w21,w28                     // h+=Maj(a,b,c)
  975         ldr     w28,[x30],#4            // *K++, w19 in next round
  976         add     w2,w2,w8
  977         add     w21,w21,w17                     // h+=Sigma0(a)
  978         add     w2,w2,w7
  979         ldr     w7,[sp,#0]
  980         str     w10,[sp,#12]
  981         ror     w16,w25,#6
  982         add     w20,w20,w28                     // h+=K[i]
  983         ror     w9,w4,#7
  984         and     w17,w26,w25
  985         ror     w8,w1,#17
  986         bic     w28,w27,w25
  987         ror     w10,w21,#2
  988         add     w20,w20,w2                      // h+=X[i]
  989         eor     w16,w16,w25,ror#11
  990         eor     w9,w9,w4,ror#18
  991         orr     w17,w17,w28                     // Ch(e,f,g)
  992         eor     w28,w21,w22                     // a^b, b^c in next round
  993         eor     w16,w16,w25,ror#25      // Sigma1(e)
  994         eor     w10,w10,w21,ror#13
  995         add     w20,w20,w17                     // h+=Ch(e,f,g)
  996         and     w19,w19,w28                     // (b^c)&=(a^b)
  997         eor     w8,w8,w1,ror#19
  998         eor     w9,w9,w4,lsr#3  // sigma0(X[i+1])
  999         add     w20,w20,w16                     // h+=Sigma1(e)
 1000         eor     w19,w19,w22                     // Maj(a,b,c)
 1001         eor     w17,w10,w21,ror#22      // Sigma0(a)
 1002         eor     w8,w8,w1,lsr#10 // sigma1(X[i+14])
 1003         add     w3,w3,w12
 1004         add     w24,w24,w20                     // d+=h
 1005         add     w20,w20,w19                     // h+=Maj(a,b,c)
 1006         ldr     w19,[x30],#4            // *K++, w28 in next round
 1007         add     w3,w3,w9
 1008         add     w20,w20,w17                     // h+=Sigma0(a)
 1009         add     w3,w3,w8
 1010         cbnz    w19,.Loop_16_xx
 1011 
 1012         ldp     x0,x2,[x29,#96]
 1013         ldr     x1,[x29,#112]
 1014         sub     x30,x30,#260            // rewind
 1015 
 1016         ldp     w3,w4,[x0]
 1017         ldp     w5,w6,[x0,#2*4]
 1018         add     x1,x1,#14*4                     // advance input pointer
 1019         ldp     w7,w8,[x0,#4*4]
 1020         add     w20,w20,w3
 1021         ldp     w9,w10,[x0,#6*4]
 1022         add     w21,w21,w4
 1023         add     w22,w22,w5
 1024         add     w23,w23,w6
 1025         stp     w20,w21,[x0]
 1026         add     w24,w24,w7
 1027         add     w25,w25,w8
 1028         stp     w22,w23,[x0,#2*4]
 1029         add     w26,w26,w9
 1030         add     w27,w27,w10
 1031         cmp     x1,x2
 1032         stp     w24,w25,[x0,#4*4]
 1033         stp     w26,w27,[x0,#6*4]
 1034         b.ne    .Loop
 1035 
 1036         ldp     x19,x20,[x29,#16]
 1037         add     sp,sp,#4*4
 1038         ldp     x21,x22,[x29,#32]
 1039         ldp     x23,x24,[x29,#48]
 1040         ldp     x25,x26,[x29,#64]
 1041         ldp     x27,x28,[x29,#80]
 1042         ldp     x29,x30,[sp],#128
 1043 .inst   0xd50323bf                              // autiasp
 1044         ret
 1045 .size   sha256_block_data_order,.-sha256_block_data_order
 1046 
 1047 .align  6
 1048 .type   .LK256,%object
 1049 .LK256:
 1050 .long   0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
 1051 .long   0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
 1052 .long   0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
 1053 .long   0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
 1054 .long   0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
 1055 .long   0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
 1056 .long   0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
 1057 .long   0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
 1058 .long   0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
 1059 .long   0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
 1060 .long   0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
 1061 .long   0xd192e819,0xd6990624,0xf40e3585,0x106aa070
 1062 .long   0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
 1063 .long   0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
 1064 .long   0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
 1065 .long   0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
 1066 .long   0       //terminator
 1067 .size   .LK256,.-.LK256
 1068 #ifndef __KERNEL__
 1069 .align  3
 1070 .LOPENSSL_armcap_P:
 1071 # ifdef __ILP32__
 1072 .long   OPENSSL_armcap_P-.
 1073 # else
 1074 .quad   OPENSSL_armcap_P-.
 1075 # endif
 1076 #endif
 1077 .byte   83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
 1078 .align  2
 1079 .align  2
 1080 #ifndef __KERNEL__
 1081 .type   sha256_block_armv8,%function
 1082 .align  6
 1083 sha256_block_armv8:
 1084 .Lv8_entry:
 1085         stp     x29,x30,[sp,#-16]!
 1086         add     x29,sp,#0
 1087 
 1088         ld1     {v0.4s,v1.4s},[x0]
 1089         adr     x3,.LK256
 1090 
 1091 .Loop_hw:
 1092         ld1     {v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64
 1093         sub     x2,x2,#1
 1094         ld1     {v16.4s},[x3],#16
 1095         rev32   v4.16b,v4.16b
 1096         rev32   v5.16b,v5.16b
 1097         rev32   v6.16b,v6.16b
 1098         rev32   v7.16b,v7.16b
 1099         orr     v18.16b,v0.16b,v0.16b           // offload
 1100         orr     v19.16b,v1.16b,v1.16b
 1101         ld1     {v17.4s},[x3],#16
 1102         add     v16.4s,v16.4s,v4.4s
 1103 .inst   0x5e2828a4      //sha256su0 v4.16b,v5.16b
 1104         orr     v2.16b,v0.16b,v0.16b
 1105 .inst   0x5e104020      //sha256h v0.16b,v1.16b,v16.4s
 1106 .inst   0x5e105041      //sha256h2 v1.16b,v2.16b,v16.4s
 1107 .inst   0x5e0760c4      //sha256su1 v4.16b,v6.16b,v7.16b
 1108         ld1     {v16.4s},[x3],#16
 1109         add     v17.4s,v17.4s,v5.4s
 1110 .inst   0x5e2828c5      //sha256su0 v5.16b,v6.16b
 1111         orr     v2.16b,v0.16b,v0.16b
 1112 .inst   0x5e114020      //sha256h v0.16b,v1.16b,v17.4s
 1113 .inst   0x5e115041      //sha256h2 v1.16b,v2.16b,v17.4s
 1114 .inst   0x5e0460e5      //sha256su1 v5.16b,v7.16b,v4.16b
 1115         ld1     {v17.4s},[x3],#16
 1116         add     v16.4s,v16.4s,v6.4s
 1117 .inst   0x5e2828e6      //sha256su0 v6.16b,v7.16b
 1118         orr     v2.16b,v0.16b,v0.16b
 1119 .inst   0x5e104020      //sha256h v0.16b,v1.16b,v16.4s
 1120 .inst   0x5e105041      //sha256h2 v1.16b,v2.16b,v16.4s
 1121 .inst   0x5e056086      //sha256su1 v6.16b,v4.16b,v5.16b
 1122         ld1     {v16.4s},[x3],#16
 1123         add     v17.4s,v17.4s,v7.4s
 1124 .inst   0x5e282887      //sha256su0 v7.16b,v4.16b
 1125         orr     v2.16b,v0.16b,v0.16b
 1126 .inst   0x5e114020      //sha256h v0.16b,v1.16b,v17.4s
 1127 .inst   0x5e115041      //sha256h2 v1.16b,v2.16b,v17.4s
 1128 .inst   0x5e0660a7      //sha256su1 v7.16b,v5.16b,v6.16b
 1129         ld1     {v17.4s},[x3],#16
 1130         add     v16.4s,v16.4s,v4.4s
 1131 .inst   0x5e2828a4      //sha256su0 v4.16b,v5.16b
 1132         orr     v2.16b,v0.16b,v0.16b
 1133 .inst   0x5e104020      //sha256h v0.16b,v1.16b,v16.4s
 1134 .inst   0x5e105041      //sha256h2 v1.16b,v2.16b,v16.4s
 1135 .inst   0x5e0760c4      //sha256su1 v4.16b,v6.16b,v7.16b
 1136         ld1     {v16.4s},[x3],#16
 1137         add     v17.4s,v17.4s,v5.4s
 1138 .inst   0x5e2828c5      //sha256su0 v5.16b,v6.16b
 1139         orr     v2.16b,v0.16b,v0.16b
 1140 .inst   0x5e114020      //sha256h v0.16b,v1.16b,v17.4s
 1141 .inst   0x5e115041      //sha256h2 v1.16b,v2.16b,v17.4s
 1142 .inst   0x5e0460e5      //sha256su1 v5.16b,v7.16b,v4.16b
 1143         ld1     {v17.4s},[x3],#16
 1144         add     v16.4s,v16.4s,v6.4s
 1145 .inst   0x5e2828e6      //sha256su0 v6.16b,v7.16b
 1146         orr     v2.16b,v0.16b,v0.16b
 1147 .inst   0x5e104020      //sha256h v0.16b,v1.16b,v16.4s
 1148 .inst   0x5e105041      //sha256h2 v1.16b,v2.16b,v16.4s
 1149 .inst   0x5e056086      //sha256su1 v6.16b,v4.16b,v5.16b
 1150         ld1     {v16.4s},[x3],#16
 1151         add     v17.4s,v17.4s,v7.4s
 1152 .inst   0x5e282887      //sha256su0 v7.16b,v4.16b
 1153         orr     v2.16b,v0.16b,v0.16b
 1154 .inst   0x5e114020      //sha256h v0.16b,v1.16b,v17.4s
 1155 .inst   0x5e115041      //sha256h2 v1.16b,v2.16b,v17.4s
 1156 .inst   0x5e0660a7      //sha256su1 v7.16b,v5.16b,v6.16b
 1157         ld1     {v17.4s},[x3],#16
 1158         add     v16.4s,v16.4s,v4.4s
 1159 .inst   0x5e2828a4      //sha256su0 v4.16b,v5.16b
 1160         orr     v2.16b,v0.16b,v0.16b
 1161 .inst   0x5e104020      //sha256h v0.16b,v1.16b,v16.4s
 1162 .inst   0x5e105041      //sha256h2 v1.16b,v2.16b,v16.4s
 1163 .inst   0x5e0760c4      //sha256su1 v4.16b,v6.16b,v7.16b
 1164         ld1     {v16.4s},[x3],#16
 1165         add     v17.4s,v17.4s,v5.4s
 1166 .inst   0x5e2828c5      //sha256su0 v5.16b,v6.16b
 1167         orr     v2.16b,v0.16b,v0.16b
 1168 .inst   0x5e114020      //sha256h v0.16b,v1.16b,v17.4s
 1169 .inst   0x5e115041      //sha256h2 v1.16b,v2.16b,v17.4s
 1170 .inst   0x5e0460e5      //sha256su1 v5.16b,v7.16b,v4.16b
 1171         ld1     {v17.4s},[x3],#16
 1172         add     v16.4s,v16.4s,v6.4s
 1173 .inst   0x5e2828e6      //sha256su0 v6.16b,v7.16b
 1174         orr     v2.16b,v0.16b,v0.16b
 1175 .inst   0x5e104020      //sha256h v0.16b,v1.16b,v16.4s
 1176 .inst   0x5e105041      //sha256h2 v1.16b,v2.16b,v16.4s
 1177 .inst   0x5e056086      //sha256su1 v6.16b,v4.16b,v5.16b
 1178         ld1     {v16.4s},[x3],#16
 1179         add     v17.4s,v17.4s,v7.4s
 1180 .inst   0x5e282887      //sha256su0 v7.16b,v4.16b
 1181         orr     v2.16b,v0.16b,v0.16b
 1182 .inst   0x5e114020      //sha256h v0.16b,v1.16b,v17.4s
 1183 .inst   0x5e115041      //sha256h2 v1.16b,v2.16b,v17.4s
 1184 .inst   0x5e0660a7      //sha256su1 v7.16b,v5.16b,v6.16b
 1185         ld1     {v17.4s},[x3],#16
 1186         add     v16.4s,v16.4s,v4.4s
 1187         orr     v2.16b,v0.16b,v0.16b
 1188 .inst   0x5e104020      //sha256h v0.16b,v1.16b,v16.4s
 1189 .inst   0x5e105041      //sha256h2 v1.16b,v2.16b,v16.4s
 1190 
 1191         ld1     {v16.4s},[x3],#16
 1192         add     v17.4s,v17.4s,v5.4s
 1193         orr     v2.16b,v0.16b,v0.16b
 1194 .inst   0x5e114020      //sha256h v0.16b,v1.16b,v17.4s
 1195 .inst   0x5e115041      //sha256h2 v1.16b,v2.16b,v17.4s
 1196 
 1197         ld1     {v17.4s},[x3]
 1198         add     v16.4s,v16.4s,v6.4s
 1199         sub     x3,x3,#64*4-16  // rewind
 1200         orr     v2.16b,v0.16b,v0.16b
 1201 .inst   0x5e104020      //sha256h v0.16b,v1.16b,v16.4s
 1202 .inst   0x5e105041      //sha256h2 v1.16b,v2.16b,v16.4s
 1203 
 1204         add     v17.4s,v17.4s,v7.4s
 1205         orr     v2.16b,v0.16b,v0.16b
 1206 .inst   0x5e114020      //sha256h v0.16b,v1.16b,v17.4s
 1207 .inst   0x5e115041      //sha256h2 v1.16b,v2.16b,v17.4s
 1208 
 1209         add     v0.4s,v0.4s,v18.4s
 1210         add     v1.4s,v1.4s,v19.4s
 1211 
 1212         cbnz    x2,.Loop_hw
 1213 
 1214         st1     {v0.4s,v1.4s},[x0]
 1215 
 1216         ldr     x29,[sp],#16
 1217         ret
 1218 .size   sha256_block_armv8,.-sha256_block_armv8
 1219 #endif
 1220 #ifdef  __KERNEL__
 1221 .globl  sha256_block_neon
 1222 #endif
 1223 .type   sha256_block_neon,%function
 1224 .align  4
 1225 sha256_block_neon:
 1226 .Lneon_entry:
 1227         stp     x29, x30, [sp, #-16]!
 1228         mov     x29, sp
 1229         sub     sp,sp,#16*4
 1230 
 1231         adr     x16,.LK256
 1232         add     x2,x1,x2,lsl#6  // len to point at the end of inp
 1233 
 1234         ld1     {v0.16b},[x1], #16
 1235         ld1     {v1.16b},[x1], #16
 1236         ld1     {v2.16b},[x1], #16
 1237         ld1     {v3.16b},[x1], #16
 1238         ld1     {v4.4s},[x16], #16
 1239         ld1     {v5.4s},[x16], #16
 1240         ld1     {v6.4s},[x16], #16
 1241         ld1     {v7.4s},[x16], #16
 1242         rev32   v0.16b,v0.16b           // yes, even on
 1243         rev32   v1.16b,v1.16b           // big-endian
 1244         rev32   v2.16b,v2.16b
 1245         rev32   v3.16b,v3.16b
 1246         mov     x17,sp
 1247         add     v4.4s,v4.4s,v0.4s
 1248         add     v5.4s,v5.4s,v1.4s
 1249         add     v6.4s,v6.4s,v2.4s
 1250         st1     {v4.4s,v5.4s},[x17], #32
 1251         add     v7.4s,v7.4s,v3.4s
 1252         st1     {v6.4s,v7.4s},[x17]
 1253         sub     x17,x17,#32
 1254 
 1255         ldp     w3,w4,[x0]
 1256         ldp     w5,w6,[x0,#8]
 1257         ldp     w7,w8,[x0,#16]
 1258         ldp     w9,w10,[x0,#24]
 1259         ldr     w12,[sp,#0]
 1260         mov     w13,wzr
 1261         eor     w14,w4,w5
 1262         mov     w15,wzr
 1263         b       .L_00_48
 1264 
 1265 .align  4
 1266 .L_00_48:
 1267         ext     v4.16b,v0.16b,v1.16b,#4
 1268         add     w10,w10,w12
 1269         add     w3,w3,w15
 1270         and     w12,w8,w7
 1271         bic     w15,w9,w7
 1272         ext     v7.16b,v2.16b,v3.16b,#4
 1273         eor     w11,w7,w7,ror#5
 1274         add     w3,w3,w13
 1275         mov     d19,v3.d[1]
 1276         orr     w12,w12,w15
 1277         eor     w11,w11,w7,ror#19
 1278         ushr    v6.4s,v4.4s,#7
 1279         eor     w15,w3,w3,ror#11
 1280         ushr    v5.4s,v4.4s,#3
 1281         add     w10,w10,w12
 1282         add     v0.4s,v0.4s,v7.4s
 1283         ror     w11,w11,#6
 1284         sli     v6.4s,v4.4s,#25
 1285         eor     w13,w3,w4
 1286         eor     w15,w15,w3,ror#20
 1287         ushr    v7.4s,v4.4s,#18
 1288         add     w10,w10,w11
 1289         ldr     w12,[sp,#4]
 1290         and     w14,w14,w13
 1291         eor     v5.16b,v5.16b,v6.16b
 1292         ror     w15,w15,#2
 1293         add     w6,w6,w10
 1294         sli     v7.4s,v4.4s,#14
 1295         eor     w14,w14,w4
 1296         ushr    v16.4s,v19.4s,#17
 1297         add     w9,w9,w12
 1298         add     w10,w10,w15
 1299         and     w12,w7,w6
 1300         eor     v5.16b,v5.16b,v7.16b
 1301         bic     w15,w8,w6
 1302         eor     w11,w6,w6,ror#5
 1303         sli     v16.4s,v19.4s,#15
 1304         add     w10,w10,w14
 1305         orr     w12,w12,w15
 1306         ushr    v17.4s,v19.4s,#10
 1307         eor     w11,w11,w6,ror#19
 1308         eor     w15,w10,w10,ror#11
 1309         ushr    v7.4s,v19.4s,#19
 1310         add     w9,w9,w12
 1311         ror     w11,w11,#6
 1312         add     v0.4s,v0.4s,v5.4s
 1313         eor     w14,w10,w3
 1314         eor     w15,w15,w10,ror#20
 1315         sli     v7.4s,v19.4s,#13
 1316         add     w9,w9,w11
 1317         ldr     w12,[sp,#8]
 1318         and     w13,w13,w14
 1319         eor     v17.16b,v17.16b,v16.16b
 1320         ror     w15,w15,#2
 1321         add     w5,w5,w9
 1322         eor     w13,w13,w3
 1323         eor     v17.16b,v17.16b,v7.16b
 1324         add     w8,w8,w12
 1325         add     w9,w9,w15
 1326         and     w12,w6,w5
 1327         add     v0.4s,v0.4s,v17.4s
 1328         bic     w15,w7,w5
 1329         eor     w11,w5,w5,ror#5
 1330         add     w9,w9,w13
 1331         ushr    v18.4s,v0.4s,#17
 1332         orr     w12,w12,w15
 1333         ushr    v19.4s,v0.4s,#10
 1334         eor     w11,w11,w5,ror#19
 1335         eor     w15,w9,w9,ror#11
 1336         sli     v18.4s,v0.4s,#15
 1337         add     w8,w8,w12
 1338         ushr    v17.4s,v0.4s,#19
 1339         ror     w11,w11,#6
 1340         eor     w13,w9,w10
 1341         eor     v19.16b,v19.16b,v18.16b
 1342         eor     w15,w15,w9,ror#20
 1343         add     w8,w8,w11
 1344         sli     v17.4s,v0.4s,#13
 1345         ldr     w12,[sp,#12]
 1346         and     w14,w14,w13
 1347         ror     w15,w15,#2
 1348         ld1     {v4.4s},[x16], #16
 1349         add     w4,w4,w8
 1350         eor     v19.16b,v19.16b,v17.16b
 1351         eor     w14,w14,w10
 1352         eor     v17.16b,v17.16b,v17.16b
 1353         add     w7,w7,w12
 1354         add     w8,w8,w15
 1355         and     w12,w5,w4
 1356         mov     v17.d[1],v19.d[0]
 1357         bic     w15,w6,w4
 1358         eor     w11,w4,w4,ror#5
 1359         add     w8,w8,w14
 1360         add     v0.4s,v0.4s,v17.4s
 1361         orr     w12,w12,w15
 1362         eor     w11,w11,w4,ror#19
 1363         eor     w15,w8,w8,ror#11
 1364         add     v4.4s,v4.4s,v0.4s
 1365         add     w7,w7,w12
 1366         ror     w11,w11,#6
 1367         eor     w14,w8,w9
 1368         eor     w15,w15,w8,ror#20
 1369         add     w7,w7,w11
 1370         ldr     w12,[sp,#16]
 1371         and     w13,w13,w14
 1372         ror     w15,w15,#2
 1373         add     w3,w3,w7
 1374         eor     w13,w13,w9
 1375         st1     {v4.4s},[x17], #16
 1376         ext     v4.16b,v1.16b,v2.16b,#4
 1377         add     w6,w6,w12
 1378         add     w7,w7,w15
 1379         and     w12,w4,w3
 1380         bic     w15,w5,w3
 1381         ext     v7.16b,v3.16b,v0.16b,#4
 1382         eor     w11,w3,w3,ror#5
 1383         add     w7,w7,w13
 1384         mov     d19,v0.d[1]
 1385         orr     w12,w12,w15
 1386         eor     w11,w11,w3,ror#19
 1387         ushr    v6.4s,v4.4s,#7
 1388         eor     w15,w7,w7,ror#11
 1389         ushr    v5.4s,v4.4s,#3
 1390         add     w6,w6,w12
 1391         add     v1.4s,v1.4s,v7.4s
 1392         ror     w11,w11,#6
 1393         sli     v6.4s,v4.4s,#25
 1394         eor     w13,w7,w8
 1395         eor     w15,w15,w7,ror#20
 1396         ushr    v7.4s,v4.4s,#18
 1397         add     w6,w6,w11
 1398         ldr     w12,[sp,#20]
 1399         and     w14,w14,w13
 1400         eor     v5.16b,v5.16b,v6.16b
 1401         ror     w15,w15,#2
 1402         add     w10,w10,w6
 1403         sli     v7.4s,v4.4s,#14
 1404         eor     w14,w14,w8
 1405         ushr    v16.4s,v19.4s,#17
 1406         add     w5,w5,w12
 1407         add     w6,w6,w15
 1408         and     w12,w3,w10
 1409         eor     v5.16b,v5.16b,v7.16b
 1410         bic     w15,w4,w10
 1411         eor     w11,w10,w10,ror#5
 1412         sli     v16.4s,v19.4s,#15
 1413         add     w6,w6,w14
 1414         orr     w12,w12,w15
 1415         ushr    v17.4s,v19.4s,#10
 1416         eor     w11,w11,w10,ror#19
 1417         eor     w15,w6,w6,ror#11
 1418         ushr    v7.4s,v19.4s,#19
 1419         add     w5,w5,w12
 1420         ror     w11,w11,#6
 1421         add     v1.4s,v1.4s,v5.4s
 1422         eor     w14,w6,w7
 1423         eor     w15,w15,w6,ror#20
 1424         sli     v7.4s,v19.4s,#13
 1425         add     w5,w5,w11
 1426         ldr     w12,[sp,#24]
 1427         and     w13,w13,w14
 1428         eor     v17.16b,v17.16b,v16.16b
 1429         ror     w15,w15,#2
 1430         add     w9,w9,w5
 1431         eor     w13,w13,w7
 1432         eor     v17.16b,v17.16b,v7.16b
 1433         add     w4,w4,w12
 1434         add     w5,w5,w15
 1435         and     w12,w10,w9
 1436         add     v1.4s,v1.4s,v17.4s
 1437         bic     w15,w3,w9
 1438         eor     w11,w9,w9,ror#5
 1439         add     w5,w5,w13
 1440         ushr    v18.4s,v1.4s,#17
 1441         orr     w12,w12,w15
 1442         ushr    v19.4s,v1.4s,#10
 1443         eor     w11,w11,w9,ror#19
 1444         eor     w15,w5,w5,ror#11
 1445         sli     v18.4s,v1.4s,#15
 1446         add     w4,w4,w12
 1447         ushr    v17.4s,v1.4s,#19
 1448         ror     w11,w11,#6
 1449         eor     w13,w5,w6
 1450         eor     v19.16b,v19.16b,v18.16b
 1451         eor     w15,w15,w5,ror#20
 1452         add     w4,w4,w11
 1453         sli     v17.4s,v1.4s,#13
 1454         ldr     w12,[sp,#28]
 1455         and     w14,w14,w13
 1456         ror     w15,w15,#2
 1457         ld1     {v4.4s},[x16], #16
 1458         add     w8,w8,w4
 1459         eor     v19.16b,v19.16b,v17.16b
 1460         eor     w14,w14,w6
 1461         eor     v17.16b,v17.16b,v17.16b
 1462         add     w3,w3,w12
 1463         add     w4,w4,w15
 1464         and     w12,w9,w8
 1465         mov     v17.d[1],v19.d[0]
 1466         bic     w15,w10,w8
 1467         eor     w11,w8,w8,ror#5
 1468         add     w4,w4,w14
 1469         add     v1.4s,v1.4s,v17.4s
 1470         orr     w12,w12,w15
 1471         eor     w11,w11,w8,ror#19
 1472         eor     w15,w4,w4,ror#11
 1473         add     v4.4s,v4.4s,v1.4s
 1474         add     w3,w3,w12
 1475         ror     w11,w11,#6
 1476         eor     w14,w4,w5
 1477         eor     w15,w15,w4,ror#20
 1478         add     w3,w3,w11
 1479         ldr     w12,[sp,#32]
 1480         and     w13,w13,w14
 1481         ror     w15,w15,#2
 1482         add     w7,w7,w3
 1483         eor     w13,w13,w5
 1484         st1     {v4.4s},[x17], #16
 1485         ext     v4.16b,v2.16b,v3.16b,#4
 1486         add     w10,w10,w12
 1487         add     w3,w3,w15
 1488         and     w12,w8,w7
 1489         bic     w15,w9,w7
 1490         ext     v7.16b,v0.16b,v1.16b,#4
 1491         eor     w11,w7,w7,ror#5
 1492         add     w3,w3,w13
 1493         mov     d19,v1.d[1]
 1494         orr     w12,w12,w15
 1495         eor     w11,w11,w7,ror#19
 1496         ushr    v6.4s,v4.4s,#7
 1497         eor     w15,w3,w3,ror#11
 1498         ushr    v5.4s,v4.4s,#3
 1499         add     w10,w10,w12
 1500         add     v2.4s,v2.4s,v7.4s
 1501         ror     w11,w11,#6
 1502         sli     v6.4s,v4.4s,#25
 1503         eor     w13,w3,w4
 1504         eor     w15,w15,w3,ror#20
 1505         ushr    v7.4s,v4.4s,#18
 1506         add     w10,w10,w11
 1507         ldr     w12,[sp,#36]
 1508         and     w14,w14,w13
 1509         eor     v5.16b,v5.16b,v6.16b
 1510         ror     w15,w15,#2
 1511         add     w6,w6,w10
 1512         sli     v7.4s,v4.4s,#14
 1513         eor     w14,w14,w4
 1514         ushr    v16.4s,v19.4s,#17
 1515         add     w9,w9,w12
 1516         add     w10,w10,w15
 1517         and     w12,w7,w6
 1518         eor     v5.16b,v5.16b,v7.16b
 1519         bic     w15,w8,w6
 1520         eor     w11,w6,w6,ror#5
 1521         sli     v16.4s,v19.4s,#15
 1522         add     w10,w10,w14
 1523         orr     w12,w12,w15
 1524         ushr    v17.4s,v19.4s,#10
 1525         eor     w11,w11,w6,ror#19
 1526         eor     w15,w10,w10,ror#11
 1527         ushr    v7.4s,v19.4s,#19
 1528         add     w9,w9,w12
 1529         ror     w11,w11,#6
 1530         add     v2.4s,v2.4s,v5.4s
 1531         eor     w14,w10,w3
 1532         eor     w15,w15,w10,ror#20
 1533         sli     v7.4s,v19.4s,#13
 1534         add     w9,w9,w11
 1535         ldr     w12,[sp,#40]
 1536         and     w13,w13,w14
 1537         eor     v17.16b,v17.16b,v16.16b
 1538         ror     w15,w15,#2
 1539         add     w5,w5,w9
 1540         eor     w13,w13,w3
 1541         eor     v17.16b,v17.16b,v7.16b
 1542         add     w8,w8,w12
 1543         add     w9,w9,w15
 1544         and     w12,w6,w5
 1545         add     v2.4s,v2.4s,v17.4s
 1546         bic     w15,w7,w5
 1547         eor     w11,w5,w5,ror#5
 1548         add     w9,w9,w13
 1549         ushr    v18.4s,v2.4s,#17
 1550         orr     w12,w12,w15
 1551         ushr    v19.4s,v2.4s,#10
 1552         eor     w11,w11,w5,ror#19
 1553         eor     w15,w9,w9,ror#11
 1554         sli     v18.4s,v2.4s,#15
 1555         add     w8,w8,w12
 1556         ushr    v17.4s,v2.4s,#19
 1557         ror     w11,w11,#6
 1558         eor     w13,w9,w10
 1559         eor     v19.16b,v19.16b,v18.16b
 1560         eor     w15,w15,w9,ror#20
 1561         add     w8,w8,w11
 1562         sli     v17.4s,v2.4s,#13
 1563         ldr     w12,[sp,#44]
 1564         and     w14,w14,w13
 1565         ror     w15,w15,#2
 1566         ld1     {v4.4s},[x16], #16
 1567         add     w4,w4,w8
 1568         eor     v19.16b,v19.16b,v17.16b
 1569         eor     w14,w14,w10
 1570         eor     v17.16b,v17.16b,v17.16b
 1571         add     w7,w7,w12
 1572         add     w8,w8,w15
 1573         and     w12,w5,w4
 1574         mov     v17.d[1],v19.d[0]
 1575         bic     w15,w6,w4
 1576         eor     w11,w4,w4,ror#5
 1577         add     w8,w8,w14
 1578         add     v2.4s,v2.4s,v17.4s
 1579         orr     w12,w12,w15
 1580         eor     w11,w11,w4,ror#19
 1581         eor     w15,w8,w8,ror#11
 1582         add     v4.4s,v4.4s,v2.4s
 1583         add     w7,w7,w12
 1584         ror     w11,w11,#6
 1585         eor     w14,w8,w9
 1586         eor     w15,w15,w8,ror#20
 1587         add     w7,w7,w11
 1588         ldr     w12,[sp,#48]
 1589         and     w13,w13,w14
 1590         ror     w15,w15,#2
 1591         add     w3,w3,w7
 1592         eor     w13,w13,w9
 1593         st1     {v4.4s},[x17], #16
 1594         ext     v4.16b,v3.16b,v0.16b,#4
 1595         add     w6,w6,w12
 1596         add     w7,w7,w15
 1597         and     w12,w4,w3
 1598         bic     w15,w5,w3
 1599         ext     v7.16b,v1.16b,v2.16b,#4
 1600         eor     w11,w3,w3,ror#5
 1601         add     w7,w7,w13
 1602         mov     d19,v2.d[1]
 1603         orr     w12,w12,w15
 1604         eor     w11,w11,w3,ror#19
 1605         ushr    v6.4s,v4.4s,#7
 1606         eor     w15,w7,w7,ror#11
 1607         ushr    v5.4s,v4.4s,#3
 1608         add     w6,w6,w12
 1609         add     v3.4s,v3.4s,v7.4s
 1610         ror     w11,w11,#6
 1611         sli     v6.4s,v4.4s,#25
 1612         eor     w13,w7,w8
 1613         eor     w15,w15,w7,ror#20
 1614         ushr    v7.4s,v4.4s,#18
 1615         add     w6,w6,w11
 1616         ldr     w12,[sp,#52]
 1617         and     w14,w14,w13
 1618         eor     v5.16b,v5.16b,v6.16b
 1619         ror     w15,w15,#2
 1620         add     w10,w10,w6
 1621         sli     v7.4s,v4.4s,#14
 1622         eor     w14,w14,w8
 1623         ushr    v16.4s,v19.4s,#17
 1624         add     w5,w5,w12
 1625         add     w6,w6,w15
 1626         and     w12,w3,w10
 1627         eor     v5.16b,v5.16b,v7.16b
 1628         bic     w15,w4,w10
 1629         eor     w11,w10,w10,ror#5
 1630         sli     v16.4s,v19.4s,#15
 1631         add     w6,w6,w14
 1632         orr     w12,w12,w15
 1633         ushr    v17.4s,v19.4s,#10
 1634         eor     w11,w11,w10,ror#19
 1635         eor     w15,w6,w6,ror#11
 1636         ushr    v7.4s,v19.4s,#19
 1637         add     w5,w5,w12
 1638         ror     w11,w11,#6
 1639         add     v3.4s,v3.4s,v5.4s
 1640         eor     w14,w6,w7
 1641         eor     w15,w15,w6,ror#20
 1642         sli     v7.4s,v19.4s,#13
 1643         add     w5,w5,w11
 1644         ldr     w12,[sp,#56]
 1645         and     w13,w13,w14
 1646         eor     v17.16b,v17.16b,v16.16b
 1647         ror     w15,w15,#2
 1648         add     w9,w9,w5
 1649         eor     w13,w13,w7
 1650         eor     v17.16b,v17.16b,v7.16b
 1651         add     w4,w4,w12
 1652         add     w5,w5,w15
 1653         and     w12,w10,w9
 1654         add     v3.4s,v3.4s,v17.4s
 1655         bic     w15,w3,w9
 1656         eor     w11,w9,w9,ror#5
 1657         add     w5,w5,w13
 1658         ushr    v18.4s,v3.4s,#17
 1659         orr     w12,w12,w15
 1660         ushr    v19.4s,v3.4s,#10
 1661         eor     w11,w11,w9,ror#19
 1662         eor     w15,w5,w5,ror#11
 1663         sli     v18.4s,v3.4s,#15
 1664         add     w4,w4,w12
 1665         ushr    v17.4s,v3.4s,#19
 1666         ror     w11,w11,#6
 1667         eor     w13,w5,w6
 1668         eor     v19.16b,v19.16b,v18.16b
 1669         eor     w15,w15,w5,ror#20
 1670         add     w4,w4,w11
 1671         sli     v17.4s,v3.4s,#13
 1672         ldr     w12,[sp,#60]
 1673         and     w14,w14,w13
 1674         ror     w15,w15,#2
 1675         ld1     {v4.4s},[x16], #16
 1676         add     w8,w8,w4
 1677         eor     v19.16b,v19.16b,v17.16b
 1678         eor     w14,w14,w6
 1679         eor     v17.16b,v17.16b,v17.16b
 1680         add     w3,w3,w12
 1681         add     w4,w4,w15
 1682         and     w12,w9,w8
 1683         mov     v17.d[1],v19.d[0]
 1684         bic     w15,w10,w8
 1685         eor     w11,w8,w8,ror#5
 1686         add     w4,w4,w14
 1687         add     v3.4s,v3.4s,v17.4s
 1688         orr     w12,w12,w15
 1689         eor     w11,w11,w8,ror#19
 1690         eor     w15,w4,w4,ror#11
 1691         add     v4.4s,v4.4s,v3.4s
 1692         add     w3,w3,w12
 1693         ror     w11,w11,#6
 1694         eor     w14,w4,w5
 1695         eor     w15,w15,w4,ror#20
 1696         add     w3,w3,w11
 1697         ldr     w12,[x16]
 1698         and     w13,w13,w14
 1699         ror     w15,w15,#2
 1700         add     w7,w7,w3
 1701         eor     w13,w13,w5
 1702         st1     {v4.4s},[x17], #16
 1703         cmp     w12,#0                          // check for K256 terminator
 1704         ldr     w12,[sp,#0]
 1705         sub     x17,x17,#64
 1706         bne     .L_00_48
 1707 
 1708         sub     x16,x16,#256            // rewind x16
 1709         cmp     x1,x2
 1710         mov     x17, #64
 1711         csel    x17, x17, xzr, eq
 1712         sub     x1,x1,x17                       // avoid SEGV
 1713         mov     x17,sp
 1714         add     w10,w10,w12
 1715         add     w3,w3,w15
 1716         and     w12,w8,w7
 1717         ld1     {v0.16b},[x1],#16
 1718         bic     w15,w9,w7
 1719         eor     w11,w7,w7,ror#5
 1720         ld1     {v4.4s},[x16],#16
 1721         add     w3,w3,w13
 1722         orr     w12,w12,w15
 1723         eor     w11,w11,w7,ror#19
 1724         eor     w15,w3,w3,ror#11
 1725         rev32   v0.16b,v0.16b
 1726         add     w10,w10,w12
 1727         ror     w11,w11,#6
 1728         eor     w13,w3,w4
 1729         eor     w15,w15,w3,ror#20
 1730         add     v4.4s,v4.4s,v0.4s
 1731         add     w10,w10,w11
 1732         ldr     w12,[sp,#4]
 1733         and     w14,w14,w13
 1734         ror     w15,w15,#2
 1735         add     w6,w6,w10
 1736         eor     w14,w14,w4
 1737         add     w9,w9,w12
 1738         add     w10,w10,w15
 1739         and     w12,w7,w6
 1740         bic     w15,w8,w6
 1741         eor     w11,w6,w6,ror#5
 1742         add     w10,w10,w14
 1743         orr     w12,w12,w15
 1744         eor     w11,w11,w6,ror#19
 1745         eor     w15,w10,w10,ror#11
 1746         add     w9,w9,w12
 1747         ror     w11,w11,#6
 1748         eor     w14,w10,w3
 1749         eor     w15,w15,w10,ror#20
 1750         add     w9,w9,w11
 1751         ldr     w12,[sp,#8]
 1752         and     w13,w13,w14
 1753         ror     w15,w15,#2
 1754         add     w5,w5,w9
 1755         eor     w13,w13,w3
 1756         add     w8,w8,w12
 1757         add     w9,w9,w15
 1758         and     w12,w6,w5
 1759         bic     w15,w7,w5
 1760         eor     w11,w5,w5,ror#5
 1761         add     w9,w9,w13
 1762         orr     w12,w12,w15
 1763         eor     w11,w11,w5,ror#19
 1764         eor     w15,w9,w9,ror#11
 1765         add     w8,w8,w12
 1766         ror     w11,w11,#6
 1767         eor     w13,w9,w10
 1768         eor     w15,w15,w9,ror#20
 1769         add     w8,w8,w11
 1770         ldr     w12,[sp,#12]
 1771         and     w14,w14,w13
 1772         ror     w15,w15,#2
 1773         add     w4,w4,w8
 1774         eor     w14,w14,w10
 1775         add     w7,w7,w12
 1776         add     w8,w8,w15
 1777         and     w12,w5,w4
 1778         bic     w15,w6,w4
 1779         eor     w11,w4,w4,ror#5
 1780         add     w8,w8,w14
 1781         orr     w12,w12,w15
 1782         eor     w11,w11,w4,ror#19
 1783         eor     w15,w8,w8,ror#11
 1784         add     w7,w7,w12
 1785         ror     w11,w11,#6
 1786         eor     w14,w8,w9
 1787         eor     w15,w15,w8,ror#20
 1788         add     w7,w7,w11
 1789         ldr     w12,[sp,#16]
 1790         and     w13,w13,w14
 1791         ror     w15,w15,#2
 1792         add     w3,w3,w7
 1793         eor     w13,w13,w9
 1794         st1     {v4.4s},[x17], #16
 1795         add     w6,w6,w12
 1796         add     w7,w7,w15
 1797         and     w12,w4,w3
 1798         ld1     {v1.16b},[x1],#16
 1799         bic     w15,w5,w3
 1800         eor     w11,w3,w3,ror#5
 1801         ld1     {v4.4s},[x16],#16
 1802         add     w7,w7,w13
 1803         orr     w12,w12,w15
 1804         eor     w11,w11,w3,ror#19
 1805         eor     w15,w7,w7,ror#11
 1806         rev32   v1.16b,v1.16b
 1807         add     w6,w6,w12
 1808         ror     w11,w11,#6
 1809         eor     w13,w7,w8
 1810         eor     w15,w15,w7,ror#20
 1811         add     v4.4s,v4.4s,v1.4s
 1812         add     w6,w6,w11
 1813         ldr     w12,[sp,#20]
 1814         and     w14,w14,w13
 1815         ror     w15,w15,#2
 1816         add     w10,w10,w6
 1817         eor     w14,w14,w8
 1818         add     w5,w5,w12
 1819         add     w6,w6,w15
 1820         and     w12,w3,w10
 1821         bic     w15,w4,w10
 1822         eor     w11,w10,w10,ror#5
 1823         add     w6,w6,w14
 1824         orr     w12,w12,w15
 1825         eor     w11,w11,w10,ror#19
 1826         eor     w15,w6,w6,ror#11
 1827         add     w5,w5,w12
 1828         ror     w11,w11,#6
 1829         eor     w14,w6,w7
 1830         eor     w15,w15,w6,ror#20
 1831         add     w5,w5,w11
 1832         ldr     w12,[sp,#24]
 1833         and     w13,w13,w14
 1834         ror     w15,w15,#2
 1835         add     w9,w9,w5
 1836         eor     w13,w13,w7
 1837         add     w4,w4,w12
 1838         add     w5,w5,w15
 1839         and     w12,w10,w9
 1840         bic     w15,w3,w9
 1841         eor     w11,w9,w9,ror#5
 1842         add     w5,w5,w13
 1843         orr     w12,w12,w15
 1844         eor     w11,w11,w9,ror#19
 1845         eor     w15,w5,w5,ror#11
 1846         add     w4,w4,w12
 1847         ror     w11,w11,#6
 1848         eor     w13,w5,w6
 1849         eor     w15,w15,w5,ror#20
 1850         add     w4,w4,w11
 1851         ldr     w12,[sp,#28]
 1852         and     w14,w14,w13
 1853         ror     w15,w15,#2
 1854         add     w8,w8,w4
 1855         eor     w14,w14,w6
 1856         add     w3,w3,w12
 1857         add     w4,w4,w15
 1858         and     w12,w9,w8
 1859         bic     w15,w10,w8
 1860         eor     w11,w8,w8,ror#5
 1861         add     w4,w4,w14
 1862         orr     w12,w12,w15
 1863         eor     w11,w11,w8,ror#19
 1864         eor     w15,w4,w4,ror#11
 1865         add     w3,w3,w12
 1866         ror     w11,w11,#6
 1867         eor     w14,w4,w5
 1868         eor     w15,w15,w4,ror#20
 1869         add     w3,w3,w11
 1870         ldr     w12,[sp,#32]
 1871         and     w13,w13,w14
 1872         ror     w15,w15,#2
 1873         add     w7,w7,w3
 1874         eor     w13,w13,w5
 1875         st1     {v4.4s},[x17], #16
 1876         add     w10,w10,w12
 1877         add     w3,w3,w15
 1878         and     w12,w8,w7
 1879         ld1     {v2.16b},[x1],#16
 1880         bic     w15,w9,w7
 1881         eor     w11,w7,w7,ror#5
 1882         ld1     {v4.4s},[x16],#16
 1883         add     w3,w3,w13
 1884         orr     w12,w12,w15
 1885         eor     w11,w11,w7,ror#19
 1886         eor     w15,w3,w3,ror#11
 1887         rev32   v2.16b,v2.16b
 1888         add     w10,w10,w12
 1889         ror     w11,w11,#6
 1890         eor     w13,w3,w4
 1891         eor     w15,w15,w3,ror#20
 1892         add     v4.4s,v4.4s,v2.4s
 1893         add     w10,w10,w11
 1894         ldr     w12,[sp,#36]
 1895         and     w14,w14,w13
 1896         ror     w15,w15,#2
 1897         add     w6,w6,w10
 1898         eor     w14,w14,w4
 1899         add     w9,w9,w12
 1900         add     w10,w10,w15
 1901         and     w12,w7,w6
 1902         bic     w15,w8,w6
 1903         eor     w11,w6,w6,ror#5
 1904         add     w10,w10,w14
 1905         orr     w12,w12,w15
 1906         eor     w11,w11,w6,ror#19
 1907         eor     w15,w10,w10,ror#11
 1908         add     w9,w9,w12
 1909         ror     w11,w11,#6
 1910         eor     w14,w10,w3
 1911         eor     w15,w15,w10,ror#20
 1912         add     w9,w9,w11
 1913         ldr     w12,[sp,#40]
 1914         and     w13,w13,w14
 1915         ror     w15,w15,#2
 1916         add     w5,w5,w9
 1917         eor     w13,w13,w3
 1918         add     w8,w8,w12
 1919         add     w9,w9,w15
 1920         and     w12,w6,w5
 1921         bic     w15,w7,w5
 1922         eor     w11,w5,w5,ror#5
 1923         add     w9,w9,w13
 1924         orr     w12,w12,w15
 1925         eor     w11,w11,w5,ror#19
 1926         eor     w15,w9,w9,ror#11
 1927         add     w8,w8,w12
 1928         ror     w11,w11,#6
 1929         eor     w13,w9,w10
 1930         eor     w15,w15,w9,ror#20
 1931         add     w8,w8,w11
 1932         ldr     w12,[sp,#44]
 1933         and     w14,w14,w13
 1934         ror     w15,w15,#2
 1935         add     w4,w4,w8
 1936         eor     w14,w14,w10
 1937         add     w7,w7,w12
 1938         add     w8,w8,w15
 1939         and     w12,w5,w4
 1940         bic     w15,w6,w4
 1941         eor     w11,w4,w4,ror#5
 1942         add     w8,w8,w14
 1943         orr     w12,w12,w15
 1944         eor     w11,w11,w4,ror#19
 1945         eor     w15,w8,w8,ror#11
 1946         add     w7,w7,w12
 1947         ror     w11,w11,#6
 1948         eor     w14,w8,w9
 1949         eor     w15,w15,w8,ror#20
 1950         add     w7,w7,w11
 1951         ldr     w12,[sp,#48]
 1952         and     w13,w13,w14
 1953         ror     w15,w15,#2
 1954         add     w3,w3,w7
 1955         eor     w13,w13,w9
 1956         st1     {v4.4s},[x17], #16
 1957         add     w6,w6,w12
 1958         add     w7,w7,w15
 1959         and     w12,w4,w3
 1960         ld1     {v3.16b},[x1],#16
 1961         bic     w15,w5,w3
 1962         eor     w11,w3,w3,ror#5
 1963         ld1     {v4.4s},[x16],#16
 1964         add     w7,w7,w13
 1965         orr     w12,w12,w15
 1966         eor     w11,w11,w3,ror#19
 1967         eor     w15,w7,w7,ror#11
 1968         rev32   v3.16b,v3.16b
 1969         add     w6,w6,w12
 1970         ror     w11,w11,#6
 1971         eor     w13,w7,w8
 1972         eor     w15,w15,w7,ror#20
 1973         add     v4.4s,v4.4s,v3.4s
 1974         add     w6,w6,w11
 1975         ldr     w12,[sp,#52]
 1976         and     w14,w14,w13
 1977         ror     w15,w15,#2
 1978         add     w10,w10,w6
 1979         eor     w14,w14,w8
 1980         add     w5,w5,w12
 1981         add     w6,w6,w15
 1982         and     w12,w3,w10
 1983         bic     w15,w4,w10
 1984         eor     w11,w10,w10,ror#5
 1985         add     w6,w6,w14
 1986         orr     w12,w12,w15
 1987         eor     w11,w11,w10,ror#19
 1988         eor     w15,w6,w6,ror#11
 1989         add     w5,w5,w12
 1990         ror     w11,w11,#6
 1991         eor     w14,w6,w7
 1992         eor     w15,w15,w6,ror#20
 1993         add     w5,w5,w11
 1994         ldr     w12,[sp,#56]
 1995         and     w13,w13,w14
 1996         ror     w15,w15,#2
 1997         add     w9,w9,w5
 1998         eor     w13,w13,w7
 1999         add     w4,w4,w12
 2000         add     w5,w5,w15
 2001         and     w12,w10,w9
 2002         bic     w15,w3,w9
 2003         eor     w11,w9,w9,ror#5
 2004         add     w5,w5,w13
 2005         orr     w12,w12,w15
 2006         eor     w11,w11,w9,ror#19
 2007         eor     w15,w5,w5,ror#11
 2008         add     w4,w4,w12
 2009         ror     w11,w11,#6
 2010         eor     w13,w5,w6
 2011         eor     w15,w15,w5,ror#20
 2012         add     w4,w4,w11
 2013         ldr     w12,[sp,#60]
 2014         and     w14,w14,w13
 2015         ror     w15,w15,#2
 2016         add     w8,w8,w4
 2017         eor     w14,w14,w6
 2018         add     w3,w3,w12
 2019         add     w4,w4,w15
 2020         and     w12,w9,w8
 2021         bic     w15,w10,w8
 2022         eor     w11,w8,w8,ror#5
 2023         add     w4,w4,w14
 2024         orr     w12,w12,w15
 2025         eor     w11,w11,w8,ror#19
 2026         eor     w15,w4,w4,ror#11
 2027         add     w3,w3,w12
 2028         ror     w11,w11,#6
 2029         eor     w14,w4,w5
 2030         eor     w15,w15,w4,ror#20
 2031         add     w3,w3,w11
 2032         and     w13,w13,w14
 2033         ror     w15,w15,#2
 2034         add     w7,w7,w3
 2035         eor     w13,w13,w5
 2036         st1     {v4.4s},[x17], #16
 2037         add     w3,w3,w15                       // h+=Sigma0(a) from the past
 2038         ldp     w11,w12,[x0,#0]
 2039         add     w3,w3,w13                       // h+=Maj(a,b,c) from the past
 2040         ldp     w13,w14,[x0,#8]
 2041         add     w3,w3,w11                       // accumulate
 2042         add     w4,w4,w12
 2043         ldp     w11,w12,[x0,#16]
 2044         add     w5,w5,w13
 2045         add     w6,w6,w14
 2046         ldp     w13,w14,[x0,#24]
 2047         add     w7,w7,w11
 2048         add     w8,w8,w12
 2049         ldr     w12,[sp,#0]
 2050         stp     w3,w4,[x0,#0]
 2051         add     w9,w9,w13
 2052         mov     w13,wzr
 2053         stp     w5,w6,[x0,#8]
 2054         add     w10,w10,w14
 2055         stp     w7,w8,[x0,#16]
 2056         eor     w14,w4,w5
 2057         stp     w9,w10,[x0,#24]
 2058         mov     w15,wzr
 2059         mov     x17,sp
 2060         b.ne    .L_00_48
 2061 
 2062         ldr     x29,[x29]
 2063         add     sp,sp,#16*4+16
 2064         ret
 2065 .size   sha256_block_neon,.-sha256_block_neon

Cache object: d55d0bede0df9a4557d47a978ab69e58


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.