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

Replies to poly1 rss

Title Name Language When
poly2 Crimson Dormouse text 9 Years ago.