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