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