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