Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 
 
 
 

1429 рядки
29 KiB

  1. # Copyright (c) 2014, 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 contains a pre-compiled version of chacha_vec.c for ARM. This is
  15. # needed to support switching on NEON code at runtime. If the whole of OpenSSL
  16. # were to be compiled with the needed flags to build chacha_vec.c, then it
  17. # wouldn't be possible to run on non-NEON systems.
  18. #
  19. # This file was generated by chacha_vec_arm_generate.go using the following
  20. # compiler command:
  21. #
  22. # /opt/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc -O3 -mcpu=cortex-a8 -mfpu=neon -fpic -DASM_GEN -I ../../include -S chacha_vec.c -o -
  23. #if !defined(OPENSSL_NO_ASM)
  24. #if defined(__arm__) || defined(__aarch64__)
  25. .syntax unified
  26. .cpu cortex-a8
  27. .eabi_attribute 27, 3
  28. # EABI attribute 28 sets whether VFP register arguments were used to build this
  29. # file. If object files are inconsistent on this point, the linker will refuse
  30. # to link them. Thus we report whatever the compiler expects since we don't use
  31. # VFP arguments.
  32. #if defined(__ARM_PCS_VFP)
  33. .eabi_attribute 28, 1
  34. #else
  35. .eabi_attribute 28, 0
  36. #endif
  37. .fpu neon
  38. .eabi_attribute 20, 1
  39. .eabi_attribute 21, 1
  40. .eabi_attribute 23, 3
  41. .eabi_attribute 24, 1
  42. .eabi_attribute 25, 1
  43. .eabi_attribute 26, 2
  44. .eabi_attribute 30, 2
  45. .eabi_attribute 34, 1
  46. .eabi_attribute 18, 4
  47. .thumb
  48. .file "chacha_vec.c"
  49. .text
  50. .align 2
  51. .global CRYPTO_chacha_20_neon
  52. .hidden CRYPTO_chacha_20_neon
  53. .thumb
  54. .thumb_func
  55. .type CRYPTO_chacha_20_neon, %function
  56. CRYPTO_chacha_20_neon:
  57. @ args = 8, pretend = 0, frame = 152
  58. @ frame_needed = 1, uses_anonymous_args = 0
  59. push {r4, r5, r6, r7, r8, r9, r10, fp, lr}
  60. mov r8, r3
  61. vpush.64 {d8, d9, d10, d11, d12, d13, d14, d15}
  62. mov r9, r2
  63. ldr r4, .L91+16
  64. mov fp, r0
  65. mov r10, r1
  66. mov lr, r8
  67. .LPIC16:
  68. add r4, pc
  69. sub sp, sp, #156
  70. add r7, sp, #0
  71. sub sp, sp, #112
  72. add r6, r7, #144
  73. str r0, [r7, #88]
  74. str r1, [r7, #12]
  75. str r2, [r7, #8]
  76. ldmia r4, {r0, r1, r2, r3}
  77. add r4, sp, #15
  78. bic r4, r4, #15
  79. ldr ip, [r7, #256]
  80. str r4, [r7, #84]
  81. mov r5, r4
  82. adds r4, r4, #64
  83. adds r5, r5, #80
  84. str r8, [r7, #68]
  85. stmia r4, {r0, r1, r2, r3}
  86. movw r4, #43691
  87. ldr r0, [ip] @ unaligned
  88. movt r4, 43690
  89. ldr r1, [ip, #4] @ unaligned
  90. ldr r3, [r7, #84]
  91. ldr r2, [r8, #8] @ unaligned
  92. mov r8, #0
  93. stmia r6!, {r0, r1}
  94. mov r6, r5
  95. ldr r1, [lr, #4] @ unaligned
  96. ldr r0, [lr] @ unaligned
  97. vldr d24, [r3, #64]
  98. vldr d25, [r3, #72]
  99. ldr r3, [lr, #12] @ unaligned
  100. str r5, [r7, #80]
  101. stmia r5!, {r0, r1, r2, r3}
  102. ldr r0, [lr, #16]! @ unaligned
  103. ldr r2, [r7, #84]
  104. umull r4, r5, r9, r4
  105. vldr d26, [r2, #80]
  106. vldr d27, [r2, #88]
  107. ldr r1, [lr, #4] @ unaligned
  108. ldr r2, [lr, #8] @ unaligned
  109. ldr r3, [lr, #12] @ unaligned
  110. ldr r4, [r7, #260]
  111. stmia r6!, {r0, r1, r2, r3}
  112. ldr r3, [ip]
  113. ldr r1, [r7, #84]
  114. ldr r2, [ip, #4]
  115. str r3, [r7, #64]
  116. vldr d28, [r1, #80]
  117. vldr d29, [r1, #88]
  118. str r3, [r7, #136]
  119. lsrs r3, r5, #7
  120. str r4, [r7, #128]
  121. str r2, [r7, #140]
  122. str r8, [r7, #132]
  123. str r2, [r7, #60]
  124. vldr d22, [r7, #128]
  125. vldr d23, [r7, #136]
  126. beq .L26
  127. lsls r2, r3, #8
  128. ldr r5, [r1, #64]
  129. sub r3, r2, r3, lsl #6
  130. ldr r2, [r1, #68]
  131. vldr d0, .L91
  132. vldr d1, .L91+8
  133. adds r4, r4, #2
  134. str r5, [r7, #56]
  135. str r2, [r7, #52]
  136. ldr r5, [r1, #72]
  137. ldr r2, [r1, #76]
  138. str r3, [r7, #4]
  139. str r5, [r7, #48]
  140. str r2, [r7, #44]
  141. mov r2, fp
  142. str r4, [r7, #72]
  143. adds r3, r2, r3
  144. str r10, [r7, #76]
  145. str r3, [r7, #16]
  146. .L4:
  147. ldr r5, [r7, #68]
  148. add r8, r7, #44
  149. ldr r4, [r7, #72]
  150. vadd.i32 q3, q11, q0
  151. ldmia r8, {r8, r9, r10, fp}
  152. vmov q8, q14 @ v4si
  153. ldr r2, [r5, #4]
  154. vmov q1, q13 @ v4si
  155. ldr r3, [r5]
  156. vmov q9, q12 @ v4si
  157. ldr lr, [r5, #20]
  158. vmov q2, q11 @ v4si
  159. mov r0, r2
  160. ldr r2, [r5, #8]
  161. str r3, [r7, #108]
  162. mov r3, r5
  163. ldr ip, [r5, #16]
  164. vmov q15, q14 @ v4si
  165. mov r1, r2
  166. ldr r2, [r5, #12]
  167. ldr r5, [r5, #24]
  168. vmov q5, q13 @ v4si
  169. ldr r6, [r3, #28]
  170. vmov q10, q12 @ v4si
  171. ldr r3, [r7, #64]
  172. str r5, [r7, #116]
  173. movs r5, #10
  174. str r6, [r7, #120]
  175. str r4, [r7, #112]
  176. ldr r6, [r7, #60]
  177. str r8, [r7, #96]
  178. mov r8, r10
  179. ldr r4, [r7, #108]
  180. mov r10, r9
  181. ldr r9, [r7, #116]
  182. str lr, [r7, #104]
  183. mov lr, r3
  184. str r5, [r7, #92]
  185. movs r5, #0
  186. str r6, [r7, #124]
  187. str r5, [r7, #100]
  188. b .L92
  189. .L93:
  190. .align 3
  191. .L91:
  192. .word 1
  193. .word 0
  194. .word 0
  195. .word 0
  196. .word .LANCHOR0-(.LPIC16+4)
  197. .L92:
  198. .L3:
  199. vadd.i32 q9, q9, q1
  200. add r3, r8, r0
  201. vadd.i32 q10, q10, q5
  202. add r5, fp, r4
  203. veor q3, q3, q9
  204. mov r6, r3
  205. veor q2, q2, q10
  206. ldr r3, [r7, #96]
  207. str r5, [r7, #116]
  208. add r10, r10, r1
  209. vrev32.16 q3, q3
  210. eor lr, lr, r10
  211. vadd.i32 q8, q8, q3
  212. vrev32.16 q2, q2
  213. vadd.i32 q15, q15, q2
  214. mov fp, r3
  215. ldr r3, [r7, #112]
  216. veor q4, q8, q1
  217. str r6, [r7, #112]
  218. veor q6, q15, q5
  219. eors r3, r3, r5
  220. mov r5, r6
  221. ldr r6, [r7, #100]
  222. vshl.i32 q1, q4, #12
  223. vshl.i32 q5, q6, #12
  224. add fp, fp, r2
  225. eors r6, r6, r5
  226. ror r3, r3, #16
  227. vsri.32 q1, q4, #20
  228. ror lr, lr, #16
  229. mov r5, r6
  230. ldr r6, [r7, #124]
  231. vsri.32 q5, q6, #20
  232. str r3, [r7, #124]
  233. eor r6, r6, fp
  234. ror r5, r5, #16
  235. vadd.i32 q9, q9, q1
  236. add r9, r9, lr
  237. ror r3, r6, #16
  238. ldr r6, [r7, #124]
  239. vadd.i32 q10, q10, q5
  240. str r3, [r7, #108]
  241. veor q4, q9, q3
  242. add ip, ip, r6
  243. ldr r6, [r7, #104]
  244. veor q6, q10, q2
  245. eor r4, ip, r4
  246. eor r1, r9, r1
  247. vshl.i32 q3, q4, #8
  248. mov r8, r6
  249. ldr r6, [r7, #120]
  250. vshl.i32 q2, q6, #8
  251. ror r4, r4, #20
  252. add r6, r6, r3
  253. vsri.32 q3, q4, #24
  254. str r6, [r7, #104]
  255. eors r2, r2, r6
  256. ldr r6, [r7, #116]
  257. vsri.32 q2, q6, #24
  258. add r8, r8, r5
  259. ror r2, r2, #20
  260. adds r6, r4, r6
  261. vadd.i32 q4, q8, q3
  262. eor r0, r8, r0
  263. vadd.i32 q15, q15, q2
  264. mov r3, r6
  265. ldr r6, [r7, #112]
  266. veor q6, q4, q1
  267. ror r0, r0, #20
  268. str r3, [r7, #112]
  269. veor q5, q15, q5
  270. adds r6, r0, r6
  271. str r6, [r7, #120]
  272. mov r6, r3
  273. ldr r3, [r7, #124]
  274. vshl.i32 q8, q6, #7
  275. add fp, fp, r2
  276. eors r3, r3, r6
  277. ldr r6, [r7, #120]
  278. vshl.i32 q1, q5, #7
  279. ror r1, r1, #20
  280. eors r5, r5, r6
  281. vsri.32 q8, q6, #25
  282. ldr r6, [r7, #108]
  283. ror r3, r3, #24
  284. ror r5, r5, #24
  285. vsri.32 q1, q5, #25
  286. str r5, [r7, #116]
  287. eor r6, fp, r6
  288. ldr r5, [r7, #116]
  289. add r10, r10, r1
  290. add ip, r3, ip
  291. vext.32 q8, q8, q8, #1
  292. str ip, [r7, #124]
  293. add ip, r5, r8
  294. ldr r5, [r7, #104]
  295. eor lr, r10, lr
  296. ror r6, r6, #24
  297. vext.32 q1, q1, q1, #1
  298. add r8, r6, r5
  299. vadd.i32 q9, q9, q8
  300. ldr r5, [r7, #124]
  301. vext.32 q3, q3, q3, #3
  302. vadd.i32 q10, q10, q1
  303. ror lr, lr, #24
  304. eor r0, ip, r0
  305. vext.32 q2, q2, q2, #3
  306. add r9, r9, lr
  307. eors r4, r4, r5
  308. veor q3, q9, q3
  309. ldr r5, [r7, #112]
  310. eor r1, r9, r1
  311. ror r0, r0, #25
  312. veor q2, q10, q2
  313. adds r5, r0, r5
  314. vext.32 q4, q4, q4, #2
  315. str r5, [r7, #112]
  316. ldr r5, [r7, #120]
  317. ror r1, r1, #25
  318. vrev32.16 q3, q3
  319. eor r2, r8, r2
  320. vext.32 q15, q15, q15, #2
  321. adds r5, r1, r5
  322. vadd.i32 q4, q4, q3
  323. ror r4, r4, #25
  324. vrev32.16 q2, q2
  325. str r5, [r7, #100]
  326. vadd.i32 q15, q15, q2
  327. eors r3, r3, r5
  328. ldr r5, [r7, #112]
  329. add fp, fp, r4
  330. veor q8, q4, q8
  331. ror r2, r2, #25
  332. veor q1, q15, q1
  333. eor lr, fp, lr
  334. eors r6, r6, r5
  335. ror r3, r3, #16
  336. ldr r5, [r7, #116]
  337. add r10, r10, r2
  338. str r3, [r7, #120]
  339. ror lr, lr, #16
  340. ldr r3, [r7, #120]
  341. eor r5, r10, r5
  342. vshl.i32 q5, q8, #12
  343. add ip, lr, ip
  344. vshl.i32 q6, q1, #12
  345. str ip, [r7, #104]
  346. add ip, r3, r8
  347. str ip, [r7, #116]
  348. ldr r3, [r7, #124]
  349. ror r5, r5, #16
  350. vsri.32 q5, q8, #20
  351. ror r6, r6, #16
  352. add ip, r5, r3
  353. ldr r3, [r7, #104]
  354. vsri.32 q6, q1, #20
  355. add r9, r9, r6
  356. eor r2, ip, r2
  357. eors r4, r4, r3
  358. ldr r3, [r7, #116]
  359. eor r0, r9, r0
  360. vadd.i32 q9, q9, q5
  361. ror r4, r4, #20
  362. eors r1, r1, r3
  363. vadd.i32 q10, q10, q6
  364. ror r3, r2, #20
  365. str r3, [r7, #108]
  366. ldr r3, [r7, #112]
  367. veor q3, q9, q3
  368. ror r0, r0, #20
  369. add r8, r4, fp
  370. veor q2, q10, q2
  371. add fp, r0, r3
  372. ldr r3, [r7, #100]
  373. ror r1, r1, #20
  374. mov r2, r8
  375. vshl.i32 q8, q3, #8
  376. str r8, [r7, #96]
  377. add r8, r1, r3
  378. ldr r3, [r7, #108]
  379. vmov q1, q6 @ v4si
  380. vshl.i32 q6, q2, #8
  381. eor r6, fp, r6
  382. add r10, r10, r3
  383. ldr r3, [r7, #120]
  384. vsri.32 q8, q3, #24
  385. eor lr, r2, lr
  386. eor r3, r8, r3
  387. ror r2, r6, #24
  388. vsri.32 q6, q2, #24
  389. eor r5, r10, r5
  390. str r2, [r7, #124]
  391. ror r2, r3, #24
  392. ldr r3, [r7, #104]
  393. vmov q3, q8 @ v4si
  394. vadd.i32 q15, q15, q6
  395. ror lr, lr, #24
  396. vadd.i32 q8, q4, q8
  397. ror r6, r5, #24
  398. add r5, lr, r3
  399. ldr r3, [r7, #124]
  400. veor q4, q8, q5
  401. add ip, ip, r6
  402. vmov q2, q6 @ v4si
  403. add r9, r9, r3
  404. veor q6, q15, q1
  405. ldr r3, [r7, #116]
  406. vshl.i32 q1, q4, #7
  407. str r2, [r7, #112]
  408. add r3, r3, r2
  409. str r3, [r7, #120]
  410. vshl.i32 q5, q6, #7
  411. eors r1, r1, r3
  412. ldr r3, [r7, #108]
  413. vsri.32 q1, q4, #25
  414. eors r4, r4, r5
  415. eor r0, r9, r0
  416. eor r2, ip, r3
  417. vsri.32 q5, q6, #25
  418. ldr r3, [r7, #92]
  419. ror r4, r4, #25
  420. str r6, [r7, #100]
  421. ror r0, r0, #25
  422. subs r3, r3, #1
  423. str r5, [r7, #104]
  424. ror r1, r1, #25
  425. ror r2, r2, #25
  426. vext.32 q15, q15, q15, #2
  427. str r3, [r7, #92]
  428. vext.32 q2, q2, q2, #1
  429. vext.32 q8, q8, q8, #2
  430. vext.32 q3, q3, q3, #1
  431. vext.32 q5, q5, q5, #3
  432. vext.32 q1, q1, q1, #3
  433. bne .L3
  434. ldr r3, [r7, #80]
  435. vadd.i32 q4, q12, q10
  436. str r9, [r7, #116]
  437. mov r9, r10
  438. mov r10, r8
  439. ldr r8, [r7, #96]
  440. str lr, [r7, #96]
  441. mov lr, r5
  442. ldr r5, [r7, #56]
  443. vadd.i32 q5, q13, q5
  444. ldr r6, [r7, #76]
  445. vadd.i32 q15, q14, q15
  446. add fp, fp, r5
  447. ldr r5, [r7, #52]
  448. str r4, [r7, #108]
  449. vadd.i32 q7, q14, q8
  450. ldr r4, [r7, #112]
  451. add r5, r10, r5
  452. str r3, [r7, #112]
  453. vadd.i32 q2, q11, q2
  454. ldr r3, [r6, #12] @ unaligned
  455. vadd.i32 q6, q12, q9
  456. str r0, [r7, #92]
  457. vadd.i32 q1, q13, q1
  458. ldr r0, [r6] @ unaligned
  459. vadd.i32 q11, q11, q0
  460. str r1, [r7, #40]
  461. str r2, [r7, #36]
  462. vadd.i32 q3, q11, q3
  463. ldr r1, [r6, #4] @ unaligned
  464. vadd.i32 q11, q11, q0
  465. ldr r2, [r6, #8] @ unaligned
  466. str r5, [r7, #104]
  467. vadd.i32 q11, q11, q0
  468. ldr r5, [r7, #112]
  469. ldr r10, [r7, #80]
  470. stmia r5!, {r0, r1, r2, r3}
  471. mov r5, r10
  472. ldr r0, [r7, #84]
  473. ldr r2, [r7, #48]
  474. ldr r3, [r7, #72]
  475. vldr d20, [r0, #80]
  476. vldr d21, [r0, #88]
  477. add r9, r9, r2
  478. veor q10, q10, q4
  479. ldr r2, [r7, #44]
  480. adds r1, r4, r3
  481. str r1, [r7, #28]
  482. add r2, r8, r2
  483. str r2, [r7, #32]
  484. vstr d20, [r0, #80]
  485. vstr d21, [r0, #88]
  486. ldmia r5!, {r0, r1, r2, r3}
  487. ldr r4, [r7, #96]
  488. ldr r5, [r7, #64]
  489. add r4, r4, r5
  490. ldr r5, [r7, #124]
  491. str r4, [r7, #96]
  492. ldr r4, [r7, #60]
  493. add r5, r5, r4
  494. ldr r4, [r7, #88]
  495. str r5, [r7, #24]
  496. mov r5, r10
  497. str r0, [r4] @ unaligned
  498. mov r0, r4
  499. str r1, [r4, #4] @ unaligned
  500. mov r8, r0
  501. str r2, [r0, #8] @ unaligned
  502. mov r4, r10
  503. str r3, [r0, #12] @ unaligned
  504. ldr r0, [r6, #16]! @ unaligned
  505. ldr r1, [r6, #4] @ unaligned
  506. ldr r2, [r6, #8] @ unaligned
  507. ldr r3, [r6, #12] @ unaligned
  508. ldr r6, [r7, #76]
  509. stmia r5!, {r0, r1, r2, r3}
  510. mov r5, r10
  511. ldr r3, [r7, #84]
  512. vldr d20, [r3, #80]
  513. vldr d21, [r3, #88]
  514. veor q10, q10, q5
  515. vstr d20, [r3, #80]
  516. vstr d21, [r3, #88]
  517. ldmia r4!, {r0, r1, r2, r3}
  518. mov r4, r8
  519. str r0, [r8, #16] @ unaligned
  520. str r1, [r8, #20] @ unaligned
  521. str r2, [r8, #24] @ unaligned
  522. str r3, [r8, #28] @ unaligned
  523. mov r8, r4
  524. ldr r0, [r6, #32]! @ unaligned
  525. str r10, [r7, #124]
  526. ldr r1, [r6, #4] @ unaligned
  527. ldr r2, [r6, #8] @ unaligned
  528. ldr r3, [r6, #12] @ unaligned
  529. ldr r6, [r7, #76]
  530. stmia r5!, {r0, r1, r2, r3}
  531. mov r5, r10
  532. ldr r2, [r7, #84]
  533. vldr d16, [r2, #80]
  534. vldr d17, [r2, #88]
  535. veor q15, q8, q15
  536. vstr d30, [r2, #80]
  537. vstr d31, [r2, #88]
  538. ldmia r10!, {r0, r1, r2, r3}
  539. str r0, [r4, #32] @ unaligned
  540. str r1, [r4, #36] @ unaligned
  541. str r2, [r4, #40] @ unaligned
  542. str r3, [r4, #44] @ unaligned
  543. ldr r0, [r6, #48]! @ unaligned
  544. ldr r1, [r6, #4] @ unaligned
  545. ldr r2, [r6, #8] @ unaligned
  546. ldr r3, [r6, #12] @ unaligned
  547. ldr r6, [r7, #76]
  548. stmia r5!, {r0, r1, r2, r3}
  549. ldr r1, [r7, #84]
  550. vldr d18, [r1, #80]
  551. vldr d19, [r1, #88]
  552. veor q9, q9, q2
  553. vstr d18, [r1, #80]
  554. vstr d19, [r1, #88]
  555. ldr r3, [r7, #112]
  556. ldr r5, [r7, #80]
  557. mov r10, r3
  558. ldmia r10!, {r0, r1, r2, r3}
  559. str r0, [r4, #48] @ unaligned
  560. str r1, [r4, #52] @ unaligned
  561. str r2, [r4, #56] @ unaligned
  562. str r3, [r4, #60] @ unaligned
  563. ldr r0, [r6, #64]! @ unaligned
  564. ldr r1, [r6, #4] @ unaligned
  565. ldr r2, [r6, #8] @ unaligned
  566. ldr r3, [r6, #12] @ unaligned
  567. ldr r6, [r7, #76]
  568. stmia r5!, {r0, r1, r2, r3}
  569. ldr r1, [r7, #84]
  570. ldr r3, [r7, #112]
  571. ldr r5, [r7, #80]
  572. vldr d18, [r1, #80]
  573. vldr d19, [r1, #88]
  574. veor q9, q9, q6
  575. mov r10, r3
  576. str r5, [r7, #20]
  577. vstr d18, [r1, #80]
  578. vstr d19, [r1, #88]
  579. ldmia r10!, {r0, r1, r2, r3}
  580. str r1, [r4, #68] @ unaligned
  581. str r2, [r4, #72] @ unaligned
  582. str r3, [r4, #76] @ unaligned
  583. str r0, [r4, #64] @ unaligned
  584. ldr r0, [r6, #80]! @ unaligned
  585. ldr r1, [r6, #4] @ unaligned
  586. ldr r2, [r6, #8] @ unaligned
  587. ldr r3, [r6, #12] @ unaligned
  588. ldr r6, [r7, #76]
  589. stmia r5!, {r0, r1, r2, r3}
  590. ldr r1, [r7, #84]
  591. ldr r3, [r7, #20]
  592. ldr r5, [r7, #80]
  593. vldr d18, [r1, #80]
  594. vldr d19, [r1, #88]
  595. veor q1, q9, q1
  596. mov r10, r3
  597. vstr d2, [r1, #80]
  598. vstr d3, [r1, #88]
  599. ldmia r10!, {r0, r1, r2, r3}
  600. mov r10, r5
  601. str r0, [r4, #80] @ unaligned
  602. str r1, [r4, #84] @ unaligned
  603. str r2, [r4, #88] @ unaligned
  604. str r3, [r4, #92] @ unaligned
  605. ldr r0, [r6, #96]! @ unaligned
  606. ldr r1, [r6, #4] @ unaligned
  607. ldr r2, [r6, #8] @ unaligned
  608. ldr r3, [r6, #12] @ unaligned
  609. ldr r6, [r7, #76]
  610. stmia r5!, {r0, r1, r2, r3}
  611. mov r5, r10
  612. ldr r3, [r7, #84]
  613. vldr d16, [r3, #80]
  614. vldr d17, [r3, #88]
  615. veor q8, q8, q7
  616. vstr d16, [r3, #80]
  617. vstr d17, [r3, #88]
  618. ldmia r10!, {r0, r1, r2, r3}
  619. str r0, [r4, #96] @ unaligned
  620. str r1, [r4, #100] @ unaligned
  621. str r2, [r4, #104] @ unaligned
  622. str r3, [r4, #108] @ unaligned
  623. ldr r0, [r6, #112]! @ unaligned
  624. ldr r1, [r6, #4] @ unaligned
  625. ldr r2, [r6, #8] @ unaligned
  626. ldr r3, [r6, #12] @ unaligned
  627. mov r6, r5
  628. stmia r6!, {r0, r1, r2, r3}
  629. ldr r3, [r7, #84]
  630. vldr d16, [r3, #80]
  631. vldr d17, [r3, #88]
  632. veor q8, q8, q3
  633. vstr d16, [r3, #80]
  634. vstr d17, [r3, #88]
  635. ldmia r5!, {r0, r1, r2, r3}
  636. str r1, [r4, #116] @ unaligned
  637. ldr r1, [r7, #76]
  638. str r0, [r4, #112] @ unaligned
  639. str r2, [r4, #120] @ unaligned
  640. str r3, [r4, #124] @ unaligned
  641. ldr r3, [r1, #128]
  642. ldr r2, [r7, #104]
  643. eor r3, fp, r3
  644. str r3, [r4, #128]
  645. ldr r3, [r1, #132]
  646. eors r2, r2, r3
  647. str r2, [r8, #132]
  648. ldr r3, [r1, #136]
  649. ldr r5, [r7, #68]
  650. ldr r6, [r7, #32]
  651. eor r3, r9, r3
  652. str r3, [r4, #136]
  653. ldr r3, [r1, #140]
  654. ldr r0, [r7, #92]
  655. eors r3, r3, r6
  656. ldr r6, [r7, #108]
  657. str r3, [r4, #140]
  658. ldr r3, [r5]
  659. ldr r2, [r1, #144]
  660. add r6, r6, r3
  661. eors r2, r2, r6
  662. str r2, [r4, #144]
  663. ldr r2, [r5, #4]
  664. ldr r3, [r1, #148]
  665. add r0, r0, r2
  666. ldr r6, [r7, #36]
  667. eors r3, r3, r0
  668. ldr r0, [r7, #40]
  669. str r3, [r4, #148]
  670. ldr r2, [r5, #8]
  671. ldr r3, [r1, #152]
  672. add r0, r0, r2
  673. eors r3, r3, r0
  674. str r3, [r4, #152]
  675. ldr r2, [r5, #12]
  676. mov r0, r4
  677. ldr r3, [r1, #156]
  678. mov r4, r1
  679. add r6, r6, r2
  680. mov r1, r0
  681. eors r3, r3, r6
  682. str r3, [r0, #156]
  683. ldr r2, [r5, #16]
  684. ldr r3, [r4, #160]
  685. add ip, ip, r2
  686. eor r3, ip, r3
  687. str r3, [r1, #160]
  688. ldr r2, [r5, #20]
  689. ldr r3, [r4, #164]
  690. add lr, lr, r2
  691. ldr r2, [r7, #116]
  692. eor r3, lr, r3
  693. str r3, [r1, #164]
  694. ldr r6, [r5, #24]
  695. mov lr, r4
  696. ldr r3, [r4, #168]
  697. add r2, r2, r6
  698. mov r6, r4
  699. eors r3, r3, r2
  700. str r3, [r1, #168]
  701. ldr r5, [r5, #28]
  702. mov r2, r1
  703. ldr r3, [r4, #172]
  704. ldr r0, [r7, #120]
  705. add r0, r0, r5
  706. ldr r5, [r7, #24]
  707. eors r3, r3, r0
  708. str r3, [r1, #172]
  709. ldr r3, [r7, #72]
  710. ldr r4, [r4, #176]
  711. ldr r1, [r7, #28]
  712. eors r4, r4, r1
  713. adds r1, r3, #3
  714. str r4, [r2, #176]
  715. ldr r3, [r7, #100]
  716. ldr r0, [lr, #180]
  717. str r1, [r7, #72]
  718. eors r3, r3, r0
  719. mov r0, r3
  720. mov r3, r2
  721. str r0, [r2, #180]
  722. adds r3, r3, #192
  723. ldr r1, [lr, #184]
  724. ldr r2, [r7, #96]
  725. eors r1, r1, r2
  726. str r1, [r3, #-8]
  727. ldr r2, [lr, #188]
  728. mov r1, r6
  729. adds r1, r1, #192
  730. str r1, [r7, #76]
  731. eors r2, r2, r5
  732. str r2, [r3, #-4]
  733. ldr r2, [r7, #16]
  734. str r3, [r7, #88]
  735. cmp r2, r3
  736. bne .L4
  737. ldr r3, [r7, #12]
  738. ldr r2, [r7, #4]
  739. add r3, r3, r2
  740. str r3, [r7, #12]
  741. .L2:
  742. ldr r1, [r7, #8]
  743. movw r2, #43691
  744. movt r2, 43690
  745. umull r2, r3, r1, r2
  746. lsr fp, r3, #7
  747. lsl r3, fp, #8
  748. sub fp, r3, fp, lsl #6
  749. rsb fp, fp, r1
  750. lsrs fp, fp, #6
  751. beq .L6
  752. ldr r5, [r7, #12]
  753. ldr r4, [r7, #16]
  754. ldr r6, [r7, #84]
  755. ldr lr, [r7, #80]
  756. vldr d30, .L94
  757. vldr d31, .L94+8
  758. str fp, [r7, #120]
  759. str fp, [r7, #124]
  760. .L8:
  761. vmov q2, q11 @ v4si
  762. movs r3, #10
  763. vmov q8, q14 @ v4si
  764. vmov q9, q13 @ v4si
  765. vmov q10, q12 @ v4si
  766. .L7:
  767. vadd.i32 q10, q10, q9
  768. subs r3, r3, #1
  769. veor q3, q2, q10
  770. vrev32.16 q3, q3
  771. vadd.i32 q8, q8, q3
  772. veor q9, q8, q9
  773. vshl.i32 q2, q9, #12
  774. vsri.32 q2, q9, #20
  775. vadd.i32 q10, q10, q2
  776. veor q3, q10, q3
  777. vshl.i32 q9, q3, #8
  778. vsri.32 q9, q3, #24
  779. vadd.i32 q8, q8, q9
  780. vext.32 q9, q9, q9, #3
  781. veor q2, q8, q2
  782. vext.32 q8, q8, q8, #2
  783. vshl.i32 q3, q2, #7
  784. vsri.32 q3, q2, #25
  785. vext.32 q3, q3, q3, #1
  786. vadd.i32 q10, q10, q3
  787. veor q9, q10, q9
  788. vrev32.16 q9, q9
  789. vadd.i32 q8, q8, q9
  790. veor q3, q8, q3
  791. vshl.i32 q2, q3, #12
  792. vsri.32 q2, q3, #20
  793. vadd.i32 q10, q10, q2
  794. vmov q3, q2 @ v4si
  795. veor q9, q10, q9
  796. vshl.i32 q2, q9, #8
  797. vsri.32 q2, q9, #24
  798. vadd.i32 q8, q8, q2
  799. vext.32 q2, q2, q2, #1
  800. veor q3, q8, q3
  801. vext.32 q8, q8, q8, #2
  802. vshl.i32 q9, q3, #7
  803. vsri.32 q9, q3, #25
  804. vext.32 q9, q9, q9, #3
  805. bne .L7
  806. ldr r0, [r5] @ unaligned
  807. vadd.i32 q1, q12, q10
  808. ldr r1, [r5, #4] @ unaligned
  809. mov ip, lr
  810. ldr r2, [r5, #8] @ unaligned
  811. mov r9, lr
  812. ldr r3, [r5, #12] @ unaligned
  813. mov r10, r5
  814. vadd.i32 q9, q13, q9
  815. mov r8, lr
  816. vadd.i32 q8, q14, q8
  817. stmia ip!, {r0, r1, r2, r3}
  818. mov ip, lr
  819. vldr d20, [r6, #80]
  820. vldr d21, [r6, #88]
  821. vadd.i32 q3, q11, q2
  822. veor q10, q10, q1
  823. vadd.i32 q11, q11, q15
  824. vstr d20, [r6, #80]
  825. vstr d21, [r6, #88]
  826. ldmia r9!, {r0, r1, r2, r3}
  827. mov r9, r5
  828. str r0, [r4] @ unaligned
  829. str r1, [r4, #4] @ unaligned
  830. str r2, [r4, #8] @ unaligned
  831. str r3, [r4, #12] @ unaligned
  832. ldr r0, [r10, #16]! @ unaligned
  833. ldr r1, [r10, #4] @ unaligned
  834. ldr r2, [r10, #8] @ unaligned
  835. ldr r3, [r10, #12] @ unaligned
  836. add r10, r4, #48
  837. adds r4, r4, #64
  838. stmia r8!, {r0, r1, r2, r3}
  839. mov r8, lr
  840. vldr d20, [r6, #80]
  841. vldr d21, [r6, #88]
  842. veor q10, q10, q9
  843. vstr d20, [r6, #80]
  844. vstr d21, [r6, #88]
  845. ldmia ip!, {r0, r1, r2, r3}
  846. mov ip, lr
  847. str r0, [r4, #-48] @ unaligned
  848. str r1, [r4, #-44] @ unaligned
  849. str r2, [r4, #-40] @ unaligned
  850. str r3, [r4, #-36] @ unaligned
  851. ldr r0, [r9, #32]! @ unaligned
  852. ldr r1, [r9, #4] @ unaligned
  853. ldr r2, [r9, #8] @ unaligned
  854. ldr r3, [r9, #12] @ unaligned
  855. mov r9, r5
  856. adds r5, r5, #64
  857. stmia r8!, {r0, r1, r2, r3}
  858. mov r8, lr
  859. vldr d18, [r6, #80]
  860. vldr d19, [r6, #88]
  861. veor q9, q9, q8
  862. vstr d18, [r6, #80]
  863. vstr d19, [r6, #88]
  864. ldmia ip!, {r0, r1, r2, r3}
  865. mov ip, lr
  866. str r0, [r4, #-32] @ unaligned
  867. str r1, [r4, #-28] @ unaligned
  868. str r2, [r4, #-24] @ unaligned
  869. str r3, [r4, #-20] @ unaligned
  870. ldr r0, [r9, #48]! @ unaligned
  871. ldr r1, [r9, #4] @ unaligned
  872. ldr r2, [r9, #8] @ unaligned
  873. ldr r3, [r9, #12] @ unaligned
  874. stmia r8!, {r0, r1, r2, r3}
  875. vldr d16, [r6, #80]
  876. vldr d17, [r6, #88]
  877. veor q8, q8, q3
  878. vstr d16, [r6, #80]
  879. vstr d17, [r6, #88]
  880. ldmia ip!, {r0, r1, r2, r3}
  881. str r0, [r4, #-16] @ unaligned
  882. str r1, [r4, #-12] @ unaligned
  883. str r3, [r10, #12] @ unaligned
  884. ldr r3, [r7, #124]
  885. str r2, [r10, #8] @ unaligned
  886. cmp r3, #1
  887. beq .L87
  888. movs r3, #1
  889. str r3, [r7, #124]
  890. b .L8
  891. .L95:
  892. .align 3
  893. .L94:
  894. .word 1
  895. .word 0
  896. .word 0
  897. .word 0
  898. .L87:
  899. ldr fp, [r7, #120]
  900. ldr r3, [r7, #12]
  901. lsl fp, fp, #6
  902. add r3, r3, fp
  903. str r3, [r7, #12]
  904. ldr r3, [r7, #16]
  905. add r3, r3, fp
  906. str r3, [r7, #16]
  907. .L6:
  908. ldr r3, [r7, #8]
  909. ands r9, r3, #63
  910. beq .L1
  911. vmov q3, q11 @ v4si
  912. movs r3, #10
  913. vmov q8, q14 @ v4si
  914. mov r5, r9
  915. vmov q15, q13 @ v4si
  916. vmov q10, q12 @ v4si
  917. .L10:
  918. vadd.i32 q10, q10, q15
  919. subs r3, r3, #1
  920. veor q9, q3, q10
  921. vrev32.16 q9, q9
  922. vadd.i32 q8, q8, q9
  923. veor q15, q8, q15
  924. vshl.i32 q3, q15, #12
  925. vsri.32 q3, q15, #20
  926. vadd.i32 q10, q10, q3
  927. veor q15, q10, q9
  928. vshl.i32 q9, q15, #8
  929. vsri.32 q9, q15, #24
  930. vadd.i32 q8, q8, q9
  931. vext.32 q9, q9, q9, #3
  932. veor q3, q8, q3
  933. vext.32 q8, q8, q8, #2
  934. vshl.i32 q15, q3, #7
  935. vsri.32 q15, q3, #25
  936. vext.32 q15, q15, q15, #1
  937. vadd.i32 q10, q10, q15
  938. veor q9, q10, q9
  939. vrev32.16 q9, q9
  940. vadd.i32 q8, q8, q9
  941. veor q15, q8, q15
  942. vshl.i32 q3, q15, #12
  943. vsri.32 q3, q15, #20
  944. vadd.i32 q10, q10, q3
  945. vmov q15, q3 @ v4si
  946. veor q9, q10, q9
  947. vshl.i32 q3, q9, #8
  948. vsri.32 q3, q9, #24
  949. vadd.i32 q8, q8, q3
  950. vext.32 q3, q3, q3, #1
  951. veor q9, q8, q15
  952. vext.32 q8, q8, q8, #2
  953. vshl.i32 q15, q9, #7
  954. vsri.32 q15, q9, #25
  955. vext.32 q15, q15, q15, #3
  956. bne .L10
  957. cmp r5, #15
  958. mov r9, r5
  959. bhi .L88
  960. vadd.i32 q12, q12, q10
  961. ldr r3, [r7, #84]
  962. vst1.64 {d24-d25}, [r3:128]
  963. .L14:
  964. ldr r3, [r7, #8]
  965. and r2, r3, #48
  966. cmp r9, r2
  967. bls .L1
  968. ldr r6, [r7, #16]
  969. add r3, r2, #16
  970. ldr r1, [r7, #12]
  971. rsb ip, r2, r9
  972. adds r0, r1, r2
  973. mov r4, r6
  974. add r1, r1, r3
  975. add r4, r4, r2
  976. add r3, r3, r6
  977. cmp r0, r3
  978. it cc
  979. cmpcc r4, r1
  980. ite cs
  981. movcs r3, #1
  982. movcc r3, #0
  983. cmp ip, #18
  984. ite ls
  985. movls r3, #0
  986. andhi r3, r3, #1
  987. cmp r3, #0
  988. beq .L16
  989. and r1, r0, #7
  990. mov r3, r2
  991. negs r1, r1
  992. and r1, r1, #15
  993. cmp r1, ip
  994. it cs
  995. movcs r1, ip
  996. cmp r1, #0
  997. beq .L17
  998. ldr r5, [r7, #84]
  999. cmp r1, #1
  1000. ldrb r0, [r0] @ zero_extendqisi2
  1001. add r3, r2, #1
  1002. ldrb lr, [r5, r2] @ zero_extendqisi2
  1003. mov r6, r5
  1004. eor r0, lr, r0
  1005. strb r0, [r4]
  1006. beq .L17
  1007. ldr r0, [r7, #12]
  1008. cmp r1, #2
  1009. ldrb r4, [r5, r3] @ zero_extendqisi2
  1010. ldr r5, [r7, #16]
  1011. ldrb r0, [r0, r3] @ zero_extendqisi2
  1012. eor r0, r0, r4
  1013. strb r0, [r5, r3]
  1014. add r3, r2, #2
  1015. beq .L17
  1016. ldr r0, [r7, #12]
  1017. cmp r1, #3
  1018. ldrb r4, [r6, r3] @ zero_extendqisi2
  1019. ldrb r0, [r0, r3] @ zero_extendqisi2
  1020. eor r0, r0, r4
  1021. strb r0, [r5, r3]
  1022. add r3, r2, #3
  1023. beq .L17
  1024. ldr r0, [r7, #12]
  1025. cmp r1, #4
  1026. ldrb r4, [r6, r3] @ zero_extendqisi2
  1027. ldrb r0, [r0, r3] @ zero_extendqisi2
  1028. eor r0, r0, r4
  1029. strb r0, [r5, r3]
  1030. add r3, r2, #4
  1031. beq .L17
  1032. ldr r0, [r7, #12]
  1033. cmp r1, #5
  1034. ldrb r4, [r6, r3] @ zero_extendqisi2
  1035. ldrb r0, [r0, r3] @ zero_extendqisi2
  1036. eor r0, r0, r4
  1037. strb r0, [r5, r3]
  1038. add r3, r2, #5
  1039. beq .L17
  1040. ldr r0, [r7, #12]
  1041. cmp r1, #6
  1042. ldrb r4, [r6, r3] @ zero_extendqisi2
  1043. ldrb r0, [r0, r3] @ zero_extendqisi2
  1044. eor r0, r0, r4
  1045. strb r0, [r5, r3]
  1046. add r3, r2, #6
  1047. beq .L17
  1048. ldr r0, [r7, #12]
  1049. cmp r1, #7
  1050. ldrb r4, [r6, r3] @ zero_extendqisi2
  1051. ldrb r0, [r0, r3] @ zero_extendqisi2
  1052. eor r0, r0, r4
  1053. strb r0, [r5, r3]
  1054. add r3, r2, #7
  1055. beq .L17
  1056. ldr r0, [r7, #12]
  1057. cmp r1, #8
  1058. ldrb r4, [r6, r3] @ zero_extendqisi2
  1059. ldrb r0, [r0, r3] @ zero_extendqisi2
  1060. eor r0, r0, r4
  1061. strb r0, [r5, r3]
  1062. add r3, r2, #8
  1063. beq .L17
  1064. ldr r0, [r7, #12]
  1065. cmp r1, #9
  1066. ldrb r4, [r6, r3] @ zero_extendqisi2
  1067. ldrb r0, [r0, r3] @ zero_extendqisi2
  1068. eor r0, r0, r4
  1069. strb r0, [r5, r3]
  1070. add r3, r2, #9
  1071. beq .L17
  1072. ldr r0, [r7, #12]
  1073. cmp r1, #10
  1074. ldrb r4, [r6, r3] @ zero_extendqisi2
  1075. ldrb r0, [r0, r3] @ zero_extendqisi2
  1076. eor r0, r0, r4
  1077. strb r0, [r5, r3]
  1078. add r3, r2, #10
  1079. beq .L17
  1080. ldr r0, [r7, #12]
  1081. cmp r1, #11
  1082. ldrb r4, [r6, r3] @ zero_extendqisi2
  1083. ldrb r0, [r0, r3] @ zero_extendqisi2
  1084. eor r0, r0, r4
  1085. strb r0, [r5, r3]
  1086. add r3, r2, #11
  1087. beq .L17
  1088. ldr r0, [r7, #12]
  1089. cmp r1, #12
  1090. ldrb r4, [r6, r3] @ zero_extendqisi2
  1091. ldrb r0, [r0, r3] @ zero_extendqisi2
  1092. eor r0, r0, r4
  1093. strb r0, [r5, r3]
  1094. add r3, r2, #12
  1095. beq .L17
  1096. ldr r0, [r7, #12]
  1097. cmp r1, #13
  1098. ldrb r4, [r6, r3] @ zero_extendqisi2
  1099. ldrb r0, [r0, r3] @ zero_extendqisi2
  1100. eor r0, r0, r4
  1101. strb r0, [r5, r3]
  1102. add r3, r2, #13
  1103. beq .L17
  1104. ldr r0, [r7, #12]
  1105. cmp r1, #15
  1106. ldrb r4, [r6, r3] @ zero_extendqisi2
  1107. ldrb r0, [r0, r3] @ zero_extendqisi2
  1108. eor r0, r0, r4
  1109. strb r0, [r5, r3]
  1110. add r3, r2, #14
  1111. bne .L17
  1112. ldr r0, [r7, #12]
  1113. ldrb r4, [r6, r3] @ zero_extendqisi2
  1114. ldrb r0, [r0, r3] @ zero_extendqisi2
  1115. eors r0, r0, r4
  1116. strb r0, [r5, r3]
  1117. add r3, r2, #15
  1118. .L17:
  1119. rsb r4, r1, ip
  1120. add r0, ip, #-1
  1121. sub r6, r4, #16
  1122. subs r0, r0, r1
  1123. cmp r0, #14
  1124. lsr r6, r6, #4
  1125. add r6, r6, #1
  1126. lsl lr, r6, #4
  1127. bls .L19
  1128. add r2, r2, r1
  1129. ldr r1, [r7, #12]
  1130. ldr r5, [r7, #16]
  1131. cmp r6, #1
  1132. add r0, r1, r2
  1133. ldr r1, [r7, #84]
  1134. add r1, r1, r2
  1135. vld1.64 {d18-d19}, [r0:64]
  1136. add r2, r2, r5
  1137. vld1.8 {q8}, [r1]
  1138. veor q8, q8, q9
  1139. vst1.8 {q8}, [r2]
  1140. beq .L20
  1141. add r8, r1, #16
  1142. add ip, r2, #16
  1143. vldr d18, [r0, #16]
  1144. vldr d19, [r0, #24]
  1145. cmp r6, #2
  1146. vld1.8 {q8}, [r8]
  1147. veor q8, q8, q9
  1148. vst1.8 {q8}, [ip]
  1149. beq .L20
  1150. add r8, r1, #32
  1151. add ip, r2, #32
  1152. vldr d18, [r0, #32]
  1153. vldr d19, [r0, #40]
  1154. cmp r6, #3
  1155. vld1.8 {q8}, [r8]
  1156. veor q8, q8, q9
  1157. vst1.8 {q8}, [ip]
  1158. beq .L20
  1159. adds r1, r1, #48
  1160. adds r2, r2, #48
  1161. vldr d18, [r0, #48]
  1162. vldr d19, [r0, #56]
  1163. vld1.8 {q8}, [r1]
  1164. veor q8, q8, q9
  1165. vst1.8 {q8}, [r2]
  1166. .L20:
  1167. cmp lr, r4
  1168. add r3, r3, lr
  1169. beq .L1
  1170. .L19:
  1171. ldr r4, [r7, #84]
  1172. adds r2, r3, #1
  1173. ldr r1, [r7, #12]
  1174. cmp r2, r9
  1175. ldr r5, [r7, #16]
  1176. ldrb r0, [r4, r3] @ zero_extendqisi2
  1177. ldrb r1, [r1, r3] @ zero_extendqisi2
  1178. eor r1, r1, r0
  1179. strb r1, [r5, r3]
  1180. bcs .L1
  1181. ldr r0, [r7, #12]
  1182. adds r1, r3, #2
  1183. mov r6, r4
  1184. cmp r9, r1
  1185. ldrb r4, [r4, r2] @ zero_extendqisi2
  1186. ldrb r0, [r0, r2] @ zero_extendqisi2
  1187. eor r0, r0, r4
  1188. strb r0, [r5, r2]
  1189. bls .L1
  1190. ldr r0, [r7, #12]
  1191. adds r2, r3, #3
  1192. ldrb r4, [r6, r1] @ zero_extendqisi2
  1193. cmp r9, r2
  1194. ldrb r0, [r0, r1] @ zero_extendqisi2
  1195. eor r0, r0, r4
  1196. strb r0, [r5, r1]
  1197. bls .L1
  1198. ldr r0, [r7, #12]
  1199. adds r1, r3, #4
  1200. ldrb r4, [r6, r2] @ zero_extendqisi2
  1201. cmp r9, r1
  1202. ldrb r0, [r0, r2] @ zero_extendqisi2
  1203. eor r0, r0, r4
  1204. strb r0, [r5, r2]
  1205. bls .L1
  1206. ldr r0, [r7, #12]
  1207. adds r2, r3, #5
  1208. ldrb r4, [r6, r1] @ zero_extendqisi2
  1209. cmp r9, r2
  1210. ldrb r0, [r0, r1] @ zero_extendqisi2
  1211. eor r0, r0, r4
  1212. strb r0, [r5, r1]
  1213. bls .L1
  1214. ldr r0, [r7, #12]
  1215. adds r1, r3, #6
  1216. ldrb r4, [r6, r2] @ zero_extendqisi2
  1217. cmp r9, r1
  1218. ldrb r0, [r0, r2] @ zero_extendqisi2
  1219. eor r0, r0, r4
  1220. strb r0, [r5, r2]
  1221. bls .L1
  1222. ldr r0, [r7, #12]
  1223. adds r2, r3, #7
  1224. ldrb r4, [r6, r1] @ zero_extendqisi2
  1225. cmp r9, r2
  1226. ldrb r0, [r0, r1] @ zero_extendqisi2
  1227. eor r0, r0, r4
  1228. strb r0, [r5, r1]
  1229. bls .L1
  1230. ldr r0, [r7, #12]
  1231. add r1, r3, #8
  1232. ldrb r4, [r6, r2] @ zero_extendqisi2
  1233. cmp r9, r1
  1234. ldrb r0, [r0, r2] @ zero_extendqisi2
  1235. eor r0, r0, r4
  1236. strb r0, [r5, r2]
  1237. bls .L1
  1238. ldr r0, [r7, #12]
  1239. add r2, r3, #9
  1240. ldrb r4, [r6, r1] @ zero_extendqisi2
  1241. cmp r9, r2
  1242. ldrb r0, [r0, r1] @ zero_extendqisi2
  1243. eor r0, r0, r4
  1244. strb r0, [r5, r1]
  1245. bls .L1
  1246. ldr r0, [r7, #12]
  1247. add r1, r3, #10
  1248. ldrb r4, [r6, r2] @ zero_extendqisi2
  1249. cmp r9, r1
  1250. ldrb r0, [r0, r2] @ zero_extendqisi2
  1251. eor r0, r0, r4
  1252. strb r0, [r5, r2]
  1253. bls .L1
  1254. ldr r0, [r7, #12]
  1255. add r2, r3, #11
  1256. ldrb r4, [r6, r1] @ zero_extendqisi2
  1257. cmp r9, r2
  1258. ldrb r0, [r0, r1] @ zero_extendqisi2
  1259. eor r0, r0, r4
  1260. strb r0, [r5, r1]
  1261. bls .L1
  1262. ldr r0, [r7, #12]
  1263. add r1, r3, #12
  1264. ldrb r4, [r6, r2] @ zero_extendqisi2
  1265. cmp r9, r1
  1266. ldrb r0, [r0, r2] @ zero_extendqisi2
  1267. eor r0, r0, r4
  1268. strb r0, [r5, r2]
  1269. bls .L1
  1270. ldr r0, [r7, #12]
  1271. add r2, r3, #13
  1272. ldrb r4, [r6, r1] @ zero_extendqisi2
  1273. cmp r9, r2
  1274. ldrb r0, [r0, r1] @ zero_extendqisi2
  1275. eor r0, r0, r4
  1276. strb r0, [r5, r1]
  1277. bls .L1
  1278. ldr r1, [r7, #12]
  1279. adds r3, r3, #14
  1280. ldrb r0, [r6, r2] @ zero_extendqisi2
  1281. cmp r9, r3
  1282. ldrb r1, [r1, r2] @ zero_extendqisi2
  1283. eor r1, r1, r0
  1284. strb r1, [r5, r2]
  1285. bls .L1
  1286. ldr r2, [r7, #84]
  1287. ldrb r1, [r2, r3] @ zero_extendqisi2
  1288. ldr r2, [r7, #12]
  1289. ldrb r2, [r2, r3] @ zero_extendqisi2
  1290. eors r2, r2, r1
  1291. ldr r1, [r7, #16]
  1292. strb r2, [r1, r3]
  1293. .L1:
  1294. adds r7, r7, #156
  1295. mov sp, r7
  1296. @ sp needed
  1297. vldm sp!, {d8-d15}
  1298. pop {r4, r5, r6, r7, r8, r9, r10, fp, pc}
  1299. .L88:
  1300. ldr r5, [r7, #12]
  1301. vadd.i32 q12, q12, q10
  1302. ldr r4, [r7, #80]
  1303. cmp r9, #31
  1304. ldr r0, [r5] @ unaligned
  1305. ldr r1, [r5, #4] @ unaligned
  1306. mov r6, r4
  1307. ldr r2, [r5, #8] @ unaligned
  1308. ldr r3, [r5, #12] @ unaligned
  1309. stmia r6!, {r0, r1, r2, r3}
  1310. ldr r2, [r7, #84]
  1311. ldr r6, [r7, #16]
  1312. vldr d18, [r2, #80]
  1313. vldr d19, [r2, #88]
  1314. veor q9, q9, q12
  1315. vstr d18, [r2, #80]
  1316. vstr d19, [r2, #88]
  1317. ldmia r4!, {r0, r1, r2, r3}
  1318. str r1, [r6, #4] @ unaligned
  1319. mov r1, r6
  1320. str r0, [r6] @ unaligned
  1321. str r2, [r6, #8] @ unaligned
  1322. str r3, [r6, #12] @ unaligned
  1323. bhi .L89
  1324. vadd.i32 q13, q13, q15
  1325. ldr r3, [r7, #84]
  1326. vstr d26, [r3, #16]
  1327. vstr d27, [r3, #24]
  1328. b .L14
  1329. .L16:
  1330. subs r3, r2, #1
  1331. ldr r2, [r7, #12]
  1332. add r2, r2, r9
  1333. mov r5, r2
  1334. ldr r2, [r7, #84]
  1335. add r2, r2, r3
  1336. mov r3, r2
  1337. .L24:
  1338. ldrb r1, [r0], #1 @ zero_extendqisi2
  1339. ldrb r2, [r3, #1]! @ zero_extendqisi2
  1340. cmp r0, r5
  1341. eor r2, r2, r1
  1342. strb r2, [r4], #1
  1343. bne .L24
  1344. adds r7, r7, #156
  1345. mov sp, r7
  1346. @ sp needed
  1347. vldm sp!, {d8-d15}
  1348. pop {r4, r5, r6, r7, r8, r9, r10, fp, pc}
  1349. .L26:
  1350. str fp, [r7, #16]
  1351. b .L2
  1352. .L89:
  1353. mov r3, r5
  1354. ldr r4, [r7, #80]
  1355. ldr r0, [r3, #16]! @ unaligned
  1356. add lr, r1, #16
  1357. mov r5, r1
  1358. vadd.i32 q13, q13, q15
  1359. mov r6, r4
  1360. cmp r9, #47
  1361. ldr r1, [r3, #4] @ unaligned
  1362. ldr r2, [r3, #8] @ unaligned
  1363. ldr r3, [r3, #12] @ unaligned
  1364. stmia r6!, {r0, r1, r2, r3}
  1365. ldr r2, [r7, #84]
  1366. vldr d18, [r2, #80]
  1367. vldr d19, [r2, #88]
  1368. veor q13, q9, q13
  1369. vstr d26, [r2, #80]
  1370. vstr d27, [r2, #88]
  1371. ldmia r4!, {r0, r1, r2, r3}
  1372. str r0, [r5, #16] @ unaligned
  1373. str r1, [lr, #4] @ unaligned
  1374. str r2, [lr, #8] @ unaligned
  1375. str r3, [lr, #12] @ unaligned
  1376. bhi .L90
  1377. vadd.i32 q8, q14, q8
  1378. ldr r3, [r7, #84]
  1379. vstr d16, [r3, #32]
  1380. vstr d17, [r3, #40]
  1381. b .L14
  1382. .L90:
  1383. ldr r3, [r7, #12]
  1384. add lr, r5, #32
  1385. ldr r4, [r7, #80]
  1386. vadd.i32 q8, q14, q8
  1387. ldr r5, [r7, #84]
  1388. vadd.i32 q11, q11, q3
  1389. ldr r0, [r3, #32]! @ unaligned
  1390. mov r6, r4
  1391. vstr d22, [r5, #48]
  1392. vstr d23, [r5, #56]
  1393. ldr r1, [r3, #4] @ unaligned
  1394. ldr r2, [r3, #8] @ unaligned
  1395. ldr r3, [r3, #12] @ unaligned
  1396. stmia r4!, {r0, r1, r2, r3}
  1397. vldr d18, [r5, #80]
  1398. vldr d19, [r5, #88]
  1399. veor q9, q9, q8
  1400. ldr r4, [r7, #16]
  1401. vstr d18, [r5, #80]
  1402. vstr d19, [r5, #88]
  1403. ldmia r6!, {r0, r1, r2, r3}
  1404. str r0, [r4, #32] @ unaligned
  1405. str r1, [lr, #4] @ unaligned
  1406. str r2, [lr, #8] @ unaligned
  1407. str r3, [lr, #12] @ unaligned
  1408. b .L14
  1409. .size CRYPTO_chacha_20_neon, .-CRYPTO_chacha_20_neon
  1410. .section .rodata
  1411. .align 2
  1412. .LANCHOR0 = . + 0
  1413. .LC0:
  1414. .word 1634760805
  1415. .word 857760878
  1416. .word 2036477234
  1417. .word 1797285236
  1418. .ident "GCC: (Linaro GCC 2014.11) 4.9.3 20141031 (prerelease)"
  1419. .section .note.GNU-stack,"",%progbits
  1420. #endif /* __arm__ || __aarch64__ */
  1421. #endif /* !OPENSSL_NO_ASM */