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