2 /* Do not modify. This file is auto-generated from aesv8-armx.pl. */
5 #if __ARM_MAX_ARCH__>=7
9 .long 0x01,0x01,0x01,0x01
10 .long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d // rotate-n-splat
11 .long 0x1b,0x1b,0x1b,0x1b
13 .globl aes_v8_set_encrypt_key
14 .type aes_v8_set_encrypt_key,%function
16 aes_v8_set_encrypt_key:
18 stp x29,x30,[sp,#-16]!
36 eor v0.16b,v0.16b,v0.16b
39 ld1 {v1.4s,v2.4s},[x3],#32
47 tbl v6.16b,{v3.16b},v2.16b
48 ext v5.16b,v0.16b,v3.16b,#12
53 eor v3.16b,v3.16b,v5.16b
54 ext v5.16b,v0.16b,v5.16b,#12
55 eor v3.16b,v3.16b,v5.16b
56 ext v5.16b,v0.16b,v5.16b,#12
57 eor v6.16b,v6.16b,v1.16b
58 eor v3.16b,v3.16b,v5.16b
60 eor v3.16b,v3.16b,v6.16b
65 tbl v6.16b,{v3.16b},v2.16b
66 ext v5.16b,v0.16b,v3.16b,#12
70 eor v3.16b,v3.16b,v5.16b
71 ext v5.16b,v0.16b,v5.16b,#12
72 eor v3.16b,v3.16b,v5.16b
73 ext v5.16b,v0.16b,v5.16b,#12
74 eor v6.16b,v6.16b,v1.16b
75 eor v3.16b,v3.16b,v5.16b
77 eor v3.16b,v3.16b,v6.16b
79 tbl v6.16b,{v3.16b},v2.16b
80 ext v5.16b,v0.16b,v3.16b,#12
84 eor v3.16b,v3.16b,v5.16b
85 ext v5.16b,v0.16b,v5.16b,#12
86 eor v3.16b,v3.16b,v5.16b
87 ext v5.16b,v0.16b,v5.16b,#12
88 eor v6.16b,v6.16b,v1.16b
89 eor v3.16b,v3.16b,v5.16b
90 eor v3.16b,v3.16b,v6.16b
100 movi v6.16b,#8 // borrow v6.16b
102 sub v2.16b,v2.16b,v6.16b // adjust the mask
105 tbl v6.16b,{v4.16b},v2.16b
106 ext v5.16b,v0.16b,v3.16b,#12
111 eor v3.16b,v3.16b,v5.16b
112 ext v5.16b,v0.16b,v5.16b,#12
113 eor v3.16b,v3.16b,v5.16b
114 ext v5.16b,v0.16b,v5.16b,#12
115 eor v3.16b,v3.16b,v5.16b
118 eor v5.16b,v5.16b,v4.16b
119 eor v6.16b,v6.16b,v1.16b
120 ext v4.16b,v0.16b,v4.16b,#12
122 eor v4.16b,v4.16b,v5.16b
123 eor v3.16b,v3.16b,v6.16b
124 eor v4.16b,v4.16b,v6.16b
140 tbl v6.16b,{v4.16b},v2.16b
141 ext v5.16b,v0.16b,v3.16b,#12
146 eor v3.16b,v3.16b,v5.16b
147 ext v5.16b,v0.16b,v5.16b,#12
148 eor v3.16b,v3.16b,v5.16b
149 ext v5.16b,v0.16b,v5.16b,#12
150 eor v6.16b,v6.16b,v1.16b
151 eor v3.16b,v3.16b,v5.16b
153 eor v3.16b,v3.16b,v6.16b
157 dup v6.4s,v3.s[3] // just splat
158 ext v5.16b,v0.16b,v4.16b,#12
161 eor v4.16b,v4.16b,v5.16b
162 ext v5.16b,v0.16b,v5.16b,#12
163 eor v4.16b,v4.16b,v5.16b
164 ext v5.16b,v0.16b,v5.16b,#12
165 eor v4.16b,v4.16b,v5.16b
167 eor v4.16b,v4.16b,v6.16b
175 mov x0,x3 // return value
178 .size aes_v8_set_encrypt_key,.-aes_v8_set_encrypt_key
180 .globl aes_v8_set_decrypt_key
181 .type aes_v8_set_decrypt_key,%function
183 aes_v8_set_decrypt_key:
184 stp x29,x30,[sp,#-16]!
191 sub x2,x2,#240 // restore original x2
193 add x0,x2,x12,lsl#4 // end of key schedule
214 eor x0,x0,x0 // return value
218 .size aes_v8_set_decrypt_key,.-aes_v8_set_decrypt_key
219 .globl aes_v8_encrypt
220 .type aes_v8_encrypt,%function
243 eor v2.16b,v2.16b,v0.16b
247 .size aes_v8_encrypt,.-aes_v8_encrypt
248 .globl aes_v8_decrypt
249 .type aes_v8_decrypt,%function
272 eor v2.16b,v2.16b,v0.16b
276 .size aes_v8_decrypt,.-aes_v8_decrypt
277 .globl aes_v8_cbc_encrypt
278 .type aes_v8_cbc_encrypt,%function
281 stp x29,x30,[sp,#-16]!
288 cmp w5,#0 // en- or decrypting?
294 ld1 {v16.4s-v17.4s},[x3] // load key schedule...
296 add x7,x3,x5,lsl#4 // pointer to last 7 round keys
298 ld1 {v18.4s-v19.4s},[x7],#32
299 ld1 {v20.4s-v21.4s},[x7],#32
300 ld1 {v22.4s-v23.4s},[x7],#32
308 eor v0.16b,v0.16b,v6.16b
309 eor v5.16b,v16.16b,v7.16b
312 ld1 {v2.4s-v3.4s},[x7]
326 st1 {v6.16b},[x1],#16
358 ld1 {v16.16b},[x0],x8
361 eor v16.16b,v16.16b,v5.16b
364 ld1 {v17.4s},[x7] // re-pre-load rndkey[1]
368 eor v6.16b,v0.16b,v7.16b
371 st1 {v6.16b},[x1],#16
376 ld1 {v2.4s-v3.4s},[x7]
383 st1 {v6.16b},[x1],#16
397 ld1 {v16.16b},[x0],x8
404 eor v16.16b,v16.16b,v5.16b
406 eor v6.16b,v0.16b,v7.16b
407 b.hs .Loop_cbc_enc128
409 st1 {v6.16b},[x1],#16
413 ld1 {v18.16b},[x0],#16
414 subs x2,x2,#32 // bias
416 orr v3.16b,v0.16b,v0.16b
417 orr v1.16b,v0.16b,v0.16b
418 orr v19.16b,v18.16b,v18.16b
421 orr v1.16b,v18.16b,v18.16b
422 ld1 {v18.16b},[x0],#16
423 orr v2.16b,v0.16b,v0.16b
424 orr v3.16b,v1.16b,v1.16b
425 orr v19.16b,v18.16b,v18.16b
433 aesimc v18.16b,v18.16b
434 ld1 {v16.4s},[x7],#16
441 aesimc v18.16b,v18.16b
442 ld1 {v17.4s},[x7],#16
450 aesimc v18.16b,v18.16b
451 eor v4.16b,v6.16b,v7.16b
453 eor v5.16b,v2.16b,v7.16b
454 csel x6,x2,x6,lo // x6, w6, is zero at this point
460 aesimc v18.16b,v18.16b
461 eor v17.16b,v3.16b,v7.16b
462 add x0,x0,x6 // x0 is adjusted in such way that
463 // at exit from the loop v1.16b-v18.16b
464 // are loaded with last "words"
465 orr v6.16b,v19.16b,v19.16b
472 aesimc v18.16b,v18.16b
473 ld1 {v2.16b},[x0],#16
479 aesimc v18.16b,v18.16b
480 ld1 {v3.16b},[x0],#16
486 aesimc v18.16b,v18.16b
487 ld1 {v19.16b},[x0],#16
491 ld1 {v16.4s},[x7],#16 // re-pre-load rndkey[0]
493 eor v4.16b,v4.16b,v0.16b
494 eor v5.16b,v5.16b,v1.16b
495 eor v18.16b,v18.16b,v17.16b
496 ld1 {v17.4s},[x7],#16 // re-pre-load rndkey[1]
497 st1 {v4.16b},[x1],#16
498 orr v0.16b,v2.16b,v2.16b
499 st1 {v5.16b},[x1],#16
500 orr v1.16b,v3.16b,v3.16b
501 st1 {v18.16b},[x1],#16
502 orr v18.16b,v19.16b,v19.16b
513 aesimc v18.16b,v18.16b
514 ld1 {v16.4s},[x7],#16
519 aesimc v18.16b,v18.16b
520 ld1 {v17.4s},[x7],#16
526 aesimc v18.16b,v18.16b
530 aesimc v18.16b,v18.16b
534 aesimc v18.16b,v18.16b
539 aesimc v18.16b,v18.16b
540 eor v5.16b,v6.16b,v7.16b
544 aesimc v18.16b,v18.16b
545 eor v17.16b,v3.16b,v7.16b
549 eor v5.16b,v5.16b,v1.16b
550 eor v17.16b,v17.16b,v18.16b
551 orr v6.16b,v19.16b,v19.16b
552 st1 {v5.16b},[x1],#16
553 st1 {v17.16b},[x1],#16
557 eor v5.16b,v5.16b,v18.16b
558 orr v6.16b,v19.16b,v19.16b
559 st1 {v5.16b},[x1],#16
566 .size aes_v8_cbc_encrypt,.-aes_v8_cbc_encrypt
567 .globl aes_v8_ctr32_encrypt_blocks
568 .type aes_v8_ctr32_encrypt_blocks,%function
570 aes_v8_ctr32_encrypt_blocks:
571 stp x29,x30,[sp,#-16]!
578 ld1 {v16.4s-v17.4s},[x3] // load key schedule...
582 add x7,x3,x5,lsl#4 // pointer to last 5 round keys
584 ld1 {v20.4s-v21.4s},[x7],#32
585 ld1 {v22.4s-v23.4s},[x7],#32
593 orr v1.16b,v0.16b,v0.16b
595 orr v18.16b,v0.16b,v0.16b
597 orr v6.16b,v0.16b,v0.16b
613 aesmc v18.16b,v18.16b
614 ld1 {v16.4s},[x7],#16
621 aesmc v18.16b,v18.16b
622 ld1 {v17.4s},[x7],#16
629 ld1 {v2.16b},[x0],#16
630 orr v0.16b,v6.16b,v6.16b
632 aesmc v18.16b,v18.16b
633 ld1 {v3.16b},[x0],#16
634 orr v1.16b,v6.16b,v6.16b
639 ld1 {v19.16b},[x0],#16
642 aesmc v17.16b,v18.16b
643 orr v18.16b,v6.16b,v6.16b
649 eor v2.16b,v2.16b,v7.16b
652 aesmc v17.16b,v17.16b
653 eor v3.16b,v3.16b,v7.16b
659 eor v19.16b,v19.16b,v7.16b
662 aesmc v17.16b,v17.16b
672 aesmc v17.16b,v17.16b
679 eor v2.16b,v2.16b,v4.16b
680 ld1 {v16.4s},[x7],#16 // re-pre-load rndkey[0]
681 st1 {v2.16b},[x1],#16
682 eor v3.16b,v3.16b,v5.16b
684 st1 {v3.16b},[x1],#16
685 eor v19.16b,v19.16b,v17.16b
686 ld1 {v17.4s},[x7],#16 // re-pre-load rndkey[1]
687 st1 {v19.16b},[x1],#16
701 ld1 {v16.4s},[x7],#16
707 ld1 {v17.4s},[x7],#16
718 ld1 {v2.16b},[x0],x12
728 eor v2.16b,v2.16b,v7.16b
733 eor v3.16b,v3.16b,v7.16b
738 eor v2.16b,v2.16b,v0.16b
739 eor v3.16b,v3.16b,v1.16b
740 st1 {v2.16b},[x1],#16
747 .size aes_v8_ctr32_encrypt_blocks,.-aes_v8_ctr32_encrypt_blocks