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.

x25519-asm-arm.S 41 KiB

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