1#include "arm_arch.h" 2#include "arm_asm.h" 3 4#if __ARM_MAX_ARCH__>=7 5.text 6.arch armv7-a 7.fpu neon 8.code 32 9.align 5 10rcon: 11.long 0x01,0x01,0x01,0x01 12.long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d @ rotate-n-splat 13.long 0x1b,0x1b,0x1b,0x1b 14 15.globl aes_v8_set_encrypt_key 16.type aes_v8_set_encrypt_key,%function 17.align 5 18aes_v8_set_encrypt_key: 19.Lenc_key: 20 mov r3,#-1 21 cmp r0,#0 22 beq .Lenc_key_abort 23 cmp r2,#0 24 beq .Lenc_key_abort 25 mov r3,#-2 26 cmp r1,#128 27 blt .Lenc_key_abort 28 cmp r1,#256 29 bgt .Lenc_key_abort 30 tst r1,#0x3f 31 bne .Lenc_key_abort 32 33 adr r3,rcon 34 cmp r1,#192 35 36 veor q0,q0,q0 37 vld1.8 {q3},[r0]! 38 mov r1,#8 @ reuse r1 39 vld1.32 {q1,q2},[r3]! 40 41 blt .Loop128 42 beq .L192 43 b .L256 44 45.align 4 46.Loop128: 47 vtbl.8 d20,{q3},d4 48 vtbl.8 d21,{q3},d5 49 vext.8 q9,q0,q3,#12 50 vst1.32 {q3},[r2]! 51 .inst 0xf3f04300 @ aese q10,q0 52 subs r1,r1,#1 53 54 veor q3,q3,q9 55 vext.8 q9,q0,q9,#12 56 veor q3,q3,q9 57 vext.8 q9,q0,q9,#12 58 veor q10,q10,q1 59 veor q3,q3,q9 60 vshl.u8 q1,q1,#1 61 veor q3,q3,q10 62 bne .Loop128 63 64 vld1.32 {q1},[r3] 65 66 vtbl.8 d20,{q3},d4 67 vtbl.8 d21,{q3},d5 68 vext.8 q9,q0,q3,#12 69 vst1.32 {q3},[r2]! 70 .inst 0xf3f04300 @ aese q10,q0 71 72 veor q3,q3,q9 73 vext.8 q9,q0,q9,#12 74 veor q3,q3,q9 75 vext.8 q9,q0,q9,#12 76 veor q10,q10,q1 77 veor q3,q3,q9 78 vshl.u8 q1,q1,#1 79 veor q3,q3,q10 80 81 vtbl.8 d20,{q3},d4 82 vtbl.8 d21,{q3},d5 83 vext.8 q9,q0,q3,#12 84 vst1.32 {q3},[r2]! 85 .inst 0xf3f04300 @ aese q10,q0 86 87 veor q3,q3,q9 88 vext.8 q9,q0,q9,#12 89 veor q3,q3,q9 90 vext.8 q9,q0,q9,#12 91 veor q10,q10,q1 92 veor q3,q3,q9 93 veor q3,q3,q10 94 vst1.32 {q3},[r2] 95 add r2,r2,#0x50 96 97 mov r12,#10 98 b .Ldone 99 100.align 4 101.L192: 102 vld1.8 {d16},[r0]! 103 vmov.i8 q10,#8 @ borrow q10 104 vst1.32 {q3},[r2]! 105 vsub.i8 q2,q2,q10 @ adjust the mask 106 107.Loop192: 108 vtbl.8 d20,{q8},d4 109 vtbl.8 d21,{q8},d5 110 vext.8 q9,q0,q3,#12 111 vst1.32 {d16},[r2]! 112 .inst 0xf3f04300 @ aese q10,q0 113 subs r1,r1,#1 114 115 veor q3,q3,q9 116 vext.8 q9,q0,q9,#12 117 veor q3,q3,q9 118 vext.8 q9,q0,q9,#12 119 veor q3,q3,q9 120 121 vdup.32 q9,d7[1] 122 veor q9,q9,q8 123 veor q10,q10,q1 124 vext.8 q8,q0,q8,#12 125 vshl.u8 q1,q1,#1 126 veor q8,q8,q9 127 veor q3,q3,q10 128 veor q8,q8,q10 129 vst1.32 {q3},[r2]! 130 bne .Loop192 131 132 mov r12,#12 133 add r2,r2,#0x20 134 b .Ldone 135 136.align 4 137.L256: 138 vld1.8 {q8},[r0] 139 mov r1,#7 140 mov r12,#14 141 vst1.32 {q3},[r2]! 142 143.Loop256: 144 vtbl.8 d20,{q8},d4 145 vtbl.8 d21,{q8},d5 146 vext.8 q9,q0,q3,#12 147 vst1.32 {q8},[r2]! 148 .inst 0xf3f04300 @ aese q10,q0 149 subs r1,r1,#1 150 151 veor q3,q3,q9 152 vext.8 q9,q0,q9,#12 153 veor q3,q3,q9 154 vext.8 q9,q0,q9,#12 155 veor q10,q10,q1 156 veor q3,q3,q9 157 vshl.u8 q1,q1,#1 158 veor q3,q3,q10 159 vst1.32 {q3},[r2]! 160 beq .Ldone 161 162 vdup.32 q10,d7[1] 163 vext.8 q9,q0,q8,#12 164 .inst 0xf3f04300 @ aese q10,q0 165 166 veor q8,q8,q9 167 vext.8 q9,q0,q9,#12 168 veor q8,q8,q9 169 vext.8 q9,q0,q9,#12 170 veor q8,q8,q9 171 172 veor q8,q8,q10 173 b .Loop256 174 175.Ldone: 176 str r12,[r2] 177 mov r3,#0 178 179.Lenc_key_abort: 180 mov r0,r3 @ return value 181 182 RET 183.size aes_v8_set_encrypt_key,.-aes_v8_set_encrypt_key 184 185.globl aes_v8_set_decrypt_key 186.type aes_v8_set_decrypt_key,%function 187.align 5 188aes_v8_set_decrypt_key: 189 stmdb sp!,{r4,lr} 190 bl .Lenc_key 191 192 cmp r0,#0 193 bne .Ldec_key_abort 194 195 sub r2,r2,#240 @ restore original r2 196 mov r4,#-16 197 add r0,r2,r12,lsl#4 @ end of key schedule 198 199 vld1.32 {q0},[r2] 200 vld1.32 {q1},[r0] 201 vst1.32 {q0},[r0],r4 202 vst1.32 {q1},[r2]! 203 204.Loop_imc: 205 vld1.32 {q0},[r2] 206 vld1.32 {q1},[r0] 207 .inst 0xf3b003c0 @ aesimc q0,q0 208 .inst 0xf3b023c2 @ aesimc q1,q1 209 vst1.32 {q0},[r0],r4 210 vst1.32 {q1},[r2]! 211 cmp r0,r2 212 bhi .Loop_imc 213 214 vld1.32 {q0},[r2] 215 .inst 0xf3b003c0 @ aesimc q0,q0 216 vst1.32 {q0},[r0] 217 218 eor r0,r0,r0 @ return value 219.Ldec_key_abort: 220 ldmia sp!,{r4,pc} 221.size aes_v8_set_decrypt_key,.-aes_v8_set_decrypt_key 222.globl aes_v8_encrypt 223.type aes_v8_encrypt,%function 224.align 5 225aes_v8_encrypt: 226 ldr r3,[r2,#240] 227 vld1.32 {q0},[r2]! 228 vld1.8 {q2},[r0] 229 sub r3,r3,#2 230 vld1.32 {q1},[r2]! 231 232.Loop_enc: 233 .inst 0xf3b04300 @ aese q2,q0 234 vld1.32 {q0},[r2]! 235 .inst 0xf3b04384 @ aesmc q2,q2 236 subs r3,r3,#2 237 .inst 0xf3b04302 @ aese q2,q1 238 vld1.32 {q1},[r2]! 239 .inst 0xf3b04384 @ aesmc q2,q2 240 bgt .Loop_enc 241 242 .inst 0xf3b04300 @ aese q2,q0 243 vld1.32 {q0},[r2] 244 .inst 0xf3b04384 @ aesmc q2,q2 245 .inst 0xf3b04302 @ aese q2,q1 246 veor q2,q2,q0 247 248 vst1.8 {q2},[r1] 249 RET 250.size aes_v8_encrypt,.-aes_v8_encrypt 251.globl aes_v8_decrypt 252.type aes_v8_decrypt,%function 253.align 5 254aes_v8_decrypt: 255 ldr r3,[r2,#240] 256 vld1.32 {q0},[r2]! 257 vld1.8 {q2},[r0] 258 sub r3,r3,#2 259 vld1.32 {q1},[r2]! 260 261.Loop_dec: 262 .inst 0xf3b04340 @ aesd q2,q0 263 vld1.32 {q0},[r2]! 264 .inst 0xf3b043c4 @ aesimc q2,q2 265 subs r3,r3,#2 266 .inst 0xf3b04342 @ aesd q2,q1 267 vld1.32 {q1},[r2]! 268 .inst 0xf3b043c4 @ aesimc q2,q2 269 bgt .Loop_dec 270 271 .inst 0xf3b04340 @ aesd q2,q0 272 vld1.32 {q0},[r2] 273 .inst 0xf3b043c4 @ aesimc q2,q2 274 .inst 0xf3b04342 @ aesd q2,q1 275 veor q2,q2,q0 276 277 vst1.8 {q2},[r1] 278 RET 279.size aes_v8_decrypt,.-aes_v8_decrypt 280.globl aes_v8_cbc_encrypt 281.type aes_v8_cbc_encrypt,%function 282.align 5 283aes_v8_cbc_encrypt: 284 mov ip,sp 285 stmdb sp!,{r4-r8,lr} 286 vstmdb sp!,{d8-d15} @ ABI specification says so 287 ldmia ip,{r4-r5} @ load remaining args 288 subs r2,r2,#16 289 mov r8,#16 290 blo .Lcbc_abort 291 moveq r8,#0 292 293 cmp r5,#0 @ en- or decrypting? 294 ldr r5,[r3,#240] 295 and r2,r2,#-16 296 vld1.8 {q6},[r4] 297 vld1.8 {q0},[r0],r8 298 299 vld1.32 {q8-q9},[r3] @ load key schedule... 300 sub r5,r5,#6 301 add r7,r3,r5,lsl#4 @ pointer to last 7 round keys 302 sub r5,r5,#2 303 vld1.32 {q10-q11},[r7]! 304 vld1.32 {q12-q13},[r7]! 305 vld1.32 {q14-q15},[r7]! 306 vld1.32 {q7},[r7] 307 308 add r7,r3,#32 309 mov r6,r5 310 beq .Lcbc_dec 311 312 cmp r5,#2 313 veor q0,q0,q6 314 veor q5,q8,q7 315 beq .Lcbc_enc128 316 317.Loop_cbc_enc: 318 .inst 0xf3b00320 @ aese q0,q8 319 vld1.32 {q8},[r7]! 320 .inst 0xf3b00380 @ aesmc q0,q0 321 subs r6,r6,#2 322 .inst 0xf3b00322 @ aese q0,q9 323 vld1.32 {q9},[r7]! 324 .inst 0xf3b00380 @ aesmc q0,q0 325 bgt .Loop_cbc_enc 326 327 .inst 0xf3b00320 @ aese q0,q8 328 .inst 0xf3b00380 @ aesmc q0,q0 329 subs r2,r2,#16 330 .inst 0xf3b00322 @ aese q0,q9 331 .inst 0xf3b00380 @ aesmc q0,q0 332 moveq r8,#0 333 .inst 0xf3b00324 @ aese q0,q10 334 .inst 0xf3b00380 @ aesmc q0,q0 335 add r7,r3,#16 336 .inst 0xf3b00326 @ aese q0,q11 337 .inst 0xf3b00380 @ aesmc q0,q0 338 vld1.8 {q8},[r0],r8 339 .inst 0xf3b00328 @ aese q0,q12 340 .inst 0xf3b00380 @ aesmc q0,q0 341 veor q8,q8,q5 342 .inst 0xf3b0032a @ aese q0,q13 343 .inst 0xf3b00380 @ aesmc q0,q0 344 vld1.32 {q9},[r7]! @ re-pre-load rndkey[1] 345 .inst 0xf3b0032c @ aese q0,q14 346 .inst 0xf3b00380 @ aesmc q0,q0 347 .inst 0xf3b0032e @ aese q0,q15 348 349 mov r6,r5 350 veor q6,q0,q7 351 vst1.8 {q6},[r1]! 352 bhs .Loop_cbc_enc 353 354 b .Lcbc_done 355 356.align 5 357.Lcbc_enc128: 358 vld1.32 {q2-q3},[r7] 359 .inst 0xf3b00320 @ aese q0,q8 360 .inst 0xf3b00380 @ aesmc q0,q0 361 b .Lenter_cbc_enc128 362.Loop_cbc_enc128: 363 .inst 0xf3b00320 @ aese q0,q8 364 .inst 0xf3b00380 @ aesmc q0,q0 365 vst1.8 {q6},[r1]! 366.Lenter_cbc_enc128: 367 .inst 0xf3b00322 @ aese q0,q9 368 .inst 0xf3b00380 @ aesmc q0,q0 369 subs r2,r2,#16 370 .inst 0xf3b00304 @ aese q0,q2 371 .inst 0xf3b00380 @ aesmc q0,q0 372 moveq r8,#0 373 .inst 0xf3b00306 @ aese q0,q3 374 .inst 0xf3b00380 @ aesmc q0,q0 375 .inst 0xf3b00324 @ aese q0,q10 376 .inst 0xf3b00380 @ aesmc q0,q0 377 .inst 0xf3b00326 @ aese q0,q11 378 .inst 0xf3b00380 @ aesmc q0,q0 379 vld1.8 {q8},[r0],r8 380 .inst 0xf3b00328 @ aese q0,q12 381 .inst 0xf3b00380 @ aesmc q0,q0 382 .inst 0xf3b0032a @ aese q0,q13 383 .inst 0xf3b00380 @ aesmc q0,q0 384 .inst 0xf3b0032c @ aese q0,q14 385 .inst 0xf3b00380 @ aesmc q0,q0 386 veor q8,q8,q5 387 .inst 0xf3b0032e @ aese q0,q15 388 veor q6,q0,q7 389 bhs .Loop_cbc_enc128 390 391 vst1.8 {q6},[r1]! 392 b .Lcbc_done 393.align 5 394.Lcbc_dec: 395 vld1.8 {q10},[r0]! 396 subs r2,r2,#32 @ bias 397 add r6,r5,#2 398 vorr q3,q0,q0 399 vorr q1,q0,q0 400 vorr q11,q10,q10 401 blo .Lcbc_dec_tail 402 403 vorr q1,q10,q10 404 vld1.8 {q10},[r0]! 405 vorr q2,q0,q0 406 vorr q3,q1,q1 407 vorr q11,q10,q10 408 409.Loop3x_cbc_dec: 410 .inst 0xf3b00360 @ aesd q0,q8 411 .inst 0xf3b02360 @ aesd q1,q8 412 .inst 0xf3f04360 @ aesd q10,q8 413 vld1.32 {q8},[r7]! 414 .inst 0xf3b003c0 @ aesimc q0,q0 415 .inst 0xf3b023c2 @ aesimc q1,q1 416 .inst 0xf3f043e4 @ aesimc q10,q10 417 subs r6,r6,#2 418 .inst 0xf3b00362 @ aesd q0,q9 419 .inst 0xf3b02362 @ aesd q1,q9 420 .inst 0xf3f04362 @ aesd q10,q9 421 vld1.32 {q9},[r7]! 422 .inst 0xf3b003c0 @ aesimc q0,q0 423 .inst 0xf3b023c2 @ aesimc q1,q1 424 .inst 0xf3f043e4 @ aesimc q10,q10 425 bgt .Loop3x_cbc_dec 426 427 .inst 0xf3b00360 @ aesd q0,q8 428 .inst 0xf3b02360 @ aesd q1,q8 429 .inst 0xf3f04360 @ aesd q10,q8 430 veor q4,q6,q7 431 .inst 0xf3b003c0 @ aesimc q0,q0 432 .inst 0xf3b023c2 @ aesimc q1,q1 433 .inst 0xf3f043e4 @ aesimc q10,q10 434 veor q5,q2,q7 435 .inst 0xf3b00362 @ aesd q0,q9 436 .inst 0xf3b02362 @ aesd q1,q9 437 .inst 0xf3f04362 @ aesd q10,q9 438 veor q9,q3,q7 439 subs r2,r2,#0x30 440 .inst 0xf3b003c0 @ aesimc q0,q0 441 .inst 0xf3b023c2 @ aesimc q1,q1 442 .inst 0xf3f043e4 @ aesimc q10,q10 443 vorr q6,q11,q11 444 movlo r6,r2 @ r6, r6, is zero at this point 445 .inst 0xf3b00368 @ aesd q0,q12 446 .inst 0xf3b02368 @ aesd q1,q12 447 .inst 0xf3f04368 @ aesd q10,q12 448 add r0,r0,r6 @ r0 is adjusted in such way that 449 @ at exit from the loop q1-q10 450 @ are loaded with last "words" 451 .inst 0xf3b003c0 @ aesimc q0,q0 452 .inst 0xf3b023c2 @ aesimc q1,q1 453 .inst 0xf3f043e4 @ aesimc q10,q10 454 mov r7,r3 455 .inst 0xf3b0036a @ aesd q0,q13 456 .inst 0xf3b0236a @ aesd q1,q13 457 .inst 0xf3f0436a @ aesd q10,q13 458 vld1.8 {q2},[r0]! 459 .inst 0xf3b003c0 @ aesimc q0,q0 460 .inst 0xf3b023c2 @ aesimc q1,q1 461 .inst 0xf3f043e4 @ aesimc q10,q10 462 vld1.8 {q3},[r0]! 463 .inst 0xf3b0036c @ aesd q0,q14 464 .inst 0xf3b0236c @ aesd q1,q14 465 .inst 0xf3f0436c @ aesd q10,q14 466 vld1.8 {q11},[r0]! 467 .inst 0xf3b003c0 @ aesimc q0,q0 468 .inst 0xf3b023c2 @ aesimc q1,q1 469 .inst 0xf3f043e4 @ aesimc q10,q10 470 vld1.32 {q8},[r7]! @ re-pre-load rndkey[0] 471 .inst 0xf3b0036e @ aesd q0,q15 472 .inst 0xf3b0236e @ aesd q1,q15 473 .inst 0xf3f0436e @ aesd q10,q15 474 475 add r6,r5,#2 476 veor q4,q4,q0 477 veor q5,q5,q1 478 veor q10,q10,q9 479 vld1.32 {q9},[r7]! @ re-pre-load rndkey[1] 480 vorr q0,q2,q2 481 vst1.8 {q4},[r1]! 482 vorr q1,q3,q3 483 vst1.8 {q5},[r1]! 484 vst1.8 {q10},[r1]! 485 vorr q10,q11,q11 486 bhs .Loop3x_cbc_dec 487 488 cmn r2,#0x30 489 beq .Lcbc_done 490 nop 491 492.Lcbc_dec_tail: 493 .inst 0xf3b02360 @ aesd q1,q8 494 .inst 0xf3f04360 @ aesd q10,q8 495 vld1.32 {q8},[r7]! 496 .inst 0xf3b023c2 @ aesimc q1,q1 497 .inst 0xf3f043e4 @ aesimc q10,q10 498 subs r6,r6,#2 499 .inst 0xf3b02362 @ aesd q1,q9 500 .inst 0xf3f04362 @ aesd q10,q9 501 vld1.32 {q9},[r7]! 502 .inst 0xf3b023c2 @ aesimc q1,q1 503 .inst 0xf3f043e4 @ aesimc q10,q10 504 bgt .Lcbc_dec_tail 505 506 .inst 0xf3b02360 @ aesd q1,q8 507 .inst 0xf3f04360 @ aesd q10,q8 508 .inst 0xf3b023c2 @ aesimc q1,q1 509 .inst 0xf3f043e4 @ aesimc q10,q10 510 .inst 0xf3b02362 @ aesd q1,q9 511 .inst 0xf3f04362 @ aesd q10,q9 512 .inst 0xf3b023c2 @ aesimc q1,q1 513 .inst 0xf3f043e4 @ aesimc q10,q10 514 .inst 0xf3b02368 @ aesd q1,q12 515 .inst 0xf3f04368 @ aesd q10,q12 516 .inst 0xf3b023c2 @ aesimc q1,q1 517 .inst 0xf3f043e4 @ aesimc q10,q10 518 cmn r2,#0x20 519 .inst 0xf3b0236a @ aesd q1,q13 520 .inst 0xf3f0436a @ aesd q10,q13 521 .inst 0xf3b023c2 @ aesimc q1,q1 522 .inst 0xf3f043e4 @ aesimc q10,q10 523 veor q5,q6,q7 524 .inst 0xf3b0236c @ aesd q1,q14 525 .inst 0xf3f0436c @ aesd q10,q14 526 .inst 0xf3b023c2 @ aesimc q1,q1 527 .inst 0xf3f043e4 @ aesimc q10,q10 528 veor q9,q3,q7 529 .inst 0xf3b0236e @ aesd q1,q15 530 .inst 0xf3f0436e @ aesd q10,q15 531 beq .Lcbc_dec_one 532 veor q5,q5,q1 533 veor q9,q9,q10 534 vorr q6,q11,q11 535 vst1.8 {q5},[r1]! 536 vst1.8 {q9},[r1]! 537 b .Lcbc_done 538 539.Lcbc_dec_one: 540 veor q5,q5,q10 541 vorr q6,q11,q11 542 vst1.8 {q5},[r1]! 543 544.Lcbc_done: 545 vst1.8 {q6},[r4] 546.Lcbc_abort: 547 vldmia sp!,{d8-d15} 548 ldmia sp!,{r4-r8,pc} 549.size aes_v8_cbc_encrypt,.-aes_v8_cbc_encrypt 550.globl aes_v8_ctr32_encrypt_blocks 551.type aes_v8_ctr32_encrypt_blocks,%function 552.align 5 553aes_v8_ctr32_encrypt_blocks: 554 mov ip,sp 555 stmdb sp!,{r4-r10,lr} 556 vstmdb sp!,{d8-d15} @ ABI specification says so 557 ldr r4, [ip] @ load remaining arg 558 ldr r5,[r3,#240] 559 560 ldr r8, [r4, #12] 561 vld1.32 {q0},[r4] 562 563 vld1.32 {q8-q9},[r3] @ load key schedule... 564 sub r5,r5,#4 565 mov r12,#16 566 cmp r2,#2 567 add r7,r3,r5,lsl#4 @ pointer to last 5 round keys 568 sub r5,r5,#2 569 vld1.32 {q12-q13},[r7]! 570 vld1.32 {q14-q15},[r7]! 571 vld1.32 {q7},[r7] 572 add r7,r3,#32 573 mov r6,r5 574 movlo r12,#0 575#ifndef __ARMEB__ 576 rev r8, r8 577#endif 578 vorr q1,q0,q0 579 add r10, r8, #1 580 vorr q10,q0,q0 581 add r8, r8, #2 582 vorr q6,q0,q0 583 rev r10, r10 584 vmov.32 d3[1],r10 585 bls .Lctr32_tail 586 rev r12, r8 587 sub r2,r2,#3 @ bias 588 vmov.32 d21[1],r12 589 b .Loop3x_ctr32 590 591.align 4 592.Loop3x_ctr32: 593 .inst 0xf3b00320 @ aese q0,q8 594 .inst 0xf3b02320 @ aese q1,q8 595 .inst 0xf3f04320 @ aese q10,q8 596 vld1.32 {q8},[r7]! 597 .inst 0xf3b00380 @ aesmc q0,q0 598 .inst 0xf3b02382 @ aesmc q1,q1 599 .inst 0xf3f043a4 @ aesmc q10,q10 600 subs r6,r6,#2 601 .inst 0xf3b00322 @ aese q0,q9 602 .inst 0xf3b02322 @ aese q1,q9 603 .inst 0xf3f04322 @ aese q10,q9 604 vld1.32 {q9},[r7]! 605 .inst 0xf3b00380 @ aesmc q0,q0 606 .inst 0xf3b02382 @ aesmc q1,q1 607 .inst 0xf3f043a4 @ aesmc q10,q10 608 bgt .Loop3x_ctr32 609 610 .inst 0xf3b00320 @ aese q0,q8 611 .inst 0xf3b02320 @ aese q1,q8 612 .inst 0xf3f04320 @ aese q10,q8 613 mov r7,r3 614 .inst 0xf3b08380 @ aesmc q4,q0 615 vld1.8 {q2},[r0]! 616 .inst 0xf3b0a382 @ aesmc q5,q1 617 .inst 0xf3f043a4 @ aesmc q10,q10 618 vorr q0,q6,q6 619 .inst 0xf3b08322 @ aese q4,q9 620 vld1.8 {q3},[r0]! 621 .inst 0xf3b0a322 @ aese q5,q9 622 .inst 0xf3f04322 @ aese q10,q9 623 vorr q1,q6,q6 624 .inst 0xf3b08388 @ aesmc q4,q4 625 vld1.8 {q11},[r0]! 626 .inst 0xf3b0a38a @ aesmc q5,q5 627 .inst 0xf3f023a4 @ aesmc q9,q10 628 vorr q10,q6,q6 629 add r9,r8,#1 630 .inst 0xf3b08328 @ aese q4,q12 631 .inst 0xf3b0a328 @ aese q5,q12 632 .inst 0xf3f02328 @ aese q9,q12 633 veor q2,q2,q7 634 add r10,r8,#2 635 .inst 0xf3b08388 @ aesmc q4,q4 636 .inst 0xf3b0a38a @ aesmc q5,q5 637 .inst 0xf3f023a2 @ aesmc q9,q9 638 veor q3,q3,q7 639 add r8,r8,#3 640 .inst 0xf3b0832a @ aese q4,q13 641 .inst 0xf3b0a32a @ aese q5,q13 642 .inst 0xf3f0232a @ aese q9,q13 643 veor q11,q11,q7 644 rev r9,r9 645 .inst 0xf3b08388 @ aesmc q4,q4 646 vld1.32 {q8},[r7]! @ re-pre-load rndkey[0] 647 .inst 0xf3b0a38a @ aesmc q5,q5 648 .inst 0xf3f023a2 @ aesmc q9,q9 649 vmov.32 d1[1], r9 650 rev r10,r10 651 .inst 0xf3b0832c @ aese q4,q14 652 .inst 0xf3b0a32c @ aese q5,q14 653 .inst 0xf3f0232c @ aese q9,q14 654 vmov.32 d3[1], r10 655 rev r12,r8 656 .inst 0xf3b08388 @ aesmc q4,q4 657 .inst 0xf3b0a38a @ aesmc q5,q5 658 .inst 0xf3f023a2 @ aesmc q9,q9 659 vmov.32 d21[1], r12 660 subs r2,r2,#3 661 .inst 0xf3b0832e @ aese q4,q15 662 .inst 0xf3b0a32e @ aese q5,q15 663 .inst 0xf3f0232e @ aese q9,q15 664 665 mov r6,r5 666 veor q2,q2,q4 667 veor q3,q3,q5 668 veor q11,q11,q9 669 vld1.32 {q9},[r7]! @ re-pre-load rndkey[1] 670 vst1.8 {q2},[r1]! 671 vst1.8 {q3},[r1]! 672 vst1.8 {q11},[r1]! 673 bhs .Loop3x_ctr32 674 675 adds r2,r2,#3 676 beq .Lctr32_done 677 cmp r2,#1 678 mov r12,#16 679 moveq r12,#0 680 681.Lctr32_tail: 682 .inst 0xf3b00320 @ aese q0,q8 683 .inst 0xf3b02320 @ aese q1,q8 684 vld1.32 {q8},[r7]! 685 .inst 0xf3b00380 @ aesmc q0,q0 686 .inst 0xf3b02382 @ aesmc q1,q1 687 subs r6,r6,#2 688 .inst 0xf3b00322 @ aese q0,q9 689 .inst 0xf3b02322 @ aese q1,q9 690 vld1.32 {q9},[r7]! 691 .inst 0xf3b00380 @ aesmc q0,q0 692 .inst 0xf3b02382 @ aesmc q1,q1 693 bgt .Lctr32_tail 694 695 .inst 0xf3b00320 @ aese q0,q8 696 .inst 0xf3b02320 @ aese q1,q8 697 .inst 0xf3b00380 @ aesmc q0,q0 698 .inst 0xf3b02382 @ aesmc q1,q1 699 .inst 0xf3b00322 @ aese q0,q9 700 .inst 0xf3b02322 @ aese q1,q9 701 .inst 0xf3b00380 @ aesmc q0,q0 702 .inst 0xf3b02382 @ aesmc q1,q1 703 vld1.8 {q2},[r0],r12 704 .inst 0xf3b00328 @ aese q0,q12 705 .inst 0xf3b02328 @ aese q1,q12 706 vld1.8 {q3},[r0] 707 .inst 0xf3b00380 @ aesmc q0,q0 708 .inst 0xf3b02382 @ aesmc q1,q1 709 .inst 0xf3b0032a @ aese q0,q13 710 .inst 0xf3b0232a @ aese q1,q13 711 .inst 0xf3b00380 @ aesmc q0,q0 712 .inst 0xf3b02382 @ aesmc q1,q1 713 .inst 0xf3b0032c @ aese q0,q14 714 .inst 0xf3b0232c @ aese q1,q14 715 veor q2,q2,q7 716 .inst 0xf3b00380 @ aesmc q0,q0 717 .inst 0xf3b02382 @ aesmc q1,q1 718 veor q3,q3,q7 719 .inst 0xf3b0032e @ aese q0,q15 720 .inst 0xf3b0232e @ aese q1,q15 721 722 cmp r2,#1 723 veor q2,q2,q0 724 veor q3,q3,q1 725 vst1.8 {q2},[r1]! 726 beq .Lctr32_done 727 vst1.8 {q3},[r1] 728 729.Lctr32_done: 730 vldmia sp!,{d8-d15} 731 ldmia sp!,{r4-r10,pc} 732.size aes_v8_ctr32_encrypt_blocks,.-aes_v8_ctr32_encrypt_blocks 733#endif 734