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/keccak1600-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 keccak1600-armv8.pl. */
    3 .text
    4 
    5 .align  8       // strategic alignment and padding that allows to use
    6                 // address value as loop termination condition...
    7 .quad   0,0,0,0,0,0,0,0
    8 .type   iotas,%object
    9 iotas:
   10 .quad   0x0000000000000001
   11 .quad   0x0000000000008082
   12 .quad   0x800000000000808a
   13 .quad   0x8000000080008000
   14 .quad   0x000000000000808b
   15 .quad   0x0000000080000001
   16 .quad   0x8000000080008081
   17 .quad   0x8000000000008009
   18 .quad   0x000000000000008a
   19 .quad   0x0000000000000088
   20 .quad   0x0000000080008009
   21 .quad   0x000000008000000a
   22 .quad   0x000000008000808b
   23 .quad   0x800000000000008b
   24 .quad   0x8000000000008089
   25 .quad   0x8000000000008003
   26 .quad   0x8000000000008002
   27 .quad   0x8000000000000080
   28 .quad   0x000000000000800a
   29 .quad   0x800000008000000a
   30 .quad   0x8000000080008081
   31 .quad   0x8000000000008080
   32 .quad   0x0000000080000001
   33 .quad   0x8000000080008008
   34 .size   iotas,.-iotas
   35 .type   KeccakF1600_int,%function
   36 .align  5
   37 KeccakF1600_int:
   38         adr     x28,iotas
   39 .inst   0xd503233f                      // paciasp
   40         stp     x28,x30,[sp,#16]                // 32 bytes on top are mine
   41         b       .Loop
   42 .align  4
   43 .Loop:
   44         ////////////////////////////////////////// Theta
   45         eor     x26,x0,x5
   46         stp     x4,x9,[sp,#0]   // offload pair...
   47         eor     x27,x1,x6
   48         eor     x28,x2,x7
   49         eor     x30,x3,x8
   50         eor     x4,x4,x9
   51         eor     x26,x26,x10
   52         eor     x27,x27,x11
   53         eor     x28,x28,x12
   54         eor     x30,x30,x13
   55         eor     x4,x4,x14
   56         eor     x26,x26,x15
   57         eor     x27,x27,x16
   58         eor     x28,x28,x17
   59         eor     x30,x30,x25
   60         eor     x4,x4,x19
   61         eor     x26,x26,x20
   62         eor     x28,x28,x22
   63         eor     x27,x27,x21
   64         eor     x30,x30,x23
   65         eor     x4,x4,x24
   66 
   67         eor     x9,x26,x28,ror#63
   68 
   69         eor     x1,x1,x9
   70         eor     x6,x6,x9
   71         eor     x11,x11,x9
   72         eor     x16,x16,x9
   73         eor     x21,x21,x9
   74 
   75         eor     x9,x27,x30,ror#63
   76         eor     x28,x28,x4,ror#63
   77         eor     x30,x30,x26,ror#63
   78         eor     x4,x4,x27,ror#63
   79 
   80         eor     x27,   x2,x9            // mov  x27,x2
   81         eor     x7,x7,x9
   82         eor     x12,x12,x9
   83         eor     x17,x17,x9
   84         eor     x22,x22,x9
   85 
   86         eor     x0,x0,x4
   87         eor     x5,x5,x4
   88         eor     x10,x10,x4
   89         eor     x15,x15,x4
   90         eor     x20,x20,x4
   91         ldp     x4,x9,[sp,#0]   // re-load offloaded data
   92         eor     x26,   x3,x28           // mov  x26,x3
   93         eor     x8,x8,x28
   94         eor     x13,x13,x28
   95         eor     x25,x25,x28
   96         eor     x23,x23,x28
   97 
   98         eor     x28,   x4,x30           // mov  x28,x4
   99         eor     x9,x9,x30
  100         eor     x14,x14,x30
  101         eor     x19,x19,x30
  102         eor     x24,x24,x30
  103 
  104         ////////////////////////////////////////// Rho+Pi
  105         mov     x30,x1
  106         ror     x1,x6,#64-44
  107         //mov   x27,x2
  108         ror     x2,x12,#64-43
  109         //mov   x26,x3
  110         ror     x3,x25,#64-21
  111         //mov   x28,x4
  112         ror     x4,x24,#64-14
  113 
  114         ror     x6,x9,#64-20
  115         ror     x12,x13,#64-25
  116         ror     x25,x17,#64-15
  117         ror     x24,x21,#64-2
  118 
  119         ror     x9,x22,#64-61
  120         ror     x13,x19,#64-8
  121         ror     x17,x11,#64-10
  122         ror     x21,x8,#64-55
  123 
  124         ror     x22,x14,#64-39
  125         ror     x19,x23,#64-56
  126         ror     x11,x7,#64-6
  127         ror     x8,x16,#64-45
  128 
  129         ror     x14,x20,#64-18
  130         ror     x23,x15,#64-41
  131         ror     x7,x10,#64-3
  132         ror     x16,x5,#64-36
  133 
  134         ror     x5,x26,#64-28
  135         ror     x10,x30,#64-1
  136         ror     x15,x28,#64-27
  137         ror     x20,x27,#64-62
  138 
  139         ////////////////////////////////////////// Chi+Iota
  140         bic     x26,x2,x1
  141         bic     x27,x3,x2
  142         bic     x28,x0,x4
  143         bic     x30,x1,x0
  144         eor     x0,x0,x26
  145         bic     x26,x4,x3
  146         eor     x1,x1,x27
  147         ldr     x27,[sp,#16]
  148         eor     x3,x3,x28
  149         eor     x4,x4,x30
  150         eor     x2,x2,x26
  151         ldr     x30,[x27],#8            // Iota[i++]
  152 
  153         bic     x26,x7,x6
  154         tst     x27,#255                        // are we done?
  155         str     x27,[sp,#16]
  156         bic     x27,x8,x7
  157         bic     x28,x5,x9
  158         eor     x0,x0,x30               // A[0][0] ^= Iota
  159         bic     x30,x6,x5
  160         eor     x5,x5,x26
  161         bic     x26,x9,x8
  162         eor     x6,x6,x27
  163         eor     x8,x8,x28
  164         eor     x9,x9,x30
  165         eor     x7,x7,x26
  166 
  167         bic     x26,x12,x11
  168         bic     x27,x13,x12
  169         bic     x28,x10,x14
  170         bic     x30,x11,x10
  171         eor     x10,x10,x26
  172         bic     x26,x14,x13
  173         eor     x11,x11,x27
  174         eor     x13,x13,x28
  175         eor     x14,x14,x30
  176         eor     x12,x12,x26
  177 
  178         bic     x26,x17,x16
  179         bic     x27,x25,x17
  180         bic     x28,x15,x19
  181         bic     x30,x16,x15
  182         eor     x15,x15,x26
  183         bic     x26,x19,x25
  184         eor     x16,x16,x27
  185         eor     x25,x25,x28
  186         eor     x19,x19,x30
  187         eor     x17,x17,x26
  188 
  189         bic     x26,x22,x21
  190         bic     x27,x23,x22
  191         bic     x28,x20,x24
  192         bic     x30,x21,x20
  193         eor     x20,x20,x26
  194         bic     x26,x24,x23
  195         eor     x21,x21,x27
  196         eor     x23,x23,x28
  197         eor     x24,x24,x30
  198         eor     x22,x22,x26
  199 
  200         bne     .Loop
  201 
  202         ldr     x30,[sp,#24]
  203 .inst   0xd50323bf                      // autiasp
  204         ret
  205 .size   KeccakF1600_int,.-KeccakF1600_int
  206 
  207 .type   KeccakF1600,%function
  208 .align  5
  209 KeccakF1600:
  210 .inst   0xd503233f                      // paciasp
  211         stp     x29,x30,[sp,#-128]!
  212         add     x29,sp,#0
  213         stp     x19,x20,[sp,#16]
  214         stp     x21,x22,[sp,#32]
  215         stp     x23,x24,[sp,#48]
  216         stp     x25,x26,[sp,#64]
  217         stp     x27,x28,[sp,#80]
  218         sub     sp,sp,#48
  219 
  220         str     x0,[sp,#32]                     // offload argument
  221         mov     x26,x0
  222         ldp     x0,x1,[x0,#16*0]
  223         ldp     x2,x3,[x26,#16*1]
  224         ldp     x4,x5,[x26,#16*2]
  225         ldp     x6,x7,[x26,#16*3]
  226         ldp     x8,x9,[x26,#16*4]
  227         ldp     x10,x11,[x26,#16*5]
  228         ldp     x12,x13,[x26,#16*6]
  229         ldp     x14,x15,[x26,#16*7]
  230         ldp     x16,x17,[x26,#16*8]
  231         ldp     x25,x19,[x26,#16*9]
  232         ldp     x20,x21,[x26,#16*10]
  233         ldp     x22,x23,[x26,#16*11]
  234         ldr     x24,[x26,#16*12]
  235 
  236         bl      KeccakF1600_int
  237 
  238         ldr     x26,[sp,#32]
  239         stp     x0,x1,[x26,#16*0]
  240         stp     x2,x3,[x26,#16*1]
  241         stp     x4,x5,[x26,#16*2]
  242         stp     x6,x7,[x26,#16*3]
  243         stp     x8,x9,[x26,#16*4]
  244         stp     x10,x11,[x26,#16*5]
  245         stp     x12,x13,[x26,#16*6]
  246         stp     x14,x15,[x26,#16*7]
  247         stp     x16,x17,[x26,#16*8]
  248         stp     x25,x19,[x26,#16*9]
  249         stp     x20,x21,[x26,#16*10]
  250         stp     x22,x23,[x26,#16*11]
  251         str     x24,[x26,#16*12]
  252 
  253         ldp     x19,x20,[x29,#16]
  254         add     sp,sp,#48
  255         ldp     x21,x22,[x29,#32]
  256         ldp     x23,x24,[x29,#48]
  257         ldp     x25,x26,[x29,#64]
  258         ldp     x27,x28,[x29,#80]
  259         ldp     x29,x30,[sp],#128
  260 .inst   0xd50323bf                      // autiasp
  261         ret
  262 .size   KeccakF1600,.-KeccakF1600
  263 
  264 .globl  SHA3_absorb
  265 .type   SHA3_absorb,%function
  266 .align  5
  267 SHA3_absorb:
  268 .inst   0xd503233f                      // paciasp
  269         stp     x29,x30,[sp,#-128]!
  270         add     x29,sp,#0
  271         stp     x19,x20,[sp,#16]
  272         stp     x21,x22,[sp,#32]
  273         stp     x23,x24,[sp,#48]
  274         stp     x25,x26,[sp,#64]
  275         stp     x27,x28,[sp,#80]
  276         sub     sp,sp,#64
  277 
  278         stp     x0,x1,[sp,#32]                  // offload arguments
  279         stp     x2,x3,[sp,#48]
  280 
  281         mov     x26,x0                  // uint64_t A[5][5]
  282         mov     x27,x1                  // const void *inp
  283         mov     x28,x2                  // size_t len
  284         mov     x30,x3                  // size_t bsz
  285         ldp     x0,x1,[x26,#16*0]
  286         ldp     x2,x3,[x26,#16*1]
  287         ldp     x4,x5,[x26,#16*2]
  288         ldp     x6,x7,[x26,#16*3]
  289         ldp     x8,x9,[x26,#16*4]
  290         ldp     x10,x11,[x26,#16*5]
  291         ldp     x12,x13,[x26,#16*6]
  292         ldp     x14,x15,[x26,#16*7]
  293         ldp     x16,x17,[x26,#16*8]
  294         ldp     x25,x19,[x26,#16*9]
  295         ldp     x20,x21,[x26,#16*10]
  296         ldp     x22,x23,[x26,#16*11]
  297         ldr     x24,[x26,#16*12]
  298         b       .Loop_absorb
  299 
  300 .align  4
  301 .Loop_absorb:
  302         subs    x26,x28,x30             // len - bsz
  303         blo     .Labsorbed
  304 
  305         str     x26,[sp,#48]                    // save len - bsz
  306         ldr     x26,[x27],#8            // *inp++
  307 #ifdef  __AARCH64EB__
  308         rev     x26,x26
  309 #endif
  310         eor     x0,x0,x26
  311         cmp     x30,#8*(0+2)
  312         blo     .Lprocess_block
  313         ldr     x26,[x27],#8            // *inp++
  314 #ifdef  __AARCH64EB__
  315         rev     x26,x26
  316 #endif
  317         eor     x1,x1,x26
  318         beq     .Lprocess_block
  319         ldr     x26,[x27],#8            // *inp++
  320 #ifdef  __AARCH64EB__
  321         rev     x26,x26
  322 #endif
  323         eor     x2,x2,x26
  324         cmp     x30,#8*(2+2)
  325         blo     .Lprocess_block
  326         ldr     x26,[x27],#8            // *inp++
  327 #ifdef  __AARCH64EB__
  328         rev     x26,x26
  329 #endif
  330         eor     x3,x3,x26
  331         beq     .Lprocess_block
  332         ldr     x26,[x27],#8            // *inp++
  333 #ifdef  __AARCH64EB__
  334         rev     x26,x26
  335 #endif
  336         eor     x4,x4,x26
  337         cmp     x30,#8*(4+2)
  338         blo     .Lprocess_block
  339         ldr     x26,[x27],#8            // *inp++
  340 #ifdef  __AARCH64EB__
  341         rev     x26,x26
  342 #endif
  343         eor     x5,x5,x26
  344         beq     .Lprocess_block
  345         ldr     x26,[x27],#8            // *inp++
  346 #ifdef  __AARCH64EB__
  347         rev     x26,x26
  348 #endif
  349         eor     x6,x6,x26
  350         cmp     x30,#8*(6+2)
  351         blo     .Lprocess_block
  352         ldr     x26,[x27],#8            // *inp++
  353 #ifdef  __AARCH64EB__
  354         rev     x26,x26
  355 #endif
  356         eor     x7,x7,x26
  357         beq     .Lprocess_block
  358         ldr     x26,[x27],#8            // *inp++
  359 #ifdef  __AARCH64EB__
  360         rev     x26,x26
  361 #endif
  362         eor     x8,x8,x26
  363         cmp     x30,#8*(8+2)
  364         blo     .Lprocess_block
  365         ldr     x26,[x27],#8            // *inp++
  366 #ifdef  __AARCH64EB__
  367         rev     x26,x26
  368 #endif
  369         eor     x9,x9,x26
  370         beq     .Lprocess_block
  371         ldr     x26,[x27],#8            // *inp++
  372 #ifdef  __AARCH64EB__
  373         rev     x26,x26
  374 #endif
  375         eor     x10,x10,x26
  376         cmp     x30,#8*(10+2)
  377         blo     .Lprocess_block
  378         ldr     x26,[x27],#8            // *inp++
  379 #ifdef  __AARCH64EB__
  380         rev     x26,x26
  381 #endif
  382         eor     x11,x11,x26
  383         beq     .Lprocess_block
  384         ldr     x26,[x27],#8            // *inp++
  385 #ifdef  __AARCH64EB__
  386         rev     x26,x26
  387 #endif
  388         eor     x12,x12,x26
  389         cmp     x30,#8*(12+2)
  390         blo     .Lprocess_block
  391         ldr     x26,[x27],#8            // *inp++
  392 #ifdef  __AARCH64EB__
  393         rev     x26,x26
  394 #endif
  395         eor     x13,x13,x26
  396         beq     .Lprocess_block
  397         ldr     x26,[x27],#8            // *inp++
  398 #ifdef  __AARCH64EB__
  399         rev     x26,x26
  400 #endif
  401         eor     x14,x14,x26
  402         cmp     x30,#8*(14+2)
  403         blo     .Lprocess_block
  404         ldr     x26,[x27],#8            // *inp++
  405 #ifdef  __AARCH64EB__
  406         rev     x26,x26
  407 #endif
  408         eor     x15,x15,x26
  409         beq     .Lprocess_block
  410         ldr     x26,[x27],#8            // *inp++
  411 #ifdef  __AARCH64EB__
  412         rev     x26,x26
  413 #endif
  414         eor     x16,x16,x26
  415         cmp     x30,#8*(16+2)
  416         blo     .Lprocess_block
  417         ldr     x26,[x27],#8            // *inp++
  418 #ifdef  __AARCH64EB__
  419         rev     x26,x26
  420 #endif
  421         eor     x17,x17,x26
  422         beq     .Lprocess_block
  423         ldr     x26,[x27],#8            // *inp++
  424 #ifdef  __AARCH64EB__
  425         rev     x26,x26
  426 #endif
  427         eor     x25,x25,x26
  428         cmp     x30,#8*(18+2)
  429         blo     .Lprocess_block
  430         ldr     x26,[x27],#8            // *inp++
  431 #ifdef  __AARCH64EB__
  432         rev     x26,x26
  433 #endif
  434         eor     x19,x19,x26
  435         beq     .Lprocess_block
  436         ldr     x26,[x27],#8            // *inp++
  437 #ifdef  __AARCH64EB__
  438         rev     x26,x26
  439 #endif
  440         eor     x20,x20,x26
  441         cmp     x30,#8*(20+2)
  442         blo     .Lprocess_block
  443         ldr     x26,[x27],#8            // *inp++
  444 #ifdef  __AARCH64EB__
  445         rev     x26,x26
  446 #endif
  447         eor     x21,x21,x26
  448         beq     .Lprocess_block
  449         ldr     x26,[x27],#8            // *inp++
  450 #ifdef  __AARCH64EB__
  451         rev     x26,x26
  452 #endif
  453         eor     x22,x22,x26
  454         cmp     x30,#8*(22+2)
  455         blo     .Lprocess_block
  456         ldr     x26,[x27],#8            // *inp++
  457 #ifdef  __AARCH64EB__
  458         rev     x26,x26
  459 #endif
  460         eor     x23,x23,x26
  461         beq     .Lprocess_block
  462         ldr     x26,[x27],#8            // *inp++
  463 #ifdef  __AARCH64EB__
  464         rev     x26,x26
  465 #endif
  466         eor     x24,x24,x26
  467 
  468 .Lprocess_block:
  469         str     x27,[sp,#40]                    // save inp
  470 
  471         bl      KeccakF1600_int
  472 
  473         ldr     x27,[sp,#40]                    // restore arguments
  474         ldp     x28,x30,[sp,#48]
  475         b       .Loop_absorb
  476 
  477 .align  4
  478 .Labsorbed:
  479         ldr     x27,[sp,#32]
  480         stp     x0,x1,[x27,#16*0]
  481         stp     x2,x3,[x27,#16*1]
  482         stp     x4,x5,[x27,#16*2]
  483         stp     x6,x7,[x27,#16*3]
  484         stp     x8,x9,[x27,#16*4]
  485         stp     x10,x11,[x27,#16*5]
  486         stp     x12,x13,[x27,#16*6]
  487         stp     x14,x15,[x27,#16*7]
  488         stp     x16,x17,[x27,#16*8]
  489         stp     x25,x19,[x27,#16*9]
  490         stp     x20,x21,[x27,#16*10]
  491         stp     x22,x23,[x27,#16*11]
  492         str     x24,[x27,#16*12]
  493 
  494         mov     x0,x28                  // return value
  495         ldp     x19,x20,[x29,#16]
  496         add     sp,sp,#64
  497         ldp     x21,x22,[x29,#32]
  498         ldp     x23,x24,[x29,#48]
  499         ldp     x25,x26,[x29,#64]
  500         ldp     x27,x28,[x29,#80]
  501         ldp     x29,x30,[sp],#128
  502 .inst   0xd50323bf                      // autiasp
  503         ret
  504 .size   SHA3_absorb,.-SHA3_absorb
  505 .globl  SHA3_squeeze
  506 .type   SHA3_squeeze,%function
  507 .align  5
  508 SHA3_squeeze:
  509 .inst   0xd503233f                      // paciasp
  510         stp     x29,x30,[sp,#-48]!
  511         add     x29,sp,#0
  512         stp     x19,x20,[sp,#16]
  513         stp     x21,x22,[sp,#32]
  514 
  515         mov     x19,x0                  // put aside arguments
  516         mov     x20,x1
  517         mov     x21,x2
  518         mov     x22,x3
  519 
  520 .Loop_squeeze:
  521         ldr     x4,[x0],#8
  522         cmp     x21,#8
  523         blo     .Lsqueeze_tail
  524 #ifdef  __AARCH64EB__
  525         rev     x4,x4
  526 #endif
  527         str     x4,[x20],#8
  528         subs    x21,x21,#8
  529         beq     .Lsqueeze_done
  530 
  531         subs    x3,x3,#8
  532         bhi     .Loop_squeeze
  533 
  534         mov     x0,x19
  535         bl      KeccakF1600
  536         mov     x0,x19
  537         mov     x3,x22
  538         b       .Loop_squeeze
  539 
  540 .align  4
  541 .Lsqueeze_tail:
  542         strb    w4,[x20],#1
  543         lsr     x4,x4,#8
  544         subs    x21,x21,#1
  545         beq     .Lsqueeze_done
  546         strb    w4,[x20],#1
  547         lsr     x4,x4,#8
  548         subs    x21,x21,#1
  549         beq     .Lsqueeze_done
  550         strb    w4,[x20],#1
  551         lsr     x4,x4,#8
  552         subs    x21,x21,#1
  553         beq     .Lsqueeze_done
  554         strb    w4,[x20],#1
  555         lsr     x4,x4,#8
  556         subs    x21,x21,#1
  557         beq     .Lsqueeze_done
  558         strb    w4,[x20],#1
  559         lsr     x4,x4,#8
  560         subs    x21,x21,#1
  561         beq     .Lsqueeze_done
  562         strb    w4,[x20],#1
  563         lsr     x4,x4,#8
  564         subs    x21,x21,#1
  565         beq     .Lsqueeze_done
  566         strb    w4,[x20],#1
  567 
  568 .Lsqueeze_done:
  569         ldp     x19,x20,[sp,#16]
  570         ldp     x21,x22,[sp,#32]
  571         ldp     x29,x30,[sp],#48
  572 .inst   0xd50323bf                      // autiasp
  573         ret
  574 .size   SHA3_squeeze,.-SHA3_squeeze
  575 .type   KeccakF1600_ce,%function
  576 .align  5
  577 KeccakF1600_ce:
  578         mov     x9,#12
  579         adr     x10,iotas
  580         b       .Loop_ce
  581 .align  4
  582 .Loop_ce:
  583         ////////////////////////////////////////////////// Theta
  584 .inst   0xce052819      //eor3 v25.16b,v0.16b,v5.16b,v10.16b
  585 .inst   0xce062c3a      //eor3 v26.16b,v1.16b,v6.16b,v11.16b
  586 .inst   0xce07305b      //eor3 v27.16b,v2.16b,v7.16b,v12.16b
  587 .inst   0xce08347c      //eor3 v28.16b,v3.16b,v8.16b,v13.16b
  588 .inst   0xce09389d      //eor3 v29.16b,v4.16b,v9.16b,v14.16b
  589 .inst   0xce0f5339      //eor3 v25.16b,v25.16b,   v15.16b,v20.16b
  590 .inst   0xce10575a      //eor3 v26.16b,v26.16b,   v16.16b,v21.16b
  591 .inst   0xce115b7b      //eor3 v27.16b,v27.16b,   v17.16b,v22.16b
  592 .inst   0xce125f9c      //eor3 v28.16b,v28.16b,   v18.16b,v23.16b
  593 .inst   0xce1363bd      //eor3 v29.16b,v29.16b,   v19.16b,v24.16b
  594 
  595 .inst   0xce7b8f3e      //rax1 v30.16b,v25.16b,v27.16b                  // D[1]
  596 .inst   0xce7c8f5f      //rax1 v31.16b,v26.16b,v28.16b                  // D[2]
  597 .inst   0xce7d8f7b      //rax1 v27.16b,v27.16b,v29.16b                  // D[3]
  598 .inst   0xce798f9c      //rax1 v28.16b,v28.16b,v25.16b                  // D[4]
  599 .inst   0xce7a8fbd      //rax1 v29.16b,v29.16b,v26.16b                  // D[0]
  600 
  601         ////////////////////////////////////////////////// Theta+Rho+Pi
  602 .inst   0xce9e50d9      //xar v25.16b,   v6.16b,v30.16b,#64-44  // C[0]=A[0][1]
  603 .inst   0xce9cb126      //xar v6.16b,v9.16b,v28.16b,#64-20
  604 .inst   0xce9f0ec9      //xar v9.16b,v22.16b,v31.16b,#64-61
  605 .inst   0xce9c65d6      //xar v22.16b,v14.16b,v28.16b,#64-39
  606 .inst   0xce9dba8e      //xar v14.16b,v20.16b,v29.16b,#64-18
  607 
  608 .inst   0xce9f0854      //xar v20.16b,v2.16b,v31.16b,#64-62
  609 
  610 .inst   0xce9f5582      //xar v2.16b,v12.16b,v31.16b,#64-43
  611 .inst   0xce9b9dac      //xar v12.16b,v13.16b,v27.16b,#64-25
  612 .inst   0xce9ce26d      //xar v13.16b,v19.16b,v28.16b,#64-8
  613 .inst   0xce9b22f3      //xar v19.16b,v23.16b,v27.16b,#64-56
  614 .inst   0xce9d5df7      //xar v23.16b,v15.16b,v29.16b,#64-41
  615 
  616 .inst   0xce9c948f      //xar v15.16b,v4.16b,v28.16b,#64-27
  617 
  618         eor     v0.16b,v0.16b,v29.16b
  619         ldr     x11,[x10],#8
  620 
  621 .inst   0xce9bae5a      //xar v26.16b,   v18.16b,v27.16b,#64-21 // C[1]=A[0][3]
  622 .inst   0xce9fc632      //xar v18.16b,v17.16b,v31.16b,#64-15
  623 .inst   0xce9ed971      //xar v17.16b,v11.16b,v30.16b,#64-10
  624 .inst   0xce9fe8eb      //xar v11.16b,v7.16b,v31.16b,#64-6
  625 .inst   0xce9df547      //xar v7.16b,v10.16b,v29.16b,#64-3
  626 
  627 .inst   0xce9efc2a      //xar v10.16b,v1.16b,v30.16b,#64-1      // *
  628 
  629 .inst   0xce9ccb04      //xar v4.16b,v24.16b,v28.16b,#64-14
  630 .inst   0xce9efab8      //xar v24.16b,v21.16b,v30.16b,#64-2
  631 .inst   0xce9b2515      //xar v21.16b,v8.16b,v27.16b,#64-55
  632 .inst   0xce9e4e08      //xar v8.16b,v16.16b,v30.16b,#64-45
  633 .inst   0xce9d70b0      //xar v16.16b,v5.16b,v29.16b,#64-36
  634 
  635 .inst   0xce9b907b      //xar v27.16b,   v3.16b,v27.16b,#64-28  // C[2]=A[1][0]
  636 
  637         ////////////////////////////////////////////////// Chi+Iota
  638         dup     v31.2d,x11                              // borrow C[6]
  639 .inst   0xce22641c      //bcax v28.16b,   v0.16b,v2.16b,v25.16b // *
  640 .inst   0xce3a0b21      //bcax v1.16b,v25.16b,   v26.16b,   v2.16b      // *
  641 .inst   0xce246842      //bcax v2.16b,v2.16b,v4.16b,v26.16b
  642 .inst   0xce201343      //bcax v3.16b,v26.16b,   v0.16b,v4.16b
  643 .inst   0xce390084      //bcax v4.16b,v4.16b,v25.16b,   v0.16b
  644 
  645 .inst   0xce271b65      //bcax v5.16b,v27.16b,   v7.16b,v6.16b  // *
  646 .inst   0xce281cd9      //bcax v25.16b,   v6.16b,v8.16b,v7.16b  // *
  647 .inst   0xce2920e7      //bcax v7.16b,v7.16b,v9.16b,v8.16b
  648 .inst   0xce3b2508      //bcax v8.16b,v8.16b,v27.16b,   v9.16b
  649 .inst   0xce266d29      //bcax v9.16b,v9.16b,v6.16b,v27.16b
  650 
  651         eor     v0.16b,v28.16b,v31.16b                  // Iota
  652 
  653 .inst   0xce2c2d5a      //bcax v26.16b,   v10.16b,v12.16b,v11.16b       // *
  654 .inst   0xce2d317b      //bcax v27.16b,   v11.16b,v13.16b,v12.16b       // *
  655 .inst   0xce2e358c      //bcax v12.16b,v12.16b,v14.16b,v13.16b
  656 .inst   0xce2a39ad      //bcax v13.16b,v13.16b,v10.16b,v14.16b
  657 .inst   0xce2b29ce      //bcax v14.16b,v14.16b,v11.16b,v10.16b
  658 
  659 .inst   0xce3141fc      //bcax v28.16b,   v15.16b,v17.16b,v16.16b       // *
  660 .inst   0xce32461d      //bcax v29.16b,   v16.16b,v18.16b,v17.16b       // *
  661 .inst   0xce334a31      //bcax v17.16b,v17.16b,v19.16b,v18.16b
  662 .inst   0xce2f4e52      //bcax v18.16b,v18.16b,v15.16b,v19.16b
  663 .inst   0xce303e73      //bcax v19.16b,v19.16b,v16.16b,v15.16b
  664 
  665 .inst   0xce36569e      //bcax v30.16b,   v20.16b,v22.16b,v21.16b       // *
  666 .inst   0xce375abf      //bcax v31.16b,   v21.16b,v23.16b,v22.16b       // *
  667 .inst   0xce385ed6      //bcax v22.16b,v22.16b,v24.16b,v23.16b
  668 .inst   0xce3462f7      //bcax v23.16b,v23.16b,v20.16b,v24.16b
  669 .inst   0xce355318      //bcax v24.16b,v24.16b,v21.16b,v20.16b
  670         ////////////////////////////////////////////////// Theta
  671 .inst   0xce056806      //eor3 v6.16b,v0.16b,v5.16b,v26.16b
  672 .inst   0xce196c2a      //eor3 v10.16b,v1.16b,v25.16b,v27.16b
  673 .inst   0xce07304b      //eor3 v11.16b,v2.16b,v7.16b,v12.16b
  674 .inst   0xce08346f      //eor3 v15.16b,v3.16b,v8.16b,v13.16b
  675 .inst   0xce093890      //eor3 v16.16b,v4.16b,v9.16b,v14.16b
  676 .inst   0xce1c78c6      //eor3 v6.16b,v6.16b,   v28.16b,v30.16b
  677 .inst   0xce1d7d4a      //eor3 v10.16b,v10.16b,   v29.16b,v31.16b
  678 .inst   0xce11596b      //eor3 v11.16b,v11.16b,   v17.16b,v22.16b
  679 .inst   0xce125def      //eor3 v15.16b,v15.16b,   v18.16b,v23.16b
  680 .inst   0xce136210      //eor3 v16.16b,v16.16b,   v19.16b,v24.16b
  681 
  682 .inst   0xce6b8cd4      //rax1 v20.16b,v6.16b,v11.16b                   // D[1]
  683 .inst   0xce6f8d55      //rax1 v21.16b,v10.16b,v15.16b                  // D[2]
  684 .inst   0xce708d6b      //rax1 v11.16b,v11.16b,v16.16b                  // D[3]
  685 .inst   0xce668def      //rax1 v15.16b,v15.16b,v6.16b                   // D[4]
  686 .inst   0xce6a8e10      //rax1 v16.16b,v16.16b,v10.16b                  // D[0]
  687 
  688         ////////////////////////////////////////////////// Theta+Rho+Pi
  689 .inst   0xce945326      //xar v6.16b,   v25.16b,v20.16b,#64-44  // C[0]=A[0][1]
  690 .inst   0xce8fb139      //xar v25.16b,v9.16b,v15.16b,#64-20
  691 .inst   0xce950ec9      //xar v9.16b,v22.16b,v21.16b,#64-61
  692 .inst   0xce8f65d6      //xar v22.16b,v14.16b,v15.16b,#64-39
  693 .inst   0xce90bbce      //xar v14.16b,v30.16b,v16.16b,#64-18
  694 
  695 .inst   0xce95085e      //xar v30.16b,v2.16b,v21.16b,#64-62
  696 
  697 .inst   0xce955582      //xar v2.16b,v12.16b,v21.16b,#64-43
  698 .inst   0xce8b9dac      //xar v12.16b,v13.16b,v11.16b,#64-25
  699 .inst   0xce8fe26d      //xar v13.16b,v19.16b,v15.16b,#64-8
  700 .inst   0xce8b22f3      //xar v19.16b,v23.16b,v11.16b,#64-56
  701 .inst   0xce905f97      //xar v23.16b,v28.16b,v16.16b,#64-41
  702 
  703 .inst   0xce8f949c      //xar v28.16b,v4.16b,v15.16b,#64-27
  704 
  705         eor     v0.16b,v0.16b,v16.16b
  706         ldr     x11,[x10],#8
  707 
  708 .inst   0xce8bae4a      //xar v10.16b,   v18.16b,v11.16b,#64-21 // C[1]=A[0][3]
  709 .inst   0xce95c632      //xar v18.16b,v17.16b,v21.16b,#64-15
  710 .inst   0xce94db71      //xar v17.16b,v27.16b,v20.16b,#64-10
  711 .inst   0xce95e8fb      //xar v27.16b,v7.16b,v21.16b,#64-6
  712 .inst   0xce90f747      //xar v7.16b,v26.16b,v16.16b,#64-3
  713 
  714 .inst   0xce94fc3a      //xar v26.16b,v1.16b,v20.16b,#64-1      // *
  715 
  716 .inst   0xce8fcb04      //xar v4.16b,v24.16b,v15.16b,#64-14
  717 .inst   0xce94fbf8      //xar v24.16b,v31.16b,v20.16b,#64-2
  718 .inst   0xce8b251f      //xar v31.16b,v8.16b,v11.16b,#64-55
  719 .inst   0xce944fa8      //xar v8.16b,v29.16b,v20.16b,#64-45
  720 .inst   0xce9070bd      //xar v29.16b,v5.16b,v16.16b,#64-36
  721 
  722 .inst   0xce8b906b      //xar v11.16b,   v3.16b,v11.16b,#64-28  // C[2]=A[1][0]
  723 
  724         ////////////////////////////////////////////////// Chi+Iota
  725         dup     v21.2d,x11                              // borrow C[6]
  726 .inst   0xce22180f      //bcax v15.16b,   v0.16b,v2.16b,v6.16b  // *
  727 .inst   0xce2a08c1      //bcax v1.16b,v6.16b,   v10.16b,   v2.16b       // *
  728 .inst   0xce242842      //bcax v2.16b,v2.16b,v4.16b,v10.16b
  729 .inst   0xce201143      //bcax v3.16b,v10.16b,   v0.16b,v4.16b
  730 .inst   0xce260084      //bcax v4.16b,v4.16b,v6.16b,   v0.16b
  731 
  732 .inst   0xce276565      //bcax v5.16b,v11.16b,   v7.16b,v25.16b // *
  733 .inst   0xce281f26      //bcax v6.16b,   v25.16b,v8.16b,v7.16b  // *
  734 .inst   0xce2920e7      //bcax v7.16b,v7.16b,v9.16b,v8.16b
  735 .inst   0xce2b2508      //bcax v8.16b,v8.16b,v11.16b,   v9.16b
  736 .inst   0xce392d29      //bcax v9.16b,v9.16b,v25.16b,v11.16b
  737 
  738         eor     v0.16b,v15.16b,v21.16b                  // Iota
  739 
  740 .inst   0xce2c6f4a      //bcax v10.16b,   v26.16b,v12.16b,v27.16b       // *
  741 .inst   0xce2d336b      //bcax v11.16b,   v27.16b,v13.16b,v12.16b       // *
  742 .inst   0xce2e358c      //bcax v12.16b,v12.16b,v14.16b,v13.16b
  743 .inst   0xce3a39ad      //bcax v13.16b,v13.16b,v26.16b,v14.16b
  744 .inst   0xce3b69ce      //bcax v14.16b,v14.16b,v27.16b,v26.16b
  745 
  746 .inst   0xce31778f      //bcax v15.16b,   v28.16b,v17.16b,v29.16b       // *
  747 .inst   0xce3247b0      //bcax v16.16b,   v29.16b,v18.16b,v17.16b       // *
  748 .inst   0xce334a31      //bcax v17.16b,v17.16b,v19.16b,v18.16b
  749 .inst   0xce3c4e52      //bcax v18.16b,v18.16b,v28.16b,v19.16b
  750 .inst   0xce3d7273      //bcax v19.16b,v19.16b,v29.16b,v28.16b
  751 
  752 .inst   0xce367fd4      //bcax v20.16b,   v30.16b,v22.16b,v31.16b       // *
  753 .inst   0xce375bf5      //bcax v21.16b,   v31.16b,v23.16b,v22.16b       // *
  754 .inst   0xce385ed6      //bcax v22.16b,v22.16b,v24.16b,v23.16b
  755 .inst   0xce3e62f7      //bcax v23.16b,v23.16b,v30.16b,v24.16b
  756 .inst   0xce3f7b18      //bcax v24.16b,v24.16b,v31.16b,v30.16b
  757         subs    x9,x9,#1
  758         bne     .Loop_ce
  759 
  760         ret
  761 .size   KeccakF1600_ce,.-KeccakF1600_ce
  762 
  763 .type   KeccakF1600_cext,%function
  764 .align  5
  765 KeccakF1600_cext:
  766 .inst   0xd503233f              // paciasp
  767         stp     x29,x30,[sp,#-80]!
  768         add     x29,sp,#0
  769         stp     d8,d9,[sp,#16]          // per ABI requirement
  770         stp     d10,d11,[sp,#32]
  771         stp     d12,d13,[sp,#48]
  772         stp     d14,d15,[sp,#64]
  773         ldp     d0,d1,[x0,#8*0]
  774         ldp     d2,d3,[x0,#8*2]
  775         ldp     d4,d5,[x0,#8*4]
  776         ldp     d6,d7,[x0,#8*6]
  777         ldp     d8,d9,[x0,#8*8]
  778         ldp     d10,d11,[x0,#8*10]
  779         ldp     d12,d13,[x0,#8*12]
  780         ldp     d14,d15,[x0,#8*14]
  781         ldp     d16,d17,[x0,#8*16]
  782         ldp     d18,d19,[x0,#8*18]
  783         ldp     d20,d21,[x0,#8*20]
  784         ldp     d22,d23,[x0,#8*22]
  785         ldr     d24,[x0,#8*24]
  786         bl      KeccakF1600_ce
  787         ldr     x30,[sp,#8]
  788         stp     d0,d1,[x0,#8*0]
  789         stp     d2,d3,[x0,#8*2]
  790         stp     d4,d5,[x0,#8*4]
  791         stp     d6,d7,[x0,#8*6]
  792         stp     d8,d9,[x0,#8*8]
  793         stp     d10,d11,[x0,#8*10]
  794         stp     d12,d13,[x0,#8*12]
  795         stp     d14,d15,[x0,#8*14]
  796         stp     d16,d17,[x0,#8*16]
  797         stp     d18,d19,[x0,#8*18]
  798         stp     d20,d21,[x0,#8*20]
  799         stp     d22,d23,[x0,#8*22]
  800         str     d24,[x0,#8*24]
  801 
  802         ldp     d8,d9,[sp,#16]
  803         ldp     d10,d11,[sp,#32]
  804         ldp     d12,d13,[sp,#48]
  805         ldp     d14,d15,[sp,#64]
  806         ldr     x29,[sp],#80
  807 .inst   0xd50323bf              // autiasp
  808         ret
  809 .size   KeccakF1600_cext,.-KeccakF1600_cext
  810 .globl  SHA3_absorb_cext
  811 .type   SHA3_absorb_cext,%function
  812 .align  5
  813 SHA3_absorb_cext:
  814 .inst   0xd503233f              // paciasp
  815         stp     x29,x30,[sp,#-80]!
  816         add     x29,sp,#0
  817         stp     d8,d9,[sp,#16]          // per ABI requirement
  818         stp     d10,d11,[sp,#32]
  819         stp     d12,d13,[sp,#48]
  820         stp     d14,d15,[sp,#64]
  821         ldp     d0,d1,[x0,#8*0]
  822         ldp     d2,d3,[x0,#8*2]
  823         ldp     d4,d5,[x0,#8*4]
  824         ldp     d6,d7,[x0,#8*6]
  825         ldp     d8,d9,[x0,#8*8]
  826         ldp     d10,d11,[x0,#8*10]
  827         ldp     d12,d13,[x0,#8*12]
  828         ldp     d14,d15,[x0,#8*14]
  829         ldp     d16,d17,[x0,#8*16]
  830         ldp     d18,d19,[x0,#8*18]
  831         ldp     d20,d21,[x0,#8*20]
  832         ldp     d22,d23,[x0,#8*22]
  833         ldr     d24,[x0,#8*24]
  834         b       .Loop_absorb_ce
  835 
  836 .align  4
  837 .Loop_absorb_ce:
  838         subs    x2,x2,x3                // len - bsz
  839         blo     .Labsorbed_ce
  840         ldr     d31,[x1],#8             // *inp++
  841 #ifdef  __AARCH64EB__
  842         rev64   v31.16b,v31.16b
  843 #endif
  844         eor     v0.16b,v0.16b,v31.16b
  845         cmp     x3,#8*(0+2)
  846         blo     .Lprocess_block_ce
  847         ldr     d31,[x1],#8             // *inp++
  848 #ifdef  __AARCH64EB__
  849         rev64   v31.16b,v31.16b
  850 #endif
  851         eor     v1.16b,v1.16b,v31.16b
  852         beq     .Lprocess_block_ce
  853         ldr     d31,[x1],#8             // *inp++
  854 #ifdef  __AARCH64EB__
  855         rev64   v31.16b,v31.16b
  856 #endif
  857         eor     v2.16b,v2.16b,v31.16b
  858         cmp     x3,#8*(2+2)
  859         blo     .Lprocess_block_ce
  860         ldr     d31,[x1],#8             // *inp++
  861 #ifdef  __AARCH64EB__
  862         rev64   v31.16b,v31.16b
  863 #endif
  864         eor     v3.16b,v3.16b,v31.16b
  865         beq     .Lprocess_block_ce
  866         ldr     d31,[x1],#8             // *inp++
  867 #ifdef  __AARCH64EB__
  868         rev64   v31.16b,v31.16b
  869 #endif
  870         eor     v4.16b,v4.16b,v31.16b
  871         cmp     x3,#8*(4+2)
  872         blo     .Lprocess_block_ce
  873         ldr     d31,[x1],#8             // *inp++
  874 #ifdef  __AARCH64EB__
  875         rev64   v31.16b,v31.16b
  876 #endif
  877         eor     v5.16b,v5.16b,v31.16b
  878         beq     .Lprocess_block_ce
  879         ldr     d31,[x1],#8             // *inp++
  880 #ifdef  __AARCH64EB__
  881         rev64   v31.16b,v31.16b
  882 #endif
  883         eor     v6.16b,v6.16b,v31.16b
  884         cmp     x3,#8*(6+2)
  885         blo     .Lprocess_block_ce
  886         ldr     d31,[x1],#8             // *inp++
  887 #ifdef  __AARCH64EB__
  888         rev64   v31.16b,v31.16b
  889 #endif
  890         eor     v7.16b,v7.16b,v31.16b
  891         beq     .Lprocess_block_ce
  892         ldr     d31,[x1],#8             // *inp++
  893 #ifdef  __AARCH64EB__
  894         rev64   v31.16b,v31.16b
  895 #endif
  896         eor     v8.16b,v8.16b,v31.16b
  897         cmp     x3,#8*(8+2)
  898         blo     .Lprocess_block_ce
  899         ldr     d31,[x1],#8             // *inp++
  900 #ifdef  __AARCH64EB__
  901         rev64   v31.16b,v31.16b
  902 #endif
  903         eor     v9.16b,v9.16b,v31.16b
  904         beq     .Lprocess_block_ce
  905         ldr     d31,[x1],#8             // *inp++
  906 #ifdef  __AARCH64EB__
  907         rev64   v31.16b,v31.16b
  908 #endif
  909         eor     v10.16b,v10.16b,v31.16b
  910         cmp     x3,#8*(10+2)
  911         blo     .Lprocess_block_ce
  912         ldr     d31,[x1],#8             // *inp++
  913 #ifdef  __AARCH64EB__
  914         rev64   v31.16b,v31.16b
  915 #endif
  916         eor     v11.16b,v11.16b,v31.16b
  917         beq     .Lprocess_block_ce
  918         ldr     d31,[x1],#8             // *inp++
  919 #ifdef  __AARCH64EB__
  920         rev64   v31.16b,v31.16b
  921 #endif
  922         eor     v12.16b,v12.16b,v31.16b
  923         cmp     x3,#8*(12+2)
  924         blo     .Lprocess_block_ce
  925         ldr     d31,[x1],#8             // *inp++
  926 #ifdef  __AARCH64EB__
  927         rev64   v31.16b,v31.16b
  928 #endif
  929         eor     v13.16b,v13.16b,v31.16b
  930         beq     .Lprocess_block_ce
  931         ldr     d31,[x1],#8             // *inp++
  932 #ifdef  __AARCH64EB__
  933         rev64   v31.16b,v31.16b
  934 #endif
  935         eor     v14.16b,v14.16b,v31.16b
  936         cmp     x3,#8*(14+2)
  937         blo     .Lprocess_block_ce
  938         ldr     d31,[x1],#8             // *inp++
  939 #ifdef  __AARCH64EB__
  940         rev64   v31.16b,v31.16b
  941 #endif
  942         eor     v15.16b,v15.16b,v31.16b
  943         beq     .Lprocess_block_ce
  944         ldr     d31,[x1],#8             // *inp++
  945 #ifdef  __AARCH64EB__
  946         rev64   v31.16b,v31.16b
  947 #endif
  948         eor     v16.16b,v16.16b,v31.16b
  949         cmp     x3,#8*(16+2)
  950         blo     .Lprocess_block_ce
  951         ldr     d31,[x1],#8             // *inp++
  952 #ifdef  __AARCH64EB__
  953         rev64   v31.16b,v31.16b
  954 #endif
  955         eor     v17.16b,v17.16b,v31.16b
  956         beq     .Lprocess_block_ce
  957         ldr     d31,[x1],#8             // *inp++
  958 #ifdef  __AARCH64EB__
  959         rev64   v31.16b,v31.16b
  960 #endif
  961         eor     v18.16b,v18.16b,v31.16b
  962         cmp     x3,#8*(18+2)
  963         blo     .Lprocess_block_ce
  964         ldr     d31,[x1],#8             // *inp++
  965 #ifdef  __AARCH64EB__
  966         rev64   v31.16b,v31.16b
  967 #endif
  968         eor     v19.16b,v19.16b,v31.16b
  969         beq     .Lprocess_block_ce
  970         ldr     d31,[x1],#8             // *inp++
  971 #ifdef  __AARCH64EB__
  972         rev64   v31.16b,v31.16b
  973 #endif
  974         eor     v20.16b,v20.16b,v31.16b
  975         cmp     x3,#8*(20+2)
  976         blo     .Lprocess_block_ce
  977         ldr     d31,[x1],#8             // *inp++
  978 #ifdef  __AARCH64EB__
  979         rev64   v31.16b,v31.16b
  980 #endif
  981         eor     v21.16b,v21.16b,v31.16b
  982         beq     .Lprocess_block_ce
  983         ldr     d31,[x1],#8             // *inp++
  984 #ifdef  __AARCH64EB__
  985         rev64   v31.16b,v31.16b
  986 #endif
  987         eor     v22.16b,v22.16b,v31.16b
  988         cmp     x3,#8*(22+2)
  989         blo     .Lprocess_block_ce
  990         ldr     d31,[x1],#8             // *inp++
  991 #ifdef  __AARCH64EB__
  992         rev64   v31.16b,v31.16b
  993 #endif
  994         eor     v23.16b,v23.16b,v31.16b
  995         beq     .Lprocess_block_ce
  996         ldr     d31,[x1],#8             // *inp++
  997 #ifdef  __AARCH64EB__
  998         rev64   v31.16b,v31.16b
  999 #endif
 1000         eor     v24.16b,v24.16b,v31.16b
 1001 
 1002 .Lprocess_block_ce:
 1003 
 1004         bl      KeccakF1600_ce
 1005 
 1006         b       .Loop_absorb_ce
 1007 
 1008 .align  4
 1009 .Labsorbed_ce:
 1010         stp     d0,d1,[x0,#8*0]
 1011         stp     d2,d3,[x0,#8*2]
 1012         stp     d4,d5,[x0,#8*4]
 1013         stp     d6,d7,[x0,#8*6]
 1014         stp     d8,d9,[x0,#8*8]
 1015         stp     d10,d11,[x0,#8*10]
 1016         stp     d12,d13,[x0,#8*12]
 1017         stp     d14,d15,[x0,#8*14]
 1018         stp     d16,d17,[x0,#8*16]
 1019         stp     d18,d19,[x0,#8*18]
 1020         stp     d20,d21,[x0,#8*20]
 1021         stp     d22,d23,[x0,#8*22]
 1022         str     d24,[x0,#8*24]
 1023         add     x0,x2,x3                // return value
 1024 
 1025         ldp     d8,d9,[sp,#16]
 1026         ldp     d10,d11,[sp,#32]
 1027         ldp     d12,d13,[sp,#48]
 1028         ldp     d14,d15,[sp,#64]
 1029         ldp     x29,x30,[sp],#80
 1030 .inst   0xd50323bf              // autiasp
 1031         ret
 1032 .size   SHA3_absorb_cext,.-SHA3_absorb_cext
 1033 .globl  SHA3_squeeze_cext
 1034 .type   SHA3_squeeze_cext,%function
 1035 .align  5
 1036 SHA3_squeeze_cext:
 1037 .inst   0xd503233f              // paciasp
 1038         stp     x29,x30,[sp,#-16]!
 1039         add     x29,sp,#0
 1040         mov     x9,x0
 1041         mov     x10,x3
 1042 
 1043 .Loop_squeeze_ce:
 1044         ldr     x4,[x9],#8
 1045         cmp     x2,#8
 1046         blo     .Lsqueeze_tail_ce
 1047 #ifdef  __AARCH64EB__
 1048         rev     x4,x4
 1049 #endif
 1050         str     x4,[x1],#8
 1051         beq     .Lsqueeze_done_ce
 1052 
 1053         sub     x2,x2,#8
 1054         subs    x10,x10,#8
 1055         bhi     .Loop_squeeze_ce
 1056 
 1057         bl      KeccakF1600_cext
 1058         ldr     x30,[sp,#8]
 1059         mov     x9,x0
 1060         mov     x10,x3
 1061         b       .Loop_squeeze_ce
 1062 
 1063 .align  4
 1064 .Lsqueeze_tail_ce:
 1065         strb    w4,[x1],#1
 1066         lsr     x4,x4,#8
 1067         subs    x2,x2,#1
 1068         beq     .Lsqueeze_done_ce
 1069         strb    w4,[x1],#1
 1070         lsr     x4,x4,#8
 1071         subs    x2,x2,#1
 1072         beq     .Lsqueeze_done_ce
 1073         strb    w4,[x1],#1
 1074         lsr     x4,x4,#8
 1075         subs    x2,x2,#1
 1076         beq     .Lsqueeze_done_ce
 1077         strb    w4,[x1],#1
 1078         lsr     x4,x4,#8
 1079         subs    x2,x2,#1
 1080         beq     .Lsqueeze_done_ce
 1081         strb    w4,[x1],#1
 1082         lsr     x4,x4,#8
 1083         subs    x2,x2,#1
 1084         beq     .Lsqueeze_done_ce
 1085         strb    w4,[x1],#1
 1086         lsr     x4,x4,#8
 1087         subs    x2,x2,#1
 1088         beq     .Lsqueeze_done_ce
 1089         strb    w4,[x1],#1
 1090 
 1091 .Lsqueeze_done_ce:
 1092         ldr     x29,[sp],#16
 1093 .inst   0xd50323bf              // autiasp
 1094         ret
 1095 .size   SHA3_squeeze_cext,.-SHA3_squeeze_cext
 1096 .byte   75,101,99,99,97,107,45,49,54,48,48,32,97,98,115,111,114,98,32,97,110,100,32,115,113,117,101,101,122,101,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
 1097 .align  2

Cache object: 9a70c2528e13f4e6bea593f05c554b21


[ 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.