0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include <linux/linkage.h>
0011
0012 .text
0013 .arch armv7-a
0014 .fpu neon
0015 .align 4
0016
0017 ENTRY(curve25519_neon)
0018 push {r4-r11, lr}
0019 mov ip, sp
0020 sub r3, sp, #704
0021 and r3, r3, #0xfffffff0
0022 mov sp, r3
0023 movw r4, #0
0024 movw r5, #254
0025 vmov.i32 q0, #1
0026 vshr.u64 q1, q0, #7
0027 vshr.u64 q0, q0, #8
0028 vmov.i32 d4, #19
0029 vmov.i32 d5, #38
0030 add r6, sp, #480
0031 vst1.8 {d2-d3}, [r6, : 128]!
0032 vst1.8 {d0-d1}, [r6, : 128]!
0033 vst1.8 {d4-d5}, [r6, : 128]
0034 add r6, r3, #0
0035 vmov.i32 q2, #0
0036 vst1.8 {d4-d5}, [r6, : 128]!
0037 vst1.8 {d4-d5}, [r6, : 128]!
0038 vst1.8 d4, [r6, : 64]
0039 add r6, r3, #0
0040 movw r7, #960
0041 sub r7, r7, #2
0042 neg r7, r7
0043 sub r7, r7, r7, LSL #7
0044 str r7, [r6]
0045 add r6, sp, #672
0046 vld1.8 {d4-d5}, [r1]!
0047 vld1.8 {d6-d7}, [r1]
0048 vst1.8 {d4-d5}, [r6, : 128]!
0049 vst1.8 {d6-d7}, [r6, : 128]
0050 sub r1, r6, #16
0051 ldrb r6, [r1]
0052 and r6, r6, #248
0053 strb r6, [r1]
0054 ldrb r6, [r1, #31]
0055 and r6, r6, #127
0056 orr r6, r6, #64
0057 strb r6, [r1, #31]
0058 vmov.i64 q2, #0xffffffff
0059 vshr.u64 q3, q2, #7
0060 vshr.u64 q2, q2, #6
0061 vld1.8 {d8}, [r2]
0062 vld1.8 {d10}, [r2]
0063 add r2, r2, #6
0064 vld1.8 {d12}, [r2]
0065 vld1.8 {d14}, [r2]
0066 add r2, r2, #6
0067 vld1.8 {d16}, [r2]
0068 add r2, r2, #4
0069 vld1.8 {d18}, [r2]
0070 vld1.8 {d20}, [r2]
0071 add r2, r2, #6
0072 vld1.8 {d22}, [r2]
0073 add r2, r2, #2
0074 vld1.8 {d24}, [r2]
0075 vld1.8 {d26}, [r2]
0076 vshr.u64 q5, q5, #26
0077 vshr.u64 q6, q6, #3
0078 vshr.u64 q7, q7, #29
0079 vshr.u64 q8, q8, #6
0080 vshr.u64 q10, q10, #25
0081 vshr.u64 q11, q11, #3
0082 vshr.u64 q12, q12, #12
0083 vshr.u64 q13, q13, #38
0084 vand q4, q4, q2
0085 vand q6, q6, q2
0086 vand q8, q8, q2
0087 vand q10, q10, q2
0088 vand q2, q12, q2
0089 vand q5, q5, q3
0090 vand q7, q7, q3
0091 vand q9, q9, q3
0092 vand q11, q11, q3
0093 vand q3, q13, q3
0094 add r2, r3, #48
0095 vadd.i64 q12, q4, q1
0096 vadd.i64 q13, q10, q1
0097 vshr.s64 q12, q12, #26
0098 vshr.s64 q13, q13, #26
0099 vadd.i64 q5, q5, q12
0100 vshl.i64 q12, q12, #26
0101 vadd.i64 q14, q5, q0
0102 vadd.i64 q11, q11, q13
0103 vshl.i64 q13, q13, #26
0104 vadd.i64 q15, q11, q0
0105 vsub.i64 q4, q4, q12
0106 vshr.s64 q12, q14, #25
0107 vsub.i64 q10, q10, q13
0108 vshr.s64 q13, q15, #25
0109 vadd.i64 q6, q6, q12
0110 vshl.i64 q12, q12, #25
0111 vadd.i64 q14, q6, q1
0112 vadd.i64 q2, q2, q13
0113 vsub.i64 q5, q5, q12
0114 vshr.s64 q12, q14, #26
0115 vshl.i64 q13, q13, #25
0116 vadd.i64 q14, q2, q1
0117 vadd.i64 q7, q7, q12
0118 vshl.i64 q12, q12, #26
0119 vadd.i64 q15, q7, q0
0120 vsub.i64 q11, q11, q13
0121 vshr.s64 q13, q14, #26
0122 vsub.i64 q6, q6, q12
0123 vshr.s64 q12, q15, #25
0124 vadd.i64 q3, q3, q13
0125 vshl.i64 q13, q13, #26
0126 vadd.i64 q14, q3, q0
0127 vadd.i64 q8, q8, q12
0128 vshl.i64 q12, q12, #25
0129 vadd.i64 q15, q8, q1
0130 add r2, r2, #8
0131 vsub.i64 q2, q2, q13
0132 vshr.s64 q13, q14, #25
0133 vsub.i64 q7, q7, q12
0134 vshr.s64 q12, q15, #26
0135 vadd.i64 q14, q13, q13
0136 vadd.i64 q9, q9, q12
0137 vtrn.32 d12, d14
0138 vshl.i64 q12, q12, #26
0139 vtrn.32 d13, d15
0140 vadd.i64 q0, q9, q0
0141 vadd.i64 q4, q4, q14
0142 vst1.8 d12, [r2, : 64]!
0143 vshl.i64 q6, q13, #4
0144 vsub.i64 q7, q8, q12
0145 vshr.s64 q0, q0, #25
0146 vadd.i64 q4, q4, q6
0147 vadd.i64 q6, q10, q0
0148 vshl.i64 q0, q0, #25
0149 vadd.i64 q8, q6, q1
0150 vadd.i64 q4, q4, q13
0151 vshl.i64 q10, q13, #25
0152 vadd.i64 q1, q4, q1
0153 vsub.i64 q0, q9, q0
0154 vshr.s64 q8, q8, #26
0155 vsub.i64 q3, q3, q10
0156 vtrn.32 d14, d0
0157 vshr.s64 q1, q1, #26
0158 vtrn.32 d15, d1
0159 vadd.i64 q0, q11, q8
0160 vst1.8 d14, [r2, : 64]
0161 vshl.i64 q7, q8, #26
0162 vadd.i64 q5, q5, q1
0163 vtrn.32 d4, d6
0164 vshl.i64 q1, q1, #26
0165 vtrn.32 d5, d7
0166 vsub.i64 q3, q6, q7
0167 add r2, r2, #16
0168 vsub.i64 q1, q4, q1
0169 vst1.8 d4, [r2, : 64]
0170 vtrn.32 d6, d0
0171 vtrn.32 d7, d1
0172 sub r2, r2, #8
0173 vtrn.32 d2, d10
0174 vtrn.32 d3, d11
0175 vst1.8 d6, [r2, : 64]
0176 sub r2, r2, #24
0177 vst1.8 d2, [r2, : 64]
0178 add r2, r3, #96
0179 vmov.i32 q0, #0
0180 vmov.i64 d2, #0xff
0181 vmov.i64 d3, #0
0182 vshr.u32 q1, q1, #7
0183 vst1.8 {d2-d3}, [r2, : 128]!
0184 vst1.8 {d0-d1}, [r2, : 128]!
0185 vst1.8 d0, [r2, : 64]
0186 add r2, r3, #144
0187 vmov.i32 q0, #0
0188 vst1.8 {d0-d1}, [r2, : 128]!
0189 vst1.8 {d0-d1}, [r2, : 128]!
0190 vst1.8 d0, [r2, : 64]
0191 add r2, r3, #240
0192 vmov.i32 q0, #0
0193 vmov.i64 d2, #0xff
0194 vmov.i64 d3, #0
0195 vshr.u32 q1, q1, #7
0196 vst1.8 {d2-d3}, [r2, : 128]!
0197 vst1.8 {d0-d1}, [r2, : 128]!
0198 vst1.8 d0, [r2, : 64]
0199 add r2, r3, #48
0200 add r6, r3, #192
0201 vld1.8 {d0-d1}, [r2, : 128]!
0202 vld1.8 {d2-d3}, [r2, : 128]!
0203 vld1.8 {d4}, [r2, : 64]
0204 vst1.8 {d0-d1}, [r6, : 128]!
0205 vst1.8 {d2-d3}, [r6, : 128]!
0206 vst1.8 d4, [r6, : 64]
0207 .Lmainloop:
0208 mov r2, r5, LSR #3
0209 and r6, r5, #7
0210 ldrb r2, [r1, r2]
0211 mov r2, r2, LSR r6
0212 and r2, r2, #1
0213 str r5, [sp, #456]
0214 eor r4, r4, r2
0215 str r2, [sp, #460]
0216 neg r2, r4
0217 add r4, r3, #96
0218 add r5, r3, #192
0219 add r6, r3, #144
0220 vld1.8 {d8-d9}, [r4, : 128]!
0221 add r7, r3, #240
0222 vld1.8 {d10-d11}, [r5, : 128]!
0223 veor q6, q4, q5
0224 vld1.8 {d14-d15}, [r6, : 128]!
0225 vdup.i32 q8, r2
0226 vld1.8 {d18-d19}, [r7, : 128]!
0227 veor q10, q7, q9
0228 vld1.8 {d22-d23}, [r4, : 128]!
0229 vand q6, q6, q8
0230 vld1.8 {d24-d25}, [r5, : 128]!
0231 vand q10, q10, q8
0232 vld1.8 {d26-d27}, [r6, : 128]!
0233 veor q4, q4, q6
0234 vld1.8 {d28-d29}, [r7, : 128]!
0235 veor q5, q5, q6
0236 vld1.8 {d0}, [r4, : 64]
0237 veor q6, q7, q10
0238 vld1.8 {d2}, [r5, : 64]
0239 veor q7, q9, q10
0240 vld1.8 {d4}, [r6, : 64]
0241 veor q9, q11, q12
0242 vld1.8 {d6}, [r7, : 64]
0243 veor q10, q0, q1
0244 sub r2, r4, #32
0245 vand q9, q9, q8
0246 sub r4, r5, #32
0247 vand q10, q10, q8
0248 sub r5, r6, #32
0249 veor q11, q11, q9
0250 sub r6, r7, #32
0251 veor q0, q0, q10
0252 veor q9, q12, q9
0253 veor q1, q1, q10
0254 veor q10, q13, q14
0255 veor q12, q2, q3
0256 vand q10, q10, q8
0257 vand q8, q12, q8
0258 veor q12, q13, q10
0259 veor q2, q2, q8
0260 veor q10, q14, q10
0261 veor q3, q3, q8
0262 vadd.i32 q8, q4, q6
0263 vsub.i32 q4, q4, q6
0264 vst1.8 {d16-d17}, [r2, : 128]!
0265 vadd.i32 q6, q11, q12
0266 vst1.8 {d8-d9}, [r5, : 128]!
0267 vsub.i32 q4, q11, q12
0268 vst1.8 {d12-d13}, [r2, : 128]!
0269 vadd.i32 q6, q0, q2
0270 vst1.8 {d8-d9}, [r5, : 128]!
0271 vsub.i32 q0, q0, q2
0272 vst1.8 d12, [r2, : 64]
0273 vadd.i32 q2, q5, q7
0274 vst1.8 d0, [r5, : 64]
0275 vsub.i32 q0, q5, q7
0276 vst1.8 {d4-d5}, [r4, : 128]!
0277 vadd.i32 q2, q9, q10
0278 vst1.8 {d0-d1}, [r6, : 128]!
0279 vsub.i32 q0, q9, q10
0280 vst1.8 {d4-d5}, [r4, : 128]!
0281 vadd.i32 q2, q1, q3
0282 vst1.8 {d0-d1}, [r6, : 128]!
0283 vsub.i32 q0, q1, q3
0284 vst1.8 d4, [r4, : 64]
0285 vst1.8 d0, [r6, : 64]
0286 add r2, sp, #512
0287 add r4, r3, #96
0288 add r5, r3, #144
0289 vld1.8 {d0-d1}, [r2, : 128]
0290 vld1.8 {d2-d3}, [r4, : 128]!
0291 vld1.8 {d4-d5}, [r5, : 128]!
0292 vzip.i32 q1, q2
0293 vld1.8 {d6-d7}, [r4, : 128]!
0294 vld1.8 {d8-d9}, [r5, : 128]!
0295 vshl.i32 q5, q1, #1
0296 vzip.i32 q3, q4
0297 vshl.i32 q6, q2, #1
0298 vld1.8 {d14}, [r4, : 64]
0299 vshl.i32 q8, q3, #1
0300 vld1.8 {d15}, [r5, : 64]
0301 vshl.i32 q9, q4, #1
0302 vmul.i32 d21, d7, d1
0303 vtrn.32 d14, d15
0304 vmul.i32 q11, q4, q0
0305 vmul.i32 q0, q7, q0
0306 vmull.s32 q12, d2, d2
0307 vmlal.s32 q12, d11, d1
0308 vmlal.s32 q12, d12, d0
0309 vmlal.s32 q12, d13, d23
0310 vmlal.s32 q12, d16, d22
0311 vmlal.s32 q12, d7, d21
0312 vmull.s32 q10, d2, d11
0313 vmlal.s32 q10, d4, d1
0314 vmlal.s32 q10, d13, d0
0315 vmlal.s32 q10, d6, d23
0316 vmlal.s32 q10, d17, d22
0317 vmull.s32 q13, d10, d4
0318 vmlal.s32 q13, d11, d3
0319 vmlal.s32 q13, d13, d1
0320 vmlal.s32 q13, d16, d0
0321 vmlal.s32 q13, d17, d23
0322 vmlal.s32 q13, d8, d22
0323 vmull.s32 q1, d10, d5
0324 vmlal.s32 q1, d11, d4
0325 vmlal.s32 q1, d6, d1
0326 vmlal.s32 q1, d17, d0
0327 vmlal.s32 q1, d8, d23
0328 vmull.s32 q14, d10, d6
0329 vmlal.s32 q14, d11, d13
0330 vmlal.s32 q14, d4, d4
0331 vmlal.s32 q14, d17, d1
0332 vmlal.s32 q14, d18, d0
0333 vmlal.s32 q14, d9, d23
0334 vmull.s32 q11, d10, d7
0335 vmlal.s32 q11, d11, d6
0336 vmlal.s32 q11, d12, d5
0337 vmlal.s32 q11, d8, d1
0338 vmlal.s32 q11, d19, d0
0339 vmull.s32 q15, d10, d8
0340 vmlal.s32 q15, d11, d17
0341 vmlal.s32 q15, d12, d6
0342 vmlal.s32 q15, d13, d5
0343 vmlal.s32 q15, d19, d1
0344 vmlal.s32 q15, d14, d0
0345 vmull.s32 q2, d10, d9
0346 vmlal.s32 q2, d11, d8
0347 vmlal.s32 q2, d12, d7
0348 vmlal.s32 q2, d13, d6
0349 vmlal.s32 q2, d14, d1
0350 vmull.s32 q0, d15, d1
0351 vmlal.s32 q0, d10, d14
0352 vmlal.s32 q0, d11, d19
0353 vmlal.s32 q0, d12, d8
0354 vmlal.s32 q0, d13, d17
0355 vmlal.s32 q0, d6, d6
0356 add r2, sp, #480
0357 vld1.8 {d18-d19}, [r2, : 128]!
0358 vmull.s32 q3, d16, d7
0359 vmlal.s32 q3, d10, d15
0360 vmlal.s32 q3, d11, d14
0361 vmlal.s32 q3, d12, d9
0362 vmlal.s32 q3, d13, d8
0363 vld1.8 {d8-d9}, [r2, : 128]
0364 vadd.i64 q5, q12, q9
0365 vadd.i64 q6, q15, q9
0366 vshr.s64 q5, q5, #26
0367 vshr.s64 q6, q6, #26
0368 vadd.i64 q7, q10, q5
0369 vshl.i64 q5, q5, #26
0370 vadd.i64 q8, q7, q4
0371 vadd.i64 q2, q2, q6
0372 vshl.i64 q6, q6, #26
0373 vadd.i64 q10, q2, q4
0374 vsub.i64 q5, q12, q5
0375 vshr.s64 q8, q8, #25
0376 vsub.i64 q6, q15, q6
0377 vshr.s64 q10, q10, #25
0378 vadd.i64 q12, q13, q8
0379 vshl.i64 q8, q8, #25
0380 vadd.i64 q13, q12, q9
0381 vadd.i64 q0, q0, q10
0382 vsub.i64 q7, q7, q8
0383 vshr.s64 q8, q13, #26
0384 vshl.i64 q10, q10, #25
0385 vadd.i64 q13, q0, q9
0386 vadd.i64 q1, q1, q8
0387 vshl.i64 q8, q8, #26
0388 vadd.i64 q15, q1, q4
0389 vsub.i64 q2, q2, q10
0390 vshr.s64 q10, q13, #26
0391 vsub.i64 q8, q12, q8
0392 vshr.s64 q12, q15, #25
0393 vadd.i64 q3, q3, q10
0394 vshl.i64 q10, q10, #26
0395 vadd.i64 q13, q3, q4
0396 vadd.i64 q14, q14, q12
0397 add r2, r3, #288
0398 vshl.i64 q12, q12, #25
0399 add r4, r3, #336
0400 vadd.i64 q15, q14, q9
0401 add r2, r2, #8
0402 vsub.i64 q0, q0, q10
0403 add r4, r4, #8
0404 vshr.s64 q10, q13, #25
0405 vsub.i64 q1, q1, q12
0406 vshr.s64 q12, q15, #26
0407 vadd.i64 q13, q10, q10
0408 vadd.i64 q11, q11, q12
0409 vtrn.32 d16, d2
0410 vshl.i64 q12, q12, #26
0411 vtrn.32 d17, d3
0412 vadd.i64 q1, q11, q4
0413 vadd.i64 q4, q5, q13
0414 vst1.8 d16, [r2, : 64]!
0415 vshl.i64 q5, q10, #4
0416 vst1.8 d17, [r4, : 64]!
0417 vsub.i64 q8, q14, q12
0418 vshr.s64 q1, q1, #25
0419 vadd.i64 q4, q4, q5
0420 vadd.i64 q5, q6, q1
0421 vshl.i64 q1, q1, #25
0422 vadd.i64 q6, q5, q9
0423 vadd.i64 q4, q4, q10
0424 vshl.i64 q10, q10, #25
0425 vadd.i64 q9, q4, q9
0426 vsub.i64 q1, q11, q1
0427 vshr.s64 q6, q6, #26
0428 vsub.i64 q3, q3, q10
0429 vtrn.32 d16, d2
0430 vshr.s64 q9, q9, #26
0431 vtrn.32 d17, d3
0432 vadd.i64 q1, q2, q6
0433 vst1.8 d16, [r2, : 64]
0434 vshl.i64 q2, q6, #26
0435 vst1.8 d17, [r4, : 64]
0436 vadd.i64 q6, q7, q9
0437 vtrn.32 d0, d6
0438 vshl.i64 q7, q9, #26
0439 vtrn.32 d1, d7
0440 vsub.i64 q2, q5, q2
0441 add r2, r2, #16
0442 vsub.i64 q3, q4, q7
0443 vst1.8 d0, [r2, : 64]
0444 add r4, r4, #16
0445 vst1.8 d1, [r4, : 64]
0446 vtrn.32 d4, d2
0447 vtrn.32 d5, d3
0448 sub r2, r2, #8
0449 sub r4, r4, #8
0450 vtrn.32 d6, d12
0451 vtrn.32 d7, d13
0452 vst1.8 d4, [r2, : 64]
0453 vst1.8 d5, [r4, : 64]
0454 sub r2, r2, #24
0455 sub r4, r4, #24
0456 vst1.8 d6, [r2, : 64]
0457 vst1.8 d7, [r4, : 64]
0458 add r2, r3, #240
0459 add r4, r3, #96
0460 vld1.8 {d0-d1}, [r4, : 128]!
0461 vld1.8 {d2-d3}, [r4, : 128]!
0462 vld1.8 {d4}, [r4, : 64]
0463 add r4, r3, #144
0464 vld1.8 {d6-d7}, [r4, : 128]!
0465 vtrn.32 q0, q3
0466 vld1.8 {d8-d9}, [r4, : 128]!
0467 vshl.i32 q5, q0, #4
0468 vtrn.32 q1, q4
0469 vshl.i32 q6, q3, #4
0470 vadd.i32 q5, q5, q0
0471 vadd.i32 q6, q6, q3
0472 vshl.i32 q7, q1, #4
0473 vld1.8 {d5}, [r4, : 64]
0474 vshl.i32 q8, q4, #4
0475 vtrn.32 d4, d5
0476 vadd.i32 q7, q7, q1
0477 vadd.i32 q8, q8, q4
0478 vld1.8 {d18-d19}, [r2, : 128]!
0479 vshl.i32 q10, q2, #4
0480 vld1.8 {d22-d23}, [r2, : 128]!
0481 vadd.i32 q10, q10, q2
0482 vld1.8 {d24}, [r2, : 64]
0483 vadd.i32 q5, q5, q0
0484 add r2, r3, #192
0485 vld1.8 {d26-d27}, [r2, : 128]!
0486 vadd.i32 q6, q6, q3
0487 vld1.8 {d28-d29}, [r2, : 128]!
0488 vadd.i32 q8, q8, q4
0489 vld1.8 {d25}, [r2, : 64]
0490 vadd.i32 q10, q10, q2
0491 vtrn.32 q9, q13
0492 vadd.i32 q7, q7, q1
0493 vadd.i32 q5, q5, q0
0494 vtrn.32 q11, q14
0495 vadd.i32 q6, q6, q3
0496 add r2, sp, #528
0497 vadd.i32 q10, q10, q2
0498 vtrn.32 d24, d25
0499 vst1.8 {d12-d13}, [r2, : 128]!
0500 vshl.i32 q6, q13, #1
0501 vst1.8 {d20-d21}, [r2, : 128]!
0502 vshl.i32 q10, q14, #1
0503 vst1.8 {d12-d13}, [r2, : 128]!
0504 vshl.i32 q15, q12, #1
0505 vadd.i32 q8, q8, q4
0506 vext.32 d10, d31, d30, #0
0507 vadd.i32 q7, q7, q1
0508 vst1.8 {d16-d17}, [r2, : 128]!
0509 vmull.s32 q8, d18, d5
0510 vmlal.s32 q8, d26, d4
0511 vmlal.s32 q8, d19, d9
0512 vmlal.s32 q8, d27, d3
0513 vmlal.s32 q8, d22, d8
0514 vmlal.s32 q8, d28, d2
0515 vmlal.s32 q8, d23, d7
0516 vmlal.s32 q8, d29, d1
0517 vmlal.s32 q8, d24, d6
0518 vmlal.s32 q8, d25, d0
0519 vst1.8 {d14-d15}, [r2, : 128]!
0520 vmull.s32 q2, d18, d4
0521 vmlal.s32 q2, d12, d9
0522 vmlal.s32 q2, d13, d8
0523 vmlal.s32 q2, d19, d3
0524 vmlal.s32 q2, d22, d2
0525 vmlal.s32 q2, d23, d1
0526 vmlal.s32 q2, d24, d0
0527 vst1.8 {d20-d21}, [r2, : 128]!
0528 vmull.s32 q7, d18, d9
0529 vmlal.s32 q7, d26, d3
0530 vmlal.s32 q7, d19, d8
0531 vmlal.s32 q7, d27, d2
0532 vmlal.s32 q7, d22, d7
0533 vmlal.s32 q7, d28, d1
0534 vmlal.s32 q7, d23, d6
0535 vmlal.s32 q7, d29, d0
0536 vst1.8 {d10-d11}, [r2, : 128]!
0537 vmull.s32 q5, d18, d3
0538 vmlal.s32 q5, d19, d2
0539 vmlal.s32 q5, d22, d1
0540 vmlal.s32 q5, d23, d0
0541 vmlal.s32 q5, d12, d8
0542 vst1.8 {d16-d17}, [r2, : 128]
0543 vmull.s32 q4, d18, d8
0544 vmlal.s32 q4, d26, d2
0545 vmlal.s32 q4, d19, d7
0546 vmlal.s32 q4, d27, d1
0547 vmlal.s32 q4, d22, d6
0548 vmlal.s32 q4, d28, d0
0549 vmull.s32 q8, d18, d7
0550 vmlal.s32 q8, d26, d1
0551 vmlal.s32 q8, d19, d6
0552 vmlal.s32 q8, d27, d0
0553 add r2, sp, #544
0554 vld1.8 {d20-d21}, [r2, : 128]
0555 vmlal.s32 q7, d24, d21
0556 vmlal.s32 q7, d25, d20
0557 vmlal.s32 q4, d23, d21
0558 vmlal.s32 q4, d29, d20
0559 vmlal.s32 q8, d22, d21
0560 vmlal.s32 q8, d28, d20
0561 vmlal.s32 q5, d24, d20
0562 vst1.8 {d14-d15}, [r2, : 128]
0563 vmull.s32 q7, d18, d6
0564 vmlal.s32 q7, d26, d0
0565 add r2, sp, #624
0566 vld1.8 {d30-d31}, [r2, : 128]
0567 vmlal.s32 q2, d30, d21
0568 vmlal.s32 q7, d19, d21
0569 vmlal.s32 q7, d27, d20
0570 add r2, sp, #592
0571 vld1.8 {d26-d27}, [r2, : 128]
0572 vmlal.s32 q4, d25, d27
0573 vmlal.s32 q8, d29, d27
0574 vmlal.s32 q8, d25, d26
0575 vmlal.s32 q7, d28, d27
0576 vmlal.s32 q7, d29, d26
0577 add r2, sp, #576
0578 vld1.8 {d28-d29}, [r2, : 128]
0579 vmlal.s32 q4, d24, d29
0580 vmlal.s32 q8, d23, d29
0581 vmlal.s32 q8, d24, d28
0582 vmlal.s32 q7, d22, d29
0583 vmlal.s32 q7, d23, d28
0584 vst1.8 {d8-d9}, [r2, : 128]
0585 add r2, sp, #528
0586 vld1.8 {d8-d9}, [r2, : 128]
0587 vmlal.s32 q7, d24, d9
0588 vmlal.s32 q7, d25, d31
0589 vmull.s32 q1, d18, d2
0590 vmlal.s32 q1, d19, d1
0591 vmlal.s32 q1, d22, d0
0592 vmlal.s32 q1, d24, d27
0593 vmlal.s32 q1, d23, d20
0594 vmlal.s32 q1, d12, d7
0595 vmlal.s32 q1, d13, d6
0596 vmull.s32 q6, d18, d1
0597 vmlal.s32 q6, d19, d0
0598 vmlal.s32 q6, d23, d27
0599 vmlal.s32 q6, d22, d20
0600 vmlal.s32 q6, d24, d26
0601 vmull.s32 q0, d18, d0
0602 vmlal.s32 q0, d22, d27
0603 vmlal.s32 q0, d23, d26
0604 vmlal.s32 q0, d24, d31
0605 vmlal.s32 q0, d19, d20
0606 add r2, sp, #608
0607 vld1.8 {d18-d19}, [r2, : 128]
0608 vmlal.s32 q2, d18, d7
0609 vmlal.s32 q5, d18, d6
0610 vmlal.s32 q1, d18, d21
0611 vmlal.s32 q0, d18, d28
0612 vmlal.s32 q6, d18, d29
0613 vmlal.s32 q2, d19, d6
0614 vmlal.s32 q5, d19, d21
0615 vmlal.s32 q1, d19, d29
0616 vmlal.s32 q0, d19, d9
0617 vmlal.s32 q6, d19, d28
0618 add r2, sp, #560
0619 vld1.8 {d18-d19}, [r2, : 128]
0620 add r2, sp, #480
0621 vld1.8 {d22-d23}, [r2, : 128]
0622 vmlal.s32 q5, d19, d7
0623 vmlal.s32 q0, d18, d21
0624 vmlal.s32 q0, d19, d29
0625 vmlal.s32 q6, d18, d6
0626 add r2, sp, #496
0627 vld1.8 {d6-d7}, [r2, : 128]
0628 vmlal.s32 q6, d19, d21
0629 add r2, sp, #544
0630 vld1.8 {d18-d19}, [r2, : 128]
0631 vmlal.s32 q0, d30, d8
0632 add r2, sp, #640
0633 vld1.8 {d20-d21}, [r2, : 128]
0634 vmlal.s32 q5, d30, d29
0635 add r2, sp, #576
0636 vld1.8 {d24-d25}, [r2, : 128]
0637 vmlal.s32 q1, d30, d28
0638 vadd.i64 q13, q0, q11
0639 vadd.i64 q14, q5, q11
0640 vmlal.s32 q6, d30, d9
0641 vshr.s64 q4, q13, #26
0642 vshr.s64 q13, q14, #26
0643 vadd.i64 q7, q7, q4
0644 vshl.i64 q4, q4, #26
0645 vadd.i64 q14, q7, q3
0646 vadd.i64 q9, q9, q13
0647 vshl.i64 q13, q13, #26
0648 vadd.i64 q15, q9, q3
0649 vsub.i64 q0, q0, q4
0650 vshr.s64 q4, q14, #25
0651 vsub.i64 q5, q5, q13
0652 vshr.s64 q13, q15, #25
0653 vadd.i64 q6, q6, q4
0654 vshl.i64 q4, q4, #25
0655 vadd.i64 q14, q6, q11
0656 vadd.i64 q2, q2, q13
0657 vsub.i64 q4, q7, q4
0658 vshr.s64 q7, q14, #26
0659 vshl.i64 q13, q13, #25
0660 vadd.i64 q14, q2, q11
0661 vadd.i64 q8, q8, q7
0662 vshl.i64 q7, q7, #26
0663 vadd.i64 q15, q8, q3
0664 vsub.i64 q9, q9, q13
0665 vshr.s64 q13, q14, #26
0666 vsub.i64 q6, q6, q7
0667 vshr.s64 q7, q15, #25
0668 vadd.i64 q10, q10, q13
0669 vshl.i64 q13, q13, #26
0670 vadd.i64 q14, q10, q3
0671 vadd.i64 q1, q1, q7
0672 add r2, r3, #144
0673 vshl.i64 q7, q7, #25
0674 add r4, r3, #96
0675 vadd.i64 q15, q1, q11
0676 add r2, r2, #8
0677 vsub.i64 q2, q2, q13
0678 add r4, r4, #8
0679 vshr.s64 q13, q14, #25
0680 vsub.i64 q7, q8, q7
0681 vshr.s64 q8, q15, #26
0682 vadd.i64 q14, q13, q13
0683 vadd.i64 q12, q12, q8
0684 vtrn.32 d12, d14
0685 vshl.i64 q8, q8, #26
0686 vtrn.32 d13, d15
0687 vadd.i64 q3, q12, q3
0688 vadd.i64 q0, q0, q14
0689 vst1.8 d12, [r2, : 64]!
0690 vshl.i64 q7, q13, #4
0691 vst1.8 d13, [r4, : 64]!
0692 vsub.i64 q1, q1, q8
0693 vshr.s64 q3, q3, #25
0694 vadd.i64 q0, q0, q7
0695 vadd.i64 q5, q5, q3
0696 vshl.i64 q3, q3, #25
0697 vadd.i64 q6, q5, q11
0698 vadd.i64 q0, q0, q13
0699 vshl.i64 q7, q13, #25
0700 vadd.i64 q8, q0, q11
0701 vsub.i64 q3, q12, q3
0702 vshr.s64 q6, q6, #26
0703 vsub.i64 q7, q10, q7
0704 vtrn.32 d2, d6
0705 vshr.s64 q8, q8, #26
0706 vtrn.32 d3, d7
0707 vadd.i64 q3, q9, q6
0708 vst1.8 d2, [r2, : 64]
0709 vshl.i64 q6, q6, #26
0710 vst1.8 d3, [r4, : 64]
0711 vadd.i64 q1, q4, q8
0712 vtrn.32 d4, d14
0713 vshl.i64 q4, q8, #26
0714 vtrn.32 d5, d15
0715 vsub.i64 q5, q5, q6
0716 add r2, r2, #16
0717 vsub.i64 q0, q0, q4
0718 vst1.8 d4, [r2, : 64]
0719 add r4, r4, #16
0720 vst1.8 d5, [r4, : 64]
0721 vtrn.32 d10, d6
0722 vtrn.32 d11, d7
0723 sub r2, r2, #8
0724 sub r4, r4, #8
0725 vtrn.32 d0, d2
0726 vtrn.32 d1, d3
0727 vst1.8 d10, [r2, : 64]
0728 vst1.8 d11, [r4, : 64]
0729 sub r2, r2, #24
0730 sub r4, r4, #24
0731 vst1.8 d0, [r2, : 64]
0732 vst1.8 d1, [r4, : 64]
0733 add r2, r3, #288
0734 add r4, r3, #336
0735 vld1.8 {d0-d1}, [r2, : 128]!
0736 vld1.8 {d2-d3}, [r4, : 128]!
0737 vsub.i32 q0, q0, q1
0738 vld1.8 {d2-d3}, [r2, : 128]!
0739 vld1.8 {d4-d5}, [r4, : 128]!
0740 vsub.i32 q1, q1, q2
0741 add r5, r3, #240
0742 vld1.8 {d4}, [r2, : 64]
0743 vld1.8 {d6}, [r4, : 64]
0744 vsub.i32 q2, q2, q3
0745 vst1.8 {d0-d1}, [r5, : 128]!
0746 vst1.8 {d2-d3}, [r5, : 128]!
0747 vst1.8 d4, [r5, : 64]
0748 add r2, r3, #144
0749 add r4, r3, #96
0750 add r5, r3, #144
0751 add r6, r3, #192
0752 vld1.8 {d0-d1}, [r2, : 128]!
0753 vld1.8 {d2-d3}, [r4, : 128]!
0754 vsub.i32 q2, q0, q1
0755 vadd.i32 q0, q0, q1
0756 vld1.8 {d2-d3}, [r2, : 128]!
0757 vld1.8 {d6-d7}, [r4, : 128]!
0758 vsub.i32 q4, q1, q3
0759 vadd.i32 q1, q1, q3
0760 vld1.8 {d6}, [r2, : 64]
0761 vld1.8 {d10}, [r4, : 64]
0762 vsub.i32 q6, q3, q5
0763 vadd.i32 q3, q3, q5
0764 vst1.8 {d4-d5}, [r5, : 128]!
0765 vst1.8 {d0-d1}, [r6, : 128]!
0766 vst1.8 {d8-d9}, [r5, : 128]!
0767 vst1.8 {d2-d3}, [r6, : 128]!
0768 vst1.8 d12, [r5, : 64]
0769 vst1.8 d6, [r6, : 64]
0770 add r2, r3, #0
0771 add r4, r3, #240
0772 vld1.8 {d0-d1}, [r4, : 128]!
0773 vld1.8 {d2-d3}, [r4, : 128]!
0774 vld1.8 {d4}, [r4, : 64]
0775 add r4, r3, #336
0776 vld1.8 {d6-d7}, [r4, : 128]!
0777 vtrn.32 q0, q3
0778 vld1.8 {d8-d9}, [r4, : 128]!
0779 vshl.i32 q5, q0, #4
0780 vtrn.32 q1, q4
0781 vshl.i32 q6, q3, #4
0782 vadd.i32 q5, q5, q0
0783 vadd.i32 q6, q6, q3
0784 vshl.i32 q7, q1, #4
0785 vld1.8 {d5}, [r4, : 64]
0786 vshl.i32 q8, q4, #4
0787 vtrn.32 d4, d5
0788 vadd.i32 q7, q7, q1
0789 vadd.i32 q8, q8, q4
0790 vld1.8 {d18-d19}, [r2, : 128]!
0791 vshl.i32 q10, q2, #4
0792 vld1.8 {d22-d23}, [r2, : 128]!
0793 vadd.i32 q10, q10, q2
0794 vld1.8 {d24}, [r2, : 64]
0795 vadd.i32 q5, q5, q0
0796 add r2, r3, #288
0797 vld1.8 {d26-d27}, [r2, : 128]!
0798 vadd.i32 q6, q6, q3
0799 vld1.8 {d28-d29}, [r2, : 128]!
0800 vadd.i32 q8, q8, q4
0801 vld1.8 {d25}, [r2, : 64]
0802 vadd.i32 q10, q10, q2
0803 vtrn.32 q9, q13
0804 vadd.i32 q7, q7, q1
0805 vadd.i32 q5, q5, q0
0806 vtrn.32 q11, q14
0807 vadd.i32 q6, q6, q3
0808 add r2, sp, #528
0809 vadd.i32 q10, q10, q2
0810 vtrn.32 d24, d25
0811 vst1.8 {d12-d13}, [r2, : 128]!
0812 vshl.i32 q6, q13, #1
0813 vst1.8 {d20-d21}, [r2, : 128]!
0814 vshl.i32 q10, q14, #1
0815 vst1.8 {d12-d13}, [r2, : 128]!
0816 vshl.i32 q15, q12, #1
0817 vadd.i32 q8, q8, q4
0818 vext.32 d10, d31, d30, #0
0819 vadd.i32 q7, q7, q1
0820 vst1.8 {d16-d17}, [r2, : 128]!
0821 vmull.s32 q8, d18, d5
0822 vmlal.s32 q8, d26, d4
0823 vmlal.s32 q8, d19, d9
0824 vmlal.s32 q8, d27, d3
0825 vmlal.s32 q8, d22, d8
0826 vmlal.s32 q8, d28, d2
0827 vmlal.s32 q8, d23, d7
0828 vmlal.s32 q8, d29, d1
0829 vmlal.s32 q8, d24, d6
0830 vmlal.s32 q8, d25, d0
0831 vst1.8 {d14-d15}, [r2, : 128]!
0832 vmull.s32 q2, d18, d4
0833 vmlal.s32 q2, d12, d9
0834 vmlal.s32 q2, d13, d8
0835 vmlal.s32 q2, d19, d3
0836 vmlal.s32 q2, d22, d2
0837 vmlal.s32 q2, d23, d1
0838 vmlal.s32 q2, d24, d0
0839 vst1.8 {d20-d21}, [r2, : 128]!
0840 vmull.s32 q7, d18, d9
0841 vmlal.s32 q7, d26, d3
0842 vmlal.s32 q7, d19, d8
0843 vmlal.s32 q7, d27, d2
0844 vmlal.s32 q7, d22, d7
0845 vmlal.s32 q7, d28, d1
0846 vmlal.s32 q7, d23, d6
0847 vmlal.s32 q7, d29, d0
0848 vst1.8 {d10-d11}, [r2, : 128]!
0849 vmull.s32 q5, d18, d3
0850 vmlal.s32 q5, d19, d2
0851 vmlal.s32 q5, d22, d1
0852 vmlal.s32 q5, d23, d0
0853 vmlal.s32 q5, d12, d8
0854 vst1.8 {d16-d17}, [r2, : 128]!
0855 vmull.s32 q4, d18, d8
0856 vmlal.s32 q4, d26, d2
0857 vmlal.s32 q4, d19, d7
0858 vmlal.s32 q4, d27, d1
0859 vmlal.s32 q4, d22, d6
0860 vmlal.s32 q4, d28, d0
0861 vmull.s32 q8, d18, d7
0862 vmlal.s32 q8, d26, d1
0863 vmlal.s32 q8, d19, d6
0864 vmlal.s32 q8, d27, d0
0865 add r2, sp, #544
0866 vld1.8 {d20-d21}, [r2, : 128]
0867 vmlal.s32 q7, d24, d21
0868 vmlal.s32 q7, d25, d20
0869 vmlal.s32 q4, d23, d21
0870 vmlal.s32 q4, d29, d20
0871 vmlal.s32 q8, d22, d21
0872 vmlal.s32 q8, d28, d20
0873 vmlal.s32 q5, d24, d20
0874 vst1.8 {d14-d15}, [r2, : 128]
0875 vmull.s32 q7, d18, d6
0876 vmlal.s32 q7, d26, d0
0877 add r2, sp, #624
0878 vld1.8 {d30-d31}, [r2, : 128]
0879 vmlal.s32 q2, d30, d21
0880 vmlal.s32 q7, d19, d21
0881 vmlal.s32 q7, d27, d20
0882 add r2, sp, #592
0883 vld1.8 {d26-d27}, [r2, : 128]
0884 vmlal.s32 q4, d25, d27
0885 vmlal.s32 q8, d29, d27
0886 vmlal.s32 q8, d25, d26
0887 vmlal.s32 q7, d28, d27
0888 vmlal.s32 q7, d29, d26
0889 add r2, sp, #576
0890 vld1.8 {d28-d29}, [r2, : 128]
0891 vmlal.s32 q4, d24, d29
0892 vmlal.s32 q8, d23, d29
0893 vmlal.s32 q8, d24, d28
0894 vmlal.s32 q7, d22, d29
0895 vmlal.s32 q7, d23, d28
0896 vst1.8 {d8-d9}, [r2, : 128]
0897 add r2, sp, #528
0898 vld1.8 {d8-d9}, [r2, : 128]
0899 vmlal.s32 q7, d24, d9
0900 vmlal.s32 q7, d25, d31
0901 vmull.s32 q1, d18, d2
0902 vmlal.s32 q1, d19, d1
0903 vmlal.s32 q1, d22, d0
0904 vmlal.s32 q1, d24, d27
0905 vmlal.s32 q1, d23, d20
0906 vmlal.s32 q1, d12, d7
0907 vmlal.s32 q1, d13, d6
0908 vmull.s32 q6, d18, d1
0909 vmlal.s32 q6, d19, d0
0910 vmlal.s32 q6, d23, d27
0911 vmlal.s32 q6, d22, d20
0912 vmlal.s32 q6, d24, d26
0913 vmull.s32 q0, d18, d0
0914 vmlal.s32 q0, d22, d27
0915 vmlal.s32 q0, d23, d26
0916 vmlal.s32 q0, d24, d31
0917 vmlal.s32 q0, d19, d20
0918 add r2, sp, #608
0919 vld1.8 {d18-d19}, [r2, : 128]
0920 vmlal.s32 q2, d18, d7
0921 vmlal.s32 q5, d18, d6
0922 vmlal.s32 q1, d18, d21
0923 vmlal.s32 q0, d18, d28
0924 vmlal.s32 q6, d18, d29
0925 vmlal.s32 q2, d19, d6
0926 vmlal.s32 q5, d19, d21
0927 vmlal.s32 q1, d19, d29
0928 vmlal.s32 q0, d19, d9
0929 vmlal.s32 q6, d19, d28
0930 add r2, sp, #560
0931 vld1.8 {d18-d19}, [r2, : 128]
0932 add r2, sp, #480
0933 vld1.8 {d22-d23}, [r2, : 128]
0934 vmlal.s32 q5, d19, d7
0935 vmlal.s32 q0, d18, d21
0936 vmlal.s32 q0, d19, d29
0937 vmlal.s32 q6, d18, d6
0938 add r2, sp, #496
0939 vld1.8 {d6-d7}, [r2, : 128]
0940 vmlal.s32 q6, d19, d21
0941 add r2, sp, #544
0942 vld1.8 {d18-d19}, [r2, : 128]
0943 vmlal.s32 q0, d30, d8
0944 add r2, sp, #640
0945 vld1.8 {d20-d21}, [r2, : 128]
0946 vmlal.s32 q5, d30, d29
0947 add r2, sp, #576
0948 vld1.8 {d24-d25}, [r2, : 128]
0949 vmlal.s32 q1, d30, d28
0950 vadd.i64 q13, q0, q11
0951 vadd.i64 q14, q5, q11
0952 vmlal.s32 q6, d30, d9
0953 vshr.s64 q4, q13, #26
0954 vshr.s64 q13, q14, #26
0955 vadd.i64 q7, q7, q4
0956 vshl.i64 q4, q4, #26
0957 vadd.i64 q14, q7, q3
0958 vadd.i64 q9, q9, q13
0959 vshl.i64 q13, q13, #26
0960 vadd.i64 q15, q9, q3
0961 vsub.i64 q0, q0, q4
0962 vshr.s64 q4, q14, #25
0963 vsub.i64 q5, q5, q13
0964 vshr.s64 q13, q15, #25
0965 vadd.i64 q6, q6, q4
0966 vshl.i64 q4, q4, #25
0967 vadd.i64 q14, q6, q11
0968 vadd.i64 q2, q2, q13
0969 vsub.i64 q4, q7, q4
0970 vshr.s64 q7, q14, #26
0971 vshl.i64 q13, q13, #25
0972 vadd.i64 q14, q2, q11
0973 vadd.i64 q8, q8, q7
0974 vshl.i64 q7, q7, #26
0975 vadd.i64 q15, q8, q3
0976 vsub.i64 q9, q9, q13
0977 vshr.s64 q13, q14, #26
0978 vsub.i64 q6, q6, q7
0979 vshr.s64 q7, q15, #25
0980 vadd.i64 q10, q10, q13
0981 vshl.i64 q13, q13, #26
0982 vadd.i64 q14, q10, q3
0983 vadd.i64 q1, q1, q7
0984 add r2, r3, #288
0985 vshl.i64 q7, q7, #25
0986 add r4, r3, #96
0987 vadd.i64 q15, q1, q11
0988 add r2, r2, #8
0989 vsub.i64 q2, q2, q13
0990 add r4, r4, #8
0991 vshr.s64 q13, q14, #25
0992 vsub.i64 q7, q8, q7
0993 vshr.s64 q8, q15, #26
0994 vadd.i64 q14, q13, q13
0995 vadd.i64 q12, q12, q8
0996 vtrn.32 d12, d14
0997 vshl.i64 q8, q8, #26
0998 vtrn.32 d13, d15
0999 vadd.i64 q3, q12, q3
1000 vadd.i64 q0, q0, q14
1001 vst1.8 d12, [r2, : 64]!
1002 vshl.i64 q7, q13, #4
1003 vst1.8 d13, [r4, : 64]!
1004 vsub.i64 q1, q1, q8
1005 vshr.s64 q3, q3, #25
1006 vadd.i64 q0, q0, q7
1007 vadd.i64 q5, q5, q3
1008 vshl.i64 q3, q3, #25
1009 vadd.i64 q6, q5, q11
1010 vadd.i64 q0, q0, q13
1011 vshl.i64 q7, q13, #25
1012 vadd.i64 q8, q0, q11
1013 vsub.i64 q3, q12, q3
1014 vshr.s64 q6, q6, #26
1015 vsub.i64 q7, q10, q7
1016 vtrn.32 d2, d6
1017 vshr.s64 q8, q8, #26
1018 vtrn.32 d3, d7
1019 vadd.i64 q3, q9, q6
1020 vst1.8 d2, [r2, : 64]
1021 vshl.i64 q6, q6, #26
1022 vst1.8 d3, [r4, : 64]
1023 vadd.i64 q1, q4, q8
1024 vtrn.32 d4, d14
1025 vshl.i64 q4, q8, #26
1026 vtrn.32 d5, d15
1027 vsub.i64 q5, q5, q6
1028 add r2, r2, #16
1029 vsub.i64 q0, q0, q4
1030 vst1.8 d4, [r2, : 64]
1031 add r4, r4, #16
1032 vst1.8 d5, [r4, : 64]
1033 vtrn.32 d10, d6
1034 vtrn.32 d11, d7
1035 sub r2, r2, #8
1036 sub r4, r4, #8
1037 vtrn.32 d0, d2
1038 vtrn.32 d1, d3
1039 vst1.8 d10, [r2, : 64]
1040 vst1.8 d11, [r4, : 64]
1041 sub r2, r2, #24
1042 sub r4, r4, #24
1043 vst1.8 d0, [r2, : 64]
1044 vst1.8 d1, [r4, : 64]
1045 add r2, sp, #512
1046 add r4, r3, #144
1047 add r5, r3, #192
1048 vld1.8 {d0-d1}, [r2, : 128]
1049 vld1.8 {d2-d3}, [r4, : 128]!
1050 vld1.8 {d4-d5}, [r5, : 128]!
1051 vzip.i32 q1, q2
1052 vld1.8 {d6-d7}, [r4, : 128]!
1053 vld1.8 {d8-d9}, [r5, : 128]!
1054 vshl.i32 q5, q1, #1
1055 vzip.i32 q3, q4
1056 vshl.i32 q6, q2, #1
1057 vld1.8 {d14}, [r4, : 64]
1058 vshl.i32 q8, q3, #1
1059 vld1.8 {d15}, [r5, : 64]
1060 vshl.i32 q9, q4, #1
1061 vmul.i32 d21, d7, d1
1062 vtrn.32 d14, d15
1063 vmul.i32 q11, q4, q0
1064 vmul.i32 q0, q7, q0
1065 vmull.s32 q12, d2, d2
1066 vmlal.s32 q12, d11, d1
1067 vmlal.s32 q12, d12, d0
1068 vmlal.s32 q12, d13, d23
1069 vmlal.s32 q12, d16, d22
1070 vmlal.s32 q12, d7, d21
1071 vmull.s32 q10, d2, d11
1072 vmlal.s32 q10, d4, d1
1073 vmlal.s32 q10, d13, d0
1074 vmlal.s32 q10, d6, d23
1075 vmlal.s32 q10, d17, d22
1076 vmull.s32 q13, d10, d4
1077 vmlal.s32 q13, d11, d3
1078 vmlal.s32 q13, d13, d1
1079 vmlal.s32 q13, d16, d0
1080 vmlal.s32 q13, d17, d23
1081 vmlal.s32 q13, d8, d22
1082 vmull.s32 q1, d10, d5
1083 vmlal.s32 q1, d11, d4
1084 vmlal.s32 q1, d6, d1
1085 vmlal.s32 q1, d17, d0
1086 vmlal.s32 q1, d8, d23
1087 vmull.s32 q14, d10, d6
1088 vmlal.s32 q14, d11, d13
1089 vmlal.s32 q14, d4, d4
1090 vmlal.s32 q14, d17, d1
1091 vmlal.s32 q14, d18, d0
1092 vmlal.s32 q14, d9, d23
1093 vmull.s32 q11, d10, d7
1094 vmlal.s32 q11, d11, d6
1095 vmlal.s32 q11, d12, d5
1096 vmlal.s32 q11, d8, d1
1097 vmlal.s32 q11, d19, d0
1098 vmull.s32 q15, d10, d8
1099 vmlal.s32 q15, d11, d17
1100 vmlal.s32 q15, d12, d6
1101 vmlal.s32 q15, d13, d5
1102 vmlal.s32 q15, d19, d1
1103 vmlal.s32 q15, d14, d0
1104 vmull.s32 q2, d10, d9
1105 vmlal.s32 q2, d11, d8
1106 vmlal.s32 q2, d12, d7
1107 vmlal.s32 q2, d13, d6
1108 vmlal.s32 q2, d14, d1
1109 vmull.s32 q0, d15, d1
1110 vmlal.s32 q0, d10, d14
1111 vmlal.s32 q0, d11, d19
1112 vmlal.s32 q0, d12, d8
1113 vmlal.s32 q0, d13, d17
1114 vmlal.s32 q0, d6, d6
1115 add r2, sp, #480
1116 vld1.8 {d18-d19}, [r2, : 128]!
1117 vmull.s32 q3, d16, d7
1118 vmlal.s32 q3, d10, d15
1119 vmlal.s32 q3, d11, d14
1120 vmlal.s32 q3, d12, d9
1121 vmlal.s32 q3, d13, d8
1122 vld1.8 {d8-d9}, [r2, : 128]
1123 vadd.i64 q5, q12, q9
1124 vadd.i64 q6, q15, q9
1125 vshr.s64 q5, q5, #26
1126 vshr.s64 q6, q6, #26
1127 vadd.i64 q7, q10, q5
1128 vshl.i64 q5, q5, #26
1129 vadd.i64 q8, q7, q4
1130 vadd.i64 q2, q2, q6
1131 vshl.i64 q6, q6, #26
1132 vadd.i64 q10, q2, q4
1133 vsub.i64 q5, q12, q5
1134 vshr.s64 q8, q8, #25
1135 vsub.i64 q6, q15, q6
1136 vshr.s64 q10, q10, #25
1137 vadd.i64 q12, q13, q8
1138 vshl.i64 q8, q8, #25
1139 vadd.i64 q13, q12, q9
1140 vadd.i64 q0, q0, q10
1141 vsub.i64 q7, q7, q8
1142 vshr.s64 q8, q13, #26
1143 vshl.i64 q10, q10, #25
1144 vadd.i64 q13, q0, q9
1145 vadd.i64 q1, q1, q8
1146 vshl.i64 q8, q8, #26
1147 vadd.i64 q15, q1, q4
1148 vsub.i64 q2, q2, q10
1149 vshr.s64 q10, q13, #26
1150 vsub.i64 q8, q12, q8
1151 vshr.s64 q12, q15, #25
1152 vadd.i64 q3, q3, q10
1153 vshl.i64 q10, q10, #26
1154 vadd.i64 q13, q3, q4
1155 vadd.i64 q14, q14, q12
1156 add r2, r3, #144
1157 vshl.i64 q12, q12, #25
1158 add r4, r3, #192
1159 vadd.i64 q15, q14, q9
1160 add r2, r2, #8
1161 vsub.i64 q0, q0, q10
1162 add r4, r4, #8
1163 vshr.s64 q10, q13, #25
1164 vsub.i64 q1, q1, q12
1165 vshr.s64 q12, q15, #26
1166 vadd.i64 q13, q10, q10
1167 vadd.i64 q11, q11, q12
1168 vtrn.32 d16, d2
1169 vshl.i64 q12, q12, #26
1170 vtrn.32 d17, d3
1171 vadd.i64 q1, q11, q4
1172 vadd.i64 q4, q5, q13
1173 vst1.8 d16, [r2, : 64]!
1174 vshl.i64 q5, q10, #4
1175 vst1.8 d17, [r4, : 64]!
1176 vsub.i64 q8, q14, q12
1177 vshr.s64 q1, q1, #25
1178 vadd.i64 q4, q4, q5
1179 vadd.i64 q5, q6, q1
1180 vshl.i64 q1, q1, #25
1181 vadd.i64 q6, q5, q9
1182 vadd.i64 q4, q4, q10
1183 vshl.i64 q10, q10, #25
1184 vadd.i64 q9, q4, q9
1185 vsub.i64 q1, q11, q1
1186 vshr.s64 q6, q6, #26
1187 vsub.i64 q3, q3, q10
1188 vtrn.32 d16, d2
1189 vshr.s64 q9, q9, #26
1190 vtrn.32 d17, d3
1191 vadd.i64 q1, q2, q6
1192 vst1.8 d16, [r2, : 64]
1193 vshl.i64 q2, q6, #26
1194 vst1.8 d17, [r4, : 64]
1195 vadd.i64 q6, q7, q9
1196 vtrn.32 d0, d6
1197 vshl.i64 q7, q9, #26
1198 vtrn.32 d1, d7
1199 vsub.i64 q2, q5, q2
1200 add r2, r2, #16
1201 vsub.i64 q3, q4, q7
1202 vst1.8 d0, [r2, : 64]
1203 add r4, r4, #16
1204 vst1.8 d1, [r4, : 64]
1205 vtrn.32 d4, d2
1206 vtrn.32 d5, d3
1207 sub r2, r2, #8
1208 sub r4, r4, #8
1209 vtrn.32 d6, d12
1210 vtrn.32 d7, d13
1211 vst1.8 d4, [r2, : 64]
1212 vst1.8 d5, [r4, : 64]
1213 sub r2, r2, #24
1214 sub r4, r4, #24
1215 vst1.8 d6, [r2, : 64]
1216 vst1.8 d7, [r4, : 64]
1217 add r2, r3, #336
1218 add r4, r3, #288
1219 vld1.8 {d0-d1}, [r2, : 128]!
1220 vld1.8 {d2-d3}, [r4, : 128]!
1221 vadd.i32 q0, q0, q1
1222 vld1.8 {d2-d3}, [r2, : 128]!
1223 vld1.8 {d4-d5}, [r4, : 128]!
1224 vadd.i32 q1, q1, q2
1225 add r5, r3, #288
1226 vld1.8 {d4}, [r2, : 64]
1227 vld1.8 {d6}, [r4, : 64]
1228 vadd.i32 q2, q2, q3
1229 vst1.8 {d0-d1}, [r5, : 128]!
1230 vst1.8 {d2-d3}, [r5, : 128]!
1231 vst1.8 d4, [r5, : 64]
1232 add r2, r3, #48
1233 add r4, r3, #144
1234 vld1.8 {d0-d1}, [r4, : 128]!
1235 vld1.8 {d2-d3}, [r4, : 128]!
1236 vld1.8 {d4}, [r4, : 64]
1237 add r4, r3, #288
1238 vld1.8 {d6-d7}, [r4, : 128]!
1239 vtrn.32 q0, q3
1240 vld1.8 {d8-d9}, [r4, : 128]!
1241 vshl.i32 q5, q0, #4
1242 vtrn.32 q1, q4
1243 vshl.i32 q6, q3, #4
1244 vadd.i32 q5, q5, q0
1245 vadd.i32 q6, q6, q3
1246 vshl.i32 q7, q1, #4
1247 vld1.8 {d5}, [r4, : 64]
1248 vshl.i32 q8, q4, #4
1249 vtrn.32 d4, d5
1250 vadd.i32 q7, q7, q1
1251 vadd.i32 q8, q8, q4
1252 vld1.8 {d18-d19}, [r2, : 128]!
1253 vshl.i32 q10, q2, #4
1254 vld1.8 {d22-d23}, [r2, : 128]!
1255 vadd.i32 q10, q10, q2
1256 vld1.8 {d24}, [r2, : 64]
1257 vadd.i32 q5, q5, q0
1258 add r2, r3, #240
1259 vld1.8 {d26-d27}, [r2, : 128]!
1260 vadd.i32 q6, q6, q3
1261 vld1.8 {d28-d29}, [r2, : 128]!
1262 vadd.i32 q8, q8, q4
1263 vld1.8 {d25}, [r2, : 64]
1264 vadd.i32 q10, q10, q2
1265 vtrn.32 q9, q13
1266 vadd.i32 q7, q7, q1
1267 vadd.i32 q5, q5, q0
1268 vtrn.32 q11, q14
1269 vadd.i32 q6, q6, q3
1270 add r2, sp, #528
1271 vadd.i32 q10, q10, q2
1272 vtrn.32 d24, d25
1273 vst1.8 {d12-d13}, [r2, : 128]!
1274 vshl.i32 q6, q13, #1
1275 vst1.8 {d20-d21}, [r2, : 128]!
1276 vshl.i32 q10, q14, #1
1277 vst1.8 {d12-d13}, [r2, : 128]!
1278 vshl.i32 q15, q12, #1
1279 vadd.i32 q8, q8, q4
1280 vext.32 d10, d31, d30, #0
1281 vadd.i32 q7, q7, q1
1282 vst1.8 {d16-d17}, [r2, : 128]!
1283 vmull.s32 q8, d18, d5
1284 vmlal.s32 q8, d26, d4
1285 vmlal.s32 q8, d19, d9
1286 vmlal.s32 q8, d27, d3
1287 vmlal.s32 q8, d22, d8
1288 vmlal.s32 q8, d28, d2
1289 vmlal.s32 q8, d23, d7
1290 vmlal.s32 q8, d29, d1
1291 vmlal.s32 q8, d24, d6
1292 vmlal.s32 q8, d25, d0
1293 vst1.8 {d14-d15}, [r2, : 128]!
1294 vmull.s32 q2, d18, d4
1295 vmlal.s32 q2, d12, d9
1296 vmlal.s32 q2, d13, d8
1297 vmlal.s32 q2, d19, d3
1298 vmlal.s32 q2, d22, d2
1299 vmlal.s32 q2, d23, d1
1300 vmlal.s32 q2, d24, d0
1301 vst1.8 {d20-d21}, [r2, : 128]!
1302 vmull.s32 q7, d18, d9
1303 vmlal.s32 q7, d26, d3
1304 vmlal.s32 q7, d19, d8
1305 vmlal.s32 q7, d27, d2
1306 vmlal.s32 q7, d22, d7
1307 vmlal.s32 q7, d28, d1
1308 vmlal.s32 q7, d23, d6
1309 vmlal.s32 q7, d29, d0
1310 vst1.8 {d10-d11}, [r2, : 128]!
1311 vmull.s32 q5, d18, d3
1312 vmlal.s32 q5, d19, d2
1313 vmlal.s32 q5, d22, d1
1314 vmlal.s32 q5, d23, d0
1315 vmlal.s32 q5, d12, d8
1316 vst1.8 {d16-d17}, [r2, : 128]!
1317 vmull.s32 q4, d18, d8
1318 vmlal.s32 q4, d26, d2
1319 vmlal.s32 q4, d19, d7
1320 vmlal.s32 q4, d27, d1
1321 vmlal.s32 q4, d22, d6
1322 vmlal.s32 q4, d28, d0
1323 vmull.s32 q8, d18, d7
1324 vmlal.s32 q8, d26, d1
1325 vmlal.s32 q8, d19, d6
1326 vmlal.s32 q8, d27, d0
1327 add r2, sp, #544
1328 vld1.8 {d20-d21}, [r2, : 128]
1329 vmlal.s32 q7, d24, d21
1330 vmlal.s32 q7, d25, d20
1331 vmlal.s32 q4, d23, d21
1332 vmlal.s32 q4, d29, d20
1333 vmlal.s32 q8, d22, d21
1334 vmlal.s32 q8, d28, d20
1335 vmlal.s32 q5, d24, d20
1336 vst1.8 {d14-d15}, [r2, : 128]
1337 vmull.s32 q7, d18, d6
1338 vmlal.s32 q7, d26, d0
1339 add r2, sp, #624
1340 vld1.8 {d30-d31}, [r2, : 128]
1341 vmlal.s32 q2, d30, d21
1342 vmlal.s32 q7, d19, d21
1343 vmlal.s32 q7, d27, d20
1344 add r2, sp, #592
1345 vld1.8 {d26-d27}, [r2, : 128]
1346 vmlal.s32 q4, d25, d27
1347 vmlal.s32 q8, d29, d27
1348 vmlal.s32 q8, d25, d26
1349 vmlal.s32 q7, d28, d27
1350 vmlal.s32 q7, d29, d26
1351 add r2, sp, #576
1352 vld1.8 {d28-d29}, [r2, : 128]
1353 vmlal.s32 q4, d24, d29
1354 vmlal.s32 q8, d23, d29
1355 vmlal.s32 q8, d24, d28
1356 vmlal.s32 q7, d22, d29
1357 vmlal.s32 q7, d23, d28
1358 vst1.8 {d8-d9}, [r2, : 128]
1359 add r2, sp, #528
1360 vld1.8 {d8-d9}, [r2, : 128]
1361 vmlal.s32 q7, d24, d9
1362 vmlal.s32 q7, d25, d31
1363 vmull.s32 q1, d18, d2
1364 vmlal.s32 q1, d19, d1
1365 vmlal.s32 q1, d22, d0
1366 vmlal.s32 q1, d24, d27
1367 vmlal.s32 q1, d23, d20
1368 vmlal.s32 q1, d12, d7
1369 vmlal.s32 q1, d13, d6
1370 vmull.s32 q6, d18, d1
1371 vmlal.s32 q6, d19, d0
1372 vmlal.s32 q6, d23, d27
1373 vmlal.s32 q6, d22, d20
1374 vmlal.s32 q6, d24, d26
1375 vmull.s32 q0, d18, d0
1376 vmlal.s32 q0, d22, d27
1377 vmlal.s32 q0, d23, d26
1378 vmlal.s32 q0, d24, d31
1379 vmlal.s32 q0, d19, d20
1380 add r2, sp, #608
1381 vld1.8 {d18-d19}, [r2, : 128]
1382 vmlal.s32 q2, d18, d7
1383 vmlal.s32 q5, d18, d6
1384 vmlal.s32 q1, d18, d21
1385 vmlal.s32 q0, d18, d28
1386 vmlal.s32 q6, d18, d29
1387 vmlal.s32 q2, d19, d6
1388 vmlal.s32 q5, d19, d21
1389 vmlal.s32 q1, d19, d29
1390 vmlal.s32 q0, d19, d9
1391 vmlal.s32 q6, d19, d28
1392 add r2, sp, #560
1393 vld1.8 {d18-d19}, [r2, : 128]
1394 add r2, sp, #480
1395 vld1.8 {d22-d23}, [r2, : 128]
1396 vmlal.s32 q5, d19, d7
1397 vmlal.s32 q0, d18, d21
1398 vmlal.s32 q0, d19, d29
1399 vmlal.s32 q6, d18, d6
1400 add r2, sp, #496
1401 vld1.8 {d6-d7}, [r2, : 128]
1402 vmlal.s32 q6, d19, d21
1403 add r2, sp, #544
1404 vld1.8 {d18-d19}, [r2, : 128]
1405 vmlal.s32 q0, d30, d8
1406 add r2, sp, #640
1407 vld1.8 {d20-d21}, [r2, : 128]
1408 vmlal.s32 q5, d30, d29
1409 add r2, sp, #576
1410 vld1.8 {d24-d25}, [r2, : 128]
1411 vmlal.s32 q1, d30, d28
1412 vadd.i64 q13, q0, q11
1413 vadd.i64 q14, q5, q11
1414 vmlal.s32 q6, d30, d9
1415 vshr.s64 q4, q13, #26
1416 vshr.s64 q13, q14, #26
1417 vadd.i64 q7, q7, q4
1418 vshl.i64 q4, q4, #26
1419 vadd.i64 q14, q7, q3
1420 vadd.i64 q9, q9, q13
1421 vshl.i64 q13, q13, #26
1422 vadd.i64 q15, q9, q3
1423 vsub.i64 q0, q0, q4
1424 vshr.s64 q4, q14, #25
1425 vsub.i64 q5, q5, q13
1426 vshr.s64 q13, q15, #25
1427 vadd.i64 q6, q6, q4
1428 vshl.i64 q4, q4, #25
1429 vadd.i64 q14, q6, q11
1430 vadd.i64 q2, q2, q13
1431 vsub.i64 q4, q7, q4
1432 vshr.s64 q7, q14, #26
1433 vshl.i64 q13, q13, #25
1434 vadd.i64 q14, q2, q11
1435 vadd.i64 q8, q8, q7
1436 vshl.i64 q7, q7, #26
1437 vadd.i64 q15, q8, q3
1438 vsub.i64 q9, q9, q13
1439 vshr.s64 q13, q14, #26
1440 vsub.i64 q6, q6, q7
1441 vshr.s64 q7, q15, #25
1442 vadd.i64 q10, q10, q13
1443 vshl.i64 q13, q13, #26
1444 vadd.i64 q14, q10, q3
1445 vadd.i64 q1, q1, q7
1446 add r2, r3, #240
1447 vshl.i64 q7, q7, #25
1448 add r4, r3, #144
1449 vadd.i64 q15, q1, q11
1450 add r2, r2, #8
1451 vsub.i64 q2, q2, q13
1452 add r4, r4, #8
1453 vshr.s64 q13, q14, #25
1454 vsub.i64 q7, q8, q7
1455 vshr.s64 q8, q15, #26
1456 vadd.i64 q14, q13, q13
1457 vadd.i64 q12, q12, q8
1458 vtrn.32 d12, d14
1459 vshl.i64 q8, q8, #26
1460 vtrn.32 d13, d15
1461 vadd.i64 q3, q12, q3
1462 vadd.i64 q0, q0, q14
1463 vst1.8 d12, [r2, : 64]!
1464 vshl.i64 q7, q13, #4
1465 vst1.8 d13, [r4, : 64]!
1466 vsub.i64 q1, q1, q8
1467 vshr.s64 q3, q3, #25
1468 vadd.i64 q0, q0, q7
1469 vadd.i64 q5, q5, q3
1470 vshl.i64 q3, q3, #25
1471 vadd.i64 q6, q5, q11
1472 vadd.i64 q0, q0, q13
1473 vshl.i64 q7, q13, #25
1474 vadd.i64 q8, q0, q11
1475 vsub.i64 q3, q12, q3
1476 vshr.s64 q6, q6, #26
1477 vsub.i64 q7, q10, q7
1478 vtrn.32 d2, d6
1479 vshr.s64 q8, q8, #26
1480 vtrn.32 d3, d7
1481 vadd.i64 q3, q9, q6
1482 vst1.8 d2, [r2, : 64]
1483 vshl.i64 q6, q6, #26
1484 vst1.8 d3, [r4, : 64]
1485 vadd.i64 q1, q4, q8
1486 vtrn.32 d4, d14
1487 vshl.i64 q4, q8, #26
1488 vtrn.32 d5, d15
1489 vsub.i64 q5, q5, q6
1490 add r2, r2, #16
1491 vsub.i64 q0, q0, q4
1492 vst1.8 d4, [r2, : 64]
1493 add r4, r4, #16
1494 vst1.8 d5, [r4, : 64]
1495 vtrn.32 d10, d6
1496 vtrn.32 d11, d7
1497 sub r2, r2, #8
1498 sub r4, r4, #8
1499 vtrn.32 d0, d2
1500 vtrn.32 d1, d3
1501 vst1.8 d10, [r2, : 64]
1502 vst1.8 d11, [r4, : 64]
1503 sub r2, r2, #24
1504 sub r4, r4, #24
1505 vst1.8 d0, [r2, : 64]
1506 vst1.8 d1, [r4, : 64]
1507 ldr r2, [sp, #456]
1508 ldr r4, [sp, #460]
1509 subs r5, r2, #1
1510 bge .Lmainloop
1511 add r1, r3, #144
1512 add r2, r3, #336
1513 vld1.8 {d0-d1}, [r1, : 128]!
1514 vld1.8 {d2-d3}, [r1, : 128]!
1515 vld1.8 {d4}, [r1, : 64]
1516 vst1.8 {d0-d1}, [r2, : 128]!
1517 vst1.8 {d2-d3}, [r2, : 128]!
1518 vst1.8 d4, [r2, : 64]
1519 movw r1, #0
1520 .Linvertloop:
1521 add r2, r3, #144
1522 movw r4, #0
1523 movw r5, #2
1524 cmp r1, #1
1525 moveq r5, #1
1526 addeq r2, r3, #336
1527 addeq r4, r3, #48
1528 cmp r1, #2
1529 moveq r5, #1
1530 addeq r2, r3, #48
1531 cmp r1, #3
1532 moveq r5, #5
1533 addeq r4, r3, #336
1534 cmp r1, #4
1535 moveq r5, #10
1536 cmp r1, #5
1537 moveq r5, #20
1538 cmp r1, #6
1539 moveq r5, #10
1540 addeq r2, r3, #336
1541 addeq r4, r3, #336
1542 cmp r1, #7
1543 moveq r5, #50
1544 cmp r1, #8
1545 moveq r5, #100
1546 cmp r1, #9
1547 moveq r5, #50
1548 addeq r2, r3, #336
1549 cmp r1, #10
1550 moveq r5, #5
1551 addeq r2, r3, #48
1552 cmp r1, #11
1553 moveq r5, #0
1554 addeq r2, r3, #96
1555 add r6, r3, #144
1556 add r7, r3, #288
1557 vld1.8 {d0-d1}, [r6, : 128]!
1558 vld1.8 {d2-d3}, [r6, : 128]!
1559 vld1.8 {d4}, [r6, : 64]
1560 vst1.8 {d0-d1}, [r7, : 128]!
1561 vst1.8 {d2-d3}, [r7, : 128]!
1562 vst1.8 d4, [r7, : 64]
1563 cmp r5, #0
1564 beq .Lskipsquaringloop
1565 .Lsquaringloop:
1566 add r6, r3, #288
1567 add r7, r3, #288
1568 add r8, r3, #288
1569 vmov.i32 q0, #19
1570 vmov.i32 q1, #0
1571 vmov.i32 q2, #1
1572 vzip.i32 q1, q2
1573 vld1.8 {d4-d5}, [r7, : 128]!
1574 vld1.8 {d6-d7}, [r7, : 128]!
1575 vld1.8 {d9}, [r7, : 64]
1576 vld1.8 {d10-d11}, [r6, : 128]!
1577 add r7, sp, #384
1578 vld1.8 {d12-d13}, [r6, : 128]!
1579 vmul.i32 q7, q2, q0
1580 vld1.8 {d8}, [r6, : 64]
1581 vext.32 d17, d11, d10, #1
1582 vmul.i32 q9, q3, q0
1583 vext.32 d16, d10, d8, #1
1584 vshl.u32 q10, q5, q1
1585 vext.32 d22, d14, d4, #1
1586 vext.32 d24, d18, d6, #1
1587 vshl.u32 q13, q6, q1
1588 vshl.u32 d28, d8, d2
1589 vrev64.i32 d22, d22
1590 vmul.i32 d1, d9, d1
1591 vrev64.i32 d24, d24
1592 vext.32 d29, d8, d13, #1
1593 vext.32 d0, d1, d9, #1
1594 vrev64.i32 d0, d0
1595 vext.32 d2, d9, d1, #1
1596 vext.32 d23, d15, d5, #1
1597 vmull.s32 q4, d20, d4
1598 vrev64.i32 d23, d23
1599 vmlal.s32 q4, d21, d1
1600 vrev64.i32 d2, d2
1601 vmlal.s32 q4, d26, d19
1602 vext.32 d3, d5, d15, #1
1603 vmlal.s32 q4, d27, d18
1604 vrev64.i32 d3, d3
1605 vmlal.s32 q4, d28, d15
1606 vext.32 d14, d12, d11, #1
1607 vmull.s32 q5, d16, d23
1608 vext.32 d15, d13, d12, #1
1609 vmlal.s32 q5, d17, d4
1610 vst1.8 d8, [r7, : 64]!
1611 vmlal.s32 q5, d14, d1
1612 vext.32 d12, d9, d8, #0
1613 vmlal.s32 q5, d15, d19
1614 vmov.i64 d13, #0
1615 vmlal.s32 q5, d29, d18
1616 vext.32 d25, d19, d7, #1
1617 vmlal.s32 q6, d20, d5
1618 vrev64.i32 d25, d25
1619 vmlal.s32 q6, d21, d4
1620 vst1.8 d11, [r7, : 64]!
1621 vmlal.s32 q6, d26, d1
1622 vext.32 d9, d10, d10, #0
1623 vmlal.s32 q6, d27, d19
1624 vmov.i64 d8, #0
1625 vmlal.s32 q6, d28, d18
1626 vmlal.s32 q4, d16, d24
1627 vmlal.s32 q4, d17, d5
1628 vmlal.s32 q4, d14, d4
1629 vst1.8 d12, [r7, : 64]!
1630 vmlal.s32 q4, d15, d1
1631 vext.32 d10, d13, d12, #0
1632 vmlal.s32 q4, d29, d19
1633 vmov.i64 d11, #0
1634 vmlal.s32 q5, d20, d6
1635 vmlal.s32 q5, d21, d5
1636 vmlal.s32 q5, d26, d4
1637 vext.32 d13, d8, d8, #0
1638 vmlal.s32 q5, d27, d1
1639 vmov.i64 d12, #0
1640 vmlal.s32 q5, d28, d19
1641 vst1.8 d9, [r7, : 64]!
1642 vmlal.s32 q6, d16, d25
1643 vmlal.s32 q6, d17, d6
1644 vst1.8 d10, [r7, : 64]
1645 vmlal.s32 q6, d14, d5
1646 vext.32 d8, d11, d10, #0
1647 vmlal.s32 q6, d15, d4
1648 vmov.i64 d9, #0
1649 vmlal.s32 q6, d29, d1
1650 vmlal.s32 q4, d20, d7
1651 vmlal.s32 q4, d21, d6
1652 vmlal.s32 q4, d26, d5
1653 vext.32 d11, d12, d12, #0
1654 vmlal.s32 q4, d27, d4
1655 vmov.i64 d10, #0
1656 vmlal.s32 q4, d28, d1
1657 vmlal.s32 q5, d16, d0
1658 sub r6, r7, #32
1659 vmlal.s32 q5, d17, d7
1660 vmlal.s32 q5, d14, d6
1661 vext.32 d30, d9, d8, #0
1662 vmlal.s32 q5, d15, d5
1663 vld1.8 {d31}, [r6, : 64]!
1664 vmlal.s32 q5, d29, d4
1665 vmlal.s32 q15, d20, d0
1666 vext.32 d0, d6, d18, #1
1667 vmlal.s32 q15, d21, d25
1668 vrev64.i32 d0, d0
1669 vmlal.s32 q15, d26, d24
1670 vext.32 d1, d7, d19, #1
1671 vext.32 d7, d10, d10, #0
1672 vmlal.s32 q15, d27, d23
1673 vrev64.i32 d1, d1
1674 vld1.8 {d6}, [r6, : 64]
1675 vmlal.s32 q15, d28, d22
1676 vmlal.s32 q3, d16, d4
1677 add r6, r6, #24
1678 vmlal.s32 q3, d17, d2
1679 vext.32 d4, d31, d30, #0
1680 vmov d17, d11
1681 vmlal.s32 q3, d14, d1
1682 vext.32 d11, d13, d13, #0
1683 vext.32 d13, d30, d30, #0
1684 vmlal.s32 q3, d15, d0
1685 vext.32 d1, d8, d8, #0
1686 vmlal.s32 q3, d29, d3
1687 vld1.8 {d5}, [r6, : 64]
1688 sub r6, r6, #16
1689 vext.32 d10, d6, d6, #0
1690 vmov.i32 q1, #0xffffffff
1691 vshl.i64 q4, q1, #25
1692 add r7, sp, #480
1693 vld1.8 {d14-d15}, [r7, : 128]
1694 vadd.i64 q9, q2, q7
1695 vshl.i64 q1, q1, #26
1696 vshr.s64 q10, q9, #26
1697 vld1.8 {d0}, [r6, : 64]!
1698 vadd.i64 q5, q5, q10
1699 vand q9, q9, q1
1700 vld1.8 {d16}, [r6, : 64]!
1701 add r6, sp, #496
1702 vld1.8 {d20-d21}, [r6, : 128]
1703 vadd.i64 q11, q5, q10
1704 vsub.i64 q2, q2, q9
1705 vshr.s64 q9, q11, #25
1706 vext.32 d12, d5, d4, #0
1707 vand q11, q11, q4
1708 vadd.i64 q0, q0, q9
1709 vmov d19, d7
1710 vadd.i64 q3, q0, q7
1711 vsub.i64 q5, q5, q11
1712 vshr.s64 q11, q3, #26
1713 vext.32 d18, d11, d10, #0
1714 vand q3, q3, q1
1715 vadd.i64 q8, q8, q11
1716 vadd.i64 q11, q8, q10
1717 vsub.i64 q0, q0, q3
1718 vshr.s64 q3, q11, #25
1719 vand q11, q11, q4
1720 vadd.i64 q3, q6, q3
1721 vadd.i64 q6, q3, q7
1722 vsub.i64 q8, q8, q11
1723 vshr.s64 q11, q6, #26
1724 vand q6, q6, q1
1725 vadd.i64 q9, q9, q11
1726 vadd.i64 d25, d19, d21
1727 vsub.i64 q3, q3, q6
1728 vshr.s64 d23, d25, #25
1729 vand q4, q12, q4
1730 vadd.i64 d21, d23, d23
1731 vshl.i64 d25, d23, #4
1732 vadd.i64 d21, d21, d23
1733 vadd.i64 d25, d25, d21
1734 vadd.i64 d4, d4, d25
1735 vzip.i32 q0, q8
1736 vadd.i64 d12, d4, d14
1737 add r6, r8, #8
1738 vst1.8 d0, [r6, : 64]
1739 vsub.i64 d19, d19, d9
1740 add r6, r6, #16
1741 vst1.8 d16, [r6, : 64]
1742 vshr.s64 d22, d12, #26
1743 vand q0, q6, q1
1744 vadd.i64 d10, d10, d22
1745 vzip.i32 q3, q9
1746 vsub.i64 d4, d4, d0
1747 sub r6, r6, #8
1748 vst1.8 d6, [r6, : 64]
1749 add r6, r6, #16
1750 vst1.8 d18, [r6, : 64]
1751 vzip.i32 q2, q5
1752 sub r6, r6, #32
1753 vst1.8 d4, [r6, : 64]
1754 subs r5, r5, #1
1755 bhi .Lsquaringloop
1756 .Lskipsquaringloop:
1757 mov r2, r2
1758 add r5, r3, #288
1759 add r6, r3, #144
1760 vmov.i32 q0, #19
1761 vmov.i32 q1, #0
1762 vmov.i32 q2, #1
1763 vzip.i32 q1, q2
1764 vld1.8 {d4-d5}, [r5, : 128]!
1765 vld1.8 {d6-d7}, [r5, : 128]!
1766 vld1.8 {d9}, [r5, : 64]
1767 vld1.8 {d10-d11}, [r2, : 128]!
1768 add r5, sp, #384
1769 vld1.8 {d12-d13}, [r2, : 128]!
1770 vmul.i32 q7, q2, q0
1771 vld1.8 {d8}, [r2, : 64]
1772 vext.32 d17, d11, d10, #1
1773 vmul.i32 q9, q3, q0
1774 vext.32 d16, d10, d8, #1
1775 vshl.u32 q10, q5, q1
1776 vext.32 d22, d14, d4, #1
1777 vext.32 d24, d18, d6, #1
1778 vshl.u32 q13, q6, q1
1779 vshl.u32 d28, d8, d2
1780 vrev64.i32 d22, d22
1781 vmul.i32 d1, d9, d1
1782 vrev64.i32 d24, d24
1783 vext.32 d29, d8, d13, #1
1784 vext.32 d0, d1, d9, #1
1785 vrev64.i32 d0, d0
1786 vext.32 d2, d9, d1, #1
1787 vext.32 d23, d15, d5, #1
1788 vmull.s32 q4, d20, d4
1789 vrev64.i32 d23, d23
1790 vmlal.s32 q4, d21, d1
1791 vrev64.i32 d2, d2
1792 vmlal.s32 q4, d26, d19
1793 vext.32 d3, d5, d15, #1
1794 vmlal.s32 q4, d27, d18
1795 vrev64.i32 d3, d3
1796 vmlal.s32 q4, d28, d15
1797 vext.32 d14, d12, d11, #1
1798 vmull.s32 q5, d16, d23
1799 vext.32 d15, d13, d12, #1
1800 vmlal.s32 q5, d17, d4
1801 vst1.8 d8, [r5, : 64]!
1802 vmlal.s32 q5, d14, d1
1803 vext.32 d12, d9, d8, #0
1804 vmlal.s32 q5, d15, d19
1805 vmov.i64 d13, #0
1806 vmlal.s32 q5, d29, d18
1807 vext.32 d25, d19, d7, #1
1808 vmlal.s32 q6, d20, d5
1809 vrev64.i32 d25, d25
1810 vmlal.s32 q6, d21, d4
1811 vst1.8 d11, [r5, : 64]!
1812 vmlal.s32 q6, d26, d1
1813 vext.32 d9, d10, d10, #0
1814 vmlal.s32 q6, d27, d19
1815 vmov.i64 d8, #0
1816 vmlal.s32 q6, d28, d18
1817 vmlal.s32 q4, d16, d24
1818 vmlal.s32 q4, d17, d5
1819 vmlal.s32 q4, d14, d4
1820 vst1.8 d12, [r5, : 64]!
1821 vmlal.s32 q4, d15, d1
1822 vext.32 d10, d13, d12, #0
1823 vmlal.s32 q4, d29, d19
1824 vmov.i64 d11, #0
1825 vmlal.s32 q5, d20, d6
1826 vmlal.s32 q5, d21, d5
1827 vmlal.s32 q5, d26, d4
1828 vext.32 d13, d8, d8, #0
1829 vmlal.s32 q5, d27, d1
1830 vmov.i64 d12, #0
1831 vmlal.s32 q5, d28, d19
1832 vst1.8 d9, [r5, : 64]!
1833 vmlal.s32 q6, d16, d25
1834 vmlal.s32 q6, d17, d6
1835 vst1.8 d10, [r5, : 64]
1836 vmlal.s32 q6, d14, d5
1837 vext.32 d8, d11, d10, #0
1838 vmlal.s32 q6, d15, d4
1839 vmov.i64 d9, #0
1840 vmlal.s32 q6, d29, d1
1841 vmlal.s32 q4, d20, d7
1842 vmlal.s32 q4, d21, d6
1843 vmlal.s32 q4, d26, d5
1844 vext.32 d11, d12, d12, #0
1845 vmlal.s32 q4, d27, d4
1846 vmov.i64 d10, #0
1847 vmlal.s32 q4, d28, d1
1848 vmlal.s32 q5, d16, d0
1849 sub r2, r5, #32
1850 vmlal.s32 q5, d17, d7
1851 vmlal.s32 q5, d14, d6
1852 vext.32 d30, d9, d8, #0
1853 vmlal.s32 q5, d15, d5
1854 vld1.8 {d31}, [r2, : 64]!
1855 vmlal.s32 q5, d29, d4
1856 vmlal.s32 q15, d20, d0
1857 vext.32 d0, d6, d18, #1
1858 vmlal.s32 q15, d21, d25
1859 vrev64.i32 d0, d0
1860 vmlal.s32 q15, d26, d24
1861 vext.32 d1, d7, d19, #1
1862 vext.32 d7, d10, d10, #0
1863 vmlal.s32 q15, d27, d23
1864 vrev64.i32 d1, d1
1865 vld1.8 {d6}, [r2, : 64]
1866 vmlal.s32 q15, d28, d22
1867 vmlal.s32 q3, d16, d4
1868 add r2, r2, #24
1869 vmlal.s32 q3, d17, d2
1870 vext.32 d4, d31, d30, #0
1871 vmov d17, d11
1872 vmlal.s32 q3, d14, d1
1873 vext.32 d11, d13, d13, #0
1874 vext.32 d13, d30, d30, #0
1875 vmlal.s32 q3, d15, d0
1876 vext.32 d1, d8, d8, #0
1877 vmlal.s32 q3, d29, d3
1878 vld1.8 {d5}, [r2, : 64]
1879 sub r2, r2, #16
1880 vext.32 d10, d6, d6, #0
1881 vmov.i32 q1, #0xffffffff
1882 vshl.i64 q4, q1, #25
1883 add r5, sp, #480
1884 vld1.8 {d14-d15}, [r5, : 128]
1885 vadd.i64 q9, q2, q7
1886 vshl.i64 q1, q1, #26
1887 vshr.s64 q10, q9, #26
1888 vld1.8 {d0}, [r2, : 64]!
1889 vadd.i64 q5, q5, q10
1890 vand q9, q9, q1
1891 vld1.8 {d16}, [r2, : 64]!
1892 add r2, sp, #496
1893 vld1.8 {d20-d21}, [r2, : 128]
1894 vadd.i64 q11, q5, q10
1895 vsub.i64 q2, q2, q9
1896 vshr.s64 q9, q11, #25
1897 vext.32 d12, d5, d4, #0
1898 vand q11, q11, q4
1899 vadd.i64 q0, q0, q9
1900 vmov d19, d7
1901 vadd.i64 q3, q0, q7
1902 vsub.i64 q5, q5, q11
1903 vshr.s64 q11, q3, #26
1904 vext.32 d18, d11, d10, #0
1905 vand q3, q3, q1
1906 vadd.i64 q8, q8, q11
1907 vadd.i64 q11, q8, q10
1908 vsub.i64 q0, q0, q3
1909 vshr.s64 q3, q11, #25
1910 vand q11, q11, q4
1911 vadd.i64 q3, q6, q3
1912 vadd.i64 q6, q3, q7
1913 vsub.i64 q8, q8, q11
1914 vshr.s64 q11, q6, #26
1915 vand q6, q6, q1
1916 vadd.i64 q9, q9, q11
1917 vadd.i64 d25, d19, d21
1918 vsub.i64 q3, q3, q6
1919 vshr.s64 d23, d25, #25
1920 vand q4, q12, q4
1921 vadd.i64 d21, d23, d23
1922 vshl.i64 d25, d23, #4
1923 vadd.i64 d21, d21, d23
1924 vadd.i64 d25, d25, d21
1925 vadd.i64 d4, d4, d25
1926 vzip.i32 q0, q8
1927 vadd.i64 d12, d4, d14
1928 add r2, r6, #8
1929 vst1.8 d0, [r2, : 64]
1930 vsub.i64 d19, d19, d9
1931 add r2, r2, #16
1932 vst1.8 d16, [r2, : 64]
1933 vshr.s64 d22, d12, #26
1934 vand q0, q6, q1
1935 vadd.i64 d10, d10, d22
1936 vzip.i32 q3, q9
1937 vsub.i64 d4, d4, d0
1938 sub r2, r2, #8
1939 vst1.8 d6, [r2, : 64]
1940 add r2, r2, #16
1941 vst1.8 d18, [r2, : 64]
1942 vzip.i32 q2, q5
1943 sub r2, r2, #32
1944 vst1.8 d4, [r2, : 64]
1945 cmp r4, #0
1946 beq .Lskippostcopy
1947 add r2, r3, #144
1948 mov r4, r4
1949 vld1.8 {d0-d1}, [r2, : 128]!
1950 vld1.8 {d2-d3}, [r2, : 128]!
1951 vld1.8 {d4}, [r2, : 64]
1952 vst1.8 {d0-d1}, [r4, : 128]!
1953 vst1.8 {d2-d3}, [r4, : 128]!
1954 vst1.8 d4, [r4, : 64]
1955 .Lskippostcopy:
1956 cmp r1, #1
1957 bne .Lskipfinalcopy
1958 add r2, r3, #288
1959 add r4, r3, #144
1960 vld1.8 {d0-d1}, [r2, : 128]!
1961 vld1.8 {d2-d3}, [r2, : 128]!
1962 vld1.8 {d4}, [r2, : 64]
1963 vst1.8 {d0-d1}, [r4, : 128]!
1964 vst1.8 {d2-d3}, [r4, : 128]!
1965 vst1.8 d4, [r4, : 64]
1966 .Lskipfinalcopy:
1967 add r1, r1, #1
1968 cmp r1, #12
1969 blo .Linvertloop
1970 add r1, r3, #144
1971 ldr r2, [r1], #4
1972 ldr r3, [r1], #4
1973 ldr r4, [r1], #4
1974 ldr r5, [r1], #4
1975 ldr r6, [r1], #4
1976 ldr r7, [r1], #4
1977 ldr r8, [r1], #4
1978 ldr r9, [r1], #4
1979 ldr r10, [r1], #4
1980 ldr r1, [r1]
1981 add r11, r1, r1, LSL #4
1982 add r11, r11, r1, LSL #1
1983 add r11, r11, #16777216
1984 mov r11, r11, ASR #25
1985 add r11, r11, r2
1986 mov r11, r11, ASR #26
1987 add r11, r11, r3
1988 mov r11, r11, ASR #25
1989 add r11, r11, r4
1990 mov r11, r11, ASR #26
1991 add r11, r11, r5
1992 mov r11, r11, ASR #25
1993 add r11, r11, r6
1994 mov r11, r11, ASR #26
1995 add r11, r11, r7
1996 mov r11, r11, ASR #25
1997 add r11, r11, r8
1998 mov r11, r11, ASR #26
1999 add r11, r11, r9
2000 mov r11, r11, ASR #25
2001 add r11, r11, r10
2002 mov r11, r11, ASR #26
2003 add r11, r11, r1
2004 mov r11, r11, ASR #25
2005 add r2, r2, r11
2006 add r2, r2, r11, LSL #1
2007 add r2, r2, r11, LSL #4
2008 mov r11, r2, ASR #26
2009 add r3, r3, r11
2010 sub r2, r2, r11, LSL #26
2011 mov r11, r3, ASR #25
2012 add r4, r4, r11
2013 sub r3, r3, r11, LSL #25
2014 mov r11, r4, ASR #26
2015 add r5, r5, r11
2016 sub r4, r4, r11, LSL #26
2017 mov r11, r5, ASR #25
2018 add r6, r6, r11
2019 sub r5, r5, r11, LSL #25
2020 mov r11, r6, ASR #26
2021 add r7, r7, r11
2022 sub r6, r6, r11, LSL #26
2023 mov r11, r7, ASR #25
2024 add r8, r8, r11
2025 sub r7, r7, r11, LSL #25
2026 mov r11, r8, ASR #26
2027 add r9, r9, r11
2028 sub r8, r8, r11, LSL #26
2029 mov r11, r9, ASR #25
2030 add r10, r10, r11
2031 sub r9, r9, r11, LSL #25
2032 mov r11, r10, ASR #26
2033 add r1, r1, r11
2034 sub r10, r10, r11, LSL #26
2035 mov r11, r1, ASR #25
2036 sub r1, r1, r11, LSL #25
2037 add r2, r2, r3, LSL #26
2038 mov r3, r3, LSR #6
2039 add r3, r3, r4, LSL #19
2040 mov r4, r4, LSR #13
2041 add r4, r4, r5, LSL #13
2042 mov r5, r5, LSR #19
2043 add r5, r5, r6, LSL #6
2044 add r6, r7, r8, LSL #25
2045 mov r7, r8, LSR #7
2046 add r7, r7, r9, LSL #19
2047 mov r8, r9, LSR #13
2048 add r8, r8, r10, LSL #12
2049 mov r9, r10, LSR #20
2050 add r1, r9, r1, LSL #6
2051 str r2, [r0]
2052 str r3, [r0, #4]
2053 str r4, [r0, #8]
2054 str r5, [r0, #12]
2055 str r6, [r0, #16]
2056 str r7, [r0, #20]
2057 str r8, [r0, #24]
2058 str r1, [r0, #28]
2059 movw r0, #0
2060 mov sp, ip
2061 pop {r4-r11, pc}
2062 ENDPROC(curve25519_neon)