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