Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 
 
 

891 wiersze
17 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:
  20. #
  21. # /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2012.10-20121022_linux/bin/arm-linux-gnueabihf-gcc -O3 -mcpu=cortex-a8 -mfpu=neon -S chacha_vec.c -I ../../include -fpic -o chacha_vec_arm.S
  22. #if !defined(OPENSSL_NO_ASM)
  23. .syntax unified
  24. .cpu cortex-a8
  25. .eabi_attribute 27, 3
  26. # EABI attribute 28 sets whether VFP register arguments were used to build this
  27. # file. If object files are inconsistent on this point, the linker will refuse
  28. # to link them. Thus we report whatever the compiler expects since we don't use
  29. # VFP arguments.
  30. #if defined(__ARM_PCS_VFP)
  31. .eabi_attribute 28, 1
  32. #else
  33. .eabi_attribute 28, 0
  34. #endif
  35. .fpu neon
  36. .eabi_attribute 20, 1
  37. .eabi_attribute 21, 1
  38. .eabi_attribute 23, 3
  39. .eabi_attribute 24, 1
  40. .eabi_attribute 25, 1
  41. .eabi_attribute 26, 2
  42. .eabi_attribute 30, 2
  43. .eabi_attribute 34, 1
  44. .eabi_attribute 18, 4
  45. .thumb
  46. .file "chacha_vec.c"
  47. .text
  48. .align 2
  49. .global CRYPTO_chacha_20_neon
  50. .hidden CRYPTO_chacha_20_neon
  51. .thumb
  52. .thumb_func
  53. .type CRYPTO_chacha_20_neon, %function
  54. CRYPTO_chacha_20_neon:
  55. @ args = 8, pretend = 0, frame = 304
  56. @ frame_needed = 1, uses_anonymous_args = 0
  57. @ link register save eliminated.
  58. push {r4, r5, r6, r7, r8, r9, sl, fp}
  59. fstmfdd sp!, {d8, d9, d10, d11, d12, d13, d14, d15}
  60. sub sp, sp, #304
  61. add r7, sp, #0
  62. movw ip, #43691
  63. movt ip, 43690
  64. str r2, [r7, #196]
  65. sub sp, sp, #96
  66. ldr r4, [r7, #196]
  67. ldr r6, [r7, #400]
  68. ldr r2, .L38+16
  69. umull r4, ip, ip, r4
  70. ldr r6, [r6, #0]
  71. ldr r8, [r7, #400]
  72. .LPIC24:
  73. add r2, pc
  74. add r4, sp, #15
  75. str r3, [r7, #244]
  76. str r6, [r7, #176]
  77. bic r4, r4, #15
  78. str r0, [r7, #188]
  79. str r4, [r7, #200]
  80. lsrs ip, ip, #7
  81. str r1, [r7, #184]
  82. ldmia r2, {r0, r1, r2, r3}
  83. ldr r4, [r8, #4]
  84. ldr r5, [r7, #244]
  85. vld1.64 {d24-d25}, [r5:64]
  86. vldr d26, [r5, #16]
  87. vldr d27, [r5, #24]
  88. ldr r9, [r7, #200]
  89. ldr r8, [r7, #404]
  90. ldr r5, [r7, #176]
  91. add r6, r9, #64
  92. str r4, [r7, #300]
  93. mov r4, #0
  94. str r8, [r7, #288]
  95. str r5, [r7, #296]
  96. str r4, [r7, #292]
  97. stmia r6, {r0, r1, r2, r3}
  98. vldr d22, [r9, #64]
  99. vldr d23, [r9, #72]
  100. vldr d20, [r7, #288]
  101. vldr d21, [r7, #296]
  102. str ip, [r7, #192]
  103. beq .L20
  104. lsl r6, ip, #1
  105. ldr r1, [r9, #68]
  106. add r3, r6, ip
  107. str r6, [r7, #180]
  108. ldr r2, [r9, #72]
  109. add r8, r8, #2
  110. ldr r5, [r9, #76]
  111. vldr d18, .L38
  112. vldr d19, .L38+8
  113. str r4, [r7, #240]
  114. ldr r6, [r7, #184]
  115. ldr r4, [r7, #188]
  116. str r0, [r7, #224]
  117. str r1, [r7, #220]
  118. str r8, [r7, #208]
  119. str r2, [r7, #216]
  120. str r3, [r7, #204]
  121. str r5, [r7, #212]
  122. str r6, [r7, #252]
  123. str r4, [r7, #248]
  124. .L4:
  125. ldr r2, [r7, #244]
  126. add r9, r7, #216
  127. ldr r3, [r7, #244]
  128. vadd.i32 q8, q10, q9
  129. ldr r6, [r7, #208]
  130. vmov q15, q13 @ v4si
  131. ldr r5, [r7, #240]
  132. vmov q3, q12 @ v4si
  133. ldr r4, [r7, #244]
  134. vmov q2, q11 @ v4si
  135. adds r5, r5, r6
  136. ldr r2, [r2, #8]
  137. ldr r6, [r7, #400]
  138. vmov q5, q10 @ v4si
  139. ldr r3, [r3, #12]
  140. vmov q1, q13 @ v4si
  141. ldr r0, [r7, #244]
  142. vmov q0, q12 @ v4si
  143. ldr r1, [r7, #244]
  144. vmov q4, q11 @ v4si
  145. ldmia r9, {r9, sl, fp}
  146. str r5, [r7, #228]
  147. ldr r5, [r4, #24]
  148. ldr r0, [r0, #0]
  149. ldr r1, [r1, #4]
  150. str r2, [r7, #264]
  151. str r3, [r7, #236]
  152. ldr r2, [r6, #4]
  153. ldr r3, [r4, #28]
  154. str r5, [r7, #280]
  155. ldr r5, [r6, #0]
  156. movs r6, #0
  157. ldr ip, [r7, #228]
  158. ldr r8, [r7, #212]
  159. str r0, [r7, #232]
  160. str r1, [r7, #268]
  161. ldr r0, [r4, #16]
  162. ldr r1, [r4, #20]
  163. movs r4, #10
  164. str r2, [r7, #24]
  165. str r3, [r7, #284]
  166. str r4, [r7, #256]
  167. ldr r2, [r7, #264]
  168. str r9, [r7, #276]
  169. mov r9, r6
  170. ldr r6, [r7, #280]
  171. str r8, [r7, #260]
  172. mov r8, sl
  173. str r1, [r7, #272]
  174. mov sl, ip
  175. str r6, [r7, #264]
  176. mov r6, r5
  177. ldr r3, [r7, #236]
  178. mov r5, r0
  179. ldr ip, [r7, #24]
  180. ldr r1, [r7, #268]
  181. ldr r0, [r7, #232]
  182. b .L39
  183. .L40:
  184. .align 3
  185. .L38:
  186. .word 1
  187. .word 0
  188. .word 0
  189. .word 0
  190. .word .LANCHOR0-(.LPIC24+4)
  191. .L39:
  192. .L3:
  193. vadd.i32 q4, q4, q0
  194. add r8, r8, r1
  195. vadd.i32 q2, q2, q3
  196. str r8, [r7, #268]
  197. veor q5, q5, q4
  198. ldr r8, [r7, #276]
  199. veor q8, q8, q2
  200. add fp, fp, r0
  201. str fp, [r7, #280]
  202. add r8, r8, r2
  203. vrev32.16 q5, q5
  204. str r8, [r7, #276]
  205. vrev32.16 q8, q8
  206. vadd.i32 q1, q1, q5
  207. vadd.i32 q15, q15, q8
  208. ldr r8, [r7, #280]
  209. veor q0, q1, q0
  210. ldr r4, [r7, #260]
  211. veor q3, q15, q3
  212. eor sl, sl, r8
  213. ldr r8, [r7, #276]
  214. add fp, r4, r3
  215. vshl.i32 q7, q0, #12
  216. ldr r4, [r7, #268]
  217. vshl.i32 q6, q3, #12
  218. eor r6, r6, r8
  219. eor r9, r9, r4
  220. ldr r4, [r7, #272]
  221. vsri.32 q7, q0, #20
  222. ror r8, r6, #16
  223. ldr r6, [r7, #264]
  224. eor ip, ip, fp
  225. vsri.32 q6, q3, #20
  226. ror sl, sl, #16
  227. ror r9, r9, #16
  228. add r5, r5, sl
  229. vadd.i32 q4, q4, q7
  230. str r5, [r7, #236]
  231. vadd.i32 q2, q2, q6
  232. add r5, r4, r9
  233. add r4, r6, r8
  234. ldr r6, [r7, #284]
  235. ror ip, ip, #16
  236. veor q5, q4, q5
  237. veor q8, q2, q8
  238. add r6, r6, ip
  239. str r6, [r7, #264]
  240. eors r1, r1, r5
  241. ldr r6, [r7, #236]
  242. vshl.i32 q3, q5, #8
  243. vshl.i32 q14, q8, #8
  244. eors r2, r2, r4
  245. eors r0, r0, r6
  246. ldr r6, [r7, #264]
  247. vsri.32 q3, q5, #24
  248. ror r1, r1, #20
  249. eors r3, r3, r6
  250. ldr r6, [r7, #280]
  251. ror r0, r0, #20
  252. vsri.32 q14, q8, #24
  253. adds r6, r0, r6
  254. str r6, [r7, #284]
  255. ldr r6, [r7, #268]
  256. vadd.i32 q1, q1, q3
  257. vadd.i32 q15, q15, q14
  258. ror r2, r2, #20
  259. adds r6, r1, r6
  260. str r6, [r7, #260]
  261. ldr r6, [r7, #276]
  262. veor q6, q15, q6
  263. veor q7, q1, q7
  264. ror r3, r3, #20
  265. adds r6, r2, r6
  266. str r6, [r7, #280]
  267. ldr r6, [r7, #284]
  268. vshl.i32 q0, q6, #7
  269. vshl.i32 q5, q7, #7
  270. add fp, r3, fp
  271. eor sl, r6, sl
  272. ldr r6, [r7, #260]
  273. eor ip, fp, ip
  274. vsri.32 q0, q6, #25
  275. eor r9, r6, r9
  276. ldr r6, [r7, #280]
  277. ror sl, sl, #24
  278. vsri.32 q5, q7, #25
  279. eor r8, r6, r8
  280. ldr r6, [r7, #236]
  281. ror r9, r9, #24
  282. ror ip, ip, #24
  283. add r6, sl, r6
  284. str r6, [r7, #276]
  285. ldr r6, [r7, #264]
  286. add r5, r9, r5
  287. str r5, [r7, #272]
  288. vext.32 q5, q5, q5, #1
  289. add r5, ip, r6
  290. ldr r6, [r7, #276]
  291. vext.32 q0, q0, q0, #1
  292. vadd.i32 q4, q4, q5
  293. eors r0, r0, r6
  294. ldr r6, [r7, #272]
  295. vadd.i32 q2, q2, q0
  296. vext.32 q3, q3, q3, #3
  297. ror r8, r8, #24
  298. eors r1, r1, r6
  299. vext.32 q14, q14, q14, #3
  300. add r4, r8, r4
  301. ldr r6, [r7, #284]
  302. veor q3, q4, q3
  303. veor q14, q2, q14
  304. eors r2, r2, r4
  305. ror r1, r1, #25
  306. vext.32 q1, q1, q1, #2
  307. adds r6, r1, r6
  308. str r6, [r7, #284]
  309. vext.32 q15, q15, q15, #2
  310. ldr r6, [r7, #260]
  311. eors r3, r3, r5
  312. ror r2, r2, #25
  313. vrev32.16 q8, q14
  314. adds r6, r2, r6
  315. vrev32.16 q3, q3
  316. str r6, [r7, #268]
  317. vadd.i32 q1, q1, q3
  318. ldr r6, [r7, #280]
  319. vadd.i32 q15, q15, q8
  320. ror r3, r3, #25
  321. veor q5, q1, q5
  322. adds r6, r3, r6
  323. veor q0, q15, q0
  324. str r6, [r7, #264]
  325. ldr r6, [r7, #268]
  326. ror r0, r0, #25
  327. add fp, r0, fp
  328. vshl.i32 q6, q5, #12
  329. eor sl, r6, sl
  330. ldr r6, [r7, #284]
  331. vshl.i32 q14, q0, #12
  332. eor r8, fp, r8
  333. eor ip, r6, ip
  334. ldr r6, [r7, #264]
  335. vsri.32 q6, q5, #20
  336. ror sl, sl, #16
  337. eor r9, r6, r9
  338. ror r6, r8, #16
  339. vsri.32 q14, q0, #20
  340. ldr r8, [r7, #272]
  341. ror ip, ip, #16
  342. add r5, sl, r5
  343. add r8, r6, r8
  344. add r4, ip, r4
  345. str r4, [r7, #236]
  346. eor r0, r8, r0
  347. str r5, [r7, #280]
  348. vadd.i32 q4, q4, q6
  349. ldr r5, [r7, #236]
  350. vadd.i32 q2, q2, q14
  351. ldr r4, [r7, #276]
  352. ror r0, r0, #20
  353. veor q3, q4, q3
  354. eors r1, r1, r5
  355. veor q0, q2, q8
  356. str r8, [r7, #272]
  357. str r0, [r7, #24]
  358. add fp, r0, fp
  359. ldr r8, [r7, #280]
  360. ror r9, r9, #16
  361. ldr r0, [r7, #284]
  362. add r4, r9, r4
  363. str fp, [r7, #260]
  364. ror r1, r1, #20
  365. add fp, r1, r0
  366. eor r2, r8, r2
  367. ldr r0, [r7, #260]
  368. eors r3, r3, r4
  369. vshl.i32 q5, q3, #8
  370. str r4, [r7, #232]
  371. vshl.i32 q8, q0, #8
  372. ldr r4, [r7, #268]
  373. ldr r5, [r7, #264]
  374. ror r2, r2, #20
  375. ror r3, r3, #20
  376. eors r6, r6, r0
  377. adds r5, r3, r5
  378. add r8, r2, r4
  379. vsri.32 q5, q3, #24
  380. ldr r4, [r7, #272]
  381. eor r9, r5, r9
  382. eor ip, fp, ip
  383. vsri.32 q8, q0, #24
  384. eor sl, r8, sl
  385. ror r6, r6, #24
  386. ldr r0, [r7, #280]
  387. str r5, [r7, #276]
  388. adds r4, r6, r4
  389. ldr r5, [r7, #236]
  390. vadd.i32 q1, q1, q5
  391. str r4, [r7, #272]
  392. vadd.i32 q15, q15, q8
  393. ldr r4, [r7, #232]
  394. ror ip, ip, #24
  395. ror sl, sl, #24
  396. ror r9, r9, #24
  397. add r5, ip, r5
  398. add r0, sl, r0
  399. str r5, [r7, #264]
  400. add r5, r9, r4
  401. str r0, [r7, #284]
  402. veor q6, q1, q6
  403. ldr r4, [r7, #24]
  404. veor q14, q15, q14
  405. ldr r0, [r7, #272]
  406. eors r3, r3, r5
  407. vshl.i32 q0, q6, #7
  408. vext.32 q1, q1, q1, #2
  409. eors r0, r0, r4
  410. ldr r4, [r7, #284]
  411. str r0, [r7, #280]
  412. vshl.i32 q3, q14, #7
  413. eors r2, r2, r4
  414. ldr r4, [r7, #280]
  415. ldr r0, [r7, #264]
  416. vsri.32 q0, q6, #25
  417. ror r2, r2, #25
  418. ror r3, r3, #25
  419. eors r1, r1, r0
  420. vsri.32 q3, q14, #25
  421. ror r0, r4, #25
  422. ldr r4, [r7, #256]
  423. ror r1, r1, #25
  424. vext.32 q5, q5, q5, #1
  425. subs r4, r4, #1
  426. str r4, [r7, #256]
  427. vext.32 q15, q15, q15, #2
  428. vext.32 q8, q8, q8, #1
  429. vext.32 q0, q0, q0, #3
  430. vext.32 q3, q3, q3, #3
  431. bne .L3
  432. ldr r4, [r7, #264]
  433. vadd.i32 q14, q10, q9
  434. str r2, [r7, #264]
  435. vadd.i32 q10, q10, q5
  436. ldr r2, [r7, #252]
  437. vld1.64 {d12-d13}, [r2:64]
  438. ldr r2, [r7, #220]
  439. vadd.i32 q4, q11, q4
  440. str ip, [r7, #24]
  441. mov ip, sl
  442. mov sl, r8
  443. ldr r8, [r7, #260]
  444. add sl, sl, r2
  445. ldr r2, [r7, #212]
  446. str r4, [r7, #280]
  447. vadd.i32 q0, q12, q0
  448. ldr r4, [r7, #224]
  449. add r8, r8, r2
  450. ldr r2, [r7, #240]
  451. vadd.i32 q1, q13, q1
  452. str r0, [r7, #232]
  453. add fp, fp, r4
  454. mov r0, r5
  455. ldr r4, [r7, #216]
  456. mov r5, r6
  457. mov r6, r9
  458. ldr r9, [r7, #276]
  459. adds r2, r2, #3
  460. str r2, [r7, #240]
  461. vadd.i32 q2, q11, q2
  462. ldr r2, [r7, #252]
  463. add r9, r9, r4
  464. vadd.i32 q3, q12, q3
  465. ldr r4, [r7, #228]
  466. vadd.i32 q15, q13, q15
  467. str r1, [r7, #268]
  468. vadd.i32 q8, q14, q8
  469. str r3, [r7, #236]
  470. veor q4, q4, q6
  471. ldr r3, [r7, #284]
  472. ldr r1, [r7, #272]
  473. add ip, r4, ip
  474. ldr r4, [r7, #248]
  475. vst1.64 {d8-d9}, [r4:64]
  476. vldr d8, [r2, #16]
  477. vldr d9, [r2, #24]
  478. veor q0, q0, q4
  479. vstr d0, [r4, #16]
  480. vstr d1, [r4, #24]
  481. vldr d0, [r2, #32]
  482. vldr d1, [r2, #40]
  483. veor q1, q1, q0
  484. vstr d2, [r4, #32]
  485. vstr d3, [r4, #40]
  486. vldr d2, [r2, #48]
  487. vldr d3, [r2, #56]
  488. veor q10, q10, q1
  489. vstr d20, [r4, #48]
  490. vstr d21, [r4, #56]
  491. vldr d8, [r2, #64]
  492. vldr d9, [r2, #72]
  493. veor q2, q2, q4
  494. vstr d4, [r4, #64]
  495. vstr d5, [r4, #72]
  496. vldr d10, [r2, #80]
  497. vldr d11, [r2, #88]
  498. veor q3, q3, q5
  499. vstr d6, [r4, #80]
  500. vstr d7, [r4, #88]
  501. vldr d12, [r2, #96]
  502. vldr d13, [r2, #104]
  503. veor q15, q15, q6
  504. vstr d30, [r4, #96]
  505. vstr d31, [r4, #104]
  506. vldr d20, [r2, #112]
  507. vldr d21, [r2, #120]
  508. veor q8, q8, q10
  509. vstr d16, [r4, #112]
  510. vstr d17, [r4, #120]
  511. ldr r4, [r2, #128]
  512. ldr r2, [r7, #248]
  513. vadd.i32 q10, q14, q9
  514. eor r4, fp, r4
  515. vadd.i32 q10, q10, q9
  516. str r4, [r2, #128]
  517. ldr r4, [r7, #252]
  518. ldr r2, [r4, #132]
  519. eor r2, sl, r2
  520. ldr sl, [r7, #248]
  521. str r2, [sl, #132]
  522. ldr r2, [r4, #136]
  523. eor r2, r9, r2
  524. str r2, [sl, #136]
  525. ldr r2, [r4, #140]
  526. eor r2, r8, r2
  527. str r2, [sl, #140]
  528. ldr r2, [r7, #244]
  529. ldr r4, [r4, #144]
  530. ldr r2, [r2, #0]
  531. str r4, [r7, #44]
  532. ldr r4, [r7, #232]
  533. add r8, r4, r2
  534. ldr r2, [r7, #44]
  535. ldr r4, [r7, #244]
  536. eor r8, r8, r2
  537. ldr r2, [r7, #252]
  538. str r8, [sl, #144]
  539. ldr r4, [r4, #4]
  540. ldr r2, [r2, #148]
  541. str r2, [r7, #40]
  542. ldr r2, [r7, #268]
  543. add r8, r2, r4
  544. ldr r4, [r7, #40]
  545. ldr r2, [r7, #244]
  546. eor r8, r8, r4
  547. ldr r4, [r7, #252]
  548. str r8, [sl, #148]
  549. ldr r2, [r2, #8]
  550. ldr r4, [r4, #152]
  551. str r4, [r7, #36]
  552. ldr r4, [r7, #264]
  553. add r8, r4, r2
  554. ldr r2, [r7, #36]
  555. eor r8, r8, r2
  556. str r8, [sl, #152]
  557. ldr r2, [r7, #252]
  558. ldr r4, [r7, #244]
  559. ldr r2, [r2, #156]
  560. ldr r4, [r4, #12]
  561. str r2, [r7, #32]
  562. ldr r2, [r7, #236]
  563. add r8, r2, r4
  564. ldr r4, [r7, #32]
  565. ldr r2, [r7, #252]
  566. eor r8, r8, r4
  567. str r8, [sl, #156]
  568. ldr r8, [r7, #244]
  569. ldr r2, [r2, #160]
  570. ldr r4, [r8, #16]
  571. adds r0, r0, r4
  572. ldr r4, [r7, #252]
  573. eors r0, r0, r2
  574. str r0, [sl, #160]
  575. ldr r0, [r8, #20]
  576. ldr r2, [r4, #164]
  577. adds r1, r1, r0
  578. ldr r0, [r7, #280]
  579. eors r1, r1, r2
  580. str r1, [sl, #164]
  581. ldr r2, [r8, #24]
  582. ldr r1, [r4, #168]
  583. adds r2, r0, r2
  584. eors r2, r2, r1
  585. str r2, [sl, #168]
  586. ldr r1, [r8, #28]
  587. ldr r2, [r4, #172]
  588. adds r3, r3, r1
  589. eors r3, r3, r2
  590. str r3, [sl, #172]
  591. ldr r3, [r4, #176]
  592. eor r3, ip, r3
  593. str r3, [sl, #176]
  594. ldr r3, [r4, #180]
  595. ldr r4, [r7, #400]
  596. eors r6, r6, r3
  597. str r6, [sl, #180]
  598. ldr r6, [r7, #252]
  599. ldr r2, [r4, #0]
  600. ldr r3, [r6, #184]
  601. adds r5, r5, r2
  602. eors r5, r5, r3
  603. str r5, [sl, #184]
  604. ldr r2, [r6, #188]
  605. adds r6, r6, #192
  606. ldr r3, [r4, #4]
  607. str r6, [r7, #252]
  608. ldr r0, [r7, #24]
  609. ldr r1, [r7, #240]
  610. adds r4, r0, r3
  611. eors r4, r4, r2
  612. ldr r2, [r7, #204]
  613. str r4, [sl, #188]
  614. add sl, sl, #192
  615. cmp r1, r2
  616. str sl, [r7, #248]
  617. bne .L4
  618. ldr r4, [r7, #192]
  619. ldr r3, [r7, #180]
  620. ldr r6, [r7, #188]
  621. adds r5, r3, r4
  622. ldr r8, [r7, #184]
  623. lsls r5, r5, #6
  624. adds r4, r6, r5
  625. add r5, r8, r5
  626. .L2:
  627. ldr r9, [r7, #196]
  628. movw r3, #43691
  629. movt r3, 43690
  630. ldr sl, [r7, #196]
  631. umull r9, r3, r3, r9
  632. lsrs r3, r3, #7
  633. add r3, r3, r3, lsl #1
  634. sub r3, sl, r3, lsl #6
  635. lsrs r6, r3, #6
  636. beq .L5
  637. add r1, r5, #16
  638. add r2, r4, #16
  639. mov r0, r6
  640. vldr d30, .L41
  641. vldr d31, .L41+8
  642. .L6:
  643. vmov q8, q10 @ v4si
  644. movs r3, #10
  645. vmov q1, q13 @ v4si
  646. vmov q14, q12 @ v4si
  647. vmov q3, q11 @ v4si
  648. .L7:
  649. vadd.i32 q3, q3, q14
  650. subs r3, r3, #1
  651. veor q2, q8, q3
  652. vrev32.16 q2, q2
  653. vadd.i32 q8, q1, q2
  654. veor q9, q8, q14
  655. vshl.i32 q14, q9, #12
  656. vsri.32 q14, q9, #20
  657. vadd.i32 q3, q3, q14
  658. veor q2, q3, q2
  659. vshl.i32 q9, q2, #8
  660. vsri.32 q9, q2, #24
  661. vadd.i32 q8, q8, q9
  662. vext.32 q9, q9, q9, #3
  663. veor q14, q8, q14
  664. vext.32 q1, q8, q8, #2
  665. vshl.i32 q8, q14, #7
  666. vsri.32 q8, q14, #25
  667. vext.32 q8, q8, q8, #1
  668. vadd.i32 q3, q3, q8
  669. veor q2, q3, q9
  670. vrev32.16 q2, q2
  671. vadd.i32 q9, q1, q2
  672. veor q8, q9, q8
  673. vshl.i32 q14, q8, #12
  674. vsri.32 q14, q8, #20
  675. vadd.i32 q3, q3, q14
  676. veor q2, q3, q2
  677. vshl.i32 q8, q2, #8
  678. vsri.32 q8, q2, #24
  679. vadd.i32 q9, q9, q8
  680. vext.32 q8, q8, q8, #1
  681. veor q14, q9, q14
  682. vext.32 q1, q9, q9, #2
  683. vshl.i32 q9, q14, #7
  684. vsri.32 q9, q14, #25
  685. vext.32 q14, q9, q9, #3
  686. bne .L7
  687. vadd.i32 q8, q10, q8
  688. subs r0, r0, #1
  689. vadd.i32 q3, q11, q3
  690. vldr d0, [r1, #-16]
  691. vldr d1, [r1, #-8]
  692. vadd.i32 q14, q12, q14
  693. vadd.i32 q1, q13, q1
  694. veor q3, q3, q0
  695. vstr d6, [r2, #-16]
  696. vstr d7, [r2, #-8]
  697. vadd.i32 q10, q10, q15
  698. vld1.64 {d8-d9}, [r1:64]
  699. veor q14, q14, q4
  700. vst1.64 {d28-d29}, [r2:64]
  701. vldr d10, [r1, #16]
  702. vldr d11, [r1, #24]
  703. veor q1, q1, q5
  704. vstr d2, [r2, #16]
  705. vstr d3, [r2, #24]
  706. vldr d18, [r1, #32]
  707. vldr d19, [r1, #40]
  708. add r1, r1, #64
  709. veor q8, q8, q9
  710. vstr d16, [r2, #32]
  711. vstr d17, [r2, #40]
  712. add r2, r2, #64
  713. bne .L6
  714. lsls r6, r6, #6
  715. adds r4, r4, r6
  716. adds r5, r5, r6
  717. .L5:
  718. ldr r6, [r7, #196]
  719. ands ip, r6, #63
  720. beq .L1
  721. vmov q8, q10 @ v4si
  722. movs r3, #10
  723. vmov q14, q13 @ v4si
  724. vmov q9, q12 @ v4si
  725. vmov q15, q11 @ v4si
  726. .L10:
  727. vadd.i32 q15, q15, q9
  728. subs r3, r3, #1
  729. veor q8, q8, q15
  730. vrev32.16 q8, q8
  731. vadd.i32 q3, q14, q8
  732. veor q9, q3, q9
  733. vshl.i32 q14, q9, #12
  734. vsri.32 q14, q9, #20
  735. vadd.i32 q15, q15, q14
  736. veor q9, q15, q8
  737. vshl.i32 q8, q9, #8
  738. vsri.32 q8, q9, #24
  739. vadd.i32 q9, q3, q8
  740. vext.32 q8, q8, q8, #3
  741. veor q2, q9, q14
  742. vext.32 q14, q9, q9, #2
  743. vshl.i32 q9, q2, #7
  744. vsri.32 q9, q2, #25
  745. vext.32 q9, q9, q9, #1
  746. vadd.i32 q15, q15, q9
  747. veor q3, q15, q8
  748. vrev32.16 q3, q3
  749. vadd.i32 q14, q14, q3
  750. veor q8, q14, q9
  751. vshl.i32 q9, q8, #12
  752. vsri.32 q9, q8, #20
  753. vadd.i32 q15, q15, q9
  754. veor q3, q15, q3
  755. vshl.i32 q8, q3, #8
  756. vsri.32 q8, q3, #24
  757. vadd.i32 q14, q14, q8
  758. vext.32 q8, q8, q8, #1
  759. veor q3, q14, q9
  760. vext.32 q14, q14, q14, #2
  761. vshl.i32 q9, q3, #7
  762. vsri.32 q9, q3, #25
  763. vext.32 q9, q9, q9, #3
  764. bne .L10
  765. cmp ip, #15
  766. vadd.i32 q11, q11, q15
  767. bhi .L37
  768. ldr r9, [r7, #200]
  769. vst1.64 {d22-d23}, [r9:128]
  770. .L14:
  771. ldr sl, [r7, #196]
  772. and r3, sl, #48
  773. cmp ip, r3
  774. bls .L1
  775. adds r0, r5, r3
  776. adds r1, r4, r3
  777. add r2, r0, #16
  778. add r6, r1, #16
  779. cmp r1, r2
  780. it cc
  781. cmpcc r0, r6
  782. rsb r9, r3, ip
  783. ite cc
  784. movcc r2, #0
  785. movcs r2, #1
  786. cmp r9, #15
  787. ite ls
  788. movls r2, #0
  789. andhi r2, r2, #1
  790. lsr r8, r9, #4
  791. eor r2, r2, #1
  792. cmp r8, #0
  793. it eq
  794. orreq r2, r2, #1
  795. lsl sl, r8, #4
  796. cbnz r2, .L35
  797. ldr fp, [r7, #200]
  798. add r6, fp, r3
  799. .L17:
  800. vld1.8 {q8}, [r0]!
  801. adds r2, r2, #1
  802. cmp r8, r2
  803. vld1.8 {q9}, [r6]!
  804. veor q8, q9, q8
  805. vst1.8 {q8}, [r1]!
  806. bhi .L17
  807. cmp r9, sl
  808. add r3, r3, sl
  809. beq .L1
  810. .L35:
  811. ldr r0, [r7, #200]
  812. .L25:
  813. ldrb r2, [r5, r3] @ zero_extendqisi2
  814. ldrb r1, [r3, r0] @ zero_extendqisi2
  815. eors r2, r2, r1
  816. strb r2, [r4, r3]
  817. adds r3, r3, #1
  818. cmp ip, r3
  819. bhi .L25
  820. .L1:
  821. add r7, r7, #304
  822. mov sp, r7
  823. fldmfdd sp!, {d8, d9, d10, d11, d12, d13, d14, d15}
  824. pop {r4, r5, r6, r7, r8, r9, sl, fp}
  825. bx lr
  826. .L37:
  827. cmp ip, #31
  828. vld1.64 {d0-d1}, [r5:64]
  829. vadd.i32 q9, q12, q9
  830. veor q11, q11, q0
  831. vst1.64 {d22-d23}, [r4:64]
  832. bls .L12
  833. cmp ip, #47
  834. vldr d2, [r5, #16]
  835. vldr d3, [r5, #24]
  836. vadd.i32 q13, q13, q14
  837. veor q9, q9, q1
  838. vstr d18, [r4, #16]
  839. vstr d19, [r4, #24]
  840. bls .L13
  841. vadd.i32 q8, q8, q10
  842. vldr d0, [r5, #32]
  843. vldr d1, [r5, #40]
  844. ldr r6, [r7, #200]
  845. vstr d16, [r6, #48]
  846. vstr d17, [r6, #56]
  847. veor q8, q13, q0
  848. vstr d16, [r4, #32]
  849. vstr d17, [r4, #40]
  850. b .L14
  851. .L12:
  852. ldr r8, [r7, #200]
  853. vstr d18, [r8, #16]
  854. vstr d19, [r8, #24]
  855. b .L14
  856. .L20:
  857. ldr r5, [r7, #184]
  858. ldr r4, [r7, #188]
  859. b .L2
  860. .L13:
  861. ldr r6, [r7, #200]
  862. vstr d26, [r6, #32]
  863. vstr d27, [r6, #40]
  864. b .L14
  865. .L42:
  866. .align 3
  867. .L41:
  868. .word 1
  869. .word 0
  870. .word 0
  871. .word 0
  872. .size CRYPTO_chacha_20_neon, .-CRYPTO_chacha_20_neon
  873. .section .rodata
  874. .align 3
  875. .LANCHOR0 = . + 0
  876. .LC0:
  877. .word 1634760805
  878. .word 857760878
  879. .word 2036477234
  880. .word 1797285236
  881. .ident "GCC: (crosstool-NG linaro-1.13.1-4.7-2012.10-20121022 - Linaro GCC 2012.10) 4.7.3 20121001 (prerelease)"
  882. .section .note.GNU-stack,"",%progbits
  883. #endif /* !OPENSSL_NO_ASM */