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