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