Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  curve25519-core.S   Sprache: Sparc

 
/* SPDX-License-Identifier: GPL-2.0 OR MIT */
/*
 * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
 *
 * Based on public domain code from Daniel J. Bernstein and Peter Schwabe. This
 * began from SUPERCOP's curve25519/neon2/scalarmult.s, but has subsequently been
 * manually reworked for use in kernel space.
 */


#include <linux/linkage.h>

.text
.arch armv7-a
.fpu neon
.align 4

ENTRY(curve25519_neon)
 push  {r4-r11, lr}
 mov  ip, sp
 sub  r3, sp, #704
 and  r3, r3, #0xfffffff0
 mov  sp, r3
 movw  r4, #0
 movw  r5, #254
 vmov.i32 q0, #1
 vshr.u64 q1, q0, #7
 vshr.u64 q0, q0, #8
 vmov.i32 d4, #19
 vmov.i32 d5, #38
 add  r6, sp, #480
 vst1.8  {d2-d3}, [r6, : 128]!
 vst1.8  {d0-d1}, [r6, : 128]!
 vst1.8  {d4-d5}, [r6, : 128]
 add  r6, r3, #0
 vmov.i32 q2, #0
 vst1.8  {d4-d5}, [r6, : 128]!
 vst1.8  {d4-d5}, [r6, : 128]!
 vst1.8  d4, [r6, : 64]
 add  r6, r3, #0
 movw  r7, #960
 sub  r7, r7, #2
 neg  r7, r7
 sub  r7, r7, r7, LSL #7
 str  r7, [r6]
 add  r6, sp, #672
 vld1.8  {d4-d5}, [r1]!
 vld1.8  {d6-d7}, [r1]
 vst1.8  {d4-d5}, [r6, : 128]!
 vst1.8  {d6-d7}, [r6, : 128]
 sub  r1, r6, #16
 ldrb  r6, [r1]
 and  r6, r6, #248
 strb  r6, [r1]
 ldrb  r6, [r1, #31]
 and  r6, r6, #127
 orr  r6, r6, #64
 strb  r6, [r1, #31]
 vmov.i64 q2, #0xffffffff
 vshr.u64 q3, q2, #7
 vshr.u64 q2, q2, #6
 vld1.8  {d8}, [r2]
 vld1.8  {d10}, [r2]
 add  r2, r2, #6
 vld1.8  {d12}, [r2]
 vld1.8  {d14}, [r2]
 add  r2, r2, #6
 vld1.8  {d16}, [r2]
 add  r2, r2, #4
 vld1.8  {d18}, [r2]
 vld1.8  {d20}, [r2]
 add  r2, r2, #6
 vld1.8  {d22}, [r2]
 add  r2, r2, #2
 vld1.8  {d24}, [r2]
 vld1.8  {d26}, [r2]
 vshr.u64 q5, q5, #26
 vshr.u64 q6, q6, #3
 vshr.u64 q7, q7, #29
 vshr.u64 q8, q8, #6
 vshr.u64 q10, q10, #25
 vshr.u64 q11, q11, #3
 vshr.u64 q12, q12, #12
 vshr.u64 q13, q13, #38
 vand  q4, q4, q2
 vand  q6, q6, q2
 vand  q8, q8, q2
 vand  q10, q10, q2
 vand  q2, q12, q2
 vand  q5, q5, q3
 vand  q7, q7, q3
 vand  q9, q9, q3
 vand  q11, q11, q3
 vand  q3, q13, q3
 add  r2, r3, #48
 vadd.i64 q12, q4, q1
 vadd.i64 q13, q10, q1
 vshr.s64 q12, q12, #26
 vshr.s64 q13, q13, #26
 vadd.i64 q5, q5, q12
 vshl.i64 q12, q12, #26
 vadd.i64 q14, q5, q0
 vadd.i64 q11, q11, q13
 vshl.i64 q13, q13, #26
 vadd.i64 q15, q11, q0
 vsub.i64 q4, q4, q12
 vshr.s64 q12, q14, #25
 vsub.i64 q10, q10, q13
 vshr.s64 q13, q15, #25
 vadd.i64 q6, q6, q12
 vshl.i64 q12, q12, #25
 vadd.i64 q14, q6, q1
 vadd.i64 q2, q2, q13
 vsub.i64 q5, q5, q12
 vshr.s64 q12, q14, #26
 vshl.i64 q13, q13, #25
 vadd.i64 q14, q2, q1
 vadd.i64 q7, q7, q12
 vshl.i64 q12, q12, #26
 vadd.i64 q15, q7, q0
 vsub.i64 q11, q11, q13
 vshr.s64 q13, q14, #26
 vsub.i64 q6, q6, q12
 vshr.s64 q12, q15, #25
 vadd.i64 q3, q3, q13
 vshl.i64 q13, q13, #26
 vadd.i64 q14, q3, q0
 vadd.i64 q8, q8, q12
 vshl.i64 q12, q12, #25
 vadd.i64 q15, q8, q1
 add  r2, r2, #8
 vsub.i64 q2, q2, q13
 vshr.s64 q13, q14, #25
 vsub.i64 q7, q7, q12
 vshr.s64 q12, q15, #26
 vadd.i64 q14, q13, q13
 vadd.i64 q9, q9, q12
 vtrn.32  d12, d14
 vshl.i64 q12, q12, #26
 vtrn.32  d13, d15
 vadd.i64 q0, q9, q0
 vadd.i64 q4, q4, q14
 vst1.8  d12, [r2, : 64]!
 vshl.i64 q6, q13, #4
 vsub.i64 q7, q8, q12
 vshr.s64 q0, q0, #25
 vadd.i64 q4, q4, q6
 vadd.i64 q6, q10, q0
 vshl.i64 q0, q0, #25
 vadd.i64 q8, q6, q1
 vadd.i64 q4, q4, q13
 vshl.i64 q10, q13, #25
 vadd.i64 q1, q4, q1
 vsub.i64 q0, q9, q0
 vshr.s64 q8, q8, #26
 vsub.i64 q3, q3, q10
 vtrn.32  d14, d0
 vshr.s64 q1, q1, #26
 vtrn.32  d15, d1
 vadd.i64 q0, q11, q8
 vst1.8  d14, [r2, : 64]
 vshl.i64 q7, q8, #26
 vadd.i64 q5, q5, q1
 vtrn.32  d4, d6
 vshl.i64 q1, q1, #26
 vtrn.32  d5, d7
 vsub.i64 q3, q6, q7
 add  r2, r2, #16
 vsub.i64 q1, q4, q1
 vst1.8  d4, [r2, : 64]
 vtrn.32  d6, d0
 vtrn.32  d7, d1
 sub  r2, r2, #8
 vtrn.32  d2, d10
 vtrn.32  d3, d11
 vst1.8  d6, [r2, : 64]
 sub  r2, r2, #24
 vst1.8  d2, [r2, : 64]
 add  r2, r3, #96
 vmov.i32 q0, #0
 vmov.i64 d2, #0xff
 vmov.i64 d3, #0
 vshr.u32 q1, q1, #7
 vst1.8  {d2-d3}, [r2, : 128]!
 vst1.8  {d0-d1}, [r2, : 128]!
 vst1.8  d0, [r2, : 64]
 add  r2, r3, #144
 vmov.i32 q0, #0
 vst1.8  {d0-d1}, [r2, : 128]!
 vst1.8  {d0-d1}, [r2, : 128]!
 vst1.8  d0, [r2, : 64]
 add  r2, r3, #240
 vmov.i32 q0, #0
 vmov.i64 d2, #0xff
 vmov.i64 d3, #0
 vshr.u32 q1, q1, #7
 vst1.8  {d2-d3}, [r2, : 128]!
 vst1.8  {d0-d1}, [r2, : 128]!
 vst1.8  d0, [r2, : 64]
 add  r2, r3, #48
 add  r6, r3, #192
 vld1.8  {d0-d1}, [r2, : 128]!
 vld1.8  {d2-d3}, [r2, : 128]!
 vld1.8  {d4}, [r2, : 64]
 vst1.8  {d0-d1}, [r6, : 128]!
 vst1.8  {d2-d3}, [r6, : 128]!
 vst1.8  d4, [r6, : 64]
.Lmainloop:
 mov  r2, r5, LSR #3
 and  r6, r5, #7
 ldrb  r2, [r1, r2]
 mov  r2, r2, LSR r6
 and  r2, r2, #1
 str  r5, [sp, #456]
 eor  r4, r4, r2
 str  r2, [sp, #460]
 neg  r2, r4
 add  r4, r3, #96
 add  r5, r3, #192
 add  r6, r3, #144
 vld1.8  {d8-d9}, [r4, : 128]!
 add  r7, r3, #240
 vld1.8  {d10-d11}, [r5, : 128]!
 veor  q6, q4, q5
 vld1.8  {d14-d15}, [r6, : 128]!
 vdup.i32 q8, r2
 vld1.8  {d18-d19}, [r7, : 128]!
 veor  q10, q7, q9
 vld1.8  {d22-d23}, [r4, : 128]!
 vand  q6, q6, q8
 vld1.8  {d24-d25}, [r5, : 128]!
 vand  q10, q10, q8
 vld1.8  {d26-d27}, [r6, : 128]!
 veor  q4, q4, q6
 vld1.8  {d28-d29}, [r7, : 128]!
 veor  q5, q5, q6
 vld1.8  {d0}, [r4, : 64]
 veor  q6, q7, q10
 vld1.8  {d2}, [r5, : 64]
 veor  q7, q9, q10
 vld1.8  {d4}, [r6, : 64]
 veor  q9, q11, q12
 vld1.8  {d6}, [r7, : 64]
 veor  q10, q0, q1
 sub  r2, r4, #32
 vand  q9, q9, q8
 sub  r4, r5, #32
 vand  q10, q10, q8
 sub  r5, r6, #32
 veor  q11, q11, q9
 sub  r6, r7, #32
 veor  q0, q0, q10
 veor  q9, q12, q9
 veor  q1, q1, q10
 veor  q10, q13, q14
 veor  q12, q2, q3
 vand  q10, q10, q8
 vand  q8, q12, q8
 veor  q12, q13, q10
 veor  q2, q2, q8
 veor  q10, q14, q10
 veor  q3, q3, q8
 vadd.i32 q8, q4, q6
 vsub.i32 q4, q4, q6
 vst1.8  {d16-d17}, [r2, : 128]!
 vadd.i32 q6, q11, q12
 vst1.8  {d8-d9}, [r5, : 128]!
 vsub.i32 q4, q11, q12
 vst1.8  {d12-d13}, [r2, : 128]!
 vadd.i32 q6, q0, q2
 vst1.8  {d8-d9}, [r5, : 128]!
 vsub.i32 q0, q0, q2
 vst1.8  d12, [r2, : 64]
 vadd.i32 q2, q5, q7
 vst1.8  d0, [r5, : 64]
 vsub.i32 q0, q5, q7
 vst1.8  {d4-d5}, [r4, : 128]!
 vadd.i32 q2, q9, q10
 vst1.8  {d0-d1}, [r6, : 128]!
 vsub.i32 q0, q9, q10
 vst1.8  {d4-d5}, [r4, : 128]!
 vadd.i32 q2, q1, q3
 vst1.8  {d0-d1}, [r6, : 128]!
 vsub.i32 q0, q1, q3
 vst1.8  d4, [r4, : 64]
 vst1.8  d0, [r6, : 64]
 add  r2, sp, #512
 add  r4, r3, #96
 add  r5, r3, #144
 vld1.8  {d0-d1}, [r2, : 128]
 vld1.8  {d2-d3}, [r4, : 128]!
 vld1.8  {d4-d5}, [r5, : 128]!
 vzip.i32 q1, q2
 vld1.8  {d6-d7}, [r4, : 128]!
 vld1.8  {d8-d9}, [r5, : 128]!
 vshl.i32 q5, q1, #1
 vzip.i32 q3, q4
 vshl.i32 q6, q2, #1
 vld1.8  {d14}, [r4, : 64]
 vshl.i32 q8, q3, #1
 vld1.8  {d15}, [r5, : 64]
 vshl.i32 q9, q4, #1
 vmul.i32 d21, d7, d1
 vtrn.32  d14, d15
 vmul.i32 q11, q4, q0
 vmul.i32 q0, q7, q0
 vmull.s32 q12, d2, d2
 vmlal.s32 q12, d11, d1
 vmlal.s32 q12, d12, d0
 vmlal.s32 q12, d13, d23
 vmlal.s32 q12, d16, d22
 vmlal.s32 q12, d7, d21
 vmull.s32 q10, d2, d11
 vmlal.s32 q10, d4, d1
 vmlal.s32 q10, d13, d0
 vmlal.s32 q10, d6, d23
 vmlal.s32 q10, d17, d22
 vmull.s32 q13, d10, d4
 vmlal.s32 q13, d11, d3
 vmlal.s32 q13, d13, d1
 vmlal.s32 q13, d16, d0
 vmlal.s32 q13, d17, d23
 vmlal.s32 q13, d8, d22
 vmull.s32 q1, d10, d5
 vmlal.s32 q1, d11, d4
 vmlal.s32 q1, d6, d1
 vmlal.s32 q1, d17, d0
 vmlal.s32 q1, d8, d23
 vmull.s32 q14, d10, d6
 vmlal.s32 q14, d11, d13
 vmlal.s32 q14, d4, d4
 vmlal.s32 q14, d17, d1
 vmlal.s32 q14, d18, d0
 vmlal.s32 q14, d9, d23
 vmull.s32 q11, d10, d7
 vmlal.s32 q11, d11, d6
 vmlal.s32 q11, d12, d5
 vmlal.s32 q11, d8, d1
 vmlal.s32 q11, d19, d0
 vmull.s32 q15, d10, d8
 vmlal.s32 q15, d11, d17
 vmlal.s32 q15, d12, d6
 vmlal.s32 q15, d13, d5
 vmlal.s32 q15, d19, d1
 vmlal.s32 q15, d14, d0
 vmull.s32 q2, d10, d9
 vmlal.s32 q2, d11, d8
 vmlal.s32 q2, d12, d7
 vmlal.s32 q2, d13, d6
 vmlal.s32 q2, d14, d1
 vmull.s32 q0, d15, d1
 vmlal.s32 q0, d10, d14
 vmlal.s32 q0, d11, d19
 vmlal.s32 q0, d12, d8
 vmlal.s32 q0, d13, d17
 vmlal.s32 q0, d6, d6
 add  r2, sp, #480
 vld1.8  {d18-d19}, [r2, : 128]!
 vmull.s32 q3, d16, d7
 vmlal.s32 q3, d10, d15
 vmlal.s32 q3, d11, d14
 vmlal.s32 q3, d12, d9
 vmlal.s32 q3, d13, d8
 vld1.8  {d8-d9}, [r2, : 128]
 vadd.i64 q5, q12, q9
 vadd.i64 q6, q15, q9
 vshr.s64 q5, q5, #26
 vshr.s64 q6, q6, #26
 vadd.i64 q7, q10, q5
 vshl.i64 q5, q5, #26
 vadd.i64 q8, q7, q4
 vadd.i64 q2, q2, q6
 vshl.i64 q6, q6, #26
 vadd.i64 q10, q2, q4
 vsub.i64 q5, q12, q5
 vshr.s64 q8, q8, #25
 vsub.i64 q6, q15, q6
 vshr.s64 q10, q10, #25
 vadd.i64 q12, q13, q8
 vshl.i64 q8, q8, #25
 vadd.i64 q13, q12, q9
 vadd.i64 q0, q0, q10
 vsub.i64 q7, q7, q8
 vshr.s64 q8, q13, #26
 vshl.i64 q10, q10, #25
 vadd.i64 q13, q0, q9
 vadd.i64 q1, q1, q8
 vshl.i64 q8, q8, #26
 vadd.i64 q15, q1, q4
 vsub.i64 q2, q2, q10
 vshr.s64 q10, q13, #26
 vsub.i64 q8, q12, q8
 vshr.s64 q12, q15, #25
 vadd.i64 q3, q3, q10
 vshl.i64 q10, q10, #26
 vadd.i64 q13, q3, q4
 vadd.i64 q14, q14, q12
 add  r2, r3, #288
 vshl.i64 q12, q12, #25
 add  r4, r3, #336
 vadd.i64 q15, q14, q9
 add  r2, r2, #8
 vsub.i64 q0, q0, q10
 add  r4, r4, #8
 vshr.s64 q10, q13, #25
 vsub.i64 q1, q1, q12
 vshr.s64 q12, q15, #26
 vadd.i64 q13, q10, q10
 vadd.i64 q11, q11, q12
 vtrn.32  d16, d2
 vshl.i64 q12, q12, #26
 vtrn.32  d17, d3
 vadd.i64 q1, q11, q4
 vadd.i64 q4, q5, q13
 vst1.8  d16, [r2, : 64]!
 vshl.i64 q5, q10, #4
 vst1.8  d17, [r4, : 64]!
 vsub.i64 q8, q14, q12
 vshr.s64 q1, q1, #25
 vadd.i64 q4, q4, q5
 vadd.i64 q5, q6, q1
 vshl.i64 q1, q1, #25
 vadd.i64 q6, q5, q9
 vadd.i64 q4, q4, q10
 vshl.i64 q10, q10, #25
 vadd.i64 q9, q4, q9
 vsub.i64 q1, q11, q1
 vshr.s64 q6, q6, #26
 vsub.i64 q3, q3, q10
 vtrn.32  d16, d2
 vshr.s64 q9, q9, #26
 vtrn.32  d17, d3
 vadd.i64 q1, q2, q6
 vst1.8  d16, [r2, : 64]
 vshl.i64 q2, q6, #26
 vst1.8  d17, [r4, : 64]
 vadd.i64 q6, q7, q9
 vtrn.32  d0, d6
 vshl.i64 q7, q9, #26
 vtrn.32  d1, d7
 vsub.i64 q2, q5, q2
 add  r2, r2, #16
 vsub.i64 q3, q4, q7
 vst1.8  d0, [r2, : 64]
 add  r4, r4, #16
 vst1.8  d1, [r4, : 64]
 vtrn.32  d4, d2
 vtrn.32  d5, d3
 sub  r2, r2, #8
 sub  r4, r4, #8
 vtrn.32  d6, d12
 vtrn.32  d7, d13
 vst1.8  d4, [r2, : 64]
 vst1.8  d5, [r4, : 64]
 sub  r2, r2, #24
 sub  r4, r4, #24
 vst1.8  d6, [r2, : 64]
 vst1.8  d7, [r4, : 64]
 add  r2, r3, #240
 add  r4, r3, #96
 vld1.8  {d0-d1}, [r4, : 128]!
 vld1.8  {d2-d3}, [r4, : 128]!
 vld1.8  {d4}, [r4, : 64]
 add  r4, r3, #144
 vld1.8  {d6-d7}, [r4, : 128]!
 vtrn.32  q0, q3
 vld1.8  {d8-d9}, [r4, : 128]!
 vshl.i32 q5, q0, #4
 vtrn.32  q1, q4
 vshl.i32 q6, q3, #4
 vadd.i32 q5, q5, q0
 vadd.i32 q6, q6, q3
 vshl.i32 q7, q1, #4
 vld1.8  {d5}, [r4, : 64]
 vshl.i32 q8, q4, #4
 vtrn.32  d4, d5
 vadd.i32 q7, q7, q1
 vadd.i32 q8, q8, q4
 vld1.8  {d18-d19}, [r2, : 128]!
 vshl.i32 q10, q2, #4
 vld1.8  {d22-d23}, [r2, : 128]!
 vadd.i32 q10, q10, q2
 vld1.8  {d24}, [r2, : 64]
 vadd.i32 q5, q5, q0
 add  r2, r3, #192
 vld1.8  {d26-d27}, [r2, : 128]!
 vadd.i32 q6, q6, q3
 vld1.8  {d28-d29}, [r2, : 128]!
 vadd.i32 q8, q8, q4
 vld1.8  {d25}, [r2, : 64]
 vadd.i32 q10, q10, q2
 vtrn.32  q9, q13
 vadd.i32 q7, q7, q1
 vadd.i32 q5, q5, q0
 vtrn.32  q11, q14
 vadd.i32 q6, q6, q3
 add  r2, sp, #528
 vadd.i32 q10, q10, q2
 vtrn.32  d24, d25
 vst1.8  {d12-d13}, [r2, : 128]!
 vshl.i32 q6, q13, #1
 vst1.8  {d20-d21}, [r2, : 128]!
 vshl.i32 q10, q14, #1
 vst1.8  {d12-d13}, [r2, : 128]!
 vshl.i32 q15, q12, #1
 vadd.i32 q8, q8, q4
 vext.32  d10, d31, d30, #0
 vadd.i32 q7, q7, q1
 vst1.8  {d16-d17}, [r2, : 128]!
 vmull.s32 q8, d18, d5
 vmlal.s32 q8, d26, d4
 vmlal.s32 q8, d19, d9
 vmlal.s32 q8, d27, d3
 vmlal.s32 q8, d22, d8
 vmlal.s32 q8, d28, d2
 vmlal.s32 q8, d23, d7
 vmlal.s32 q8, d29, d1
 vmlal.s32 q8, d24, d6
 vmlal.s32 q8, d25, d0
 vst1.8  {d14-d15}, [r2, : 128]!
 vmull.s32 q2, d18, d4
 vmlal.s32 q2, d12, d9
 vmlal.s32 q2, d13, d8
 vmlal.s32 q2, d19, d3
 vmlal.s32 q2, d22, d2
 vmlal.s32 q2, d23, d1
 vmlal.s32 q2, d24, d0
 vst1.8  {d20-d21}, [r2, : 128]!
 vmull.s32 q7, d18, d9
 vmlal.s32 q7, d26, d3
 vmlal.s32 q7, d19, d8
 vmlal.s32 q7, d27, d2
 vmlal.s32 q7, d22, d7
 vmlal.s32 q7, d28, d1
 vmlal.s32 q7, d23, d6
 vmlal.s32 q7, d29, d0
 vst1.8  {d10-d11}, [r2, : 128]!
 vmull.s32 q5, d18, d3
 vmlal.s32 q5, d19, d2
 vmlal.s32 q5, d22, d1
 vmlal.s32 q5, d23, d0
 vmlal.s32 q5, d12, d8
 vst1.8  {d16-d17}, [r2, : 128]
 vmull.s32 q4, d18, d8
 vmlal.s32 q4, d26, d2
 vmlal.s32 q4, d19, d7
 vmlal.s32 q4, d27, d1
 vmlal.s32 q4, d22, d6
 vmlal.s32 q4, d28, d0
 vmull.s32 q8, d18, d7
 vmlal.s32 q8, d26, d1
 vmlal.s32 q8, d19, d6
 vmlal.s32 q8, d27, d0
 add  r2, sp, #544
 vld1.8  {d20-d21}, [r2, : 128]
 vmlal.s32 q7, d24, d21
 vmlal.s32 q7, d25, d20
 vmlal.s32 q4, d23, d21
 vmlal.s32 q4, d29, d20
 vmlal.s32 q8, d22, d21
 vmlal.s32 q8, d28, d20
 vmlal.s32 q5, d24, d20
 vst1.8  {d14-d15}, [r2, : 128]
 vmull.s32 q7, d18, d6
 vmlal.s32 q7, d26, d0
 add  r2, sp, #624
 vld1.8  {d30-d31}, [r2, : 128]
 vmlal.s32 q2, d30, d21
 vmlal.s32 q7, d19, d21
 vmlal.s32 q7, d27, d20
 add  r2, sp, #592
 vld1.8  {d26-d27}, [r2, : 128]
 vmlal.s32 q4, d25, d27
 vmlal.s32 q8, d29, d27
 vmlal.s32 q8, d25, d26
 vmlal.s32 q7, d28, d27
 vmlal.s32 q7, d29, d26
 add  r2, sp, #576
 vld1.8  {d28-d29}, [r2, : 128]
 vmlal.s32 q4, d24, d29
 vmlal.s32 q8, d23, d29
 vmlal.s32 q8, d24, d28
 vmlal.s32 q7, d22, d29
 vmlal.s32 q7, d23, d28
 vst1.8  {d8-d9}, [r2, : 128]
 add  r2, sp, #528
 vld1.8  {d8-d9}, [r2, : 128]
 vmlal.s32 q7, d24, d9
 vmlal.s32 q7, d25, d31
 vmull.s32 q1, d18, d2
 vmlal.s32 q1, d19, d1
 vmlal.s32 q1, d22, d0
 vmlal.s32 q1, d24, d27
 vmlal.s32 q1, d23, d20
 vmlal.s32 q1, d12, d7
 vmlal.s32 q1, d13, d6
 vmull.s32 q6, d18, d1
 vmlal.s32 q6, d19, d0
 vmlal.s32 q6, d23, d27
 vmlal.s32 q6, d22, d20
 vmlal.s32 q6, d24, d26
 vmull.s32 q0, d18, d0
 vmlal.s32 q0, d22, d27
 vmlal.s32 q0, d23, d26
 vmlal.s32 q0, d24, d31
 vmlal.s32 q0, d19, d20
 add  r2, sp, #608
 vld1.8  {d18-d19}, [r2, : 128]
 vmlal.s32 q2, d18, d7
 vmlal.s32 q5, d18, d6
 vmlal.s32 q1, d18, d21
 vmlal.s32 q0, d18, d28
 vmlal.s32 q6, d18, d29
 vmlal.s32 q2, d19, d6
 vmlal.s32 q5, d19, d21
 vmlal.s32 q1, d19, d29
 vmlal.s32 q0, d19, d9
 vmlal.s32 q6, d19, d28
 add  r2, sp, #560
 vld1.8  {d18-d19}, [r2, : 128]
 add  r2, sp, #480
 vld1.8  {d22-d23}, [r2, : 128]
 vmlal.s32 q5, d19, d7
 vmlal.s32 q0, d18, d21
 vmlal.s32 q0, d19, d29
 vmlal.s32 q6, d18, d6
 add  r2, sp, #496
 vld1.8  {d6-d7}, [r2, : 128]
 vmlal.s32 q6, d19, d21
 add  r2, sp, #544
 vld1.8  {d18-d19}, [r2, : 128]
 vmlal.s32 q0, d30, d8
 add  r2, sp, #640
 vld1.8  {d20-d21}, [r2, : 128]
 vmlal.s32 q5, d30, d29
 add  r2, sp, #576
 vld1.8  {d24-d25}, [r2, : 128]
 vmlal.s32 q1, d30, d28
 vadd.i64 q13, q0, q11
 vadd.i64 q14, q5, q11
 vmlal.s32 q6, d30, d9
 vshr.s64 q4, q13, #26
 vshr.s64 q13, q14, #26
 vadd.i64 q7, q7, q4
 vshl.i64 q4, q4, #26
 vadd.i64 q14, q7, q3
 vadd.i64 q9, q9, q13
 vshl.i64 q13, q13, #26
 vadd.i64 q15, q9, q3
 vsub.i64 q0, q0, q4
 vshr.s64 q4, q14, #25
 vsub.i64 q5, q5, q13
 vshr.s64 q13, q15, #25
 vadd.i64 q6, q6, q4
 vshl.i64 q4, q4, #25
 vadd.i64 q14, q6, q11
 vadd.i64 q2, q2, q13
 vsub.i64 q4, q7, q4
 vshr.s64 q7, q14, #26
 vshl.i64 q13, q13, #25
 vadd.i64 q14, q2, q11
 vadd.i64 q8, q8, q7
 vshl.i64 q7, q7, #26
 vadd.i64 q15, q8, q3
 vsub.i64 q9, q9, q13
 vshr.s64 q13, q14, #26
 vsub.i64 q6, q6, q7
 vshr.s64 q7, q15, #25
 vadd.i64 q10, q10, q13
 vshl.i64 q13, q13, #26
 vadd.i64 q14, q10, q3
 vadd.i64 q1, q1, q7
 add  r2, r3, #144
 vshl.i64 q7, q7, #25
 add  r4, r3, #96
 vadd.i64 q15, q1, q11
 add  r2, r2, #8
 vsub.i64 q2, q2, q13
 add  r4, r4, #8
 vshr.s64 q13, q14, #25
 vsub.i64 q7, q8, q7
 vshr.s64 q8, q15, #26
 vadd.i64 q14, q13, q13
 vadd.i64 q12, q12, q8
 vtrn.32  d12, d14
 vshl.i64 q8, q8, #26
 vtrn.32  d13, d15
 vadd.i64 q3, q12, q3
 vadd.i64 q0, q0, q14
 vst1.8  d12, [r2, : 64]!
 vshl.i64 q7, q13, #4
 vst1.8  d13, [r4, : 64]!
 vsub.i64 q1, q1, q8
 vshr.s64 q3, q3, #25
 vadd.i64 q0, q0, q7
 vadd.i64 q5, q5, q3
 vshl.i64 q3, q3, #25
 vadd.i64 q6, q5, q11
 vadd.i64 q0, q0, q13
 vshl.i64 q7, q13, #25
 vadd.i64 q8, q0, q11
 vsub.i64 q3, q12, q3
 vshr.s64 q6, q6, #26
 vsub.i64 q7, q10, q7
 vtrn.32  d2, d6
 vshr.s64 q8, q8, #26
 vtrn.32  d3, d7
 vadd.i64 q3, q9, q6
 vst1.8  d2, [r2, : 64]
 vshl.i64 q6, q6, #26
 vst1.8  d3, [r4, : 64]
 vadd.i64 q1, q4, q8
 vtrn.32  d4, d14
 vshl.i64 q4, q8, #26
 vtrn.32  d5, d15
 vsub.i64 q5, q5, q6
 add  r2, r2, #16
 vsub.i64 q0, q0, q4
 vst1.8  d4, [r2, : 64]
 add  r4, r4, #16
 vst1.8  d5, [r4, : 64]
 vtrn.32  d10, d6
 vtrn.32  d11, d7
 sub  r2, r2, #8
 sub  r4, r4, #8
 vtrn.32  d0, d2
 vtrn.32  d1, d3
 vst1.8  d10, [r2, : 64]
 vst1.8  d11, [r4, : 64]
 sub  r2, r2, #24
 sub  r4, r4, #24
 vst1.8  d0, [r2, : 64]
 vst1.8  d1, [r4, : 64]
 add  r2, r3, #288
 add  r4, r3, #336
 vld1.8  {d0-d1}, [r2, : 128]!
 vld1.8  {d2-d3}, [r4, : 128]!
 vsub.i32 q0, q0, q1
 vld1.8  {d2-d3}, [r2, : 128]!
 vld1.8  {d4-d5}, [r4, : 128]!
 vsub.i32 q1, q1, q2
 add  r5, r3, #240
 vld1.8  {d4}, [r2, : 64]
 vld1.8  {d6}, [r4, : 64]
 vsub.i32 q2, q2, q3
 vst1.8  {d0-d1}, [r5, : 128]!
 vst1.8  {d2-d3}, [r5, : 128]!
 vst1.8  d4, [r5, : 64]
 add  r2, r3, #144
 add  r4, r3, #96
 add  r5, r3, #144
 add  r6, r3, #192
 vld1.8  {d0-d1}, [r2, : 128]!
 vld1.8  {d2-d3}, [r4, : 128]!
 vsub.i32 q2, q0, q1
 vadd.i32 q0, q0, q1
 vld1.8  {d2-d3}, [r2, : 128]!
 vld1.8  {d6-d7}, [r4, : 128]!
 vsub.i32 q4, q1, q3
 vadd.i32 q1, q1, q3
 vld1.8  {d6}, [r2, : 64]
 vld1.8  {d10}, [r4, : 64]
 vsub.i32 q6, q3, q5
 vadd.i32 q3, q3, q5
 vst1.8  {d4-d5}, [r5, : 128]!
 vst1.8  {d0-d1}, [r6, : 128]!
 vst1.8  {d8-d9}, [r5, : 128]!
 vst1.8  {d2-d3}, [r6, : 128]!
 vst1.8  d12, [r5, : 64]
 vst1.8  d6, [r6, : 64]
 add  r2, r3, #0
 add  r4, r3, #240
 vld1.8  {d0-d1}, [r4, : 128]!
 vld1.8  {d2-d3}, [r4, : 128]!
 vld1.8  {d4}, [r4, : 64]
 add  r4, r3, #336
 vld1.8  {d6-d7}, [r4, : 128]!
 vtrn.32  q0, q3
 vld1.8  {d8-d9}, [r4, : 128]!
 vshl.i32 q5, q0, #4
 vtrn.32  q1, q4
 vshl.i32 q6, q3, #4
 vadd.i32 q5, q5, q0
 vadd.i32 q6, q6, q3
 vshl.i32 q7, q1, #4
 vld1.8  {d5}, [r4, : 64]
 vshl.i32 q8, q4, #4
 vtrn.32  d4, d5
 vadd.i32 q7, q7, q1
 vadd.i32 q8, q8, q4
 vld1.8  {d18-d19}, [r2, : 128]!
 vshl.i32 q10, q2, #4
 vld1.8  {d22-d23}, [r2, : 128]!
 vadd.i32 q10, q10, q2
 vld1.8  {d24}, [r2, : 64]
 vadd.i32 q5, q5, q0
 add  r2, r3, #288
 vld1.8  {d26-d27}, [r2, : 128]!
 vadd.i32 q6, q6, q3
 vld1.8  {d28-d29}, [r2, : 128]!
 vadd.i32 q8, q8, q4
 vld1.8  {d25}, [r2, : 64]
 vadd.i32 q10, q10, q2
 vtrn.32  q9, q13
 vadd.i32 q7, q7, q1
 vadd.i32 q5, q5, q0
 vtrn.32  q11, q14
 vadd.i32 q6, q6, q3
 add  r2, sp, #528
 vadd.i32 q10, q10, q2
 vtrn.32  d24, d25
 vst1.8  {d12-d13}, [r2, : 128]!
 vshl.i32 q6, q13, #1
 vst1.8  {d20-d21}, [r2, : 128]!
 vshl.i32 q10, q14, #1
 vst1.8  {d12-d13}, [r2, : 128]!
 vshl.i32 q15, q12, #1
 vadd.i32 q8, q8, q4
 vext.32  d10, d31, d30, #0
 vadd.i32 q7, q7, q1
 vst1.8  {d16-d17}, [r2, : 128]!
 vmull.s32 q8, d18, d5
 vmlal.s32 q8, d26, d4
 vmlal.s32 q8, d19, d9
 vmlal.s32 q8, d27, d3
 vmlal.s32 q8, d22, d8
 vmlal.s32 q8, d28, d2
 vmlal.s32 q8, d23, d7
 vmlal.s32 q8, d29, d1
 vmlal.s32 q8, d24, d6
 vmlal.s32 q8, d25, d0
 vst1.8  {d14-d15}, [r2, : 128]!
 vmull.s32 q2, d18, d4
 vmlal.s32 q2, d12, d9
 vmlal.s32 q2, d13, d8
 vmlal.s32 q2, d19, d3
 vmlal.s32 q2, d22, d2
 vmlal.s32 q2, d23, d1
 vmlal.s32 q2, d24, d0
 vst1.8  {d20-d21}, [r2, : 128]!
 vmull.s32 q7, d18, d9
 vmlal.s32 q7, d26, d3
 vmlal.s32 q7, d19, d8
 vmlal.s32 q7, d27, d2
 vmlal.s32 q7, d22, d7
 vmlal.s32 q7, d28, d1
 vmlal.s32 q7, d23, d6
 vmlal.s32 q7, d29, d0
 vst1.8  {d10-d11}, [r2, : 128]!
 vmull.s32 q5, d18, d3
 vmlal.s32 q5, d19, d2
 vmlal.s32 q5, d22, d1
 vmlal.s32 q5, d23, d0
 vmlal.s32 q5, d12, d8
 vst1.8  {d16-d17}, [r2, : 128]!
 vmull.s32 q4, d18, d8
 vmlal.s32 q4, d26, d2
 vmlal.s32 q4, d19, d7
 vmlal.s32 q4, d27, d1
 vmlal.s32 q4, d22, d6
 vmlal.s32 q4, d28, d0
 vmull.s32 q8, d18, d7
 vmlal.s32 q8, d26, d1
 vmlal.s32 q8, d19, d6
 vmlal.s32 q8, d27, d0
 add  r2, sp, #544
 vld1.8  {d20-d21}, [r2, : 128]
 vmlal.s32 q7, d24, d21
 vmlal.s32 q7, d25, d20
 vmlal.s32 q4, d23, d21
 vmlal.s32 q4, d29, d20
 vmlal.s32 q8, d22, d21
 vmlal.s32 q8, d28, d20
 vmlal.s32 q5, d24, d20
 vst1.8  {d14-d15}, [r2, : 128]
 vmull.s32 q7, d18, d6
 vmlal.s32 q7, d26, d0
 add  r2, sp, #624
 vld1.8  {d30-d31}, [r2, : 128]
 vmlal.s32 q2, d30, d21
 vmlal.s32 q7, d19, d21
 vmlal.s32 q7, d27, d20
 add  r2, sp, #592
 vld1.8  {d26-d27}, [r2, : 128]
 vmlal.s32 q4, d25, d27
 vmlal.s32 q8, d29, d27
 vmlal.s32 q8, d25, d26
 vmlal.s32 q7, d28, d27
 vmlal.s32 q7, d29, d26
 add  r2, sp, #576
 vld1.8  {d28-d29}, [r2, : 128]
 vmlal.s32 q4, d24, d29
 vmlal.s32 q8, d23, d29
 vmlal.s32 q8, d24, d28
 vmlal.s32 q7, d22, d29
 vmlal.s32 q7, d23, d28
 vst1.8  {d8-d9}, [r2, : 128]
 add  r2, sp, #528
 vld1.8  {d8-d9}, [r2, : 128]
 vmlal.s32 q7, d24, d9
 vmlal.s32 q7, d25, d31
 vmull.s32 q1, d18, d2
 vmlal.s32 q1, d19, d1
 vmlal.s32 q1, d22, d0
 vmlal.s32 q1, d24, d27
 vmlal.s32 q1, d23, d20
 vmlal.s32 q1, d12, d7
 vmlal.s32 q1, d13, d6
 vmull.s32 q6, d18, d1
 vmlal.s32 q6, d19, d0
 vmlal.s32 q6, d23, d27
 vmlal.s32 q6, d22, d20
 vmlal.s32 q6, d24, d26
 vmull.s32 q0, d18, d0
 vmlal.s32 q0, d22, d27
 vmlal.s32 q0, d23, d26
 vmlal.s32 q0, d24, d31
 vmlal.s32 q0, d19, d20
 add  r2, sp, #608
 vld1.8  {d18-d19}, [r2, : 128]
 vmlal.s32 q2, d18, d7
 vmlal.s32 q5, d18, d6
 vmlal.s32 q1, d18, d21
 vmlal.s32 q0, d18, d28
 vmlal.s32 q6, d18, d29
 vmlal.s32 q2, d19, d6
 vmlal.s32 q5, d19, d21
 vmlal.s32 q1, d19, d29
 vmlal.s32 q0, d19, d9
 vmlal.s32 q6, d19, d28
 add  r2, sp, #560
 vld1.8  {d18-d19}, [r2, : 128]
 add  r2, sp, #480
 vld1.8  {d22-d23}, [r2, : 128]
 vmlal.s32 q5, d19, d7
 vmlal.s32 q0, d18, d21
 vmlal.s32 q0, d19, d29
 vmlal.s32 q6, d18, d6
 add  r2, sp, #496
 vld1.8  {d6-d7}, [r2, : 128]
 vmlal.s32 q6, d19, d21
 add  r2, sp, #544
 vld1.8  {d18-d19}, [r2, : 128]
 vmlal.s32 q0, d30, d8
 add  r2, sp, #640
 vld1.8  {d20-d21}, [r2, : 128]
 vmlal.s32 q5, d30, d29
 add  r2, sp, #576
 vld1.8  {d24-d25}, [r2, : 128]
 vmlal.s32 q1, d30, d28
 vadd.i64 q13, q0, q11
 vadd.i64 q14, q5, q11
 vmlal.s32 q6, d30, d9
 vshr.s64 q4, q13, #26
 vshr.s64 q13, q14, #26
 vadd.i64 q7, q7, q4
 vshl.i64 q4, q4, #26
 vadd.i64 q14, q7, q3
 vadd.i64 q9, q9, q13
 vshl.i64 q13, q13, #26
 vadd.i64 q15, q9, q3
 vsub.i64 q0, q0, q4
 vshr.s64 q4, q14, #25
 vsub.i64 q5, q5, q13
 vshr.s64 q13, q15, #25
 vadd.i64 q6, q6, q4
 vshl.i64 q4, q4, #25
 vadd.i64 q14, q6, q11
 vadd.i64 q2, q2, q13
 vsub.i64 q4, q7, q4
 vshr.s64 q7, q14, #26
 vshl.i64 q13, q13, #25
 vadd.i64 q14, q2, q11
 vadd.i64 q8, q8, q7
 vshl.i64 q7, q7, #26
 vadd.i64 q15, q8, q3
 vsub.i64 q9, q9, q13
 vshr.s64 q13, q14, #26
 vsub.i64 q6, q6, q7
 vshr.s64 q7, q15, #25
 vadd.i64 q10, q10, q13
 vshl.i64 q13, q13, #26
 vadd.i64 q14, q10, q3
 vadd.i64 q1, q1, q7
 add  r2, r3, #288
 vshl.i64 q7, q7, #25
 add  r4, r3, #96
 vadd.i64 q15, q1, q11
 add  r2, r2, #8
 vsub.i64 q2, q2, q13
 add  r4, r4, #8
 vshr.s64 q13, q14, #25
 vsub.i64 q7, q8, q7
 vshr.s64 q8, q15, #26
 vadd.i64 q14, q13, q13
 vadd.i64 q12, q12, q8
 vtrn.32  d12, d14
 vshl.i64 q8, q8, #26
 vtrn.32  d13, d15
 vadd.i64 q3, q12, q3
 vadd.i64 q0, q0, q14
 vst1.8  d12, [r2, : 64]!
 vshl.i64 q7, q13, #4
 vst1.8  d13, [r4, : 64]!
 vsub.i64 q1, q1, q8
 vshr.s64 q3, q3, #25
 vadd.i64 q0, q0, q7
 vadd.i64 q5, q5, q3
 vshl.i64 q3, q3, #25
 vadd.i64 q6, q5, q11
 vadd.i64 q0, q0, q13
 vshl.i64 q7, q13, #25
 vadd.i64 q8, q0, q11
 vsub.i64 q3, q12, q3
 vshr.s64 q6, q6, #26
 vsub.i64 q7, q10, q7
 vtrn.32  d2, d6
 vshr.s64 q8, q8, #26
 vtrn.32  d3, d7
 vadd.i64 q3, q9, q6
 vst1.8  d2, [r2, : 64]
 vshl.i64 q6, q6, #26
 vst1.8  d3, [r4, : 64]
 vadd.i64 q1, q4, q8
 vtrn.32  d4, d14
 vshl.i64 q4, q8, #26
 vtrn.32  d5, d15
 vsub.i64 q5, q5, q6
 add  r2, r2, #16
 vsub.i64 q0, q0, q4
 vst1.8  d4, [r2, : 64]
 add  r4, r4, #16
 vst1.8  d5, [r4, : 64]
 vtrn.32  d10, d6
 vtrn.32  d11, d7
 sub  r2, r2, #8
 sub  r4, r4, #8
 vtrn.32  d0, d2
 vtrn.32  d1, d3
 vst1.8  d10, [r2, : 64]
 vst1.8  d11, [r4, : 64]
 sub  r2, r2, #24
 sub  r4, r4, #24
 vst1.8  d0, [r2, : 64]
 vst1.8  d1, [r4, : 64]
 add  r2, sp, #512
 add  r4, r3, #144
 add  r5, r3, #192
 vld1.8  {d0-d1}, [r2, : 128]
 vld1.8  {d2-d3}, [r4, : 128]!
 vld1.8  {d4-d5}, [r5, : 128]!
 vzip.i32 q1, q2
 vld1.8  {d6-d7}, [r4, : 128]!
 vld1.8  {d8-d9}, [r5, : 128]!
 vshl.i32 q5, q1, #1
 vzip.i32 q3, q4
 vshl.i32 q6, q2, #1
 vld1.8  {d14}, [r4, : 64]
 vshl.i32 q8, q3, #1
 vld1.8  {d15}, [r5, : 64]
 vshl.i32 q9, q4, #1
 vmul.i32 d21, d7, d1
 vtrn.32  d14, d15
 vmul.i32 q11, q4, q0
 vmul.i32 q0, q7, q0
 vmull.s32 q12, d2, d2
 vmlal.s32 q12, d11, d1
 vmlal.s32 q12, d12, d0
 vmlal.s32 q12, d13, d23
 vmlal.s32 q12, d16, d22
 vmlal.s32 q12, d7, d21
 vmull.s32 q10, d2, d11
 vmlal.s32 q10, d4, d1
 vmlal.s32 q10, d13, d0
 vmlal.s32 q10, d6, d23
 vmlal.s32 q10, d17, d22
 vmull.s32 q13, d10, d4
 vmlal.s32 q13, d11, d3
 vmlal.s32 q13, d13, d1
 vmlal.s32 q13, d16, d0
 vmlal.s32 q13, d17, d23
 vmlal.s32 q13, d8, d22
 vmull.s32 q1, d10, d5
 vmlal.s32 q1, d11, d4
 vmlal.s32 q1, d6, d1
 vmlal.s32 q1, d17, d0
 vmlal.s32 q1, d8, d23
 vmull.s32 q14, d10, d6
 vmlal.s32 q14, d11, d13
 vmlal.s32 q14, d4, d4
 vmlal.s32 q14, d17, d1
 vmlal.s32 q14, d18, d0
 vmlal.s32 q14, d9, d23
 vmull.s32 q11, d10, d7
 vmlal.s32 q11, d11, d6
 vmlal.s32 q11, d12, d5
 vmlal.s32 q11, d8, d1
 vmlal.s32 q11, d19, d0
 vmull.s32 q15, d10, d8
 vmlal.s32 q15, d11, d17
 vmlal.s32 q15, d12, d6
 vmlal.s32 q15, d13, d5
 vmlal.s32 q15, d19, d1
 vmlal.s32 q15, d14, d0
 vmull.s32 q2, d10, d9
 vmlal.s32 q2, d11, d8
 vmlal.s32 q2, d12, d7
 vmlal.s32 q2, d13, d6
 vmlal.s32 q2, d14, d1
 vmull.s32 q0, d15, d1
 vmlal.s32 q0, d10, d14
 vmlal.s32 q0, d11, d19
 vmlal.s32 q0, d12, d8
 vmlal.s32 q0, d13, d17
 vmlal.s32 q0, d6, d6
 add  r2, sp, #480
 vld1.8  {d18-d19}, [r2, : 128]!
 vmull.s32 q3, d16, d7
 vmlal.s32 q3, d10, d15
 vmlal.s32 q3, d11, d14
 vmlal.s32 q3, d12, d9
 vmlal.s32 q3, d13, d8
 vld1.8  {d8-d9}, [r2, : 128]
 vadd.i64 q5, q12, q9
 vadd.i64 q6, q15, q9
 vshr.s64 q5, q5, #26
 vshr.s64 q6, q6, #26
 vadd.i64 q7, q10, q5
 vshl.i64 q5, q5, #26
 vadd.i64 q8, q7, q4
 vadd.i64 q2, q2, q6
 vshl.i64 q6, q6, #26
 vadd.i64 q10, q2, q4
 vsub.i64 q5, q12, q5
 vshr.s64 q8, q8, #25
 vsub.i64 q6, q15, q6
 vshr.s64 q10, q10, #25
 vadd.i64 q12, q13, q8
 vshl.i64 q8, q8, #25
 vadd.i64 q13, q12, q9
 vadd.i64 q0, q0, q10
 vsub.i64 q7, q7, q8
 vshr.s64 q8, q13, #26
 vshl.i64 q10, q10, #25
 vadd.i64 q13, q0, q9
 vadd.i64 q1, q1, q8
 vshl.i64 q8, q8, #26
 vadd.i64 q15, q1, q4
 vsub.i64 q2, q2, q10
 vshr.s64 q10, q13, #26
 vsub.i64 q8, q12, q8
 vshr.s64 q12, q15, #25
 vadd.i64 q3, q3, q10
 vshl.i64 q10, q10, #26
 vadd.i64 q13, q3, q4
 vadd.i64 q14, q14, q12
 add  r2, r3, #144
 vshl.i64 q12, q12, #25
 add  r4, r3, #192
 vadd.i64 q15, q14, q9
 add  r2, r2, #8
 vsub.i64 q0, q0, q10
 add  r4, r4, #8
 vshr.s64 q10, q13, #25
 vsub.i64 q1, q1, q12
 vshr.s64 q12, q15, #26
 vadd.i64 q13, q10, q10
 vadd.i64 q11, q11, q12
 vtrn.32  d16, d2
 vshl.i64 q12, q12, #26
 vtrn.32  d17, d3
 vadd.i64 q1, q11, q4
 vadd.i64 q4, q5, q13
 vst1.8  d16, [r2, : 64]!
 vshl.i64 q5, q10, #4
 vst1.8  d17, [r4, : 64]!
 vsub.i64 q8, q14, q12
 vshr.s64 q1, q1, #25
 vadd.i64 q4, q4, q5
 vadd.i64 q5, q6, q1
 vshl.i64 q1, q1, #25
 vadd.i64 q6, q5, q9
 vadd.i64 q4, q4, q10
 vshl.i64 q10, q10, #25
 vadd.i64 q9, q4, q9
 vsub.i64 q1, q11, q1
 vshr.s64 q6, q6, #26
 vsub.i64 q3, q3, q10
 vtrn.32  d16, d2
 vshr.s64 q9, q9, #26
 vtrn.32  d17, d3
 vadd.i64 q1, q2, q6
 vst1.8  d16, [r2, : 64]
 vshl.i64 q2, q6, #26
 vst1.8  d17, [r4, : 64]
 vadd.i64 q6, q7, q9
 vtrn.32  d0, d6
 vshl.i64 q7, q9, #26
 vtrn.32  d1, d7
 vsub.i64 q2, q5, q2
 add  r2, r2, #16
 vsub.i64 q3, q4, q7
 vst1.8  d0, [r2, : 64]
 add  r4, r4, #16
 vst1.8  d1, [r4, : 64]
 vtrn.32  d4, d2
 vtrn.32  d5, d3
 sub  r2, r2, #8
 sub  r4, r4, #8
 vtrn.32  d6, d12
 vtrn.32  d7, d13
 vst1.8  d4, [r2, : 64]
 vst1.8  d5, [r4, : 64]
 sub  r2, r2, #24
 sub  r4, r4, #24
 vst1.8  d6, [r2, : 64]
 vst1.8  d7, [r4, : 64]
 add  r2, r3, #336
 add  r4, r3, #288
 vld1.8  {d0-d1}, [r2, : 128]!
 vld1.8  {d2-d3}, [r4, : 128]!
 vadd.i32 q0, q0, q1
 vld1.8  {d2-d3}, [r2, : 128]!
 vld1.8  {d4-d5}, [r4, : 128]!
 vadd.i32 q1, q1, q2
 add  r5, r3, #288
 vld1.8  {d4}, [r2, : 64]
 vld1.8  {d6}, [r4, : 64]
 vadd.i32 q2, q2, q3
 vst1.8  {d0-d1}, [r5, : 128]!
 vst1.8  {d2-d3}, [r5, : 128]!
 vst1.8  d4, [r5, : 64]
 add  r2, r3, #48
 add  r4, r3, #144
 vld1.8  {d0-d1}, [r4, : 128]!
 vld1.8  {d2-d3}, [r4, : 128]!
 vld1.8  {d4}, [r4, : 64]
 add  r4, r3, #288
 vld1.8  {d6-d7}, [r4, : 128]!
 vtrn.32  q0, q3
 vld1.8  {d8-d9}, [r4, : 128]!
 vshl.i32 q5, q0, #4
 vtrn.32  q1, q4
 vshl.i32 q6, q3, #4
 vadd.i32 q5, q5, q0
 vadd.i32 q6, q6, q3
 vshl.i32 q7, q1, #4
 vld1.8  {d5}, [r4, : 64]
 vshl.i32 q8, q4, #4
 vtrn.32  d4, d5
 vadd.i32 q7, q7, q1
 vadd.i32 q8, q8, q4
 vld1.8  {d18-d19}, [r2, : 128]!
 vshl.i32 q10, q2, #4
 vld1.8  {d22-d23}, [r2, : 128]!
 vadd.i32 q10, q10, q2
 vld1.8  {d24}, [r2, : 64]
 vadd.i32 q5, q5, q0
 add  r2, r3, #240
 vld1.8  {d26-d27}, [r2, : 128]!
 vadd.i32 q6, q6, q3
 vld1.8  {d28-d29}, [r2, : 128]!
 vadd.i32 q8, q8, q4
 vld1.8  {d25}, [r2, : 64]
 vadd.i32 q10, q10, q2
 vtrn.32  q9, q13
 vadd.i32 q7, q7, q1
 vadd.i32 q5, q5, q0
 vtrn.32  q11, q14
 vadd.i32 q6, q6, q3
 add  r2, sp, #528
 vadd.i32 q10, q10, q2
 vtrn.32  d24, d25
 vst1.8  {d12-d13}, [r2, : 128]!
 vshl.i32 q6, q13, #1
 vst1.8  {d20-d21}, [r2, : 128]!
 vshl.i32 q10, q14, #1
 vst1.8  {d12-d13}, [r2, : 128]!
 vshl.i32 q15, q12, #1
 vadd.i32 q8, q8, q4
 vext.32  d10, d31, d30, #0
 vadd.i32 q7, q7, q1
 vst1.8  {d16-d17}, [r2, : 128]!
 vmull.s32 q8, d18, d5
 vmlal.s32 q8, d26, d4
 vmlal.s32 q8, d19, d9
 vmlal.s32 q8, d27, d3
 vmlal.s32 q8, d22, d8
 vmlal.s32 q8, d28, d2
 vmlal.s32 q8, d23, d7
 vmlal.s32 q8, d29, d1
 vmlal.s32 q8, d24, d6
 vmlal.s32 q8, d25, d0
 vst1.8  {d14-d15}, [r2, : 128]!
 vmull.s32 q2, d18, d4
 vmlal.s32 q2, d12, d9
 vmlal.s32 q2, d13, d8
 vmlal.s32 q2, d19, d3
 vmlal.s32 q2, d22, d2
 vmlal.s32 q2, d23, d1
 vmlal.s32 q2, d24, d0
 vst1.8  {d20-d21}, [r2, : 128]!
 vmull.s32 q7, d18, d9
 vmlal.s32 q7, d26, d3
 vmlal.s32 q7, d19, d8
 vmlal.s32 q7, d27, d2
 vmlal.s32 q7, d22, d7
 vmlal.s32 q7, d28, d1
 vmlal.s32 q7, d23, d6
 vmlal.s32 q7, d29, d0
 vst1.8  {d10-d11}, [r2, : 128]!
 vmull.s32 q5, d18, d3
 vmlal.s32 q5, d19, d2
 vmlal.s32 q5, d22, d1
 vmlal.s32 q5, d23, d0
 vmlal.s32 q5, d12, d8
 vst1.8  {d16-d17}, [r2, : 128]!
 vmull.s32 q4, d18, d8
 vmlal.s32 q4, d26, d2
 vmlal.s32 q4, d19, d7
 vmlal.s32 q4, d27, d1
 vmlal.s32 q4, d22, d6
 vmlal.s32 q4, d28, d0
 vmull.s32 q8, d18, d7
 vmlal.s32 q8, d26, d1
 vmlal.s32 q8, d19, d6
 vmlal.s32 q8, d27, d0
 add  r2, sp, #544
 vld1.8  {d20-d21}, [r2, : 128]
 vmlal.s32 q7, d24, d21
 vmlal.s32 q7, d25, d20
 vmlal.s32 q4, d23, d21
 vmlal.s32 q4, d29, d20
 vmlal.s32 q8, d22, d21
 vmlal.s32 q8, d28, d20
 vmlal.s32 q5, d24, d20
 vst1.8  {d14-d15}, [r2, : 128]
 vmull.s32 q7, d18, d6
 vmlal.s32 q7, d26, d0
 add  r2, sp, #624
 vld1.8  {d30-d31}, [r2, : 128]
 vmlal.s32 q2, d30, d21
 vmlal.s32 q7, d19, d21
 vmlal.s32 q7, d27, d20
 add  r2, sp, #592
 vld1.8  {d26-d27}, [r2, : 128]
 vmlal.s32 q4, d25, d27
 vmlal.s32 q8, d29, d27
 vmlal.s32 q8, d25, d26
 vmlal.s32 q7, d28, d27
 vmlal.s32 q7, d29, d26
 add  r2, sp, #576
 vld1.8  {d28-d29}, [r2, : 128]
 vmlal.s32 q4, d24, d29
 vmlal.s32 q8, d23, d29
 vmlal.s32 q8, d24, d28
 vmlal.s32 q7, d22, d29
 vmlal.s32 q7, d23, d28
 vst1.8  {d8-d9}, [r2, : 128]
 add  r2, sp, #528
 vld1.8  {d8-d9}, [r2, : 128]
 vmlal.s32 q7, d24, d9
 vmlal.s32 q7, d25, d31
 vmull.s32 q1, d18, d2
 vmlal.s32 q1, d19, d1
 vmlal.s32 q1, d22, d0
 vmlal.s32 q1, d24, d27
 vmlal.s32 q1, d23, d20
 vmlal.s32 q1, d12, d7
 vmlal.s32 q1, d13, d6
 vmull.s32 q6, d18, d1
 vmlal.s32 q6, d19, d0
 vmlal.s32 q6, d23, d27
 vmlal.s32 q6, d22, d20
 vmlal.s32 q6, d24, d26
 vmull.s32 q0, d18, d0
 vmlal.s32 q0, d22, d27
 vmlal.s32 q0, d23, d26
 vmlal.s32 q0, d24, d31
 vmlal.s32 q0, d19, d20
 add  r2, sp, #608
 vld1.8  {d18-d19}, [r2, : 128]
 vmlal.s32 q2, d18, d7
 vmlal.s32 q5, d18, d6
 vmlal.s32 q1, d18, d21
 vmlal.s32 q0, d18, d28
 vmlal.s32 q6, d18, d29
 vmlal.s32 q2, d19, d6
 vmlal.s32 q5, d19, d21
 vmlal.s32 q1, d19, d29
 vmlal.s32 q0, d19, d9
 vmlal.s32 q6, d19, d28
 add  r2, sp, #560
 vld1.8  {d18-d19}, [r2, : 128]
 add  r2, sp, #480
 vld1.8  {d22-d23}, [r2, : 128]
 vmlal.s32 q5, d19, d7
 vmlal.s32 q0, d18, d21
 vmlal.s32 q0, d19, d29
 vmlal.s32 q6, d18, d6
 add  r2, sp, #496
 vld1.8  {d6-d7}, [r2, : 128]
 vmlal.s32 q6, d19, d21
 add  r2, sp, #544
 vld1.8  {d18-d19}, [r2, : 128]
 vmlal.s32 q0, d30, d8
 add  r2, sp, #640
 vld1.8  {d20-d21}, [r2, : 128]
 vmlal.s32 q5, d30, d29
 add  r2, sp, #576
 vld1.8  {d24-d25}, [r2, : 128]
 vmlal.s32 q1, d30, d28
 vadd.i64 q13, q0, q11
 vadd.i64 q14, q5, q11
 vmlal.s32 q6, d30, d9
 vshr.s64 q4, q13, #26
 vshr.s64 q13, q14, #26
 vadd.i64 q7, q7, q4
 vshl.i64 q4, q4, #26
 vadd.i64 q14, q7, q3
 vadd.i64 q9, q9, q13
 vshl.i64 q13, q13, #26
 vadd.i64 q15, q9, q3
 vsub.i64 q0, q0, q4
 vshr.s64 q4, q14, #25
 vsub.i64 q5, q5, q13
 vshr.s64 q13, q15, #25
 vadd.i64 q6, q6, q4
 vshl.i64 q4, q4, #25
 vadd.i64 q14, q6, q11
 vadd.i64 q2, q2, q13
 vsub.i64 q4, q7, q4
 vshr.s64 q7, q14, #26
 vshl.i64 q13, q13, #25
 vadd.i64 q14, q2, q11
 vadd.i64 q8, q8, q7
 vshl.i64 q7, q7, #26
 vadd.i64 q15, q8, q3
 vsub.i64 q9, q9, q13
 vshr.s64 q13, q14, #26
 vsub.i64 q6, q6, q7
 vshr.s64 q7, q15, #25
 vadd.i64 q10, q10, q13
 vshl.i64 q13, q13, #26
 vadd.i64 q14, q10, q3
 vadd.i64 q1, q1, q7
 add  r2, r3, #240
 vshl.i64 q7, q7, #25
 add  r4, r3, #144
 vadd.i64 q15, q1, q11
 add  r2, r2, #8
 vsub.i64 q2, q2, q13
 add  r4, r4, #8
 vshr.s64 q13, q14, #25
 vsub.i64 q7, q8, q7
 vshr.s64 q8, q15, #26
 vadd.i64 q14, q13, q13
 vadd.i64 q12, q12, q8
 vtrn.32  d12, d14
 vshl.i64 q8, q8, #26
 vtrn.32  d13, d15
 vadd.i64 q3, q12, q3
 vadd.i64 q0, q0, q14
 vst1.8  d12, [r2, : 64]!
 vshl.i64 q7, q13, #4
 vst1.8  d13, [r4, : 64]!
 vsub.i64 q1, q1, q8
 vshr.s64 q3, q3, #25
 vadd.i64 q0, q0, q7
 vadd.i64 q5, q5, q3
 vshl.i64 q3, q3, #25
 vadd.i64 q6, q5, q11
 vadd.i64 q0, q0, q13
 vshl.i64 q7, q13, #25
 vadd.i64 q8, q0, q11
 vsub.i64 q3, q12, q3
 vshr.s64 q6, q6, #26
 vsub.i64 q7, q10, q7
 vtrn.32  d2, d6
 vshr.s64 q8, q8, #26
 vtrn.32  d3, d7
 vadd.i64 q3, q9, q6
 vst1.8  d2, [r2, : 64]
 vshl.i64 q6, q6, #26
 vst1.8  d3, [r4, : 64]
 vadd.i64 q1, q4, q8
 vtrn.32  d4, d14
 vshl.i64 q4, q8, #26
 vtrn.32  d5, d15
 vsub.i64 q5, q5, q6
 add  r2, r2, #16
 vsub.i64 q0, q0, q4
 vst1.8  d4, [r2, : 64]
 add  r4, r4, #16
 vst1.8  d5, [r4, : 64]
 vtrn.32  d10, d6
 vtrn.32  d11, d7
 sub  r2, r2, #8
 sub  r4, r4, #8
 vtrn.32  d0, d2
 vtrn.32  d1, d3
 vst1.8  d10, [r2, : 64]
 vst1.8  d11, [r4, : 64]
 sub  r2, r2, #24
 sub  r4, r4, #24
 vst1.8  d0, [r2, : 64]
 vst1.8  d1, [r4, : 64]
 ldr  r2, [sp, #456]
 ldr  r4, [sp, #460]
 subs  r5, r2, #1
 bge  .Lmainloop
 add  r1, r3, #144
 add  r2, r3, #336
 vld1.8  {d0-d1}, [r1, : 128]!
 vld1.8  {d2-d3}, [r1, : 128]!
 vld1.8  {d4}, [r1, : 64]
 vst1.8  {d0-d1}, [r2, : 128]!
 vst1.8  {d2-d3}, [r2, : 128]!
 vst1.8  d4, [r2, : 64]
 movw  r1, #0
.Linvertloop:
 add  r2, r3, #144
 movw  r4, #0
 movw  r5, #2
 cmp  r1, #1
 moveq  r5, #1
 addeq  r2, r3, #336
 addeq  r4, r3, #48
 cmp  r1, #2
 moveq  r5, #1
 addeq  r2, r3, #48
 cmp  r1, #3
 moveq  r5, #5
 addeq  r4, r3, #336
 cmp  r1, #4
 moveq  r5, #10
 cmp  r1, #5
 moveq  r5, #20
 cmp  r1, #6
 moveq  r5, #10
 addeq  r2, r3, #336
 addeq  r4, r3, #336
 cmp  r1, #7
 moveq  r5, #50
 cmp  r1, #8
 moveq  r5, #100
 cmp  r1, #9
 moveq  r5, #50
 addeq  r2, r3, #336
 cmp  r1, #10
 moveq  r5, #5
 addeq  r2, r3, #48
 cmp  r1, #11
 moveq  r5, #0
 addeq  r2, r3, #96
 add  r6, r3, #144
 add  r7, r3, #288
 vld1.8  {d0-d1}, [r6, : 128]!
 vld1.8  {d2-d3}, [r6, : 128]!
 vld1.8  {d4}, [r6, : 64]
 vst1.8  {d0-d1}, [r7, : 128]!
 vst1.8  {d2-d3}, [r7, : 128]!
 vst1.8  d4, [r7, : 64]
 cmp  r5, #0
 beq  .Lskipsquaringloop
.Lsquaringloop:
 add  r6, r3, #288
 add  r7, r3, #288
 add  r8, r3, #288
 vmov.i32 q0, #19
 vmov.i32 q1, #0
 vmov.i32 q2, #1
 vzip.i32 q1, q2
 vld1.8  {d4-d5}, [r7, : 128]!
 vld1.8  {d6-d7}, [r7, : 128]!
 vld1.8  {d9}, [r7, : 64]
 vld1.8  {d10-d11}, [r6, : 128]!
 add  r7, sp, #384
 vld1.8  {d12-d13}, [r6, : 128]!
 vmul.i32 q7, q2, q0
 vld1.8  {d8}, [r6, : 64]
 vext.32  d17, d11, d10, #1
 vmul.i32 q9, q3, q0
 vext.32  d16, d10, d8, #1
 vshl.u32 q10, q5, q1
 vext.32  d22, d14, d4, #1
 vext.32  d24, d18, d6, #1
 vshl.u32 q13, q6, q1
 vshl.u32 d28, d8, d2
 vrev64.i32 d22, d22
 vmul.i32 d1, d9, d1
 vrev64.i32 d24, d24
 vext.32  d29, d8, d13, #1
 vext.32  d0, d1, d9, #1
 vrev64.i32 d0, d0
 vext.32  d2, d9, d1, #1
 vext.32  d23, d15, d5, #1
 vmull.s32 q4, d20, d4
 vrev64.i32 d23, d23
 vmlal.s32 q4, d21, d1
 vrev64.i32 d2, d2
 vmlal.s32 q4, d26, d19
 vext.32  d3, d5, d15, #1
 vmlal.s32 q4, d27, d18
 vrev64.i32 d3, d3
 vmlal.s32 q4, d28, d15
 vext.32  d14, d12, d11, #1
 vmull.s32 q5, d16, d23
 vext.32  d15, d13, d12, #1
 vmlal.s32 q5, d17, d4
 vst1.8  d8, [r7, : 64]!
 vmlal.s32 q5, d14, d1
 vext.32  d12, d9, d8, #0
 vmlal.s32 q5, d15, d19
 vmov.i64 d13, #0
 vmlal.s32 q5, d29, d18
 vext.32  d25, d19, d7, #1
 vmlal.s32 q6, d20, d5
 vrev64.i32 d25, d25
 vmlal.s32 q6, d21, d4
 vst1.8  d11, [r7, : 64]!
 vmlal.s32 q6, d26, d1
 vext.32  d9, d10, d10, #0
 vmlal.s32 q6, d27, d19
 vmov.i64 d8, #0
 vmlal.s32 q6, d28, d18
 vmlal.s32 q4, d16, d24
 vmlal.s32 q4, d17, d5
 vmlal.s32 q4, d14, d4
 vst1.8  d12, [r7, : 64]!
 vmlal.s32 q4, d15, d1
 vext.32  d10, d13, d12, #0
 vmlal.s32 q4, d29, d19
 vmov.i64 d11, #0
 vmlal.s32 q5, d20, d6
 vmlal.s32 q5, d21, d5
 vmlal.s32 q5, d26, d4
 vext.32  d13, d8, d8, #0
 vmlal.s32 q5, d27, d1
 vmov.i64 d12, #0
 vmlal.s32 q5, d28, d19
 vst1.8  d9, [r7, : 64]!
 vmlal.s32 q6, d16, d25
 vmlal.s32 q6, d17, d6
 vst1.8  d10, [r7, : 64]
 vmlal.s32 q6, d14, d5
 vext.32  d8, d11, d10, #0
 vmlal.s32 q6, d15, d4
 vmov.i64 d9, #0
 vmlal.s32 q6, d29, d1
 vmlal.s32 q4, d20, d7
 vmlal.s32 q4, d21, d6
 vmlal.s32 q4, d26, d5
 vext.32  d11, d12, d12, #0
 vmlal.s32 q4, d27, d4
 vmov.i64 d10, #0
 vmlal.s32 q4, d28, d1
 vmlal.s32 q5, d16, d0
 sub  r6, r7, #32
 vmlal.s32 q5, d17, d7
 vmlal.s32 q5, d14, d6
 vext.32  d30, d9, d8, #0
 vmlal.s32 q5, d15, d5
 vld1.8  {d31}, [r6, : 64]!
 vmlal.s32 q5, d29, d4
 vmlal.s32 q15, d20, d0
 vext.32  d0, d6, d18, #1
 vmlal.s32 q15, d21, d25
 vrev64.i32 d0, d0
 vmlal.s32 q15, d26, d24
 vext.32  d1, d7, d19, #1
 vext.32  d7, d10, d10, #0
 vmlal.s32 q15, d27, d23
 vrev64.i32 d1, d1
 vld1.8  {d6}, [r6, : 64]
 vmlal.s32 q15, d28, d22
 vmlal.s32 q3, d16, d4
 add  r6, r6, #24
 vmlal.s32 q3, d17, d2
 vext.32  d4, d31, d30, #0
 vmov  d17, d11
 vmlal.s32 q3, d14, d1
 vext.32  d11, d13, d13, #0
 vext.32  d13, d30, d30, #0
 vmlal.s32 q3, d15, d0
 vext.32  d1, d8, d8, #0
 vmlal.s32 q3, d29, d3
 vld1.8  {d5}, [r6, : 64]
 sub  r6, r6, #16
 vext.32  d10, d6, d6, #0
 vmov.i32 q1, #0xffffffff
 vshl.i64 q4, q1, #25
 add  r7, sp, #480
 vld1.8  {d14-d15}, [r7, : 128]
 vadd.i64 q9, q2, q7
 vshl.i64 q1, q1, #26
 vshr.s64 q10, q9, #26
 vld1.8  {d0}, [r6, : 64]!
 vadd.i64 q5, q5, q10
 vand  q9, q9, q1
 vld1.8  {d16}, [r6, : 64]!
 add  r6, sp, #496
 vld1.8  {d20-d21}, [r6, : 128]
 vadd.i64 q11, q5, q10
 vsub.i64 q2, q2, q9
 vshr.s64 q9, q11, #25
 vext.32  d12, d5, d4, #0
 vand  q11, q11, q4
 vadd.i64 q0, q0, q9
 vmov  d19, d7
 vadd.i64 q3, q0, q7
 vsub.i64 q5, q5, q11
 vshr.s64 q11, q3, #26
 vext.32  d18, d11, d10, #0
 vand  q3, q3, q1
 vadd.i64 q8, q8, q11
 vadd.i64 q11, q8, q10
 vsub.i64 q0, q0, q3
 vshr.s64 q3, q11, #25
 vand  q11, q11, q4
 vadd.i64 q3, q6, q3
 vadd.i64 q6, q3, q7
 vsub.i64 q8, q8, q11
 vshr.s64 q11, q6, #26
 vand  q6, q6, q1
 vadd.i64 q9, q9, q11
 vadd.i64 d25, d19, d21
 vsub.i64 q3, q3, q6
 vshr.s64 d23, d25, #25
 vand  q4, q12, q4
 vadd.i64 d21, d23, d23
 vshl.i64 d25, d23, #4
 vadd.i64 d21, d21, d23
 vadd.i64 d25, d25, d21
 vadd.i64 d4, d4, d25
 vzip.i32 q0, q8
 vadd.i64 d12, d4, d14
 add  r6, r8, #8
 vst1.8  d0, [r6, : 64]
 vsub.i64 d19, d19, d9
 add  r6, r6, #16
 vst1.8  d16, [r6, : 64]
 vshr.s64 d22, d12, #26
 vand  q0, q6, q1
 vadd.i64 d10, d10, d22
 vzip.i32 q3, q9
 vsub.i64 d4, d4, d0
 sub  r6, r6, #8
 vst1.8  d6, [r6, : 64]
 add  r6, r6, #16
 vst1.8  d18, [r6, : 64]
 vzip.i32 q2, q5
 sub  r6, r6, #32
 vst1.8  d4, [r6, : 64]
 subs  r5, r5, #1
 bhi  .Lsquaringloop
.Lskipsquaringloop:
 mov  r2, r2
 add  r5, r3, #288
 add  r6, r3, #144
 vmov.i32 q0, #19
 vmov.i32 q1, #0
 vmov.i32 q2, #1
 vzip.i32 q1, q2
 vld1.8  {d4-d5}, [r5, : 128]!
 vld1.8  {d6-d7}, [r5, : 128]!
 vld1.8  {d9}, [r5, : 64]
 vld1.8  {d10-d11}, [r2, : 128]!
 add  r5, sp, #384
 vld1.8  {d12-d13}, [r2, : 128]!
 vmul.i32 q7, q2, q0
 vld1.8  {d8}, [r2, : 64]
 vext.32  d17, d11, d10, #1
 vmul.i32 q9, q3, q0
 vext.32  d16, d10, d8, #1
 vshl.u32 q10, q5, q1
 vext.32  d22, d14, d4, #1
 vext.32  d24, d18, d6, #1
 vshl.u32 q13, q6, q1
 vshl.u32 d28, d8, d2
 vrev64.i32 d22, d22
 vmul.i32 d1, d9, d1
 vrev64.i32 d24, d24
 vext.32  d29, d8, d13, #1
 vext.32  d0, d1, d9, #1
 vrev64.i32 d0, d0
 vext.32  d2, d9, d1, #1
 vext.32  d23, d15, d5, #1
 vmull.s32 q4, d20, d4
 vrev64.i32 d23, d23
 vmlal.s32 q4, d21, d1
 vrev64.i32 d2, d2
 vmlal.s32 q4, d26, d19
 vext.32  d3, d5, d15, #1
 vmlal.s32 q4, d27, d18
 vrev64.i32 d3, d3
 vmlal.s32 q4, d28, d15
 vext.32  d14, d12, d11, #1
 vmull.s32 q5, d16, d23
 vext.32  d15, d13, d12, #1
 vmlal.s32 q5, d17, d4
 vst1.8  d8, [r5, : 64]!
 vmlal.s32 q5, d14, d1
 vext.32  d12, d9, d8, #0
 vmlal.s32 q5, d15, d19
 vmov.i64 d13, #0
 vmlal.s32 q5, d29, d18
 vext.32  d25, d19, d7, #1
 vmlal.s32 q6, d20, d5
 vrev64.i32 d25, d25
 vmlal.s32 q6, d21, d4
 vst1.8  d11, [r5, : 64]!
 vmlal.s32 q6, d26, d1
 vext.32  d9, d10, d10, #0
 vmlal.s32 q6, d27, d19
 vmov.i64 d8, #0
 vmlal.s32 q6, d28, d18
 vmlal.s32 q4, d16, d24
 vmlal.s32 q4, d17, d5
 vmlal.s32 q4, d14, d4
 vst1.8  d12, [r5, : 64]!
 vmlal.s32 q4, d15, d1
 vext.32  d10, d13, d12, #0
 vmlal.s32 q4, d29, d19
 vmov.i64 d11, #0
 vmlal.s32 q5, d20, d6
 vmlal.s32 q5, d21, d5
 vmlal.s32 q5, d26, d4
 vext.32  d13, d8, d8, #0
 vmlal.s32 q5, d27, d1
 vmov.i64 d12, #0
 vmlal.s32 q5, d28, d19
 vst1.8  d9, [r5, : 64]!
 vmlal.s32 q6, d16, d25
 vmlal.s32 q6, d17, d6
 vst1.8  d10, [r5, : 64]
 vmlal.s32 q6, d14, d5
 vext.32  d8, d11, d10, #0
 vmlal.s32 q6, d15, d4
 vmov.i64 d9, #0
 vmlal.s32 q6, d29, d1
 vmlal.s32 q4, d20, d7
 vmlal.s32 q4, d21, d6
 vmlal.s32 q4, d26, d5
 vext.32  d11, d12, d12, #0
 vmlal.s32 q4, d27, d4
 vmov.i64 d10, #0
 vmlal.s32 q4, d28, d1
 vmlal.s32 q5, d16, d0
 sub  r2, r5, #32
 vmlal.s32 q5, d17, d7
 vmlal.s32 q5, d14, d6
 vext.32  d30, d9, d8, #0
 vmlal.s32 q5, d15, d5
 vld1.8  {d31}, [r2, : 64]!
 vmlal.s32 q5, d29, d4
 vmlal.s32 q15, d20, d0
 vext.32  d0, d6, d18, #1
 vmlal.s32 q15, d21, d25
 vrev64.i32 d0, d0
 vmlal.s32 q15, d26, d24
 vext.32  d1, d7, d19, #1
 vext.32  d7, d10, d10, #0
 vmlal.s32 q15, d27, d23
 vrev64.i32 d1, d1
 vld1.8  {d6}, [r2, : 64]
 vmlal.s32 q15, d28, d22
 vmlal.s32 q3, d16, d4
 add  r2, r2, #24
 vmlal.s32 q3, d17, d2
 vext.32  d4, d31, d30, #0
 vmov  d17, d11
 vmlal.s32 q3, d14, d1
 vext.32  d11, d13, d13, #0
 vext.32  d13, d30, d30, #0
 vmlal.s32 q3, d15, d0
 vext.32  d1, d8, d8, #0
 vmlal.s32 q3, d29, d3
 vld1.8  {d5}, [r2, : 64]
 sub  r2, r2, #16
 vext.32  d10, d6, d6, #0
 vmov.i32 q1, #0xffffffff
 vshl.i64 q4, q1, #25
 add  r5, sp, #480
 vld1.8  {d14-d15}, [r5, : 128]
 vadd.i64 q9, q2, q7
 vshl.i64 q1, q1, #26
 vshr.s64 q10, q9, #26
 vld1.8  {d0}, [r2, : 64]!
 vadd.i64 q5, q5, q10
 vand  q9, q9, q1
 vld1.8  {d16}, [r2, : 64]!
 add  r2, sp, #496
 vld1.8  {d20-d21}, [r2, : 128]
 vadd.i64 q11, q5, q10
 vsub.i64 q2, q2, q9
 vshr.s64 q9, q11, #25
 vext.32  d12, d5, d4, #0
 vand  q11, q11, q4
 vadd.i64 q0, q0, q9
 vmov  d19, d7
 vadd.i64 q3, q0, q7
 vsub.i64 q5, q5, q11
 vshr.s64 q11, q3, #26
 vext.32  d18, d11, d10, #0
 vand  q3, q3, q1
 vadd.i64 q8, q8, q11
 vadd.i64 q11, q8, q10
 vsub.i64 q0, q0, q3
 vshr.s64 q3, q11, #25
 vand  q11, q11, q4
 vadd.i64 q3, q6, q3
 vadd.i64 q6, q3, q7
 vsub.i64 q8, q8, q11
 vshr.s64 q11, q6, #26
 vand  q6, q6, q1
 vadd.i64 q9, q9, q11
 vadd.i64 d25, d19, d21
 vsub.i64 q3, q3, q6
 vshr.s64 d23, d25, #25
 vand  q4, q12, q4
 vadd.i64 d21, d23, d23
 vshl.i64 d25, d23, #4
 vadd.i64 d21, d21, d23
 vadd.i64 d25, d25, d21
 vadd.i64 d4, d4, d25
 vzip.i32 q0, q8
 vadd.i64 d12, d4, d14
 add  r2, r6, #8
 vst1.8  d0, [r2, : 64]
 vsub.i64 d19, d19, d9
 add  r2, r2, #16
 vst1.8  d16, [r2, : 64]
 vshr.s64 d22, d12, #26
 vand  q0, q6, q1
 vadd.i64 d10, d10, d22
 vzip.i32 q3, q9
 vsub.i64 d4, d4, d0
 sub  r2, r2, #8
 vst1.8  d6, [r2, : 64]
 add  r2, r2, #16
 vst1.8  d18, [r2, : 64]
 vzip.i32 q2, q5
 sub  r2, r2, #32
 vst1.8  d4, [r2, : 64]
 cmp  r4, #0
 beq  .Lskippostcopy
 add  r2, r3, #144
 mov  r4, r4
 vld1.8  {d0-d1}, [r2, : 128]!
 vld1.8  {d2-d3}, [r2, : 128]!
 vld1.8  {d4}, [r2, : 64]
 vst1.8  {d0-d1}, [r4, : 128]!
 vst1.8  {d2-d3}, [r4, : 128]!
 vst1.8  d4, [r4, : 64]
.Lskippostcopy:
 cmp  r1, #1
 bne  .Lskipfinalcopy
 add  r2, r3, #288
 add  r4, r3, #144
 vld1.8  {d0-d1}, [r2, : 128]!
 vld1.8  {d2-d3}, [r2, : 128]!
 vld1.8  {d4}, [r2, : 64]
 vst1.8  {d0-d1}, [r4, : 128]!
 vst1.8  {d2-d3}, [r4, : 128]!
 vst1.8  d4, [r4, : 64]
.Lskipfinalcopy:
 add  r1, r1, #1
 cmp  r1, #12
 blo  .Linvertloop
 add  r1, r3, #144
 ldr  r2, [r1], #4
 ldr  r3, [r1], #4
 ldr  r4, [r1], #4
 ldr  r5, [r1], #4
 ldr  r6, [r1], #4
 ldr  r7, [r1], #4
 ldr  r8, [r1], #4
 ldr  r9, [r1], #4
 ldr  r10, [r1], #4
 ldr  r1, [r1]
 add  r11, r1, r1, LSL #4
 add  r11, r11, r1, LSL #1
 add  r11, r11, #16777216
 mov  r11, r11, ASR #25
 add  r11, r11, r2
 mov  r11, r11, ASR #26
 add  r11, r11, r3
 mov  r11, r11, ASR #25
 add  r11, r11, r4
 mov  r11, r11, ASR #26
 add  r11, r11, r5
 mov  r11, r11, ASR #25
 add  r11, r11, r6
 mov  r11, r11, ASR #26
 add  r11, r11, r7
 mov  r11, r11, ASR #25
 add  r11, r11, r8
 mov  r11, r11, ASR #26
 add  r11, r11, r9
 mov  r11, r11, ASR #25
 add  r11, r11, r10
 mov  r11, r11, ASR #26
 add  r11, r11, r1
 mov  r11, r11, ASR #25
 add  r2, r2, r11
 add  r2, r2, r11, LSL #1
 add  r2, r2, r11, LSL #4
 mov  r11, r2, ASR #26
 add  r3, r3, r11
 sub  r2, r2, r11, LSL #26
 mov  r11, r3, ASR #25
 add  r4, r4, r11
 sub  r3, r3, r11, LSL #25
 mov  r11, r4, ASR #26
 add  r5, r5, r11
 sub  r4, r4, r11, LSL #26
 mov  r11, r5, ASR #25
 add  r6, r6, r11
 sub  r5, r5, r11, LSL #25
 mov  r11, r6, ASR #26
 add  r7, r7, r11
 sub  r6, r6, r11, LSL #26
 mov  r11, r7, ASR #25
 add  r8, r8, r11
 sub  r7, r7, r11, LSL #25
 mov  r11, r8, ASR #26
 add  r9, r9, r11
 sub  r8, r8, r11, LSL #26
 mov  r11, r9, ASR #25
 add  r10, r10, r11
 sub  r9, r9, r11, LSL #25
 mov  r11, r10, ASR #26
 add  r1, r1, r11
 sub  r10, r10, r11, LSL #26
 mov  r11, r1, ASR #25
 sub  r1, r1, r11, LSL #25
 add  r2, r2, r3, LSL #26
 mov  r3, r3, LSR #6
 add  r3, r3, r4, LSL #19
 mov  r4, r4, LSR #13
 add  r4, r4, r5, LSL #13
 mov  r5, r5, LSR #19
 add  r5, r5, r6, LSL #6
 add  r6, r7, r8, LSL #25
 mov  r7, r8, LSR #7
 add  r7, r7, r9, LSL #19
 mov  r8, r9, LSR #13
 add  r8, r8, r10, LSL #12
 mov  r9, r10, LSR #20
 add  r1, r9, r1, LSL #6
 str  r2, [r0]
 str  r3, [r0, #4]
 str  r4, [r0, #8]
 str  r5, [r0, #12]
 str  r6, [r0, #16]
 str  r7, [r0, #20]
 str  r8, [r0, #24]
 str  r1, [r0, #28]
 movw  r0, #0
 mov  sp, ip
 pop  {r4-r11, pc}
ENDPROC(curve25519_neon)

Messung V0.5
C=93 H=100 G=96

¤ Dauer der Verarbeitung: 0.18 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge