1 /* Copyright (c) 2015, 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 is taken from crypto_scalarmult/curve25519/neon2/scalarmult.s in 16 * SUPERCOP 20141124 (http://bench.cr.yp.to/supercop.html). That code is public 17 * domain licensed but the standard ISC license is included above to keep 18 * licensing simple. */ 19 20 #if defined(__has_feature) 21 #if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM) 22 #define OPENSSL_NO_ASM 23 #endif 24 #endif 25 26 #if !defined(OPENSSL_NO_ASM) && defined(__arm__) && !defined(__APPLE__) 27 28 #if defined(BORINGSSL_PREFIX) 29 #include <boringssl_prefix_symbols_asm.h> 30 #endif 31 32 .fpu neon 33 .text 34 .align 4 35 36 .global x25519_NEON 37 .hidden x25519_NEON 38 .type x25519_NEON, %function 39 x25519_NEON: 40 vpush {q4,q5,q6,q7} 41 mov r12,sp 42 sub sp,sp,#736 43 and sp,sp,#0xffffffe0 44 strd r4,[sp,#0] 45 strd r6,[sp,#8] 46 strd r8,[sp,#16] 47 strd r10,[sp,#24] 48 str r12,[sp,#480] 49 str r14,[sp,#484] 50 mov r0,r0 51 mov r1,r1 52 mov r2,r2 53 add r3,sp,#32 54 ldr r4,=0 55 ldr r5,=254 56 vmov.i32 q0,#1 57 vshr.u64 q1,q0,#7 58 vshr.u64 q0,q0,#8 59 vmov.i32 d4,#19 60 vmov.i32 d5,#38 61 add r6,sp,#512 62 vst1.8 {d2-d3},[r6,: 128] 63 add r6,sp,#528 64 vst1.8 {d0-d1},[r6,: 128] 65 add r6,sp,#544 66 vst1.8 {d4-d5},[r6,: 128] 67 add r6,r3,#0 68 vmov.i32 q2,#0 69 vst1.8 {d4-d5},[r6,: 128]! 70 vst1.8 {d4-d5},[r6,: 128]! 71 vst1.8 d4,[r6,: 64] 72 add r6,r3,#0 73 ldr r7,=960 74 sub r7,r7,#2 75 neg r7,r7 76 sub r7,r7,r7,LSL #7 77 str r7,[r6] 78 add r6,sp,#704 79 vld1.8 {d4-d5},[r1]! 80 vld1.8 {d6-d7},[r1] 81 vst1.8 {d4-d5},[r6,: 128]! 82 vst1.8 {d6-d7},[r6,: 128] 83 sub r1,r6,#16 84 ldrb r6,[r1] 85 and r6,r6,#248 86 strb r6,[r1] 87 ldrb r6,[r1,#31] 88 and r6,r6,#127 89 orr r6,r6,#64 90 strb r6,[r1,#31] 91 vmov.i64 q2,#0xffffffff 92 vshr.u64 q3,q2,#7 93 vshr.u64 q2,q2,#6 94 vld1.8 {d8},[r2] 95 vld1.8 {d10},[r2] 96 add r2,r2,#6 97 vld1.8 {d12},[r2] 98 vld1.8 {d14},[r2] 99 add r2,r2,#6 100 vld1.8 {d16},[r2] 101 add r2,r2,#4 102 vld1.8 {d18},[r2] 103 vld1.8 {d20},[r2] 104 add r2,r2,#6 105 vld1.8 {d22},[r2] 106 add r2,r2,#2 107 vld1.8 {d24},[r2] 108 vld1.8 {d26},[r2] 109 vshr.u64 q5,q5,#26 110 vshr.u64 q6,q6,#3 111 vshr.u64 q7,q7,#29 112 vshr.u64 q8,q8,#6 113 vshr.u64 q10,q10,#25 114 vshr.u64 q11,q11,#3 115 vshr.u64 q12,q12,#12 116 vshr.u64 q13,q13,#38 117 vand q4,q4,q2 118 vand q6,q6,q2 119 vand q8,q8,q2 120 vand q10,q10,q2 121 vand q2,q12,q2 122 vand q5,q5,q3 123 vand q7,q7,q3 124 vand q9,q9,q3 125 vand q11,q11,q3 126 vand q3,q13,q3 127 add r2,r3,#48 128 vadd.i64 q12,q4,q1 129 vadd.i64 q13,q10,q1 130 vshr.s64 q12,q12,#26 131 vshr.s64 q13,q13,#26 132 vadd.i64 q5,q5,q12 133 vshl.i64 q12,q12,#26 134 vadd.i64 q14,q5,q0 135 vadd.i64 q11,q11,q13 136 vshl.i64 q13,q13,#26 137 vadd.i64 q15,q11,q0 138 vsub.i64 q4,q4,q12 139 vshr.s64 q12,q14,#25 140 vsub.i64 q10,q10,q13 141 vshr.s64 q13,q15,#25 142 vadd.i64 q6,q6,q12 143 vshl.i64 q12,q12,#25 144 vadd.i64 q14,q6,q1 145 vadd.i64 q2,q2,q13 146 vsub.i64 q5,q5,q12 147 vshr.s64 q12,q14,#26 148 vshl.i64 q13,q13,#25 149 vadd.i64 q14,q2,q1 150 vadd.i64 q7,q7,q12 151 vshl.i64 q12,q12,#26 152 vadd.i64 q15,q7,q0 153 vsub.i64 q11,q11,q13 154 vshr.s64 q13,q14,#26 155 vsub.i64 q6,q6,q12 156 vshr.s64 q12,q15,#25 157 vadd.i64 q3,q3,q13 158 vshl.i64 q13,q13,#26 159 vadd.i64 q14,q3,q0 160 vadd.i64 q8,q8,q12 161 vshl.i64 q12,q12,#25 162 vadd.i64 q15,q8,q1 163 add r2,r2,#8 164 vsub.i64 q2,q2,q13 165 vshr.s64 q13,q14,#25 166 vsub.i64 q7,q7,q12 167 vshr.s64 q12,q15,#26 168 vadd.i64 q14,q13,q13 169 vadd.i64 q9,q9,q12 170 vtrn.32 d12,d14 171 vshl.i64 q12,q12,#26 172 vtrn.32 d13,d15 173 vadd.i64 q0,q9,q0 174 vadd.i64 q4,q4,q14 175 vst1.8 d12,[r2,: 64]! 176 vshl.i64 q6,q13,#4 177 vsub.i64 q7,q8,q12 178 vshr.s64 q0,q0,#25 179 vadd.i64 q4,q4,q6 180 vadd.i64 q6,q10,q0 181 vshl.i64 q0,q0,#25 182 vadd.i64 q8,q6,q1 183 vadd.i64 q4,q4,q13 184 vshl.i64 q10,q13,#25 185 vadd.i64 q1,q4,q1 186 vsub.i64 q0,q9,q0 187 vshr.s64 q8,q8,#26 188 vsub.i64 q3,q3,q10 189 vtrn.32 d14,d0 190 vshr.s64 q1,q1,#26 191 vtrn.32 d15,d1 192 vadd.i64 q0,q11,q8 193 vst1.8 d14,[r2,: 64] 194 vshl.i64 q7,q8,#26 195 vadd.i64 q5,q5,q1 196 vtrn.32 d4,d6 197 vshl.i64 q1,q1,#26 198 vtrn.32 d5,d7 199 vsub.i64 q3,q6,q7 200 add r2,r2,#16 201 vsub.i64 q1,q4,q1 202 vst1.8 d4,[r2,: 64] 203 vtrn.32 d6,d0 204 vtrn.32 d7,d1 205 sub r2,r2,#8 206 vtrn.32 d2,d10 207 vtrn.32 d3,d11 208 vst1.8 d6,[r2,: 64] 209 sub r2,r2,#24 210 vst1.8 d2,[r2,: 64] 211 add r2,r3,#96 212 vmov.i32 q0,#0 213 vmov.i64 d2,#0xff 214 vmov.i64 d3,#0 215 vshr.u32 q1,q1,#7 216 vst1.8 {d2-d3},[r2,: 128]! 217 vst1.8 {d0-d1},[r2,: 128]! 218 vst1.8 d0,[r2,: 64] 219 add r2,r3,#144 220 vmov.i32 q0,#0 221 vst1.8 {d0-d1},[r2,: 128]! 222 vst1.8 {d0-d1},[r2,: 128]! 223 vst1.8 d0,[r2,: 64] 224 add r2,r3,#240 225 vmov.i32 q0,#0 226 vmov.i64 d2,#0xff 227 vmov.i64 d3,#0 228 vshr.u32 q1,q1,#7 229 vst1.8 {d2-d3},[r2,: 128]! 230 vst1.8 {d0-d1},[r2,: 128]! 231 vst1.8 d0,[r2,: 64] 232 add r2,r3,#48 233 add r6,r3,#192 234 vld1.8 {d0-d1},[r2,: 128]! 235 vld1.8 {d2-d3},[r2,: 128]! 236 vld1.8 {d4},[r2,: 64] 237 vst1.8 {d0-d1},[r6,: 128]! 238 vst1.8 {d2-d3},[r6,: 128]! 239 vst1.8 d4,[r6,: 64] 240 ._mainloop: 241 mov r2,r5,LSR #3 242 and r6,r5,#7 243 ldrb r2,[r1,r2] 244 mov r2,r2,LSR r6 245 and r2,r2,#1 246 str r5,[sp,#488] 247 eor r4,r4,r2 248 str r2,[sp,#492] 249 neg r2,r4 250 add r4,r3,#96 251 add r5,r3,#192 252 add r6,r3,#144 253 vld1.8 {d8-d9},[r4,: 128]! 254 add r7,r3,#240 255 vld1.8 {d10-d11},[r5,: 128]! 256 veor q6,q4,q5 257 vld1.8 {d14-d15},[r6,: 128]! 258 vdup.i32 q8,r2 259 vld1.8 {d18-d19},[r7,: 128]! 260 veor q10,q7,q9 261 vld1.8 {d22-d23},[r4,: 128]! 262 vand q6,q6,q8 263 vld1.8 {d24-d25},[r5,: 128]! 264 vand q10,q10,q8 265 vld1.8 {d26-d27},[r6,: 128]! 266 veor q4,q4,q6 267 vld1.8 {d28-d29},[r7,: 128]! 268 veor q5,q5,q6 269 vld1.8 {d0},[r4,: 64] 270 veor q6,q7,q10 271 vld1.8 {d2},[r5,: 64] 272 veor q7,q9,q10 273 vld1.8 {d4},[r6,: 64] 274 veor q9,q11,q12 275 vld1.8 {d6},[r7,: 64] 276 veor q10,q0,q1 277 sub r2,r4,#32 278 vand q9,q9,q8 279 sub r4,r5,#32 280 vand q10,q10,q8 281 sub r5,r6,#32 282 veor q11,q11,q9 283 sub r6,r7,#32 284 veor q0,q0,q10 285 veor q9,q12,q9 286 veor q1,q1,q10 287 veor q10,q13,q14 288 veor q12,q2,q3 289 vand q10,q10,q8 290 vand q8,q12,q8 291 veor q12,q13,q10 292 veor q2,q2,q8 293 veor q10,q14,q10 294 veor q3,q3,q8 295 vadd.i32 q8,q4,q6 296 vsub.i32 q4,q4,q6 297 vst1.8 {d16-d17},[r2,: 128]! 298 vadd.i32 q6,q11,q12 299 vst1.8 {d8-d9},[r5,: 128]! 300 vsub.i32 q4,q11,q12 301 vst1.8 {d12-d13},[r2,: 128]! 302 vadd.i32 q6,q0,q2 303 vst1.8 {d8-d9},[r5,: 128]! 304 vsub.i32 q0,q0,q2 305 vst1.8 d12,[r2,: 64] 306 vadd.i32 q2,q5,q7 307 vst1.8 d0,[r5,: 64] 308 vsub.i32 q0,q5,q7 309 vst1.8 {d4-d5},[r4,: 128]! 310 vadd.i32 q2,q9,q10 311 vst1.8 {d0-d1},[r6,: 128]! 312 vsub.i32 q0,q9,q10 313 vst1.8 {d4-d5},[r4,: 128]! 314 vadd.i32 q2,q1,q3 315 vst1.8 {d0-d1},[r6,: 128]! 316 vsub.i32 q0,q1,q3 317 vst1.8 d4,[r4,: 64] 318 vst1.8 d0,[r6,: 64] 319 add r2,sp,#544 320 add r4,r3,#96 321 add r5,r3,#144 322 vld1.8 {d0-d1},[r2,: 128] 323 vld1.8 {d2-d3},[r4,: 128]! 324 vld1.8 {d4-d5},[r5,: 128]! 325 vzip.i32 q1,q2 326 vld1.8 {d6-d7},[r4,: 128]! 327 vld1.8 {d8-d9},[r5,: 128]! 328 vshl.i32 q5,q1,#1 329 vzip.i32 q3,q4 330 vshl.i32 q6,q2,#1 331 vld1.8 {d14},[r4,: 64] 332 vshl.i32 q8,q3,#1 333 vld1.8 {d15},[r5,: 64] 334 vshl.i32 q9,q4,#1 335 vmul.i32 d21,d7,d1 336 vtrn.32 d14,d15 337 vmul.i32 q11,q4,q0 338 vmul.i32 q0,q7,q0 339 vmull.s32 q12,d2,d2 340 vmlal.s32 q12,d11,d1 341 vmlal.s32 q12,d12,d0 342 vmlal.s32 q12,d13,d23 343 vmlal.s32 q12,d16,d22 344 vmlal.s32 q12,d7,d21 345 vmull.s32 q10,d2,d11 346 vmlal.s32 q10,d4,d1 347 vmlal.s32 q10,d13,d0 348 vmlal.s32 q10,d6,d23 349 vmlal.s32 q10,d17,d22 350 vmull.s32 q13,d10,d4 351 vmlal.s32 q13,d11,d3 352 vmlal.s32 q13,d13,d1 353 vmlal.s32 q13,d16,d0 354 vmlal.s32 q13,d17,d23 355 vmlal.s32 q13,d8,d22 356 vmull.s32 q1,d10,d5 357 vmlal.s32 q1,d11,d4 358 vmlal.s32 q1,d6,d1 359 vmlal.s32 q1,d17,d0 360 vmlal.s32 q1,d8,d23 361 vmull.s32 q14,d10,d6 362 vmlal.s32 q14,d11,d13 363 vmlal.s32 q14,d4,d4 364 vmlal.s32 q14,d17,d1 365 vmlal.s32 q14,d18,d0 366 vmlal.s32 q14,d9,d23 367 vmull.s32 q11,d10,d7 368 vmlal.s32 q11,d11,d6 369 vmlal.s32 q11,d12,d5 370 vmlal.s32 q11,d8,d1 371 vmlal.s32 q11,d19,d0 372 vmull.s32 q15,d10,d8 373 vmlal.s32 q15,d11,d17 374 vmlal.s32 q15,d12,d6 375 vmlal.s32 q15,d13,d5 376 vmlal.s32 q15,d19,d1 377 vmlal.s32 q15,d14,d0 378 vmull.s32 q2,d10,d9 379 vmlal.s32 q2,d11,d8 380 vmlal.s32 q2,d12,d7 381 vmlal.s32 q2,d13,d6 382 vmlal.s32 q2,d14,d1 383 vmull.s32 q0,d15,d1 384 vmlal.s32 q0,d10,d14 385 vmlal.s32 q0,d11,d19 386 vmlal.s32 q0,d12,d8 387 vmlal.s32 q0,d13,d17 388 vmlal.s32 q0,d6,d6 389 add r2,sp,#512 390 vld1.8 {d18-d19},[r2,: 128] 391 vmull.s32 q3,d16,d7 392 vmlal.s32 q3,d10,d15 393 vmlal.s32 q3,d11,d14 394 vmlal.s32 q3,d12,d9 395 vmlal.s32 q3,d13,d8 396 add r2,sp,#528 397 vld1.8 {d8-d9},[r2,: 128] 398 vadd.i64 q5,q12,q9 399 vadd.i64 q6,q15,q9 400 vshr.s64 q5,q5,#26 401 vshr.s64 q6,q6,#26 402 vadd.i64 q7,q10,q5 403 vshl.i64 q5,q5,#26 404 vadd.i64 q8,q7,q4 405 vadd.i64 q2,q2,q6 406 vshl.i64 q6,q6,#26 407 vadd.i64 q10,q2,q4 408 vsub.i64 q5,q12,q5 409 vshr.s64 q8,q8,#25 410 vsub.i64 q6,q15,q6 411 vshr.s64 q10,q10,#25 412 vadd.i64 q12,q13,q8 413 vshl.i64 q8,q8,#25 414 vadd.i64 q13,q12,q9 415 vadd.i64 q0,q0,q10 416 vsub.i64 q7,q7,q8 417 vshr.s64 q8,q13,#26 418 vshl.i64 q10,q10,#25 419 vadd.i64 q13,q0,q9 420 vadd.i64 q1,q1,q8 421 vshl.i64 q8,q8,#26 422 vadd.i64 q15,q1,q4 423 vsub.i64 q2,q2,q10 424 vshr.s64 q10,q13,#26 425 vsub.i64 q8,q12,q8 426 vshr.s64 q12,q15,#25 427 vadd.i64 q3,q3,q10 428 vshl.i64 q10,q10,#26 429 vadd.i64 q13,q3,q4 430 vadd.i64 q14,q14,q12 431 add r2,r3,#288 432 vshl.i64 q12,q12,#25 433 add r4,r3,#336 434 vadd.i64 q15,q14,q9 435 add r2,r2,#8 436 vsub.i64 q0,q0,q10 437 add r4,r4,#8 438 vshr.s64 q10,q13,#25 439 vsub.i64 q1,q1,q12 440 vshr.s64 q12,q15,#26 441 vadd.i64 q13,q10,q10 442 vadd.i64 q11,q11,q12 443 vtrn.32 d16,d2 444 vshl.i64 q12,q12,#26 445 vtrn.32 d17,d3 446 vadd.i64 q1,q11,q4 447 vadd.i64 q4,q5,q13 448 vst1.8 d16,[r2,: 64]! 449 vshl.i64 q5,q10,#4 450 vst1.8 d17,[r4,: 64]! 451 vsub.i64 q8,q14,q12 452 vshr.s64 q1,q1,#25 453 vadd.i64 q4,q4,q5 454 vadd.i64 q5,q6,q1 455 vshl.i64 q1,q1,#25 456 vadd.i64 q6,q5,q9 457 vadd.i64 q4,q4,q10 458 vshl.i64 q10,q10,#25 459 vadd.i64 q9,q4,q9 460 vsub.i64 q1,q11,q1 461 vshr.s64 q6,q6,#26 462 vsub.i64 q3,q3,q10 463 vtrn.32 d16,d2 464 vshr.s64 q9,q9,#26 465 vtrn.32 d17,d3 466 vadd.i64 q1,q2,q6 467 vst1.8 d16,[r2,: 64] 468 vshl.i64 q2,q6,#26 469 vst1.8 d17,[r4,: 64] 470 vadd.i64 q6,q7,q9 471 vtrn.32 d0,d6 472 vshl.i64 q7,q9,#26 473 vtrn.32 d1,d7 474 vsub.i64 q2,q5,q2 475 add r2,r2,#16 476 vsub.i64 q3,q4,q7 477 vst1.8 d0,[r2,: 64] 478 add r4,r4,#16 479 vst1.8 d1,[r4,: 64] 480 vtrn.32 d4,d2 481 vtrn.32 d5,d3 482 sub r2,r2,#8 483 sub r4,r4,#8 484 vtrn.32 d6,d12 485 vtrn.32 d7,d13 486 vst1.8 d4,[r2,: 64] 487 vst1.8 d5,[r4,: 64] 488 sub r2,r2,#24 489 sub r4,r4,#24 490 vst1.8 d6,[r2,: 64] 491 vst1.8 d7,[r4,: 64] 492 add r2,r3,#240 493 add r4,r3,#96 494 vld1.8 {d0-d1},[r4,: 128]! 495 vld1.8 {d2-d3},[r4,: 128]! 496 vld1.8 {d4},[r4,: 64] 497 add r4,r3,#144 498 vld1.8 {d6-d7},[r4,: 128]! 499 vtrn.32 q0,q3 500 vld1.8 {d8-d9},[r4,: 128]! 501 vshl.i32 q5,q0,#4 502 vtrn.32 q1,q4 503 vshl.i32 q6,q3,#4 504 vadd.i32 q5,q5,q0 505 vadd.i32 q6,q6,q3 506 vshl.i32 q7,q1,#4 507 vld1.8 {d5},[r4,: 64] 508 vshl.i32 q8,q4,#4 509 vtrn.32 d4,d5 510 vadd.i32 q7,q7,q1 511 vadd.i32 q8,q8,q4 512 vld1.8 {d18-d19},[r2,: 128]! 513 vshl.i32 q10,q2,#4 514 vld1.8 {d22-d23},[r2,: 128]! 515 vadd.i32 q10,q10,q2 516 vld1.8 {d24},[r2,: 64] 517 vadd.i32 q5,q5,q0 518 add r2,r3,#192 519 vld1.8 {d26-d27},[r2,: 128]! 520 vadd.i32 q6,q6,q3 521 vld1.8 {d28-d29},[r2,: 128]! 522 vadd.i32 q8,q8,q4 523 vld1.8 {d25},[r2,: 64] 524 vadd.i32 q10,q10,q2 525 vtrn.32 q9,q13 526 vadd.i32 q7,q7,q1 527 vadd.i32 q5,q5,q0 528 vtrn.32 q11,q14 529 vadd.i32 q6,q6,q3 530 add r2,sp,#560 531 vadd.i32 q10,q10,q2 532 vtrn.32 d24,d25 533 vst1.8 {d12-d13},[r2,: 128] 534 vshl.i32 q6,q13,#1 535 add r2,sp,#576 536 vst1.8 {d20-d21},[r2,: 128] 537 vshl.i32 q10,q14,#1 538 add r2,sp,#592 539 vst1.8 {d12-d13},[r2,: 128] 540 vshl.i32 q15,q12,#1 541 vadd.i32 q8,q8,q4 542 vext.32 d10,d31,d30,#0 543 vadd.i32 q7,q7,q1 544 add r2,sp,#608 545 vst1.8 {d16-d17},[r2,: 128] 546 vmull.s32 q8,d18,d5 547 vmlal.s32 q8,d26,d4 548 vmlal.s32 q8,d19,d9 549 vmlal.s32 q8,d27,d3 550 vmlal.s32 q8,d22,d8 551 vmlal.s32 q8,d28,d2 552 vmlal.s32 q8,d23,d7 553 vmlal.s32 q8,d29,d1 554 vmlal.s32 q8,d24,d6 555 vmlal.s32 q8,d25,d0 556 add r2,sp,#624 557 vst1.8 {d14-d15},[r2,: 128] 558 vmull.s32 q2,d18,d4 559 vmlal.s32 q2,d12,d9 560 vmlal.s32 q2,d13,d8 561 vmlal.s32 q2,d19,d3 562 vmlal.s32 q2,d22,d2 563 vmlal.s32 q2,d23,d1 564 vmlal.s32 q2,d24,d0 565 add r2,sp,#640 566 vst1.8 {d20-d21},[r2,: 128] 567 vmull.s32 q7,d18,d9 568 vmlal.s32 q7,d26,d3 569 vmlal.s32 q7,d19,d8 570 vmlal.s32 q7,d27,d2 571 vmlal.s32 q7,d22,d7 572 vmlal.s32 q7,d28,d1 573 vmlal.s32 q7,d23,d6 574 vmlal.s32 q7,d29,d0 575 add r2,sp,#656 576 vst1.8 {d10-d11},[r2,: 128] 577 vmull.s32 q5,d18,d3 578 vmlal.s32 q5,d19,d2 579 vmlal.s32 q5,d22,d1 580 vmlal.s32 q5,d23,d0 581 vmlal.s32 q5,d12,d8 582 add r2,sp,#672 583 vst1.8 {d16-d17},[r2,: 128] 584 vmull.s32 q4,d18,d8 585 vmlal.s32 q4,d26,d2 586 vmlal.s32 q4,d19,d7 587 vmlal.s32 q4,d27,d1 588 vmlal.s32 q4,d22,d6 589 vmlal.s32 q4,d28,d0 590 vmull.s32 q8,d18,d7 591 vmlal.s32 q8,d26,d1 592 vmlal.s32 q8,d19,d6 593 vmlal.s32 q8,d27,d0 594 add r2,sp,#576 595 vld1.8 {d20-d21},[r2,: 128] 596 vmlal.s32 q7,d24,d21 597 vmlal.s32 q7,d25,d20 598 vmlal.s32 q4,d23,d21 599 vmlal.s32 q4,d29,d20 600 vmlal.s32 q8,d22,d21 601 vmlal.s32 q8,d28,d20 602 vmlal.s32 q5,d24,d20 603 add r2,sp,#576 604 vst1.8 {d14-d15},[r2,: 128] 605 vmull.s32 q7,d18,d6 606 vmlal.s32 q7,d26,d0 607 add r2,sp,#656 608 vld1.8 {d30-d31},[r2,: 128] 609 vmlal.s32 q2,d30,d21 610 vmlal.s32 q7,d19,d21 611 vmlal.s32 q7,d27,d20 612 add r2,sp,#624 613 vld1.8 {d26-d27},[r2,: 128] 614 vmlal.s32 q4,d25,d27 615 vmlal.s32 q8,d29,d27 616 vmlal.s32 q8,d25,d26 617 vmlal.s32 q7,d28,d27 618 vmlal.s32 q7,d29,d26 619 add r2,sp,#608 620 vld1.8 {d28-d29},[r2,: 128] 621 vmlal.s32 q4,d24,d29 622 vmlal.s32 q8,d23,d29 623 vmlal.s32 q8,d24,d28 624 vmlal.s32 q7,d22,d29 625 vmlal.s32 q7,d23,d28 626 add r2,sp,#608 627 vst1.8 {d8-d9},[r2,: 128] 628 add r2,sp,#560 629 vld1.8 {d8-d9},[r2,: 128] 630 vmlal.s32 q7,d24,d9 631 vmlal.s32 q7,d25,d31 632 vmull.s32 q1,d18,d2 633 vmlal.s32 q1,d19,d1 634 vmlal.s32 q1,d22,d0 635 vmlal.s32 q1,d24,d27 636 vmlal.s32 q1,d23,d20 637 vmlal.s32 q1,d12,d7 638 vmlal.s32 q1,d13,d6 639 vmull.s32 q6,d18,d1 640 vmlal.s32 q6,d19,d0 641 vmlal.s32 q6,d23,d27 642 vmlal.s32 q6,d22,d20 643 vmlal.s32 q6,d24,d26 644 vmull.s32 q0,d18,d0 645 vmlal.s32 q0,d22,d27 646 vmlal.s32 q0,d23,d26 647 vmlal.s32 q0,d24,d31 648 vmlal.s32 q0,d19,d20 649 add r2,sp,#640 650 vld1.8 {d18-d19},[r2,: 128] 651 vmlal.s32 q2,d18,d7 652 vmlal.s32 q2,d19,d6 653 vmlal.s32 q5,d18,d6 654 vmlal.s32 q5,d19,d21 655 vmlal.s32 q1,d18,d21 656 vmlal.s32 q1,d19,d29 657 vmlal.s32 q0,d18,d28 658 vmlal.s32 q0,d19,d9 659 vmlal.s32 q6,d18,d29 660 vmlal.s32 q6,d19,d28 661 add r2,sp,#592 662 vld1.8 {d18-d19},[r2,: 128] 663 add r2,sp,#512 664 vld1.8 {d22-d23},[r2,: 128] 665 vmlal.s32 q5,d19,d7 666 vmlal.s32 q0,d18,d21 667 vmlal.s32 q0,d19,d29 668 vmlal.s32 q6,d18,d6 669 add r2,sp,#528 670 vld1.8 {d6-d7},[r2,: 128] 671 vmlal.s32 q6,d19,d21 672 add r2,sp,#576 673 vld1.8 {d18-d19},[r2,: 128] 674 vmlal.s32 q0,d30,d8 675 add r2,sp,#672 676 vld1.8 {d20-d21},[r2,: 128] 677 vmlal.s32 q5,d30,d29 678 add r2,sp,#608 679 vld1.8 {d24-d25},[r2,: 128] 680 vmlal.s32 q1,d30,d28 681 vadd.i64 q13,q0,q11 682 vadd.i64 q14,q5,q11 683 vmlal.s32 q6,d30,d9 684 vshr.s64 q4,q13,#26 685 vshr.s64 q13,q14,#26 686 vadd.i64 q7,q7,q4 687 vshl.i64 q4,q4,#26 688 vadd.i64 q14,q7,q3 689 vadd.i64 q9,q9,q13 690 vshl.i64 q13,q13,#26 691 vadd.i64 q15,q9,q3 692 vsub.i64 q0,q0,q4 693 vshr.s64 q4,q14,#25 694 vsub.i64 q5,q5,q13 695 vshr.s64 q13,q15,#25 696 vadd.i64 q6,q6,q4 697 vshl.i64 q4,q4,#25 698 vadd.i64 q14,q6,q11 699 vadd.i64 q2,q2,q13 700 vsub.i64 q4,q7,q4 701 vshr.s64 q7,q14,#26 702 vshl.i64 q13,q13,#25 703 vadd.i64 q14,q2,q11 704 vadd.i64 q8,q8,q7 705 vshl.i64 q7,q7,#26 706 vadd.i64 q15,q8,q3 707 vsub.i64 q9,q9,q13 708 vshr.s64 q13,q14,#26 709 vsub.i64 q6,q6,q7 710 vshr.s64 q7,q15,#25 711 vadd.i64 q10,q10,q13 712 vshl.i64 q13,q13,#26 713 vadd.i64 q14,q10,q3 714 vadd.i64 q1,q1,q7 715 add r2,r3,#144 716 vshl.i64 q7,q7,#25 717 add r4,r3,#96 718 vadd.i64 q15,q1,q11 719 add r2,r2,#8 720 vsub.i64 q2,q2,q13 721 add r4,r4,#8 722 vshr.s64 q13,q14,#25 723 vsub.i64 q7,q8,q7 724 vshr.s64 q8,q15,#26 725 vadd.i64 q14,q13,q13 726 vadd.i64 q12,q12,q8 727 vtrn.32 d12,d14 728 vshl.i64 q8,q8,#26 729 vtrn.32 d13,d15 730 vadd.i64 q3,q12,q3 731 vadd.i64 q0,q0,q14 732 vst1.8 d12,[r2,: 64]! 733 vshl.i64 q7,q13,#4 734 vst1.8 d13,[r4,: 64]! 735 vsub.i64 q1,q1,q8 736 vshr.s64 q3,q3,#25 737 vadd.i64 q0,q0,q7 738 vadd.i64 q5,q5,q3 739 vshl.i64 q3,q3,#25 740 vadd.i64 q6,q5,q11 741 vadd.i64 q0,q0,q13 742 vshl.i64 q7,q13,#25 743 vadd.i64 q8,q0,q11 744 vsub.i64 q3,q12,q3 745 vshr.s64 q6,q6,#26 746 vsub.i64 q7,q10,q7 747 vtrn.32 d2,d6 748 vshr.s64 q8,q8,#26 749 vtrn.32 d3,d7 750 vadd.i64 q3,q9,q6 751 vst1.8 d2,[r2,: 64] 752 vshl.i64 q6,q6,#26 753 vst1.8 d3,[r4,: 64] 754 vadd.i64 q1,q4,q8 755 vtrn.32 d4,d14 756 vshl.i64 q4,q8,#26 757 vtrn.32 d5,d15 758 vsub.i64 q5,q5,q6 759 add r2,r2,#16 760 vsub.i64 q0,q0,q4 761 vst1.8 d4,[r2,: 64] 762 add r4,r4,#16 763 vst1.8 d5,[r4,: 64] 764 vtrn.32 d10,d6 765 vtrn.32 d11,d7 766 sub r2,r2,#8 767 sub r4,r4,#8 768 vtrn.32 d0,d2 769 vtrn.32 d1,d3 770 vst1.8 d10,[r2,: 64] 771 vst1.8 d11,[r4,: 64] 772 sub r2,r2,#24 773 sub r4,r4,#24 774 vst1.8 d0,[r2,: 64] 775 vst1.8 d1,[r4,: 64] 776 add r2,r3,#288 777 add r4,r3,#336 778 vld1.8 {d0-d1},[r2,: 128]! 779 vld1.8 {d2-d3},[r4,: 128]! 780 vsub.i32 q0,q0,q1 781 vld1.8 {d2-d3},[r2,: 128]! 782 vld1.8 {d4-d5},[r4,: 128]! 783 vsub.i32 q1,q1,q2 784 add r5,r3,#240 785 vld1.8 {d4},[r2,: 64] 786 vld1.8 {d6},[r4,: 64] 787 vsub.i32 q2,q2,q3 788 vst1.8 {d0-d1},[r5,: 128]! 789 vst1.8 {d2-d3},[r5,: 128]! 790 vst1.8 d4,[r5,: 64] 791 add r2,r3,#144 792 add r4,r3,#96 793 add r5,r3,#144 794 add r6,r3,#192 795 vld1.8 {d0-d1},[r2,: 128]! 796 vld1.8 {d2-d3},[r4,: 128]! 797 vsub.i32 q2,q0,q1 798 vadd.i32 q0,q0,q1 799 vld1.8 {d2-d3},[r2,: 128]! 800 vld1.8 {d6-d7},[r4,: 128]! 801 vsub.i32 q4,q1,q3 802 vadd.i32 q1,q1,q3 803 vld1.8 {d6},[r2,: 64] 804 vld1.8 {d10},[r4,: 64] 805 vsub.i32 q6,q3,q5 806 vadd.i32 q3,q3,q5 807 vst1.8 {d4-d5},[r5,: 128]! 808 vst1.8 {d0-d1},[r6,: 128]! 809 vst1.8 {d8-d9},[r5,: 128]! 810 vst1.8 {d2-d3},[r6,: 128]! 811 vst1.8 d12,[r5,: 64] 812 vst1.8 d6,[r6,: 64] 813 add r2,r3,#0 814 add r4,r3,#240 815 vld1.8 {d0-d1},[r4,: 128]! 816 vld1.8 {d2-d3},[r4,: 128]! 817 vld1.8 {d4},[r4,: 64] 818 add r4,r3,#336 819 vld1.8 {d6-d7},[r4,: 128]! 820 vtrn.32 q0,q3 821 vld1.8 {d8-d9},[r4,: 128]! 822 vshl.i32 q5,q0,#4 823 vtrn.32 q1,q4 824 vshl.i32 q6,q3,#4 825 vadd.i32 q5,q5,q0 826 vadd.i32 q6,q6,q3 827 vshl.i32 q7,q1,#4 828 vld1.8 {d5},[r4,: 64] 829 vshl.i32 q8,q4,#4 830 vtrn.32 d4,d5 831 vadd.i32 q7,q7,q1 832 vadd.i32 q8,q8,q4 833 vld1.8 {d18-d19},[r2,: 128]! 834 vshl.i32 q10,q2,#4 835 vld1.8 {d22-d23},[r2,: 128]! 836 vadd.i32 q10,q10,q2 837 vld1.8 {d24},[r2,: 64] 838 vadd.i32 q5,q5,q0 839 add r2,r3,#288 840 vld1.8 {d26-d27},[r2,: 128]! 841 vadd.i32 q6,q6,q3 842 vld1.8 {d28-d29},[r2,: 128]! 843 vadd.i32 q8,q8,q4 844 vld1.8 {d25},[r2,: 64] 845 vadd.i32 q10,q10,q2 846 vtrn.32 q9,q13 847 vadd.i32 q7,q7,q1 848 vadd.i32 q5,q5,q0 849 vtrn.32 q11,q14 850 vadd.i32 q6,q6,q3 851 add r2,sp,#560 852 vadd.i32 q10,q10,q2 853 vtrn.32 d24,d25 854 vst1.8 {d12-d13},[r2,: 128] 855 vshl.i32 q6,q13,#1 856 add r2,sp,#576 857 vst1.8 {d20-d21},[r2,: 128] 858 vshl.i32 q10,q14,#1 859 add r2,sp,#592 860 vst1.8 {d12-d13},[r2,: 128] 861 vshl.i32 q15,q12,#1 862 vadd.i32 q8,q8,q4 863 vext.32 d10,d31,d30,#0 864 vadd.i32 q7,q7,q1 865 add r2,sp,#608 866 vst1.8 {d16-d17},[r2,: 128] 867 vmull.s32 q8,d18,d5 868 vmlal.s32 q8,d26,d4 869 vmlal.s32 q8,d19,d9 870 vmlal.s32 q8,d27,d3 871 vmlal.s32 q8,d22,d8 872 vmlal.s32 q8,d28,d2 873 vmlal.s32 q8,d23,d7 874 vmlal.s32 q8,d29,d1 875 vmlal.s32 q8,d24,d6 876 vmlal.s32 q8,d25,d0 877 add r2,sp,#624 878 vst1.8 {d14-d15},[r2,: 128] 879 vmull.s32 q2,d18,d4 880 vmlal.s32 q2,d12,d9 881 vmlal.s32 q2,d13,d8 882 vmlal.s32 q2,d19,d3 883 vmlal.s32 q2,d22,d2 884 vmlal.s32 q2,d23,d1 885 vmlal.s32 q2,d24,d0 886 add r2,sp,#640 887 vst1.8 {d20-d21},[r2,: 128] 888 vmull.s32 q7,d18,d9 889 vmlal.s32 q7,d26,d3 890 vmlal.s32 q7,d19,d8 891 vmlal.s32 q7,d27,d2 892 vmlal.s32 q7,d22,d7 893 vmlal.s32 q7,d28,d1 894 vmlal.s32 q7,d23,d6 895 vmlal.s32 q7,d29,d0 896 add r2,sp,#656 897 vst1.8 {d10-d11},[r2,: 128] 898 vmull.s32 q5,d18,d3 899 vmlal.s32 q5,d19,d2 900 vmlal.s32 q5,d22,d1 901 vmlal.s32 q5,d23,d0 902 vmlal.s32 q5,d12,d8 903 add r2,sp,#672 904 vst1.8 {d16-d17},[r2,: 128] 905 vmull.s32 q4,d18,d8 906 vmlal.s32 q4,d26,d2 907 vmlal.s32 q4,d19,d7 908 vmlal.s32 q4,d27,d1 909 vmlal.s32 q4,d22,d6 910 vmlal.s32 q4,d28,d0 911 vmull.s32 q8,d18,d7 912 vmlal.s32 q8,d26,d1 913 vmlal.s32 q8,d19,d6 914 vmlal.s32 q8,d27,d0 915 add r2,sp,#576 916 vld1.8 {d20-d21},[r2,: 128] 917 vmlal.s32 q7,d24,d21 918 vmlal.s32 q7,d25,d20 919 vmlal.s32 q4,d23,d21 920 vmlal.s32 q4,d29,d20 921 vmlal.s32 q8,d22,d21 922 vmlal.s32 q8,d28,d20 923 vmlal.s32 q5,d24,d20 924 add r2,sp,#576 925 vst1.8 {d14-d15},[r2,: 128] 926 vmull.s32 q7,d18,d6 927 vmlal.s32 q7,d26,d0 928 add r2,sp,#656 929 vld1.8 {d30-d31},[r2,: 128] 930 vmlal.s32 q2,d30,d21 931 vmlal.s32 q7,d19,d21 932 vmlal.s32 q7,d27,d20 933 add r2,sp,#624 934 vld1.8 {d26-d27},[r2,: 128] 935 vmlal.s32 q4,d25,d27 936 vmlal.s32 q8,d29,d27 937 vmlal.s32 q8,d25,d26 938 vmlal.s32 q7,d28,d27 939 vmlal.s32 q7,d29,d26 940 add r2,sp,#608 941 vld1.8 {d28-d29},[r2,: 128] 942 vmlal.s32 q4,d24,d29 943 vmlal.s32 q8,d23,d29 944 vmlal.s32 q8,d24,d28 945 vmlal.s32 q7,d22,d29 946 vmlal.s32 q7,d23,d28 947 add r2,sp,#608 948 vst1.8 {d8-d9},[r2,: 128] 949 add r2,sp,#560 950 vld1.8 {d8-d9},[r2,: 128] 951 vmlal.s32 q7,d24,d9 952 vmlal.s32 q7,d25,d31 953 vmull.s32 q1,d18,d2 954 vmlal.s32 q1,d19,d1 955 vmlal.s32 q1,d22,d0 956 vmlal.s32 q1,d24,d27 957 vmlal.s32 q1,d23,d20 958 vmlal.s32 q1,d12,d7 959 vmlal.s32 q1,d13,d6 960 vmull.s32 q6,d18,d1 961 vmlal.s32 q6,d19,d0 962 vmlal.s32 q6,d23,d27 963 vmlal.s32 q6,d22,d20 964 vmlal.s32 q6,d24,d26 965 vmull.s32 q0,d18,d0 966 vmlal.s32 q0,d22,d27 967 vmlal.s32 q0,d23,d26 968 vmlal.s32 q0,d24,d31 969 vmlal.s32 q0,d19,d20 970 add r2,sp,#640 971 vld1.8 {d18-d19},[r2,: 128] 972 vmlal.s32 q2,d18,d7 973 vmlal.s32 q2,d19,d6 974 vmlal.s32 q5,d18,d6 975 vmlal.s32 q5,d19,d21 976 vmlal.s32 q1,d18,d21 977 vmlal.s32 q1,d19,d29 978 vmlal.s32 q0,d18,d28 979 vmlal.s32 q0,d19,d9 980 vmlal.s32 q6,d18,d29 981 vmlal.s32 q6,d19,d28 982 add r2,sp,#592 983 vld1.8 {d18-d19},[r2,: 128] 984 add r2,sp,#512 985 vld1.8 {d22-d23},[r2,: 128] 986 vmlal.s32 q5,d19,d7 987 vmlal.s32 q0,d18,d21 988 vmlal.s32 q0,d19,d29 989 vmlal.s32 q6,d18,d6 990 add r2,sp,#528 991 vld1.8 {d6-d7},[r2,: 128] 992 vmlal.s32 q6,d19,d21 993 add r2,sp,#576 994 vld1.8 {d18-d19},[r2,: 128] 995 vmlal.s32 q0,d30,d8 996 add r2,sp,#672 997 vld1.8 {d20-d21},[r2,: 128] 998 vmlal.s32 q5,d30,d29 999 add r2,sp,#608 1000 vld1.8 {d24-d25},[r2,: 128] 1001 vmlal.s32 q1,d30,d28 1002 vadd.i64 q13,q0,q11 1003 vadd.i64 q14,q5,q11 1004 vmlal.s32 q6,d30,d9 1005 vshr.s64 q4,q13,#26 1006 vshr.s64 q13,q14,#26 1007 vadd.i64 q7,q7,q4 1008 vshl.i64 q4,q4,#26 1009 vadd.i64 q14,q7,q3 1010 vadd.i64 q9,q9,q13 1011 vshl.i64 q13,q13,#26 1012 vadd.i64 q15,q9,q3 1013 vsub.i64 q0,q0,q4 1014 vshr.s64 q4,q14,#25 1015 vsub.i64 q5,q5,q13 1016 vshr.s64 q13,q15,#25 1017 vadd.i64 q6,q6,q4 1018 vshl.i64 q4,q4,#25 1019 vadd.i64 q14,q6,q11 1020 vadd.i64 q2,q2,q13 1021 vsub.i64 q4,q7,q4 1022 vshr.s64 q7,q14,#26 1023 vshl.i64 q13,q13,#25 1024 vadd.i64 q14,q2,q11 1025 vadd.i64 q8,q8,q7 1026 vshl.i64 q7,q7,#26 1027 vadd.i64 q15,q8,q3 1028 vsub.i64 q9,q9,q13 1029 vshr.s64 q13,q14,#26 1030 vsub.i64 q6,q6,q7 1031 vshr.s64 q7,q15,#25 1032 vadd.i64 q10,q10,q13 1033 vshl.i64 q13,q13,#26 1034 vadd.i64 q14,q10,q3 1035 vadd.i64 q1,q1,q7 1036 add r2,r3,#288 1037 vshl.i64 q7,q7,#25 1038 add r4,r3,#96 1039 vadd.i64 q15,q1,q11 1040 add r2,r2,#8 1041 vsub.i64 q2,q2,q13 1042 add r4,r4,#8 1043 vshr.s64 q13,q14,#25 1044 vsub.i64 q7,q8,q7 1045 vshr.s64 q8,q15,#26 1046 vadd.i64 q14,q13,q13 1047 vadd.i64 q12,q12,q8 1048 vtrn.32 d12,d14 1049 vshl.i64 q8,q8,#26 1050 vtrn.32 d13,d15 1051 vadd.i64 q3,q12,q3 1052 vadd.i64 q0,q0,q14 1053 vst1.8 d12,[r2,: 64]! 1054 vshl.i64 q7,q13,#4 1055 vst1.8 d13,[r4,: 64]! 1056 vsub.i64 q1,q1,q8 1057 vshr.s64 q3,q3,#25 1058 vadd.i64 q0,q0,q7 1059 vadd.i64 q5,q5,q3 1060 vshl.i64 q3,q3,#25 1061 vadd.i64 q6,q5,q11 1062 vadd.i64 q0,q0,q13 1063 vshl.i64 q7,q13,#25 1064 vadd.i64 q8,q0,q11 1065 vsub.i64 q3,q12,q3 1066 vshr.s64 q6,q6,#26 1067 vsub.i64 q7,q10,q7 1068 vtrn.32 d2,d6 1069 vshr.s64 q8,q8,#26 1070 vtrn.32 d3,d7 1071 vadd.i64 q3,q9,q6 1072 vst1.8 d2,[r2,: 64] 1073 vshl.i64 q6,q6,#26 1074 vst1.8 d3,[r4,: 64] 1075 vadd.i64 q1,q4,q8 1076 vtrn.32 d4,d14 1077 vshl.i64 q4,q8,#26 1078 vtrn.32 d5,d15 1079 vsub.i64 q5,q5,q6 1080 add r2,r2,#16 1081 vsub.i64 q0,q0,q4 1082 vst1.8 d4,[r2,: 64] 1083 add r4,r4,#16 1084 vst1.8 d5,[r4,: 64] 1085 vtrn.32 d10,d6 1086 vtrn.32 d11,d7 1087 sub r2,r2,#8 1088 sub r4,r4,#8 1089 vtrn.32 d0,d2 1090 vtrn.32 d1,d3 1091 vst1.8 d10,[r2,: 64] 1092 vst1.8 d11,[r4,: 64] 1093 sub r2,r2,#24 1094 sub r4,r4,#24 1095 vst1.8 d0,[r2,: 64] 1096 vst1.8 d1,[r4,: 64] 1097 add r2,sp,#544 1098 add r4,r3,#144 1099 add r5,r3,#192 1100 vld1.8 {d0-d1},[r2,: 128] 1101 vld1.8 {d2-d3},[r4,: 128]! 1102 vld1.8 {d4-d5},[r5,: 128]! 1103 vzip.i32 q1,q2 1104 vld1.8 {d6-d7},[r4,: 128]! 1105 vld1.8 {d8-d9},[r5,: 128]! 1106 vshl.i32 q5,q1,#1 1107 vzip.i32 q3,q4 1108 vshl.i32 q6,q2,#1 1109 vld1.8 {d14},[r4,: 64] 1110 vshl.i32 q8,q3,#1 1111 vld1.8 {d15},[r5,: 64] 1112 vshl.i32 q9,q4,#1 1113 vmul.i32 d21,d7,d1 1114 vtrn.32 d14,d15 1115 vmul.i32 q11,q4,q0 1116 vmul.i32 q0,q7,q0 1117 vmull.s32 q12,d2,d2 1118 vmlal.s32 q12,d11,d1 1119 vmlal.s32 q12,d12,d0 1120 vmlal.s32 q12,d13,d23 1121 vmlal.s32 q12,d16,d22 1122 vmlal.s32 q12,d7,d21 1123 vmull.s32 q10,d2,d11 1124 vmlal.s32 q10,d4,d1 1125 vmlal.s32 q10,d13,d0 1126 vmlal.s32 q10,d6,d23 1127 vmlal.s32 q10,d17,d22 1128 vmull.s32 q13,d10,d4 1129 vmlal.s32 q13,d11,d3 1130 vmlal.s32 q13,d13,d1 1131 vmlal.s32 q13,d16,d0 1132 vmlal.s32 q13,d17,d23 1133 vmlal.s32 q13,d8,d22 1134 vmull.s32 q1,d10,d5 1135 vmlal.s32 q1,d11,d4 1136 vmlal.s32 q1,d6,d1 1137 vmlal.s32 q1,d17,d0 1138 vmlal.s32 q1,d8,d23 1139 vmull.s32 q14,d10,d6 1140 vmlal.s32 q14,d11,d13 1141 vmlal.s32 q14,d4,d4 1142 vmlal.s32 q14,d17,d1 1143 vmlal.s32 q14,d18,d0 1144 vmlal.s32 q14,d9,d23 1145 vmull.s32 q11,d10,d7 1146 vmlal.s32 q11,d11,d6 1147 vmlal.s32 q11,d12,d5 1148 vmlal.s32 q11,d8,d1 1149 vmlal.s32 q11,d19,d0 1150 vmull.s32 q15,d10,d8 1151 vmlal.s32 q15,d11,d17 1152 vmlal.s32 q15,d12,d6 1153 vmlal.s32 q15,d13,d5 1154 vmlal.s32 q15,d19,d1 1155 vmlal.s32 q15,d14,d0 1156 vmull.s32 q2,d10,d9 1157 vmlal.s32 q2,d11,d8 1158 vmlal.s32 q2,d12,d7 1159 vmlal.s32 q2,d13,d6 1160 vmlal.s32 q2,d14,d1 1161 vmull.s32 q0,d15,d1 1162 vmlal.s32 q0,d10,d14 1163 vmlal.s32 q0,d11,d19 1164 vmlal.s32 q0,d12,d8 1165 vmlal.s32 q0,d13,d17 1166 vmlal.s32 q0,d6,d6 1167 add r2,sp,#512 1168 vld1.8 {d18-d19},[r2,: 128] 1169 vmull.s32 q3,d16,d7 1170 vmlal.s32 q3,d10,d15 1171 vmlal.s32 q3,d11,d14 1172 vmlal.s32 q3,d12,d9 1173 vmlal.s32 q3,d13,d8 1174 add r2,sp,#528 1175 vld1.8 {d8-d9},[r2,: 128] 1176 vadd.i64 q5,q12,q9 1177 vadd.i64 q6,q15,q9 1178 vshr.s64 q5,q5,#26 1179 vshr.s64 q6,q6,#26 1180 vadd.i64 q7,q10,q5 1181 vshl.i64 q5,q5,#26 1182 vadd.i64 q8,q7,q4 1183 vadd.i64 q2,q2,q6 1184 vshl.i64 q6,q6,#26 1185 vadd.i64 q10,q2,q4 1186 vsub.i64 q5,q12,q5 1187 vshr.s64 q8,q8,#25 1188 vsub.i64 q6,q15,q6 1189 vshr.s64 q10,q10,#25 1190 vadd.i64 q12,q13,q8 1191 vshl.i64 q8,q8,#25 1192 vadd.i64 q13,q12,q9 1193 vadd.i64 q0,q0,q10 1194 vsub.i64 q7,q7,q8 1195 vshr.s64 q8,q13,#26 1196 vshl.i64 q10,q10,#25 1197 vadd.i64 q13,q0,q9 1198 vadd.i64 q1,q1,q8 1199 vshl.i64 q8,q8,#26 1200 vadd.i64 q15,q1,q4 1201 vsub.i64 q2,q2,q10 1202 vshr.s64 q10,q13,#26 1203 vsub.i64 q8,q12,q8 1204 vshr.s64 q12,q15,#25 1205 vadd.i64 q3,q3,q10 1206 vshl.i64 q10,q10,#26 1207 vadd.i64 q13,q3,q4 1208 vadd.i64 q14,q14,q12 1209 add r2,r3,#144 1210 vshl.i64 q12,q12,#25 1211 add r4,r3,#192 1212 vadd.i64 q15,q14,q9 1213 add r2,r2,#8 1214 vsub.i64 q0,q0,q10 1215 add r4,r4,#8 1216 vshr.s64 q10,q13,#25 1217 vsub.i64 q1,q1,q12 1218 vshr.s64 q12,q15,#26 1219 vadd.i64 q13,q10,q10 1220 vadd.i64 q11,q11,q12 1221 vtrn.32 d16,d2 1222 vshl.i64 q12,q12,#26 1223 vtrn.32 d17,d3 1224 vadd.i64 q1,q11,q4 1225 vadd.i64 q4,q5,q13 1226 vst1.8 d16,[r2,: 64]! 1227 vshl.i64 q5,q10,#4 1228 vst1.8 d17,[r4,: 64]! 1229 vsub.i64 q8,q14,q12 1230 vshr.s64 q1,q1,#25 1231 vadd.i64 q4,q4,q5 1232 vadd.i64 q5,q6,q1 1233 vshl.i64 q1,q1,#25 1234 vadd.i64 q6,q5,q9 1235 vadd.i64 q4,q4,q10 1236 vshl.i64 q10,q10,#25 1237 vadd.i64 q9,q4,q9 1238 vsub.i64 q1,q11,q1 1239 vshr.s64 q6,q6,#26 1240 vsub.i64 q3,q3,q10 1241 vtrn.32 d16,d2 1242 vshr.s64 q9,q9,#26 1243 vtrn.32 d17,d3 1244 vadd.i64 q1,q2,q6 1245 vst1.8 d16,[r2,: 64] 1246 vshl.i64 q2,q6,#26 1247 vst1.8 d17,[r4,: 64] 1248 vadd.i64 q6,q7,q9 1249 vtrn.32 d0,d6 1250 vshl.i64 q7,q9,#26 1251 vtrn.32 d1,d7 1252 vsub.i64 q2,q5,q2 1253 add r2,r2,#16 1254 vsub.i64 q3,q4,q7 1255 vst1.8 d0,[r2,: 64] 1256 add r4,r4,#16 1257 vst1.8 d1,[r4,: 64] 1258 vtrn.32 d4,d2 1259 vtrn.32 d5,d3 1260 sub r2,r2,#8 1261 sub r4,r4,#8 1262 vtrn.32 d6,d12 1263 vtrn.32 d7,d13 1264 vst1.8 d4,[r2,: 64] 1265 vst1.8 d5,[r4,: 64] 1266 sub r2,r2,#24 1267 sub r4,r4,#24 1268 vst1.8 d6,[r2,: 64] 1269 vst1.8 d7,[r4,: 64] 1270 add r2,r3,#336 1271 add r4,r3,#288 1272 vld1.8 {d0-d1},[r2,: 128]! 1273 vld1.8 {d2-d3},[r4,: 128]! 1274 vadd.i32 q0,q0,q1 1275 vld1.8 {d2-d3},[r2,: 128]! 1276 vld1.8 {d4-d5},[r4,: 128]! 1277 vadd.i32 q1,q1,q2 1278 add r5,r3,#288 1279 vld1.8 {d4},[r2,: 64] 1280 vld1.8 {d6},[r4,: 64] 1281 vadd.i32 q2,q2,q3 1282 vst1.8 {d0-d1},[r5,: 128]! 1283 vst1.8 {d2-d3},[r5,: 128]! 1284 vst1.8 d4,[r5,: 64] 1285 add r2,r3,#48 1286 add r4,r3,#144 1287 vld1.8 {d0-d1},[r4,: 128]! 1288 vld1.8 {d2-d3},[r4,: 128]! 1289 vld1.8 {d4},[r4,: 64] 1290 add r4,r3,#288 1291 vld1.8 {d6-d7},[r4,: 128]! 1292 vtrn.32 q0,q3 1293 vld1.8 {d8-d9},[r4,: 128]! 1294 vshl.i32 q5,q0,#4 1295 vtrn.32 q1,q4 1296 vshl.i32 q6,q3,#4 1297 vadd.i32 q5,q5,q0 1298 vadd.i32 q6,q6,q3 1299 vshl.i32 q7,q1,#4 1300 vld1.8 {d5},[r4,: 64] 1301 vshl.i32 q8,q4,#4 1302 vtrn.32 d4,d5 1303 vadd.i32 q7,q7,q1 1304 vadd.i32 q8,q8,q4 1305 vld1.8 {d18-d19},[r2,: 128]! 1306 vshl.i32 q10,q2,#4 1307 vld1.8 {d22-d23},[r2,: 128]! 1308 vadd.i32 q10,q10,q2 1309 vld1.8 {d24},[r2,: 64] 1310 vadd.i32 q5,q5,q0 1311 add r2,r3,#240 1312 vld1.8 {d26-d27},[r2,: 128]! 1313 vadd.i32 q6,q6,q3 1314 vld1.8 {d28-d29},[r2,: 128]! 1315 vadd.i32 q8,q8,q4 1316 vld1.8 {d25},[r2,: 64] 1317 vadd.i32 q10,q10,q2 1318 vtrn.32 q9,q13 1319 vadd.i32 q7,q7,q1 1320 vadd.i32 q5,q5,q0 1321 vtrn.32 q11,q14 1322 vadd.i32 q6,q6,q3 1323 add r2,sp,#560 1324 vadd.i32 q10,q10,q2 1325 vtrn.32 d24,d25 1326 vst1.8 {d12-d13},[r2,: 128] 1327 vshl.i32 q6,q13,#1 1328 add r2,sp,#576 1329 vst1.8 {d20-d21},[r2,: 128] 1330 vshl.i32 q10,q14,#1 1331 add r2,sp,#592 1332 vst1.8 {d12-d13},[r2,: 128] 1333 vshl.i32 q15,q12,#1 1334 vadd.i32 q8,q8,q4 1335 vext.32 d10,d31,d30,#0 1336 vadd.i32 q7,q7,q1 1337 add r2,sp,#608 1338 vst1.8 {d16-d17},[r2,: 128] 1339 vmull.s32 q8,d18,d5 1340 vmlal.s32 q8,d26,d4 1341 vmlal.s32 q8,d19,d9 1342 vmlal.s32 q8,d27,d3 1343 vmlal.s32 q8,d22,d8 1344 vmlal.s32 q8,d28,d2 1345 vmlal.s32 q8,d23,d7 1346 vmlal.s32 q8,d29,d1 1347 vmlal.s32 q8,d24,d6 1348 vmlal.s32 q8,d25,d0 1349 add r2,sp,#624 1350 vst1.8 {d14-d15},[r2,: 128] 1351 vmull.s32 q2,d18,d4 1352 vmlal.s32 q2,d12,d9 1353 vmlal.s32 q2,d13,d8 1354 vmlal.s32 q2,d19,d3 1355 vmlal.s32 q2,d22,d2 1356 vmlal.s32 q2,d23,d1 1357 vmlal.s32 q2,d24,d0 1358 add r2,sp,#640 1359 vst1.8 {d20-d21},[r2,: 128] 1360 vmull.s32 q7,d18,d9 1361 vmlal.s32 q7,d26,d3 1362 vmlal.s32 q7,d19,d8 1363 vmlal.s32 q7,d27,d2 1364 vmlal.s32 q7,d22,d7 1365 vmlal.s32 q7,d28,d1 1366 vmlal.s32 q7,d23,d6 1367 vmlal.s32 q7,d29,d0 1368 add r2,sp,#656 1369 vst1.8 {d10-d11},[r2,: 128] 1370 vmull.s32 q5,d18,d3 1371 vmlal.s32 q5,d19,d2 1372 vmlal.s32 q5,d22,d1 1373 vmlal.s32 q5,d23,d0 1374 vmlal.s32 q5,d12,d8 1375 add r2,sp,#672 1376 vst1.8 {d16-d17},[r2,: 128] 1377 vmull.s32 q4,d18,d8 1378 vmlal.s32 q4,d26,d2 1379 vmlal.s32 q4,d19,d7 1380 vmlal.s32 q4,d27,d1 1381 vmlal.s32 q4,d22,d6 1382 vmlal.s32 q4,d28,d0 1383 vmull.s32 q8,d18,d7 1384 vmlal.s32 q8,d26,d1 1385 vmlal.s32 q8,d19,d6 1386 vmlal.s32 q8,d27,d0 1387 add r2,sp,#576 1388 vld1.8 {d20-d21},[r2,: 128] 1389 vmlal.s32 q7,d24,d21 1390 vmlal.s32 q7,d25,d20 1391 vmlal.s32 q4,d23,d21 1392 vmlal.s32 q4,d29,d20 1393 vmlal.s32 q8,d22,d21 1394 vmlal.s32 q8,d28,d20 1395 vmlal.s32 q5,d24,d20 1396 add r2,sp,#576 1397 vst1.8 {d14-d15},[r2,: 128] 1398 vmull.s32 q7,d18,d6 1399 vmlal.s32 q7,d26,d0 1400 add r2,sp,#656 1401 vld1.8 {d30-d31},[r2,: 128] 1402 vmlal.s32 q2,d30,d21 1403 vmlal.s32 q7,d19,d21 1404 vmlal.s32 q7,d27,d20 1405 add r2,sp,#624 1406 vld1.8 {d26-d27},[r2,: 128] 1407 vmlal.s32 q4,d25,d27 1408 vmlal.s32 q8,d29,d27 1409 vmlal.s32 q8,d25,d26 1410 vmlal.s32 q7,d28,d27 1411 vmlal.s32 q7,d29,d26 1412 add r2,sp,#608 1413 vld1.8 {d28-d29},[r2,: 128] 1414 vmlal.s32 q4,d24,d29 1415 vmlal.s32 q8,d23,d29 1416 vmlal.s32 q8,d24,d28 1417 vmlal.s32 q7,d22,d29 1418 vmlal.s32 q7,d23,d28 1419 add r2,sp,#608 1420 vst1.8 {d8-d9},[r2,: 128] 1421 add r2,sp,#560 1422 vld1.8 {d8-d9},[r2,: 128] 1423 vmlal.s32 q7,d24,d9 1424 vmlal.s32 q7,d25,d31 1425 vmull.s32 q1,d18,d2 1426 vmlal.s32 q1,d19,d1 1427 vmlal.s32 q1,d22,d0 1428 vmlal.s32 q1,d24,d27 1429 vmlal.s32 q1,d23,d20 1430 vmlal.s32 q1,d12,d7 1431 vmlal.s32 q1,d13,d6 1432 vmull.s32 q6,d18,d1 1433 vmlal.s32 q6,d19,d0 1434 vmlal.s32 q6,d23,d27 1435 vmlal.s32 q6,d22,d20 1436 vmlal.s32 q6,d24,d26 1437 vmull.s32 q0,d18,d0 1438 vmlal.s32 q0,d22,d27 1439 vmlal.s32 q0,d23,d26 1440 vmlal.s32 q0,d24,d31 1441 vmlal.s32 q0,d19,d20 1442 add r2,sp,#640 1443 vld1.8 {d18-d19},[r2,: 128] 1444 vmlal.s32 q2,d18,d7 1445 vmlal.s32 q2,d19,d6 1446 vmlal.s32 q5,d18,d6 1447 vmlal.s32 q5,d19,d21 1448 vmlal.s32 q1,d18,d21 1449 vmlal.s32 q1,d19,d29 1450 vmlal.s32 q0,d18,d28 1451 vmlal.s32 q0,d19,d9 1452 vmlal.s32 q6,d18,d29 1453 vmlal.s32 q6,d19,d28 1454 add r2,sp,#592 1455 vld1.8 {d18-d19},[r2,: 128] 1456 add r2,sp,#512 1457 vld1.8 {d22-d23},[r2,: 128] 1458 vmlal.s32 q5,d19,d7 1459 vmlal.s32 q0,d18,d21 1460 vmlal.s32 q0,d19,d29 1461 vmlal.s32 q6,d18,d6 1462 add r2,sp,#528 1463 vld1.8 {d6-d7},[r2,: 128] 1464 vmlal.s32 q6,d19,d21 1465 add r2,sp,#576 1466 vld1.8 {d18-d19},[r2,: 128] 1467 vmlal.s32 q0,d30,d8 1468 add r2,sp,#672 1469 vld1.8 {d20-d21},[r2,: 128] 1470 vmlal.s32 q5,d30,d29 1471 add r2,sp,#608 1472 vld1.8 {d24-d25},[r2,: 128] 1473 vmlal.s32 q1,d30,d28 1474 vadd.i64 q13,q0,q11 1475 vadd.i64 q14,q5,q11 1476 vmlal.s32 q6,d30,d9 1477 vshr.s64 q4,q13,#26 1478 vshr.s64 q13,q14,#26 1479 vadd.i64 q7,q7,q4 1480 vshl.i64 q4,q4,#26 1481 vadd.i64 q14,q7,q3 1482 vadd.i64 q9,q9,q13 1483 vshl.i64 q13,q13,#26 1484 vadd.i64 q15,q9,q3 1485 vsub.i64 q0,q0,q4 1486 vshr.s64 q4,q14,#25 1487 vsub.i64 q5,q5,q13 1488 vshr.s64 q13,q15,#25 1489 vadd.i64 q6,q6,q4 1490 vshl.i64 q4,q4,#25 1491 vadd.i64 q14,q6,q11 1492 vadd.i64 q2,q2,q13 1493 vsub.i64 q4,q7,q4 1494 vshr.s64 q7,q14,#26 1495 vshl.i64 q13,q13,#25 1496 vadd.i64 q14,q2,q11 1497 vadd.i64 q8,q8,q7 1498 vshl.i64 q7,q7,#26 1499 vadd.i64 q15,q8,q3 1500 vsub.i64 q9,q9,q13 1501 vshr.s64 q13,q14,#26 1502 vsub.i64 q6,q6,q7 1503 vshr.s64 q7,q15,#25 1504 vadd.i64 q10,q10,q13 1505 vshl.i64 q13,q13,#26 1506 vadd.i64 q14,q10,q3 1507 vadd.i64 q1,q1,q7 1508 add r2,r3,#240 1509 vshl.i64 q7,q7,#25 1510 add r4,r3,#144 1511 vadd.i64 q15,q1,q11 1512 add r2,r2,#8 1513 vsub.i64 q2,q2,q13 1514 add r4,r4,#8 1515 vshr.s64 q13,q14,#25 1516 vsub.i64 q7,q8,q7 1517 vshr.s64 q8,q15,#26 1518 vadd.i64 q14,q13,q13 1519 vadd.i64 q12,q12,q8 1520 vtrn.32 d12,d14 1521 vshl.i64 q8,q8,#26 1522 vtrn.32 d13,d15 1523 vadd.i64 q3,q12,q3 1524 vadd.i64 q0,q0,q14 1525 vst1.8 d12,[r2,: 64]! 1526 vshl.i64 q7,q13,#4 1527 vst1.8 d13,[r4,: 64]! 1528 vsub.i64 q1,q1,q8 1529 vshr.s64 q3,q3,#25 1530 vadd.i64 q0,q0,q7 1531 vadd.i64 q5,q5,q3 1532 vshl.i64 q3,q3,#25 1533 vadd.i64 q6,q5,q11 1534 vadd.i64 q0,q0,q13 1535 vshl.i64 q7,q13,#25 1536 vadd.i64 q8,q0,q11 1537 vsub.i64 q3,q12,q3 1538 vshr.s64 q6,q6,#26 1539 vsub.i64 q7,q10,q7 1540 vtrn.32 d2,d6 1541 vshr.s64 q8,q8,#26 1542 vtrn.32 d3,d7 1543 vadd.i64 q3,q9,q6 1544 vst1.8 d2,[r2,: 64] 1545 vshl.i64 q6,q6,#26 1546 vst1.8 d3,[r4,: 64] 1547 vadd.i64 q1,q4,q8 1548 vtrn.32 d4,d14 1549 vshl.i64 q4,q8,#26 1550 vtrn.32 d5,d15 1551 vsub.i64 q5,q5,q6 1552 add r2,r2,#16 1553 vsub.i64 q0,q0,q4 1554 vst1.8 d4,[r2,: 64] 1555 add r4,r4,#16 1556 vst1.8 d5,[r4,: 64] 1557 vtrn.32 d10,d6 1558 vtrn.32 d11,d7 1559 sub r2,r2,#8 1560 sub r4,r4,#8 1561 vtrn.32 d0,d2 1562 vtrn.32 d1,d3 1563 vst1.8 d10,[r2,: 64] 1564 vst1.8 d11,[r4,: 64] 1565 sub r2,r2,#24 1566 sub r4,r4,#24 1567 vst1.8 d0,[r2,: 64] 1568 vst1.8 d1,[r4,: 64] 1569 ldr r2,[sp,#488] 1570 ldr r4,[sp,#492] 1571 subs r5,r2,#1 1572 bge ._mainloop 1573 add r1,r3,#144 1574 add r2,r3,#336 1575 vld1.8 {d0-d1},[r1,: 128]! 1576 vld1.8 {d2-d3},[r1,: 128]! 1577 vld1.8 {d4},[r1,: 64] 1578 vst1.8 {d0-d1},[r2,: 128]! 1579 vst1.8 {d2-d3},[r2,: 128]! 1580 vst1.8 d4,[r2,: 64] 1581 ldr r1,=0 1582 ._invertloop: 1583 add r2,r3,#144 1584 ldr r4,=0 1585 ldr r5,=2 1586 cmp r1,#1 1587 ldreq r5,=1 1588 addeq r2,r3,#336 1589 addeq r4,r3,#48 1590 cmp r1,#2 1591 ldreq r5,=1 1592 addeq r2,r3,#48 1593 cmp r1,#3 1594 ldreq r5,=5 1595 addeq r4,r3,#336 1596 cmp r1,#4 1597 ldreq r5,=10 1598 cmp r1,#5 1599 ldreq r5,=20 1600 cmp r1,#6 1601 ldreq r5,=10 1602 addeq r2,r3,#336 1603 addeq r4,r3,#336 1604 cmp r1,#7 1605 ldreq r5,=50 1606 cmp r1,#8 1607 ldreq r5,=100 1608 cmp r1,#9 1609 ldreq r5,=50 1610 addeq r2,r3,#336 1611 cmp r1,#10 1612 ldreq r5,=5 1613 addeq r2,r3,#48 1614 cmp r1,#11 1615 ldreq r5,=0 1616 addeq r2,r3,#96 1617 add r6,r3,#144 1618 add r7,r3,#288 1619 vld1.8 {d0-d1},[r6,: 128]! 1620 vld1.8 {d2-d3},[r6,: 128]! 1621 vld1.8 {d4},[r6,: 64] 1622 vst1.8 {d0-d1},[r7,: 128]! 1623 vst1.8 {d2-d3},[r7,: 128]! 1624 vst1.8 d4,[r7,: 64] 1625 cmp r5,#0 1626 beq ._skipsquaringloop 1627 ._squaringloop: 1628 add r6,r3,#288 1629 add r7,r3,#288 1630 add r8,r3,#288 1631 vmov.i32 q0,#19 1632 vmov.i32 q1,#0 1633 vmov.i32 q2,#1 1634 vzip.i32 q1,q2 1635 vld1.8 {d4-d5},[r7,: 128]! 1636 vld1.8 {d6-d7},[r7,: 128]! 1637 vld1.8 {d9},[r7,: 64] 1638 vld1.8 {d10-d11},[r6,: 128]! 1639 add r7,sp,#416 1640 vld1.8 {d12-d13},[r6,: 128]! 1641 vmul.i32 q7,q2,q0 1642 vld1.8 {d8},[r6,: 64] 1643 vext.32 d17,d11,d10,#1 1644 vmul.i32 q9,q3,q0 1645 vext.32 d16,d10,d8,#1 1646 vshl.u32 q10,q5,q1 1647 vext.32 d22,d14,d4,#1 1648 vext.32 d24,d18,d6,#1 1649 vshl.u32 q13,q6,q1 1650 vshl.u32 d28,d8,d2 1651 vrev64.i32 d22,d22 1652 vmul.i32 d1,d9,d1 1653 vrev64.i32 d24,d24 1654 vext.32 d29,d8,d13,#1 1655 vext.32 d0,d1,d9,#1 1656 vrev64.i32 d0,d0 1657 vext.32 d2,d9,d1,#1 1658 vext.32 d23,d15,d5,#1 1659 vmull.s32 q4,d20,d4 1660 vrev64.i32 d23,d23 1661 vmlal.s32 q4,d21,d1 1662 vrev64.i32 d2,d2 1663 vmlal.s32 q4,d26,d19 1664 vext.32 d3,d5,d15,#1 1665 vmlal.s32 q4,d27,d18 1666 vrev64.i32 d3,d3 1667 vmlal.s32 q4,d28,d15 1668 vext.32 d14,d12,d11,#1 1669 vmull.s32 q5,d16,d23 1670 vext.32 d15,d13,d12,#1 1671 vmlal.s32 q5,d17,d4 1672 vst1.8 d8,[r7,: 64]! 1673 vmlal.s32 q5,d14,d1 1674 vext.32 d12,d9,d8,#0 1675 vmlal.s32 q5,d15,d19 1676 vmov.i64 d13,#0 1677 vmlal.s32 q5,d29,d18 1678 vext.32 d25,d19,d7,#1 1679 vmlal.s32 q6,d20,d5 1680 vrev64.i32 d25,d25 1681 vmlal.s32 q6,d21,d4 1682 vst1.8 d11,[r7,: 64]! 1683 vmlal.s32 q6,d26,d1 1684 vext.32 d9,d10,d10,#0 1685 vmlal.s32 q6,d27,d19 1686 vmov.i64 d8,#0 1687 vmlal.s32 q6,d28,d18 1688 vmlal.s32 q4,d16,d24 1689 vmlal.s32 q4,d17,d5 1690 vmlal.s32 q4,d14,d4 1691 vst1.8 d12,[r7,: 64]! 1692 vmlal.s32 q4,d15,d1 1693 vext.32 d10,d13,d12,#0 1694 vmlal.s32 q4,d29,d19 1695 vmov.i64 d11,#0 1696 vmlal.s32 q5,d20,d6 1697 vmlal.s32 q5,d21,d5 1698 vmlal.s32 q5,d26,d4 1699 vext.32 d13,d8,d8,#0 1700 vmlal.s32 q5,d27,d1 1701 vmov.i64 d12,#0 1702 vmlal.s32 q5,d28,d19 1703 vst1.8 d9,[r7,: 64]! 1704 vmlal.s32 q6,d16,d25 1705 vmlal.s32 q6,d17,d6 1706 vst1.8 d10,[r7,: 64] 1707 vmlal.s32 q6,d14,d5 1708 vext.32 d8,d11,d10,#0 1709 vmlal.s32 q6,d15,d4 1710 vmov.i64 d9,#0 1711 vmlal.s32 q6,d29,d1 1712 vmlal.s32 q4,d20,d7 1713 vmlal.s32 q4,d21,d6 1714 vmlal.s32 q4,d26,d5 1715 vext.32 d11,d12,d12,#0 1716 vmlal.s32 q4,d27,d4 1717 vmov.i64 d10,#0 1718 vmlal.s32 q4,d28,d1 1719 vmlal.s32 q5,d16,d0 1720 sub r6,r7,#32 1721 vmlal.s32 q5,d17,d7 1722 vmlal.s32 q5,d14,d6 1723 vext.32 d30,d9,d8,#0 1724 vmlal.s32 q5,d15,d5 1725 vld1.8 {d31},[r6,: 64]! 1726 vmlal.s32 q5,d29,d4 1727 vmlal.s32 q15,d20,d0 1728 vext.32 d0,d6,d18,#1 1729 vmlal.s32 q15,d21,d25 1730 vrev64.i32 d0,d0 1731 vmlal.s32 q15,d26,d24 1732 vext.32 d1,d7,d19,#1 1733 vext.32 d7,d10,d10,#0 1734 vmlal.s32 q15,d27,d23 1735 vrev64.i32 d1,d1 1736 vld1.8 {d6},[r6,: 64] 1737 vmlal.s32 q15,d28,d22 1738 vmlal.s32 q3,d16,d4 1739 add r6,r6,#24 1740 vmlal.s32 q3,d17,d2 1741 vext.32 d4,d31,d30,#0 1742 vmov d17,d11 1743 vmlal.s32 q3,d14,d1 1744 vext.32 d11,d13,d13,#0 1745 vext.32 d13,d30,d30,#0 1746 vmlal.s32 q3,d15,d0 1747 vext.32 d1,d8,d8,#0 1748 vmlal.s32 q3,d29,d3 1749 vld1.8 {d5},[r6,: 64] 1750 sub r6,r6,#16 1751 vext.32 d10,d6,d6,#0 1752 vmov.i32 q1,#0xffffffff 1753 vshl.i64 q4,q1,#25 1754 add r7,sp,#512 1755 vld1.8 {d14-d15},[r7,: 128] 1756 vadd.i64 q9,q2,q7 1757 vshl.i64 q1,q1,#26 1758 vshr.s64 q10,q9,#26 1759 vld1.8 {d0},[r6,: 64]! 1760 vadd.i64 q5,q5,q10 1761 vand q9,q9,q1 1762 vld1.8 {d16},[r6,: 64]! 1763 add r6,sp,#528 1764 vld1.8 {d20-d21},[r6,: 128] 1765 vadd.i64 q11,q5,q10 1766 vsub.i64 q2,q2,q9 1767 vshr.s64 q9,q11,#25 1768 vext.32 d12,d5,d4,#0 1769 vand q11,q11,q4 1770 vadd.i64 q0,q0,q9 1771 vmov d19,d7 1772 vadd.i64 q3,q0,q7 1773 vsub.i64 q5,q5,q11 1774 vshr.s64 q11,q3,#26 1775 vext.32 d18,d11,d10,#0 1776 vand q3,q3,q1 1777 vadd.i64 q8,q8,q11 1778 vadd.i64 q11,q8,q10 1779 vsub.i64 q0,q0,q3 1780 vshr.s64 q3,q11,#25 1781 vand q11,q11,q4 1782 vadd.i64 q3,q6,q3 1783 vadd.i64 q6,q3,q7 1784 vsub.i64 q8,q8,q11 1785 vshr.s64 q11,q6,#26 1786 vand q6,q6,q1 1787 vadd.i64 q9,q9,q11 1788 vadd.i64 d25,d19,d21 1789 vsub.i64 q3,q3,q6 1790 vshr.s64 d23,d25,#25 1791 vand q4,q12,q4 1792 vadd.i64 d21,d23,d23 1793 vshl.i64 d25,d23,#4 1794 vadd.i64 d21,d21,d23 1795 vadd.i64 d25,d25,d21 1796 vadd.i64 d4,d4,d25 1797 vzip.i32 q0,q8 1798 vadd.i64 d12,d4,d14 1799 add r6,r8,#8 1800 vst1.8 d0,[r6,: 64] 1801 vsub.i64 d19,d19,d9 1802 add r6,r6,#16 1803 vst1.8 d16,[r6,: 64] 1804 vshr.s64 d22,d12,#26 1805 vand q0,q6,q1 1806 vadd.i64 d10,d10,d22 1807 vzip.i32 q3,q9 1808 vsub.i64 d4,d4,d0 1809 sub r6,r6,#8 1810 vst1.8 d6,[r6,: 64] 1811 add r6,r6,#16 1812 vst1.8 d18,[r6,: 64] 1813 vzip.i32 q2,q5 1814 sub r6,r6,#32 1815 vst1.8 d4,[r6,: 64] 1816 subs r5,r5,#1 1817 bhi ._squaringloop 1818 ._skipsquaringloop: 1819 mov r2,r2 1820 add r5,r3,#288 1821 add r6,r3,#144 1822 vmov.i32 q0,#19 1823 vmov.i32 q1,#0 1824 vmov.i32 q2,#1 1825 vzip.i32 q1,q2 1826 vld1.8 {d4-d5},[r5,: 128]! 1827 vld1.8 {d6-d7},[r5,: 128]! 1828 vld1.8 {d9},[r5,: 64] 1829 vld1.8 {d10-d11},[r2,: 128]! 1830 add r5,sp,#416 1831 vld1.8 {d12-d13},[r2,: 128]! 1832 vmul.i32 q7,q2,q0 1833 vld1.8 {d8},[r2,: 64] 1834 vext.32 d17,d11,d10,#1 1835 vmul.i32 q9,q3,q0 1836 vext.32 d16,d10,d8,#1 1837 vshl.u32 q10,q5,q1 1838 vext.32 d22,d14,d4,#1 1839 vext.32 d24,d18,d6,#1 1840 vshl.u32 q13,q6,q1 1841 vshl.u32 d28,d8,d2 1842 vrev64.i32 d22,d22 1843 vmul.i32 d1,d9,d1 1844 vrev64.i32 d24,d24 1845 vext.32 d29,d8,d13,#1 1846 vext.32 d0,d1,d9,#1 1847 vrev64.i32 d0,d0 1848 vext.32 d2,d9,d1,#1 1849 vext.32 d23,d15,d5,#1 1850 vmull.s32 q4,d20,d4 1851 vrev64.i32 d23,d23 1852 vmlal.s32 q4,d21,d1 1853 vrev64.i32 d2,d2 1854 vmlal.s32 q4,d26,d19 1855 vext.32 d3,d5,d15,#1 1856 vmlal.s32 q4,d27,d18 1857 vrev64.i32 d3,d3 1858 vmlal.s32 q4,d28,d15 1859 vext.32 d14,d12,d11,#1 1860 vmull.s32 q5,d16,d23 1861 vext.32 d15,d13,d12,#1 1862 vmlal.s32 q5,d17,d4 1863 vst1.8 d8,[r5,: 64]! 1864 vmlal.s32 q5,d14,d1 1865 vext.32 d12,d9,d8,#0 1866 vmlal.s32 q5,d15,d19 1867 vmov.i64 d13,#0 1868 vmlal.s32 q5,d29,d18 1869 vext.32 d25,d19,d7,#1 1870 vmlal.s32 q6,d20,d5 1871 vrev64.i32 d25,d25 1872 vmlal.s32 q6,d21,d4 1873 vst1.8 d11,[r5,: 64]! 1874 vmlal.s32 q6,d26,d1 1875 vext.32 d9,d10,d10,#0 1876 vmlal.s32 q6,d27,d19 1877 vmov.i64 d8,#0 1878 vmlal.s32 q6,d28,d18 1879 vmlal.s32 q4,d16,d24 1880 vmlal.s32 q4,d17,d5 1881 vmlal.s32 q4,d14,d4 1882 vst1.8 d12,[r5,: 64]! 1883 vmlal.s32 q4,d15,d1 1884 vext.32 d10,d13,d12,#0 1885 vmlal.s32 q4,d29,d19 1886 vmov.i64 d11,#0 1887 vmlal.s32 q5,d20,d6 1888 vmlal.s32 q5,d21,d5 1889 vmlal.s32 q5,d26,d4 1890 vext.32 d13,d8,d8,#0 1891 vmlal.s32 q5,d27,d1 1892 vmov.i64 d12,#0 1893 vmlal.s32 q5,d28,d19 1894 vst1.8 d9,[r5,: 64]! 1895 vmlal.s32 q6,d16,d25 1896 vmlal.s32 q6,d17,d6 1897 vst1.8 d10,[r5,: 64] 1898 vmlal.s32 q6,d14,d5 1899 vext.32 d8,d11,d10,#0 1900 vmlal.s32 q6,d15,d4 1901 vmov.i64 d9,#0 1902 vmlal.s32 q6,d29,d1 1903 vmlal.s32 q4,d20,d7 1904 vmlal.s32 q4,d21,d6 1905 vmlal.s32 q4,d26,d5 1906 vext.32 d11,d12,d12,#0 1907 vmlal.s32 q4,d27,d4 1908 vmov.i64 d10,#0 1909 vmlal.s32 q4,d28,d1 1910 vmlal.s32 q5,d16,d0 1911 sub r2,r5,#32 1912 vmlal.s32 q5,d17,d7 1913 vmlal.s32 q5,d14,d6 1914 vext.32 d30,d9,d8,#0 1915 vmlal.s32 q5,d15,d5 1916 vld1.8 {d31},[r2,: 64]! 1917 vmlal.s32 q5,d29,d4 1918 vmlal.s32 q15,d20,d0 1919 vext.32 d0,d6,d18,#1 1920 vmlal.s32 q15,d21,d25 1921 vrev64.i32 d0,d0 1922 vmlal.s32 q15,d26,d24 1923 vext.32 d1,d7,d19,#1 1924 vext.32 d7,d10,d10,#0 1925 vmlal.s32 q15,d27,d23 1926 vrev64.i32 d1,d1 1927 vld1.8 {d6},[r2,: 64] 1928 vmlal.s32 q15,d28,d22 1929 vmlal.s32 q3,d16,d4 1930 add r2,r2,#24 1931 vmlal.s32 q3,d17,d2 1932 vext.32 d4,d31,d30,#0 1933 vmov d17,d11 1934 vmlal.s32 q3,d14,d1 1935 vext.32 d11,d13,d13,#0 1936 vext.32 d13,d30,d30,#0 1937 vmlal.s32 q3,d15,d0 1938 vext.32 d1,d8,d8,#0 1939 vmlal.s32 q3,d29,d3 1940 vld1.8 {d5},[r2,: 64] 1941 sub r2,r2,#16 1942 vext.32 d10,d6,d6,#0 1943 vmov.i32 q1,#0xffffffff 1944 vshl.i64 q4,q1,#25 1945 add r5,sp,#512 1946 vld1.8 {d14-d15},[r5,: 128] 1947 vadd.i64 q9,q2,q7 1948 vshl.i64 q1,q1,#26 1949 vshr.s64 q10,q9,#26 1950 vld1.8 {d0},[r2,: 64]! 1951 vadd.i64 q5,q5,q10 1952 vand q9,q9,q1 1953 vld1.8 {d16},[r2,: 64]! 1954 add r2,sp,#528 1955 vld1.8 {d20-d21},[r2,: 128] 1956 vadd.i64 q11,q5,q10 1957 vsub.i64 q2,q2,q9 1958 vshr.s64 q9,q11,#25 1959 vext.32 d12,d5,d4,#0 1960 vand q11,q11,q4 1961 vadd.i64 q0,q0,q9 1962 vmov d19,d7 1963 vadd.i64 q3,q0,q7 1964 vsub.i64 q5,q5,q11 1965 vshr.s64 q11,q3,#26 1966 vext.32 d18,d11,d10,#0 1967 vand q3,q3,q1 1968 vadd.i64 q8,q8,q11 1969 vadd.i64 q11,q8,q10 1970 vsub.i64 q0,q0,q3 1971 vshr.s64 q3,q11,#25 1972 vand q11,q11,q4 1973 vadd.i64 q3,q6,q3 1974 vadd.i64 q6,q3,q7 1975 vsub.i64 q8,q8,q11 1976 vshr.s64 q11,q6,#26 1977 vand q6,q6,q1 1978 vadd.i64 q9,q9,q11 1979 vadd.i64 d25,d19,d21 1980 vsub.i64 q3,q3,q6 1981 vshr.s64 d23,d25,#25 1982 vand q4,q12,q4 1983 vadd.i64 d21,d23,d23 1984 vshl.i64 d25,d23,#4 1985 vadd.i64 d21,d21,d23 1986 vadd.i64 d25,d25,d21 1987 vadd.i64 d4,d4,d25 1988 vzip.i32 q0,q8 1989 vadd.i64 d12,d4,d14 1990 add r2,r6,#8 1991 vst1.8 d0,[r2,: 64] 1992 vsub.i64 d19,d19,d9 1993 add r2,r2,#16 1994 vst1.8 d16,[r2,: 64] 1995 vshr.s64 d22,d12,#26 1996 vand q0,q6,q1 1997 vadd.i64 d10,d10,d22 1998 vzip.i32 q3,q9 1999 vsub.i64 d4,d4,d0 2000 sub r2,r2,#8 2001 vst1.8 d6,[r2,: 64] 2002 add r2,r2,#16 2003 vst1.8 d18,[r2,: 64] 2004 vzip.i32 q2,q5 2005 sub r2,r2,#32 2006 vst1.8 d4,[r2,: 64] 2007 cmp r4,#0 2008 beq ._skippostcopy 2009 add r2,r3,#144 2010 mov r4,r4 2011 vld1.8 {d0-d1},[r2,: 128]! 2012 vld1.8 {d2-d3},[r2,: 128]! 2013 vld1.8 {d4},[r2,: 64] 2014 vst1.8 {d0-d1},[r4,: 128]! 2015 vst1.8 {d2-d3},[r4,: 128]! 2016 vst1.8 d4,[r4,: 64] 2017 ._skippostcopy: 2018 cmp r1,#1 2019 bne ._skipfinalcopy 2020 add r2,r3,#288 2021 add r4,r3,#144 2022 vld1.8 {d0-d1},[r2,: 128]! 2023 vld1.8 {d2-d3},[r2,: 128]! 2024 vld1.8 {d4},[r2,: 64] 2025 vst1.8 {d0-d1},[r4,: 128]! 2026 vst1.8 {d2-d3},[r4,: 128]! 2027 vst1.8 d4,[r4,: 64] 2028 ._skipfinalcopy: 2029 add r1,r1,#1 2030 cmp r1,#12 2031 blo ._invertloop 2032 add r1,r3,#144 2033 ldr r2,[r1],#4 2034 ldr r3,[r1],#4 2035 ldr r4,[r1],#4 2036 ldr r5,[r1],#4 2037 ldr r6,[r1],#4 2038 ldr r7,[r1],#4 2039 ldr r8,[r1],#4 2040 ldr r9,[r1],#4 2041 ldr r10,[r1],#4 2042 ldr r1,[r1] 2043 add r11,r1,r1,LSL #4 2044 add r11,r11,r1,LSL #1 2045 add r11,r11,#16777216 2046 mov r11,r11,ASR #25 2047 add r11,r11,r2 2048 mov r11,r11,ASR #26 2049 add r11,r11,r3 2050 mov r11,r11,ASR #25 2051 add r11,r11,r4 2052 mov r11,r11,ASR #26 2053 add r11,r11,r5 2054 mov r11,r11,ASR #25 2055 add r11,r11,r6 2056 mov r11,r11,ASR #26 2057 add r11,r11,r7 2058 mov r11,r11,ASR #25 2059 add r11,r11,r8 2060 mov r11,r11,ASR #26 2061 add r11,r11,r9 2062 mov r11,r11,ASR #25 2063 add r11,r11,r10 2064 mov r11,r11,ASR #26 2065 add r11,r11,r1 2066 mov r11,r11,ASR #25 2067 add r2,r2,r11 2068 add r2,r2,r11,LSL #1 2069 add r2,r2,r11,LSL #4 2070 mov r11,r2,ASR #26 2071 add r3,r3,r11 2072 sub r2,r2,r11,LSL #26 2073 mov r11,r3,ASR #25 2074 add r4,r4,r11 2075 sub r3,r3,r11,LSL #25 2076 mov r11,r4,ASR #26 2077 add r5,r5,r11 2078 sub r4,r4,r11,LSL #26 2079 mov r11,r5,ASR #25 2080 add r6,r6,r11 2081 sub r5,r5,r11,LSL #25 2082 mov r11,r6,ASR #26 2083 add r7,r7,r11 2084 sub r6,r6,r11,LSL #26 2085 mov r11,r7,ASR #25 2086 add r8,r8,r11 2087 sub r7,r7,r11,LSL #25 2088 mov r11,r8,ASR #26 2089 add r9,r9,r11 2090 sub r8,r8,r11,LSL #26 2091 mov r11,r9,ASR #25 2092 add r10,r10,r11 2093 sub r9,r9,r11,LSL #25 2094 mov r11,r10,ASR #26 2095 add r1,r1,r11 2096 sub r10,r10,r11,LSL #26 2097 mov r11,r1,ASR #25 2098 sub r1,r1,r11,LSL #25 2099 add r2,r2,r3,LSL #26 2100 mov r3,r3,LSR #6 2101 add r3,r3,r4,LSL #19 2102 mov r4,r4,LSR #13 2103 add r4,r4,r5,LSL #13 2104 mov r5,r5,LSR #19 2105 add r5,r5,r6,LSL #6 2106 add r6,r7,r8,LSL #25 2107 mov r7,r8,LSR #7 2108 add r7,r7,r9,LSL #19 2109 mov r8,r9,LSR #13 2110 add r8,r8,r10,LSL #12 2111 mov r9,r10,LSR #20 2112 add r1,r9,r1,LSL #6 2113 str r2,[r0],#4 2114 str r3,[r0],#4 2115 str r4,[r0],#4 2116 str r5,[r0],#4 2117 str r6,[r0],#4 2118 str r7,[r0],#4 2119 str r8,[r0],#4 2120 str r1,[r0] 2121 ldrd r4,[sp,#0] 2122 ldrd r6,[sp,#8] 2123 ldrd r8,[sp,#16] 2124 ldrd r10,[sp,#24] 2125 ldr r12,[sp,#480] 2126 ldr r14,[sp,#484] 2127 ldr r0,=0 2128 mov sp,r12 2129 vpop {q4,q5,q6,q7} 2130 bx lr 2131 2132 #endif /* !OPENSSL_NO_ASM && __arm__ && !__APPLE__ */ 2133