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