]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - secure/lib/libcrypto/amd64/ecp_nistz256-avx2.S
Regen amd64 assembly files for OpenSSL 1.1.1.
[FreeBSD/FreeBSD.git] / secure / lib / libcrypto / amd64 / ecp_nistz256-avx2.S
1 /* $FreeBSD$ */
2 /* Do not modify. This file is auto-generated from ecp_nistz256-avx2.pl. */
3 .text   
4
5 .align  64
6 .LAVX2_AND_MASK:
7 .LAVX2_POLY:
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
17
18 .LAVX2_POLY_x2:
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
28
29 .LAVX2_POLY_x8:
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
39
40 .LONE:
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
50
51
52
53
54 .LTO_MONT_AVX2:
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
64
65 .LFROM_MONT_AVX2:
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
75
76 .LIntOne:
77 .long   1,1,1,1,1,1,1,1
78 .globl  ecp_nistz256_avx2_transpose_convert
79 .type   ecp_nistz256_avx2_transpose_convert,@function
80 .align  64
81 ecp_nistz256_avx2_transpose_convert:
82         vzeroupper
83
84         vmovdqa 0(%rsi),%ymm0
85         leaq    112(%rsi),%rax
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
94
95
96         vpunpcklqdq     %ymm1,%ymm0,%ymm8
97         vpunpcklqdq     %ymm3,%ymm2,%ymm9
98         vpunpckhqdq     %ymm1,%ymm0,%ymm10
99         vpunpckhqdq     %ymm3,%ymm2,%ymm11
100
101         vpunpcklqdq     %ymm5,%ymm4,%ymm12
102         vpunpcklqdq     %ymm7,%ymm6,%ymm13
103         vpunpckhqdq     %ymm5,%ymm4,%ymm14
104         vpunpckhqdq     %ymm7,%ymm6,%ymm15
105
106         vperm2i128      $0x20,%ymm9,%ymm8,%ymm0
107         vperm2i128      $0x20,%ymm11,%ymm10,%ymm1
108         vperm2i128      $0x31,%ymm9,%ymm8,%ymm2
109         vperm2i128      $0x31,%ymm11,%ymm10,%ymm3
110
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
116
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)
138         leaq    112(%rdi),%rax
139         vpand   %ymm15,%ymm3,%ymm8
140         vpsrlq  $29,%ymm3,%ymm3
141
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)
150         leaq    448(%rdi),%rax
151
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
175
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)
184
185         vzeroupper
186         .byte   0xf3,0xc3
187 .size   ecp_nistz256_avx2_transpose_convert,.-ecp_nistz256_avx2_transpose_convert
188
189 .globl  ecp_nistz256_avx2_convert_transpose_back
190 .type   ecp_nistz256_avx2_convert_transpose_back,@function
191 .align  32
192 ecp_nistz256_avx2_convert_transpose_back:
193         vzeroupper
194         movl    $3,%ecx
195
196 .Lconv_loop:
197         vmovdqa 0(%rsi),%ymm0
198         leaq    160(%rsi),%rax
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
207
208         vpsllq  $29,%ymm1,%ymm1
209         vpsllq  $58,%ymm2,%ymm9
210         vpaddq  %ymm1,%ymm0,%ymm0
211         vpaddq  %ymm9,%ymm0,%ymm0
212
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
218
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
224
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
230
231         vpunpcklqdq     %ymm1,%ymm0,%ymm9
232         vpunpcklqdq     %ymm3,%ymm2,%ymm10
233         vpunpckhqdq     %ymm1,%ymm0,%ymm11
234         vpunpckhqdq     %ymm3,%ymm2,%ymm12
235
236         vperm2i128      $0x20,%ymm10,%ymm9,%ymm0
237         vperm2i128      $0x20,%ymm12,%ymm11,%ymm1
238         vperm2i128      $0x31,%ymm10,%ymm9,%ymm2
239         vperm2i128      $0x31,%ymm12,%ymm11,%ymm3
240
241         vmovdqa %ymm0,0(%rdi)
242         vmovdqa %ymm1,96(%rdi)
243         vmovdqa %ymm2,192(%rdi)
244         vmovdqa %ymm3,288(%rdi)
245
246         leaq    288(%rsi),%rsi
247         leaq    32(%rdi),%rdi
248
249         decl    %ecx
250         jnz     .Lconv_loop
251
252         vzeroupper
253         .byte   0xf3,0xc3
254 .size   ecp_nistz256_avx2_convert_transpose_back,.-ecp_nistz256_avx2_convert_transpose_back
255 .type   avx2_normalize,@function
256 .align  32
257 avx2_normalize:
258         vpsrlq  $29,%ymm0,%ymm11
259         vpand   %ymm12,%ymm0,%ymm0
260         vpaddq  %ymm11,%ymm1,%ymm1
261
262         vpsrlq  $29,%ymm1,%ymm11
263         vpand   %ymm12,%ymm1,%ymm1
264         vpaddq  %ymm11,%ymm2,%ymm2
265
266         vpsrlq  $29,%ymm2,%ymm11
267         vpand   %ymm12,%ymm2,%ymm2
268         vpaddq  %ymm11,%ymm3,%ymm3
269
270         vpsrlq  $29,%ymm3,%ymm11
271         vpand   %ymm12,%ymm3,%ymm3
272         vpaddq  %ymm11,%ymm4,%ymm4
273
274         vpsrlq  $29,%ymm4,%ymm11
275         vpand   %ymm12,%ymm4,%ymm4
276         vpaddq  %ymm11,%ymm5,%ymm5
277
278         vpsrlq  $29,%ymm5,%ymm11
279         vpand   %ymm12,%ymm5,%ymm5
280         vpaddq  %ymm11,%ymm6,%ymm6
281
282         vpsrlq  $29,%ymm6,%ymm11
283         vpand   %ymm12,%ymm6,%ymm6
284         vpaddq  %ymm11,%ymm7,%ymm7
285
286         vpsrlq  $29,%ymm7,%ymm11
287         vpand   %ymm12,%ymm7,%ymm7
288         vpaddq  %ymm11,%ymm8,%ymm8
289
290
291         .byte   0xf3,0xc3
292 .size   avx2_normalize,.-avx2_normalize
293
294 .type   avx2_normalize_n_store,@function
295 .align  32
296 avx2_normalize_n_store:
297         vpsrlq  $29,%ymm0,%ymm11
298         vpand   %ymm12,%ymm0,%ymm0
299         vpaddq  %ymm11,%ymm1,%ymm1
300
301         vpsrlq  $29,%ymm1,%ymm11
302         vpand   %ymm12,%ymm1,%ymm1
303         vmovdqa %ymm0,0(%rdi)
304         leaq    160(%rdi),%rax
305         vpaddq  %ymm11,%ymm2,%ymm2
306
307         vpsrlq  $29,%ymm2,%ymm11
308         vpand   %ymm12,%ymm2,%ymm2
309         vmovdqa %ymm1,32(%rdi)
310         vpaddq  %ymm11,%ymm3,%ymm3
311
312         vpsrlq  $29,%ymm3,%ymm11
313         vpand   %ymm12,%ymm3,%ymm3
314         vmovdqa %ymm2,64(%rdi)
315         vpaddq  %ymm11,%ymm4,%ymm4
316
317         vpsrlq  $29,%ymm4,%ymm11
318         vpand   %ymm12,%ymm4,%ymm4
319         vmovdqa %ymm3,96(%rdi)
320         vpaddq  %ymm11,%ymm5,%ymm5
321
322         vpsrlq  $29,%ymm5,%ymm11
323         vpand   %ymm12,%ymm5,%ymm5
324         vmovdqa %ymm4,128-160(%rax)
325         vpaddq  %ymm11,%ymm6,%ymm6
326
327         vpsrlq  $29,%ymm6,%ymm11
328         vpand   %ymm12,%ymm6,%ymm6
329         vmovdqa %ymm5,160-160(%rax)
330         vpaddq  %ymm11,%ymm7,%ymm7
331
332         vpsrlq  $29,%ymm7,%ymm11
333         vpand   %ymm12,%ymm7,%ymm7
334         vmovdqa %ymm6,192-160(%rax)
335         vpaddq  %ymm11,%ymm8,%ymm8
336
337         vmovdqa %ymm7,224-160(%rax)
338         vmovdqa %ymm8,256-160(%rax)
339
340         .byte   0xf3,0xc3
341 .size   avx2_normalize_n_store,.-avx2_normalize_n_store
342
343
344
345 .type   avx2_mul_x4,@function
346 .align  32
347 avx2_mul_x4:
348         leaq    .LAVX2_POLY(%rip),%rax
349
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
358
359         vmovdqa 224(%rax),%ymm14
360         vmovdqa 256(%rax),%ymm15
361
362         movl    $9,%ecx
363         leaq    -512(%rsi),%rsi
364         jmp     .Lavx2_mul_x4_loop
365
366 .align  32
367 .Lavx2_mul_x4_loop:
368         vmovdqa 0(%rdx),%ymm9
369         leaq    32(%rdx),%rdx
370
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
387
388
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
399 .byte   0x67
400         vmovdqa %ymm4,%ymm3
401         vpsllq  $18,%ymm10,%ymm13
402 .byte   0x67
403         vmovdqa %ymm5,%ymm4
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
409
410         decl    %ecx
411         jnz     .Lavx2_mul_x4_loop
412
413         vpxor   %ymm8,%ymm8,%ymm8
414
415         .byte   0xf3,0xc3
416 .size   avx2_mul_x4,.-avx2_mul_x4
417
418
419
420
421 .type   avx2_mul_by1_x4,@function
422 .align  32
423 avx2_mul_by1_x4:
424         leaq    .LAVX2_POLY(%rip),%rax
425
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
435
436         vmovdqa 96+.LONE(%rip),%ymm14
437         vmovdqa 224+.LONE(%rip),%ymm15
438
439         movl    $9,%ecx
440         jmp     .Lavx2_mul_by1_x4_loop
441
442 .align  32
443 .Lavx2_mul_by1_x4_loop:
444         vmovdqa 0(%rsi),%ymm9
445 .byte   0x48,0x8d,0xb6,0x20,0,0,0
446
447         vpsllq  $5,%ymm9,%ymm13
448         vpmuludq        %ymm14,%ymm9,%ymm11
449         vpaddq  %ymm13,%ymm0,%ymm0
450         vpaddq  %ymm11,%ymm3,%ymm3
451 .byte   0x67
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
458
459 .byte   0x67,0x67
460         vpmuludq        %ymm15,%ymm9,%ymm13
461         vpsubq  %ymm11,%ymm6,%ymm6
462
463         vpmuludq        %ymm12,%ymm10,%ymm11
464         vpaddq  %ymm13,%ymm7,%ymm7
465         vpaddq  %ymm11,%ymm0,%ymm13
466         vpaddq  %ymm11,%ymm1,%ymm0
467 .byte   0x67,0x67
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
473         vmovdqa %ymm4,%ymm3
474         vpsllq  $18,%ymm10,%ymm13
475         vmovdqa %ymm5,%ymm4
476         vpmuludq        224(%rax),%ymm10,%ymm11
477         vpaddq  %ymm13,%ymm6,%ymm5
478         vpaddq  %ymm11,%ymm7,%ymm6
479         vpmuludq        256(%rax),%ymm10,%ymm7
480
481         decl    %ecx
482         jnz     .Lavx2_mul_by1_x4_loop
483
484         .byte   0xf3,0xc3
485 .size   avx2_mul_by1_x4,.-avx2_mul_by1_x4
486
487
488
489 .type   avx2_sqr_x4,@function
490 .align  32
491 avx2_sqr_x4:
492         leaq    .LAVX2_POLY(%rip),%rax
493
494         vmovdqa 224(%rax),%ymm14
495         vmovdqa 256(%rax),%ymm15
496
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)
522
523
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
536
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
544         vmovdqa %ymm4,%ymm3
545         vpsllq  $18,%ymm10,%ymm11
546         vmovdqa %ymm5,%ymm4
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
552
553
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
568
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
580         vmovdqa %ymm4,%ymm3
581         vpsllq  $18,%ymm10,%ymm11
582         vmovdqa %ymm5,%ymm4
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
588
589
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
602
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
614         vmovdqa %ymm4,%ymm3
615         vpsllq  $18,%ymm10,%ymm11
616         vmovdqa %ymm5,%ymm4
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
623
624
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
634
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
646         vmovdqa %ymm4,%ymm3
647         vpsllq  $18,%ymm10,%ymm11
648         vmovdqa %ymm5,%ymm4
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
655
656
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
664
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
676         vmovdqa %ymm4,%ymm3
677         vpsllq  $18,%ymm10,%ymm11
678         vmovdqa %ymm5,%ymm4
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
685
686
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
692
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
704         vmovdqa %ymm4,%ymm3
705         vpsllq  $18,%ymm10,%ymm11
706         vmovdqa %ymm5,%ymm4
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
713
714
715         vpmuludq        %ymm9,%ymm9,%ymm11
716         vpmuludq        192(%rcx),%ymm9,%ymm13
717         vpaddq  %ymm11,%ymm6,%ymm6
718
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
730         vmovdqa %ymm4,%ymm3
731         vpsllq  $18,%ymm10,%ymm11
732         vmovdqa %ymm5,%ymm4
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
739
740
741         vpmuludq        %ymm9,%ymm9,%ymm13
742
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
754         vmovdqa %ymm4,%ymm3
755         vpsllq  $18,%ymm10,%ymm11
756         vmovdqa %ymm5,%ymm4
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
763
764
765         vpmuludq        %ymm9,%ymm9,%ymm8
766
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
775         vmovdqa %ymm4,%ymm3
776         vpsllq  $18,%ymm10,%ymm11
777         vmovdqa %ymm5,%ymm4
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
783
784         vpxor   %ymm8,%ymm8,%ymm8
785
786         .byte   0xf3,0xc3
787 .size   avx2_sqr_x4,.-avx2_sqr_x4
788
789
790
791 .type   avx2_sub_x4,@function
792 .align  32
793 avx2_sub_x4:
794         vmovdqa 0(%rsi),%ymm0
795         leaq    160(%rsi),%rsi
796         leaq    .LAVX2_POLY_x8+128(%rip),%rax
797         leaq    128(%rdx),%rdx
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
806
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
816
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
826
827         .byte   0xf3,0xc3
828 .size   avx2_sub_x4,.-avx2_sub_x4
829
830 .type   avx2_select_n_store,@function
831 .align  32
832 avx2_select_n_store:
833         vmovdqa 2312(%rsp),%ymm10
834         vpor    2344(%rsp),%ymm10,%ymm10
835
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
847
848         vpand   0(%rsi),%ymm9,%ymm11
849         leaq    160(%rsi),%rax
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
867
868         vpand   0(%rdx),%ymm9,%ymm10
869         leaq    160(%rdx),%rax
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)
889         leaq    160(%rdi),%rax
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)
898
899
900         .byte   0xf3,0xc3
901 .size   avx2_select_n_store,.-avx2_select_n_store
902
903
904 .globl  ecp_nistz256_avx2_point_add_affine_x4
905 .type   ecp_nistz256_avx2_point_add_affine_x4,@function
906 .align  32
907 ecp_nistz256_avx2_point_add_affine_x4:
908         movq    %rsp,%rax
909         pushq   %rbp
910         vzeroupper
911         leaq    -8(%rax),%rbp
912
913
914
915
916
917
918
919
920
921
922
923
924         subq    $2624,%rsp
925         andq    $-64,%rsp
926
927         movq    %rdi,%r8
928         movq    %rsi,%r9
929         movq    %rdx,%r10
930
931         vmovdqa 0(%rsi),%ymm0
932         vmovdqa .LAVX2_AND_MASK(%rip),%ymm12
933         vpxor   %ymm1,%ymm1,%ymm1
934         leaq    256(%rsi),%rax
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
939         leaq    256(%rax),%rcx
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)
955
956         vpxor   %ymm1,%ymm1,%ymm1
957         vmovdqa 0(%r10),%ymm0
958         leaq    256(%r10),%rax
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
963         leaq    256(%rax),%rcx
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)
979
980
981         leaq    576(%r9),%rsi
982         leaq    576(%rsp),%rdi
983         leaq    2368(%rsp),%rcx
984         call    avx2_sqr_x4
985         call    avx2_normalize_n_store
986
987
988         leaq    0(%r10),%rsi
989         leaq    576(%rsp),%rdx
990         leaq    0(%rsp),%rdi
991         call    avx2_mul_x4
992
993         vmovdqa %ymm0,0(%rdi)
994         leaq    160(%rdi),%rax
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)
1003
1004
1005
1006         leaq    576(%r9),%rsi
1007         leaq    576(%rsp),%rdx
1008         leaq    288(%rsp),%rdi
1009         call    avx2_mul_x4
1010         call    avx2_normalize_n_store
1011
1012
1013         leaq    288(%r10),%rsi
1014         leaq    288(%rsp),%rdx
1015         leaq    288(%rsp),%rdi
1016         call    avx2_mul_x4
1017         call    avx2_normalize_n_store
1018
1019
1020         leaq    0(%rsp),%rsi
1021         leaq    0(%r9),%rdx
1022         leaq    864(%rsp),%rdi
1023         call    avx2_sub_x4
1024         call    avx2_normalize_n_store
1025
1026
1027         leaq    288(%rsp),%rsi
1028         leaq    288(%r9),%rdx
1029         leaq    1152(%rsp),%rdi
1030         call    avx2_sub_x4
1031         call    avx2_normalize_n_store
1032
1033
1034         leaq    864(%rsp),%rsi
1035         leaq    576(%r9),%rdx
1036         leaq    576(%r8),%rdi
1037         call    avx2_mul_x4
1038         call    avx2_normalize
1039
1040         leaq    .LONE(%rip),%rsi
1041         leaq    576(%r9),%rdx
1042         call    avx2_select_n_store
1043
1044
1045         leaq    1152(%rsp),%rsi
1046         leaq    1728(%rsp),%rdi
1047         leaq    2368(%rsp),%rcx
1048         call    avx2_sqr_x4
1049         call    avx2_normalize_n_store
1050
1051
1052         leaq    864(%rsp),%rsi
1053         leaq    1440(%rsp),%rdi
1054         call    avx2_sqr_x4
1055         call    avx2_normalize_n_store
1056
1057
1058         leaq    864(%rsp),%rsi
1059         leaq    1440(%rsp),%rdx
1060         leaq    2016(%rsp),%rdi
1061         call    avx2_mul_x4
1062         call    avx2_normalize_n_store
1063
1064
1065         leaq    0(%r9),%rsi
1066         leaq    1440(%rsp),%rdx
1067         leaq    0(%rsp),%rdi
1068         call    avx2_mul_x4
1069
1070         vmovdqa %ymm0,0(%rdi)
1071         leaq    160(%rdi),%rax
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)
1080
1081
1082
1083
1084
1085
1086
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
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115         leaq    1856(%rsp),%rsi
1116         leaq    .LAVX2_POLY_x2+128(%rip),%rax
1117         leaq    2144(%rsp),%rdx
1118         leaq    1568(%rsp),%rcx
1119         leaq    0(%r8),%rdi
1120
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
1130
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
1140
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
1150
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
1160         call    avx2_normalize
1161
1162         leaq    0(%r10),%rsi
1163         leaq    0(%r9),%rdx
1164         call    avx2_select_n_store
1165
1166
1167         leaq    0(%rsp),%rsi
1168         leaq    0(%r8),%rdx
1169         leaq    864(%rsp),%rdi
1170         call    avx2_sub_x4
1171         call    avx2_normalize_n_store
1172
1173
1174         leaq    864(%rsp),%rsi
1175         leaq    1152(%rsp),%rdx
1176         leaq    864(%rsp),%rdi
1177         call    avx2_mul_x4
1178         call    avx2_normalize_n_store
1179
1180
1181         leaq    2016(%rsp),%rsi
1182         leaq    288(%r9),%rdx
1183         leaq    288(%rsp),%rdi
1184         call    avx2_mul_x4
1185         call    avx2_normalize_n_store
1186
1187
1188         leaq    864(%rsp),%rsi
1189         leaq    288(%rsp),%rdx
1190         leaq    288(%r8),%rdi
1191         call    avx2_sub_x4
1192         call    avx2_normalize
1193
1194         leaq    288(%r10),%rsi
1195         leaq    288(%r9),%rdx
1196         call    avx2_select_n_store
1197
1198
1199
1200
1201
1202
1203
1204         leaq    288(%r8),%rsi
1205         leaq    288(%r8),%rdi
1206         call    avx2_mul_by1_x4
1207         call    avx2_normalize_n_store
1208
1209         vzeroupper
1210         movq    %rbp,%rsp
1211         popq    %rbp
1212         .byte   0xf3,0xc3
1213 .size   ecp_nistz256_avx2_point_add_affine_x4,.-ecp_nistz256_avx2_point_add_affine_x4
1214
1215
1216
1217 .globl  ecp_nistz256_avx2_point_add_affines_x4
1218 .type   ecp_nistz256_avx2_point_add_affines_x4,@function
1219 .align  32
1220 ecp_nistz256_avx2_point_add_affines_x4:
1221         movq    %rsp,%rax
1222         pushq   %rbp
1223         vzeroupper
1224         leaq    -8(%rax),%rbp
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236         subq    $2624,%rsp
1237         andq    $-64,%rsp
1238
1239         movq    %rdi,%r8
1240         movq    %rsi,%r9
1241         movq    %rdx,%r10
1242
1243         vmovdqa 0(%rsi),%ymm0
1244         vmovdqa .LAVX2_AND_MASK(%rip),%ymm12
1245         vpxor   %ymm1,%ymm1,%ymm1
1246         leaq    256(%rsi),%rax
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
1251         leaq    256(%rax),%rcx
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)
1267
1268         vpxor   %ymm1,%ymm1,%ymm1
1269         vmovdqa 0(%r10),%ymm0
1270         leaq    256(%r10),%rax
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
1275         leaq    256(%rax),%rcx
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)
1291
1292
1293         leaq    0(%r10),%rsi
1294         leaq    0(%r9),%rdx
1295         leaq    864(%rsp),%rdi
1296         call    avx2_sub_x4
1297         call    avx2_normalize_n_store
1298
1299
1300         leaq    288(%r10),%rsi
1301         leaq    288(%r9),%rdx
1302         leaq    1152(%rsp),%rdi
1303         call    avx2_sub_x4
1304         call    avx2_normalize_n_store
1305
1306
1307         leaq    864(%rsp),%rsi
1308         leaq    576(%r8),%rdi
1309         call    avx2_mul_by1_x4
1310         call    avx2_normalize
1311
1312         vmovdqa 2304(%rsp),%ymm9
1313         vpor    2336(%rsp),%ymm9,%ymm9
1314
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
1324
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)
1345         leaq    160(%rdi),%rax
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)
1354
1355
1356
1357         leaq    1152(%rsp),%rsi
1358         leaq    1728(%rsp),%rdi
1359         leaq    2368(%rsp),%rcx
1360         call    avx2_sqr_x4
1361         call    avx2_normalize_n_store
1362
1363
1364         leaq    864(%rsp),%rsi
1365         leaq    1440(%rsp),%rdi
1366         call    avx2_sqr_x4
1367         call    avx2_normalize_n_store
1368
1369
1370         leaq    864(%rsp),%rsi
1371         leaq    1440(%rsp),%rdx
1372         leaq    2016(%rsp),%rdi
1373         call    avx2_mul_x4
1374         call    avx2_normalize_n_store
1375
1376
1377         leaq    0(%r9),%rsi
1378         leaq    1440(%rsp),%rdx
1379         leaq    0(%rsp),%rdi
1380         call    avx2_mul_x4
1381
1382         vmovdqa %ymm0,0(%rdi)
1383         leaq    160(%rdi),%rax
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)
1392
1393
1394
1395
1396
1397
1398
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
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427         leaq    1856(%rsp),%rsi
1428         leaq    .LAVX2_POLY_x2+128(%rip),%rax
1429         leaq    2144(%rsp),%rdx
1430         leaq    1568(%rsp),%rcx
1431         leaq    0(%r8),%rdi
1432
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
1442
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
1452
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
1462
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
1472         call    avx2_normalize
1473
1474         leaq    0(%r10),%rsi
1475         leaq    0(%r9),%rdx
1476         call    avx2_select_n_store
1477
1478
1479         leaq    0(%rsp),%rsi
1480         leaq    0(%r8),%rdx
1481         leaq    864(%rsp),%rdi
1482         call    avx2_sub_x4
1483         call    avx2_normalize_n_store
1484
1485
1486         leaq    864(%rsp),%rsi
1487         leaq    1152(%rsp),%rdx
1488         leaq    864(%rsp),%rdi
1489         call    avx2_mul_x4
1490         call    avx2_normalize_n_store
1491
1492
1493         leaq    2016(%rsp),%rsi
1494         leaq    288(%r9),%rdx
1495         leaq    288(%rsp),%rdi
1496         call    avx2_mul_x4
1497         call    avx2_normalize_n_store
1498
1499
1500         leaq    864(%rsp),%rsi
1501         leaq    288(%rsp),%rdx
1502         leaq    288(%r8),%rdi
1503         call    avx2_sub_x4
1504         call    avx2_normalize
1505
1506         leaq    288(%r10),%rsi
1507         leaq    288(%r9),%rdx
1508         call    avx2_select_n_store
1509
1510
1511
1512
1513
1514
1515
1516         leaq    288(%r8),%rsi
1517         leaq    288(%r8),%rdi
1518         call    avx2_mul_by1_x4
1519         call    avx2_normalize_n_store
1520
1521         vzeroupper
1522         movq    %rbp,%rsp
1523         popq    %rbp
1524         .byte   0xf3,0xc3
1525 .size   ecp_nistz256_avx2_point_add_affines_x4,.-ecp_nistz256_avx2_point_add_affines_x4
1526
1527
1528
1529 .globl  ecp_nistz256_avx2_to_mont
1530 .type   ecp_nistz256_avx2_to_mont,@function
1531 .align  32
1532 ecp_nistz256_avx2_to_mont:
1533         vzeroupper
1534         vmovdqa .LAVX2_AND_MASK(%rip),%ymm12
1535         leaq    .LTO_MONT_AVX2(%rip),%rdx
1536         call    avx2_mul_x4
1537         call    avx2_normalize_n_store
1538
1539         vzeroupper
1540         .byte   0xf3,0xc3
1541 .size   ecp_nistz256_avx2_to_mont,.-ecp_nistz256_avx2_to_mont
1542
1543
1544
1545 .globl  ecp_nistz256_avx2_from_mont
1546 .type   ecp_nistz256_avx2_from_mont,@function
1547 .align  32
1548 ecp_nistz256_avx2_from_mont:
1549         vzeroupper
1550         vmovdqa .LAVX2_AND_MASK(%rip),%ymm12
1551         leaq    .LFROM_MONT_AVX2(%rip),%rdx
1552         call    avx2_mul_x4
1553         call    avx2_normalize_n_store
1554
1555         vzeroupper
1556         .byte   0xf3,0xc3
1557 .size   ecp_nistz256_avx2_from_mont,.-ecp_nistz256_avx2_from_mont
1558
1559
1560
1561 .globl  ecp_nistz256_avx2_set1
1562 .type   ecp_nistz256_avx2_set1,@function
1563 .align  32
1564 ecp_nistz256_avx2_set1:
1565         leaq    .LONE+128(%rip),%rax
1566         leaq    128(%rdi),%rdi
1567         vzeroupper
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)
1586
1587         vzeroupper
1588         .byte   0xf3,0xc3
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
1592 .align  32
1593 ecp_nistz256_avx2_multi_gather_w7:
1594         vzeroupper
1595         leaq    .LIntOne(%rip),%rax
1596
1597         vmovd   %edx,%xmm0
1598         vmovd   %ecx,%xmm1
1599         vmovd   %r8d,%xmm2
1600         vmovd   %r9d,%xmm3
1601
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
1611
1612         vpermd  %ymm0,%ymm4,%ymm0
1613         vpermd  %ymm1,%ymm4,%ymm1
1614         vpermd  %ymm2,%ymm4,%ymm2
1615         vpermd  %ymm3,%ymm4,%ymm3
1616
1617         movl    $64,%ecx
1618         leaq    112(%rdi),%rdi
1619         jmp     .Lmulti_select_loop_avx2
1620
1621
1622 .align  32
1623 .Lmulti_select_loop_avx2:
1624         vpcmpeqd        %ymm0,%ymm12,%ymm15
1625
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
1632
1633         vpcmpeqd        %ymm1,%ymm12,%ymm15
1634
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
1641
1642         vpcmpeqd        %ymm2,%ymm12,%ymm15
1643
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
1650
1651         vpcmpeqd        %ymm3,%ymm12,%ymm15
1652
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
1659
1660         vpaddd  (%rax),%ymm12,%ymm12
1661         leaq    64(%rsi),%rsi
1662
1663         decl    %ecx
1664         jnz     .Lmulti_select_loop_avx2
1665
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)
1674
1675         vzeroupper
1676         .byte   0xf3,0xc3
1677 .size   ecp_nistz256_avx2_multi_gather_w7,.-ecp_nistz256_avx2_multi_gather_w7
1678
1679
1680 .globl  ecp_nistz_avx2_eligible
1681 .type   ecp_nistz_avx2_eligible,@function
1682 .align  32
1683 ecp_nistz_avx2_eligible:
1684         movl    OPENSSL_ia32cap_P+8(%rip),%eax
1685         shrl    $5,%eax
1686         andl    $1,%eax
1687         .byte   0xf3,0xc3
1688 .size   ecp_nistz_avx2_eligible,.-ecp_nistz_avx2_eligible