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
116 eor v3.16b,v3.16b,v5.16b
117 ext v5.16b,v0.16b,v5.16b,#12
118 eor v3.16b,v3.16b,v5.16b
119 ext v5.16b,v0.16b,v5.16b,#12
120 eor v3.16b,v3.16b,v5.16b
123 eor v5.16b,v5.16b,v4.16b
124 eor v6.16b,v6.16b,v1.16b
125 ext v4.16b,v0.16b,v4.16b,#12
127 eor v4.16b,v4.16b,v5.16b
128 eor v3.16b,v3.16b,v6.16b
129 eor v4.16b,v4.16b,v6.16b
145 tbl v6.16b,{v4.16b},v2.16b
146 ext v5.16b,v0.16b,v3.16b,#12
151 eor v3.16b,v3.16b,v5.16b
152 ext v5.16b,v0.16b,v5.16b,#12
153 eor v3.16b,v3.16b,v5.16b
154 ext v5.16b,v0.16b,v5.16b,#12
155 eor v6.16b,v6.16b,v1.16b
156 eor v3.16b,v3.16b,v5.16b
158 eor v3.16b,v3.16b,v6.16b
162 dup v6.4s,v3.s[3] // just splat
163 ext v5.16b,v0.16b,v4.16b,#12
166 eor v4.16b,v4.16b,v5.16b
167 ext v5.16b,v0.16b,v5.16b,#12
168 eor v4.16b,v4.16b,v5.16b
169 ext v5.16b,v0.16b,v5.16b,#12
170 eor v4.16b,v4.16b,v5.16b
172 eor v4.16b,v4.16b,v6.16b
180 mov x0,x3 // return value
183 .size aes_v8_set_encrypt_key,.-aes_v8_set_encrypt_key
185 .globl aes_v8_set_decrypt_key
186 .type aes_v8_set_decrypt_key,%function
188 aes_v8_set_decrypt_key:
189 .inst 0xd503233f // paciasp
190 stp x29,x30,[sp,#-16]!
197 sub x2,x2,#240 // restore original x2
199 add x0,x2,x12,lsl#4 // end of key schedule
220 eor x0,x0,x0 // return value
223 .inst 0xd50323bf // autiasp
225 .size aes_v8_set_decrypt_key,.-aes_v8_set_decrypt_key
226 .globl aes_v8_encrypt
227 .type aes_v8_encrypt,%function
250 eor v2.16b,v2.16b,v0.16b
254 .size aes_v8_encrypt,.-aes_v8_encrypt
255 .globl aes_v8_decrypt
256 .type aes_v8_decrypt,%function
279 eor v2.16b,v2.16b,v0.16b
283 .size aes_v8_decrypt,.-aes_v8_decrypt
284 .globl aes_v8_cbc_encrypt
285 .type aes_v8_cbc_encrypt,%function
288 stp x29,x30,[sp,#-16]!
295 cmp w5,#0 // en- or decrypting?
301 ld1 {v16.4s,v17.4s},[x3] // load key schedule...
303 add x7,x3,x5,lsl#4 // pointer to last 7 round keys
305 ld1 {v18.4s,v19.4s},[x7],#32
306 ld1 {v20.4s,v21.4s},[x7],#32
307 ld1 {v22.4s,v23.4s},[x7],#32
315 eor v0.16b,v0.16b,v6.16b
316 eor v5.16b,v16.16b,v7.16b
319 ld1 {v2.4s,v3.4s},[x7]
333 st1 {v6.16b},[x1],#16
365 ld1 {v16.16b},[x0],x8
368 eor v16.16b,v16.16b,v5.16b
371 ld1 {v17.4s},[x7] // re-pre-load rndkey[1]
375 eor v6.16b,v0.16b,v7.16b
378 st1 {v6.16b},[x1],#16
383 ld1 {v2.4s,v3.4s},[x7]
390 st1 {v6.16b},[x1],#16
404 ld1 {v16.16b},[x0],x8
411 eor v16.16b,v16.16b,v5.16b
413 eor v6.16b,v0.16b,v7.16b
414 b.hs .Loop_cbc_enc128
416 st1 {v6.16b},[x1],#16
420 ld1 {v18.16b},[x0],#16
421 subs x2,x2,#32 // bias
423 orr v3.16b,v0.16b,v0.16b
424 orr v1.16b,v0.16b,v0.16b
425 orr v19.16b,v18.16b,v18.16b
428 orr v1.16b,v18.16b,v18.16b
429 ld1 {v18.16b},[x0],#16
430 orr v2.16b,v0.16b,v0.16b
431 orr v3.16b,v1.16b,v1.16b
432 orr v19.16b,v18.16b,v18.16b
440 aesimc v18.16b,v18.16b
441 ld1 {v16.4s},[x7],#16
448 aesimc v18.16b,v18.16b
449 ld1 {v17.4s},[x7],#16
457 aesimc v18.16b,v18.16b
458 eor v4.16b,v6.16b,v7.16b
460 eor v5.16b,v2.16b,v7.16b
461 csel x6,x2,x6,lo // x6, w6, is zero at this point
467 aesimc v18.16b,v18.16b
468 eor v17.16b,v3.16b,v7.16b
469 add x0,x0,x6 // x0 is adjusted in such way that
470 // at exit from the loop v1.16b-v18.16b
471 // are loaded with last "words"
472 orr v6.16b,v19.16b,v19.16b
479 aesimc v18.16b,v18.16b
480 ld1 {v2.16b},[x0],#16
486 aesimc v18.16b,v18.16b
487 ld1 {v3.16b},[x0],#16
493 aesimc v18.16b,v18.16b
494 ld1 {v19.16b},[x0],#16
498 ld1 {v16.4s},[x7],#16 // re-pre-load rndkey[0]
500 eor v4.16b,v4.16b,v0.16b
501 eor v5.16b,v5.16b,v1.16b
502 eor v18.16b,v18.16b,v17.16b
503 ld1 {v17.4s},[x7],#16 // re-pre-load rndkey[1]
504 st1 {v4.16b},[x1],#16
505 orr v0.16b,v2.16b,v2.16b
506 st1 {v5.16b},[x1],#16
507 orr v1.16b,v3.16b,v3.16b
508 st1 {v18.16b},[x1],#16
509 orr v18.16b,v19.16b,v19.16b
520 aesimc v18.16b,v18.16b
521 ld1 {v16.4s},[x7],#16
526 aesimc v18.16b,v18.16b
527 ld1 {v17.4s},[x7],#16
533 aesimc v18.16b,v18.16b
537 aesimc v18.16b,v18.16b
541 aesimc v18.16b,v18.16b
546 aesimc v18.16b,v18.16b
547 eor v5.16b,v6.16b,v7.16b
551 aesimc v18.16b,v18.16b
552 eor v17.16b,v3.16b,v7.16b
556 eor v5.16b,v5.16b,v1.16b
557 eor v17.16b,v17.16b,v18.16b
558 orr v6.16b,v19.16b,v19.16b
559 st1 {v5.16b},[x1],#16
560 st1 {v17.16b},[x1],#16
564 eor v5.16b,v5.16b,v18.16b
565 orr v6.16b,v19.16b,v19.16b
566 st1 {v5.16b},[x1],#16
573 .size aes_v8_cbc_encrypt,.-aes_v8_cbc_encrypt
574 .globl aes_v8_ctr32_encrypt_blocks
575 .type aes_v8_ctr32_encrypt_blocks,%function
577 aes_v8_ctr32_encrypt_blocks:
578 stp x29,x30,[sp,#-16]!
588 ld1 {v16.4s,v17.4s},[x3] // load key schedule...
592 add x7,x3,x5,lsl#4 // pointer to last 5 round keys
594 ld1 {v20.4s,v21.4s},[x7],#32
595 ld1 {v22.4s,v23.4s},[x7],#32
604 orr v6.16b,v0.16b,v0.16b
608 orr v1.16b,v6.16b,v6.16b
613 orr v18.16b,v6.16b,v6.16b
623 aesmc v18.16b,v18.16b
624 ld1 {v16.4s},[x7],#16
631 aesmc v18.16b,v18.16b
632 ld1 {v17.4s},[x7],#16
639 ld1 {v2.16b},[x0],#16
642 aesmc v18.16b,v18.16b
643 ld1 {v3.16b},[x0],#16
649 ld1 {v19.16b},[x0],#16
652 aesmc v17.16b,v18.16b
657 eor v2.16b,v2.16b,v7.16b
660 aesmc v17.16b,v17.16b
661 eor v3.16b,v3.16b,v7.16b
667 eor v19.16b,v19.16b,v7.16b
670 aesmc v17.16b,v17.16b
671 orr v0.16b,v6.16b,v6.16b
679 orr v1.16b,v6.16b,v6.16b
682 aesmc v17.16b,v17.16b
683 orr v18.16b,v6.16b,v6.16b
689 eor v2.16b,v2.16b,v4.16b
690 ld1 {v16.4s},[x7],#16 // re-pre-load rndkey[0]
691 st1 {v2.16b},[x1],#16
692 eor v3.16b,v3.16b,v5.16b
694 st1 {v3.16b},[x1],#16
695 eor v19.16b,v19.16b,v17.16b
696 ld1 {v17.4s},[x7],#16 // re-pre-load rndkey[1]
697 st1 {v19.16b},[x1],#16
711 ld1 {v16.4s},[x7],#16
717 ld1 {v17.4s},[x7],#16
728 ld1 {v2.16b},[x0],x12
738 eor v2.16b,v2.16b,v7.16b
743 eor v3.16b,v3.16b,v7.16b
748 eor v2.16b,v2.16b,v0.16b
749 eor v3.16b,v3.16b,v1.16b
750 st1 {v2.16b},[x1],#16
757 .size aes_v8_ctr32_encrypt_blocks,.-aes_v8_ctr32_encrypt_blocks