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