Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 
 

2123 rader
41 KiB

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