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