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