From Crimson Dormouse, 9 Years ago, written in Plain Text.
This paste is a reply to poly1 from Blush Goat - view diff
Embed
  1. SECTION_TEXT
  2.  
  3. GLOBAL_HIDDEN_FN_EXT poly1305_block_size_avx,0,0
  4. movl $32, %eax
  5. ret
  6. FN_END poly1305_block_size_avx
  7.  
  8. GLOBAL_HIDDEN_FN_EXT poly1305_init_ext_avx,4,1
  9. poly1305_init_ext_avx_local:
  10. pushq %r15
  11. pushq %r14
  12. pushq %r13
  13. pushq %r12
  14. pushq %rbp
  15. pushq %rbx
  16. movq %rdi, %rbp
  17. testq %rdx, %rdx
  18. movq $-1, %rax
  19. cmovne %rdx, %rax
  20. movq %rax, -16(%rsp)
  21. vpxor %xmm0, %xmm0, %xmm0
  22. vmovdqu %xmm0, (%rdi)
  23. vmovdqu %xmm0, 16(%rdi)
  24. vmovdqu %xmm0, 32(%rdi)
  25. movq (%rsi), %r9
  26. movq 8(%rsi), %r8
  27. movabsq $17575274610687, %r10
  28. andq %r9, %r10
  29. shrq $44, %r9
  30. movq %r8, %rax
  31. salq $20, %rax
  32. orq %rax, %r9
  33. movabsq $17592181915647, %rax
  34. andq %rax, %r9
  35. shrq $24, %r8
  36. movabsq $68719475727, %rax
  37. andq %rax, %r8
  38. leaq 40(%rdi), %r15
  39. movl %r10d, %eax
  40. andl $67108863, %eax
  41. movl %eax, 40(%rdi)
  42. movl %r9d, %edx
  43. sall $18, %edx
  44. movq %r10, %rax
  45. shrq $26, %rax
  46. orl %edx, %eax
  47. andl $67108863, %eax
  48. movl %eax, 44(%rdi)
  49. movq %r9, %rax
  50. shrq $8, %rax
  51. andl $67108863, %eax
  52. movl %eax, 48(%rdi)
  53. movq %r9, %rax
  54. shrq $34, %rax
  55. movl %r8d, %edx
  56. sall $10, %edx
  57. orl %edx, %eax
  58. andl $67108863, %eax
  59. movl %eax, 52(%rdi)
  60. movq %r8, %rax
  61. shrq $16, %rax
  62. movl %eax, 56(%rdi)
  63. movq 16(%rsi), %rax
  64. movq %rax, 104(%rdi)
  65. movq 24(%rsi), %rax
  66. movq %rax, 112(%rdi)
  67. movl $0, %ebx
  68. .L7:
  69. testq %rbx, %rbx
  70. jne .L4
  71. leaq 60(%rbp), %r15
  72. cmpq $16, -16(%rsp)
  73. ja .L6
  74. jmp .L5
  75. .L4:
  76. cmpq $1, %rbx
  77. jne .L6
  78. leaq 80(%rbp), %r15
  79. cmpq $95, -16(%rsp)
  80. jbe .L5
  81. .L6:
  82. leaq (%r8,%r8,4), %rsi
  83. salq $2, %rsi
  84. leaq (%r9,%r9), %rdi
  85. movq %rdi, %rax
  86. mulq %rsi
  87. movq %rax, %r13
  88. movq %rdx, %r14
  89. movq %r10, %rax
  90. mulq %r10
  91. addq %r13, %rax
  92. adcq %r14, %rdx
  93. movabsq $17592186044415, %rcx
  94. movq %rax, -72(%rsp)
  95. movq %rdx, -64(%rsp)
  96. andq -72(%rsp), %rcx
  97. leaq (%r10,%r10), %r11
  98. movq %r11, %rax
  99. mulq %r9
  100. movq %rax, %r11
  101. movq %rdx, %r12
  102. movq %rsi, %rax
  103. mulq %r8
  104. movq %rax, %r13
  105. movq %rdx, %r14
  106. addq %r11, %r13
  107. adcq %r12, %r14
  108. movq -72(%rsp), %rax
  109. movq -64(%rsp), %rdx
  110. shrdq $44, %rdx, %rax
  111. movq %rax, -56(%rsp)
  112. movq $0, -48(%rsp)
  113. addq -56(%rsp), %r13
  114. adcq -48(%rsp), %r14
  115. movabsq $17592186044415, %rsi
  116. andq %r13, %rsi
  117. leaq (%r8,%r8), %rdi
  118. movq %rdi, %rax
  119. mulq %r10
  120. movq %rax, %r11
  121. movq %rdx, %r12
  122. movq %r9, %rax
  123. mulq %r9
  124. addq %r11, %rax
  125. adcq %r12, %rdx
  126. shrdq $44, %r14, %r13
  127. movq %r13, -40(%rsp)
  128. movq $0, -32(%rsp)
  129. addq -40(%rsp), %rax
  130. adcq -32(%rsp), %rdx
  131. movabsq $4398046511103, %rdi
  132. andq %rax, %rdi
  133. shrdq $42, %rdx, %rax
  134. leaq (%rax,%rax,4), %r8
  135. addq %rcx, %r8
  136. movabsq $17592186044415, %r10
  137. andq %r8, %r10
  138. shrq $44, %r8
  139. addq %rsi, %r8
  140. movabsq $17592186044415, %r9
  141. andq %r8, %r9
  142. shrq $44, %r8
  143. addq %rdi, %r8
  144. movl %r10d, %eax
  145. andl $67108863, %eax
  146. movl %eax, (%r15)
  147. movl %r9d, %edx
  148. sall $18, %edx
  149. movq %r10, %rax
  150. shrq $26, %rax
  151. orl %edx, %eax
  152. andl $67108863, %eax
  153. movl %eax, 4(%r15)
  154. movq %r9, %rax
  155. shrq $8, %rax
  156. andl $67108863, %eax
  157. movl %eax, 8(%r15)
  158. movl %r8d, %edx
  159. sall $10, %edx
  160. movq %r9, %rax
  161. shrq $34, %rax
  162. orl %edx, %eax
  163. andl $67108863, %eax
  164. movl %eax, 12(%r15)
  165. movq %r8, %rax
  166. shrq $16, %rax
  167. movl %eax, 16(%r15)
  168. addq $1, %rbx
  169. cmpq $2, %rbx
  170. jne .L7
  171. .L5:
  172. movq $0, 120(%rbp)
  173. popq %rbx
  174. popq %rbp
  175. popq %r12
  176. popq %r13
  177. popq %r14
  178. popq %r15
  179. ret
  180. FN_END poly1305_init_ext_avx
  181.  
  182.  
  183.  
  184. GLOBAL_HIDDEN_FN poly1305_blocks_avx
  185. poly1305_blocks_avx_local:
  186. pushq %rbp
  187. movq %rsp, %rbp
  188. pushq %rbx
  189. andq $-64, %rsp
  190. subq $200, %rsp
  191. movl $(1 << 24), %eax
  192. movl $((1 << 26) - 1), %r8d
  193. movl $(5), %r9d
  194. vmovd %eax, %xmm1
  195. vmovd %r8d, %xmm0
  196. vmovd %r9d, %xmm2
  197. vpshufd $68, %xmm1, %xmm1
  198. vpshufd $68, %xmm0, %xmm0
  199. vpshufd $68, %xmm2, %xmm2
  200. vmovdqa %xmm1, 152(%rsp)
  201. vmovdqa %xmm2, 184(%rsp)
  202. movq 120(%rdi), %rax
  203. testb $4, %al
  204. je .L12
  205. vpsrldq $8, %xmm1, %xmm1
  206. vmovdqa %xmm1, 152(%rsp)
  207. .L12:
  208. testb $8, %al
  209. je .L13
  210. vpxor %xmm1, %xmm1, %xmm1
  211. vmovdqa %xmm1, 152(%rsp)
  212. .L13:
  213. testb $1, %al
  214. jne .L14
  215. vmovq (%rsi), %xmm1
  216. vpinsrq $1, 16(%rsi), %xmm1, %xmm1
  217. vmovq 8(%rsi), %xmm3
  218. vpinsrq $1, 24(%rsi), %xmm3, %xmm2
  219. vpand %xmm0, %xmm1, %xmm7
  220. vpsrlq $26, %xmm1, %xmm12
  221. vpand %xmm0, %xmm12, %xmm12
  222. vpsllq $12, %xmm2, %xmm3
  223. vpsrlq $52, %xmm1, %xmm1
  224. vpor %xmm3, %xmm1, %xmm6
  225. vpand %xmm0, %xmm6, %xmm3
  226. vpsrlq $26, %xmm6, %xmm6
  227. vpand %xmm0, %xmm6, %xmm6
  228. vpsrlq $40, %xmm2, %xmm2
  229. vpor 152(%rsp), %xmm2, %xmm2
  230. addq $32, %rsi
  231. subq $32, %rdx
  232. orq $1, %rax
  233. movq %rax, 120(%rdi)
  234. jmp .L15
  235. .L14:
  236. vmovdqu (%rdi), %xmm12
  237. vmovdqu 16(%rdi), %xmm6
  238. vmovdqu 32(%rdi), %xmm2
  239. vpshufd $80, %xmm12, %xmm7
  240. vpshufd $250, %xmm12, %xmm12
  241. vpshufd $80, %xmm6, %xmm3
  242. vpshufd $250, %xmm6, %xmm6
  243. vpshufd $80, %xmm2, %xmm2
  244. .L15:
  245. movq 120(%rdi), %rax
  246. testb $48, %al
  247. je .L16
  248. testb $16, %al
  249. je .L17
  250. vmovdqu 40(%rdi), %xmm1
  251. vmovd 56(%rdi), %xmm4
  252. vmovdqu 60(%rdi), %xmm5
  253. vpunpckldq %xmm1, %xmm5, %xmm11
  254. vpunpckhdq %xmm1, %xmm5, %xmm5
  255. vmovd 76(%rdi), %xmm1
  256. vpunpcklqdq %xmm4, %xmm1, %xmm4
  257. jmp .L18
  258. .L17:
  259. movl $(1), %r8d
  260. vmovdqu 40(%rdi), %xmm5
  261. vmovd 56(%rdi), %xmm4
  262. vmovd %r8d, %xmm1
  263. vpunpckldq %xmm1, %xmm5, %xmm11
  264. vpunpckhdq %xmm1, %xmm5, %xmm5
  265. .L18:
  266. vpshufd $80, %xmm11, %xmm1
  267. vpshufd $250, %xmm11, %xmm11
  268. vpshufd $80, %xmm5, %xmm10
  269. vpshufd $250, %xmm5, %xmm5
  270. jmp .L19
  271. .L16:
  272. vmovdqu 60(%rdi), %xmm5
  273. vpshufd $0, %xmm5, %xmm1
  274. vpshufd $85, %xmm5, %xmm11
  275. vpshufd $170, %xmm5, %xmm10
  276. vpshufd $255, %xmm5, %xmm5
  277. vmovd 76(%rdi), %xmm4
  278. vpshufd $0, %xmm4, %xmm4
  279. .L19:
  280. vmovdqa %xmm11, 136(%rsp)
  281. vpmuludq 184(%rsp), %xmm11, %xmm13
  282. vmovdqa %xmm13, 120(%rsp)
  283. vmovdqa %xmm10, 104(%rsp)
  284. vpmuludq 184(%rsp), %xmm10, %xmm13
  285. vmovdqa %xmm13, 88(%rsp)
  286. vmovdqa %xmm5, 72(%rsp)
  287. vpmuludq 184(%rsp), %xmm5, %xmm5
  288. vmovdqa %xmm5, 56(%rsp)
  289. vmovdqa %xmm4, 40(%rsp)
  290. vpmuludq 184(%rsp), %xmm4, %xmm4
  291. vmovdqa %xmm4, 24(%rsp)
  292. cmpq $63, %rdx
  293. jbe .L20
  294. vmovdqu 80(%rdi), %xmm4
  295. vpshufd $0, %xmm4, %xmm5
  296. vmovdqa %xmm5, 8(%rsp)
  297. vpshufd $85, %xmm4, %xmm5
  298. vmovdqa %xmm5, -8(%rsp)
  299. vpshufd $170, %xmm4, %xmm13
  300. vmovdqa %xmm13, -24(%rsp)
  301. vpshufd $255, %xmm4, %xmm4
  302. vmovdqa %xmm4, %xmm10
  303. vmovdqa %xmm4, -40(%rsp)
  304. vmovd 96(%rdi), %xmm4
  305. vpshufd $0, %xmm4, %xmm4
  306. vmovdqa %xmm4, %xmm8
  307. vmovdqa %xmm4, -56(%rsp)
  308. vpmuludq 184(%rsp), %xmm5, %xmm4
  309. vmovdqa %xmm4, -72(%rsp)
  310. vpmuludq 184(%rsp), %xmm13, %xmm4
  311. vmovdqa %xmm4, -88(%rsp)
  312. vpmuludq 184(%rsp), %xmm10, %xmm4
  313. vmovdqa %xmm4, -104(%rsp)
  314. vpmuludq 184(%rsp), %xmm8, %xmm4
  315. vmovdqa %xmm4, -120(%rsp)
  316. leaq 32(%rsi), %rax
  317. movq %rdx, %rcx
  318. vmovdqa %xmm1, 168(%rsp)
  319. jmp .L22
  320. .p2align 6
  321. nop
  322. nop
  323. nop
  324. nop
  325. .L22:
  326. vpmuludq -72(%rsp), %xmm2, %xmm13
  327. vmovdqa -88(%rsp), %xmm5
  328. vpmuludq %xmm5, %xmm6, %xmm4
  329. vpmuludq %xmm5, %xmm2, %xmm11
  330. vmovdqa -104(%rsp), %xmm9
  331. vpmuludq %xmm9, %xmm6, %xmm5
  332. vpmuludq %xmm9, %xmm2, %xmm10
  333. vpaddq %xmm4, %xmm13, %xmm13
  334. vpmuludq %xmm9, %xmm3, %xmm4
  335. vmovdqa -120(%rsp), %xmm8
  336. vpmuludq %xmm8, %xmm2, %xmm9
  337. vpaddq %xmm5, %xmm11, %xmm11
  338. vmovdqa %xmm8, %xmm5
  339. vpmuludq %xmm8, %xmm12, %xmm8
  340. vpmuludq %xmm5, %xmm3, %xmm14
  341. vpaddq %xmm4, %xmm13, %xmm13
  342. vpmuludq %xmm5, %xmm6, %xmm4
  343. vmovdqa 8(%rsp), %xmm15
  344. vpmuludq %xmm15, %xmm6, %xmm5
  345. vpaddq %xmm8, %xmm13, %xmm13
  346. vpmuludq %xmm15, %xmm2, %xmm8
  347. vpaddq %xmm14, %xmm11, %xmm11
  348. vpmuludq %xmm15, %xmm7, %xmm14
  349. vpaddq %xmm4, %xmm10, %xmm10
  350. vpmuludq %xmm15, %xmm12, %xmm4
  351. vpaddq %xmm5, %xmm9, %xmm9
  352. vpmuludq %xmm15, %xmm3, %xmm5
  353. vmovdqa -8(%rsp), %xmm15
  354. vpmuludq %xmm15, %xmm3, %xmm2
  355. vpaddq %xmm14, %xmm13, %xmm13
  356. vpmuludq %xmm15, %xmm6, %xmm6
  357. vpaddq %xmm4, %xmm11, %xmm11
  358. vpmuludq %xmm15, %xmm7, %xmm4
  359. vpaddq %xmm5, %xmm10, %xmm10
  360. vmovq -32(%rax), %xmm5
  361. vpinsrq $1, -16(%rax), %xmm5, %xmm5
  362. vpmuludq %xmm15, %xmm12, %xmm14
  363. vpaddq %xmm2, %xmm9, %xmm9
  364. vmovdqa -24(%rsp), %xmm2
  365. vpmuludq %xmm2, %xmm12, %xmm15
  366. vpaddq %xmm6, %xmm8, %xmm8
  367. vpmuludq %xmm2, %xmm3, %xmm3
  368. vpaddq %xmm4, %xmm11, %xmm11
  369. vmovq -24(%rax), %xmm4
  370. vpinsrq $1, -8(%rax), %xmm4, %xmm6
  371. vpmuludq %xmm2, %xmm7, %xmm4
  372. vpaddq %xmm14, %xmm10, %xmm10
  373. vmovdqa -40(%rsp), %xmm1
  374. vpmuludq %xmm1, %xmm7, %xmm14
  375. vpaddq %xmm15, %xmm9, %xmm9
  376. vpand %xmm5, %xmm0, %xmm2
  377. vpmuludq %xmm1, %xmm12, %xmm12
  378. vpaddq %xmm3, %xmm8, %xmm8
  379. vpsrlq $26, %xmm5, %xmm3
  380. vpand %xmm3, %xmm0, %xmm3
  381. vpmuludq -56(%rsp), %xmm7, %xmm7
  382. vpaddq %xmm4, %xmm10, %xmm10
  383. vpsllq $12, %xmm6, %xmm15
  384. vpsrlq $52, %xmm5, %xmm4
  385. vpor %xmm15, %xmm4, %xmm4
  386. vpaddq %xmm14, %xmm9, %xmm9
  387. vpsrlq $14, %xmm6, %xmm5
  388. vpand %xmm5, %xmm0, %xmm5
  389. vpaddq %xmm12, %xmm8, %xmm8
  390. vpand %xmm4, %xmm0, %xmm4
  391. vpaddq %xmm7, %xmm8, %xmm8
  392. vpsrlq $40, %xmm6, %xmm6
  393. vpor 152(%rsp), %xmm6, %xmm6
  394. vmovdqu (%rax), %xmm12
  395. vmovdqu 16(%rax), %xmm7
  396. vpunpckldq %xmm7, %xmm12, %xmm15
  397. vpunpckhdq %xmm7, %xmm12, %xmm7
  398. vpxor %xmm14, %xmm14, %xmm14
  399. vpunpckldq %xmm14, %xmm15, %xmm12
  400. vpunpckhdq %xmm14, %xmm15, %xmm15
  401. vpunpckldq %xmm14, %xmm7, %xmm14
  402. vpxor %xmm1, %xmm1, %xmm1
  403. vpunpckhdq %xmm1, %xmm7, %xmm7
  404. vpsllq $6, %xmm15, %xmm15
  405. vpsllq $12, %xmm14, %xmm14
  406. vpsllq $18, %xmm7, %xmm7
  407. vpaddq %xmm12, %xmm13, %xmm12
  408. vpaddq %xmm15, %xmm11, %xmm15
  409. vpaddq %xmm14, %xmm10, %xmm14
  410. vpaddq %xmm7, %xmm9, %xmm7
  411. vpaddq 152(%rsp), %xmm8, %xmm8
  412. vpmuludq 120(%rsp), %xmm6, %xmm13
  413. vmovdqa 88(%rsp), %xmm10
  414. vpmuludq %xmm10, %xmm5, %xmm9
  415. vpmuludq %xmm10, %xmm6, %xmm11
  416. vmovdqa 56(%rsp), %xmm1
  417. vpmuludq %xmm1, %xmm5, %xmm10
  418. vpaddq %xmm13, %xmm12, %xmm12
  419. vpmuludq %xmm1, %xmm6, %xmm13
  420. vpaddq %xmm9, %xmm12, %xmm12
  421. vpmuludq %xmm1, %xmm4, %xmm9
  422. vpaddq %xmm11, %xmm15, %xmm15
  423. vmovdqa 24(%rsp), %xmm1
  424. vpmuludq %xmm1, %xmm6, %xmm11
  425. vpaddq %xmm10, %xmm15, %xmm10
  426. vpmuludq %xmm1, %xmm3, %xmm15
  427. vpaddq %xmm13, %xmm14, %xmm14
  428. vpmuludq %xmm1, %xmm4, %xmm13
  429. vpaddq %xmm9, %xmm12, %xmm9
  430. vpmuludq %xmm1, %xmm5, %xmm12
  431. vpaddq %xmm11, %xmm7, %xmm7
  432. vpmuludq 168(%rsp), %xmm5, %xmm11
  433. vpaddq %xmm15, %xmm9, %xmm9
  434. vpmuludq 168(%rsp), %xmm6, %xmm6
  435. vpaddq %xmm13, %xmm10, %xmm10
  436. vpmuludq 168(%rsp), %xmm2, %xmm15
  437. vpaddq %xmm12, %xmm14, %xmm14
  438. vpmuludq 168(%rsp), %xmm3, %xmm13
  439. vpaddq %xmm11, %xmm7, %xmm11
  440. vpmuludq 168(%rsp), %xmm4, %xmm12
  441. vpaddq %xmm6, %xmm8, %xmm6
  442. vmovdqa 136(%rsp), %xmm8
  443. vpmuludq %xmm8, %xmm4, %xmm7
  444. vpaddq %xmm15, %xmm9, %xmm9
  445. vpmuludq %xmm8, %xmm5, %xmm5
  446. vpaddq %xmm13, %xmm10, %xmm10
  447. vpmuludq %xmm8, %xmm2, %xmm15
  448. vpaddq %xmm12, %xmm14, %xmm14
  449. vpmuludq %xmm8, %xmm3, %xmm8
  450. vpaddq %xmm7, %xmm11, %xmm11
  451. vmovdqa 104(%rsp), %xmm7
  452. vpmuludq %xmm7, %xmm3, %xmm13
  453. vpaddq %xmm5, %xmm6, %xmm6
  454. vpmuludq %xmm7, %xmm4, %xmm4
  455. vpaddq %xmm15, %xmm10, %xmm10
  456. vpmuludq %xmm7, %xmm2, %xmm15
  457. vpaddq %xmm8, %xmm14, %xmm14
  458. vmovdqa 72(%rsp), %xmm5
  459. vpmuludq %xmm5, %xmm2, %xmm7
  460. vpaddq %xmm13, %xmm11, %xmm11
  461. vpmuludq %xmm5, %xmm3, %xmm3
  462. vpaddq %xmm4, %xmm6, %xmm6
  463. vpmuludq 40(%rsp), %xmm2, %xmm2
  464. vpaddq %xmm15, %xmm14, %xmm14
  465. vpaddq %xmm7, %xmm11, %xmm11
  466. vpaddq %xmm3, %xmm6, %xmm6
  467. vpaddq %xmm2, %xmm6, %xmm2
  468. vpsrlq $26, %xmm9, %xmm12
  469. vpsrlq $26, %xmm11, %xmm5
  470. vpand %xmm0, %xmm9, %xmm9
  471. vpand %xmm0, %xmm11, %xmm11
  472. vpaddq %xmm12, %xmm10, %xmm10
  473. vpaddq %xmm5, %xmm2, %xmm2
  474. vpsrlq $26, %xmm10, %xmm3
  475. vpsrlq $26, %xmm2, %xmm7
  476. vpand %xmm0, %xmm10, %xmm10
  477. vpand %xmm0, %xmm2, %xmm2
  478. vpaddq %xmm3, %xmm14, %xmm3
  479. vpmuludq 184(%rsp), %xmm7, %xmm7
  480. vpaddq %xmm7, %xmm9, %xmm9
  481. vpsrlq $26, %xmm3, %xmm6
  482. vpsrlq $26, %xmm9, %xmm12
  483. vpand %xmm0, %xmm3, %xmm3
  484. vpand %xmm0, %xmm9, %xmm7
  485. vpaddq %xmm6, %xmm11, %xmm6
  486. vpaddq %xmm12, %xmm10, %xmm12
  487. vpsrlq $26, %xmm6, %xmm8
  488. vpand %xmm0, %xmm6, %xmm6
  489. vpaddq %xmm8, %xmm2, %xmm2
  490. subq $64, %rcx
  491. addq $64, %rax
  492. cmpq $63, %rcx
  493. ja .L22
  494. vmovdqa 168(%rsp), %xmm1
  495. leaq -64(%rdx), %rax
  496. andq $-64, %rax
  497. leaq 64(%rsi,%rax), %rsi
  498. andl $63, %edx
  499. .L20:
  500. cmpq $31, %rdx
  501. jbe .L23
  502. vpmuludq 120(%rsp), %xmm2, %xmm11
  503. vmovdqa 88(%rsp), %xmm4
  504. vpmuludq %xmm4, %xmm6, %xmm0
  505. vpmuludq %xmm4, %xmm2, %xmm10
  506. vmovdqa 56(%rsp), %xmm4
  507. vpmuludq %xmm4, %xmm6, %xmm8
  508. vpmuludq %xmm4, %xmm2, %xmm5
  509. vpaddq %xmm0, %xmm11, %xmm11
  510. vpmuludq %xmm4, %xmm3, %xmm0
  511. vmovdqa 24(%rsp), %xmm13
  512. vpmuludq %xmm13, %xmm2, %xmm4
  513. vpaddq %xmm8, %xmm10, %xmm10
  514. vpmuludq %xmm13, %xmm12, %xmm8
  515. vpmuludq %xmm13, %xmm3, %xmm9
  516. vpaddq %xmm0, %xmm11, %xmm11
  517. vpmuludq %xmm13, %xmm6, %xmm13
  518. vpmuludq %xmm1, %xmm6, %xmm0
  519. vpaddq %xmm8, %xmm11, %xmm8
  520. vpmuludq %xmm1, %xmm2, %xmm2
  521. vpaddq %xmm9, %xmm10, %xmm9
  522. vpmuludq %xmm1, %xmm7, %xmm11
  523. vpaddq %xmm13, %xmm5, %xmm5
  524. vpmuludq %xmm1, %xmm12, %xmm10
  525. vpaddq %xmm0, %xmm4, %xmm0
  526. vpmuludq %xmm1, %xmm3, %xmm1
  527. vmovdqa 136(%rsp), %xmm4
  528. vpmuludq %xmm4, %xmm3, %xmm14
  529. vpaddq %xmm11, %xmm8, %xmm11
  530. vpmuludq %xmm4, %xmm6, %xmm6
  531. vpaddq %xmm10, %xmm9, %xmm9
  532. vpmuludq %xmm4, %xmm7, %xmm15
  533. vpaddq %xmm1, %xmm5, %xmm5
  534. vpmuludq %xmm4, %xmm12, %xmm1
  535. vpaddq %xmm14, %xmm0, %xmm0
  536. vmovdqa 104(%rsp), %xmm4
  537. vpmuludq %xmm4, %xmm12, %xmm8
  538. vpaddq %xmm6, %xmm2, %xmm2
  539. vpmuludq %xmm4, %xmm3, %xmm3
  540. vpaddq %xmm15, %xmm9, %xmm9
  541. vpmuludq %xmm4, %xmm7, %xmm10
  542. vpaddq %xmm1, %xmm5, %xmm1
  543. vmovdqa 72(%rsp), %xmm4
  544. vpmuludq %xmm4, %xmm7, %xmm15
  545. vpaddq %xmm8, %xmm0, %xmm0
  546. vpmuludq %xmm4, %xmm12, %xmm12
  547. vpaddq %xmm3, %xmm2, %xmm2
  548. vpmuludq 40(%rsp), %xmm7, %xmm7
  549. vpaddq %xmm10, %xmm1, %xmm1
  550. vpaddq %xmm15, %xmm0, %xmm0
  551. vpaddq %xmm12, %xmm2, %xmm2
  552. vpaddq %xmm7, %xmm2, %xmm2
  553. movl $((1 << 26) - 1), %r8d
  554. testq %rsi, %rsi
  555. vmovd %r8d, %xmm15
  556. je .L24
  557. vmovdqu (%rsi), %xmm4
  558. vmovdqu 16(%rsi), %xmm3
  559. vpunpckldq %xmm3, %xmm4, %xmm5
  560. vpunpckhdq %xmm3, %xmm4, %xmm3
  561. vpxor %xmm4, %xmm4, %xmm4
  562. vpunpckldq %xmm4, %xmm5, %xmm7
  563. vpunpckhdq %xmm4, %xmm5, %xmm5
  564. vpunpckldq %xmm4, %xmm3, %xmm6
  565. vpunpckhdq %xmm4, %xmm3, %xmm3
  566. vpsllq $6, %xmm5, %xmm5
  567. vpsllq $12, %xmm6, %xmm6
  568. vpsllq $18, %xmm3, %xmm3
  569. vpaddq %xmm7, %xmm11, %xmm11
  570. vpaddq %xmm5, %xmm9, %xmm9
  571. vpaddq %xmm6, %xmm1, %xmm1
  572. vpaddq %xmm3, %xmm0, %xmm0
  573. vpaddq 152(%rsp), %xmm2, %xmm2
  574. .L24:
  575. vpshufd $68, %xmm15, %xmm15
  576. vpsrlq $26, %xmm11, %xmm12
  577. vpsrlq $26, %xmm0, %xmm3
  578. vpand %xmm15, %xmm11, %xmm11
  579. vpand %xmm15, %xmm0, %xmm6
  580. vpaddq %xmm12, %xmm9, %xmm9
  581. vpaddq %xmm3, %xmm2, %xmm2
  582. vpsrlq $26, %xmm9, %xmm3
  583. vpsrlq $26, %xmm2, %xmm7
  584. vpand %xmm15, %xmm9, %xmm9
  585. vpand %xmm15, %xmm2, %xmm2
  586. vpaddq %xmm3, %xmm1, %xmm3
  587. vpmuludq 184(%rsp), %xmm7, %xmm7
  588. vpaddq %xmm7, %xmm11, %xmm7
  589. vpsrlq $26, %xmm3, %xmm4
  590. vpsrlq $26, %xmm7, %xmm1
  591. vpand %xmm15, %xmm3, %xmm3
  592. vpand %xmm15, %xmm7, %xmm7
  593. vpaddq %xmm4, %xmm6, %xmm6
  594. vpaddq %xmm1, %xmm9, %xmm12
  595. vpsrlq $26, %xmm6, %xmm0
  596. vpand %xmm15, %xmm6, %xmm6
  597. vpaddq %xmm0, %xmm2, %xmm2
  598. .L23:
  599. testq %rsi, %rsi
  600. je .L25
  601. vpshufd $8, %xmm7, %xmm7
  602. vpshufd $8, %xmm12, %xmm12
  603. vpshufd $8, %xmm3, %xmm3
  604. vpshufd $8, %xmm6, %xmm6
  605. vpshufd $8, %xmm2, %xmm2
  606. vpunpcklqdq %xmm12, %xmm7, %xmm7
  607. vpunpcklqdq %xmm6, %xmm3, %xmm3
  608. vmovdqu %xmm7, (%rdi)
  609. vmovdqu %xmm3, 16(%rdi)
  610. vmovq %xmm2, 32(%rdi)
  611. jmp .L11
  612. .L25:
  613. vpsrldq $8, %xmm7, %xmm0
  614. vpaddq %xmm0, %xmm7, %xmm7
  615. vpsrldq $8, %xmm12, %xmm0
  616. vpaddq %xmm0, %xmm12, %xmm12
  617. vpsrldq $8, %xmm3, %xmm0
  618. vpaddq %xmm0, %xmm3, %xmm3
  619. vpsrldq $8, %xmm6, %xmm0
  620. vpaddq %xmm0, %xmm6, %xmm6
  621. vpsrldq $8, %xmm2, %xmm0
  622. vpaddq %xmm0, %xmm2, %xmm2
  623. vmovd %xmm7, %eax
  624. vmovd %xmm12, %edx
  625. movl %eax, %r9d
  626. shrl $26, %r9d
  627. addl %edx, %r9d
  628. movl %r9d, %r8d
  629. andl $67108863, %r8d
  630. vmovd %xmm3, %edx
  631. shrl $26, %r9d
  632. addl %edx, %r9d
  633. vmovd %xmm6, %edx
  634. movl %r9d, %ecx
  635. shrl $26, %ecx
  636. addl %edx, %ecx
  637. movl %ecx, %esi
  638. andl $67108863, %esi
  639. vmovd %xmm2, %r10d
  640. movl %r8d, %r11d
  641. salq $26, %r11
  642. andl $67108863, %eax
  643. orq %rax, %r11
  644. movabsq $17592186044415, %rax
  645. andq %rax, %r11
  646. andl $67108863, %r9d
  647. salq $8, %r9
  648. shrl $18, %r8d
  649. movl %r8d, %r8d
  650. orq %r8, %r9
  651. movq %rsi, %rdx
  652. salq $34, %rdx
  653. orq %rdx, %r9
  654. andq %rax, %r9
  655. shrl $26, %ecx
  656. addl %r10d, %ecx
  657. salq $16, %rcx
  658. shrl $10, %esi
  659. movl %esi, %esi
  660. orq %rsi, %rcx
  661. movabsq $4398046511103, %r10
  662. movq %rcx, %r8
  663. andq %r10, %r8
  664. shrq $42, %rcx
  665. leaq (%rcx,%rcx,4), %rdx
  666. addq %r11, %rdx
  667. movq %rdx, %rsi
  668. andq %rax, %rsi
  669. shrq $44, %rdx
  670. addq %r9, %rdx
  671. movq %rdx, %rcx
  672. andq %rax, %rcx
  673. shrq $44, %rdx
  674. addq %r8, %rdx
  675. andq %rdx, %r10
  676. shrq $42, %rdx
  677. leaq (%rsi,%rdx,4), %rsi
  678. leaq (%rsi,%rdx), %r11
  679. movq %r11, %rbx
  680. andq %rax, %rbx
  681. shrq $44, %r11
  682. addq %rcx, %r11
  683. leaq 5(%rbx), %r9
  684. movq %r9, %r8
  685. shrq $44, %r8
  686. addq %r11, %r8
  687. movabsq $-4398046511104, %rsi
  688. addq %r10, %rsi
  689. movq %r8, %rdx
  690. shrq $44, %rdx
  691. addq %rdx, %rsi
  692. movq %rsi, %rdx
  693. shrq $63, %rdx
  694. subq $1, %rdx
  695. movq %rdx, %rcx
  696. notq %rcx
  697. andq %rcx, %rbx
  698. andq %rcx, %r11
  699. andq %r10, %rcx
  700. andq %rax, %r9
  701. andq %rdx, %r9
  702. orq %r9, %rbx
  703. movq %rbx, (%rdi)
  704. andq %r8, %rax
  705. andq %rdx, %rax
  706. orq %rax, %r11
  707. movq %r11, 8(%rdi)
  708. andq %rsi, %rdx
  709. orq %rcx, %rdx
  710. movq %rdx, 16(%rdi)
  711. .L11:
  712. movq -8(%rbp), %rbx
  713. leave
  714. ret
  715. FN_END poly1305_blocks_avx
  716.  
  717. GLOBAL_HIDDEN_FN poly1305_finish_ext_avx
  718. poly1305_finish_ext_avx_local:
  719. pushq %r12
  720. pushq %rbp
  721. pushq %rbx
  722. subq $32, %rsp
  723. movq %rdi, %rbx
  724. movq %rdx, %rbp
  725. movq %rcx, %r12
  726. testq %rdx, %rdx
  727. je .L30
  728. movq $0, (%rsp)
  729. movq $0, 8(%rsp)
  730. movq $0, 16(%rsp)
  731. movq $0, 24(%rsp)
  732. movq %rsp, %rax
  733. subq %rsp, %rsi
  734. testb $16, %dl
  735. je .L31
  736. vmovdqu (%rsp,%rsi), %xmm0
  737. vmovdqa %xmm0, (%rsp)
  738. addq $16, %rax
  739. .L31:
  740. testb $8, %bpl
  741. je .L32
  742. movq (%rax,%rsi), %rdx
  743. movq %rdx, (%rax)
  744. addq $8, %rax
  745. .L32:
  746. testb $4, %bpl
  747. je .L33
  748. movl (%rax,%rsi), %edx
  749. movl %edx, (%rax)
  750. addq $4, %rax
  751. .L33:
  752. testb $2, %bpl
  753. je .L34
  754. movzwl (%rax,%rsi), %edx
  755. movw %dx, (%rax)
  756. addq $2, %rax
  757. .L34:
  758. testb $1, %bpl
  759. je .L35
  760. movzbl (%rax,%rsi), %edx
  761. movb %dl, (%rax)
  762. .L35:
  763. cmpq $16, %rbp
  764. je .L36
  765. movb $1, (%rsp,%rbp)
  766. movq 120(%rbx), %rdx
  767. cmpq $16, %rbp
  768. sbbq %rax, %rax
  769. andl $4, %eax
  770. addq $4, %rax
  771. .L37:
  772. orq %rdx, %rax
  773. movq %rax, 120(%rbx)
  774. movq %rsp, %rsi
  775. movl $32, %edx
  776. movq %rbx, %rdi
  777. call poly1305_blocks_avx_local
  778. .L30:
  779. movq 120(%rbx), %rax
  780. testb $1, %al
  781. je .L38
  782. subq $1, %rbp
  783. cmpq $15, %rbp
  784. jbe .L39
  785. orq $16, %rax
  786. movq %rax, 120(%rbx)
  787. jmp .L40
  788. .L39:
  789. orq $32, %rax
  790. movq %rax, 120(%rbx)
  791. .L40:
  792. movl $32, %edx
  793. movl $0, %esi
  794. movq %rbx, %rdi
  795. call poly1305_blocks_avx_local
  796. .L38:
  797. movq 8(%rbx), %rax
  798. movq %rax, %rdx
  799. salq $44, %rdx
  800. orq (%rbx), %rdx
  801. shrq $20, %rax
  802. movq 16(%rbx), %rcx
  803. salq $24, %rcx
  804. orq %rcx, %rax
  805. movq 104(%rbx), %rcx
  806. movq 112(%rbx), %rsi
  807. addq %rcx, %rdx
  808. adcq %rsi, %rax
  809. vpxor %xmm0, %xmm0, %xmm0
  810. vmovdqu %xmm0, (%rbx)
  811. vmovdqu %xmm0, 16(%rbx)
  812. vmovdqu %xmm0, 32(%rbx)
  813. vmovdqu %xmm0, 48(%rbx)
  814. vmovdqu %xmm0, 64(%rbx)
  815. vmovdqu %xmm0, 80(%rbx)
  816. vmovdqu %xmm0, 96(%rbx)
  817. vmovdqu %xmm0, 112(%rbx)
  818. movq %rdx, (%r12)
  819. movq %rax, 8(%r12)
  820. jmp .L43
  821. .L36:
  822. movq 120(%rbx), %rdx
  823. movl $4, %eax
  824. jmp .L37
  825. .L43:
  826. addq $32, %rsp
  827. popq %rbx
  828. popq %rbp
  829. popq %r12
  830. ret
  831. FN_END poly1305_finish_ext_avx
  832.  
  833. GLOBAL_HIDDEN_FN poly1305_auth_avx
  834. cmp $128, %rdx
  835. jb poly1305_auth_x86_local
  836. pushq %rbp
  837. movq %rsp, %rbp
  838. pushq %r14
  839. pushq %r13
  840. pushq %r12
  841. pushq %rbx
  842. andq $-64, %rsp
  843. addq $-128, %rsp
  844. movq %rdi, %r14
  845. movq %rsi, %r12
  846. movq %rdx, %rbx
  847. movq %rsp, %rdi
  848. movq %rcx, %rsi
  849. call poly1305_init_ext_avx_local
  850. movq %rbx, %r13
  851. andq $-32, %r13
  852. je .L46
  853. movq %rsp, %rdi
  854. movq %r13, %rdx
  855. movq %r12, %rsi
  856. call poly1305_blocks_avx_local
  857. addq %r13, %r12
  858. subq %r13, %rbx
  859. .L46:
  860. movq %rsp, %rdi
  861. movq %r14, %rcx
  862. movq %rbx, %rdx
  863. movq %r12, %rsi
  864. call poly1305_finish_ext_avx_local
  865. leaq -32(%rbp), %rsp
  866. popq %rbx
  867. popq %r12
  868. popq %r13
  869. popq %r14
  870. popq %rbp
  871. ret
  872. FN_END poly1305_auth_avx