1# Copyright (c) 2014, Google Inc. 2# 3# Permission to use, copy, modify, and/or distribute this software for any 4# purpose with or without fee is hereby granted, provided that the above 5# copyright notice and this permission notice appear in all copies. 6# 7# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 8# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 9# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 10# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 11# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 12# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 13# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 14 15# This file contains a pre-compiled version of chacha_vec.c for ARM. This is 16# needed to support switching on NEON code at runtime. If the whole of OpenSSL 17# were to be compiled with the needed flags to build chacha_vec.c, then it 18# wouldn't be possible to run on non-NEON systems. 19# 20# This file was generated by chacha_vec_arm_generate.go using the following 21# compiler command: 22# 23# /opt/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc -O3 -mcpu=cortex-a8 -mfpu=neon -fpic -DASM_GEN -I ../../include -S chacha_vec.c -o - 24 25#if !defined(OPENSSL_NO_ASM) 26#if defined(__arm__) 27 28 .syntax unified 29 .cpu cortex-a8 30 .eabi_attribute 27, 3 31 32# EABI attribute 28 sets whether VFP register arguments were used to build this 33# file. If object files are inconsistent on this point, the linker will refuse 34# to link them. Thus we report whatever the compiler expects since we don't use 35# VFP arguments. 36 37#if defined(__ARM_PCS_VFP) 38 .eabi_attribute 28, 1 39#else 40 .eabi_attribute 28, 0 41#endif 42 43 .fpu neon 44 .eabi_attribute 20, 1 45 .eabi_attribute 21, 1 46 .eabi_attribute 23, 3 47 .eabi_attribute 24, 1 48 .eabi_attribute 25, 1 49 .eabi_attribute 26, 2 50 .eabi_attribute 30, 2 51 .eabi_attribute 34, 1 52 .eabi_attribute 18, 4 53 .thumb 54 .file "chacha_vec.c" 55 .text 56 .align 2 57 .global CRYPTO_chacha_20_neon 58 .hidden CRYPTO_chacha_20_neon 59 .thumb 60 .thumb_func 61 .type CRYPTO_chacha_20_neon, %function 62CRYPTO_chacha_20_neon: 63 @ args = 8, pretend = 0, frame = 160 64 @ frame_needed = 1, uses_anonymous_args = 0 65 push {r4, r5, r6, r7, r8, r9, r10, fp, lr} 66 mov r9, r3 67 vpush.64 {d8, d9, d10, d11, d12, d13, d14, d15} 68 mov r10, r2 69 ldr r4, .L91+16 70 mov fp, r1 71 mov r8, r9 72.LPIC16: 73 add r4, pc 74 sub sp, sp, #164 75 add r7, sp, #0 76 sub sp, sp, #112 77 add lr, r7, #148 78 str r0, [r7, #80] 79 str r1, [r7, #12] 80 str r2, [r7, #8] 81 ldmia r4, {r0, r1, r2, r3} 82 add r4, sp, #15 83 bic r4, r4, #15 84 ldr r6, [r7, #264] 85 str r4, [r7, #88] 86 mov r5, r4 87 adds r4, r4, #64 88 add ip, r5, #80 89 str r9, [r7, #56] 90 stmia r4, {r0, r1, r2, r3} 91 movw r4, #43691 92 ldr r0, [r6] @ unaligned 93 movt r4, 43690 94 ldr r1, [r6, #4] @ unaligned 95 ldr r2, [r6, #8] @ unaligned 96 ldr r3, [r9, #12] @ unaligned 97 str ip, [r7, #84] 98 stmia lr!, {r0, r1, r2} 99 mov lr, ip 100 ldr r1, [r9, #4] @ unaligned 101 ldr r2, [r9, #8] @ unaligned 102 ldr r0, [r9] @ unaligned 103 vldr d24, [r5, #64] 104 vldr d25, [r5, #72] 105 umull r4, r5, r10, r4 106 stmia ip!, {r0, r1, r2, r3} 107 ldr r0, [r8, #16]! @ unaligned 108 ldr r2, [r7, #88] 109 ldr r4, [r7, #268] 110 ldr r1, [r8, #4] @ unaligned 111 vldr d26, [r2, #80] 112 vldr d27, [r2, #88] 113 ldr r3, [r8, #12] @ unaligned 114 ldr r2, [r8, #8] @ unaligned 115 stmia lr!, {r0, r1, r2, r3} 116 ldr r3, [r6] 117 ldr r1, [r6, #4] 118 ldr r6, [r6, #8] 119 str r3, [r7, #68] 120 str r3, [r7, #132] 121 lsrs r3, r5, #7 122 str r6, [r7, #140] 123 str r6, [r7, #60] 124 ldr r6, [r7, #88] 125 str r4, [r7, #128] 126 str r1, [r7, #136] 127 str r1, [r7, #64] 128 vldr d28, [r6, #80] 129 vldr d29, [r6, #88] 130 vldr d22, [r7, #128] 131 vldr d23, [r7, #136] 132 beq .L26 133 mov r5, r6 134 lsls r2, r3, #8 135 sub r3, r2, r3, lsl #6 136 ldr r2, [r5, #68] 137 ldr r6, [r6, #64] 138 vldr d0, .L91 139 vldr d1, .L91+8 140 str r2, [r7, #48] 141 ldr r2, [r5, #72] 142 str r3, [r7, #4] 143 str r6, [r7, #52] 144 str r2, [r7, #44] 145 adds r2, r4, #2 146 str r2, [r7, #72] 147 ldr r2, [r5, #76] 148 str fp, [r7, #76] 149 str r2, [r7, #40] 150 ldr r2, [r7, #80] 151 adds r3, r2, r3 152 str r3, [r7, #16] 153.L4: 154 ldr r5, [r7, #56] 155 add r8, r7, #40 156 ldr r4, [r7, #68] 157 vadd.i32 q3, q11, q0 158 ldmia r8, {r8, r9, r10, fp} 159 mov r1, r5 160 ldr r2, [r5, #4] 161 vmov q8, q14 @ v4si 162 ldr r3, [r5] 163 vmov q1, q13 @ v4si 164 ldr r6, [r1, #28] 165 vmov q9, q12 @ v4si 166 mov r0, r2 167 ldr r2, [r5, #8] 168 str r4, [r7, #112] 169 movs r1, #10 170 ldr r4, [r7, #72] 171 vmov q2, q11 @ v4si 172 ldr lr, [r5, #20] 173 vmov q15, q14 @ v4si 174 str r3, [r7, #108] 175 vmov q5, q13 @ v4si 176 str r2, [r7, #116] 177 vmov q10, q12 @ v4si 178 ldr r2, [r5, #12] 179 ldr ip, [r5, #16] 180 ldr r3, [r7, #64] 181 ldr r5, [r5, #24] 182 str r6, [r7, #120] 183 str r1, [r7, #92] 184 ldr r6, [r7, #60] 185 str r4, [r7, #100] 186 ldr r1, [r7, #116] 187 ldr r4, [r7, #108] 188 str r8, [r7, #96] 189 mov r8, r10 190 str lr, [r7, #104] 191 mov r10, r9 192 mov lr, r3 193 mov r9, r5 194 str r6, [r7, #124] 195 b .L92 196.L93: 197 .align 3 198.L91: 199 .word 1 200 .word 0 201 .word 0 202 .word 0 203 .word .LANCHOR0-(.LPIC16+4) 204.L92: 205.L3: 206 vadd.i32 q9, q9, q1 207 add r3, r8, r0 208 vadd.i32 q10, q10, q5 209 add r5, fp, r4 210 veor q3, q3, q9 211 mov r6, r3 212 veor q2, q2, q10 213 ldr r3, [r7, #96] 214 str r5, [r7, #116] 215 add r10, r10, r1 216 vrev32.16 q3, q3 217 str r6, [r7, #108] 218 vadd.i32 q8, q8, q3 219 vrev32.16 q2, q2 220 vadd.i32 q15, q15, q2 221 mov fp, r3 222 ldr r3, [r7, #100] 223 veor q4, q8, q1 224 veor q6, q15, q5 225 add fp, fp, r2 226 eors r3, r3, r5 227 mov r5, r6 228 ldr r6, [r7, #112] 229 vshl.i32 q1, q4, #12 230 vshl.i32 q5, q6, #12 231 ror r3, r3, #16 232 eors r6, r6, r5 233 eor lr, lr, r10 234 vsri.32 q1, q4, #20 235 mov r5, r6 236 ldr r6, [r7, #124] 237 vsri.32 q5, q6, #20 238 str r3, [r7, #124] 239 eor r6, r6, fp 240 ror r5, r5, #16 241 vadd.i32 q9, q9, q1 242 ror lr, lr, #16 243 ror r3, r6, #16 244 ldr r6, [r7, #124] 245 vadd.i32 q10, q10, q5 246 add r9, r9, lr 247 veor q4, q9, q3 248 add ip, ip, r6 249 ldr r6, [r7, #104] 250 veor q6, q10, q2 251 eor r4, ip, r4 252 str r3, [r7, #104] 253 vshl.i32 q3, q4, #8 254 eor r1, r9, r1 255 mov r8, r6 256 ldr r6, [r7, #120] 257 vshl.i32 q2, q6, #8 258 ror r4, r4, #20 259 add r6, r6, r3 260 vsri.32 q3, q4, #24 261 str r6, [r7, #100] 262 eors r2, r2, r6 263 ldr r6, [r7, #116] 264 vsri.32 q2, q6, #24 265 add r8, r8, r5 266 ror r2, r2, #20 267 adds r6, r4, r6 268 vadd.i32 q4, q8, q3 269 eor r0, r8, r0 270 vadd.i32 q15, q15, q2 271 mov r3, r6 272 ldr r6, [r7, #108] 273 veor q6, q4, q1 274 ror r0, r0, #20 275 str r3, [r7, #112] 276 veor q5, q15, q5 277 adds r6, r0, r6 278 str r6, [r7, #120] 279 mov r6, r3 280 ldr r3, [r7, #124] 281 vshl.i32 q8, q6, #7 282 add fp, fp, r2 283 eors r3, r3, r6 284 ldr r6, [r7, #120] 285 vshl.i32 q1, q5, #7 286 ror r1, r1, #20 287 eors r5, r5, r6 288 vsri.32 q8, q6, #25 289 ldr r6, [r7, #104] 290 ror r3, r3, #24 291 ror r5, r5, #24 292 vsri.32 q1, q5, #25 293 str r5, [r7, #116] 294 eor r6, fp, r6 295 ldr r5, [r7, #116] 296 add r10, r10, r1 297 add ip, r3, ip 298 vext.32 q8, q8, q8, #1 299 str ip, [r7, #124] 300 add ip, r5, r8 301 ldr r5, [r7, #100] 302 eor lr, r10, lr 303 ror r6, r6, #24 304 vext.32 q1, q1, q1, #1 305 add r8, r6, r5 306 vadd.i32 q9, q9, q8 307 ldr r5, [r7, #124] 308 vext.32 q3, q3, q3, #3 309 vadd.i32 q10, q10, q1 310 ror lr, lr, #24 311 eor r0, ip, r0 312 vext.32 q2, q2, q2, #3 313 add r9, r9, lr 314 eors r4, r4, r5 315 veor q3, q9, q3 316 ldr r5, [r7, #112] 317 eor r1, r9, r1 318 ror r0, r0, #25 319 veor q2, q10, q2 320 adds r5, r0, r5 321 vext.32 q4, q4, q4, #2 322 str r5, [r7, #112] 323 ldr r5, [r7, #120] 324 ror r1, r1, #25 325 vrev32.16 q3, q3 326 eor r2, r8, r2 327 vext.32 q15, q15, q15, #2 328 adds r5, r1, r5 329 vadd.i32 q4, q4, q3 330 ror r4, r4, #25 331 vrev32.16 q2, q2 332 str r5, [r7, #100] 333 vadd.i32 q15, q15, q2 334 eors r3, r3, r5 335 ldr r5, [r7, #112] 336 add fp, fp, r4 337 veor q8, q4, q8 338 ror r2, r2, #25 339 veor q1, q15, q1 340 eor lr, fp, lr 341 eors r6, r6, r5 342 ror r3, r3, #16 343 ldr r5, [r7, #116] 344 add r10, r10, r2 345 str r3, [r7, #120] 346 ror lr, lr, #16 347 ldr r3, [r7, #120] 348 eor r5, r10, r5 349 vshl.i32 q5, q8, #12 350 add ip, lr, ip 351 vshl.i32 q6, q1, #12 352 str ip, [r7, #104] 353 add ip, r3, r8 354 str ip, [r7, #116] 355 ldr r3, [r7, #124] 356 ror r5, r5, #16 357 vsri.32 q5, q8, #20 358 ror r6, r6, #16 359 add ip, r5, r3 360 ldr r3, [r7, #104] 361 vsri.32 q6, q1, #20 362 add r9, r9, r6 363 eor r2, ip, r2 364 eors r4, r4, r3 365 ldr r3, [r7, #116] 366 eor r0, r9, r0 367 vadd.i32 q9, q9, q5 368 ror r4, r4, #20 369 eors r1, r1, r3 370 vadd.i32 q10, q10, q6 371 ror r3, r2, #20 372 str r3, [r7, #108] 373 ldr r3, [r7, #112] 374 veor q3, q9, q3 375 ror r0, r0, #20 376 add r8, r4, fp 377 veor q2, q10, q2 378 add fp, r0, r3 379 ldr r3, [r7, #100] 380 ror r1, r1, #20 381 mov r2, r8 382 vshl.i32 q8, q3, #8 383 str r8, [r7, #96] 384 add r8, r1, r3 385 ldr r3, [r7, #108] 386 vmov q1, q6 @ v4si 387 vshl.i32 q6, q2, #8 388 eor r6, fp, r6 389 add r10, r10, r3 390 ldr r3, [r7, #120] 391 vsri.32 q8, q3, #24 392 eor lr, r2, lr 393 eor r3, r8, r3 394 ror r2, r6, #24 395 vsri.32 q6, q2, #24 396 eor r5, r10, r5 397 str r2, [r7, #124] 398 ror r2, r3, #24 399 ldr r3, [r7, #104] 400 vmov q3, q8 @ v4si 401 vadd.i32 q15, q15, q6 402 ror lr, lr, #24 403 vadd.i32 q8, q4, q8 404 ror r6, r5, #24 405 add r5, lr, r3 406 ldr r3, [r7, #124] 407 veor q4, q8, q5 408 add ip, ip, r6 409 vmov q2, q6 @ v4si 410 add r9, r9, r3 411 veor q6, q15, q1 412 ldr r3, [r7, #116] 413 vshl.i32 q1, q4, #7 414 str r2, [r7, #100] 415 add r3, r3, r2 416 str r3, [r7, #120] 417 vshl.i32 q5, q6, #7 418 eors r1, r1, r3 419 ldr r3, [r7, #108] 420 vsri.32 q1, q4, #25 421 eors r4, r4, r5 422 eor r0, r9, r0 423 eor r2, ip, r3 424 vsri.32 q5, q6, #25 425 ldr r3, [r7, #92] 426 ror r4, r4, #25 427 str r6, [r7, #112] 428 ror r0, r0, #25 429 subs r3, r3, #1 430 str r5, [r7, #104] 431 ror r1, r1, #25 432 ror r2, r2, #25 433 vext.32 q15, q15, q15, #2 434 str r3, [r7, #92] 435 vext.32 q2, q2, q2, #1 436 vext.32 q8, q8, q8, #2 437 vext.32 q3, q3, q3, #1 438 vext.32 q5, q5, q5, #3 439 vext.32 q1, q1, q1, #3 440 bne .L3 441 ldr r3, [r7, #84] 442 vadd.i32 q4, q12, q10 443 str r9, [r7, #92] 444 mov r9, r10 445 mov r10, r8 446 ldr r8, [r7, #96] 447 str lr, [r7, #96] 448 mov lr, r5 449 ldr r5, [r7, #52] 450 vadd.i32 q5, q13, q5 451 ldr r6, [r7, #76] 452 vadd.i32 q15, q14, q15 453 add fp, fp, r5 454 ldr r5, [r7, #48] 455 str r3, [r7, #104] 456 vadd.i32 q7, q14, q8 457 ldr r3, [r6, #12] @ unaligned 458 add r10, r10, r5 459 str r0, [r7, #36] 460 vadd.i32 q2, q11, q2 461 ldr r0, [r6] @ unaligned 462 vadd.i32 q6, q12, q9 463 ldr r5, [r7, #104] 464 vadd.i32 q1, q13, q1 465 str r1, [r7, #116] 466 vadd.i32 q11, q11, q0 467 ldr r1, [r6, #4] @ unaligned 468 str r2, [r7, #32] 469 vadd.i32 q3, q11, q3 470 ldr r2, [r6, #8] @ unaligned 471 vadd.i32 q11, q11, q0 472 str r4, [r7, #108] 473 ldr r4, [r7, #100] 474 vadd.i32 q11, q11, q0 475 stmia r5!, {r0, r1, r2, r3} 476 ldr r2, [r7, #88] 477 ldr r3, [r7, #44] 478 ldr r5, [r7, #84] 479 vldr d20, [r2, #80] 480 vldr d21, [r2, #88] 481 add r3, r9, r3 482 str r3, [r7, #104] 483 veor q10, q10, q4 484 ldr r3, [r7, #40] 485 add r3, r8, r3 486 str r3, [r7, #100] 487 ldr r3, [r7, #72] 488 vstr d20, [r2, #80] 489 vstr d21, [r2, #88] 490 adds r1, r4, r3 491 str r1, [r7, #28] 492 ldmia r5!, {r0, r1, r2, r3} 493 ldr r4, [r7, #68] 494 ldr r5, [r7, #112] 495 ldr r8, [r7, #84] 496 add r5, r5, r4 497 ldr r4, [r7, #96] 498 str r5, [r7, #24] 499 ldr r5, [r7, #64] 500 add r4, r4, r5 501 ldr r5, [r7, #60] 502 str r4, [r7, #96] 503 ldr r4, [r7, #124] 504 add r4, r4, r5 505 str r4, [r7, #20] 506 ldr r4, [r7, #80] 507 mov r5, r8 508 str r0, [r4] @ unaligned 509 mov r0, r4 510 str r1, [r4, #4] @ unaligned 511 mov r4, r8 512 str r2, [r0, #8] @ unaligned 513 mov r8, r0 514 str r3, [r0, #12] @ unaligned 515 mov r9, r4 516 ldr r0, [r6, #16]! @ unaligned 517 ldr r3, [r6, #12] @ unaligned 518 ldr r1, [r6, #4] @ unaligned 519 ldr r2, [r6, #8] @ unaligned 520 ldr r6, [r7, #76] 521 stmia r5!, {r0, r1, r2, r3} 522 mov r5, r8 523 ldr r3, [r7, #88] 524 vldr d20, [r3, #80] 525 vldr d21, [r3, #88] 526 veor q10, q10, q5 527 vstr d20, [r3, #80] 528 vstr d21, [r3, #88] 529 ldmia r4!, {r0, r1, r2, r3} 530 mov r4, r9 531 str r0, [r8, #16] @ unaligned 532 str r1, [r8, #20] @ unaligned 533 str r2, [r8, #24] @ unaligned 534 str r3, [r8, #28] @ unaligned 535 mov r8, r5 536 ldr r0, [r6, #32]! @ unaligned 537 mov r5, r9 538 ldr r1, [r6, #4] @ unaligned 539 ldr r2, [r6, #8] @ unaligned 540 ldr r3, [r6, #12] @ unaligned 541 ldr r6, [r7, #76] 542 stmia r5!, {r0, r1, r2, r3} 543 mov r5, r8 544 ldr r1, [r7, #88] 545 vldr d16, [r1, #80] 546 vldr d17, [r1, #88] 547 veor q15, q8, q15 548 vstr d30, [r1, #80] 549 vstr d31, [r1, #88] 550 ldmia r4!, {r0, r1, r2, r3} 551 mov r4, r9 552 str r0, [r8, #32] @ unaligned 553 str r1, [r8, #36] @ unaligned 554 str r2, [r8, #40] @ unaligned 555 str r3, [r8, #44] @ unaligned 556 mov r8, r5 557 ldr r0, [r6, #48]! @ unaligned 558 ldr r1, [r6, #4] @ unaligned 559 ldr r2, [r6, #8] @ unaligned 560 ldr r3, [r6, #12] @ unaligned 561 ldr r6, [r7, #76] 562 stmia r4!, {r0, r1, r2, r3} 563 mov r4, r9 564 ldr r1, [r7, #88] 565 str r9, [r7, #112] 566 vldr d18, [r1, #80] 567 vldr d19, [r1, #88] 568 veor q9, q9, q2 569 vstr d18, [r1, #80] 570 vstr d19, [r1, #88] 571 ldmia r9!, {r0, r1, r2, r3} 572 str r0, [r5, #48] @ unaligned 573 str r1, [r5, #52] @ unaligned 574 str r2, [r5, #56] @ unaligned 575 str r3, [r5, #60] @ unaligned 576 ldr r0, [r6, #64]! @ unaligned 577 ldr r1, [r6, #4] @ unaligned 578 ldr r2, [r6, #8] @ unaligned 579 ldr r3, [r6, #12] @ unaligned 580 ldr r6, [r7, #76] 581 mov r9, r6 582 mov r6, r4 583 stmia r6!, {r0, r1, r2, r3} 584 mov r6, r4 585 ldr r1, [r7, #88] 586 vldr d18, [r1, #80] 587 vldr d19, [r1, #88] 588 veor q9, q9, q6 589 vstr d18, [r1, #80] 590 vstr d19, [r1, #88] 591 ldmia r4!, {r0, r1, r2, r3} 592 mov r4, r6 593 str r3, [r5, #76] @ unaligned 594 mov r3, r9 595 str r2, [r5, #72] @ unaligned 596 str r0, [r5, #64] @ unaligned 597 str r1, [r5, #68] @ unaligned 598 mov r5, r4 599 ldr r0, [r3, #80]! @ unaligned 600 mov r9, r3 601 ldr r1, [r9, #4] @ unaligned 602 ldr r2, [r9, #8] @ unaligned 603 ldr r3, [r9, #12] @ unaligned 604 mov r9, r4 605 ldr r6, [r7, #76] 606 str r9, [r7, #124] 607 stmia r5!, {r0, r1, r2, r3} 608 mov r5, r8 609 ldr r1, [r7, #88] 610 vldr d18, [r1, #80] 611 vldr d19, [r1, #88] 612 veor q1, q9, q1 613 vstr d2, [r1, #80] 614 vstr d3, [r1, #88] 615 ldmia r4!, {r0, r1, r2, r3} 616 mov r4, r9 617 str r0, [r8, #80] @ unaligned 618 str r1, [r8, #84] @ unaligned 619 str r2, [r8, #88] @ unaligned 620 str r3, [r8, #92] @ unaligned 621 ldr r0, [r6, #96]! @ unaligned 622 ldr r3, [r6, #12] @ unaligned 623 ldr r1, [r6, #4] @ unaligned 624 ldr r2, [r6, #8] @ unaligned 625 ldr r6, [r7, #76] 626 stmia r4!, {r0, r1, r2, r3} 627 mov r4, r9 628 ldr r3, [r7, #88] 629 vldr d16, [r3, #80] 630 vldr d17, [r3, #88] 631 veor q8, q8, q7 632 vstr d16, [r3, #80] 633 vstr d17, [r3, #88] 634 ldmia r9!, {r0, r1, r2, r3} 635 str r0, [r5, #96] @ unaligned 636 str r1, [r5, #100] @ unaligned 637 str r2, [r5, #104] @ unaligned 638 str r3, [r5, #108] @ unaligned 639 ldr r0, [r6, #112]! @ unaligned 640 ldr r1, [r6, #4] @ unaligned 641 ldr r2, [r6, #8] @ unaligned 642 ldr r3, [r6, #12] @ unaligned 643 mov r6, r4 644 stmia r6!, {r0, r1, r2, r3} 645 mov r6, r5 646 ldr r3, [r7, #88] 647 vldr d16, [r3, #80] 648 vldr d17, [r3, #88] 649 veor q8, q8, q3 650 vstr d16, [r3, #80] 651 vstr d17, [r3, #88] 652 ldmia r4!, {r0, r1, r2, r3} 653 mov r4, r5 654 mov r8, r4 655 str r2, [r5, #120] @ unaligned 656 ldr r2, [r7, #76] 657 str r0, [r5, #112] @ unaligned 658 str r1, [r5, #116] @ unaligned 659 str r3, [r5, #124] @ unaligned 660 ldr r3, [r2, #128] 661 ldr r1, [r7, #104] 662 eor r3, fp, r3 663 str r3, [r5, #128] 664 ldr r3, [r2, #132] 665 mov r5, r2 666 eor r3, r10, r3 667 str r3, [r6, #132] 668 ldr r3, [r2, #136] 669 mov r6, r5 670 eors r1, r1, r3 671 str r1, [r8, #136] 672 ldr r1, [r7, #56] 673 ldr r3, [r2, #140] 674 ldr r2, [r7, #100] 675 ldr r0, [r7, #108] 676 eors r3, r3, r2 677 str r3, [r4, #140] 678 ldr r3, [r1] 679 ldr r2, [r5, #144] 680 mov r8, r0 681 add r8, r8, r3 682 mov r5, r6 683 mov r3, r8 684 eors r2, r2, r3 685 str r2, [r4, #144] 686 ldr r3, [r6, #148] 687 ldr r2, [r1, #4] 688 ldr r6, [r7, #36] 689 add r6, r6, r2 690 eors r3, r3, r6 691 mov r6, r1 692 str r3, [r4, #148] 693 ldr r2, [r1, #8] 694 ldr r1, [r7, #116] 695 ldr r3, [r5, #152] 696 mov r8, r1 697 add r8, r8, r2 698 ldr r1, [r7, #32] 699 mov r2, r8 700 eors r3, r3, r2 701 str r3, [r4, #152] 702 mov r8, r4 703 ldr r2, [r6, #12] 704 ldr r3, [r5, #156] 705 add r1, r1, r2 706 eors r3, r3, r1 707 str r3, [r4, #156] 708 ldr r2, [r6, #16] 709 mov r1, r4 710 ldr r3, [r5, #160] 711 mov r4, r5 712 add ip, ip, r2 713 mov r5, r6 714 eor r3, ip, r3 715 str r3, [r1, #160] 716 ldr r2, [r6, #20] 717 ldr r3, [r4, #164] 718 add lr, lr, r2 719 ldr r2, [r7, #92] 720 eor r3, lr, r3 721 str r3, [r1, #164] 722 ldr r6, [r5, #24] 723 mov lr, r4 724 ldr r3, [r4, #168] 725 add r2, r2, r6 726 ldr r6, [r7, #120] 727 eors r3, r3, r2 728 str r3, [r1, #168] 729 ldr r5, [r5, #28] 730 ldr r3, [r4, #172] 731 add r6, r6, r5 732 eors r3, r3, r6 733 str r3, [r1, #172] 734 ldr r4, [r4, #176] 735 ldr r0, [r7, #28] 736 ldr r5, [r7, #24] 737 eors r4, r4, r0 738 str r4, [r8, #176] 739 ldr r0, [lr, #180] 740 ldr r2, [r7, #96] 741 eors r0, r0, r5 742 str r0, [r8, #180] 743 ldr r1, [lr, #184] 744 ldr r4, [r7, #20] 745 eors r1, r1, r2 746 str r1, [r8, #184] 747 ldr r2, [lr, #188] 748 add r1, lr, #192 749 ldr r3, [r7, #72] 750 eors r2, r2, r4 751 str r2, [r8, #188] 752 ldr r2, [r7, #16] 753 adds r3, r3, #3 754 str r3, [r7, #72] 755 mov r3, r8 756 adds r3, r3, #192 757 str r1, [r7, #76] 758 cmp r2, r3 759 str r3, [r7, #80] 760 bne .L4 761 ldr r3, [r7, #12] 762 ldr r2, [r7, #4] 763 add r3, r3, r2 764 str r3, [r7, #12] 765.L2: 766 ldr r1, [r7, #8] 767 movw r2, #43691 768 movt r2, 43690 769 umull r2, r3, r1, r2 770 lsr fp, r3, #7 771 lsl r3, fp, #8 772 sub fp, r3, fp, lsl #6 773 rsb fp, fp, r1 774 lsrs fp, fp, #6 775 beq .L6 776 ldr r5, [r7, #12] 777 ldr r4, [r7, #16] 778 ldr r6, [r7, #88] 779 ldr lr, [r7, #84] 780 vldr d30, .L94 781 vldr d31, .L94+8 782 str fp, [r7, #120] 783 str fp, [r7, #124] 784.L8: 785 vmov q2, q11 @ v4si 786 movs r3, #10 787 vmov q8, q14 @ v4si 788 vmov q9, q13 @ v4si 789 vmov q10, q12 @ v4si 790.L7: 791 vadd.i32 q10, q10, q9 792 subs r3, r3, #1 793 veor q3, q2, q10 794 vrev32.16 q3, q3 795 vadd.i32 q8, q8, q3 796 veor q9, q8, q9 797 vshl.i32 q2, q9, #12 798 vsri.32 q2, q9, #20 799 vadd.i32 q10, q10, q2 800 veor q3, q10, q3 801 vshl.i32 q9, q3, #8 802 vsri.32 q9, q3, #24 803 vadd.i32 q8, q8, q9 804 vext.32 q9, q9, q9, #3 805 veor q2, q8, q2 806 vext.32 q8, q8, q8, #2 807 vshl.i32 q3, q2, #7 808 vsri.32 q3, q2, #25 809 vext.32 q3, q3, q3, #1 810 vadd.i32 q10, q10, q3 811 veor q9, q10, q9 812 vrev32.16 q9, q9 813 vadd.i32 q8, q8, q9 814 veor q3, q8, q3 815 vshl.i32 q2, q3, #12 816 vsri.32 q2, q3, #20 817 vadd.i32 q10, q10, q2 818 vmov q3, q2 @ v4si 819 veor q9, q10, q9 820 vshl.i32 q2, q9, #8 821 vsri.32 q2, q9, #24 822 vadd.i32 q8, q8, q2 823 vext.32 q2, q2, q2, #1 824 veor q3, q8, q3 825 vext.32 q8, q8, q8, #2 826 vshl.i32 q9, q3, #7 827 vsri.32 q9, q3, #25 828 vext.32 q9, q9, q9, #3 829 bne .L7 830 ldr r0, [r5] @ unaligned 831 vadd.i32 q1, q12, q10 832 ldr r1, [r5, #4] @ unaligned 833 mov ip, lr 834 ldr r2, [r5, #8] @ unaligned 835 mov r9, lr 836 ldr r3, [r5, #12] @ unaligned 837 mov r10, r5 838 vadd.i32 q9, q13, q9 839 mov r8, lr 840 vadd.i32 q8, q14, q8 841 stmia ip!, {r0, r1, r2, r3} 842 mov ip, lr 843 vldr d20, [r6, #80] 844 vldr d21, [r6, #88] 845 vadd.i32 q3, q11, q2 846 veor q10, q10, q1 847 vadd.i32 q11, q11, q15 848 vstr d20, [r6, #80] 849 vstr d21, [r6, #88] 850 ldmia r9!, {r0, r1, r2, r3} 851 mov r9, r5 852 str r0, [r4] @ unaligned 853 str r1, [r4, #4] @ unaligned 854 str r2, [r4, #8] @ unaligned 855 str r3, [r4, #12] @ unaligned 856 ldr r0, [r10, #16]! @ unaligned 857 ldr r1, [r10, #4] @ unaligned 858 ldr r2, [r10, #8] @ unaligned 859 ldr r3, [r10, #12] @ unaligned 860 add r10, r4, #48 861 adds r4, r4, #64 862 stmia r8!, {r0, r1, r2, r3} 863 mov r8, lr 864 vldr d20, [r6, #80] 865 vldr d21, [r6, #88] 866 veor q10, q10, q9 867 vstr d20, [r6, #80] 868 vstr d21, [r6, #88] 869 ldmia ip!, {r0, r1, r2, r3} 870 mov ip, lr 871 str r0, [r4, #-48] @ unaligned 872 str r1, [r4, #-44] @ unaligned 873 str r2, [r4, #-40] @ unaligned 874 str r3, [r4, #-36] @ unaligned 875 ldr r0, [r9, #32]! @ unaligned 876 ldr r1, [r9, #4] @ unaligned 877 ldr r2, [r9, #8] @ unaligned 878 ldr r3, [r9, #12] @ unaligned 879 mov r9, r5 880 adds r5, r5, #64 881 stmia r8!, {r0, r1, r2, r3} 882 mov r8, lr 883 vldr d18, [r6, #80] 884 vldr d19, [r6, #88] 885 veor q9, q9, q8 886 vstr d18, [r6, #80] 887 vstr d19, [r6, #88] 888 ldmia ip!, {r0, r1, r2, r3} 889 mov ip, lr 890 str r0, [r4, #-32] @ unaligned 891 str r1, [r4, #-28] @ unaligned 892 str r2, [r4, #-24] @ unaligned 893 str r3, [r4, #-20] @ unaligned 894 ldr r0, [r9, #48]! @ unaligned 895 ldr r1, [r9, #4] @ unaligned 896 ldr r2, [r9, #8] @ unaligned 897 ldr r3, [r9, #12] @ unaligned 898 stmia r8!, {r0, r1, r2, r3} 899 vldr d16, [r6, #80] 900 vldr d17, [r6, #88] 901 veor q8, q8, q3 902 vstr d16, [r6, #80] 903 vstr d17, [r6, #88] 904 ldmia ip!, {r0, r1, r2, r3} 905 str r0, [r4, #-16] @ unaligned 906 str r1, [r4, #-12] @ unaligned 907 str r3, [r10, #12] @ unaligned 908 ldr r3, [r7, #124] 909 str r2, [r10, #8] @ unaligned 910 cmp r3, #1 911 beq .L87 912 movs r3, #1 913 str r3, [r7, #124] 914 b .L8 915.L95: 916 .align 3 917.L94: 918 .word 1 919 .word 0 920 .word 0 921 .word 0 922.L87: 923 ldr fp, [r7, #120] 924 ldr r3, [r7, #12] 925 lsl fp, fp, #6 926 add r3, r3, fp 927 str r3, [r7, #12] 928 ldr r3, [r7, #16] 929 add r3, r3, fp 930 str r3, [r7, #16] 931.L6: 932 ldr r3, [r7, #8] 933 ands r9, r3, #63 934 beq .L1 935 vmov q3, q11 @ v4si 936 movs r3, #10 937 vmov q8, q14 @ v4si 938 mov r5, r9 939 vmov q15, q13 @ v4si 940 vmov q10, q12 @ v4si 941.L10: 942 vadd.i32 q10, q10, q15 943 subs r3, r3, #1 944 veor q9, q3, q10 945 vrev32.16 q9, q9 946 vadd.i32 q8, q8, q9 947 veor q15, q8, q15 948 vshl.i32 q3, q15, #12 949 vsri.32 q3, q15, #20 950 vadd.i32 q10, q10, q3 951 veor q15, q10, q9 952 vshl.i32 q9, q15, #8 953 vsri.32 q9, q15, #24 954 vadd.i32 q8, q8, q9 955 vext.32 q9, q9, q9, #3 956 veor q3, q8, q3 957 vext.32 q8, q8, q8, #2 958 vshl.i32 q15, q3, #7 959 vsri.32 q15, q3, #25 960 vext.32 q15, q15, q15, #1 961 vadd.i32 q10, q10, q15 962 veor q9, q10, q9 963 vrev32.16 q9, q9 964 vadd.i32 q8, q8, q9 965 veor q15, q8, q15 966 vshl.i32 q3, q15, #12 967 vsri.32 q3, q15, #20 968 vadd.i32 q10, q10, q3 969 vmov q15, q3 @ v4si 970 veor q9, q10, q9 971 vshl.i32 q3, q9, #8 972 vsri.32 q3, q9, #24 973 vadd.i32 q8, q8, q3 974 vext.32 q3, q3, q3, #1 975 veor q9, q8, q15 976 vext.32 q8, q8, q8, #2 977 vshl.i32 q15, q9, #7 978 vsri.32 q15, q9, #25 979 vext.32 q15, q15, q15, #3 980 bne .L10 981 cmp r5, #15 982 mov r9, r5 983 bhi .L88 984 vadd.i32 q12, q12, q10 985 ldr r3, [r7, #88] 986 vst1.64 {d24-d25}, [r3:128] 987.L14: 988 ldr r3, [r7, #8] 989 and r2, r3, #48 990 cmp r9, r2 991 bls .L1 992 ldr r6, [r7, #16] 993 add r3, r2, #16 994 ldr r1, [r7, #12] 995 rsb ip, r2, r9 996 adds r0, r1, r2 997 mov r4, r6 998 add r1, r1, r3 999 add r4, r4, r2 1000 add r3, r3, r6 1001 cmp r0, r3 1002 it cc 1003 cmpcc r4, r1 1004 ite cs 1005 movcs r3, #1 1006 movcc r3, #0 1007 cmp ip, #18 1008 ite ls 1009 movls r3, #0 1010 andhi r3, r3, #1 1011 cmp r3, #0 1012 beq .L16 1013 and r1, r0, #7 1014 mov r3, r2 1015 negs r1, r1 1016 and r1, r1, #15 1017 cmp r1, ip 1018 it cs 1019 movcs r1, ip 1020 cmp r1, #0 1021 beq .L17 1022 ldr r5, [r7, #88] 1023 cmp r1, #1 1024 ldrb r0, [r0] @ zero_extendqisi2 1025 add r3, r2, #1 1026 ldrb lr, [r5, r2] @ zero_extendqisi2 1027 mov r6, r5 1028 eor r0, lr, r0 1029 strb r0, [r4] 1030 beq .L17 1031 ldr r0, [r7, #12] 1032 cmp r1, #2 1033 ldrb r4, [r5, r3] @ zero_extendqisi2 1034 ldr r5, [r7, #16] 1035 ldrb r0, [r0, r3] @ zero_extendqisi2 1036 eor r0, r0, r4 1037 strb r0, [r5, r3] 1038 add r3, r2, #2 1039 beq .L17 1040 ldr r0, [r7, #12] 1041 cmp r1, #3 1042 ldrb r4, [r6, r3] @ zero_extendqisi2 1043 ldrb r0, [r0, r3] @ zero_extendqisi2 1044 eor r0, r0, r4 1045 strb r0, [r5, r3] 1046 add r3, r2, #3 1047 beq .L17 1048 ldr r0, [r7, #12] 1049 cmp r1, #4 1050 ldrb r4, [r6, r3] @ zero_extendqisi2 1051 ldrb r0, [r0, r3] @ zero_extendqisi2 1052 eor r0, r0, r4 1053 strb r0, [r5, r3] 1054 add r3, r2, #4 1055 beq .L17 1056 ldr r0, [r7, #12] 1057 cmp r1, #5 1058 ldrb r4, [r6, r3] @ zero_extendqisi2 1059 ldrb r0, [r0, r3] @ zero_extendqisi2 1060 eor r0, r0, r4 1061 strb r0, [r5, r3] 1062 add r3, r2, #5 1063 beq .L17 1064 ldr r0, [r7, #12] 1065 cmp r1, #6 1066 ldrb r4, [r6, r3] @ zero_extendqisi2 1067 ldrb r0, [r0, r3] @ zero_extendqisi2 1068 eor r0, r0, r4 1069 strb r0, [r5, r3] 1070 add r3, r2, #6 1071 beq .L17 1072 ldr r0, [r7, #12] 1073 cmp r1, #7 1074 ldrb r4, [r6, r3] @ zero_extendqisi2 1075 ldrb r0, [r0, r3] @ zero_extendqisi2 1076 eor r0, r0, r4 1077 strb r0, [r5, r3] 1078 add r3, r2, #7 1079 beq .L17 1080 ldr r0, [r7, #12] 1081 cmp r1, #8 1082 ldrb r4, [r6, r3] @ zero_extendqisi2 1083 ldrb r0, [r0, r3] @ zero_extendqisi2 1084 eor r0, r0, r4 1085 strb r0, [r5, r3] 1086 add r3, r2, #8 1087 beq .L17 1088 ldr r0, [r7, #12] 1089 cmp r1, #9 1090 ldrb r4, [r6, r3] @ zero_extendqisi2 1091 ldrb r0, [r0, r3] @ zero_extendqisi2 1092 eor r0, r0, r4 1093 strb r0, [r5, r3] 1094 add r3, r2, #9 1095 beq .L17 1096 ldr r0, [r7, #12] 1097 cmp r1, #10 1098 ldrb r4, [r6, r3] @ zero_extendqisi2 1099 ldrb r0, [r0, r3] @ zero_extendqisi2 1100 eor r0, r0, r4 1101 strb r0, [r5, r3] 1102 add r3, r2, #10 1103 beq .L17 1104 ldr r0, [r7, #12] 1105 cmp r1, #11 1106 ldrb r4, [r6, r3] @ zero_extendqisi2 1107 ldrb r0, [r0, r3] @ zero_extendqisi2 1108 eor r0, r0, r4 1109 strb r0, [r5, r3] 1110 add r3, r2, #11 1111 beq .L17 1112 ldr r0, [r7, #12] 1113 cmp r1, #12 1114 ldrb r4, [r6, r3] @ zero_extendqisi2 1115 ldrb r0, [r0, r3] @ zero_extendqisi2 1116 eor r0, r0, r4 1117 strb r0, [r5, r3] 1118 add r3, r2, #12 1119 beq .L17 1120 ldr r0, [r7, #12] 1121 cmp r1, #13 1122 ldrb r4, [r6, r3] @ zero_extendqisi2 1123 ldrb r0, [r0, r3] @ zero_extendqisi2 1124 eor r0, r0, r4 1125 strb r0, [r5, r3] 1126 add r3, r2, #13 1127 beq .L17 1128 ldr r0, [r7, #12] 1129 cmp r1, #15 1130 ldrb r4, [r6, r3] @ zero_extendqisi2 1131 ldrb r0, [r0, r3] @ zero_extendqisi2 1132 eor r0, r0, r4 1133 strb r0, [r5, r3] 1134 add r3, r2, #14 1135 bne .L17 1136 ldr r0, [r7, #12] 1137 ldrb r4, [r6, r3] @ zero_extendqisi2 1138 ldrb r0, [r0, r3] @ zero_extendqisi2 1139 eors r0, r0, r4 1140 strb r0, [r5, r3] 1141 add r3, r2, #15 1142.L17: 1143 rsb r4, r1, ip 1144 add r0, ip, #-1 1145 sub r6, r4, #16 1146 subs r0, r0, r1 1147 cmp r0, #14 1148 lsr r6, r6, #4 1149 add r6, r6, #1 1150 lsl lr, r6, #4 1151 bls .L19 1152 add r2, r2, r1 1153 ldr r1, [r7, #12] 1154 ldr r5, [r7, #16] 1155 cmp r6, #1 1156 add r0, r1, r2 1157 ldr r1, [r7, #88] 1158 add r1, r1, r2 1159 vld1.64 {d18-d19}, [r0:64] 1160 add r2, r2, r5 1161 vld1.8 {q8}, [r1] 1162 veor q8, q8, q9 1163 vst1.8 {q8}, [r2] 1164 beq .L20 1165 add r8, r1, #16 1166 add ip, r2, #16 1167 vldr d18, [r0, #16] 1168 vldr d19, [r0, #24] 1169 cmp r6, #2 1170 vld1.8 {q8}, [r8] 1171 veor q8, q8, q9 1172 vst1.8 {q8}, [ip] 1173 beq .L20 1174 add r8, r1, #32 1175 add ip, r2, #32 1176 vldr d18, [r0, #32] 1177 vldr d19, [r0, #40] 1178 cmp r6, #3 1179 vld1.8 {q8}, [r8] 1180 veor q8, q8, q9 1181 vst1.8 {q8}, [ip] 1182 beq .L20 1183 adds r1, r1, #48 1184 adds r2, r2, #48 1185 vldr d18, [r0, #48] 1186 vldr d19, [r0, #56] 1187 vld1.8 {q8}, [r1] 1188 veor q8, q8, q9 1189 vst1.8 {q8}, [r2] 1190.L20: 1191 cmp lr, r4 1192 add r3, r3, lr 1193 beq .L1 1194.L19: 1195 ldr r4, [r7, #88] 1196 adds r2, r3, #1 1197 ldr r1, [r7, #12] 1198 cmp r2, r9 1199 ldr r5, [r7, #16] 1200 ldrb r0, [r4, r3] @ zero_extendqisi2 1201 ldrb r1, [r1, r3] @ zero_extendqisi2 1202 eor r1, r1, r0 1203 strb r1, [r5, r3] 1204 bcs .L1 1205 ldr r0, [r7, #12] 1206 adds r1, r3, #2 1207 mov r6, r4 1208 cmp r9, r1 1209 ldrb r4, [r4, r2] @ zero_extendqisi2 1210 ldrb r0, [r0, r2] @ zero_extendqisi2 1211 eor r0, r0, r4 1212 strb r0, [r5, r2] 1213 bls .L1 1214 ldr r0, [r7, #12] 1215 adds r2, r3, #3 1216 ldrb r4, [r6, r1] @ zero_extendqisi2 1217 cmp r9, r2 1218 ldrb r0, [r0, r1] @ zero_extendqisi2 1219 eor r0, r0, r4 1220 strb r0, [r5, r1] 1221 bls .L1 1222 ldr r0, [r7, #12] 1223 adds r1, r3, #4 1224 ldrb r4, [r6, r2] @ zero_extendqisi2 1225 cmp r9, r1 1226 ldrb r0, [r0, r2] @ zero_extendqisi2 1227 eor r0, r0, r4 1228 strb r0, [r5, r2] 1229 bls .L1 1230 ldr r0, [r7, #12] 1231 adds r2, r3, #5 1232 ldrb r4, [r6, r1] @ zero_extendqisi2 1233 cmp r9, r2 1234 ldrb r0, [r0, r1] @ zero_extendqisi2 1235 eor r0, r0, r4 1236 strb r0, [r5, r1] 1237 bls .L1 1238 ldr r0, [r7, #12] 1239 adds r1, r3, #6 1240 ldrb r4, [r6, r2] @ zero_extendqisi2 1241 cmp r9, r1 1242 ldrb r0, [r0, r2] @ zero_extendqisi2 1243 eor r0, r0, r4 1244 strb r0, [r5, r2] 1245 bls .L1 1246 ldr r0, [r7, #12] 1247 adds r2, r3, #7 1248 ldrb r4, [r6, r1] @ zero_extendqisi2 1249 cmp r9, r2 1250 ldrb r0, [r0, r1] @ zero_extendqisi2 1251 eor r0, r0, r4 1252 strb r0, [r5, r1] 1253 bls .L1 1254 ldr r0, [r7, #12] 1255 add r1, r3, #8 1256 ldrb r4, [r6, r2] @ zero_extendqisi2 1257 cmp r9, r1 1258 ldrb r0, [r0, r2] @ zero_extendqisi2 1259 eor r0, r0, r4 1260 strb r0, [r5, r2] 1261 bls .L1 1262 ldr r0, [r7, #12] 1263 add r2, r3, #9 1264 ldrb r4, [r6, r1] @ zero_extendqisi2 1265 cmp r9, r2 1266 ldrb r0, [r0, r1] @ zero_extendqisi2 1267 eor r0, r0, r4 1268 strb r0, [r5, r1] 1269 bls .L1 1270 ldr r0, [r7, #12] 1271 add r1, r3, #10 1272 ldrb r4, [r6, r2] @ zero_extendqisi2 1273 cmp r9, r1 1274 ldrb r0, [r0, r2] @ zero_extendqisi2 1275 eor r0, r0, r4 1276 strb r0, [r5, r2] 1277 bls .L1 1278 ldr r0, [r7, #12] 1279 add r2, r3, #11 1280 ldrb r4, [r6, r1] @ zero_extendqisi2 1281 cmp r9, r2 1282 ldrb r0, [r0, r1] @ zero_extendqisi2 1283 eor r0, r0, r4 1284 strb r0, [r5, r1] 1285 bls .L1 1286 ldr r0, [r7, #12] 1287 add r1, r3, #12 1288 ldrb r4, [r6, r2] @ zero_extendqisi2 1289 cmp r9, r1 1290 ldrb r0, [r0, r2] @ zero_extendqisi2 1291 eor r0, r0, r4 1292 strb r0, [r5, r2] 1293 bls .L1 1294 ldr r0, [r7, #12] 1295 add r2, r3, #13 1296 ldrb r4, [r6, r1] @ zero_extendqisi2 1297 cmp r9, r2 1298 ldrb r0, [r0, r1] @ zero_extendqisi2 1299 eor r0, r0, r4 1300 strb r0, [r5, r1] 1301 bls .L1 1302 ldr r1, [r7, #12] 1303 adds r3, r3, #14 1304 ldrb r0, [r6, r2] @ zero_extendqisi2 1305 cmp r9, r3 1306 ldrb r1, [r1, r2] @ zero_extendqisi2 1307 eor r1, r1, r0 1308 strb r1, [r5, r2] 1309 bls .L1 1310 ldr r2, [r7, #88] 1311 ldrb r1, [r2, r3] @ zero_extendqisi2 1312 ldr r2, [r7, #12] 1313 ldrb r2, [r2, r3] @ zero_extendqisi2 1314 eors r2, r2, r1 1315 ldr r1, [r7, #16] 1316 strb r2, [r1, r3] 1317.L1: 1318 adds r7, r7, #164 1319 mov sp, r7 1320 @ sp needed 1321 vldm sp!, {d8-d15} 1322 pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} 1323.L88: 1324 ldr r5, [r7, #12] 1325 vadd.i32 q12, q12, q10 1326 ldr r4, [r7, #84] 1327 cmp r9, #31 1328 ldr r0, [r5] @ unaligned 1329 ldr r1, [r5, #4] @ unaligned 1330 mov r6, r4 1331 ldr r2, [r5, #8] @ unaligned 1332 ldr r3, [r5, #12] @ unaligned 1333 stmia r6!, {r0, r1, r2, r3} 1334 ldr r2, [r7, #88] 1335 ldr r6, [r7, #16] 1336 vldr d18, [r2, #80] 1337 vldr d19, [r2, #88] 1338 veor q9, q9, q12 1339 vstr d18, [r2, #80] 1340 vstr d19, [r2, #88] 1341 ldmia r4!, {r0, r1, r2, r3} 1342 str r1, [r6, #4] @ unaligned 1343 mov r1, r6 1344 str r0, [r6] @ unaligned 1345 str r2, [r6, #8] @ unaligned 1346 str r3, [r6, #12] @ unaligned 1347 bhi .L89 1348 vadd.i32 q13, q13, q15 1349 ldr r3, [r7, #88] 1350 vstr d26, [r3, #16] 1351 vstr d27, [r3, #24] 1352 b .L14 1353.L16: 1354 subs r3, r2, #1 1355 ldr r2, [r7, #12] 1356 add r2, r2, r9 1357 mov r5, r2 1358 ldr r2, [r7, #88] 1359 add r2, r2, r3 1360 mov r3, r2 1361.L24: 1362 ldrb r1, [r0], #1 @ zero_extendqisi2 1363 ldrb r2, [r3, #1]! @ zero_extendqisi2 1364 cmp r0, r5 1365 eor r2, r2, r1 1366 strb r2, [r4], #1 1367 bne .L24 1368 adds r7, r7, #164 1369 mov sp, r7 1370 @ sp needed 1371 vldm sp!, {d8-d15} 1372 pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} 1373.L26: 1374 ldr r3, [r7, #80] 1375 str r3, [r7, #16] 1376 b .L2 1377.L89: 1378 mov r3, r5 1379 ldr r4, [r7, #84] 1380 ldr r0, [r3, #16]! @ unaligned 1381 add lr, r1, #16 1382 mov r5, r1 1383 vadd.i32 q13, q13, q15 1384 mov r6, r4 1385 cmp r9, #47 1386 ldr r1, [r3, #4] @ unaligned 1387 ldr r2, [r3, #8] @ unaligned 1388 ldr r3, [r3, #12] @ unaligned 1389 stmia r6!, {r0, r1, r2, r3} 1390 ldr r2, [r7, #88] 1391 vldr d18, [r2, #80] 1392 vldr d19, [r2, #88] 1393 veor q13, q9, q13 1394 vstr d26, [r2, #80] 1395 vstr d27, [r2, #88] 1396 ldmia r4!, {r0, r1, r2, r3} 1397 str r0, [r5, #16] @ unaligned 1398 str r1, [lr, #4] @ unaligned 1399 str r2, [lr, #8] @ unaligned 1400 str r3, [lr, #12] @ unaligned 1401 bhi .L90 1402 vadd.i32 q8, q14, q8 1403 ldr r3, [r7, #88] 1404 vstr d16, [r3, #32] 1405 vstr d17, [r3, #40] 1406 b .L14 1407.L90: 1408 ldr r3, [r7, #12] 1409 add lr, r5, #32 1410 ldr r4, [r7, #84] 1411 vadd.i32 q8, q14, q8 1412 ldr r5, [r7, #88] 1413 vadd.i32 q11, q11, q3 1414 ldr r0, [r3, #32]! @ unaligned 1415 mov r6, r4 1416 vstr d22, [r5, #48] 1417 vstr d23, [r5, #56] 1418 ldr r1, [r3, #4] @ unaligned 1419 ldr r2, [r3, #8] @ unaligned 1420 ldr r3, [r3, #12] @ unaligned 1421 stmia r4!, {r0, r1, r2, r3} 1422 vldr d18, [r5, #80] 1423 vldr d19, [r5, #88] 1424 veor q9, q9, q8 1425 ldr r4, [r7, #16] 1426 vstr d18, [r5, #80] 1427 vstr d19, [r5, #88] 1428 ldmia r6!, {r0, r1, r2, r3} 1429 str r0, [r4, #32] @ unaligned 1430 str r1, [lr, #4] @ unaligned 1431 str r2, [lr, #8] @ unaligned 1432 str r3, [lr, #12] @ unaligned 1433 b .L14 1434 .size CRYPTO_chacha_20_neon, .-CRYPTO_chacha_20_neon 1435 .section .rodata 1436 .align 2 1437.LANCHOR0 = . + 0 1438.LC0: 1439 .word 1634760805 1440 .word 857760878 1441 .word 2036477234 1442 .word 1797285236 1443 .ident "GCC: (Linaro GCC 2014.11) 4.9.3 20141031 (prerelease)" 1444 .section .note.GNU-stack,"",%progbits 1445 1446#endif /* __arm__ */ 1447#endif /* !OPENSSL_NO_ASM */ 1448