2 /* Do not modify. This file is auto-generated from ecp_nistz256-avx2.pl. */
8 .quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
9 .quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
10 .quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
11 .quad 0x000001ff, 0x000001ff, 0x000001ff, 0x000001ff
12 .quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
13 .quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
14 .quad 0x00040000, 0x00040000, 0x00040000, 0x00040000
15 .quad 0x1fe00000, 0x1fe00000, 0x1fe00000, 0x1fe00000
16 .quad 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff
19 .quad 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC
20 .quad 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC
21 .quad 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC
22 .quad 0x400007FC, 0x400007FC, 0x400007FC, 0x400007FC
23 .quad 0x3FFFFFFE, 0x3FFFFFFE, 0x3FFFFFFE, 0x3FFFFFFE
24 .quad 0x3FFFFFFE, 0x3FFFFFFE, 0x3FFFFFFE, 0x3FFFFFFE
25 .quad 0x400FFFFE, 0x400FFFFE, 0x400FFFFE, 0x400FFFFE
26 .quad 0x7F7FFFFE, 0x7F7FFFFE, 0x7F7FFFFE, 0x7F7FFFFE
27 .quad 0x03FFFFFC, 0x03FFFFFC, 0x03FFFFFC, 0x03FFFFFC
30 .quad 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8
31 .quad 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8
32 .quad 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8
33 .quad 0x80000FF8, 0x80000FF8, 0x80000FF8, 0x80000FF8
34 .quad 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC
35 .quad 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC
36 .quad 0x801FFFFC, 0x801FFFFC, 0x801FFFFC, 0x801FFFFC
37 .quad 0xFEFFFFFC, 0xFEFFFFFC, 0xFEFFFFFC, 0xFEFFFFFC
38 .quad 0x07FFFFF8, 0x07FFFFF8, 0x07FFFFF8, 0x07FFFFF8
41 .quad 0x00000020, 0x00000020, 0x00000020, 0x00000020
42 .quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
43 .quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
44 .quad 0x1fffc000, 0x1fffc000, 0x1fffc000, 0x1fffc000
45 .quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
46 .quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
47 .quad 0x1f7fffff, 0x1f7fffff, 0x1f7fffff, 0x1f7fffff
48 .quad 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff
49 .quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
55 .quad 0x00000400, 0x00000400, 0x00000400, 0x00000400
56 .quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
57 .quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
58 .quad 0x1ff80000, 0x1ff80000, 0x1ff80000, 0x1ff80000
59 .quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
60 .quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
61 .quad 0x0fffffff, 0x0fffffff, 0x0fffffff, 0x0fffffff
62 .quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
63 .quad 0x00000003, 0x00000003, 0x00000003, 0x00000003
66 .quad 0x00000001, 0x00000001, 0x00000001, 0x00000001
67 .quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
68 .quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
69 .quad 0x1ffffe00, 0x1ffffe00, 0x1ffffe00, 0x1ffffe00
70 .quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
71 .quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
72 .quad 0x1ffbffff, 0x1ffbffff, 0x1ffbffff, 0x1ffbffff
73 .quad 0x001fffff, 0x001fffff, 0x001fffff, 0x001fffff
74 .quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
78 .globl ecp_nistz256_avx2_transpose_convert
79 .type ecp_nistz256_avx2_transpose_convert,@function
81 ecp_nistz256_avx2_transpose_convert:
86 vmovdqa 32(%rsi),%ymm4
87 leaq .LAVX2_AND_MASK(%rip),%rdx
88 vmovdqa 64(%rsi),%ymm1
89 vmovdqa 96(%rsi),%ymm5
90 vmovdqa 128-112(%rax),%ymm2
91 vmovdqa 160-112(%rax),%ymm6
92 vmovdqa 192-112(%rax),%ymm3
93 vmovdqa 224-112(%rax),%ymm7
96 vpunpcklqdq %ymm1,%ymm0,%ymm8
97 vpunpcklqdq %ymm3,%ymm2,%ymm9
98 vpunpckhqdq %ymm1,%ymm0,%ymm10
99 vpunpckhqdq %ymm3,%ymm2,%ymm11
101 vpunpcklqdq %ymm5,%ymm4,%ymm12
102 vpunpcklqdq %ymm7,%ymm6,%ymm13
103 vpunpckhqdq %ymm5,%ymm4,%ymm14
104 vpunpckhqdq %ymm7,%ymm6,%ymm15
106 vperm2i128 $0x20,%ymm9,%ymm8,%ymm0
107 vperm2i128 $0x20,%ymm11,%ymm10,%ymm1
108 vperm2i128 $0x31,%ymm9,%ymm8,%ymm2
109 vperm2i128 $0x31,%ymm11,%ymm10,%ymm3
111 vperm2i128 $0x20,%ymm13,%ymm12,%ymm4
112 vperm2i128 $0x20,%ymm15,%ymm14,%ymm5
113 vperm2i128 $0x31,%ymm13,%ymm12,%ymm6
114 vperm2i128 $0x31,%ymm15,%ymm14,%ymm7
115 vmovdqa (%rdx),%ymm15
117 vpand (%rdx),%ymm0,%ymm8
118 vpsrlq $29,%ymm0,%ymm0
119 vpand %ymm15,%ymm0,%ymm9
120 vpsrlq $29,%ymm0,%ymm0
121 vpsllq $6,%ymm1,%ymm10
122 vpxor %ymm0,%ymm10,%ymm10
123 vpand %ymm15,%ymm10,%ymm10
124 vpsrlq $23,%ymm1,%ymm1
125 vpand %ymm15,%ymm1,%ymm11
126 vpsrlq $29,%ymm1,%ymm1
127 vpsllq $12,%ymm2,%ymm12
128 vpxor %ymm1,%ymm12,%ymm12
129 vpand %ymm15,%ymm12,%ymm12
130 vpsrlq $17,%ymm2,%ymm2
131 vpand %ymm15,%ymm2,%ymm13
132 vpsrlq $29,%ymm2,%ymm2
133 vpsllq $18,%ymm3,%ymm14
134 vpxor %ymm2,%ymm14,%ymm14
135 vpand %ymm15,%ymm14,%ymm14
136 vpsrlq $11,%ymm3,%ymm3
137 vmovdqa %ymm8,0(%rdi)
139 vpand %ymm15,%ymm3,%ymm8
140 vpsrlq $29,%ymm3,%ymm3
142 vmovdqa %ymm9,32(%rdi)
143 vmovdqa %ymm10,64(%rdi)
144 vmovdqa %ymm11,96(%rdi)
145 vmovdqa %ymm12,128-112(%rax)
146 vmovdqa %ymm13,160-112(%rax)
147 vmovdqa %ymm14,192-112(%rax)
148 vmovdqa %ymm8,224-112(%rax)
149 vmovdqa %ymm3,256-112(%rax)
152 vpand %ymm15,%ymm4,%ymm8
153 vpsrlq $29,%ymm4,%ymm4
154 vpand %ymm15,%ymm4,%ymm9
155 vpsrlq $29,%ymm4,%ymm4
156 vpsllq $6,%ymm5,%ymm10
157 vpxor %ymm4,%ymm10,%ymm10
158 vpand %ymm15,%ymm10,%ymm10
159 vpsrlq $23,%ymm5,%ymm5
160 vpand %ymm15,%ymm5,%ymm11
161 vpsrlq $29,%ymm5,%ymm5
162 vpsllq $12,%ymm6,%ymm12
163 vpxor %ymm5,%ymm12,%ymm12
164 vpand %ymm15,%ymm12,%ymm12
165 vpsrlq $17,%ymm6,%ymm6
166 vpand %ymm15,%ymm6,%ymm13
167 vpsrlq $29,%ymm6,%ymm6
168 vpsllq $18,%ymm7,%ymm14
169 vpxor %ymm6,%ymm14,%ymm14
170 vpand %ymm15,%ymm14,%ymm14
171 vpsrlq $11,%ymm7,%ymm7
172 vmovdqa %ymm8,288-448(%rax)
173 vpand %ymm15,%ymm7,%ymm8
174 vpsrlq $29,%ymm7,%ymm7
176 vmovdqa %ymm9,320-448(%rax)
177 vmovdqa %ymm10,352-448(%rax)
178 vmovdqa %ymm11,384-448(%rax)
179 vmovdqa %ymm12,416-448(%rax)
180 vmovdqa %ymm13,448-448(%rax)
181 vmovdqa %ymm14,480-448(%rax)
182 vmovdqa %ymm8,512-448(%rax)
183 vmovdqa %ymm7,544-448(%rax)
187 .size ecp_nistz256_avx2_transpose_convert,.-ecp_nistz256_avx2_transpose_convert
189 .globl ecp_nistz256_avx2_convert_transpose_back
190 .type ecp_nistz256_avx2_convert_transpose_back,@function
192 ecp_nistz256_avx2_convert_transpose_back:
197 vmovdqa 0(%rsi),%ymm0
199 vmovdqa 32(%rsi),%ymm1
200 vmovdqa 64(%rsi),%ymm2
201 vmovdqa 96(%rsi),%ymm3
202 vmovdqa 128-160(%rax),%ymm4
203 vmovdqa 160-160(%rax),%ymm5
204 vmovdqa 192-160(%rax),%ymm6
205 vmovdqa 224-160(%rax),%ymm7
206 vmovdqa 256-160(%rax),%ymm8
208 vpsllq $29,%ymm1,%ymm1
209 vpsllq $58,%ymm2,%ymm9
210 vpaddq %ymm1,%ymm0,%ymm0
211 vpaddq %ymm9,%ymm0,%ymm0
213 vpsrlq $6,%ymm2,%ymm2
214 vpsllq $23,%ymm3,%ymm3
215 vpsllq $52,%ymm4,%ymm10
216 vpaddq %ymm2,%ymm3,%ymm3
217 vpaddq %ymm3,%ymm10,%ymm1
219 vpsrlq $12,%ymm4,%ymm4
220 vpsllq $17,%ymm5,%ymm5
221 vpsllq $46,%ymm6,%ymm11
222 vpaddq %ymm4,%ymm5,%ymm5
223 vpaddq %ymm5,%ymm11,%ymm2
225 vpsrlq $18,%ymm6,%ymm6
226 vpsllq $11,%ymm7,%ymm7
227 vpsllq $40,%ymm8,%ymm12
228 vpaddq %ymm6,%ymm7,%ymm7
229 vpaddq %ymm7,%ymm12,%ymm3
231 vpunpcklqdq %ymm1,%ymm0,%ymm9
232 vpunpcklqdq %ymm3,%ymm2,%ymm10
233 vpunpckhqdq %ymm1,%ymm0,%ymm11
234 vpunpckhqdq %ymm3,%ymm2,%ymm12
236 vperm2i128 $0x20,%ymm10,%ymm9,%ymm0
237 vperm2i128 $0x20,%ymm12,%ymm11,%ymm1
238 vperm2i128 $0x31,%ymm10,%ymm9,%ymm2
239 vperm2i128 $0x31,%ymm12,%ymm11,%ymm3
241 vmovdqa %ymm0,0(%rdi)
242 vmovdqa %ymm1,96(%rdi)
243 vmovdqa %ymm2,192(%rdi)
244 vmovdqa %ymm3,288(%rdi)
254 .size ecp_nistz256_avx2_convert_transpose_back,.-ecp_nistz256_avx2_convert_transpose_back
255 .type avx2_normalize,@function
258 vpsrlq $29,%ymm0,%ymm11
259 vpand %ymm12,%ymm0,%ymm0
260 vpaddq %ymm11,%ymm1,%ymm1
262 vpsrlq $29,%ymm1,%ymm11
263 vpand %ymm12,%ymm1,%ymm1
264 vpaddq %ymm11,%ymm2,%ymm2
266 vpsrlq $29,%ymm2,%ymm11
267 vpand %ymm12,%ymm2,%ymm2
268 vpaddq %ymm11,%ymm3,%ymm3
270 vpsrlq $29,%ymm3,%ymm11
271 vpand %ymm12,%ymm3,%ymm3
272 vpaddq %ymm11,%ymm4,%ymm4
274 vpsrlq $29,%ymm4,%ymm11
275 vpand %ymm12,%ymm4,%ymm4
276 vpaddq %ymm11,%ymm5,%ymm5
278 vpsrlq $29,%ymm5,%ymm11
279 vpand %ymm12,%ymm5,%ymm5
280 vpaddq %ymm11,%ymm6,%ymm6
282 vpsrlq $29,%ymm6,%ymm11
283 vpand %ymm12,%ymm6,%ymm6
284 vpaddq %ymm11,%ymm7,%ymm7
286 vpsrlq $29,%ymm7,%ymm11
287 vpand %ymm12,%ymm7,%ymm7
288 vpaddq %ymm11,%ymm8,%ymm8
292 .size avx2_normalize,.-avx2_normalize
294 .type avx2_normalize_n_store,@function
296 avx2_normalize_n_store:
297 vpsrlq $29,%ymm0,%ymm11
298 vpand %ymm12,%ymm0,%ymm0
299 vpaddq %ymm11,%ymm1,%ymm1
301 vpsrlq $29,%ymm1,%ymm11
302 vpand %ymm12,%ymm1,%ymm1
303 vmovdqa %ymm0,0(%rdi)
305 vpaddq %ymm11,%ymm2,%ymm2
307 vpsrlq $29,%ymm2,%ymm11
308 vpand %ymm12,%ymm2,%ymm2
309 vmovdqa %ymm1,32(%rdi)
310 vpaddq %ymm11,%ymm3,%ymm3
312 vpsrlq $29,%ymm3,%ymm11
313 vpand %ymm12,%ymm3,%ymm3
314 vmovdqa %ymm2,64(%rdi)
315 vpaddq %ymm11,%ymm4,%ymm4
317 vpsrlq $29,%ymm4,%ymm11
318 vpand %ymm12,%ymm4,%ymm4
319 vmovdqa %ymm3,96(%rdi)
320 vpaddq %ymm11,%ymm5,%ymm5
322 vpsrlq $29,%ymm5,%ymm11
323 vpand %ymm12,%ymm5,%ymm5
324 vmovdqa %ymm4,128-160(%rax)
325 vpaddq %ymm11,%ymm6,%ymm6
327 vpsrlq $29,%ymm6,%ymm11
328 vpand %ymm12,%ymm6,%ymm6
329 vmovdqa %ymm5,160-160(%rax)
330 vpaddq %ymm11,%ymm7,%ymm7
332 vpsrlq $29,%ymm7,%ymm11
333 vpand %ymm12,%ymm7,%ymm7
334 vmovdqa %ymm6,192-160(%rax)
335 vpaddq %ymm11,%ymm8,%ymm8
337 vmovdqa %ymm7,224-160(%rax)
338 vmovdqa %ymm8,256-160(%rax)
341 .size avx2_normalize_n_store,.-avx2_normalize_n_store
345 .type avx2_mul_x4,@function
348 leaq .LAVX2_POLY(%rip),%rax
350 vpxor %ymm0,%ymm0,%ymm0
351 vpxor %ymm1,%ymm1,%ymm1
352 vpxor %ymm2,%ymm2,%ymm2
353 vpxor %ymm3,%ymm3,%ymm3
354 vpxor %ymm4,%ymm4,%ymm4
355 vpxor %ymm5,%ymm5,%ymm5
356 vpxor %ymm6,%ymm6,%ymm6
357 vpxor %ymm7,%ymm7,%ymm7
359 vmovdqa 224(%rax),%ymm14
360 vmovdqa 256(%rax),%ymm15
364 jmp .Lavx2_mul_x4_loop
368 vmovdqa 0(%rdx),%ymm9
371 vpmuludq 0+512(%rsi),%ymm9,%ymm11
372 vpmuludq 32+512(%rsi),%ymm9,%ymm13
373 vpaddq %ymm11,%ymm0,%ymm0
374 vpmuludq 64+512(%rsi),%ymm9,%ymm11
375 vpaddq %ymm13,%ymm1,%ymm1
376 vpand %ymm12,%ymm0,%ymm10
377 vpmuludq 96+512(%rsi),%ymm9,%ymm13
378 vpaddq %ymm11,%ymm2,%ymm2
379 vpmuludq 128+512(%rsi),%ymm9,%ymm11
380 vpaddq %ymm13,%ymm3,%ymm3
381 vpmuludq 160+512(%rsi),%ymm9,%ymm13
382 vpaddq %ymm11,%ymm4,%ymm4
383 vpmuludq 192+512(%rsi),%ymm9,%ymm11
384 vpaddq %ymm13,%ymm5,%ymm5
385 vpmuludq 224+512(%rsi),%ymm9,%ymm13
386 vpaddq %ymm11,%ymm6,%ymm6
389 vpmuludq %ymm12,%ymm10,%ymm11
390 vpaddq %ymm13,%ymm7,%ymm7
391 vpmuludq 256+512(%rsi),%ymm9,%ymm8
392 vpaddq %ymm11,%ymm0,%ymm13
393 vpaddq %ymm11,%ymm1,%ymm0
394 vpsrlq $29,%ymm13,%ymm13
395 vpaddq %ymm11,%ymm2,%ymm1
396 vpmuludq 96(%rax),%ymm10,%ymm11
397 vpaddq %ymm13,%ymm0,%ymm0
398 vpaddq %ymm11,%ymm3,%ymm2
401 vpsllq $18,%ymm10,%ymm13
404 vpmuludq %ymm14,%ymm10,%ymm11
405 vpaddq %ymm13,%ymm6,%ymm5
406 vpmuludq %ymm15,%ymm10,%ymm13
407 vpaddq %ymm11,%ymm7,%ymm6
408 vpaddq %ymm13,%ymm8,%ymm7
411 jnz .Lavx2_mul_x4_loop
413 vpxor %ymm8,%ymm8,%ymm8
416 .size avx2_mul_x4,.-avx2_mul_x4
421 .type avx2_mul_by1_x4,@function
424 leaq .LAVX2_POLY(%rip),%rax
426 vpxor %ymm0,%ymm0,%ymm0
427 vpxor %ymm1,%ymm1,%ymm1
428 vpxor %ymm2,%ymm2,%ymm2
429 vpxor %ymm3,%ymm3,%ymm3
430 vpxor %ymm4,%ymm4,%ymm4
431 vpxor %ymm5,%ymm5,%ymm5
432 vpxor %ymm6,%ymm6,%ymm6
433 vpxor %ymm7,%ymm7,%ymm7
434 vpxor %ymm8,%ymm8,%ymm8
436 vmovdqa 96+.LONE(%rip),%ymm14
437 vmovdqa 224+.LONE(%rip),%ymm15
440 jmp .Lavx2_mul_by1_x4_loop
443 .Lavx2_mul_by1_x4_loop:
444 vmovdqa 0(%rsi),%ymm9
445 .byte 0x48,0x8d,0xb6,0x20,0,0,0
447 vpsllq $5,%ymm9,%ymm13
448 vpmuludq %ymm14,%ymm9,%ymm11
449 vpaddq %ymm13,%ymm0,%ymm0
450 vpaddq %ymm11,%ymm3,%ymm3
452 vpmuludq %ymm12,%ymm9,%ymm11
453 vpand %ymm12,%ymm0,%ymm10
454 vpaddq %ymm11,%ymm4,%ymm4
455 vpaddq %ymm11,%ymm5,%ymm5
456 vpaddq %ymm11,%ymm6,%ymm6
457 vpsllq $23,%ymm9,%ymm11
460 vpmuludq %ymm15,%ymm9,%ymm13
461 vpsubq %ymm11,%ymm6,%ymm6
463 vpmuludq %ymm12,%ymm10,%ymm11
464 vpaddq %ymm13,%ymm7,%ymm7
465 vpaddq %ymm11,%ymm0,%ymm13
466 vpaddq %ymm11,%ymm1,%ymm0
468 vpsrlq $29,%ymm13,%ymm13
469 vpaddq %ymm11,%ymm2,%ymm1
470 vpmuludq 96(%rax),%ymm10,%ymm11
471 vpaddq %ymm13,%ymm0,%ymm0
472 vpaddq %ymm11,%ymm3,%ymm2
474 vpsllq $18,%ymm10,%ymm13
476 vpmuludq 224(%rax),%ymm10,%ymm11
477 vpaddq %ymm13,%ymm6,%ymm5
478 vpaddq %ymm11,%ymm7,%ymm6
479 vpmuludq 256(%rax),%ymm10,%ymm7
482 jnz .Lavx2_mul_by1_x4_loop
485 .size avx2_mul_by1_x4,.-avx2_mul_by1_x4
489 .type avx2_sqr_x4,@function
492 leaq .LAVX2_POLY(%rip),%rax
494 vmovdqa 224(%rax),%ymm14
495 vmovdqa 256(%rax),%ymm15
497 vmovdqa 0(%rsi),%ymm9
498 vmovdqa 32(%rsi),%ymm1
499 vmovdqa 64(%rsi),%ymm2
500 vmovdqa 96(%rsi),%ymm3
501 vmovdqa 128(%rsi),%ymm4
502 vmovdqa 160(%rsi),%ymm5
503 vmovdqa 192(%rsi),%ymm6
504 vmovdqa 224(%rsi),%ymm7
505 vpaddq %ymm1,%ymm1,%ymm1
506 vmovdqa 256(%rsi),%ymm8
507 vpaddq %ymm2,%ymm2,%ymm2
508 vmovdqa %ymm1,0(%rcx)
509 vpaddq %ymm3,%ymm3,%ymm3
510 vmovdqa %ymm2,32(%rcx)
511 vpaddq %ymm4,%ymm4,%ymm4
512 vmovdqa %ymm3,64(%rcx)
513 vpaddq %ymm5,%ymm5,%ymm5
514 vmovdqa %ymm4,96(%rcx)
515 vpaddq %ymm6,%ymm6,%ymm6
516 vmovdqa %ymm5,128(%rcx)
517 vpaddq %ymm7,%ymm7,%ymm7
518 vmovdqa %ymm6,160(%rcx)
519 vpaddq %ymm8,%ymm8,%ymm8
520 vmovdqa %ymm7,192(%rcx)
521 vmovdqa %ymm8,224(%rcx)
524 vpmuludq %ymm9,%ymm9,%ymm0
525 vpmuludq %ymm9,%ymm1,%ymm1
526 vpand %ymm12,%ymm0,%ymm10
527 vpmuludq %ymm9,%ymm2,%ymm2
528 vpmuludq %ymm9,%ymm3,%ymm3
529 vpmuludq %ymm9,%ymm4,%ymm4
530 vpmuludq %ymm9,%ymm5,%ymm5
531 vpmuludq %ymm9,%ymm6,%ymm6
532 vpmuludq %ymm12,%ymm10,%ymm11
533 vpmuludq %ymm9,%ymm7,%ymm7
534 vpmuludq %ymm9,%ymm8,%ymm8
535 vmovdqa 32(%rsi),%ymm9
537 vpaddq %ymm11,%ymm0,%ymm13
538 vpaddq %ymm11,%ymm1,%ymm0
539 vpsrlq $29,%ymm13,%ymm13
540 vpaddq %ymm11,%ymm2,%ymm1
541 vpmuludq 96(%rax),%ymm10,%ymm11
542 vpaddq %ymm13,%ymm0,%ymm0
543 vpaddq %ymm11,%ymm3,%ymm2
545 vpsllq $18,%ymm10,%ymm11
547 vpmuludq %ymm14,%ymm10,%ymm13
548 vpaddq %ymm11,%ymm6,%ymm5
549 vpmuludq %ymm15,%ymm10,%ymm11
550 vpaddq %ymm13,%ymm7,%ymm6
551 vpaddq %ymm11,%ymm8,%ymm7
554 vpmuludq %ymm9,%ymm9,%ymm13
555 vpand %ymm12,%ymm0,%ymm10
556 vpmuludq 32(%rcx),%ymm9,%ymm11
557 vpaddq %ymm13,%ymm1,%ymm1
558 vpmuludq 64(%rcx),%ymm9,%ymm13
559 vpaddq %ymm11,%ymm2,%ymm2
560 vpmuludq 96(%rcx),%ymm9,%ymm11
561 vpaddq %ymm13,%ymm3,%ymm3
562 vpmuludq 128(%rcx),%ymm9,%ymm13
563 vpaddq %ymm11,%ymm4,%ymm4
564 vpmuludq 160(%rcx),%ymm9,%ymm11
565 vpaddq %ymm13,%ymm5,%ymm5
566 vpmuludq 192(%rcx),%ymm9,%ymm13
567 vpaddq %ymm11,%ymm6,%ymm6
569 vpmuludq %ymm12,%ymm10,%ymm11
570 vpaddq %ymm13,%ymm7,%ymm7
571 vpmuludq 224(%rcx),%ymm9,%ymm8
572 vmovdqa 64(%rsi),%ymm9
573 vpaddq %ymm11,%ymm0,%ymm13
574 vpaddq %ymm11,%ymm1,%ymm0
575 vpsrlq $29,%ymm13,%ymm13
576 vpaddq %ymm11,%ymm2,%ymm1
577 vpmuludq 96(%rax),%ymm10,%ymm11
578 vpaddq %ymm13,%ymm0,%ymm0
579 vpaddq %ymm11,%ymm3,%ymm2
581 vpsllq $18,%ymm10,%ymm11
583 vpmuludq %ymm14,%ymm10,%ymm13
584 vpaddq %ymm11,%ymm6,%ymm5
585 vpmuludq %ymm15,%ymm10,%ymm11
586 vpaddq %ymm13,%ymm7,%ymm6
587 vpaddq %ymm11,%ymm8,%ymm7
590 vpmuludq %ymm9,%ymm9,%ymm11
591 vpand %ymm12,%ymm0,%ymm10
592 vpmuludq 64(%rcx),%ymm9,%ymm13
593 vpaddq %ymm11,%ymm2,%ymm2
594 vpmuludq 96(%rcx),%ymm9,%ymm11
595 vpaddq %ymm13,%ymm3,%ymm3
596 vpmuludq 128(%rcx),%ymm9,%ymm13
597 vpaddq %ymm11,%ymm4,%ymm4
598 vpmuludq 160(%rcx),%ymm9,%ymm11
599 vpaddq %ymm13,%ymm5,%ymm5
600 vpmuludq 192(%rcx),%ymm9,%ymm13
601 vpaddq %ymm11,%ymm6,%ymm6
603 vpmuludq %ymm12,%ymm10,%ymm11
604 vpaddq %ymm13,%ymm7,%ymm7
605 vpmuludq 224(%rcx),%ymm9,%ymm8
606 vmovdqa 96(%rsi),%ymm9
607 vpaddq %ymm11,%ymm0,%ymm13
608 vpaddq %ymm11,%ymm1,%ymm0
609 vpsrlq $29,%ymm13,%ymm13
610 vpaddq %ymm11,%ymm2,%ymm1
611 vpmuludq 96(%rax),%ymm10,%ymm11
612 vpaddq %ymm13,%ymm0,%ymm0
613 vpaddq %ymm11,%ymm3,%ymm2
615 vpsllq $18,%ymm10,%ymm11
617 vpmuludq %ymm14,%ymm10,%ymm13
618 vpaddq %ymm11,%ymm6,%ymm5
619 vpmuludq %ymm15,%ymm10,%ymm11
620 vpand %ymm12,%ymm0,%ymm10
621 vpaddq %ymm13,%ymm7,%ymm6
622 vpaddq %ymm11,%ymm8,%ymm7
625 vpmuludq %ymm9,%ymm9,%ymm13
626 vpmuludq 96(%rcx),%ymm9,%ymm11
627 vpaddq %ymm13,%ymm3,%ymm3
628 vpmuludq 128(%rcx),%ymm9,%ymm13
629 vpaddq %ymm11,%ymm4,%ymm4
630 vpmuludq 160(%rcx),%ymm9,%ymm11
631 vpaddq %ymm13,%ymm5,%ymm5
632 vpmuludq 192(%rcx),%ymm9,%ymm13
633 vpaddq %ymm11,%ymm6,%ymm6
635 vpmuludq %ymm12,%ymm10,%ymm11
636 vpaddq %ymm13,%ymm7,%ymm7
637 vpmuludq 224(%rcx),%ymm9,%ymm8
638 vmovdqa 128(%rsi),%ymm9
639 vpaddq %ymm11,%ymm0,%ymm13
640 vpaddq %ymm11,%ymm1,%ymm0
641 vpsrlq $29,%ymm13,%ymm13
642 vpaddq %ymm11,%ymm2,%ymm1
643 vpmuludq 96(%rax),%ymm10,%ymm11
644 vpaddq %ymm13,%ymm0,%ymm0
645 vpaddq %ymm11,%ymm3,%ymm2
647 vpsllq $18,%ymm10,%ymm11
649 vpmuludq %ymm14,%ymm10,%ymm13
650 vpaddq %ymm11,%ymm6,%ymm5
651 vpmuludq %ymm15,%ymm10,%ymm11
652 vpand %ymm12,%ymm0,%ymm10
653 vpaddq %ymm13,%ymm7,%ymm6
654 vpaddq %ymm11,%ymm8,%ymm7
657 vpmuludq %ymm9,%ymm9,%ymm11
658 vpmuludq 128(%rcx),%ymm9,%ymm13
659 vpaddq %ymm11,%ymm4,%ymm4
660 vpmuludq 160(%rcx),%ymm9,%ymm11
661 vpaddq %ymm13,%ymm5,%ymm5
662 vpmuludq 192(%rcx),%ymm9,%ymm13
663 vpaddq %ymm11,%ymm6,%ymm6
665 vpmuludq %ymm12,%ymm10,%ymm11
666 vpaddq %ymm13,%ymm7,%ymm7
667 vpmuludq 224(%rcx),%ymm9,%ymm8
668 vmovdqa 160(%rsi),%ymm9
669 vpaddq %ymm11,%ymm0,%ymm13
670 vpsrlq $29,%ymm13,%ymm13
671 vpaddq %ymm11,%ymm1,%ymm0
672 vpaddq %ymm11,%ymm2,%ymm1
673 vpmuludq 96+.LAVX2_POLY(%rip),%ymm10,%ymm11
674 vpaddq %ymm13,%ymm0,%ymm0
675 vpaddq %ymm11,%ymm3,%ymm2
677 vpsllq $18,%ymm10,%ymm11
679 vpmuludq %ymm14,%ymm10,%ymm13
680 vpaddq %ymm11,%ymm6,%ymm5
681 vpmuludq %ymm15,%ymm10,%ymm11
682 vpand %ymm12,%ymm0,%ymm10
683 vpaddq %ymm13,%ymm7,%ymm6
684 vpaddq %ymm11,%ymm8,%ymm7
687 vpmuludq %ymm9,%ymm9,%ymm13
688 vpmuludq 160(%rcx),%ymm9,%ymm11
689 vpaddq %ymm13,%ymm5,%ymm5
690 vpmuludq 192(%rcx),%ymm9,%ymm13
691 vpaddq %ymm11,%ymm6,%ymm6
693 vpmuludq %ymm12,%ymm10,%ymm11
694 vpaddq %ymm13,%ymm7,%ymm7
695 vpmuludq 224(%rcx),%ymm9,%ymm8
696 vmovdqa 192(%rsi),%ymm9
697 vpaddq %ymm11,%ymm0,%ymm13
698 vpaddq %ymm11,%ymm1,%ymm0
699 vpsrlq $29,%ymm13,%ymm13
700 vpaddq %ymm11,%ymm2,%ymm1
701 vpmuludq 96(%rax),%ymm10,%ymm11
702 vpaddq %ymm13,%ymm0,%ymm0
703 vpaddq %ymm11,%ymm3,%ymm2
705 vpsllq $18,%ymm10,%ymm11
707 vpmuludq %ymm14,%ymm10,%ymm13
708 vpaddq %ymm11,%ymm6,%ymm5
709 vpmuludq %ymm15,%ymm10,%ymm11
710 vpand %ymm12,%ymm0,%ymm10
711 vpaddq %ymm13,%ymm7,%ymm6
712 vpaddq %ymm11,%ymm8,%ymm7
715 vpmuludq %ymm9,%ymm9,%ymm11
716 vpmuludq 192(%rcx),%ymm9,%ymm13
717 vpaddq %ymm11,%ymm6,%ymm6
719 vpmuludq %ymm12,%ymm10,%ymm11
720 vpaddq %ymm13,%ymm7,%ymm7
721 vpmuludq 224(%rcx),%ymm9,%ymm8
722 vmovdqa 224(%rsi),%ymm9
723 vpaddq %ymm11,%ymm0,%ymm13
724 vpsrlq $29,%ymm13,%ymm13
725 vpaddq %ymm11,%ymm1,%ymm0
726 vpaddq %ymm11,%ymm2,%ymm1
727 vpmuludq 96(%rax),%ymm10,%ymm11
728 vpaddq %ymm13,%ymm0,%ymm0
729 vpaddq %ymm11,%ymm3,%ymm2
731 vpsllq $18,%ymm10,%ymm11
733 vpmuludq %ymm14,%ymm10,%ymm13
734 vpaddq %ymm11,%ymm6,%ymm5
735 vpmuludq %ymm15,%ymm10,%ymm11
736 vpand %ymm12,%ymm0,%ymm10
737 vpaddq %ymm13,%ymm7,%ymm6
738 vpaddq %ymm11,%ymm8,%ymm7
741 vpmuludq %ymm9,%ymm9,%ymm13
743 vpmuludq %ymm12,%ymm10,%ymm11
744 vpaddq %ymm13,%ymm7,%ymm7
745 vpmuludq 224(%rcx),%ymm9,%ymm8
746 vmovdqa 256(%rsi),%ymm9
747 vpaddq %ymm11,%ymm0,%ymm13
748 vpsrlq $29,%ymm13,%ymm13
749 vpaddq %ymm11,%ymm1,%ymm0
750 vpaddq %ymm11,%ymm2,%ymm1
751 vpmuludq 96(%rax),%ymm10,%ymm11
752 vpaddq %ymm13,%ymm0,%ymm0
753 vpaddq %ymm11,%ymm3,%ymm2
755 vpsllq $18,%ymm10,%ymm11
757 vpmuludq %ymm14,%ymm10,%ymm13
758 vpaddq %ymm11,%ymm6,%ymm5
759 vpmuludq %ymm15,%ymm10,%ymm11
760 vpand %ymm12,%ymm0,%ymm10
761 vpaddq %ymm13,%ymm7,%ymm6
762 vpaddq %ymm11,%ymm8,%ymm7
765 vpmuludq %ymm9,%ymm9,%ymm8
767 vpmuludq %ymm12,%ymm10,%ymm11
768 vpaddq %ymm11,%ymm0,%ymm13
769 vpsrlq $29,%ymm13,%ymm13
770 vpaddq %ymm11,%ymm1,%ymm0
771 vpaddq %ymm11,%ymm2,%ymm1
772 vpmuludq 96(%rax),%ymm10,%ymm11
773 vpaddq %ymm13,%ymm0,%ymm0
774 vpaddq %ymm11,%ymm3,%ymm2
776 vpsllq $18,%ymm10,%ymm11
778 vpmuludq %ymm14,%ymm10,%ymm13
779 vpaddq %ymm11,%ymm6,%ymm5
780 vpmuludq %ymm15,%ymm10,%ymm11
781 vpaddq %ymm13,%ymm7,%ymm6
782 vpaddq %ymm11,%ymm8,%ymm7
784 vpxor %ymm8,%ymm8,%ymm8
787 .size avx2_sqr_x4,.-avx2_sqr_x4
791 .type avx2_sub_x4,@function
794 vmovdqa 0(%rsi),%ymm0
796 leaq .LAVX2_POLY_x8+128(%rip),%rax
798 vmovdqa 32-160(%rsi),%ymm1
799 vmovdqa 64-160(%rsi),%ymm2
800 vmovdqa 96-160(%rsi),%ymm3
801 vmovdqa 128-160(%rsi),%ymm4
802 vmovdqa 160-160(%rsi),%ymm5
803 vmovdqa 192-160(%rsi),%ymm6
804 vmovdqa 224-160(%rsi),%ymm7
805 vmovdqa 256-160(%rsi),%ymm8
807 vpaddq 0-128(%rax),%ymm0,%ymm0
808 vpaddq 32-128(%rax),%ymm1,%ymm1
809 vpaddq 64-128(%rax),%ymm2,%ymm2
810 vpaddq 96-128(%rax),%ymm3,%ymm3
811 vpaddq 128-128(%rax),%ymm4,%ymm4
812 vpaddq 160-128(%rax),%ymm5,%ymm5
813 vpaddq 192-128(%rax),%ymm6,%ymm6
814 vpaddq 224-128(%rax),%ymm7,%ymm7
815 vpaddq 256-128(%rax),%ymm8,%ymm8
817 vpsubq 0-128(%rdx),%ymm0,%ymm0
818 vpsubq 32-128(%rdx),%ymm1,%ymm1
819 vpsubq 64-128(%rdx),%ymm2,%ymm2
820 vpsubq 96-128(%rdx),%ymm3,%ymm3
821 vpsubq 128-128(%rdx),%ymm4,%ymm4
822 vpsubq 160-128(%rdx),%ymm5,%ymm5
823 vpsubq 192-128(%rdx),%ymm6,%ymm6
824 vpsubq 224-128(%rdx),%ymm7,%ymm7
825 vpsubq 256-128(%rdx),%ymm8,%ymm8
828 .size avx2_sub_x4,.-avx2_sub_x4
830 .type avx2_select_n_store,@function
833 vmovdqa 2312(%rsp),%ymm10
834 vpor 2344(%rsp),%ymm10,%ymm10
836 vpandn %ymm0,%ymm10,%ymm0
837 vpandn %ymm1,%ymm10,%ymm1
838 vpandn %ymm2,%ymm10,%ymm2
839 vpandn %ymm3,%ymm10,%ymm3
840 vpandn %ymm4,%ymm10,%ymm4
841 vpandn %ymm5,%ymm10,%ymm5
842 vpandn %ymm6,%ymm10,%ymm6
843 vmovdqa 2344(%rsp),%ymm9
844 vpandn %ymm7,%ymm10,%ymm7
845 vpandn 2312(%rsp),%ymm9,%ymm9
846 vpandn %ymm8,%ymm10,%ymm8
848 vpand 0(%rsi),%ymm9,%ymm11
850 vpand 32(%rsi),%ymm9,%ymm10
851 vpxor %ymm11,%ymm0,%ymm0
852 vpand 64(%rsi),%ymm9,%ymm11
853 vpxor %ymm10,%ymm1,%ymm1
854 vpand 96(%rsi),%ymm9,%ymm10
855 vpxor %ymm11,%ymm2,%ymm2
856 vpand 128-160(%rax),%ymm9,%ymm11
857 vpxor %ymm10,%ymm3,%ymm3
858 vpand 160-160(%rax),%ymm9,%ymm10
859 vpxor %ymm11,%ymm4,%ymm4
860 vpand 192-160(%rax),%ymm9,%ymm11
861 vpxor %ymm10,%ymm5,%ymm5
862 vpand 224-160(%rax),%ymm9,%ymm10
863 vpxor %ymm11,%ymm6,%ymm6
864 vpand 256-160(%rax),%ymm9,%ymm11
865 vmovdqa 2344(%rsp),%ymm9
866 vpxor %ymm10,%ymm7,%ymm7
868 vpand 0(%rdx),%ymm9,%ymm10
870 vpxor %ymm11,%ymm8,%ymm8
871 vpand 32(%rdx),%ymm9,%ymm11
872 vpxor %ymm10,%ymm0,%ymm0
873 vpand 64(%rdx),%ymm9,%ymm10
874 vpxor %ymm11,%ymm1,%ymm1
875 vpand 96(%rdx),%ymm9,%ymm11
876 vpxor %ymm10,%ymm2,%ymm2
877 vpand 128-160(%rax),%ymm9,%ymm10
878 vpxor %ymm11,%ymm3,%ymm3
879 vpand 160-160(%rax),%ymm9,%ymm11
880 vpxor %ymm10,%ymm4,%ymm4
881 vpand 192-160(%rax),%ymm9,%ymm10
882 vpxor %ymm11,%ymm5,%ymm5
883 vpand 224-160(%rax),%ymm9,%ymm11
884 vpxor %ymm10,%ymm6,%ymm6
885 vpand 256-160(%rax),%ymm9,%ymm10
886 vpxor %ymm11,%ymm7,%ymm7
887 vpxor %ymm10,%ymm8,%ymm8
888 vmovdqa %ymm0,0(%rdi)
890 vmovdqa %ymm1,32(%rdi)
891 vmovdqa %ymm2,64(%rdi)
892 vmovdqa %ymm3,96(%rdi)
893 vmovdqa %ymm4,128-160(%rax)
894 vmovdqa %ymm5,160-160(%rax)
895 vmovdqa %ymm6,192-160(%rax)
896 vmovdqa %ymm7,224-160(%rax)
897 vmovdqa %ymm8,256-160(%rax)
901 .size avx2_select_n_store,.-avx2_select_n_store
904 .globl ecp_nistz256_avx2_point_add_affine_x4
905 .type ecp_nistz256_avx2_point_add_affine_x4,@function
907 ecp_nistz256_avx2_point_add_affine_x4:
931 vmovdqa 0(%rsi),%ymm0
932 vmovdqa .LAVX2_AND_MASK(%rip),%ymm12
933 vpxor %ymm1,%ymm1,%ymm1
935 vpor 32(%rsi),%ymm0,%ymm0
936 vpor 64(%rsi),%ymm0,%ymm0
937 vpor 96(%rsi),%ymm0,%ymm0
938 vpor 128-256(%rax),%ymm0,%ymm0
940 vpor 160-256(%rax),%ymm0,%ymm0
941 vpor 192-256(%rax),%ymm0,%ymm0
942 vpor 224-256(%rax),%ymm0,%ymm0
943 vpor 256-256(%rax),%ymm0,%ymm0
944 vpor 288-256(%rax),%ymm0,%ymm0
945 vpor 320-256(%rax),%ymm0,%ymm0
946 vpor 352-256(%rax),%ymm0,%ymm0
947 vpor 384-512(%rcx),%ymm0,%ymm0
948 vpor 416-512(%rcx),%ymm0,%ymm0
949 vpor 448-512(%rcx),%ymm0,%ymm0
950 vpor 480-512(%rcx),%ymm0,%ymm0
951 vpor 512-512(%rcx),%ymm0,%ymm0
952 vpor 544-512(%rcx),%ymm0,%ymm0
953 vpcmpeqq %ymm1,%ymm0,%ymm0
954 vmovdqa %ymm0,2304(%rsp)
956 vpxor %ymm1,%ymm1,%ymm1
957 vmovdqa 0(%r10),%ymm0
959 vpor 32(%r10),%ymm0,%ymm0
960 vpor 64(%r10),%ymm0,%ymm0
961 vpor 96(%r10),%ymm0,%ymm0
962 vpor 128-256(%rax),%ymm0,%ymm0
964 vpor 160-256(%rax),%ymm0,%ymm0
965 vpor 192-256(%rax),%ymm0,%ymm0
966 vpor 224-256(%rax),%ymm0,%ymm0
967 vpor 256-256(%rax),%ymm0,%ymm0
968 vpor 288-256(%rax),%ymm0,%ymm0
969 vpor 320-256(%rax),%ymm0,%ymm0
970 vpor 352-256(%rax),%ymm0,%ymm0
971 vpor 384-512(%rcx),%ymm0,%ymm0
972 vpor 416-512(%rcx),%ymm0,%ymm0
973 vpor 448-512(%rcx),%ymm0,%ymm0
974 vpor 480-512(%rcx),%ymm0,%ymm0
975 vpor 512-512(%rcx),%ymm0,%ymm0
976 vpor 544-512(%rcx),%ymm0,%ymm0
977 vpcmpeqq %ymm1,%ymm0,%ymm0
978 vmovdqa %ymm0,2336(%rsp)
985 call avx2_normalize_n_store
993 vmovdqa %ymm0,0(%rdi)
995 vmovdqa %ymm1,32(%rdi)
996 vmovdqa %ymm2,64(%rdi)
997 vmovdqa %ymm3,96(%rdi)
998 vmovdqa %ymm4,128-160(%rax)
999 vmovdqa %ymm5,160-160(%rax)
1000 vmovdqa %ymm6,192-160(%rax)
1001 vmovdqa %ymm7,224-160(%rax)
1002 vmovdqa %ymm8,256-160(%rax)
1010 call avx2_normalize_n_store
1017 call avx2_normalize_n_store
1024 call avx2_normalize_n_store
1029 leaq 1152(%rsp),%rdi
1031 call avx2_normalize_n_store
1040 leaq .LONE(%rip),%rsi
1042 call avx2_select_n_store
1045 leaq 1152(%rsp),%rsi
1046 leaq 1728(%rsp),%rdi
1047 leaq 2368(%rsp),%rcx
1049 call avx2_normalize_n_store
1053 leaq 1440(%rsp),%rdi
1055 call avx2_normalize_n_store
1059 leaq 1440(%rsp),%rdx
1060 leaq 2016(%rsp),%rdi
1062 call avx2_normalize_n_store
1066 leaq 1440(%rsp),%rdx
1070 vmovdqa %ymm0,0(%rdi)
1072 vmovdqa %ymm1,32(%rdi)
1073 vmovdqa %ymm2,64(%rdi)
1074 vmovdqa %ymm3,96(%rdi)
1075 vmovdqa %ymm4,128-160(%rax)
1076 vmovdqa %ymm5,160-160(%rax)
1077 vmovdqa %ymm6,192-160(%rax)
1078 vmovdqa %ymm7,224-160(%rax)
1079 vmovdqa %ymm8,256-160(%rax)
1087 vpaddq %ymm0,%ymm0,%ymm0
1088 leaq 1440(%rsp),%rdi
1089 vpaddq %ymm1,%ymm1,%ymm1
1090 vpaddq %ymm2,%ymm2,%ymm2
1091 vpaddq %ymm3,%ymm3,%ymm3
1092 vpaddq %ymm4,%ymm4,%ymm4
1093 vpaddq %ymm5,%ymm5,%ymm5
1094 vpaddq %ymm6,%ymm6,%ymm6
1095 vpaddq %ymm7,%ymm7,%ymm7
1096 vpaddq %ymm8,%ymm8,%ymm8
1097 call avx2_normalize_n_store
1115 leaq 1856(%rsp),%rsi
1116 leaq .LAVX2_POLY_x2+128(%rip),%rax
1117 leaq 2144(%rsp),%rdx
1118 leaq 1568(%rsp),%rcx
1121 vmovdqa 0-128(%rsi),%ymm0
1122 vmovdqa 32-128(%rsi),%ymm1
1123 vmovdqa 64-128(%rsi),%ymm2
1124 vmovdqa 96-128(%rsi),%ymm3
1125 vmovdqa 128-128(%rsi),%ymm4
1126 vmovdqa 160-128(%rsi),%ymm5
1127 vmovdqa 192-128(%rsi),%ymm6
1128 vmovdqa 224-128(%rsi),%ymm7
1129 vmovdqa 256-128(%rsi),%ymm8
1131 vpaddq 0-128(%rax),%ymm0,%ymm0
1132 vpaddq 32-128(%rax),%ymm1,%ymm1
1133 vpaddq 64-128(%rax),%ymm2,%ymm2
1134 vpaddq 96-128(%rax),%ymm3,%ymm3
1135 vpaddq 128-128(%rax),%ymm4,%ymm4
1136 vpaddq 160-128(%rax),%ymm5,%ymm5
1137 vpaddq 192-128(%rax),%ymm6,%ymm6
1138 vpaddq 224-128(%rax),%ymm7,%ymm7
1139 vpaddq 256-128(%rax),%ymm8,%ymm8
1141 vpsubq 0-128(%rdx),%ymm0,%ymm0
1142 vpsubq 32-128(%rdx),%ymm1,%ymm1
1143 vpsubq 64-128(%rdx),%ymm2,%ymm2
1144 vpsubq 96-128(%rdx),%ymm3,%ymm3
1145 vpsubq 128-128(%rdx),%ymm4,%ymm4
1146 vpsubq 160-128(%rdx),%ymm5,%ymm5
1147 vpsubq 192-128(%rdx),%ymm6,%ymm6
1148 vpsubq 224-128(%rdx),%ymm7,%ymm7
1149 vpsubq 256-128(%rdx),%ymm8,%ymm8
1151 vpsubq 0-128(%rcx),%ymm0,%ymm0
1152 vpsubq 32-128(%rcx),%ymm1,%ymm1
1153 vpsubq 64-128(%rcx),%ymm2,%ymm2
1154 vpsubq 96-128(%rcx),%ymm3,%ymm3
1155 vpsubq 128-128(%rcx),%ymm4,%ymm4
1156 vpsubq 160-128(%rcx),%ymm5,%ymm5
1157 vpsubq 192-128(%rcx),%ymm6,%ymm6
1158 vpsubq 224-128(%rcx),%ymm7,%ymm7
1159 vpsubq 256-128(%rcx),%ymm8,%ymm8
1164 call avx2_select_n_store
1171 call avx2_normalize_n_store
1175 leaq 1152(%rsp),%rdx
1178 call avx2_normalize_n_store
1181 leaq 2016(%rsp),%rsi
1185 call avx2_normalize_n_store
1196 call avx2_select_n_store
1206 call avx2_mul_by1_x4
1207 call avx2_normalize_n_store
1213 .size ecp_nistz256_avx2_point_add_affine_x4,.-ecp_nistz256_avx2_point_add_affine_x4
1217 .globl ecp_nistz256_avx2_point_add_affines_x4
1218 .type ecp_nistz256_avx2_point_add_affines_x4,@function
1220 ecp_nistz256_avx2_point_add_affines_x4:
1243 vmovdqa 0(%rsi),%ymm0
1244 vmovdqa .LAVX2_AND_MASK(%rip),%ymm12
1245 vpxor %ymm1,%ymm1,%ymm1
1247 vpor 32(%rsi),%ymm0,%ymm0
1248 vpor 64(%rsi),%ymm0,%ymm0
1249 vpor 96(%rsi),%ymm0,%ymm0
1250 vpor 128-256(%rax),%ymm0,%ymm0
1252 vpor 160-256(%rax),%ymm0,%ymm0
1253 vpor 192-256(%rax),%ymm0,%ymm0
1254 vpor 224-256(%rax),%ymm0,%ymm0
1255 vpor 256-256(%rax),%ymm0,%ymm0
1256 vpor 288-256(%rax),%ymm0,%ymm0
1257 vpor 320-256(%rax),%ymm0,%ymm0
1258 vpor 352-256(%rax),%ymm0,%ymm0
1259 vpor 384-512(%rcx),%ymm0,%ymm0
1260 vpor 416-512(%rcx),%ymm0,%ymm0
1261 vpor 448-512(%rcx),%ymm0,%ymm0
1262 vpor 480-512(%rcx),%ymm0,%ymm0
1263 vpor 512-512(%rcx),%ymm0,%ymm0
1264 vpor 544-512(%rcx),%ymm0,%ymm0
1265 vpcmpeqq %ymm1,%ymm0,%ymm0
1266 vmovdqa %ymm0,2304(%rsp)
1268 vpxor %ymm1,%ymm1,%ymm1
1269 vmovdqa 0(%r10),%ymm0
1271 vpor 32(%r10),%ymm0,%ymm0
1272 vpor 64(%r10),%ymm0,%ymm0
1273 vpor 96(%r10),%ymm0,%ymm0
1274 vpor 128-256(%rax),%ymm0,%ymm0
1276 vpor 160-256(%rax),%ymm0,%ymm0
1277 vpor 192-256(%rax),%ymm0,%ymm0
1278 vpor 224-256(%rax),%ymm0,%ymm0
1279 vpor 256-256(%rax),%ymm0,%ymm0
1280 vpor 288-256(%rax),%ymm0,%ymm0
1281 vpor 320-256(%rax),%ymm0,%ymm0
1282 vpor 352-256(%rax),%ymm0,%ymm0
1283 vpor 384-512(%rcx),%ymm0,%ymm0
1284 vpor 416-512(%rcx),%ymm0,%ymm0
1285 vpor 448-512(%rcx),%ymm0,%ymm0
1286 vpor 480-512(%rcx),%ymm0,%ymm0
1287 vpor 512-512(%rcx),%ymm0,%ymm0
1288 vpor 544-512(%rcx),%ymm0,%ymm0
1289 vpcmpeqq %ymm1,%ymm0,%ymm0
1290 vmovdqa %ymm0,2336(%rsp)
1297 call avx2_normalize_n_store
1302 leaq 1152(%rsp),%rdi
1304 call avx2_normalize_n_store
1309 call avx2_mul_by1_x4
1312 vmovdqa 2304(%rsp),%ymm9
1313 vpor 2336(%rsp),%ymm9,%ymm9
1315 vpandn %ymm0,%ymm9,%ymm0
1316 leaq .LONE+128(%rip),%rax
1317 vpandn %ymm1,%ymm9,%ymm1
1318 vpandn %ymm2,%ymm9,%ymm2
1319 vpandn %ymm3,%ymm9,%ymm3
1320 vpandn %ymm4,%ymm9,%ymm4
1321 vpandn %ymm5,%ymm9,%ymm5
1322 vpandn %ymm6,%ymm9,%ymm6
1323 vpandn %ymm7,%ymm9,%ymm7
1325 vpand 0-128(%rax),%ymm9,%ymm11
1326 vpandn %ymm8,%ymm9,%ymm8
1327 vpand 32-128(%rax),%ymm9,%ymm10
1328 vpxor %ymm11,%ymm0,%ymm0
1329 vpand 64-128(%rax),%ymm9,%ymm11
1330 vpxor %ymm10,%ymm1,%ymm1
1331 vpand 96-128(%rax),%ymm9,%ymm10
1332 vpxor %ymm11,%ymm2,%ymm2
1333 vpand 128-128(%rax),%ymm9,%ymm11
1334 vpxor %ymm10,%ymm3,%ymm3
1335 vpand 160-128(%rax),%ymm9,%ymm10
1336 vpxor %ymm11,%ymm4,%ymm4
1337 vpand 192-128(%rax),%ymm9,%ymm11
1338 vpxor %ymm10,%ymm5,%ymm5
1339 vpand 224-128(%rax),%ymm9,%ymm10
1340 vpxor %ymm11,%ymm6,%ymm6
1341 vpand 256-128(%rax),%ymm9,%ymm11
1342 vpxor %ymm10,%ymm7,%ymm7
1343 vpxor %ymm11,%ymm8,%ymm8
1344 vmovdqa %ymm0,0(%rdi)
1346 vmovdqa %ymm1,32(%rdi)
1347 vmovdqa %ymm2,64(%rdi)
1348 vmovdqa %ymm3,96(%rdi)
1349 vmovdqa %ymm4,128-160(%rax)
1350 vmovdqa %ymm5,160-160(%rax)
1351 vmovdqa %ymm6,192-160(%rax)
1352 vmovdqa %ymm7,224-160(%rax)
1353 vmovdqa %ymm8,256-160(%rax)
1357 leaq 1152(%rsp),%rsi
1358 leaq 1728(%rsp),%rdi
1359 leaq 2368(%rsp),%rcx
1361 call avx2_normalize_n_store
1365 leaq 1440(%rsp),%rdi
1367 call avx2_normalize_n_store
1371 leaq 1440(%rsp),%rdx
1372 leaq 2016(%rsp),%rdi
1374 call avx2_normalize_n_store
1378 leaq 1440(%rsp),%rdx
1382 vmovdqa %ymm0,0(%rdi)
1384 vmovdqa %ymm1,32(%rdi)
1385 vmovdqa %ymm2,64(%rdi)
1386 vmovdqa %ymm3,96(%rdi)
1387 vmovdqa %ymm4,128-160(%rax)
1388 vmovdqa %ymm5,160-160(%rax)
1389 vmovdqa %ymm6,192-160(%rax)
1390 vmovdqa %ymm7,224-160(%rax)
1391 vmovdqa %ymm8,256-160(%rax)
1399 vpaddq %ymm0,%ymm0,%ymm0
1400 leaq 1440(%rsp),%rdi
1401 vpaddq %ymm1,%ymm1,%ymm1
1402 vpaddq %ymm2,%ymm2,%ymm2
1403 vpaddq %ymm3,%ymm3,%ymm3
1404 vpaddq %ymm4,%ymm4,%ymm4
1405 vpaddq %ymm5,%ymm5,%ymm5
1406 vpaddq %ymm6,%ymm6,%ymm6
1407 vpaddq %ymm7,%ymm7,%ymm7
1408 vpaddq %ymm8,%ymm8,%ymm8
1409 call avx2_normalize_n_store
1427 leaq 1856(%rsp),%rsi
1428 leaq .LAVX2_POLY_x2+128(%rip),%rax
1429 leaq 2144(%rsp),%rdx
1430 leaq 1568(%rsp),%rcx
1433 vmovdqa 0-128(%rsi),%ymm0
1434 vmovdqa 32-128(%rsi),%ymm1
1435 vmovdqa 64-128(%rsi),%ymm2
1436 vmovdqa 96-128(%rsi),%ymm3
1437 vmovdqa 128-128(%rsi),%ymm4
1438 vmovdqa 160-128(%rsi),%ymm5
1439 vmovdqa 192-128(%rsi),%ymm6
1440 vmovdqa 224-128(%rsi),%ymm7
1441 vmovdqa 256-128(%rsi),%ymm8
1443 vpaddq 0-128(%rax),%ymm0,%ymm0
1444 vpaddq 32-128(%rax),%ymm1,%ymm1
1445 vpaddq 64-128(%rax),%ymm2,%ymm2
1446 vpaddq 96-128(%rax),%ymm3,%ymm3
1447 vpaddq 128-128(%rax),%ymm4,%ymm4
1448 vpaddq 160-128(%rax),%ymm5,%ymm5
1449 vpaddq 192-128(%rax),%ymm6,%ymm6
1450 vpaddq 224-128(%rax),%ymm7,%ymm7
1451 vpaddq 256-128(%rax),%ymm8,%ymm8
1453 vpsubq 0-128(%rdx),%ymm0,%ymm0
1454 vpsubq 32-128(%rdx),%ymm1,%ymm1
1455 vpsubq 64-128(%rdx),%ymm2,%ymm2
1456 vpsubq 96-128(%rdx),%ymm3,%ymm3
1457 vpsubq 128-128(%rdx),%ymm4,%ymm4
1458 vpsubq 160-128(%rdx),%ymm5,%ymm5
1459 vpsubq 192-128(%rdx),%ymm6,%ymm6
1460 vpsubq 224-128(%rdx),%ymm7,%ymm7
1461 vpsubq 256-128(%rdx),%ymm8,%ymm8
1463 vpsubq 0-128(%rcx),%ymm0,%ymm0
1464 vpsubq 32-128(%rcx),%ymm1,%ymm1
1465 vpsubq 64-128(%rcx),%ymm2,%ymm2
1466 vpsubq 96-128(%rcx),%ymm3,%ymm3
1467 vpsubq 128-128(%rcx),%ymm4,%ymm4
1468 vpsubq 160-128(%rcx),%ymm5,%ymm5
1469 vpsubq 192-128(%rcx),%ymm6,%ymm6
1470 vpsubq 224-128(%rcx),%ymm7,%ymm7
1471 vpsubq 256-128(%rcx),%ymm8,%ymm8
1476 call avx2_select_n_store
1483 call avx2_normalize_n_store
1487 leaq 1152(%rsp),%rdx
1490 call avx2_normalize_n_store
1493 leaq 2016(%rsp),%rsi
1497 call avx2_normalize_n_store
1508 call avx2_select_n_store
1518 call avx2_mul_by1_x4
1519 call avx2_normalize_n_store
1525 .size ecp_nistz256_avx2_point_add_affines_x4,.-ecp_nistz256_avx2_point_add_affines_x4
1529 .globl ecp_nistz256_avx2_to_mont
1530 .type ecp_nistz256_avx2_to_mont,@function
1532 ecp_nistz256_avx2_to_mont:
1534 vmovdqa .LAVX2_AND_MASK(%rip),%ymm12
1535 leaq .LTO_MONT_AVX2(%rip),%rdx
1537 call avx2_normalize_n_store
1541 .size ecp_nistz256_avx2_to_mont,.-ecp_nistz256_avx2_to_mont
1545 .globl ecp_nistz256_avx2_from_mont
1546 .type ecp_nistz256_avx2_from_mont,@function
1548 ecp_nistz256_avx2_from_mont:
1550 vmovdqa .LAVX2_AND_MASK(%rip),%ymm12
1551 leaq .LFROM_MONT_AVX2(%rip),%rdx
1553 call avx2_normalize_n_store
1557 .size ecp_nistz256_avx2_from_mont,.-ecp_nistz256_avx2_from_mont
1561 .globl ecp_nistz256_avx2_set1
1562 .type ecp_nistz256_avx2_set1,@function
1564 ecp_nistz256_avx2_set1:
1565 leaq .LONE+128(%rip),%rax
1568 vmovdqa 0-128(%rax),%ymm0
1569 vmovdqa 32-128(%rax),%ymm1
1570 vmovdqa 64-128(%rax),%ymm2
1571 vmovdqa 96-128(%rax),%ymm3
1572 vmovdqa 128-128(%rax),%ymm4
1573 vmovdqa 160-128(%rax),%ymm5
1574 vmovdqa %ymm0,0-128(%rdi)
1575 vmovdqa 192-128(%rax),%ymm0
1576 vmovdqa %ymm1,32-128(%rdi)
1577 vmovdqa 224-128(%rax),%ymm1
1578 vmovdqa %ymm2,64-128(%rdi)
1579 vmovdqa 256-128(%rax),%ymm2
1580 vmovdqa %ymm3,96-128(%rdi)
1581 vmovdqa %ymm4,128-128(%rdi)
1582 vmovdqa %ymm5,160-128(%rdi)
1583 vmovdqa %ymm0,192-128(%rdi)
1584 vmovdqa %ymm1,224-128(%rdi)
1585 vmovdqa %ymm2,256-128(%rdi)
1589 .size ecp_nistz256_avx2_set1,.-ecp_nistz256_avx2_set1
1590 .globl ecp_nistz256_avx2_multi_gather_w7
1591 .type ecp_nistz256_avx2_multi_gather_w7,@function
1593 ecp_nistz256_avx2_multi_gather_w7:
1595 leaq .LIntOne(%rip),%rax
1602 vpxor %ymm4,%ymm4,%ymm4
1603 vpxor %ymm5,%ymm5,%ymm5
1604 vpxor %ymm6,%ymm6,%ymm6
1605 vpxor %ymm7,%ymm7,%ymm7
1606 vpxor %ymm8,%ymm8,%ymm8
1607 vpxor %ymm9,%ymm9,%ymm9
1608 vpxor %ymm10,%ymm10,%ymm10
1609 vpxor %ymm11,%ymm11,%ymm11
1610 vmovdqa (%rax),%ymm12
1612 vpermd %ymm0,%ymm4,%ymm0
1613 vpermd %ymm1,%ymm4,%ymm1
1614 vpermd %ymm2,%ymm4,%ymm2
1615 vpermd %ymm3,%ymm4,%ymm3
1619 jmp .Lmulti_select_loop_avx2
1623 .Lmulti_select_loop_avx2:
1624 vpcmpeqd %ymm0,%ymm12,%ymm15
1626 vmovdqa 0(%rsi),%ymm13
1627 vmovdqa 32(%rsi),%ymm14
1628 vpand %ymm15,%ymm13,%ymm13
1629 vpand %ymm15,%ymm14,%ymm14
1630 vpxor %ymm13,%ymm4,%ymm4
1631 vpxor %ymm14,%ymm5,%ymm5
1633 vpcmpeqd %ymm1,%ymm12,%ymm15
1635 vmovdqa 4096(%rsi),%ymm13
1636 vmovdqa 4128(%rsi),%ymm14
1637 vpand %ymm15,%ymm13,%ymm13
1638 vpand %ymm15,%ymm14,%ymm14
1639 vpxor %ymm13,%ymm6,%ymm6
1640 vpxor %ymm14,%ymm7,%ymm7
1642 vpcmpeqd %ymm2,%ymm12,%ymm15
1644 vmovdqa 8192(%rsi),%ymm13
1645 vmovdqa 8224(%rsi),%ymm14
1646 vpand %ymm15,%ymm13,%ymm13
1647 vpand %ymm15,%ymm14,%ymm14
1648 vpxor %ymm13,%ymm8,%ymm8
1649 vpxor %ymm14,%ymm9,%ymm9
1651 vpcmpeqd %ymm3,%ymm12,%ymm15
1653 vmovdqa 12288(%rsi),%ymm13
1654 vmovdqa 12320(%rsi),%ymm14
1655 vpand %ymm15,%ymm13,%ymm13
1656 vpand %ymm15,%ymm14,%ymm14
1657 vpxor %ymm13,%ymm10,%ymm10
1658 vpxor %ymm14,%ymm11,%ymm11
1660 vpaddd (%rax),%ymm12,%ymm12
1664 jnz .Lmulti_select_loop_avx2
1666 vmovdqu %ymm4,0-112(%rdi)
1667 vmovdqu %ymm5,32-112(%rdi)
1668 vmovdqu %ymm6,64-112(%rdi)
1669 vmovdqu %ymm7,96-112(%rdi)
1670 vmovdqu %ymm8,128-112(%rdi)
1671 vmovdqu %ymm9,160-112(%rdi)
1672 vmovdqu %ymm10,192-112(%rdi)
1673 vmovdqu %ymm11,224-112(%rdi)
1677 .size ecp_nistz256_avx2_multi_gather_w7,.-ecp_nistz256_avx2_multi_gather_w7
1680 .globl ecp_nistz_avx2_eligible
1681 .type ecp_nistz_avx2_eligible,@function
1683 ecp_nistz_avx2_eligible:
1684 movl OPENSSL_ia32cap_P+8(%rip),%eax
1688 .size ecp_nistz_avx2_eligible,.-ecp_nistz_avx2_eligible