blob: fbfef1be13ebe5d6415b3f371a3298dc267594a7 [file] [log] [blame]
Pete Bentley0c61efe2019-08-13 09:32:23 +01001; This file is generated from a similarly-named Perl script in the BoringSSL
2; source tree. Do not edit by hand.
3
4default rel
5%define XMMWORD
6%define YMMWORD
7%define ZMMWORD
8
9%ifdef BORINGSSL_PREFIX
10%include "boringssl_prefix_symbols_nasm.inc"
11%endif
12section .text code align=64
13
14
15
16$L$p434x2:
17 DQ 0xFFFFFFFFFFFFFFFE
18 DQ 0xFFFFFFFFFFFFFFFF
19 DQ 0xFB82ECF5C5FFFFFF
20 DQ 0xF78CB8F062B15D47
21 DQ 0xD9F8BFAD038A40AC
22 DQ 0x0004683E4E2EE688
23
24
25$L$p434p1:
26 DQ 0xFDC1767AE3000000
27 DQ 0x7BC65C783158AEA3
28 DQ 0x6CFC5FD681C52056
29 DQ 0x0002341F27177344
30
31EXTERN OPENSSL_ia32cap_P
32
33global sike_fpadd
34
35sike_fpadd:
36 mov QWORD[8+rsp],rdi ;WIN64 prologue
37 mov QWORD[16+rsp],rsi
38 mov rax,rsp
39$L$SEH_begin_sike_fpadd:
40 mov rdi,rcx
41 mov rsi,rdx
42 mov rdx,r8
43
44
45
46 push r12
47
48
49 push r13
50
51
52 push r14
53
54
55
56 xor rax,rax
57
58 mov r8,QWORD[rdi]
59 add r8,QWORD[rsi]
60 mov r9,QWORD[8+rdi]
61 adc r9,QWORD[8+rsi]
62 mov r10,QWORD[16+rdi]
63 adc r10,QWORD[16+rsi]
64 mov r11,QWORD[24+rdi]
65 adc r11,QWORD[24+rsi]
66 mov r12,QWORD[32+rdi]
67 adc r12,QWORD[32+rsi]
68 mov r13,QWORD[40+rdi]
69 adc r13,QWORD[40+rsi]
70 mov r14,QWORD[48+rdi]
71 adc r14,QWORD[48+rsi]
72
73 mov rcx,QWORD[$L$p434x2]
74 sub r8,rcx
75 mov rcx,QWORD[((8+$L$p434x2))]
76 sbb r9,rcx
77 sbb r10,rcx
78 mov rcx,QWORD[((16+$L$p434x2))]
79 sbb r11,rcx
80 mov rcx,QWORD[((24+$L$p434x2))]
81 sbb r12,rcx
82 mov rcx,QWORD[((32+$L$p434x2))]
83 sbb r13,rcx
84 mov rcx,QWORD[((40+$L$p434x2))]
85 sbb r14,rcx
86
87 sbb rax,0
88
89 mov rdi,QWORD[$L$p434x2]
90 and rdi,rax
91 mov rsi,QWORD[((8+$L$p434x2))]
92 and rsi,rax
93 mov rcx,QWORD[((16+$L$p434x2))]
94 and rcx,rax
95
96 add r8,rdi
97 mov QWORD[rdx],r8
98 adc r9,rsi
99 mov QWORD[8+rdx],r9
100 adc r10,rsi
101 mov QWORD[16+rdx],r10
102 adc r11,rcx
103 mov QWORD[24+rdx],r11
104
105 setc cl
106 mov r8,QWORD[((24+$L$p434x2))]
107 and r8,rax
108 mov r9,QWORD[((32+$L$p434x2))]
109 and r9,rax
110 mov r10,QWORD[((40+$L$p434x2))]
111 and r10,rax
112 bt rcx,0
113
114 adc r12,r8
115 mov QWORD[32+rdx],r12
116 adc r13,r9
117 mov QWORD[40+rdx],r13
118 adc r14,r10
119 mov QWORD[48+rdx],r14
120
121 pop r14
122
123 pop r13
124
125 pop r12
126
127 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
128 mov rsi,QWORD[16+rsp]
129 DB 0F3h,0C3h ;repret
130
131global sike_cswap_asm
132
133sike_cswap_asm:
134 mov QWORD[8+rsp],rdi ;WIN64 prologue
135 mov QWORD[16+rsp],rsi
136 mov rax,rsp
137$L$SEH_begin_sike_cswap_asm:
138 mov rdi,rcx
139 mov rsi,rdx
140 mov rdx,r8
141
142
143
144
145 movq xmm3,rdx
146
147
148
149
150
151 pshufd xmm3,xmm3,68
152
153 movdqu xmm0,XMMWORD[rdi]
154 movdqu xmm1,XMMWORD[rsi]
155 movdqa xmm2,xmm1
156 pxor xmm2,xmm0
157 pand xmm2,xmm3
158 pxor xmm0,xmm2
159 pxor xmm1,xmm2
160 movdqu XMMWORD[rdi],xmm0
161 movdqu XMMWORD[rsi],xmm1
162
163 movdqu xmm0,XMMWORD[16+rdi]
164 movdqu xmm1,XMMWORD[16+rsi]
165 movdqa xmm2,xmm1
166 pxor xmm2,xmm0
167 pand xmm2,xmm3
168 pxor xmm0,xmm2
169 pxor xmm1,xmm2
170 movdqu XMMWORD[16+rdi],xmm0
171 movdqu XMMWORD[16+rsi],xmm1
172
173 movdqu xmm0,XMMWORD[32+rdi]
174 movdqu xmm1,XMMWORD[32+rsi]
175 movdqa xmm2,xmm1
176 pxor xmm2,xmm0
177 pand xmm2,xmm3
178 pxor xmm0,xmm2
179 pxor xmm1,xmm2
180 movdqu XMMWORD[32+rdi],xmm0
181 movdqu XMMWORD[32+rsi],xmm1
182
183 movdqu xmm0,XMMWORD[48+rdi]
184 movdqu xmm1,XMMWORD[48+rsi]
185 movdqa xmm2,xmm1
186 pxor xmm2,xmm0
187 pand xmm2,xmm3
188 pxor xmm0,xmm2
189 pxor xmm1,xmm2
190 movdqu XMMWORD[48+rdi],xmm0
191 movdqu XMMWORD[48+rsi],xmm1
192
193 movdqu xmm0,XMMWORD[64+rdi]
194 movdqu xmm1,XMMWORD[64+rsi]
195 movdqa xmm2,xmm1
196 pxor xmm2,xmm0
197 pand xmm2,xmm3
198 pxor xmm0,xmm2
199 pxor xmm1,xmm2
200 movdqu XMMWORD[64+rdi],xmm0
201 movdqu XMMWORD[64+rsi],xmm1
202
203 movdqu xmm0,XMMWORD[80+rdi]
204 movdqu xmm1,XMMWORD[80+rsi]
205 movdqa xmm2,xmm1
206 pxor xmm2,xmm0
207 pand xmm2,xmm3
208 pxor xmm0,xmm2
209 pxor xmm1,xmm2
210 movdqu XMMWORD[80+rdi],xmm0
211 movdqu XMMWORD[80+rsi],xmm1
212
213 movdqu xmm0,XMMWORD[96+rdi]
214 movdqu xmm1,XMMWORD[96+rsi]
215 movdqa xmm2,xmm1
216 pxor xmm2,xmm0
217 pand xmm2,xmm3
218 pxor xmm0,xmm2
219 pxor xmm1,xmm2
220 movdqu XMMWORD[96+rdi],xmm0
221 movdqu XMMWORD[96+rsi],xmm1
222
223 movdqu xmm0,XMMWORD[112+rdi]
224 movdqu xmm1,XMMWORD[112+rsi]
225 movdqa xmm2,xmm1
226 pxor xmm2,xmm0
227 pand xmm2,xmm3
228 pxor xmm0,xmm2
229 pxor xmm1,xmm2
230 movdqu XMMWORD[112+rdi],xmm0
231 movdqu XMMWORD[112+rsi],xmm1
232
233 movdqu xmm0,XMMWORD[128+rdi]
234 movdqu xmm1,XMMWORD[128+rsi]
235 movdqa xmm2,xmm1
236 pxor xmm2,xmm0
237 pand xmm2,xmm3
238 pxor xmm0,xmm2
239 pxor xmm1,xmm2
240 movdqu XMMWORD[128+rdi],xmm0
241 movdqu XMMWORD[128+rsi],xmm1
242
243 movdqu xmm0,XMMWORD[144+rdi]
244 movdqu xmm1,XMMWORD[144+rsi]
245 movdqa xmm2,xmm1
246 pxor xmm2,xmm0
247 pand xmm2,xmm3
248 pxor xmm0,xmm2
249 pxor xmm1,xmm2
250 movdqu XMMWORD[144+rdi],xmm0
251 movdqu XMMWORD[144+rsi],xmm1
252
253 movdqu xmm0,XMMWORD[160+rdi]
254 movdqu xmm1,XMMWORD[160+rsi]
255 movdqa xmm2,xmm1
256 pxor xmm2,xmm0
257 pand xmm2,xmm3
258 pxor xmm0,xmm2
259 pxor xmm1,xmm2
260 movdqu XMMWORD[160+rdi],xmm0
261 movdqu XMMWORD[160+rsi],xmm1
262
263 movdqu xmm0,XMMWORD[176+rdi]
264 movdqu xmm1,XMMWORD[176+rsi]
265 movdqa xmm2,xmm1
266 pxor xmm2,xmm0
267 pand xmm2,xmm3
268 pxor xmm0,xmm2
269 pxor xmm1,xmm2
270 movdqu XMMWORD[176+rdi],xmm0
271 movdqu XMMWORD[176+rsi],xmm1
272
273 movdqu xmm0,XMMWORD[192+rdi]
274 movdqu xmm1,XMMWORD[192+rsi]
275 movdqa xmm2,xmm1
276 pxor xmm2,xmm0
277 pand xmm2,xmm3
278 pxor xmm0,xmm2
279 pxor xmm1,xmm2
280 movdqu XMMWORD[192+rdi],xmm0
281 movdqu XMMWORD[192+rsi],xmm1
282
283 movdqu xmm0,XMMWORD[208+rdi]
284 movdqu xmm1,XMMWORD[208+rsi]
285 movdqa xmm2,xmm1
286 pxor xmm2,xmm0
287 pand xmm2,xmm3
288 pxor xmm0,xmm2
289 pxor xmm1,xmm2
290 movdqu XMMWORD[208+rdi],xmm0
291 movdqu XMMWORD[208+rsi],xmm1
292
293 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
294 mov rsi,QWORD[16+rsp]
295 DB 0F3h,0C3h ;repret
296global sike_fpsub
297
298sike_fpsub:
299 mov QWORD[8+rsp],rdi ;WIN64 prologue
300 mov QWORD[16+rsp],rsi
301 mov rax,rsp
302$L$SEH_begin_sike_fpsub:
303 mov rdi,rcx
304 mov rsi,rdx
305 mov rdx,r8
306
307
308
309 push r12
310
311
312 push r13
313
314
315 push r14
316
317
318
319 xor rax,rax
320
321 mov r8,QWORD[rdi]
322 sub r8,QWORD[rsi]
323 mov r9,QWORD[8+rdi]
324 sbb r9,QWORD[8+rsi]
325 mov r10,QWORD[16+rdi]
326 sbb r10,QWORD[16+rsi]
327 mov r11,QWORD[24+rdi]
328 sbb r11,QWORD[24+rsi]
329 mov r12,QWORD[32+rdi]
330 sbb r12,QWORD[32+rsi]
331 mov r13,QWORD[40+rdi]
332 sbb r13,QWORD[40+rsi]
333 mov r14,QWORD[48+rdi]
334 sbb r14,QWORD[48+rsi]
335
336 sbb rax,0x0
337
338 mov rdi,QWORD[$L$p434x2]
339 and rdi,rax
340 mov rsi,QWORD[((8+$L$p434x2))]
341 and rsi,rax
342 mov rcx,QWORD[((16+$L$p434x2))]
343 and rcx,rax
344
345 add r8,rdi
346 mov QWORD[rdx],r8
347 adc r9,rsi
348 mov QWORD[8+rdx],r9
349 adc r10,rsi
350 mov QWORD[16+rdx],r10
351 adc r11,rcx
352 mov QWORD[24+rdx],r11
353
354 setc cl
355 mov r8,QWORD[((24+$L$p434x2))]
356 and r8,rax
357 mov r9,QWORD[((32+$L$p434x2))]
358 and r9,rax
359 mov r10,QWORD[((40+$L$p434x2))]
360 and r10,rax
361 bt rcx,0x0
362
363 adc r12,r8
364 adc r13,r9
365 adc r14,r10
366 mov QWORD[32+rdx],r12
367 mov QWORD[40+rdx],r13
368 mov QWORD[48+rdx],r14
369
370 pop r14
371
372 pop r13
373
374 pop r12
375
376 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
377 mov rsi,QWORD[16+rsp]
378 DB 0F3h,0C3h ;repret
379
380global sike_mpadd_asm
381
382sike_mpadd_asm:
383 mov QWORD[8+rsp],rdi ;WIN64 prologue
384 mov QWORD[16+rsp],rsi
385 mov rax,rsp
386$L$SEH_begin_sike_mpadd_asm:
387 mov rdi,rcx
388 mov rsi,rdx
389 mov rdx,r8
390
391
392
393 mov r8,QWORD[rdi];
394 mov r9,QWORD[8+rdi]
395 mov r10,QWORD[16+rdi]
396 mov r11,QWORD[24+rdi]
397 mov rcx,QWORD[32+rdi]
398 add r8,QWORD[rsi]
399 adc r9,QWORD[8+rsi]
400 adc r10,QWORD[16+rsi]
401 adc r11,QWORD[24+rsi]
402 adc rcx,QWORD[32+rsi]
403 mov QWORD[rdx],r8
404 mov QWORD[8+rdx],r9
405 mov QWORD[16+rdx],r10
406 mov QWORD[24+rdx],r11
407 mov QWORD[32+rdx],rcx
408
409 mov r8,QWORD[40+rdi]
410 mov r9,QWORD[48+rdi]
411 adc r8,QWORD[40+rsi]
412 adc r9,QWORD[48+rsi]
413 mov QWORD[40+rdx],r8
414 mov QWORD[48+rdx],r9
415 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
416 mov rsi,QWORD[16+rsp]
417 DB 0F3h,0C3h ;repret
418
419global sike_mpsubx2_asm
420
421sike_mpsubx2_asm:
422 mov QWORD[8+rsp],rdi ;WIN64 prologue
423 mov QWORD[16+rsp],rsi
424 mov rax,rsp
425$L$SEH_begin_sike_mpsubx2_asm:
426 mov rdi,rcx
427 mov rsi,rdx
428 mov rdx,r8
429
430
431
432 xor rax,rax
433
434 mov r8,QWORD[rdi]
435 mov r9,QWORD[8+rdi]
436 mov r10,QWORD[16+rdi]
437 mov r11,QWORD[24+rdi]
438 mov rcx,QWORD[32+rdi]
439 sub r8,QWORD[rsi]
440 sbb r9,QWORD[8+rsi]
441 sbb r10,QWORD[16+rsi]
442 sbb r11,QWORD[24+rsi]
443 sbb rcx,QWORD[32+rsi]
444 mov QWORD[rdx],r8
445 mov QWORD[8+rdx],r9
446 mov QWORD[16+rdx],r10
447 mov QWORD[24+rdx],r11
448 mov QWORD[32+rdx],rcx
449
450 mov r8,QWORD[40+rdi]
451 mov r9,QWORD[48+rdi]
452 mov r10,QWORD[56+rdi]
453 mov r11,QWORD[64+rdi]
454 mov rcx,QWORD[72+rdi]
455 sbb r8,QWORD[40+rsi]
456 sbb r9,QWORD[48+rsi]
457 sbb r10,QWORD[56+rsi]
458 sbb r11,QWORD[64+rsi]
459 sbb rcx,QWORD[72+rsi]
460 mov QWORD[40+rdx],r8
461 mov QWORD[48+rdx],r9
462 mov QWORD[56+rdx],r10
463 mov QWORD[64+rdx],r11
464 mov QWORD[72+rdx],rcx
465
466 mov r8,QWORD[80+rdi]
467 mov r9,QWORD[88+rdi]
468 mov r10,QWORD[96+rdi]
469 mov r11,QWORD[104+rdi]
470 sbb r8,QWORD[80+rsi]
471 sbb r9,QWORD[88+rsi]
472 sbb r10,QWORD[96+rsi]
473 sbb r11,QWORD[104+rsi]
474 sbb rax,0x0
475 mov QWORD[80+rdx],r8
476 mov QWORD[88+rdx],r9
477 mov QWORD[96+rdx],r10
478 mov QWORD[104+rdx],r11
479 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
480 mov rsi,QWORD[16+rsp]
481 DB 0F3h,0C3h ;repret
482
483global sike_mpdblsubx2_asm
484
485sike_mpdblsubx2_asm:
486 mov QWORD[8+rsp],rdi ;WIN64 prologue
487 mov QWORD[16+rsp],rsi
488 mov rax,rsp
489$L$SEH_begin_sike_mpdblsubx2_asm:
490 mov rdi,rcx
491 mov rsi,rdx
492 mov rdx,r8
493
494
495
496 push r12
497
498
499 push r13
500
501
502
503 xor rax,rax
504
505
506 mov r8,QWORD[rdx]
507 mov r9,QWORD[8+rdx]
508 mov r10,QWORD[16+rdx]
509 mov r11,QWORD[24+rdx]
510 mov r12,QWORD[32+rdx]
511 mov r13,QWORD[40+rdx]
512 mov rcx,QWORD[48+rdx]
513 sub r8,QWORD[rdi]
514 sbb r9,QWORD[8+rdi]
515 sbb r10,QWORD[16+rdi]
516 sbb r11,QWORD[24+rdi]
517 sbb r12,QWORD[32+rdi]
518 sbb r13,QWORD[40+rdi]
519 sbb rcx,QWORD[48+rdi]
520 adc rax,0x0
521
522
523 sub r8,QWORD[rsi]
524 sbb r9,QWORD[8+rsi]
525 sbb r10,QWORD[16+rsi]
526 sbb r11,QWORD[24+rsi]
527 sbb r12,QWORD[32+rsi]
528 sbb r13,QWORD[40+rsi]
529 sbb rcx,QWORD[48+rsi]
530 adc rax,0x0
531
532
533 mov QWORD[rdx],r8
534 mov QWORD[8+rdx],r9
535 mov QWORD[16+rdx],r10
536 mov QWORD[24+rdx],r11
537 mov QWORD[32+rdx],r12
538 mov QWORD[40+rdx],r13
539 mov QWORD[48+rdx],rcx
540
541
542 mov r8,QWORD[56+rdx]
543 mov r9,QWORD[64+rdx]
544 mov r10,QWORD[72+rdx]
545 mov r11,QWORD[80+rdx]
546 mov r12,QWORD[88+rdx]
547 mov r13,QWORD[96+rdx]
548 mov rcx,QWORD[104+rdx]
549
550 sub r8,rax
551 sbb r8,QWORD[56+rdi]
552 sbb r9,QWORD[64+rdi]
553 sbb r10,QWORD[72+rdi]
554 sbb r11,QWORD[80+rdi]
555 sbb r12,QWORD[88+rdi]
556 sbb r13,QWORD[96+rdi]
557 sbb rcx,QWORD[104+rdi]
558
559
560 sub r8,QWORD[56+rsi]
561 sbb r9,QWORD[64+rsi]
562 sbb r10,QWORD[72+rsi]
563 sbb r11,QWORD[80+rsi]
564 sbb r12,QWORD[88+rsi]
565 sbb r13,QWORD[96+rsi]
566 sbb rcx,QWORD[104+rsi]
567
568
569 mov QWORD[56+rdx],r8
570 mov QWORD[64+rdx],r9
571 mov QWORD[72+rdx],r10
572 mov QWORD[80+rdx],r11
573 mov QWORD[88+rdx],r12
574 mov QWORD[96+rdx],r13
575 mov QWORD[104+rdx],rcx
576
577 pop r13
578
579 pop r12
580
581 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
582 mov rsi,QWORD[16+rsp]
583 DB 0F3h,0C3h ;repret
584
585
586$L$rdc_bdw:
587
588
589
590
591
592
593
594
595 xor rax,rax
596 mov rdx,QWORD[((0+0))+rdi]
597 mulx r9,r8,QWORD[((0+$L$p434p1))]
598 mulx r10,r12,QWORD[((8+$L$p434p1))]
599 mulx r11,r13,QWORD[((16+$L$p434p1))]
600
601 adox r9,r12
602 adox r10,r13
603
604 mulx r12,r13,QWORD[((24+$L$p434p1))]
605 adox r11,r13
606 adox r12,rax
607
608 xor rax,rax
609 mov rdx,QWORD[((0+8))+rdi]
610 mulx rcx,r13,QWORD[((0+$L$p434p1))]
611 adcx r9,r13
612 adcx r10,rcx
613
614 mulx r13,rcx,QWORD[((8+$L$p434p1))]
615 adcx r11,r13
616 adox r10,rcx
617
618 mulx r13,rcx,QWORD[((16+$L$p434p1))]
619 adcx r12,r13
620 adox r11,rcx
621
622 mulx r13,rcx,QWORD[((24+$L$p434p1))]
623 adcx r13,rax
624 adox r12,rcx
625 adox r13,rax
626
627 xor rcx,rcx
628 add r8,QWORD[24+rdi]
629 adc r9,QWORD[32+rdi]
630 adc r10,QWORD[40+rdi]
631 adc r11,QWORD[48+rdi]
632 adc r12,QWORD[56+rdi]
633 adc r13,QWORD[64+rdi]
634 adc rcx,QWORD[72+rdi]
635 mov QWORD[24+rdi],r8
636 mov QWORD[32+rdi],r9
637 mov QWORD[40+rdi],r10
638 mov QWORD[48+rdi],r11
639 mov QWORD[56+rdi],r12
640 mov QWORD[64+rdi],r13
641 mov QWORD[72+rdi],rcx
642 mov r8,QWORD[80+rdi]
643 mov r9,QWORD[88+rdi]
644 mov r10,QWORD[96+rdi]
645 mov r11,QWORD[104+rdi]
646 adc r8,0x0
647 adc r9,0x0
648 adc r10,0x0
649 adc r11,0x0
650 mov QWORD[80+rdi],r8
651 mov QWORD[88+rdi],r9
652 mov QWORD[96+rdi],r10
653 mov QWORD[104+rdi],r11
654
655 xor rax,rax
656 mov rdx,QWORD[((16+0))+rdi]
657 mulx r9,r8,QWORD[((0+$L$p434p1))]
658 mulx r10,r12,QWORD[((8+$L$p434p1))]
659 mulx r11,r13,QWORD[((16+$L$p434p1))]
660
661 adox r9,r12
662 adox r10,r13
663
664 mulx r12,r13,QWORD[((24+$L$p434p1))]
665 adox r11,r13
666 adox r12,rax
667
668 xor rax,rax
669 mov rdx,QWORD[((16+8))+rdi]
670 mulx rcx,r13,QWORD[((0+$L$p434p1))]
671 adcx r9,r13
672 adcx r10,rcx
673
674 mulx r13,rcx,QWORD[((8+$L$p434p1))]
675 adcx r11,r13
676 adox r10,rcx
677
678 mulx r13,rcx,QWORD[((16+$L$p434p1))]
679 adcx r12,r13
680 adox r11,rcx
681
682 mulx r13,rcx,QWORD[((24+$L$p434p1))]
683 adcx r13,rax
684 adox r12,rcx
685 adox r13,rax
686
687 xor rcx,rcx
688 add r8,QWORD[40+rdi]
689 adc r9,QWORD[48+rdi]
690 adc r10,QWORD[56+rdi]
691 adc r11,QWORD[64+rdi]
692 adc r12,QWORD[72+rdi]
693 adc r13,QWORD[80+rdi]
694 adc rcx,QWORD[88+rdi]
695 mov QWORD[40+rdi],r8
696 mov QWORD[48+rdi],r9
697 mov QWORD[56+rdi],r10
698 mov QWORD[64+rdi],r11
699 mov QWORD[72+rdi],r12
700 mov QWORD[80+rdi],r13
701 mov QWORD[88+rdi],rcx
702 mov r8,QWORD[96+rdi]
703 mov r9,QWORD[104+rdi]
704 adc r8,0x0
705 adc r9,0x0
706 mov QWORD[96+rdi],r8
707 mov QWORD[104+rdi],r9
708
709 xor rax,rax
710 mov rdx,QWORD[((32+0))+rdi]
711 mulx r9,r8,QWORD[((0+$L$p434p1))]
712 mulx r10,r12,QWORD[((8+$L$p434p1))]
713 mulx r11,r13,QWORD[((16+$L$p434p1))]
714
715 adox r9,r12
716 adox r10,r13
717
718 mulx r12,r13,QWORD[((24+$L$p434p1))]
719 adox r11,r13
720 adox r12,rax
721
722 xor rax,rax
723 mov rdx,QWORD[((32+8))+rdi]
724 mulx rcx,r13,QWORD[((0+$L$p434p1))]
725 adcx r9,r13
726 adcx r10,rcx
727
728 mulx r13,rcx,QWORD[((8+$L$p434p1))]
729 adcx r11,r13
730 adox r10,rcx
731
732 mulx r13,rcx,QWORD[((16+$L$p434p1))]
733 adcx r12,r13
734 adox r11,rcx
735
736 mulx r13,rcx,QWORD[((24+$L$p434p1))]
737 adcx r13,rax
738 adox r12,rcx
739 adox r13,rax
740
741 xor rcx,rcx
742 add r8,QWORD[56+rdi]
743 adc r9,QWORD[64+rdi]
744 adc r10,QWORD[72+rdi]
745 adc r11,QWORD[80+rdi]
746 adc r12,QWORD[88+rdi]
747 adc r13,QWORD[96+rdi]
748 adc rcx,QWORD[104+rdi]
749 mov QWORD[rsi],r8
750 mov QWORD[8+rsi],r9
751 mov QWORD[72+rdi],r10
752 mov QWORD[80+rdi],r11
753 mov QWORD[88+rdi],r12
754 mov QWORD[96+rdi],r13
755 mov QWORD[104+rdi],rcx
756
757 xor rax,rax
758 mov rdx,QWORD[48+rdi]
759 mulx r9,r8,QWORD[((0+$L$p434p1))]
760 mulx r10,r12,QWORD[((8+$L$p434p1))]
761 mulx r11,r13,QWORD[((16+$L$p434p1))]
762
763 adox r9,r12
764 adox r10,r13
765
766 mulx r12,r13,QWORD[((24+$L$p434p1))]
767 adox r11,r13
768 adox r12,rax
769
770 add r8,QWORD[72+rdi]
771 adc r9,QWORD[80+rdi]
772 adc r10,QWORD[88+rdi]
773 adc r11,QWORD[96+rdi]
774 adc r12,QWORD[104+rdi]
775 mov QWORD[16+rsi],r8
776 mov QWORD[24+rsi],r9
777 mov QWORD[32+rsi],r10
778 mov QWORD[40+rsi],r11
779 mov QWORD[48+rsi],r12
780
781
782 pop r15
783
784
785 pop r14
786
787
788 pop r13
789
790
791 pop r12
792
793
794 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
795 mov rsi,QWORD[16+rsp]
796 DB 0F3h,0C3h ;repret
797
798global sike_fprdc
799
800sike_fprdc:
801 mov QWORD[8+rsp],rdi ;WIN64 prologue
802 mov QWORD[16+rsp],rsi
803 mov rax,rsp
804$L$SEH_begin_sike_fprdc:
805 mov rdi,rcx
806 mov rsi,rdx
807 mov rdx,r8
808
809
810
811 push r12
812
813
814 push r13
815
816
817 push r14
818
819
820 push r15
821
822
823
824
825
826 lea rcx,[OPENSSL_ia32cap_P]
827 mov rcx,QWORD[8+rcx]
828 and ecx,0x80100
829 cmp ecx,0x80100
830 je NEAR $L$rdc_bdw
831
832
833
834
835 mov r14,QWORD[((0+0))+rdi]
836 mov rax,QWORD[((0+$L$p434p1))]
837 mul r14
838 xor r10,r10
839 mov r8,rax
840 mov r9,rdx
841
842
843 mov rax,QWORD[((8+$L$p434p1))]
844 mul r14
845 xor r11,r11
846 add r9,rax
847 adc r10,rdx
848
849
850 mov rcx,QWORD[((0+8))+rdi]
851 mov rax,QWORD[((0+$L$p434p1))]
852 mul rcx
853 add r9,rax
854 adc r10,rdx
855 adc r11,0x0
856
857
858 xor r12,r12
859 mov rax,QWORD[((16+$L$p434p1))]
860 mul r14
861 add r10,rax
862 adc r11,rdx
863 adc r12,0x0
864
865
866 mov rax,QWORD[((8+$L$p434p1))]
867 mul rcx
868 add r10,rax
869 adc r11,rdx
870 adc r12,0x0
871
872
873 mov rax,QWORD[((24+$L$p434p1))]
874 mul r14
875 xor r13,r13
876 add r11,rax
877 adc r12,rdx
878 adc r13,0x0
879
880
881 mov rax,QWORD[((16+$L$p434p1))]
882 mul rcx
883 add r11,rax
884 adc r12,rdx
885 adc r13,0x0
886
887
888 mov rax,QWORD[((24+$L$p434p1))]
889 mul rcx
890 add r12,rax
891 adc r13,rdx
892
893
894 xor rcx,rcx
895 add r8,QWORD[24+rdi]
896 adc r9,QWORD[32+rdi]
897 adc r10,QWORD[40+rdi]
898 adc r11,QWORD[48+rdi]
899 adc r12,QWORD[56+rdi]
900 adc r13,QWORD[64+rdi]
901 adc rcx,QWORD[72+rdi]
902 mov QWORD[24+rdi],r8
903 mov QWORD[32+rdi],r9
904 mov QWORD[40+rdi],r10
905 mov QWORD[48+rdi],r11
906 mov QWORD[56+rdi],r12
907 mov QWORD[64+rdi],r13
908 mov QWORD[72+rdi],rcx
909 mov r8,QWORD[80+rdi]
910 mov r9,QWORD[88+rdi]
911 mov r10,QWORD[96+rdi]
912 mov r11,QWORD[104+rdi]
913 adc r8,0x0
914 adc r9,0x0
915 adc r10,0x0
916 adc r11,0x0
917 mov QWORD[80+rdi],r8
918 mov QWORD[88+rdi],r9
919 mov QWORD[96+rdi],r10
920 mov QWORD[104+rdi],r11
921
922
923 mov r14,QWORD[((16+0))+rdi]
924 mov rax,QWORD[((0+$L$p434p1))]
925 mul r14
926 xor r10,r10
927 mov r8,rax
928 mov r9,rdx
929
930
931 mov rax,QWORD[((8+$L$p434p1))]
932 mul r14
933 xor r11,r11
934 add r9,rax
935 adc r10,rdx
936
937
938 mov rcx,QWORD[((16+8))+rdi]
939 mov rax,QWORD[((0+$L$p434p1))]
940 mul rcx
941 add r9,rax
942 adc r10,rdx
943 adc r11,0x0
944
945
946 xor r12,r12
947 mov rax,QWORD[((16+$L$p434p1))]
948 mul r14
949 add r10,rax
950 adc r11,rdx
951 adc r12,0x0
952
953
954 mov rax,QWORD[((8+$L$p434p1))]
955 mul rcx
956 add r10,rax
957 adc r11,rdx
958 adc r12,0x0
959
960
961 mov rax,QWORD[((24+$L$p434p1))]
962 mul r14
963 xor r13,r13
964 add r11,rax
965 adc r12,rdx
966 adc r13,0x0
967
968
969 mov rax,QWORD[((16+$L$p434p1))]
970 mul rcx
971 add r11,rax
972 adc r12,rdx
973 adc r13,0x0
974
975
976 mov rax,QWORD[((24+$L$p434p1))]
977 mul rcx
978 add r12,rax
979 adc r13,rdx
980
981
982 xor rcx,rcx
983 add r8,QWORD[40+rdi]
984 adc r9,QWORD[48+rdi]
985 adc r10,QWORD[56+rdi]
986 adc r11,QWORD[64+rdi]
987 adc r12,QWORD[72+rdi]
988 adc r13,QWORD[80+rdi]
989 adc rcx,QWORD[88+rdi]
990 mov QWORD[40+rdi],r8
991 mov QWORD[48+rdi],r9
992 mov QWORD[56+rdi],r10
993 mov QWORD[64+rdi],r11
994 mov QWORD[72+rdi],r12
995 mov QWORD[80+rdi],r13
996 mov QWORD[88+rdi],rcx
997 mov r8,QWORD[96+rdi]
998 mov r9,QWORD[104+rdi]
999 adc r8,0x0
1000 adc r9,0x0
1001 mov QWORD[96+rdi],r8
1002 mov QWORD[104+rdi],r9
1003
1004
1005 mov r14,QWORD[((32+0))+rdi]
1006 mov rax,QWORD[((0+$L$p434p1))]
1007 mul r14
1008 xor r10,r10
1009 mov r8,rax
1010 mov r9,rdx
1011
1012
1013 mov rax,QWORD[((8+$L$p434p1))]
1014 mul r14
1015 xor r11,r11
1016 add r9,rax
1017 adc r10,rdx
1018
1019
1020 mov rcx,QWORD[((32+8))+rdi]
1021 mov rax,QWORD[((0+$L$p434p1))]
1022 mul rcx
1023 add r9,rax
1024 adc r10,rdx
1025 adc r11,0x0
1026
1027
1028 xor r12,r12
1029 mov rax,QWORD[((16+$L$p434p1))]
1030 mul r14
1031 add r10,rax
1032 adc r11,rdx
1033 adc r12,0x0
1034
1035
1036 mov rax,QWORD[((8+$L$p434p1))]
1037 mul rcx
1038 add r10,rax
1039 adc r11,rdx
1040 adc r12,0x0
1041
1042
1043 mov rax,QWORD[((24+$L$p434p1))]
1044 mul r14
1045 xor r13,r13
1046 add r11,rax
1047 adc r12,rdx
1048 adc r13,0x0
1049
1050
1051 mov rax,QWORD[((16+$L$p434p1))]
1052 mul rcx
1053 add r11,rax
1054 adc r12,rdx
1055 adc r13,0x0
1056
1057
1058 mov rax,QWORD[((24+$L$p434p1))]
1059 mul rcx
1060 add r12,rax
1061 adc r13,rdx
1062
1063
1064 xor rcx,rcx
1065 add r8,QWORD[56+rdi]
1066 adc r9,QWORD[64+rdi]
1067 adc r10,QWORD[72+rdi]
1068 adc r11,QWORD[80+rdi]
1069 adc r12,QWORD[88+rdi]
1070 adc r13,QWORD[96+rdi]
1071 adc rcx,QWORD[104+rdi]
1072 mov QWORD[rsi],r8
1073 mov QWORD[8+rsi],r9
1074 mov QWORD[72+rdi],r10
1075 mov QWORD[80+rdi],r11
1076 mov QWORD[88+rdi],r12
1077 mov QWORD[96+rdi],r13
1078 mov QWORD[104+rdi],rcx
1079
1080 mov r13,QWORD[48+rdi]
1081
1082 xor r10,r10
1083 mov rax,QWORD[((0+$L$p434p1))]
1084 mul r13
1085 mov r8,rax
1086 mov r9,rdx
1087
1088 xor r11,r11
1089 mov rax,QWORD[((8+$L$p434p1))]
1090 mul r13
1091 add r9,rax
1092 adc r10,rdx
1093
1094 xor r12,r12
1095 mov rax,QWORD[((16+$L$p434p1))]
1096 mul r13
1097 add r10,rax
1098 adc r11,rdx
1099
1100 mov rax,QWORD[((24+$L$p434p1))]
1101 mul r13
1102 add r11,rax
1103 adc r12,rdx
1104
1105 add r8,QWORD[72+rdi]
1106 adc r9,QWORD[80+rdi]
1107 adc r10,QWORD[88+rdi]
1108 adc r11,QWORD[96+rdi]
1109 adc r12,QWORD[104+rdi]
1110 mov QWORD[16+rsi],r8
1111 mov QWORD[24+rsi],r9
1112 mov QWORD[32+rsi],r10
1113 mov QWORD[40+rsi],r11
1114 mov QWORD[48+rsi],r12
1115
1116
1117 pop r15
1118
1119 pop r14
1120
1121 pop r13
1122
1123 pop r12
1124
1125 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
1126 mov rsi,QWORD[16+rsp]
1127 DB 0F3h,0C3h ;repret
1128
1129$L$mul_bdw:
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139 mov rcx,rdx
1140 xor rax,rax
1141
1142
1143 mov r8,QWORD[rdi]
1144 mov r9,QWORD[8+rdi]
1145 mov r10,QWORD[16+rdi]
1146 mov r11,QWORD[24+rdi]
1147
1148 push rbx
1149
1150
1151 push rbp
1152
1153
1154 sub rsp,96
1155
1156
1157 add r8,QWORD[32+rdi]
1158 adc r9,QWORD[40+rdi]
1159 adc r10,QWORD[48+rdi]
1160 adc r11,0x0
1161 sbb rax,0x0
1162 mov QWORD[rsp],r8
1163 mov QWORD[8+rsp],r9
1164 mov QWORD[16+rsp],r10
1165 mov QWORD[24+rsp],r11
1166
1167
1168 xor rbx,rbx
1169 mov r12,QWORD[rsi]
1170 mov r13,QWORD[8+rsi]
1171 mov r14,QWORD[16+rsi]
1172 mov r15,QWORD[24+rsi]
1173 add r12,QWORD[32+rsi]
1174 adc r13,QWORD[40+rsi]
1175 adc r14,QWORD[48+rsi]
1176 adc r15,0x0
1177 sbb rbx,0x0
1178 mov QWORD[32+rsp],r12
1179 mov QWORD[40+rsp],r13
1180 mov QWORD[48+rsp],r14
1181 mov QWORD[56+rsp],r15
1182
1183
1184 and r12,rax
1185 and r13,rax
1186 and r14,rax
1187 and r15,rax
1188
1189
1190 and r8,rbx
1191 and r9,rbx
1192 and r10,rbx
1193 and r11,rbx
1194
1195
1196 add r8,r12
1197 adc r9,r13
1198 adc r10,r14
1199 adc r11,r15
1200 mov QWORD[64+rsp],r8
1201 mov QWORD[72+rsp],r9
1202 mov QWORD[80+rsp],r10
1203 mov QWORD[88+rsp],r11
1204
1205
1206 mov rdx,QWORD[((0+0))+rsp]
1207 mulx r8,r9,QWORD[((32+0))+rsp]
1208 mov QWORD[((0+0))+rsp],r9
1209 mulx r9,r10,QWORD[((32+8))+rsp]
1210 xor rax,rax
1211 adox r8,r10
1212 mulx r10,r11,QWORD[((32+16))+rsp]
1213 adox r9,r11
1214 mulx r11,r12,QWORD[((32+24))+rsp]
1215 adox r10,r12
1216
1217 mov rdx,QWORD[((0+8))+rsp]
1218 mulx r13,r12,QWORD[((32+0))+rsp]
1219 adox r11,rax
1220 xor rax,rax
1221 mulx r14,r15,QWORD[((32+8))+rsp]
1222 adox r12,r8
1223 mov QWORD[((0+8))+rsp],r12
1224 adcx r13,r15
1225 mulx r15,rbx,QWORD[((32+16))+rsp]
1226 adcx r14,rbx
1227 adox r13,r9
1228 mulx rbx,rbp,QWORD[((32+24))+rsp]
1229 adcx r15,rbp
1230 adcx rbx,rax
1231 adox r14,r10
1232
1233 mov rdx,QWORD[((0+16))+rsp]
1234 mulx r9,r8,QWORD[((32+0))+rsp]
1235 adox r15,r11
1236 adox rbx,rax
1237 xor rax,rax
1238 mulx r10,r11,QWORD[((32+8))+rsp]
1239 adox r8,r13
1240 mov QWORD[((0+16))+rsp],r8
1241 adcx r9,r11
1242 mulx r11,r12,QWORD[((32+16))+rsp]
1243 adcx r10,r12
1244 adox r9,r14
1245 mulx r12,rbp,QWORD[((32+24))+rsp]
1246 adcx r11,rbp
1247 adcx r12,rax
1248
1249 adox r10,r15
1250 adox r11,rbx
1251 adox r12,rax
1252
1253 mov rdx,QWORD[((0+24))+rsp]
1254 mulx r13,r8,QWORD[((32+0))+rsp]
1255 xor rax,rax
1256 mulx r14,r15,QWORD[((32+8))+rsp]
1257 adcx r13,r15
1258 adox r9,r8
1259 mulx r15,rbx,QWORD[((32+16))+rsp]
1260 adcx r14,rbx
1261 adox r10,r13
1262 mulx rbx,rbp,QWORD[((32+24))+rsp]
1263 adcx r15,rbp
1264 adcx rbx,rax
1265 adox r11,r14
1266 adox r12,r15
1267 adox rbx,rax
1268 mov QWORD[((0+24))+rsp],r9
1269 mov QWORD[((0+32))+rsp],r10
1270 mov QWORD[((0+40))+rsp],r11
1271 mov QWORD[((0+48))+rsp],r12
1272 mov QWORD[((0+56))+rsp],rbx
1273
1274
1275
1276 mov rdx,QWORD[((0+0))+rdi]
1277 mulx r8,r9,QWORD[((0+0))+rsi]
1278 mov QWORD[((0+0))+rcx],r9
1279 mulx r9,r10,QWORD[((0+8))+rsi]
1280 xor rax,rax
1281 adox r8,r10
1282 mulx r10,r11,QWORD[((0+16))+rsi]
1283 adox r9,r11
1284 mulx r11,r12,QWORD[((0+24))+rsi]
1285 adox r10,r12
1286
1287 mov rdx,QWORD[((0+8))+rdi]
1288 mulx r13,r12,QWORD[((0+0))+rsi]
1289 adox r11,rax
1290 xor rax,rax
1291 mulx r14,r15,QWORD[((0+8))+rsi]
1292 adox r12,r8
1293 mov QWORD[((0+8))+rcx],r12
1294 adcx r13,r15
1295 mulx r15,rbx,QWORD[((0+16))+rsi]
1296 adcx r14,rbx
1297 adox r13,r9
1298 mulx rbx,rbp,QWORD[((0+24))+rsi]
1299 adcx r15,rbp
1300 adcx rbx,rax
1301 adox r14,r10
1302
1303 mov rdx,QWORD[((0+16))+rdi]
1304 mulx r9,r8,QWORD[((0+0))+rsi]
1305 adox r15,r11
1306 adox rbx,rax
1307 xor rax,rax
1308 mulx r10,r11,QWORD[((0+8))+rsi]
1309 adox r8,r13
1310 mov QWORD[((0+16))+rcx],r8
1311 adcx r9,r11
1312 mulx r11,r12,QWORD[((0+16))+rsi]
1313 adcx r10,r12
1314 adox r9,r14
1315 mulx r12,rbp,QWORD[((0+24))+rsi]
1316 adcx r11,rbp
1317 adcx r12,rax
1318
1319 adox r10,r15
1320 adox r11,rbx
1321 adox r12,rax
1322
1323 mov rdx,QWORD[((0+24))+rdi]
1324 mulx r13,r8,QWORD[((0+0))+rsi]
1325 xor rax,rax
1326 mulx r14,r15,QWORD[((0+8))+rsi]
1327 adcx r13,r15
1328 adox r9,r8
1329 mulx r15,rbx,QWORD[((0+16))+rsi]
1330 adcx r14,rbx
1331 adox r10,r13
1332 mulx rbx,rbp,QWORD[((0+24))+rsi]
1333 adcx r15,rbp
1334 adcx rbx,rax
1335 adox r11,r14
1336 adox r12,r15
1337 adox rbx,rax
1338 mov QWORD[((0+24))+rcx],r9
1339 mov QWORD[((0+32))+rcx],r10
1340 mov QWORD[((0+40))+rcx],r11
1341 mov QWORD[((0+48))+rcx],r12
1342 mov QWORD[((0+56))+rcx],rbx
1343
1344
1345
1346 mov rdx,QWORD[((32+0))+rdi]
1347 mulx r8,r9,QWORD[((32+0))+rsi]
1348 mov QWORD[((64+0))+rcx],r9
1349 mulx r9,r10,QWORD[((32+8))+rsi]
1350 xor rax,rax
1351 adox r8,r10
1352 mulx r10,r11,QWORD[((32+16))+rsi]
1353 adox r9,r11
1354
1355 mov rdx,QWORD[((32+8))+rdi]
1356 mulx r11,r12,QWORD[((32+0))+rsi]
1357 adox r10,rax
1358 xor rax,rax
1359
1360 mulx r13,r14,QWORD[((32+8))+rsi]
1361 adox r12,r8
1362 mov QWORD[((64+8))+rcx],r12
1363 adcx r11,r14
1364
1365 mulx r14,r8,QWORD[((32+16))+rsi]
1366 adox r11,r9
1367 adcx r13,r8
1368 adcx r14,rax
1369 adox r13,r10
1370
1371 mov rdx,QWORD[((32+16))+rdi]
1372 mulx r9,r8,QWORD[((32+0))+rsi]
1373 adox r14,rax
1374 xor rax,rax
1375
1376 mulx r12,r10,QWORD[((32+8))+rsi]
1377 adox r8,r11
1378 mov QWORD[((64+16))+rcx],r8
1379 adcx r9,r13
1380
1381 mulx r8,r11,QWORD[((32+16))+rsi]
1382 adcx r12,r14
1383 adcx r8,rax
1384 adox r9,r10
1385 adox r11,r12
1386 adox r8,rax
1387 mov QWORD[((64+24))+rcx],r9
1388 mov QWORD[((64+32))+rcx],r11
1389 mov QWORD[((64+40))+rcx],r8
1390
1391
1392
1393
1394 mov r8,QWORD[64+rsp]
1395 mov r9,QWORD[72+rsp]
1396 mov r10,QWORD[80+rsp]
1397 mov r11,QWORD[88+rsp]
1398
1399 mov rax,QWORD[32+rsp]
1400 add r8,rax
1401 mov rax,QWORD[40+rsp]
1402 adc r9,rax
1403 mov rax,QWORD[48+rsp]
1404 adc r10,rax
1405 mov rax,QWORD[56+rsp]
1406 adc r11,rax
1407
1408
1409 mov r12,QWORD[rsp]
1410 mov r13,QWORD[8+rsp]
1411 mov r14,QWORD[16+rsp]
1412 mov r15,QWORD[24+rsp]
1413 sub r12,QWORD[rcx]
1414 sbb r13,QWORD[8+rcx]
1415 sbb r14,QWORD[16+rcx]
1416 sbb r15,QWORD[24+rcx]
1417 sbb r8,QWORD[32+rcx]
1418 sbb r9,QWORD[40+rcx]
1419 sbb r10,QWORD[48+rcx]
1420 sbb r11,QWORD[56+rcx]
1421
1422
1423 sub r12,QWORD[64+rcx]
1424 sbb r13,QWORD[72+rcx]
1425 sbb r14,QWORD[80+rcx]
1426 sbb r15,QWORD[88+rcx]
1427 sbb r8,QWORD[96+rcx]
1428 sbb r9,QWORD[104+rcx]
1429 sbb r10,0x0
1430 sbb r11,0x0
1431
1432 add r12,QWORD[32+rcx]
1433 mov QWORD[32+rcx],r12
1434 adc r13,QWORD[40+rcx]
1435 mov QWORD[40+rcx],r13
1436 adc r14,QWORD[48+rcx]
1437 mov QWORD[48+rcx],r14
1438 adc r15,QWORD[56+rcx]
1439 mov QWORD[56+rcx],r15
1440 adc r8,QWORD[64+rcx]
1441 mov QWORD[64+rcx],r8
1442 adc r9,QWORD[72+rcx]
1443 mov QWORD[72+rcx],r9
1444 adc r10,QWORD[80+rcx]
1445 mov QWORD[80+rcx],r10
1446 adc r11,QWORD[88+rcx]
1447 mov QWORD[88+rcx],r11
1448 mov r12,QWORD[96+rcx]
1449 adc r12,0x0
1450 mov QWORD[96+rcx],r12
1451 mov r13,QWORD[104+rcx]
1452 adc r13,0x0
1453 mov QWORD[104+rcx],r13
1454
1455 add rsp,96
1456
1457 pop rbp
1458
1459
1460 pop rbx
1461
1462
1463
1464
1465 pop r15
1466
1467
1468 pop r14
1469
1470
1471 pop r13
1472
1473
1474 pop r12
1475
1476
1477 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
1478 mov rsi,QWORD[16+rsp]
1479 DB 0F3h,0C3h ;repret
1480
1481
1482global sike_mpmul
1483
1484sike_mpmul:
1485 mov QWORD[8+rsp],rdi ;WIN64 prologue
1486 mov QWORD[16+rsp],rsi
1487 mov rax,rsp
1488$L$SEH_begin_sike_mpmul:
1489 mov rdi,rcx
1490 mov rsi,rdx
1491 mov rdx,r8
1492
1493
1494
1495 push r12
1496
1497
1498 push r13
1499
1500
1501 push r14
1502
1503
1504 push r15
1505
1506
1507
1508
1509
1510 lea rcx,[OPENSSL_ia32cap_P]
1511 mov rcx,QWORD[8+rcx]
1512 and ecx,0x80100
1513 cmp ecx,0x80100
1514 je NEAR $L$mul_bdw
1515
1516
1517
1518 mov rcx,rdx
1519
1520 sub rsp,112
1521
1522
1523
1524 xor rax,rax
1525 mov r8,QWORD[32+rdi]
1526 mov r9,QWORD[40+rdi]
1527 mov r10,QWORD[48+rdi]
1528 xor r11,r11
1529 add r8,QWORD[rdi]
1530 adc r9,QWORD[8+rdi]
1531 adc r10,QWORD[16+rdi]
1532 adc r11,QWORD[24+rdi]
1533
1534 sbb rax,0
1535 mov QWORD[64+rsp],rax
1536
1537 mov QWORD[rcx],r8
1538 mov QWORD[8+rcx],r9
1539 mov QWORD[16+rcx],r10
1540 mov QWORD[24+rcx],r11
1541
1542
1543 xor rdx,rdx
1544 mov r12,QWORD[32+rsi]
1545 mov r13,QWORD[40+rsi]
1546 mov r14,QWORD[48+rsi]
1547 xor r15,r15
1548 add r12,QWORD[rsi]
1549 adc r13,QWORD[8+rsi]
1550 adc r14,QWORD[16+rsi]
1551 adc r15,QWORD[24+rsi]
1552 sbb rdx,0x0
1553
1554 mov QWORD[72+rsp],rdx
1555
1556
1557 mov rax,QWORD[rcx]
1558 mul r12
1559 mov QWORD[rsp],rax
1560 mov r8,rdx
1561
1562 xor r9,r9
1563 mov rax,QWORD[rcx]
1564 mul r13
1565 add r8,rax
1566 adc r9,rdx
1567
1568 xor r10,r10
1569 mov rax,QWORD[8+rcx]
1570 mul r12
1571 add r8,rax
1572 mov QWORD[8+rsp],r8
1573 adc r9,rdx
1574 adc r10,0x0
1575
1576 xor r8,r8
1577 mov rax,QWORD[rcx]
1578 mul r14
1579 add r9,rax
1580 adc r10,rdx
1581 adc r8,0x0
1582
1583 mov rax,QWORD[16+rcx]
1584 mul r12
1585 add r9,rax
1586 adc r10,rdx
1587 adc r8,0x0
1588
1589 mov rax,QWORD[8+rcx]
1590 mul r13
1591 add r9,rax
1592 mov QWORD[16+rsp],r9
1593 adc r10,rdx
1594 adc r8,0x0
1595
1596 xor r9,r9
1597 mov rax,QWORD[rcx]
1598 mul r15
1599 add r10,rax
1600 adc r8,rdx
1601 adc r9,0x0
1602
1603 mov rax,QWORD[24+rcx]
1604 mul r12
1605 add r10,rax
1606 adc r8,rdx
1607 adc r9,0x0
1608
1609 mov rax,QWORD[8+rcx]
1610 mul r14
1611 add r10,rax
1612 adc r8,rdx
1613 adc r9,0x0
1614
1615 mov rax,QWORD[16+rcx]
1616 mul r13
1617 add r10,rax
1618 mov QWORD[24+rsp],r10
1619 adc r8,rdx
1620 adc r9,0x0
1621
1622 xor r10,r10
1623 mov rax,QWORD[8+rcx]
1624 mul r15
1625 add r8,rax
1626 adc r9,rdx
1627 adc r10,0x0
1628
1629 mov rax,QWORD[24+rcx]
1630 mul r13
1631 add r8,rax
1632 adc r9,rdx
1633 adc r10,0x0
1634
1635 mov rax,QWORD[16+rcx]
1636 mul r14
1637 add r8,rax
1638 mov QWORD[32+rsp],r8
1639 adc r9,rdx
1640 adc r10,0x0
1641
1642 xor r11,r11
1643 mov rax,QWORD[16+rcx]
1644 mul r15
1645 add r9,rax
1646 adc r10,rdx
1647 adc r11,0x0
1648
1649 mov rax,QWORD[24+rcx]
1650 mul r14
1651 add r9,rax
1652 mov QWORD[40+rsp],r9
1653 adc r10,rdx
1654 adc r11,0x0
1655
1656 mov rax,QWORD[24+rcx]
1657 mul r15
1658 add r10,rax
1659 mov QWORD[48+rsp],r10
1660 adc r11,rdx
1661 mov QWORD[56+rsp],r11
1662
1663
1664 mov rax,QWORD[64+rsp]
1665 and r12,rax
1666 and r13,rax
1667 and r14,rax
1668 and r15,rax
1669
1670
1671 mov rax,QWORD[72+rsp]
1672 mov r8,QWORD[rcx]
1673 and r8,rax
1674 mov r9,QWORD[8+rcx]
1675 and r9,rax
1676 mov r10,QWORD[16+rcx]
1677 and r10,rax
1678 mov r11,QWORD[24+rcx]
1679 and r11,rax
1680
1681
1682 add r12,r8
1683 adc r13,r9
1684 adc r14,r10
1685 adc r15,r11
1686
1687
1688 mov rax,QWORD[32+rsp]
1689 add r12,rax
1690 mov rax,QWORD[40+rsp]
1691 adc r13,rax
1692 mov rax,QWORD[48+rsp]
1693 adc r14,rax
1694 mov rax,QWORD[56+rsp]
1695 adc r15,rax
1696 mov QWORD[80+rsp],r12
1697 mov QWORD[88+rsp],r13
1698 mov QWORD[96+rsp],r14
1699 mov QWORD[104+rsp],r15
1700
1701
1702 mov r11,QWORD[rdi]
1703 mov rax,QWORD[rsi]
1704 mul r11
1705 xor r9,r9
1706 mov QWORD[rcx],rax
1707 mov r8,rdx
1708
1709 mov r14,QWORD[16+rdi]
1710 mov rax,QWORD[8+rsi]
1711 mul r11
1712 xor r10,r10
1713 add r8,rax
1714 adc r9,rdx
1715
1716 mov r12,QWORD[8+rdi]
1717 mov rax,QWORD[rsi]
1718 mul r12
1719 add r8,rax
1720 mov QWORD[8+rcx],r8
1721 adc r9,rdx
1722 adc r10,0x0
1723
1724 xor r8,r8
1725 mov rax,QWORD[16+rsi]
1726 mul r11
1727 add r9,rax
1728 adc r10,rdx
1729 adc r8,0x0
1730
1731 mov r13,QWORD[rsi]
1732 mov rax,r14
1733 mul r13
1734 add r9,rax
1735 adc r10,rdx
1736 adc r8,0x0
1737
1738 mov rax,QWORD[8+rsi]
1739 mul r12
1740 add r9,rax
1741 mov QWORD[16+rcx],r9
1742 adc r10,rdx
1743 adc r8,0x0
1744
1745 xor r9,r9
1746 mov rax,QWORD[24+rsi]
1747 mul r11
1748 mov r15,QWORD[24+rdi]
1749 add r10,rax
1750 adc r8,rdx
1751 adc r9,0x0
1752
1753 mov rax,r15
1754 mul r13
1755 add r10,rax
1756 adc r8,rdx
1757 adc r9,0x0
1758
1759 mov rax,QWORD[16+rsi]
1760 mul r12
1761 add r10,rax
1762 adc r8,rdx
1763 adc r9,0x0
1764
1765 mov rax,QWORD[8+rsi]
1766 mul r14
1767 add r10,rax
1768 mov QWORD[24+rcx],r10
1769 adc r8,rdx
1770 adc r9,0x0
1771
1772 xor r10,r10
1773 mov rax,QWORD[24+rsi]
1774 mul r12
1775 add r8,rax
1776 adc r9,rdx
1777 adc r10,0x0
1778
1779 mov rax,QWORD[8+rsi]
1780 mul r15
1781 add r8,rax
1782 adc r9,rdx
1783 adc r10,0x0
1784
1785 mov rax,QWORD[16+rsi]
1786 mul r14
1787 add r8,rax
1788 mov QWORD[32+rcx],r8
1789 adc r9,rdx
1790 adc r10,0x0
1791
1792 xor r8,r8
1793 mov rax,QWORD[24+rsi]
1794 mul r14
1795 add r9,rax
1796 adc r10,rdx
1797 adc r8,0x0
1798
1799 mov rax,QWORD[16+rsi]
1800 mul r15
1801 add r9,rax
1802 mov QWORD[40+rcx],r9
1803 adc r10,rdx
1804 adc r8,0x0
1805
1806 mov rax,QWORD[24+rsi]
1807 mul r15
1808 add r10,rax
1809 mov QWORD[48+rcx],r10
1810 adc r8,rdx
1811 mov QWORD[56+rcx],r8
1812
1813
1814
1815 mov r11,QWORD[32+rdi]
1816 mov rax,QWORD[32+rsi]
1817 mul r11
1818 xor r9,r9
1819 mov QWORD[64+rcx],rax
1820 mov r8,rdx
1821
1822 mov r14,QWORD[48+rdi]
1823 mov rax,QWORD[40+rsi]
1824 mul r11
1825 xor r10,r10
1826 add r8,rax
1827 adc r9,rdx
1828
1829 mov r12,QWORD[40+rdi]
1830 mov rax,QWORD[32+rsi]
1831 mul r12
1832 add r8,rax
1833 mov QWORD[72+rcx],r8
1834 adc r9,rdx
1835 adc r10,0x0
1836
1837 xor r8,r8
1838 mov rax,QWORD[48+rsi]
1839 mul r11
1840 add r9,rax
1841 adc r10,rdx
1842 adc r8,0x0
1843
1844 mov r13,QWORD[32+rsi]
1845 mov rax,r14
1846 mul r13
1847 add r9,rax
1848 adc r10,rdx
1849 adc r8,0x0
1850
1851 mov rax,QWORD[40+rsi]
1852 mul r12
1853 add r9,rax
1854 mov QWORD[80+rcx],r9
1855 adc r10,rdx
1856 adc r8,0x0
1857
1858 mov rax,QWORD[48+rsi]
1859 mul r12
1860 xor r12,r12
1861 add r10,rax
1862 adc r8,rdx
1863 adc r12,0x0
1864
1865 mov rax,QWORD[40+rsi]
1866 mul r14
1867 add r10,rax
1868 adc r8,rdx
1869 adc r12,0x0
1870 mov QWORD[88+rcx],r10
1871
1872 mov rax,QWORD[48+rsi]
1873 mul r14
1874 add r8,rax
1875 adc r12,0x0
1876 mov QWORD[96+rcx],r8
1877
1878 add rdx,r12
1879
1880
1881 mov r8,QWORD[rsp]
1882 sub r8,QWORD[rcx]
1883 mov r9,QWORD[8+rsp]
1884 sbb r9,QWORD[8+rcx]
1885 mov r10,QWORD[16+rsp]
1886 sbb r10,QWORD[16+rcx]
1887 mov r11,QWORD[24+rsp]
1888 sbb r11,QWORD[24+rcx]
1889 mov r12,QWORD[80+rsp]
1890 sbb r12,QWORD[32+rcx]
1891 mov r13,QWORD[88+rsp]
1892 sbb r13,QWORD[40+rcx]
1893 mov r14,QWORD[96+rsp]
1894 sbb r14,QWORD[48+rcx]
1895 mov r15,QWORD[104+rsp]
1896 sbb r15,QWORD[56+rcx]
1897
1898
1899 mov rax,QWORD[64+rcx]
1900 sub r8,rax
1901 mov rax,QWORD[72+rcx]
1902 sbb r9,rax
1903 mov rax,QWORD[80+rcx]
1904 sbb r10,rax
1905 mov rax,QWORD[88+rcx]
1906 sbb r11,rax
1907 mov rax,QWORD[96+rcx]
1908 sbb r12,rax
1909 sbb r13,rdx
1910 sbb r14,0x0
1911 sbb r15,0x0
1912
1913
1914 add r8,QWORD[32+rcx]
1915 mov QWORD[32+rcx],r8
1916 adc r9,QWORD[40+rcx]
1917 mov QWORD[40+rcx],r9
1918 adc r10,QWORD[48+rcx]
1919 mov QWORD[48+rcx],r10
1920 adc r11,QWORD[56+rcx]
1921 mov QWORD[56+rcx],r11
1922 adc r12,QWORD[64+rcx]
1923 mov QWORD[64+rcx],r12
1924 adc r13,QWORD[72+rcx]
1925 mov QWORD[72+rcx],r13
1926 adc r14,QWORD[80+rcx]
1927 mov QWORD[80+rcx],r14
1928 adc r15,QWORD[88+rcx]
1929 mov QWORD[88+rcx],r15
1930 mov r12,QWORD[96+rcx]
1931 adc r12,0x0
1932 mov QWORD[96+rcx],r12
1933 adc rdx,0x0
1934 mov QWORD[104+rcx],rdx
1935
1936 add rsp,112
1937
1938
1939
1940 pop r15
1941
1942 pop r14
1943
1944 pop r13
1945
1946 pop r12
1947
1948 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
1949 mov rsi,QWORD[16+rsp]
1950 DB 0F3h,0C3h ;repret
1951