Home | History | Annotate | Download | only in fipsmodule
      1 ; This file is generated from a similarly-named Perl script in the BoringSSL
      2 ; source tree. Do not edit by hand.
      3 
      4 default	rel
      5 %define XMMWORD
      6 %define YMMWORD
      7 %define ZMMWORD
      8 
      9 %ifdef BORINGSSL_PREFIX
     10 %include "boringssl_prefix_symbols_nasm.inc"
     11 %endif
     12 section	.text code align=64
     13 
     14 EXTERN	OPENSSL_ia32cap_P
     15 
     16 
     17 ALIGN	64
     18 $L$poly:
     19 	DQ	0xffffffffffffffff,0x00000000ffffffff,0x0000000000000000,0xffffffff00000001
     20 
     21 $L$One:
     22 	DD	1,1,1,1,1,1,1,1
     23 $L$Two:
     24 	DD	2,2,2,2,2,2,2,2
     25 $L$Three:
     26 	DD	3,3,3,3,3,3,3,3
     27 $L$ONE_mont:
     28 	DQ	0x0000000000000001,0xffffffff00000000,0xffffffffffffffff,0x00000000fffffffe
     29 
     30 
     31 $L$ord:
     32 	DQ	0xf3b9cac2fc632551,0xbce6faada7179e84,0xffffffffffffffff,0xffffffff00000000
     33 $L$ordK:
     34 	DQ	0xccd1c8aaee00bc4f
     35 
     36 
     37 
     38 global	ecp_nistz256_neg
     39 
     40 ALIGN	32
     41 ecp_nistz256_neg:
     42 	mov	QWORD[8+rsp],rdi	;WIN64 prologue
     43 	mov	QWORD[16+rsp],rsi
     44 	mov	rax,rsp
     45 $L$SEH_begin_ecp_nistz256_neg:
     46 	mov	rdi,rcx
     47 	mov	rsi,rdx
     48 
     49 
     50 
     51 	push	r12
     52 
     53 	push	r13
     54 
     55 $L$neg_body:
     56 
     57 	xor	r8,r8
     58 	xor	r9,r9
     59 	xor	r10,r10
     60 	xor	r11,r11
     61 	xor	r13,r13
     62 
     63 	sub	r8,QWORD[rsi]
     64 	sbb	r9,QWORD[8+rsi]
     65 	sbb	r10,QWORD[16+rsi]
     66 	mov	rax,r8
     67 	sbb	r11,QWORD[24+rsi]
     68 	lea	rsi,[$L$poly]
     69 	mov	rdx,r9
     70 	sbb	r13,0
     71 
     72 	add	r8,QWORD[rsi]
     73 	mov	rcx,r10
     74 	adc	r9,QWORD[8+rsi]
     75 	adc	r10,QWORD[16+rsi]
     76 	mov	r12,r11
     77 	adc	r11,QWORD[24+rsi]
     78 	test	r13,r13
     79 
     80 	cmovz	r8,rax
     81 	cmovz	r9,rdx
     82 	mov	QWORD[rdi],r8
     83 	cmovz	r10,rcx
     84 	mov	QWORD[8+rdi],r9
     85 	cmovz	r11,r12
     86 	mov	QWORD[16+rdi],r10
     87 	mov	QWORD[24+rdi],r11
     88 
     89 	mov	r13,QWORD[rsp]
     90 
     91 	mov	r12,QWORD[8+rsp]
     92 
     93 	lea	rsp,[16+rsp]
     94 
     95 $L$neg_epilogue:
     96 	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
     97 	mov	rsi,QWORD[16+rsp]
     98 	DB	0F3h,0C3h		;repret
     99 
    100 $L$SEH_end_ecp_nistz256_neg:
    101 
    102 
    103 
    104 
    105 
    106 
    107 global	ecp_nistz256_ord_mul_mont
    108 
    109 ALIGN	32
    110 ecp_nistz256_ord_mul_mont:
    111 	mov	QWORD[8+rsp],rdi	;WIN64 prologue
    112 	mov	QWORD[16+rsp],rsi
    113 	mov	rax,rsp
    114 $L$SEH_begin_ecp_nistz256_ord_mul_mont:
    115 	mov	rdi,rcx
    116 	mov	rsi,rdx
    117 	mov	rdx,r8
    118 
    119 
    120 
    121 	lea	rcx,[OPENSSL_ia32cap_P]
    122 	mov	rcx,QWORD[8+rcx]
    123 	and	ecx,0x80100
    124 	cmp	ecx,0x80100
    125 	je	NEAR $L$ecp_nistz256_ord_mul_montx
    126 	push	rbp
    127 
    128 	push	rbx
    129 
    130 	push	r12
    131 
    132 	push	r13
    133 
    134 	push	r14
    135 
    136 	push	r15
    137 
    138 $L$ord_mul_body:
    139 
    140 	mov	rax,QWORD[rdx]
    141 	mov	rbx,rdx
    142 	lea	r14,[$L$ord]
    143 	mov	r15,QWORD[$L$ordK]
    144 
    145 
    146 	mov	rcx,rax
    147 	mul	QWORD[rsi]
    148 	mov	r8,rax
    149 	mov	rax,rcx
    150 	mov	r9,rdx
    151 
    152 	mul	QWORD[8+rsi]
    153 	add	r9,rax
    154 	mov	rax,rcx
    155 	adc	rdx,0
    156 	mov	r10,rdx
    157 
    158 	mul	QWORD[16+rsi]
    159 	add	r10,rax
    160 	mov	rax,rcx
    161 	adc	rdx,0
    162 
    163 	mov	r13,r8
    164 	imul	r8,r15
    165 
    166 	mov	r11,rdx
    167 	mul	QWORD[24+rsi]
    168 	add	r11,rax
    169 	mov	rax,r8
    170 	adc	rdx,0
    171 	mov	r12,rdx
    172 
    173 
    174 	mul	QWORD[r14]
    175 	mov	rbp,r8
    176 	add	r13,rax
    177 	mov	rax,r8
    178 	adc	rdx,0
    179 	mov	rcx,rdx
    180 
    181 	sub	r10,r8
    182 	sbb	r8,0
    183 
    184 	mul	QWORD[8+r14]
    185 	add	r9,rcx
    186 	adc	rdx,0
    187 	add	r9,rax
    188 	mov	rax,rbp
    189 	adc	r10,rdx
    190 	mov	rdx,rbp
    191 	adc	r8,0
    192 
    193 	shl	rax,32
    194 	shr	rdx,32
    195 	sub	r11,rax
    196 	mov	rax,QWORD[8+rbx]
    197 	sbb	rbp,rdx
    198 
    199 	add	r11,r8
    200 	adc	r12,rbp
    201 	adc	r13,0
    202 
    203 
    204 	mov	rcx,rax
    205 	mul	QWORD[rsi]
    206 	add	r9,rax
    207 	mov	rax,rcx
    208 	adc	rdx,0
    209 	mov	rbp,rdx
    210 
    211 	mul	QWORD[8+rsi]
    212 	add	r10,rbp
    213 	adc	rdx,0
    214 	add	r10,rax
    215 	mov	rax,rcx
    216 	adc	rdx,0
    217 	mov	rbp,rdx
    218 
    219 	mul	QWORD[16+rsi]
    220 	add	r11,rbp
    221 	adc	rdx,0
    222 	add	r11,rax
    223 	mov	rax,rcx
    224 	adc	rdx,0
    225 
    226 	mov	rcx,r9
    227 	imul	r9,r15
    228 
    229 	mov	rbp,rdx
    230 	mul	QWORD[24+rsi]
    231 	add	r12,rbp
    232 	adc	rdx,0
    233 	xor	r8,r8
    234 	add	r12,rax
    235 	mov	rax,r9
    236 	adc	r13,rdx
    237 	adc	r8,0
    238 
    239 
    240 	mul	QWORD[r14]
    241 	mov	rbp,r9
    242 	add	rcx,rax
    243 	mov	rax,r9
    244 	adc	rcx,rdx
    245 
    246 	sub	r11,r9
    247 	sbb	r9,0
    248 
    249 	mul	QWORD[8+r14]
    250 	add	r10,rcx
    251 	adc	rdx,0
    252 	add	r10,rax
    253 	mov	rax,rbp
    254 	adc	r11,rdx
    255 	mov	rdx,rbp
    256 	adc	r9,0
    257 
    258 	shl	rax,32
    259 	shr	rdx,32
    260 	sub	r12,rax
    261 	mov	rax,QWORD[16+rbx]
    262 	sbb	rbp,rdx
    263 
    264 	add	r12,r9
    265 	adc	r13,rbp
    266 	adc	r8,0
    267 
    268 
    269 	mov	rcx,rax
    270 	mul	QWORD[rsi]
    271 	add	r10,rax
    272 	mov	rax,rcx
    273 	adc	rdx,0
    274 	mov	rbp,rdx
    275 
    276 	mul	QWORD[8+rsi]
    277 	add	r11,rbp
    278 	adc	rdx,0
    279 	add	r11,rax
    280 	mov	rax,rcx
    281 	adc	rdx,0
    282 	mov	rbp,rdx
    283 
    284 	mul	QWORD[16+rsi]
    285 	add	r12,rbp
    286 	adc	rdx,0
    287 	add	r12,rax
    288 	mov	rax,rcx
    289 	adc	rdx,0
    290 
    291 	mov	rcx,r10
    292 	imul	r10,r15
    293 
    294 	mov	rbp,rdx
    295 	mul	QWORD[24+rsi]
    296 	add	r13,rbp
    297 	adc	rdx,0
    298 	xor	r9,r9
    299 	add	r13,rax
    300 	mov	rax,r10
    301 	adc	r8,rdx
    302 	adc	r9,0
    303 
    304 
    305 	mul	QWORD[r14]
    306 	mov	rbp,r10
    307 	add	rcx,rax
    308 	mov	rax,r10
    309 	adc	rcx,rdx
    310 
    311 	sub	r12,r10
    312 	sbb	r10,0
    313 
    314 	mul	QWORD[8+r14]
    315 	add	r11,rcx
    316 	adc	rdx,0
    317 	add	r11,rax
    318 	mov	rax,rbp
    319 	adc	r12,rdx
    320 	mov	rdx,rbp
    321 	adc	r10,0
    322 
    323 	shl	rax,32
    324 	shr	rdx,32
    325 	sub	r13,rax
    326 	mov	rax,QWORD[24+rbx]
    327 	sbb	rbp,rdx
    328 
    329 	add	r13,r10
    330 	adc	r8,rbp
    331 	adc	r9,0
    332 
    333 
    334 	mov	rcx,rax
    335 	mul	QWORD[rsi]
    336 	add	r11,rax
    337 	mov	rax,rcx
    338 	adc	rdx,0
    339 	mov	rbp,rdx
    340 
    341 	mul	QWORD[8+rsi]
    342 	add	r12,rbp
    343 	adc	rdx,0
    344 	add	r12,rax
    345 	mov	rax,rcx
    346 	adc	rdx,0
    347 	mov	rbp,rdx
    348 
    349 	mul	QWORD[16+rsi]
    350 	add	r13,rbp
    351 	adc	rdx,0
    352 	add	r13,rax
    353 	mov	rax,rcx
    354 	adc	rdx,0
    355 
    356 	mov	rcx,r11
    357 	imul	r11,r15
    358 
    359 	mov	rbp,rdx
    360 	mul	QWORD[24+rsi]
    361 	add	r8,rbp
    362 	adc	rdx,0
    363 	xor	r10,r10
    364 	add	r8,rax
    365 	mov	rax,r11
    366 	adc	r9,rdx
    367 	adc	r10,0
    368 
    369 
    370 	mul	QWORD[r14]
    371 	mov	rbp,r11
    372 	add	rcx,rax
    373 	mov	rax,r11
    374 	adc	rcx,rdx
    375 
    376 	sub	r13,r11
    377 	sbb	r11,0
    378 
    379 	mul	QWORD[8+r14]
    380 	add	r12,rcx
    381 	adc	rdx,0
    382 	add	r12,rax
    383 	mov	rax,rbp
    384 	adc	r13,rdx
    385 	mov	rdx,rbp
    386 	adc	r11,0
    387 
    388 	shl	rax,32
    389 	shr	rdx,32
    390 	sub	r8,rax
    391 	sbb	rbp,rdx
    392 
    393 	add	r8,r11
    394 	adc	r9,rbp
    395 	adc	r10,0
    396 
    397 
    398 	mov	rsi,r12
    399 	sub	r12,QWORD[r14]
    400 	mov	r11,r13
    401 	sbb	r13,QWORD[8+r14]
    402 	mov	rcx,r8
    403 	sbb	r8,QWORD[16+r14]
    404 	mov	rbp,r9
    405 	sbb	r9,QWORD[24+r14]
    406 	sbb	r10,0
    407 
    408 	cmovc	r12,rsi
    409 	cmovc	r13,r11
    410 	cmovc	r8,rcx
    411 	cmovc	r9,rbp
    412 
    413 	mov	QWORD[rdi],r12
    414 	mov	QWORD[8+rdi],r13
    415 	mov	QWORD[16+rdi],r8
    416 	mov	QWORD[24+rdi],r9
    417 
    418 	mov	r15,QWORD[rsp]
    419 
    420 	mov	r14,QWORD[8+rsp]
    421 
    422 	mov	r13,QWORD[16+rsp]
    423 
    424 	mov	r12,QWORD[24+rsp]
    425 
    426 	mov	rbx,QWORD[32+rsp]
    427 
    428 	mov	rbp,QWORD[40+rsp]
    429 
    430 	lea	rsp,[48+rsp]
    431 
    432 $L$ord_mul_epilogue:
    433 	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
    434 	mov	rsi,QWORD[16+rsp]
    435 	DB	0F3h,0C3h		;repret
    436 
    437 $L$SEH_end_ecp_nistz256_ord_mul_mont:
    438 
    439 
    440 
    441 
    442 
    443 
    444 
    445 global	ecp_nistz256_ord_sqr_mont
    446 
    447 ALIGN	32
    448 ecp_nistz256_ord_sqr_mont:
    449 	mov	QWORD[8+rsp],rdi	;WIN64 prologue
    450 	mov	QWORD[16+rsp],rsi
    451 	mov	rax,rsp
    452 $L$SEH_begin_ecp_nistz256_ord_sqr_mont:
    453 	mov	rdi,rcx
    454 	mov	rsi,rdx
    455 	mov	rdx,r8
    456 
    457 
    458 
    459 	lea	rcx,[OPENSSL_ia32cap_P]
    460 	mov	rcx,QWORD[8+rcx]
    461 	and	ecx,0x80100
    462 	cmp	ecx,0x80100
    463 	je	NEAR $L$ecp_nistz256_ord_sqr_montx
    464 	push	rbp
    465 
    466 	push	rbx
    467 
    468 	push	r12
    469 
    470 	push	r13
    471 
    472 	push	r14
    473 
    474 	push	r15
    475 
    476 $L$ord_sqr_body:
    477 
    478 	mov	r8,QWORD[rsi]
    479 	mov	rax,QWORD[8+rsi]
    480 	mov	r14,QWORD[16+rsi]
    481 	mov	r15,QWORD[24+rsi]
    482 	lea	rsi,[$L$ord]
    483 	mov	rbx,rdx
    484 	jmp	NEAR $L$oop_ord_sqr
    485 
    486 ALIGN	32
    487 $L$oop_ord_sqr:
    488 
    489 	mov	rbp,rax
    490 	mul	r8
    491 	mov	r9,rax
    492 DB	102,72,15,110,205
    493 	mov	rax,r14
    494 	mov	r10,rdx
    495 
    496 	mul	r8
    497 	add	r10,rax
    498 	mov	rax,r15
    499 DB	102,73,15,110,214
    500 	adc	rdx,0
    501 	mov	r11,rdx
    502 
    503 	mul	r8
    504 	add	r11,rax
    505 	mov	rax,r15
    506 DB	102,73,15,110,223
    507 	adc	rdx,0
    508 	mov	r12,rdx
    509 
    510 
    511 	mul	r14
    512 	mov	r13,rax
    513 	mov	rax,r14
    514 	mov	r14,rdx
    515 
    516 
    517 	mul	rbp
    518 	add	r11,rax
    519 	mov	rax,r15
    520 	adc	rdx,0
    521 	mov	r15,rdx
    522 
    523 	mul	rbp
    524 	add	r12,rax
    525 	adc	rdx,0
    526 
    527 	add	r12,r15
    528 	adc	r13,rdx
    529 	adc	r14,0
    530 
    531 
    532 	xor	r15,r15
    533 	mov	rax,r8
    534 	add	r9,r9
    535 	adc	r10,r10
    536 	adc	r11,r11
    537 	adc	r12,r12
    538 	adc	r13,r13
    539 	adc	r14,r14
    540 	adc	r15,0
    541 
    542 
    543 	mul	rax
    544 	mov	r8,rax
    545 DB	102,72,15,126,200
    546 	mov	rbp,rdx
    547 
    548 	mul	rax
    549 	add	r9,rbp
    550 	adc	r10,rax
    551 DB	102,72,15,126,208
    552 	adc	rdx,0
    553 	mov	rbp,rdx
    554 
    555 	mul	rax
    556 	add	r11,rbp
    557 	adc	r12,rax
    558 DB	102,72,15,126,216
    559 	adc	rdx,0
    560 	mov	rbp,rdx
    561 
    562 	mov	rcx,r8
    563 	imul	r8,QWORD[32+rsi]
    564 
    565 	mul	rax
    566 	add	r13,rbp
    567 	adc	r14,rax
    568 	mov	rax,QWORD[rsi]
    569 	adc	r15,rdx
    570 
    571 
    572 	mul	r8
    573 	mov	rbp,r8
    574 	add	rcx,rax
    575 	mov	rax,QWORD[8+rsi]
    576 	adc	rcx,rdx
    577 
    578 	sub	r10,r8
    579 	sbb	rbp,0
    580 
    581 	mul	r8
    582 	add	r9,rcx
    583 	adc	rdx,0
    584 	add	r9,rax
    585 	mov	rax,r8
    586 	adc	r10,rdx
    587 	mov	rdx,r8
    588 	adc	rbp,0
    589 
    590 	mov	rcx,r9
    591 	imul	r9,QWORD[32+rsi]
    592 
    593 	shl	rax,32
    594 	shr	rdx,32
    595 	sub	r11,rax
    596 	mov	rax,QWORD[rsi]
    597 	sbb	r8,rdx
    598 
    599 	add	r11,rbp
    600 	adc	r8,0
    601 
    602 
    603 	mul	r9
    604 	mov	rbp,r9
    605 	add	rcx,rax
    606 	mov	rax,QWORD[8+rsi]
    607 	adc	rcx,rdx
    608 
    609 	sub	r11,r9
    610 	sbb	rbp,0
    611 
    612 	mul	r9
    613 	add	r10,rcx
    614 	adc	rdx,0
    615 	add	r10,rax
    616 	mov	rax,r9
    617 	adc	r11,rdx
    618 	mov	rdx,r9
    619 	adc	rbp,0
    620 
    621 	mov	rcx,r10
    622 	imul	r10,QWORD[32+rsi]
    623 
    624 	shl	rax,32
    625 	shr	rdx,32
    626 	sub	r8,rax
    627 	mov	rax,QWORD[rsi]
    628 	sbb	r9,rdx
    629 
    630 	add	r8,rbp
    631 	adc	r9,0
    632 
    633 
    634 	mul	r10
    635 	mov	rbp,r10
    636 	add	rcx,rax
    637 	mov	rax,QWORD[8+rsi]
    638 	adc	rcx,rdx
    639 
    640 	sub	r8,r10
    641 	sbb	rbp,0
    642 
    643 	mul	r10
    644 	add	r11,rcx
    645 	adc	rdx,0
    646 	add	r11,rax
    647 	mov	rax,r10
    648 	adc	r8,rdx
    649 	mov	rdx,r10
    650 	adc	rbp,0
    651 
    652 	mov	rcx,r11
    653 	imul	r11,QWORD[32+rsi]
    654 
    655 	shl	rax,32
    656 	shr	rdx,32
    657 	sub	r9,rax
    658 	mov	rax,QWORD[rsi]
    659 	sbb	r10,rdx
    660 
    661 	add	r9,rbp
    662 	adc	r10,0
    663 
    664 
    665 	mul	r11
    666 	mov	rbp,r11
    667 	add	rcx,rax
    668 	mov	rax,QWORD[8+rsi]
    669 	adc	rcx,rdx
    670 
    671 	sub	r9,r11
    672 	sbb	rbp,0
    673 
    674 	mul	r11
    675 	add	r8,rcx
    676 	adc	rdx,0
    677 	add	r8,rax
    678 	mov	rax,r11
    679 	adc	r9,rdx
    680 	mov	rdx,r11
    681 	adc	rbp,0
    682 
    683 	shl	rax,32
    684 	shr	rdx,32
    685 	sub	r10,rax
    686 	sbb	r11,rdx
    687 
    688 	add	r10,rbp
    689 	adc	r11,0
    690 
    691 
    692 	xor	rdx,rdx
    693 	add	r8,r12
    694 	adc	r9,r13
    695 	mov	r12,r8
    696 	adc	r10,r14
    697 	adc	r11,r15
    698 	mov	rax,r9
    699 	adc	rdx,0
    700 
    701 
    702 	sub	r8,QWORD[rsi]
    703 	mov	r14,r10
    704 	sbb	r9,QWORD[8+rsi]
    705 	sbb	r10,QWORD[16+rsi]
    706 	mov	r15,r11
    707 	sbb	r11,QWORD[24+rsi]
    708 	sbb	rdx,0
    709 
    710 	cmovc	r8,r12
    711 	cmovnc	rax,r9
    712 	cmovnc	r14,r10
    713 	cmovnc	r15,r11
    714 
    715 	dec	rbx
    716 	jnz	NEAR $L$oop_ord_sqr
    717 
    718 	mov	QWORD[rdi],r8
    719 	mov	QWORD[8+rdi],rax
    720 	pxor	xmm1,xmm1
    721 	mov	QWORD[16+rdi],r14
    722 	pxor	xmm2,xmm2
    723 	mov	QWORD[24+rdi],r15
    724 	pxor	xmm3,xmm3
    725 
    726 	mov	r15,QWORD[rsp]
    727 
    728 	mov	r14,QWORD[8+rsp]
    729 
    730 	mov	r13,QWORD[16+rsp]
    731 
    732 	mov	r12,QWORD[24+rsp]
    733 
    734 	mov	rbx,QWORD[32+rsp]
    735 
    736 	mov	rbp,QWORD[40+rsp]
    737 
    738 	lea	rsp,[48+rsp]
    739 
    740 $L$ord_sqr_epilogue:
    741 	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
    742 	mov	rsi,QWORD[16+rsp]
    743 	DB	0F3h,0C3h		;repret
    744 
    745 $L$SEH_end_ecp_nistz256_ord_sqr_mont:
    746 
    747 
    748 ALIGN	32
    749 ecp_nistz256_ord_mul_montx:
    750 	mov	QWORD[8+rsp],rdi	;WIN64 prologue
    751 	mov	QWORD[16+rsp],rsi
    752 	mov	rax,rsp
    753 $L$SEH_begin_ecp_nistz256_ord_mul_montx:
    754 	mov	rdi,rcx
    755 	mov	rsi,rdx
    756 	mov	rdx,r8
    757 
    758 
    759 
    760 $L$ecp_nistz256_ord_mul_montx:
    761 	push	rbp
    762 
    763 	push	rbx
    764 
    765 	push	r12
    766 
    767 	push	r13
    768 
    769 	push	r14
    770 
    771 	push	r15
    772 
    773 $L$ord_mulx_body:
    774 
    775 	mov	rbx,rdx
    776 	mov	rdx,QWORD[rdx]
    777 	mov	r9,QWORD[rsi]
    778 	mov	r10,QWORD[8+rsi]
    779 	mov	r11,QWORD[16+rsi]
    780 	mov	r12,QWORD[24+rsi]
    781 	lea	rsi,[((-128))+rsi]
    782 	lea	r14,[(($L$ord-128))]
    783 	mov	r15,QWORD[$L$ordK]
    784 
    785 
    786 	mulx	r9,r8,r9
    787 	mulx	r10,rcx,r10
    788 	mulx	r11,rbp,r11
    789 	add	r9,rcx
    790 	mulx	r12,rcx,r12
    791 	mov	rdx,r8
    792 	mulx	rax,rdx,r15
    793 	adc	r10,rbp
    794 	adc	r11,rcx
    795 	adc	r12,0
    796 
    797 
    798 	xor	r13,r13
    799 	mulx	rbp,rcx,QWORD[((0+128))+r14]
    800 	adcx	r8,rcx
    801 	adox	r9,rbp
    802 
    803 	mulx	rbp,rcx,QWORD[((8+128))+r14]
    804 	adcx	r9,rcx
    805 	adox	r10,rbp
    806 
    807 	mulx	rbp,rcx,QWORD[((16+128))+r14]
    808 	adcx	r10,rcx
    809 	adox	r11,rbp
    810 
    811 	mulx	rbp,rcx,QWORD[((24+128))+r14]
    812 	mov	rdx,QWORD[8+rbx]
    813 	adcx	r11,rcx
    814 	adox	r12,rbp
    815 	adcx	r12,r8
    816 	adox	r13,r8
    817 	adc	r13,0
    818 
    819 
    820 	mulx	rbp,rcx,QWORD[((0+128))+rsi]
    821 	adcx	r9,rcx
    822 	adox	r10,rbp
    823 
    824 	mulx	rbp,rcx,QWORD[((8+128))+rsi]
    825 	adcx	r10,rcx
    826 	adox	r11,rbp
    827 
    828 	mulx	rbp,rcx,QWORD[((16+128))+rsi]
    829 	adcx	r11,rcx
    830 	adox	r12,rbp
    831 
    832 	mulx	rbp,rcx,QWORD[((24+128))+rsi]
    833 	mov	rdx,r9
    834 	mulx	rax,rdx,r15
    835 	adcx	r12,rcx
    836 	adox	r13,rbp
    837 
    838 	adcx	r13,r8
    839 	adox	r8,r8
    840 	adc	r8,0
    841 
    842 
    843 	mulx	rbp,rcx,QWORD[((0+128))+r14]
    844 	adcx	r9,rcx
    845 	adox	r10,rbp
    846 
    847 	mulx	rbp,rcx,QWORD[((8+128))+r14]
    848 	adcx	r10,rcx
    849 	adox	r11,rbp
    850 
    851 	mulx	rbp,rcx,QWORD[((16+128))+r14]
    852 	adcx	r11,rcx
    853 	adox	r12,rbp
    854 
    855 	mulx	rbp,rcx,QWORD[((24+128))+r14]
    856 	mov	rdx,QWORD[16+rbx]
    857 	adcx	r12,rcx
    858 	adox	r13,rbp
    859 	adcx	r13,r9
    860 	adox	r8,r9
    861 	adc	r8,0
    862 
    863 
    864 	mulx	rbp,rcx,QWORD[((0+128))+rsi]
    865 	adcx	r10,rcx
    866 	adox	r11,rbp
    867 
    868 	mulx	rbp,rcx,QWORD[((8+128))+rsi]
    869 	adcx	r11,rcx
    870 	adox	r12,rbp
    871 
    872 	mulx	rbp,rcx,QWORD[((16+128))+rsi]
    873 	adcx	r12,rcx
    874 	adox	r13,rbp
    875 
    876 	mulx	rbp,rcx,QWORD[((24+128))+rsi]
    877 	mov	rdx,r10
    878 	mulx	rax,rdx,r15
    879 	adcx	r13,rcx
    880 	adox	r8,rbp
    881 
    882 	adcx	r8,r9
    883 	adox	r9,r9
    884 	adc	r9,0
    885 
    886 
    887 	mulx	rbp,rcx,QWORD[((0+128))+r14]
    888 	adcx	r10,rcx
    889 	adox	r11,rbp
    890 
    891 	mulx	rbp,rcx,QWORD[((8+128))+r14]
    892 	adcx	r11,rcx
    893 	adox	r12,rbp
    894 
    895 	mulx	rbp,rcx,QWORD[((16+128))+r14]
    896 	adcx	r12,rcx
    897 	adox	r13,rbp
    898 
    899 	mulx	rbp,rcx,QWORD[((24+128))+r14]
    900 	mov	rdx,QWORD[24+rbx]
    901 	adcx	r13,rcx
    902 	adox	r8,rbp
    903 	adcx	r8,r10
    904 	adox	r9,r10
    905 	adc	r9,0
    906 
    907 
    908 	mulx	rbp,rcx,QWORD[((0+128))+rsi]
    909 	adcx	r11,rcx
    910 	adox	r12,rbp
    911 
    912 	mulx	rbp,rcx,QWORD[((8+128))+rsi]
    913 	adcx	r12,rcx
    914 	adox	r13,rbp
    915 
    916 	mulx	rbp,rcx,QWORD[((16+128))+rsi]
    917 	adcx	r13,rcx
    918 	adox	r8,rbp
    919 
    920 	mulx	rbp,rcx,QWORD[((24+128))+rsi]
    921 	mov	rdx,r11
    922 	mulx	rax,rdx,r15
    923 	adcx	r8,rcx
    924 	adox	r9,rbp
    925 
    926 	adcx	r9,r10
    927 	adox	r10,r10
    928 	adc	r10,0
    929 
    930 
    931 	mulx	rbp,rcx,QWORD[((0+128))+r14]
    932 	adcx	r11,rcx
    933 	adox	r12,rbp
    934 
    935 	mulx	rbp,rcx,QWORD[((8+128))+r14]
    936 	adcx	r12,rcx
    937 	adox	r13,rbp
    938 
    939 	mulx	rbp,rcx,QWORD[((16+128))+r14]
    940 	adcx	r13,rcx
    941 	adox	r8,rbp
    942 
    943 	mulx	rbp,rcx,QWORD[((24+128))+r14]
    944 	lea	r14,[128+r14]
    945 	mov	rbx,r12
    946 	adcx	r8,rcx
    947 	adox	r9,rbp
    948 	mov	rdx,r13
    949 	adcx	r9,r11
    950 	adox	r10,r11
    951 	adc	r10,0
    952 
    953 
    954 
    955 	mov	rcx,r8
    956 	sub	r12,QWORD[r14]
    957 	sbb	r13,QWORD[8+r14]
    958 	sbb	r8,QWORD[16+r14]
    959 	mov	rbp,r9
    960 	sbb	r9,QWORD[24+r14]
    961 	sbb	r10,0
    962 
    963 	cmovc	r12,rbx
    964 	cmovc	r13,rdx
    965 	cmovc	r8,rcx
    966 	cmovc	r9,rbp
    967 
    968 	mov	QWORD[rdi],r12
    969 	mov	QWORD[8+rdi],r13
    970 	mov	QWORD[16+rdi],r8
    971 	mov	QWORD[24+rdi],r9
    972 
    973 	mov	r15,QWORD[rsp]
    974 
    975 	mov	r14,QWORD[8+rsp]
    976 
    977 	mov	r13,QWORD[16+rsp]
    978 
    979 	mov	r12,QWORD[24+rsp]
    980 
    981 	mov	rbx,QWORD[32+rsp]
    982 
    983 	mov	rbp,QWORD[40+rsp]
    984 
    985 	lea	rsp,[48+rsp]
    986 
    987 $L$ord_mulx_epilogue:
    988 	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
    989 	mov	rsi,QWORD[16+rsp]
    990 	DB	0F3h,0C3h		;repret
    991 
    992 $L$SEH_end_ecp_nistz256_ord_mul_montx:
    993 
    994 
    995 ALIGN	32
    996 ecp_nistz256_ord_sqr_montx:
    997 	mov	QWORD[8+rsp],rdi	;WIN64 prologue
    998 	mov	QWORD[16+rsp],rsi
    999 	mov	rax,rsp
   1000 $L$SEH_begin_ecp_nistz256_ord_sqr_montx:
   1001 	mov	rdi,rcx
   1002 	mov	rsi,rdx
   1003 	mov	rdx,r8
   1004 
   1005 
   1006 
   1007 $L$ecp_nistz256_ord_sqr_montx:
   1008 	push	rbp
   1009 
   1010 	push	rbx
   1011 
   1012 	push	r12
   1013 
   1014 	push	r13
   1015 
   1016 	push	r14
   1017 
   1018 	push	r15
   1019 
   1020 $L$ord_sqrx_body:
   1021 
   1022 	mov	rbx,rdx
   1023 	mov	rdx,QWORD[rsi]
   1024 	mov	r14,QWORD[8+rsi]
   1025 	mov	r15,QWORD[16+rsi]
   1026 	mov	r8,QWORD[24+rsi]
   1027 	lea	rsi,[$L$ord]
   1028 	jmp	NEAR $L$oop_ord_sqrx
   1029 
   1030 ALIGN	32
   1031 $L$oop_ord_sqrx:
   1032 	mulx	r10,r9,r14
   1033 	mulx	r11,rcx,r15
   1034 	mov	rax,rdx
   1035 DB	102,73,15,110,206
   1036 	mulx	r12,rbp,r8
   1037 	mov	rdx,r14
   1038 	add	r10,rcx
   1039 DB	102,73,15,110,215
   1040 	adc	r11,rbp
   1041 	adc	r12,0
   1042 	xor	r13,r13
   1043 
   1044 	mulx	rbp,rcx,r15
   1045 	adcx	r11,rcx
   1046 	adox	r12,rbp
   1047 
   1048 	mulx	rbp,rcx,r8
   1049 	mov	rdx,r15
   1050 	adcx	r12,rcx
   1051 	adox	r13,rbp
   1052 	adc	r13,0
   1053 
   1054 	mulx	r14,rcx,r8
   1055 	mov	rdx,rax
   1056 DB	102,73,15,110,216
   1057 	xor	r15,r15
   1058 	adcx	r9,r9
   1059 	adox	r13,rcx
   1060 	adcx	r10,r10
   1061 	adox	r14,r15
   1062 
   1063 
   1064 	mulx	rbp,r8,rdx
   1065 DB	102,72,15,126,202
   1066 	adcx	r11,r11
   1067 	adox	r9,rbp
   1068 	adcx	r12,r12
   1069 	mulx	rax,rcx,rdx
   1070 DB	102,72,15,126,210
   1071 	adcx	r13,r13
   1072 	adox	r10,rcx
   1073 	adcx	r14,r14
   1074 	mulx	rbp,rcx,rdx
   1075 DB	0x67
   1076 DB	102,72,15,126,218
   1077 	adox	r11,rax
   1078 	adcx	r15,r15
   1079 	adox	r12,rcx
   1080 	adox	r13,rbp
   1081 	mulx	rax,rcx,rdx
   1082 	adox	r14,rcx
   1083 	adox	r15,rax
   1084 
   1085 
   1086 	mov	rdx,r8
   1087 	mulx	rcx,rdx,QWORD[32+rsi]
   1088 
   1089 	xor	rax,rax
   1090 	mulx	rbp,rcx,QWORD[rsi]
   1091 	adcx	r8,rcx
   1092 	adox	r9,rbp
   1093 	mulx	rbp,rcx,QWORD[8+rsi]
   1094 	adcx	r9,rcx
   1095 	adox	r10,rbp
   1096 	mulx	rbp,rcx,QWORD[16+rsi]
   1097 	adcx	r10,rcx
   1098 	adox	r11,rbp
   1099 	mulx	rbp,rcx,QWORD[24+rsi]
   1100 	adcx	r11,rcx
   1101 	adox	r8,rbp
   1102 	adcx	r8,rax
   1103 
   1104 
   1105 	mov	rdx,r9
   1106 	mulx	rcx,rdx,QWORD[32+rsi]
   1107 
   1108 	mulx	rbp,rcx,QWORD[rsi]
   1109 	adox	r9,rcx
   1110 	adcx	r10,rbp
   1111 	mulx	rbp,rcx,QWORD[8+rsi]
   1112 	adox	r10,rcx
   1113 	adcx	r11,rbp
   1114 	mulx	rbp,rcx,QWORD[16+rsi]
   1115 	adox	r11,rcx
   1116 	adcx	r8,rbp
   1117 	mulx	rbp,rcx,QWORD[24+rsi]
   1118 	adox	r8,rcx
   1119 	adcx	r9,rbp
   1120 	adox	r9,rax
   1121 
   1122 
   1123 	mov	rdx,r10
   1124 	mulx	rcx,rdx,QWORD[32+rsi]
   1125 
   1126 	mulx	rbp,rcx,QWORD[rsi]
   1127 	adcx	r10,rcx
   1128 	adox	r11,rbp
   1129 	mulx	rbp,rcx,QWORD[8+rsi]
   1130 	adcx	r11,rcx
   1131 	adox	r8,rbp
   1132 	mulx	rbp,rcx,QWORD[16+rsi]
   1133 	adcx	r8,rcx
   1134 	adox	r9,rbp
   1135 	mulx	rbp,rcx,QWORD[24+rsi]
   1136 	adcx	r9,rcx
   1137 	adox	r10,rbp
   1138 	adcx	r10,rax
   1139 
   1140 
   1141 	mov	rdx,r11
   1142 	mulx	rcx,rdx,QWORD[32+rsi]
   1143 
   1144 	mulx	rbp,rcx,QWORD[rsi]
   1145 	adox	r11,rcx
   1146 	adcx	r8,rbp
   1147 	mulx	rbp,rcx,QWORD[8+rsi]
   1148 	adox	r8,rcx
   1149 	adcx	r9,rbp
   1150 	mulx	rbp,rcx,QWORD[16+rsi]
   1151 	adox	r9,rcx
   1152 	adcx	r10,rbp
   1153 	mulx	rbp,rcx,QWORD[24+rsi]
   1154 	adox	r10,rcx
   1155 	adcx	r11,rbp
   1156 	adox	r11,rax
   1157 
   1158 
   1159 	add	r12,r8
   1160 	adc	r9,r13
   1161 	mov	rdx,r12
   1162 	adc	r10,r14
   1163 	adc	r11,r15
   1164 	mov	r14,r9
   1165 	adc	rax,0
   1166 
   1167 
   1168 	sub	r12,QWORD[rsi]
   1169 	mov	r15,r10
   1170 	sbb	r9,QWORD[8+rsi]
   1171 	sbb	r10,QWORD[16+rsi]
   1172 	mov	r8,r11
   1173 	sbb	r11,QWORD[24+rsi]
   1174 	sbb	rax,0
   1175 
   1176 	cmovnc	rdx,r12
   1177 	cmovnc	r14,r9
   1178 	cmovnc	r15,r10
   1179 	cmovnc	r8,r11
   1180 
   1181 	dec	rbx
   1182 	jnz	NEAR $L$oop_ord_sqrx
   1183 
   1184 	mov	QWORD[rdi],rdx
   1185 	mov	QWORD[8+rdi],r14
   1186 	pxor	xmm1,xmm1
   1187 	mov	QWORD[16+rdi],r15
   1188 	pxor	xmm2,xmm2
   1189 	mov	QWORD[24+rdi],r8
   1190 	pxor	xmm3,xmm3
   1191 
   1192 	mov	r15,QWORD[rsp]
   1193 
   1194 	mov	r14,QWORD[8+rsp]
   1195 
   1196 	mov	r13,QWORD[16+rsp]
   1197 
   1198 	mov	r12,QWORD[24+rsp]
   1199 
   1200 	mov	rbx,QWORD[32+rsp]
   1201 
   1202 	mov	rbp,QWORD[40+rsp]
   1203 
   1204 	lea	rsp,[48+rsp]
   1205 
   1206 $L$ord_sqrx_epilogue:
   1207 	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
   1208 	mov	rsi,QWORD[16+rsp]
   1209 	DB	0F3h,0C3h		;repret
   1210 
   1211 $L$SEH_end_ecp_nistz256_ord_sqr_montx:
   1212 
   1213 
   1214 
   1215 
   1216 
   1217 
   1218 global	ecp_nistz256_mul_mont
   1219 
   1220 ALIGN	32
   1221 ecp_nistz256_mul_mont:
   1222 	mov	QWORD[8+rsp],rdi	;WIN64 prologue
   1223 	mov	QWORD[16+rsp],rsi
   1224 	mov	rax,rsp
   1225 $L$SEH_begin_ecp_nistz256_mul_mont:
   1226 	mov	rdi,rcx
   1227 	mov	rsi,rdx
   1228 	mov	rdx,r8
   1229 
   1230 
   1231 
   1232 	lea	rcx,[OPENSSL_ia32cap_P]
   1233 	mov	rcx,QWORD[8+rcx]
   1234 	and	ecx,0x80100
   1235 $L$mul_mont:
   1236 	push	rbp
   1237 
   1238 	push	rbx
   1239 
   1240 	push	r12
   1241 
   1242 	push	r13
   1243 
   1244 	push	r14
   1245 
   1246 	push	r15
   1247 
   1248 $L$mul_body:
   1249 	cmp	ecx,0x80100
   1250 	je	NEAR $L$mul_montx
   1251 	mov	rbx,rdx
   1252 	mov	rax,QWORD[rdx]
   1253 	mov	r9,QWORD[rsi]
   1254 	mov	r10,QWORD[8+rsi]
   1255 	mov	r11,QWORD[16+rsi]
   1256 	mov	r12,QWORD[24+rsi]
   1257 
   1258 	call	__ecp_nistz256_mul_montq
   1259 	jmp	NEAR $L$mul_mont_done
   1260 
   1261 ALIGN	32
   1262 $L$mul_montx:
   1263 	mov	rbx,rdx
   1264 	mov	rdx,QWORD[rdx]
   1265 	mov	r9,QWORD[rsi]
   1266 	mov	r10,QWORD[8+rsi]
   1267 	mov	r11,QWORD[16+rsi]
   1268 	mov	r12,QWORD[24+rsi]
   1269 	lea	rsi,[((-128))+rsi]
   1270 
   1271 	call	__ecp_nistz256_mul_montx
   1272 $L$mul_mont_done:
   1273 	mov	r15,QWORD[rsp]
   1274 
   1275 	mov	r14,QWORD[8+rsp]
   1276 
   1277 	mov	r13,QWORD[16+rsp]
   1278 
   1279 	mov	r12,QWORD[24+rsp]
   1280 
   1281 	mov	rbx,QWORD[32+rsp]
   1282 
   1283 	mov	rbp,QWORD[40+rsp]
   1284 
   1285 	lea	rsp,[48+rsp]
   1286 
   1287 $L$mul_epilogue:
   1288 	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
   1289 	mov	rsi,QWORD[16+rsp]
   1290 	DB	0F3h,0C3h		;repret
   1291 
   1292 $L$SEH_end_ecp_nistz256_mul_mont:
   1293 
   1294 
   1295 ALIGN	32
   1296 __ecp_nistz256_mul_montq:
   1297 
   1298 
   1299 
   1300 	mov	rbp,rax
   1301 	mul	r9
   1302 	mov	r14,QWORD[(($L$poly+8))]
   1303 	mov	r8,rax
   1304 	mov	rax,rbp
   1305 	mov	r9,rdx
   1306 
   1307 	mul	r10
   1308 	mov	r15,QWORD[(($L$poly+24))]
   1309 	add	r9,rax
   1310 	mov	rax,rbp
   1311 	adc	rdx,0
   1312 	mov	r10,rdx
   1313 
   1314 	mul	r11
   1315 	add	r10,rax
   1316 	mov	rax,rbp
   1317 	adc	rdx,0
   1318 	mov	r11,rdx
   1319 
   1320 	mul	r12
   1321 	add	r11,rax
   1322 	mov	rax,r8
   1323 	adc	rdx,0
   1324 	xor	r13,r13
   1325 	mov	r12,rdx
   1326 
   1327 
   1328 
   1329 
   1330 
   1331 
   1332 
   1333 
   1334 
   1335 
   1336 	mov	rbp,r8
   1337 	shl	r8,32
   1338 	mul	r15
   1339 	shr	rbp,32
   1340 	add	r9,r8
   1341 	adc	r10,rbp
   1342 	adc	r11,rax
   1343 	mov	rax,QWORD[8+rbx]
   1344 	adc	r12,rdx
   1345 	adc	r13,0
   1346 	xor	r8,r8
   1347 
   1348 
   1349 
   1350 	mov	rbp,rax
   1351 	mul	QWORD[rsi]
   1352 	add	r9,rax
   1353 	mov	rax,rbp
   1354 	adc	rdx,0
   1355 	mov	rcx,rdx
   1356 
   1357 	mul	QWORD[8+rsi]
   1358 	add	r10,rcx
   1359 	adc	rdx,0
   1360 	add	r10,rax
   1361 	mov	rax,rbp
   1362 	adc	rdx,0
   1363 	mov	rcx,rdx
   1364 
   1365 	mul	QWORD[16+rsi]
   1366 	add	r11,rcx
   1367 	adc	rdx,0
   1368 	add	r11,rax
   1369 	mov	rax,rbp
   1370 	adc	rdx,0
   1371 	mov	rcx,rdx
   1372 
   1373 	mul	QWORD[24+rsi]
   1374 	add	r12,rcx
   1375 	adc	rdx,0
   1376 	add	r12,rax
   1377 	mov	rax,r9
   1378 	adc	r13,rdx
   1379 	adc	r8,0
   1380 
   1381 
   1382 
   1383 	mov	rbp,r9
   1384 	shl	r9,32
   1385 	mul	r15
   1386 	shr	rbp,32
   1387 	add	r10,r9
   1388 	adc	r11,rbp
   1389 	adc	r12,rax
   1390 	mov	rax,QWORD[16+rbx]
   1391 	adc	r13,rdx
   1392 	adc	r8,0
   1393 	xor	r9,r9
   1394 
   1395 
   1396 
   1397 	mov	rbp,rax
   1398 	mul	QWORD[rsi]
   1399 	add	r10,rax
   1400 	mov	rax,rbp
   1401 	adc	rdx,0
   1402 	mov	rcx,rdx
   1403 
   1404 	mul	QWORD[8+rsi]
   1405 	add	r11,rcx
   1406 	adc	rdx,0
   1407 	add	r11,rax
   1408 	mov	rax,rbp
   1409 	adc	rdx,0
   1410 	mov	rcx,rdx
   1411 
   1412 	mul	QWORD[16+rsi]
   1413 	add	r12,rcx
   1414 	adc	rdx,0
   1415 	add	r12,rax
   1416 	mov	rax,rbp
   1417 	adc	rdx,0
   1418 	mov	rcx,rdx
   1419 
   1420 	mul	QWORD[24+rsi]
   1421 	add	r13,rcx
   1422 	adc	rdx,0
   1423 	add	r13,rax
   1424 	mov	rax,r10
   1425 	adc	r8,rdx
   1426 	adc	r9,0
   1427 
   1428 
   1429 
   1430 	mov	rbp,r10
   1431 	shl	r10,32
   1432 	mul	r15
   1433 	shr	rbp,32
   1434 	add	r11,r10
   1435 	adc	r12,rbp
   1436 	adc	r13,rax
   1437 	mov	rax,QWORD[24+rbx]
   1438 	adc	r8,rdx
   1439 	adc	r9,0
   1440 	xor	r10,r10
   1441 
   1442 
   1443 
   1444 	mov	rbp,rax
   1445 	mul	QWORD[rsi]
   1446 	add	r11,rax
   1447 	mov	rax,rbp
   1448 	adc	rdx,0
   1449 	mov	rcx,rdx
   1450 
   1451 	mul	QWORD[8+rsi]
   1452 	add	r12,rcx
   1453 	adc	rdx,0
   1454 	add	r12,rax
   1455 	mov	rax,rbp
   1456 	adc	rdx,0
   1457 	mov	rcx,rdx
   1458 
   1459 	mul	QWORD[16+rsi]
   1460 	add	r13,rcx
   1461 	adc	rdx,0
   1462 	add	r13,rax
   1463 	mov	rax,rbp
   1464 	adc	rdx,0
   1465 	mov	rcx,rdx
   1466 
   1467 	mul	QWORD[24+rsi]
   1468 	add	r8,rcx
   1469 	adc	rdx,0
   1470 	add	r8,rax
   1471 	mov	rax,r11
   1472 	adc	r9,rdx
   1473 	adc	r10,0
   1474 
   1475 
   1476 
   1477 	mov	rbp,r11
   1478 	shl	r11,32
   1479 	mul	r15
   1480 	shr	rbp,32
   1481 	add	r12,r11
   1482 	adc	r13,rbp
   1483 	mov	rcx,r12
   1484 	adc	r8,rax
   1485 	adc	r9,rdx
   1486 	mov	rbp,r13
   1487 	adc	r10,0
   1488 
   1489 
   1490 
   1491 	sub	r12,-1
   1492 	mov	rbx,r8
   1493 	sbb	r13,r14
   1494 	sbb	r8,0
   1495 	mov	rdx,r9
   1496 	sbb	r9,r15
   1497 	sbb	r10,0
   1498 
   1499 	cmovc	r12,rcx
   1500 	cmovc	r13,rbp
   1501 	mov	QWORD[rdi],r12
   1502 	cmovc	r8,rbx
   1503 	mov	QWORD[8+rdi],r13
   1504 	cmovc	r9,rdx
   1505 	mov	QWORD[16+rdi],r8
   1506 	mov	QWORD[24+rdi],r9
   1507 
   1508 	DB	0F3h,0C3h		;repret
   1509 
   1510 
   1511 
   1512 
   1513 
   1514 
   1515 
   1516 
   1517 
   1518 
   1519 global	ecp_nistz256_sqr_mont
   1520 
   1521 ALIGN	32
   1522 ecp_nistz256_sqr_mont:
   1523 	mov	QWORD[8+rsp],rdi	;WIN64 prologue
   1524 	mov	QWORD[16+rsp],rsi
   1525 	mov	rax,rsp
   1526 $L$SEH_begin_ecp_nistz256_sqr_mont:
   1527 	mov	rdi,rcx
   1528 	mov	rsi,rdx
   1529 
   1530 
   1531 
   1532 	lea	rcx,[OPENSSL_ia32cap_P]
   1533 	mov	rcx,QWORD[8+rcx]
   1534 	and	ecx,0x80100
   1535 	push	rbp
   1536 
   1537 	push	rbx
   1538 
   1539 	push	r12
   1540 
   1541 	push	r13
   1542 
   1543 	push	r14
   1544 
   1545 	push	r15
   1546 
   1547 $L$sqr_body:
   1548 	cmp	ecx,0x80100
   1549 	je	NEAR $L$sqr_montx
   1550 	mov	rax,QWORD[rsi]
   1551 	mov	r14,QWORD[8+rsi]
   1552 	mov	r15,QWORD[16+rsi]
   1553 	mov	r8,QWORD[24+rsi]
   1554 
   1555 	call	__ecp_nistz256_sqr_montq
   1556 	jmp	NEAR $L$sqr_mont_done
   1557 
   1558 ALIGN	32
   1559 $L$sqr_montx:
   1560 	mov	rdx,QWORD[rsi]
   1561 	mov	r14,QWORD[8+rsi]
   1562 	mov	r15,QWORD[16+rsi]
   1563 	mov	r8,QWORD[24+rsi]
   1564 	lea	rsi,[((-128))+rsi]
   1565 
   1566 	call	__ecp_nistz256_sqr_montx
   1567 $L$sqr_mont_done:
   1568 	mov	r15,QWORD[rsp]
   1569 
   1570 	mov	r14,QWORD[8+rsp]
   1571 
   1572 	mov	r13,QWORD[16+rsp]
   1573 
   1574 	mov	r12,QWORD[24+rsp]
   1575 
   1576 	mov	rbx,QWORD[32+rsp]
   1577 
   1578 	mov	rbp,QWORD[40+rsp]
   1579 
   1580 	lea	rsp,[48+rsp]
   1581 
   1582 $L$sqr_epilogue:
   1583 	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
   1584 	mov	rsi,QWORD[16+rsp]
   1585 	DB	0F3h,0C3h		;repret
   1586 
   1587 $L$SEH_end_ecp_nistz256_sqr_mont:
   1588 
   1589 
   1590 ALIGN	32
   1591 __ecp_nistz256_sqr_montq:
   1592 
   1593 	mov	r13,rax
   1594 	mul	r14
   1595 	mov	r9,rax
   1596 	mov	rax,r15
   1597 	mov	r10,rdx
   1598 
   1599 	mul	r13
   1600 	add	r10,rax
   1601 	mov	rax,r8
   1602 	adc	rdx,0
   1603 	mov	r11,rdx
   1604 
   1605 	mul	r13
   1606 	add	r11,rax
   1607 	mov	rax,r15
   1608 	adc	rdx,0
   1609 	mov	r12,rdx
   1610 
   1611 
   1612 	mul	r14
   1613 	add	r11,rax
   1614 	mov	rax,r8
   1615 	adc	rdx,0
   1616 	mov	rbp,rdx
   1617 
   1618 	mul	r14
   1619 	add	r12,rax
   1620 	mov	rax,r8
   1621 	adc	rdx,0
   1622 	add	r12,rbp
   1623 	mov	r13,rdx
   1624 	adc	r13,0
   1625 
   1626 
   1627 	mul	r15
   1628 	xor	r15,r15
   1629 	add	r13,rax
   1630 	mov	rax,QWORD[rsi]
   1631 	mov	r14,rdx
   1632 	adc	r14,0
   1633 
   1634 	add	r9,r9
   1635 	adc	r10,r10
   1636 	adc	r11,r11
   1637 	adc	r12,r12
   1638 	adc	r13,r13
   1639 	adc	r14,r14
   1640 	adc	r15,0
   1641 
   1642 	mul	rax
   1643 	mov	r8,rax
   1644 	mov	rax,QWORD[8+rsi]
   1645 	mov	rcx,rdx
   1646 
   1647 	mul	rax
   1648 	add	r9,rcx
   1649 	adc	r10,rax
   1650 	mov	rax,QWORD[16+rsi]
   1651 	adc	rdx,0
   1652 	mov	rcx,rdx
   1653 
   1654 	mul	rax
   1655 	add	r11,rcx
   1656 	adc	r12,rax
   1657 	mov	rax,QWORD[24+rsi]
   1658 	adc	rdx,0
   1659 	mov	rcx,rdx
   1660 
   1661 	mul	rax
   1662 	add	r13,rcx
   1663 	adc	r14,rax
   1664 	mov	rax,r8
   1665 	adc	r15,rdx
   1666 
   1667 	mov	rsi,QWORD[(($L$poly+8))]
   1668 	mov	rbp,QWORD[(($L$poly+24))]
   1669 
   1670 
   1671 
   1672 
   1673 	mov	rcx,r8
   1674 	shl	r8,32
   1675 	mul	rbp
   1676 	shr	rcx,32
   1677 	add	r9,r8
   1678 	adc	r10,rcx
   1679 	adc	r11,rax
   1680 	mov	rax,r9
   1681 	adc	rdx,0
   1682 
   1683 
   1684 
   1685 	mov	rcx,r9
   1686 	shl	r9,32
   1687 	mov	r8,rdx
   1688 	mul	rbp
   1689 	shr	rcx,32
   1690 	add	r10,r9
   1691 	adc	r11,rcx
   1692 	adc	r8,rax
   1693 	mov	rax,r10
   1694 	adc	rdx,0
   1695 
   1696 
   1697 
   1698 	mov	rcx,r10
   1699 	shl	r10,32
   1700 	mov	r9,rdx
   1701 	mul	rbp
   1702 	shr	rcx,32
   1703 	add	r11,r10
   1704 	adc	r8,rcx
   1705 	adc	r9,rax
   1706 	mov	rax,r11
   1707 	adc	rdx,0
   1708 
   1709 
   1710 
   1711 	mov	rcx,r11
   1712 	shl	r11,32
   1713 	mov	r10,rdx
   1714 	mul	rbp
   1715 	shr	rcx,32
   1716 	add	r8,r11
   1717 	adc	r9,rcx
   1718 	adc	r10,rax
   1719 	adc	rdx,0
   1720 	xor	r11,r11
   1721 
   1722 
   1723 
   1724 	add	r12,r8
   1725 	adc	r13,r9
   1726 	mov	r8,r12
   1727 	adc	r14,r10
   1728 	adc	r15,rdx
   1729 	mov	r9,r13
   1730 	adc	r11,0
   1731 
   1732 	sub	r12,-1
   1733 	mov	r10,r14
   1734 	sbb	r13,rsi
   1735 	sbb	r14,0
   1736 	mov	rcx,r15
   1737 	sbb	r15,rbp
   1738 	sbb	r11,0
   1739 
   1740 	cmovc	r12,r8
   1741 	cmovc	r13,r9
   1742 	mov	QWORD[rdi],r12
   1743 	cmovc	r14,r10
   1744 	mov	QWORD[8+rdi],r13
   1745 	cmovc	r15,rcx
   1746 	mov	QWORD[16+rdi],r14
   1747 	mov	QWORD[24+rdi],r15
   1748 
   1749 	DB	0F3h,0C3h		;repret
   1750 
   1751 
   1752 
   1753 ALIGN	32
   1754 __ecp_nistz256_mul_montx:
   1755 
   1756 
   1757 
   1758 	mulx	r9,r8,r9
   1759 	mulx	r10,rcx,r10
   1760 	mov	r14,32
   1761 	xor	r13,r13
   1762 	mulx	r11,rbp,r11
   1763 	mov	r15,QWORD[(($L$poly+24))]
   1764 	adc	r9,rcx
   1765 	mulx	r12,rcx,r12
   1766 	mov	rdx,r8
   1767 	adc	r10,rbp
   1768 	shlx	rbp,r8,r14
   1769 	adc	r11,rcx
   1770 	shrx	rcx,r8,r14
   1771 	adc	r12,0
   1772 
   1773 
   1774 
   1775 	add	r9,rbp
   1776 	adc	r10,rcx
   1777 
   1778 	mulx	rbp,rcx,r15
   1779 	mov	rdx,QWORD[8+rbx]
   1780 	adc	r11,rcx
   1781 	adc	r12,rbp
   1782 	adc	r13,0
   1783 	xor	r8,r8
   1784 
   1785 
   1786 
   1787 	mulx	rbp,rcx,QWORD[((0+128))+rsi]
   1788 	adcx	r9,rcx
   1789 	adox	r10,rbp
   1790 
   1791 	mulx	rbp,rcx,QWORD[((8+128))+rsi]
   1792 	adcx	r10,rcx
   1793 	adox	r11,rbp
   1794 
   1795 	mulx	rbp,rcx,QWORD[((16+128))+rsi]
   1796 	adcx	r11,rcx
   1797 	adox	r12,rbp
   1798 
   1799 	mulx	rbp,rcx,QWORD[((24+128))+rsi]
   1800 	mov	rdx,r9
   1801 	adcx	r12,rcx
   1802 	shlx	rcx,r9,r14
   1803 	adox	r13,rbp
   1804 	shrx	rbp,r9,r14
   1805 
   1806 	adcx	r13,r8
   1807 	adox	r8,r8
   1808 	adc	r8,0
   1809 
   1810 
   1811 
   1812 	add	r10,rcx
   1813 	adc	r11,rbp
   1814 
   1815 	mulx	rbp,rcx,r15
   1816 	mov	rdx,QWORD[16+rbx]
   1817 	adc	r12,rcx
   1818 	adc	r13,rbp
   1819 	adc	r8,0
   1820 	xor	r9,r9
   1821 
   1822 
   1823 
   1824 	mulx	rbp,rcx,QWORD[((0+128))+rsi]
   1825 	adcx	r10,rcx
   1826 	adox	r11,rbp
   1827 
   1828 	mulx	rbp,rcx,QWORD[((8+128))+rsi]
   1829 	adcx	r11,rcx
   1830 	adox	r12,rbp
   1831 
   1832 	mulx	rbp,rcx,QWORD[((16+128))+rsi]
   1833 	adcx	r12,rcx
   1834 	adox	r13,rbp
   1835 
   1836 	mulx	rbp,rcx,QWORD[((24+128))+rsi]
   1837 	mov	rdx,r10
   1838 	adcx	r13,rcx
   1839 	shlx	rcx,r10,r14
   1840 	adox	r8,rbp
   1841 	shrx	rbp,r10,r14
   1842 
   1843 	adcx	r8,r9
   1844 	adox	r9,r9
   1845 	adc	r9,0
   1846 
   1847 
   1848 
   1849 	add	r11,rcx
   1850 	adc	r12,rbp
   1851 
   1852 	mulx	rbp,rcx,r15
   1853 	mov	rdx,QWORD[24+rbx]
   1854 	adc	r13,rcx
   1855 	adc	r8,rbp
   1856 	adc	r9,0
   1857 	xor	r10,r10
   1858 
   1859 
   1860 
   1861 	mulx	rbp,rcx,QWORD[((0+128))+rsi]
   1862 	adcx	r11,rcx
   1863 	adox	r12,rbp
   1864 
   1865 	mulx	rbp,rcx,QWORD[((8+128))+rsi]
   1866 	adcx	r12,rcx
   1867 	adox	r13,rbp
   1868 
   1869 	mulx	rbp,rcx,QWORD[((16+128))+rsi]
   1870 	adcx	r13,rcx
   1871 	adox	r8,rbp
   1872 
   1873 	mulx	rbp,rcx,QWORD[((24+128))+rsi]
   1874 	mov	rdx,r11
   1875 	adcx	r8,rcx
   1876 	shlx	rcx,r11,r14
   1877 	adox	r9,rbp
   1878 	shrx	rbp,r11,r14
   1879 
   1880 	adcx	r9,r10
   1881 	adox	r10,r10
   1882 	adc	r10,0
   1883 
   1884 
   1885 
   1886 	add	r12,rcx
   1887 	adc	r13,rbp
   1888 
   1889 	mulx	rbp,rcx,r15
   1890 	mov	rbx,r12
   1891 	mov	r14,QWORD[(($L$poly+8))]
   1892 	adc	r8,rcx
   1893 	mov	rdx,r13
   1894 	adc	r9,rbp
   1895 	adc	r10,0
   1896 
   1897 
   1898 
   1899 	xor	eax,eax
   1900 	mov	rcx,r8
   1901 	sbb	r12,-1
   1902 	sbb	r13,r14
   1903 	sbb	r8,0
   1904 	mov	rbp,r9
   1905 	sbb	r9,r15
   1906 	sbb	r10,0
   1907 
   1908 	cmovc	r12,rbx
   1909 	cmovc	r13,rdx
   1910 	mov	QWORD[rdi],r12
   1911 	cmovc	r8,rcx
   1912 	mov	QWORD[8+rdi],r13
   1913 	cmovc	r9,rbp
   1914 	mov	QWORD[16+rdi],r8
   1915 	mov	QWORD[24+rdi],r9
   1916 
   1917 	DB	0F3h,0C3h		;repret
   1918 
   1919 
   1920 
   1921 
   1922 ALIGN	32
   1923 __ecp_nistz256_sqr_montx:
   1924 
   1925 	mulx	r10,r9,r14
   1926 	mulx	r11,rcx,r15
   1927 	xor	eax,eax
   1928 	adc	r10,rcx
   1929 	mulx	r12,rbp,r8
   1930 	mov	rdx,r14
   1931 	adc	r11,rbp
   1932 	adc	r12,0
   1933 	xor	r13,r13
   1934 
   1935 
   1936 	mulx	rbp,rcx,r15
   1937 	adcx	r11,rcx
   1938 	adox	r12,rbp
   1939 
   1940 	mulx	rbp,rcx,r8
   1941 	mov	rdx,r15
   1942 	adcx	r12,rcx
   1943 	adox	r13,rbp
   1944 	adc	r13,0
   1945 
   1946 
   1947 	mulx	r14,rcx,r8
   1948 	mov	rdx,QWORD[((0+128))+rsi]
   1949 	xor	r15,r15
   1950 	adcx	r9,r9
   1951 	adox	r13,rcx
   1952 	adcx	r10,r10
   1953 	adox	r14,r15
   1954 
   1955 	mulx	rbp,r8,rdx
   1956 	mov	rdx,QWORD[((8+128))+rsi]
   1957 	adcx	r11,r11
   1958 	adox	r9,rbp
   1959 	adcx	r12,r12
   1960 	mulx	rax,rcx,rdx
   1961 	mov	rdx,QWORD[((16+128))+rsi]
   1962 	adcx	r13,r13
   1963 	adox	r10,rcx
   1964 	adcx	r14,r14
   1965 DB	0x67
   1966 	mulx	rbp,rcx,rdx
   1967 	mov	rdx,QWORD[((24+128))+rsi]
   1968 	adox	r11,rax
   1969 	adcx	r15,r15
   1970 	adox	r12,rcx
   1971 	mov	rsi,32
   1972 	adox	r13,rbp
   1973 DB	0x67,0x67
   1974 	mulx	rax,rcx,rdx
   1975 	mov	rdx,QWORD[(($L$poly+24))]
   1976 	adox	r14,rcx
   1977 	shlx	rcx,r8,rsi
   1978 	adox	r15,rax
   1979 	shrx	rax,r8,rsi
   1980 	mov	rbp,rdx
   1981 
   1982 
   1983 	add	r9,rcx
   1984 	adc	r10,rax
   1985 
   1986 	mulx	r8,rcx,r8
   1987 	adc	r11,rcx
   1988 	shlx	rcx,r9,rsi
   1989 	adc	r8,0
   1990 	shrx	rax,r9,rsi
   1991 
   1992 
   1993 	add	r10,rcx
   1994 	adc	r11,rax
   1995 
   1996 	mulx	r9,rcx,r9
   1997 	adc	r8,rcx
   1998 	shlx	rcx,r10,rsi
   1999 	adc	r9,0
   2000 	shrx	rax,r10,rsi
   2001 
   2002 
   2003 	add	r11,rcx
   2004 	adc	r8,rax
   2005 
   2006 	mulx	r10,rcx,r10
   2007 	adc	r9,rcx
   2008 	shlx	rcx,r11,rsi
   2009 	adc	r10,0
   2010 	shrx	rax,r11,rsi
   2011 
   2012 
   2013 	add	r8,rcx
   2014 	adc	r9,rax
   2015 
   2016 	mulx	r11,rcx,r11
   2017 	adc	r10,rcx
   2018 	adc	r11,0
   2019 
   2020 	xor	rdx,rdx
   2021 	add	r12,r8
   2022 	mov	rsi,QWORD[(($L$poly+8))]
   2023 	adc	r13,r9
   2024 	mov	r8,r12
   2025 	adc	r14,r10
   2026 	adc	r15,r11
   2027 	mov	r9,r13
   2028 	adc	rdx,0
   2029 
   2030 	sub	r12,-1
   2031 	mov	r10,r14
   2032 	sbb	r13,rsi
   2033 	sbb	r14,0
   2034 	mov	r11,r15
   2035 	sbb	r15,rbp
   2036 	sbb	rdx,0
   2037 
   2038 	cmovc	r12,r8
   2039 	cmovc	r13,r9
   2040 	mov	QWORD[rdi],r12
   2041 	cmovc	r14,r10
   2042 	mov	QWORD[8+rdi],r13
   2043 	cmovc	r15,r11
   2044 	mov	QWORD[16+rdi],r14
   2045 	mov	QWORD[24+rdi],r15
   2046 
   2047 	DB	0F3h,0C3h		;repret
   2048 
   2049 
   2050 
   2051 
   2052 global	ecp_nistz256_select_w5
   2053 
   2054 ALIGN	32
   2055 ecp_nistz256_select_w5:
   2056 
   2057 	lea	rax,[OPENSSL_ia32cap_P]
   2058 	mov	rax,QWORD[8+rax]
   2059 	test	eax,32
   2060 	jnz	NEAR $L$avx2_select_w5
   2061 	lea	rax,[((-136))+rsp]
   2062 $L$SEH_begin_ecp_nistz256_select_w5:
   2063 DB	0x48,0x8d,0x60,0xe0
   2064 DB	0x0f,0x29,0x70,0xe0
   2065 DB	0x0f,0x29,0x78,0xf0
   2066 DB	0x44,0x0f,0x29,0x00
   2067 DB	0x44,0x0f,0x29,0x48,0x10
   2068 DB	0x44,0x0f,0x29,0x50,0x20
   2069 DB	0x44,0x0f,0x29,0x58,0x30
   2070 DB	0x44,0x0f,0x29,0x60,0x40
   2071 DB	0x44,0x0f,0x29,0x68,0x50
   2072 DB	0x44,0x0f,0x29,0x70,0x60
   2073 DB	0x44,0x0f,0x29,0x78,0x70
   2074 	movdqa	xmm0,XMMWORD[$L$One]
   2075 	movd	xmm1,r8d
   2076 
   2077 	pxor	xmm2,xmm2
   2078 	pxor	xmm3,xmm3
   2079 	pxor	xmm4,xmm4
   2080 	pxor	xmm5,xmm5
   2081 	pxor	xmm6,xmm6
   2082 	pxor	xmm7,xmm7
   2083 
   2084 	movdqa	xmm8,xmm0
   2085 	pshufd	xmm1,xmm1,0
   2086 
   2087 	mov	rax,16
   2088 $L$select_loop_sse_w5:
   2089 
   2090 	movdqa	xmm15,xmm8
   2091 	paddd	xmm8,xmm0
   2092 	pcmpeqd	xmm15,xmm1
   2093 
   2094 	movdqa	xmm9,XMMWORD[rdx]
   2095 	movdqa	xmm10,XMMWORD[16+rdx]
   2096 	movdqa	xmm11,XMMWORD[32+rdx]
   2097 	movdqa	xmm12,XMMWORD[48+rdx]
   2098 	movdqa	xmm13,XMMWORD[64+rdx]
   2099 	movdqa	xmm14,XMMWORD[80+rdx]
   2100 	lea	rdx,[96+rdx]
   2101 
   2102 	pand	xmm9,xmm15
   2103 	pand	xmm10,xmm15
   2104 	por	xmm2,xmm9
   2105 	pand	xmm11,xmm15
   2106 	por	xmm3,xmm10
   2107 	pand	xmm12,xmm15
   2108 	por	xmm4,xmm11
   2109 	pand	xmm13,xmm15
   2110 	por	xmm5,xmm12
   2111 	pand	xmm14,xmm15
   2112 	por	xmm6,xmm13
   2113 	por	xmm7,xmm14
   2114 
   2115 	dec	rax
   2116 	jnz	NEAR $L$select_loop_sse_w5
   2117 
   2118 	movdqu	XMMWORD[rcx],xmm2
   2119 	movdqu	XMMWORD[16+rcx],xmm3
   2120 	movdqu	XMMWORD[32+rcx],xmm4
   2121 	movdqu	XMMWORD[48+rcx],xmm5
   2122 	movdqu	XMMWORD[64+rcx],xmm6
   2123 	movdqu	XMMWORD[80+rcx],xmm7
   2124 	movaps	xmm6,XMMWORD[rsp]
   2125 	movaps	xmm7,XMMWORD[16+rsp]
   2126 	movaps	xmm8,XMMWORD[32+rsp]
   2127 	movaps	xmm9,XMMWORD[48+rsp]
   2128 	movaps	xmm10,XMMWORD[64+rsp]
   2129 	movaps	xmm11,XMMWORD[80+rsp]
   2130 	movaps	xmm12,XMMWORD[96+rsp]
   2131 	movaps	xmm13,XMMWORD[112+rsp]
   2132 	movaps	xmm14,XMMWORD[128+rsp]
   2133 	movaps	xmm15,XMMWORD[144+rsp]
   2134 	lea	rsp,[168+rsp]
   2135 	DB	0F3h,0C3h		;repret
   2136 
   2137 $L$SEH_end_ecp_nistz256_select_w5:
   2138 
   2139 
   2140 
   2141 
   2142 global	ecp_nistz256_select_w7
   2143 
   2144 ALIGN	32
   2145 ecp_nistz256_select_w7:
   2146 
   2147 	lea	rax,[OPENSSL_ia32cap_P]
   2148 	mov	rax,QWORD[8+rax]
   2149 	test	eax,32
   2150 	jnz	NEAR $L$avx2_select_w7
   2151 	lea	rax,[((-136))+rsp]
   2152 $L$SEH_begin_ecp_nistz256_select_w7:
   2153 DB	0x48,0x8d,0x60,0xe0
   2154 DB	0x0f,0x29,0x70,0xe0
   2155 DB	0x0f,0x29,0x78,0xf0
   2156 DB	0x44,0x0f,0x29,0x00
   2157 DB	0x44,0x0f,0x29,0x48,0x10
   2158 DB	0x44,0x0f,0x29,0x50,0x20
   2159 DB	0x44,0x0f,0x29,0x58,0x30
   2160 DB	0x44,0x0f,0x29,0x60,0x40
   2161 DB	0x44,0x0f,0x29,0x68,0x50
   2162 DB	0x44,0x0f,0x29,0x70,0x60
   2163 DB	0x44,0x0f,0x29,0x78,0x70
   2164 	movdqa	xmm8,XMMWORD[$L$One]
   2165 	movd	xmm1,r8d
   2166 
   2167 	pxor	xmm2,xmm2
   2168 	pxor	xmm3,xmm3
   2169 	pxor	xmm4,xmm4
   2170 	pxor	xmm5,xmm5
   2171 
   2172 	movdqa	xmm0,xmm8
   2173 	pshufd	xmm1,xmm1,0
   2174 	mov	rax,64
   2175 
   2176 $L$select_loop_sse_w7:
   2177 	movdqa	xmm15,xmm8
   2178 	paddd	xmm8,xmm0
   2179 	movdqa	xmm9,XMMWORD[rdx]
   2180 	movdqa	xmm10,XMMWORD[16+rdx]
   2181 	pcmpeqd	xmm15,xmm1
   2182 	movdqa	xmm11,XMMWORD[32+rdx]
   2183 	movdqa	xmm12,XMMWORD[48+rdx]
   2184 	lea	rdx,[64+rdx]
   2185 
   2186 	pand	xmm9,xmm15
   2187 	pand	xmm10,xmm15
   2188 	por	xmm2,xmm9
   2189 	pand	xmm11,xmm15
   2190 	por	xmm3,xmm10
   2191 	pand	xmm12,xmm15
   2192 	por	xmm4,xmm11
   2193 	prefetcht0	[255+rdx]
   2194 	por	xmm5,xmm12
   2195 
   2196 	dec	rax
   2197 	jnz	NEAR $L$select_loop_sse_w7
   2198 
   2199 	movdqu	XMMWORD[rcx],xmm2
   2200 	movdqu	XMMWORD[16+rcx],xmm3
   2201 	movdqu	XMMWORD[32+rcx],xmm4
   2202 	movdqu	XMMWORD[48+rcx],xmm5
   2203 	movaps	xmm6,XMMWORD[rsp]
   2204 	movaps	xmm7,XMMWORD[16+rsp]
   2205 	movaps	xmm8,XMMWORD[32+rsp]
   2206 	movaps	xmm9,XMMWORD[48+rsp]
   2207 	movaps	xmm10,XMMWORD[64+rsp]
   2208 	movaps	xmm11,XMMWORD[80+rsp]
   2209 	movaps	xmm12,XMMWORD[96+rsp]
   2210 	movaps	xmm13,XMMWORD[112+rsp]
   2211 	movaps	xmm14,XMMWORD[128+rsp]
   2212 	movaps	xmm15,XMMWORD[144+rsp]
   2213 	lea	rsp,[168+rsp]
   2214 	DB	0F3h,0C3h		;repret
   2215 
   2216 $L$SEH_end_ecp_nistz256_select_w7:
   2217 
   2218 
   2219 
   2220 
   2221 ALIGN	32
   2222 ecp_nistz256_avx2_select_w5:
   2223 
   2224 $L$avx2_select_w5:
   2225 	vzeroupper
   2226 	lea	rax,[((-136))+rsp]
   2227 	mov	r11,rsp
   2228 $L$SEH_begin_ecp_nistz256_avx2_select_w5:
   2229 DB	0x48,0x8d,0x60,0xe0
   2230 DB	0xc5,0xf8,0x29,0x70,0xe0
   2231 DB	0xc5,0xf8,0x29,0x78,0xf0
   2232 DB	0xc5,0x78,0x29,0x40,0x00
   2233 DB	0xc5,0x78,0x29,0x48,0x10
   2234 DB	0xc5,0x78,0x29,0x50,0x20
   2235 DB	0xc5,0x78,0x29,0x58,0x30
   2236 DB	0xc5,0x78,0x29,0x60,0x40
   2237 DB	0xc5,0x78,0x29,0x68,0x50
   2238 DB	0xc5,0x78,0x29,0x70,0x60
   2239 DB	0xc5,0x78,0x29,0x78,0x70
   2240 	vmovdqa	ymm0,YMMWORD[$L$Two]
   2241 
   2242 	vpxor	ymm2,ymm2,ymm2
   2243 	vpxor	ymm3,ymm3,ymm3
   2244 	vpxor	ymm4,ymm4,ymm4
   2245 
   2246 	vmovdqa	ymm5,YMMWORD[$L$One]
   2247 	vmovdqa	ymm10,YMMWORD[$L$Two]
   2248 
   2249 	vmovd	xmm1,r8d
   2250 	vpermd	ymm1,ymm2,ymm1
   2251 
   2252 	mov	rax,8
   2253 $L$select_loop_avx2_w5:
   2254 
   2255 	vmovdqa	ymm6,YMMWORD[rdx]
   2256 	vmovdqa	ymm7,YMMWORD[32+rdx]
   2257 	vmovdqa	ymm8,YMMWORD[64+rdx]
   2258 
   2259 	vmovdqa	ymm11,YMMWORD[96+rdx]
   2260 	vmovdqa	ymm12,YMMWORD[128+rdx]
   2261 	vmovdqa	ymm13,YMMWORD[160+rdx]
   2262 
   2263 	vpcmpeqd	ymm9,ymm5,ymm1
   2264 	vpcmpeqd	ymm14,ymm10,ymm1
   2265 
   2266 	vpaddd	ymm5,ymm5,ymm0
   2267 	vpaddd	ymm10,ymm10,ymm0
   2268 	lea	rdx,[192+rdx]
   2269 
   2270 	vpand	ymm6,ymm6,ymm9
   2271 	vpand	ymm7,ymm7,ymm9
   2272 	vpand	ymm8,ymm8,ymm9
   2273 	vpand	ymm11,ymm11,ymm14
   2274 	vpand	ymm12,ymm12,ymm14
   2275 	vpand	ymm13,ymm13,ymm14
   2276 
   2277 	vpxor	ymm2,ymm2,ymm6
   2278 	vpxor	ymm3,ymm3,ymm7
   2279 	vpxor	ymm4,ymm4,ymm8
   2280 	vpxor	ymm2,ymm2,ymm11
   2281 	vpxor	ymm3,ymm3,ymm12
   2282 	vpxor	ymm4,ymm4,ymm13
   2283 
   2284 	dec	rax
   2285 	jnz	NEAR $L$select_loop_avx2_w5
   2286 
   2287 	vmovdqu	YMMWORD[rcx],ymm2
   2288 	vmovdqu	YMMWORD[32+rcx],ymm3
   2289 	vmovdqu	YMMWORD[64+rcx],ymm4
   2290 	vzeroupper
   2291 	movaps	xmm6,XMMWORD[rsp]
   2292 	movaps	xmm7,XMMWORD[16+rsp]
   2293 	movaps	xmm8,XMMWORD[32+rsp]
   2294 	movaps	xmm9,XMMWORD[48+rsp]
   2295 	movaps	xmm10,XMMWORD[64+rsp]
   2296 	movaps	xmm11,XMMWORD[80+rsp]
   2297 	movaps	xmm12,XMMWORD[96+rsp]
   2298 	movaps	xmm13,XMMWORD[112+rsp]
   2299 	movaps	xmm14,XMMWORD[128+rsp]
   2300 	movaps	xmm15,XMMWORD[144+rsp]
   2301 	lea	rsp,[r11]
   2302 	DB	0F3h,0C3h		;repret
   2303 
   2304 $L$SEH_end_ecp_nistz256_avx2_select_w5:
   2305 
   2306 
   2307 
   2308 
   2309 global	ecp_nistz256_avx2_select_w7
   2310 
   2311 ALIGN	32
   2312 ecp_nistz256_avx2_select_w7:
   2313 
   2314 $L$avx2_select_w7:
   2315 	vzeroupper
   2316 	mov	r11,rsp
   2317 	lea	rax,[((-136))+rsp]
   2318 $L$SEH_begin_ecp_nistz256_avx2_select_w7:
   2319 DB	0x48,0x8d,0x60,0xe0
   2320 DB	0xc5,0xf8,0x29,0x70,0xe0
   2321 DB	0xc5,0xf8,0x29,0x78,0xf0
   2322 DB	0xc5,0x78,0x29,0x40,0x00
   2323 DB	0xc5,0x78,0x29,0x48,0x10
   2324 DB	0xc5,0x78,0x29,0x50,0x20
   2325 DB	0xc5,0x78,0x29,0x58,0x30
   2326 DB	0xc5,0x78,0x29,0x60,0x40
   2327 DB	0xc5,0x78,0x29,0x68,0x50
   2328 DB	0xc5,0x78,0x29,0x70,0x60
   2329 DB	0xc5,0x78,0x29,0x78,0x70
   2330 	vmovdqa	ymm0,YMMWORD[$L$Three]
   2331 
   2332 	vpxor	ymm2,ymm2,ymm2
   2333 	vpxor	ymm3,ymm3,ymm3
   2334 
   2335 	vmovdqa	ymm4,YMMWORD[$L$One]
   2336 	vmovdqa	ymm8,YMMWORD[$L$Two]
   2337 	vmovdqa	ymm12,YMMWORD[$L$Three]
   2338 
   2339 	vmovd	xmm1,r8d
   2340 	vpermd	ymm1,ymm2,ymm1
   2341 
   2342 
   2343 	mov	rax,21
   2344 $L$select_loop_avx2_w7:
   2345 
   2346 	vmovdqa	ymm5,YMMWORD[rdx]
   2347 	vmovdqa	ymm6,YMMWORD[32+rdx]
   2348 
   2349 	vmovdqa	ymm9,YMMWORD[64+rdx]
   2350 	vmovdqa	ymm10,YMMWORD[96+rdx]
   2351 
   2352 	vmovdqa	ymm13,YMMWORD[128+rdx]
   2353 	vmovdqa	ymm14,YMMWORD[160+rdx]
   2354 
   2355 	vpcmpeqd	ymm7,ymm4,ymm1
   2356 	vpcmpeqd	ymm11,ymm8,ymm1
   2357 	vpcmpeqd	ymm15,ymm12,ymm1
   2358 
   2359 	vpaddd	ymm4,ymm4,ymm0
   2360 	vpaddd	ymm8,ymm8,ymm0
   2361 	vpaddd	ymm12,ymm12,ymm0
   2362 	lea	rdx,[192+rdx]
   2363 
   2364 	vpand	ymm5,ymm5,ymm7
   2365 	vpand	ymm6,ymm6,ymm7
   2366 	vpand	ymm9,ymm9,ymm11
   2367 	vpand	ymm10,ymm10,ymm11
   2368 	vpand	ymm13,ymm13,ymm15
   2369 	vpand	ymm14,ymm14,ymm15
   2370 
   2371 	vpxor	ymm2,ymm2,ymm5
   2372 	vpxor	ymm3,ymm3,ymm6
   2373 	vpxor	ymm2,ymm2,ymm9
   2374 	vpxor	ymm3,ymm3,ymm10
   2375 	vpxor	ymm2,ymm2,ymm13
   2376 	vpxor	ymm3,ymm3,ymm14
   2377 
   2378 	dec	rax
   2379 	jnz	NEAR $L$select_loop_avx2_w7
   2380 
   2381 
   2382 	vmovdqa	ymm5,YMMWORD[rdx]
   2383 	vmovdqa	ymm6,YMMWORD[32+rdx]
   2384 
   2385 	vpcmpeqd	ymm7,ymm4,ymm1
   2386 
   2387 	vpand	ymm5,ymm5,ymm7
   2388 	vpand	ymm6,ymm6,ymm7
   2389 
   2390 	vpxor	ymm2,ymm2,ymm5
   2391 	vpxor	ymm3,ymm3,ymm6
   2392 
   2393 	vmovdqu	YMMWORD[rcx],ymm2
   2394 	vmovdqu	YMMWORD[32+rcx],ymm3
   2395 	vzeroupper
   2396 	movaps	xmm6,XMMWORD[rsp]
   2397 	movaps	xmm7,XMMWORD[16+rsp]
   2398 	movaps	xmm8,XMMWORD[32+rsp]
   2399 	movaps	xmm9,XMMWORD[48+rsp]
   2400 	movaps	xmm10,XMMWORD[64+rsp]
   2401 	movaps	xmm11,XMMWORD[80+rsp]
   2402 	movaps	xmm12,XMMWORD[96+rsp]
   2403 	movaps	xmm13,XMMWORD[112+rsp]
   2404 	movaps	xmm14,XMMWORD[128+rsp]
   2405 	movaps	xmm15,XMMWORD[144+rsp]
   2406 	lea	rsp,[r11]
   2407 	DB	0F3h,0C3h		;repret
   2408 
   2409 $L$SEH_end_ecp_nistz256_avx2_select_w7:
   2410 
   2411 
   2412 ALIGN	32
   2413 __ecp_nistz256_add_toq:
   2414 
   2415 	xor	r11,r11
   2416 	add	r12,QWORD[rbx]
   2417 	adc	r13,QWORD[8+rbx]
   2418 	mov	rax,r12
   2419 	adc	r8,QWORD[16+rbx]
   2420 	adc	r9,QWORD[24+rbx]
   2421 	mov	rbp,r13
   2422 	adc	r11,0
   2423 
   2424 	sub	r12,-1
   2425 	mov	rcx,r8
   2426 	sbb	r13,r14
   2427 	sbb	r8,0
   2428 	mov	r10,r9
   2429 	sbb	r9,r15
   2430 	sbb	r11,0
   2431 
   2432 	cmovc	r12,rax
   2433 	cmovc	r13,rbp
   2434 	mov	QWORD[rdi],r12
   2435 	cmovc	r8,rcx
   2436 	mov	QWORD[8+rdi],r13
   2437 	cmovc	r9,r10
   2438 	mov	QWORD[16+rdi],r8
   2439 	mov	QWORD[24+rdi],r9
   2440 
   2441 	DB	0F3h,0C3h		;repret
   2442 
   2443 
   2444 
   2445 
   2446 ALIGN	32
   2447 __ecp_nistz256_sub_fromq:
   2448 
   2449 	sub	r12,QWORD[rbx]
   2450 	sbb	r13,QWORD[8+rbx]
   2451 	mov	rax,r12
   2452 	sbb	r8,QWORD[16+rbx]
   2453 	sbb	r9,QWORD[24+rbx]
   2454 	mov	rbp,r13
   2455 	sbb	r11,r11
   2456 
   2457 	add	r12,-1
   2458 	mov	rcx,r8
   2459 	adc	r13,r14
   2460 	adc	r8,0
   2461 	mov	r10,r9
   2462 	adc	r9,r15
   2463 	test	r11,r11
   2464 
   2465 	cmovz	r12,rax
   2466 	cmovz	r13,rbp
   2467 	mov	QWORD[rdi],r12
   2468 	cmovz	r8,rcx
   2469 	mov	QWORD[8+rdi],r13
   2470 	cmovz	r9,r10
   2471 	mov	QWORD[16+rdi],r8
   2472 	mov	QWORD[24+rdi],r9
   2473 
   2474 	DB	0F3h,0C3h		;repret
   2475 
   2476 
   2477 
   2478 
   2479 ALIGN	32
   2480 __ecp_nistz256_subq:
   2481 
   2482 	sub	rax,r12
   2483 	sbb	rbp,r13
   2484 	mov	r12,rax
   2485 	sbb	rcx,r8
   2486 	sbb	r10,r9
   2487 	mov	r13,rbp
   2488 	sbb	r11,r11
   2489 
   2490 	add	rax,-1
   2491 	mov	r8,rcx
   2492 	adc	rbp,r14
   2493 	adc	rcx,0
   2494 	mov	r9,r10
   2495 	adc	r10,r15
   2496 	test	r11,r11
   2497 
   2498 	cmovnz	r12,rax
   2499 	cmovnz	r13,rbp
   2500 	cmovnz	r8,rcx
   2501 	cmovnz	r9,r10
   2502 
   2503 	DB	0F3h,0C3h		;repret
   2504 
   2505 
   2506 
   2507 
   2508 ALIGN	32
   2509 __ecp_nistz256_mul_by_2q:
   2510 
   2511 	xor	r11,r11
   2512 	add	r12,r12
   2513 	adc	r13,r13
   2514 	mov	rax,r12
   2515 	adc	r8,r8
   2516 	adc	r9,r9
   2517 	mov	rbp,r13
   2518 	adc	r11,0
   2519 
   2520 	sub	r12,-1
   2521 	mov	rcx,r8
   2522 	sbb	r13,r14
   2523 	sbb	r8,0
   2524 	mov	r10,r9
   2525 	sbb	r9,r15
   2526 	sbb	r11,0
   2527 
   2528 	cmovc	r12,rax
   2529 	cmovc	r13,rbp
   2530 	mov	QWORD[rdi],r12
   2531 	cmovc	r8,rcx
   2532 	mov	QWORD[8+rdi],r13
   2533 	cmovc	r9,r10
   2534 	mov	QWORD[16+rdi],r8
   2535 	mov	QWORD[24+rdi],r9
   2536 
   2537 	DB	0F3h,0C3h		;repret
   2538 
   2539 
   2540 global	ecp_nistz256_point_double
   2541 
   2542 ALIGN	32
   2543 ecp_nistz256_point_double:
   2544 	mov	QWORD[8+rsp],rdi	;WIN64 prologue
   2545 	mov	QWORD[16+rsp],rsi
   2546 	mov	rax,rsp
   2547 $L$SEH_begin_ecp_nistz256_point_double:
   2548 	mov	rdi,rcx
   2549 	mov	rsi,rdx
   2550 
   2551 
   2552 
   2553 	lea	rcx,[OPENSSL_ia32cap_P]
   2554 	mov	rcx,QWORD[8+rcx]
   2555 	and	ecx,0x80100
   2556 	cmp	ecx,0x80100
   2557 	je	NEAR $L$point_doublex
   2558 	push	rbp
   2559 
   2560 	push	rbx
   2561 
   2562 	push	r12
   2563 
   2564 	push	r13
   2565 
   2566 	push	r14
   2567 
   2568 	push	r15
   2569 
   2570 	sub	rsp,32*5+8
   2571 
   2572 $L$point_doubleq_body:
   2573 
   2574 $L$point_double_shortcutq:
   2575 	movdqu	xmm0,XMMWORD[rsi]
   2576 	mov	rbx,rsi
   2577 	movdqu	xmm1,XMMWORD[16+rsi]
   2578 	mov	r12,QWORD[((32+0))+rsi]
   2579 	mov	r13,QWORD[((32+8))+rsi]
   2580 	mov	r8,QWORD[((32+16))+rsi]
   2581 	mov	r9,QWORD[((32+24))+rsi]
   2582 	mov	r14,QWORD[(($L$poly+8))]
   2583 	mov	r15,QWORD[(($L$poly+24))]
   2584 	movdqa	XMMWORD[96+rsp],xmm0
   2585 	movdqa	XMMWORD[(96+16)+rsp],xmm1
   2586 	lea	r10,[32+rdi]
   2587 	lea	r11,[64+rdi]
   2588 DB	102,72,15,110,199
   2589 DB	102,73,15,110,202
   2590 DB	102,73,15,110,211
   2591 
   2592 	lea	rdi,[rsp]
   2593 	call	__ecp_nistz256_mul_by_2q
   2594 
   2595 	mov	rax,QWORD[((64+0))+rsi]
   2596 	mov	r14,QWORD[((64+8))+rsi]
   2597 	mov	r15,QWORD[((64+16))+rsi]
   2598 	mov	r8,QWORD[((64+24))+rsi]
   2599 	lea	rsi,[((64-0))+rsi]
   2600 	lea	rdi,[64+rsp]
   2601 	call	__ecp_nistz256_sqr_montq
   2602 
   2603 	mov	rax,QWORD[((0+0))+rsp]
   2604 	mov	r14,QWORD[((8+0))+rsp]
   2605 	lea	rsi,[((0+0))+rsp]
   2606 	mov	r15,QWORD[((16+0))+rsp]
   2607 	mov	r8,QWORD[((24+0))+rsp]
   2608 	lea	rdi,[rsp]
   2609 	call	__ecp_nistz256_sqr_montq
   2610 
   2611 	mov	rax,QWORD[32+rbx]
   2612 	mov	r9,QWORD[((64+0))+rbx]
   2613 	mov	r10,QWORD[((64+8))+rbx]
   2614 	mov	r11,QWORD[((64+16))+rbx]
   2615 	mov	r12,QWORD[((64+24))+rbx]
   2616 	lea	rsi,[((64-0))+rbx]
   2617 	lea	rbx,[32+rbx]
   2618 DB	102,72,15,126,215
   2619 	call	__ecp_nistz256_mul_montq
   2620 	call	__ecp_nistz256_mul_by_2q
   2621 
   2622 	mov	r12,QWORD[((96+0))+rsp]
   2623 	mov	r13,QWORD[((96+8))+rsp]
   2624 	lea	rbx,[64+rsp]
   2625 	mov	r8,QWORD[((96+16))+rsp]
   2626 	mov	r9,QWORD[((96+24))+rsp]
   2627 	lea	rdi,[32+rsp]
   2628 	call	__ecp_nistz256_add_toq
   2629 
   2630 	mov	r12,QWORD[((96+0))+rsp]
   2631 	mov	r13,QWORD[((96+8))+rsp]
   2632 	lea	rbx,[64+rsp]
   2633 	mov	r8,QWORD[((96+16))+rsp]
   2634 	mov	r9,QWORD[((96+24))+rsp]
   2635 	lea	rdi,[64+rsp]
   2636 	call	__ecp_nistz256_sub_fromq
   2637 
   2638 	mov	rax,QWORD[((0+0))+rsp]
   2639 	mov	r14,QWORD[((8+0))+rsp]
   2640 	lea	rsi,[((0+0))+rsp]
   2641 	mov	r15,QWORD[((16+0))+rsp]
   2642 	mov	r8,QWORD[((24+0))+rsp]
   2643 DB	102,72,15,126,207
   2644 	call	__ecp_nistz256_sqr_montq
   2645 	xor	r9,r9
   2646 	mov	rax,r12
   2647 	add	r12,-1
   2648 	mov	r10,r13
   2649 	adc	r13,rsi
   2650 	mov	rcx,r14
   2651 	adc	r14,0
   2652 	mov	r8,r15
   2653 	adc	r15,rbp
   2654 	adc	r9,0
   2655 	xor	rsi,rsi
   2656 	test	rax,1
   2657 
   2658 	cmovz	r12,rax
   2659 	cmovz	r13,r10
   2660 	cmovz	r14,rcx
   2661 	cmovz	r15,r8
   2662 	cmovz	r9,rsi
   2663 
   2664 	mov	rax,r13
   2665 	shr	r12,1
   2666 	shl	rax,63
   2667 	mov	r10,r14
   2668 	shr	r13,1
   2669 	or	r12,rax
   2670 	shl	r10,63
   2671 	mov	rcx,r15
   2672 	shr	r14,1
   2673 	or	r13,r10
   2674 	shl	rcx,63
   2675 	mov	QWORD[rdi],r12
   2676 	shr	r15,1
   2677 	mov	QWORD[8+rdi],r13
   2678 	shl	r9,63
   2679 	or	r14,rcx
   2680 	or	r15,r9
   2681 	mov	QWORD[16+rdi],r14
   2682 	mov	QWORD[24+rdi],r15
   2683 	mov	rax,QWORD[64+rsp]
   2684 	lea	rbx,[64+rsp]
   2685 	mov	r9,QWORD[((0+32))+rsp]
   2686 	mov	r10,QWORD[((8+32))+rsp]
   2687 	lea	rsi,[((0+32))+rsp]
   2688 	mov	r11,QWORD[((16+32))+rsp]
   2689 	mov	r12,QWORD[((24+32))+rsp]
   2690 	lea	rdi,[32+rsp]
   2691 	call	__ecp_nistz256_mul_montq
   2692 
   2693 	lea	rdi,[128+rsp]
   2694 	call	__ecp_nistz256_mul_by_2q
   2695 
   2696 	lea	rbx,[32+rsp]
   2697 	lea	rdi,[32+rsp]
   2698 	call	__ecp_nistz256_add_toq
   2699 
   2700 	mov	rax,QWORD[96+rsp]
   2701 	lea	rbx,[96+rsp]
   2702 	mov	r9,QWORD[((0+0))+rsp]
   2703 	mov	r10,QWORD[((8+0))+rsp]
   2704 	lea	rsi,[((0+0))+rsp]
   2705 	mov	r11,QWORD[((16+0))+rsp]
   2706 	mov	r12,QWORD[((24+0))+rsp]
   2707 	lea	rdi,[rsp]
   2708 	call	__ecp_nistz256_mul_montq
   2709 
   2710 	lea	rdi,[128+rsp]
   2711 	call	__ecp_nistz256_mul_by_2q
   2712 
   2713 	mov	rax,QWORD[((0+32))+rsp]
   2714 	mov	r14,QWORD[((8+32))+rsp]
   2715 	lea	rsi,[((0+32))+rsp]
   2716 	mov	r15,QWORD[((16+32))+rsp]
   2717 	mov	r8,QWORD[((24+32))+rsp]
   2718 DB	102,72,15,126,199
   2719 	call	__ecp_nistz256_sqr_montq
   2720 
   2721 	lea	rbx,[128+rsp]
   2722 	mov	r8,r14
   2723 	mov	r9,r15
   2724 	mov	r14,rsi
   2725 	mov	r15,rbp
   2726 	call	__ecp_nistz256_sub_fromq
   2727 
   2728 	mov	rax,QWORD[((0+0))+rsp]
   2729 	mov	rbp,QWORD[((0+8))+rsp]
   2730 	mov	rcx,QWORD[((0+16))+rsp]
   2731 	mov	r10,QWORD[((0+24))+rsp]
   2732 	lea	rdi,[rsp]
   2733 	call	__ecp_nistz256_subq
   2734 
   2735 	mov	rax,QWORD[32+rsp]
   2736 	lea	rbx,[32+rsp]
   2737 	mov	r14,r12
   2738 	xor	ecx,ecx
   2739 	mov	QWORD[((0+0))+rsp],r12
   2740 	mov	r10,r13
   2741 	mov	QWORD[((0+8))+rsp],r13
   2742 	cmovz	r11,r8
   2743 	mov	QWORD[((0+16))+rsp],r8
   2744 	lea	rsi,[((0-0))+rsp]
   2745 	cmovz	r12,r9
   2746 	mov	QWORD[((0+24))+rsp],r9
   2747 	mov	r9,r14
   2748 	lea	rdi,[rsp]
   2749 	call	__ecp_nistz256_mul_montq
   2750 
   2751 DB	102,72,15,126,203
   2752 DB	102,72,15,126,207
   2753 	call	__ecp_nistz256_sub_fromq
   2754 
   2755 	lea	rsi,[((160+56))+rsp]
   2756 
   2757 	mov	r15,QWORD[((-48))+rsi]
   2758 
   2759 	mov	r14,QWORD[((-40))+rsi]
   2760 
   2761 	mov	r13,QWORD[((-32))+rsi]
   2762 
   2763 	mov	r12,QWORD[((-24))+rsi]
   2764 
   2765 	mov	rbx,QWORD[((-16))+rsi]
   2766 
   2767 	mov	rbp,QWORD[((-8))+rsi]
   2768 
   2769 	lea	rsp,[rsi]
   2770 
   2771 $L$point_doubleq_epilogue:
   2772 	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
   2773 	mov	rsi,QWORD[16+rsp]
   2774 	DB	0F3h,0C3h		;repret
   2775 
   2776 $L$SEH_end_ecp_nistz256_point_double:
   2777 global	ecp_nistz256_point_add
   2778 
   2779 ALIGN	32
   2780 ecp_nistz256_point_add:
   2781 	mov	QWORD[8+rsp],rdi	;WIN64 prologue
   2782 	mov	QWORD[16+rsp],rsi
   2783 	mov	rax,rsp
   2784 $L$SEH_begin_ecp_nistz256_point_add:
   2785 	mov	rdi,rcx
   2786 	mov	rsi,rdx
   2787 	mov	rdx,r8
   2788 
   2789 
   2790 
   2791 	lea	rcx,[OPENSSL_ia32cap_P]
   2792 	mov	rcx,QWORD[8+rcx]
   2793 	and	ecx,0x80100
   2794 	cmp	ecx,0x80100
   2795 	je	NEAR $L$point_addx
   2796 	push	rbp
   2797 
   2798 	push	rbx
   2799 
   2800 	push	r12
   2801 
   2802 	push	r13
   2803 
   2804 	push	r14
   2805 
   2806 	push	r15
   2807 
   2808 	sub	rsp,32*18+8
   2809 
   2810 $L$point_addq_body:
   2811 
   2812 	movdqu	xmm0,XMMWORD[rsi]
   2813 	movdqu	xmm1,XMMWORD[16+rsi]
   2814 	movdqu	xmm2,XMMWORD[32+rsi]
   2815 	movdqu	xmm3,XMMWORD[48+rsi]
   2816 	movdqu	xmm4,XMMWORD[64+rsi]
   2817 	movdqu	xmm5,XMMWORD[80+rsi]
   2818 	mov	rbx,rsi
   2819 	mov	rsi,rdx
   2820 	movdqa	XMMWORD[384+rsp],xmm0
   2821 	movdqa	XMMWORD[(384+16)+rsp],xmm1
   2822 	movdqa	XMMWORD[416+rsp],xmm2
   2823 	movdqa	XMMWORD[(416+16)+rsp],xmm3
   2824 	movdqa	XMMWORD[448+rsp],xmm4
   2825 	movdqa	XMMWORD[(448+16)+rsp],xmm5
   2826 	por	xmm5,xmm4
   2827 
   2828 	movdqu	xmm0,XMMWORD[rsi]
   2829 	pshufd	xmm3,xmm5,0xb1
   2830 	movdqu	xmm1,XMMWORD[16+rsi]
   2831 	movdqu	xmm2,XMMWORD[32+rsi]
   2832 	por	xmm5,xmm3
   2833 	movdqu	xmm3,XMMWORD[48+rsi]
   2834 	mov	rax,QWORD[((64+0))+rsi]
   2835 	mov	r14,QWORD[((64+8))+rsi]
   2836 	mov	r15,QWORD[((64+16))+rsi]
   2837 	mov	r8,QWORD[((64+24))+rsi]
   2838 	movdqa	XMMWORD[480+rsp],xmm0
   2839 	pshufd	xmm4,xmm5,0x1e
   2840 	movdqa	XMMWORD[(480+16)+rsp],xmm1
   2841 	movdqu	xmm0,XMMWORD[64+rsi]
   2842 	movdqu	xmm1,XMMWORD[80+rsi]
   2843 	movdqa	XMMWORD[512+rsp],xmm2
   2844 	movdqa	XMMWORD[(512+16)+rsp],xmm3
   2845 	por	xmm5,xmm4
   2846 	pxor	xmm4,xmm4
   2847 	por	xmm1,xmm0
   2848 DB	102,72,15,110,199
   2849 
   2850 	lea	rsi,[((64-0))+rsi]
   2851 	mov	QWORD[((544+0))+rsp],rax
   2852 	mov	QWORD[((544+8))+rsp],r14
   2853 	mov	QWORD[((544+16))+rsp],r15
   2854 	mov	QWORD[((544+24))+rsp],r8
   2855 	lea	rdi,[96+rsp]
   2856 	call	__ecp_nistz256_sqr_montq
   2857 
   2858 	pcmpeqd	xmm5,xmm4
   2859 	pshufd	xmm4,xmm1,0xb1
   2860 	por	xmm4,xmm1
   2861 	pshufd	xmm5,xmm5,0
   2862 	pshufd	xmm3,xmm4,0x1e
   2863 	por	xmm4,xmm3
   2864 	pxor	xmm3,xmm3
   2865 	pcmpeqd	xmm4,xmm3
   2866 	pshufd	xmm4,xmm4,0
   2867 	mov	rax,QWORD[((64+0))+rbx]
   2868 	mov	r14,QWORD[((64+8))+rbx]
   2869 	mov	r15,QWORD[((64+16))+rbx]
   2870 	mov	r8,QWORD[((64+24))+rbx]
   2871 DB	102,72,15,110,203
   2872 
   2873 	lea	rsi,[((64-0))+rbx]
   2874 	lea	rdi,[32+rsp]
   2875 	call	__ecp_nistz256_sqr_montq
   2876 
   2877 	mov	rax,QWORD[544+rsp]
   2878 	lea	rbx,[544+rsp]
   2879 	mov	r9,QWORD[((0+96))+rsp]
   2880 	mov	r10,QWORD[((8+96))+rsp]
   2881 	lea	rsi,[((0+96))+rsp]
   2882 	mov	r11,QWORD[((16+96))+rsp]
   2883 	mov	r12,QWORD[((24+96))+rsp]
   2884 	lea	rdi,[224+rsp]
   2885 	call	__ecp_nistz256_mul_montq
   2886 
   2887 	mov	rax,QWORD[448+rsp]
   2888 	lea	rbx,[448+rsp]
   2889 	mov	r9,QWORD[((0+32))+rsp]
   2890 	mov	r10,QWORD[((8+32))+rsp]
   2891 	lea	rsi,[((0+32))+rsp]
   2892 	mov	r11,QWORD[((16+32))+rsp]
   2893 	mov	r12,QWORD[((24+32))+rsp]
   2894 	lea	rdi,[256+rsp]
   2895 	call	__ecp_nistz256_mul_montq
   2896 
   2897 	mov	rax,QWORD[416+rsp]
   2898 	lea	rbx,[416+rsp]
   2899 	mov	r9,QWORD[((0+224))+rsp]
   2900 	mov	r10,QWORD[((8+224))+rsp]
   2901 	lea	rsi,[((0+224))+rsp]
   2902 	mov	r11,QWORD[((16+224))+rsp]
   2903 	mov	r12,QWORD[((24+224))+rsp]
   2904 	lea	rdi,[224+rsp]
   2905 	call	__ecp_nistz256_mul_montq
   2906 
   2907 	mov	rax,QWORD[512+rsp]
   2908 	lea	rbx,[512+rsp]
   2909 	mov	r9,QWORD[((0+256))+rsp]
   2910 	mov	r10,QWORD[((8+256))+rsp]
   2911 	lea	rsi,[((0+256))+rsp]
   2912 	mov	r11,QWORD[((16+256))+rsp]
   2913 	mov	r12,QWORD[((24+256))+rsp]
   2914 	lea	rdi,[256+rsp]
   2915 	call	__ecp_nistz256_mul_montq
   2916 
   2917 	lea	rbx,[224+rsp]
   2918 	lea	rdi,[64+rsp]
   2919 	call	__ecp_nistz256_sub_fromq
   2920 
   2921 	or	r12,r13
   2922 	movdqa	xmm2,xmm4
   2923 	or	r12,r8
   2924 	or	r12,r9
   2925 	por	xmm2,xmm5
   2926 DB	102,73,15,110,220
   2927 
   2928 	mov	rax,QWORD[384+rsp]
   2929 	lea	rbx,[384+rsp]
   2930 	mov	r9,QWORD[((0+96))+rsp]
   2931 	mov	r10,QWORD[((8+96))+rsp]
   2932 	lea	rsi,[((0+96))+rsp]
   2933 	mov	r11,QWORD[((16+96))+rsp]
   2934 	mov	r12,QWORD[((24+96))+rsp]
   2935 	lea	rdi,[160+rsp]
   2936 	call	__ecp_nistz256_mul_montq
   2937 
   2938 	mov	rax,QWORD[480+rsp]
   2939 	lea	rbx,[480+rsp]
   2940 	mov	r9,QWORD[((0+32))+rsp]
   2941 	mov	r10,QWORD[((8+32))+rsp]
   2942 	lea	rsi,[((0+32))+rsp]
   2943 	mov	r11,QWORD[((16+32))+rsp]
   2944 	mov	r12,QWORD[((24+32))+rsp]
   2945 	lea	rdi,[192+rsp]
   2946 	call	__ecp_nistz256_mul_montq
   2947 
   2948 	lea	rbx,[160+rsp]
   2949 	lea	rdi,[rsp]
   2950 	call	__ecp_nistz256_sub_fromq
   2951 
   2952 	or	r12,r13
   2953 	or	r12,r8
   2954 	or	r12,r9
   2955 
   2956 DB	0x3e
   2957 	jnz	NEAR $L$add_proceedq
   2958 DB	102,73,15,126,208
   2959 DB	102,73,15,126,217
   2960 	test	r8,r8
   2961 	jnz	NEAR $L$add_proceedq
   2962 	test	r9,r9
   2963 	jz	NEAR $L$add_doubleq
   2964 
   2965 DB	102,72,15,126,199
   2966 	pxor	xmm0,xmm0
   2967 	movdqu	XMMWORD[rdi],xmm0
   2968 	movdqu	XMMWORD[16+rdi],xmm0
   2969 	movdqu	XMMWORD[32+rdi],xmm0
   2970 	movdqu	XMMWORD[48+rdi],xmm0
   2971 	movdqu	XMMWORD[64+rdi],xmm0
   2972 	movdqu	XMMWORD[80+rdi],xmm0
   2973 	jmp	NEAR $L$add_doneq
   2974 
   2975 ALIGN	32
   2976 $L$add_doubleq:
   2977 DB	102,72,15,126,206
   2978 DB	102,72,15,126,199
   2979 	add	rsp,416
   2980 
   2981 	jmp	NEAR $L$point_double_shortcutq
   2982 
   2983 
   2984 ALIGN	32
   2985 $L$add_proceedq:
   2986 	mov	rax,QWORD[((0+64))+rsp]
   2987 	mov	r14,QWORD[((8+64))+rsp]
   2988 	lea	rsi,[((0+64))+rsp]
   2989 	mov	r15,QWORD[((16+64))+rsp]
   2990 	mov	r8,QWORD[((24+64))+rsp]
   2991 	lea	rdi,[96+rsp]
   2992 	call	__ecp_nistz256_sqr_montq
   2993 
   2994 	mov	rax,QWORD[448+rsp]
   2995 	lea	rbx,[448+rsp]
   2996 	mov	r9,QWORD[((0+0))+rsp]
   2997 	mov	r10,QWORD[((8+0))+rsp]
   2998 	lea	rsi,[((0+0))+rsp]
   2999 	mov	r11,QWORD[((16+0))+rsp]
   3000 	mov	r12,QWORD[((24+0))+rsp]
   3001 	lea	rdi,[352+rsp]
   3002 	call	__ecp_nistz256_mul_montq
   3003 
   3004 	mov	rax,QWORD[((0+0))+rsp]
   3005 	mov	r14,QWORD[((8+0))+rsp]
   3006 	lea	rsi,[((0+0))+rsp]
   3007 	mov	r15,QWORD[((16+0))+rsp]
   3008 	mov	r8,QWORD[((24+0))+rsp]
   3009 	lea	rdi,[32+rsp]
   3010 	call	__ecp_nistz256_sqr_montq
   3011 
   3012 	mov	rax,QWORD[544+rsp]
   3013 	lea	rbx,[544+rsp]
   3014 	mov	r9,QWORD[((0+352))+rsp]
   3015 	mov	r10,QWORD[((8+352))+rsp]
   3016 	lea	rsi,[((0+352))+rsp]
   3017 	mov	r11,QWORD[((16+352))+rsp]
   3018 	mov	r12,QWORD[((24+352))+rsp]
   3019 	lea	rdi,[352+rsp]
   3020 	call	__ecp_nistz256_mul_montq
   3021 
   3022 	mov	rax,QWORD[rsp]
   3023 	lea	rbx,[rsp]
   3024 	mov	r9,QWORD[((0+32))+rsp]
   3025 	mov	r10,QWORD[((8+32))+rsp]
   3026 	lea	rsi,[((0+32))+rsp]
   3027 	mov	r11,QWORD[((16+32))+rsp]
   3028 	mov	r12,QWORD[((24+32))+rsp]
   3029 	lea	rdi,[128+rsp]
   3030 	call	__ecp_nistz256_mul_montq
   3031 
   3032 	mov	rax,QWORD[160+rsp]
   3033 	lea	rbx,[160+rsp]
   3034 	mov	r9,QWORD[((0+32))+rsp]
   3035 	mov	r10,QWORD[((8+32))+rsp]
   3036 	lea	rsi,[((0+32))+rsp]
   3037 	mov	r11,QWORD[((16+32))+rsp]
   3038 	mov	r12,QWORD[((24+32))+rsp]
   3039 	lea	rdi,[192+rsp]
   3040 	call	__ecp_nistz256_mul_montq
   3041 
   3042 
   3043 
   3044 
   3045 	xor	r11,r11
   3046 	add	r12,r12
   3047 	lea	rsi,[96+rsp]
   3048 	adc	r13,r13
   3049 	mov	rax,r12
   3050 	adc	r8,r8
   3051 	adc	r9,r9
   3052 	mov	rbp,r13
   3053 	adc	r11,0
   3054 
   3055 	sub	r12,-1
   3056 	mov	rcx,r8
   3057 	sbb	r13,r14
   3058 	sbb	r8,0
   3059 	mov	r10,r9
   3060 	sbb	r9,r15
   3061 	sbb	r11,0
   3062 
   3063 	cmovc	r12,rax
   3064 	mov	rax,QWORD[rsi]
   3065 	cmovc	r13,rbp
   3066 	mov	rbp,QWORD[8+rsi]
   3067 	cmovc	r8,rcx
   3068 	mov	rcx,QWORD[16+rsi]
   3069 	cmovc	r9,r10
   3070 	mov	r10,QWORD[24+rsi]
   3071 
   3072 	call	__ecp_nistz256_subq
   3073 
   3074 	lea	rbx,[128+rsp]
   3075 	lea	rdi,[288+rsp]
   3076 	call	__ecp_nistz256_sub_fromq
   3077 
   3078 	mov	rax,QWORD[((192+0))+rsp]
   3079 	mov	rbp,QWORD[((192+8))+rsp]
   3080 	mov	rcx,QWORD[((192+16))+rsp]
   3081 	mov	r10,QWORD[((192+24))+rsp]
   3082 	lea	rdi,[320+rsp]
   3083 
   3084 	call	__ecp_nistz256_subq
   3085 
   3086 	mov	QWORD[rdi],r12
   3087 	mov	QWORD[8+rdi],r13
   3088 	mov	QWORD[16+rdi],r8
   3089 	mov	QWORD[24+rdi],r9
   3090 	mov	rax,QWORD[128+rsp]
   3091 	lea	rbx,[128+rsp]
   3092 	mov	r9,QWORD[((0+224))+rsp]
   3093 	mov	r10,QWORD[((8+224))+rsp]
   3094 	lea	rsi,[((0+224))+rsp]
   3095 	mov	r11,QWORD[((16+224))+rsp]
   3096 	mov	r12,QWORD[((24+224))+rsp]
   3097 	lea	rdi,[256+rsp]
   3098 	call	__ecp_nistz256_mul_montq
   3099 
   3100 	mov	rax,QWORD[320+rsp]
   3101 	lea	rbx,[320+rsp]
   3102 	mov	r9,QWORD[((0+64))+rsp]
   3103 	mov	r10,QWORD[((8+64))+rsp]
   3104 	lea	rsi,[((0+64))+rsp]
   3105 	mov	r11,QWORD[((16+64))+rsp]
   3106 	mov	r12,QWORD[((24+64))+rsp]
   3107 	lea	rdi,[320+rsp]
   3108 	call	__ecp_nistz256_mul_montq
   3109 
   3110 	lea	rbx,[256+rsp]
   3111 	lea	rdi,[320+rsp]
   3112 	call	__ecp_nistz256_sub_fromq
   3113 
   3114 DB	102,72,15,126,199
   3115 
   3116 	movdqa	xmm0,xmm5
   3117 	movdqa	xmm1,xmm5
   3118 	pandn	xmm0,XMMWORD[352+rsp]
   3119 	movdqa	xmm2,xmm5
   3120 	pandn	xmm1,XMMWORD[((352+16))+rsp]
   3121 	movdqa	xmm3,xmm5
   3122 	pand	xmm2,XMMWORD[544+rsp]
   3123 	pand	xmm3,XMMWORD[((544+16))+rsp]
   3124 	por	xmm2,xmm0
   3125 	por	xmm3,xmm1
   3126 
   3127 	movdqa	xmm0,xmm4
   3128 	movdqa	xmm1,xmm4
   3129 	pandn	xmm0,xmm2
   3130 	movdqa	xmm2,xmm4
   3131 	pandn	xmm1,xmm3
   3132 	movdqa	xmm3,xmm4
   3133 	pand	xmm2,XMMWORD[448+rsp]
   3134 	pand	xmm3,XMMWORD[((448+16))+rsp]
   3135 	por	xmm2,xmm0
   3136 	por	xmm3,xmm1
   3137 	movdqu	XMMWORD[64+rdi],xmm2
   3138 	movdqu	XMMWORD[80+rdi],xmm3
   3139 
   3140 	movdqa	xmm0,xmm5
   3141 	movdqa	xmm1,xmm5
   3142 	pandn	xmm0,XMMWORD[288+rsp]
   3143 	movdqa	xmm2,xmm5
   3144 	pandn	xmm1,XMMWORD[((288+16))+rsp]
   3145 	movdqa	xmm3,xmm5
   3146 	pand	xmm2,XMMWORD[480+rsp]
   3147 	pand	xmm3,XMMWORD[((480+16))+rsp]
   3148 	por	xmm2,xmm0
   3149 	por	xmm3,xmm1
   3150 
   3151 	movdqa	xmm0,xmm4
   3152 	movdqa	xmm1,xmm4
   3153 	pandn	xmm0,xmm2
   3154 	movdqa	xmm2,xmm4
   3155 	pandn	xmm1,xmm3
   3156 	movdqa	xmm3,xmm4
   3157 	pand	xmm2,XMMWORD[384+rsp]
   3158 	pand	xmm3,XMMWORD[((384+16))+rsp]
   3159 	por	xmm2,xmm0
   3160 	por	xmm3,xmm1
   3161 	movdqu	XMMWORD[rdi],xmm2
   3162 	movdqu	XMMWORD[16+rdi],xmm3
   3163 
   3164 	movdqa	xmm0,xmm5
   3165 	movdqa	xmm1,xmm5
   3166 	pandn	xmm0,XMMWORD[320+rsp]
   3167 	movdqa	xmm2,xmm5
   3168 	pandn	xmm1,XMMWORD[((320+16))+rsp]
   3169 	movdqa	xmm3,xmm5
   3170 	pand	xmm2,XMMWORD[512+rsp]
   3171 	pand	xmm3,XMMWORD[((512+16))+rsp]
   3172 	por	xmm2,xmm0
   3173 	por	xmm3,xmm1
   3174 
   3175 	movdqa	xmm0,xmm4
   3176 	movdqa	xmm1,xmm4
   3177 	pandn	xmm0,xmm2
   3178 	movdqa	xmm2,xmm4
   3179 	pandn	xmm1,xmm3
   3180 	movdqa	xmm3,xmm4
   3181 	pand	xmm2,XMMWORD[416+rsp]
   3182 	pand	xmm3,XMMWORD[((416+16))+rsp]
   3183 	por	xmm2,xmm0
   3184 	por	xmm3,xmm1
   3185 	movdqu	XMMWORD[32+rdi],xmm2
   3186 	movdqu	XMMWORD[48+rdi],xmm3
   3187 
   3188 $L$add_doneq:
   3189 	lea	rsi,[((576+56))+rsp]
   3190 
   3191 	mov	r15,QWORD[((-48))+rsi]
   3192 
   3193 	mov	r14,QWORD[((-40))+rsi]
   3194 
   3195 	mov	r13,QWORD[((-32))+rsi]
   3196 
   3197 	mov	r12,QWORD[((-24))+rsi]
   3198 
   3199 	mov	rbx,QWORD[((-16))+rsi]
   3200 
   3201 	mov	rbp,QWORD[((-8))+rsi]
   3202 
   3203 	lea	rsp,[rsi]
   3204 
   3205 $L$point_addq_epilogue:
   3206 	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
   3207 	mov	rsi,QWORD[16+rsp]
   3208 	DB	0F3h,0C3h		;repret
   3209 
   3210 $L$SEH_end_ecp_nistz256_point_add:
   3211 global	ecp_nistz256_point_add_affine
   3212 
   3213 ALIGN	32
   3214 ecp_nistz256_point_add_affine:
   3215 	mov	QWORD[8+rsp],rdi	;WIN64 prologue
   3216 	mov	QWORD[16+rsp],rsi
   3217 	mov	rax,rsp
   3218 $L$SEH_begin_ecp_nistz256_point_add_affine:
   3219 	mov	rdi,rcx
   3220 	mov	rsi,rdx
   3221 	mov	rdx,r8
   3222 
   3223 
   3224 
   3225 	lea	rcx,[OPENSSL_ia32cap_P]
   3226 	mov	rcx,QWORD[8+rcx]
   3227 	and	ecx,0x80100
   3228 	cmp	ecx,0x80100
   3229 	je	NEAR $L$point_add_affinex
   3230 	push	rbp
   3231 
   3232 	push	rbx
   3233 
   3234 	push	r12
   3235 
   3236 	push	r13
   3237 
   3238 	push	r14
   3239 
   3240 	push	r15
   3241 
   3242 	sub	rsp,32*15+8
   3243 
   3244 $L$add_affineq_body:
   3245 
   3246 	movdqu	xmm0,XMMWORD[rsi]
   3247 	mov	rbx,rdx
   3248 	movdqu	xmm1,XMMWORD[16+rsi]
   3249 	movdqu	xmm2,XMMWORD[32+rsi]
   3250 	movdqu	xmm3,XMMWORD[48+rsi]
   3251 	movdqu	xmm4,XMMWORD[64+rsi]
   3252 	movdqu	xmm5,XMMWORD[80+rsi]
   3253 	mov	rax,QWORD[((64+0))+rsi]
   3254 	mov	r14,QWORD[((64+8))+rsi]
   3255 	mov	r15,QWORD[((64+16))+rsi]
   3256 	mov	r8,QWORD[((64+24))+rsi]
   3257 	movdqa	XMMWORD[320+rsp],xmm0
   3258 	movdqa	XMMWORD[(320+16)+rsp],xmm1
   3259 	movdqa	XMMWORD[352+rsp],xmm2
   3260 	movdqa	XMMWORD[(352+16)+rsp],xmm3
   3261 	movdqa	XMMWORD[384+rsp],xmm4
   3262 	movdqa	XMMWORD[(384+16)+rsp],xmm5
   3263 	por	xmm5,xmm4
   3264 
   3265 	movdqu	xmm0,XMMWORD[rbx]
   3266 	pshufd	xmm3,xmm5,0xb1
   3267 	movdqu	xmm1,XMMWORD[16+rbx]
   3268 	movdqu	xmm2,XMMWORD[32+rbx]
   3269 	por	xmm5,xmm3
   3270 	movdqu	xmm3,XMMWORD[48+rbx]
   3271 	movdqa	XMMWORD[416+rsp],xmm0
   3272 	pshufd	xmm4,xmm5,0x1e
   3273 	movdqa	XMMWORD[(416+16)+rsp],xmm1
   3274 	por	xmm1,xmm0
   3275 DB	102,72,15,110,199
   3276 	movdqa	XMMWORD[448+rsp],xmm2
   3277 	movdqa	XMMWORD[(448+16)+rsp],xmm3
   3278 	por	xmm3,xmm2
   3279 	por	xmm5,xmm4
   3280 	pxor	xmm4,xmm4
   3281 	por	xmm3,xmm1
   3282 
   3283 	lea	rsi,[((64-0))+rsi]
   3284 	lea	rdi,[32+rsp]
   3285 	call	__ecp_nistz256_sqr_montq
   3286 
   3287 	pcmpeqd	xmm5,xmm4
   3288 	pshufd	xmm4,xmm3,0xb1
   3289 	mov	rax,QWORD[rbx]
   3290 
   3291 	mov	r9,r12
   3292 	por	xmm4,xmm3
   3293 	pshufd	xmm5,xmm5,0
   3294 	pshufd	xmm3,xmm4,0x1e
   3295 	mov	r10,r13
   3296 	por	xmm4,xmm3
   3297 	pxor	xmm3,xmm3
   3298 	mov	r11,r14
   3299 	pcmpeqd	xmm4,xmm3
   3300 	pshufd	xmm4,xmm4,0
   3301 
   3302 	lea	rsi,[((32-0))+rsp]
   3303 	mov	r12,r15
   3304 	lea	rdi,[rsp]
   3305 	call	__ecp_nistz256_mul_montq
   3306 
   3307 	lea	rbx,[320+rsp]
   3308 	lea	rdi,[64+rsp]
   3309 	call	__ecp_nistz256_sub_fromq
   3310 
   3311 	mov	rax,QWORD[384+rsp]
   3312 	lea	rbx,[384+rsp]
   3313 	mov	r9,QWORD[((0+32))+rsp]
   3314 	mov	r10,QWORD[((8+32))+rsp]
   3315 	lea	rsi,[((0+32))+rsp]
   3316 	mov	r11,QWORD[((16+32))+rsp]
   3317 	mov	r12,QWORD[((24+32))+rsp]
   3318 	lea	rdi,[32+rsp]
   3319 	call	__ecp_nistz256_mul_montq
   3320 
   3321 	mov	rax,QWORD[384+rsp]
   3322 	lea	rbx,[384+rsp]
   3323 	mov	r9,QWORD[((0+64))+rsp]
   3324 	mov	r10,QWORD[((8+64))+rsp]
   3325 	lea	rsi,[((0+64))+rsp]
   3326 	mov	r11,QWORD[((16+64))+rsp]
   3327 	mov	r12,QWORD[((24+64))+rsp]
   3328 	lea	rdi,[288+rsp]
   3329 	call	__ecp_nistz256_mul_montq
   3330 
   3331 	mov	rax,QWORD[448+rsp]
   3332 	lea	rbx,[448+rsp]
   3333 	mov	r9,QWORD[((0+32))+rsp]
   3334 	mov	r10,QWORD[((8+32))+rsp]
   3335 	lea	rsi,[((0+32))+rsp]
   3336 	mov	r11,QWORD[((16+32))+rsp]
   3337 	mov	r12,QWORD[((24+32))+rsp]
   3338 	lea	rdi,[32+rsp]
   3339 	call	__ecp_nistz256_mul_montq
   3340 
   3341 	lea	rbx,[352+rsp]
   3342 	lea	rdi,[96+rsp]
   3343 	call	__ecp_nistz256_sub_fromq
   3344 
   3345 	mov	rax,QWORD[((0+64))+rsp]
   3346 	mov	r14,QWORD[((8+64))+rsp]
   3347 	lea	rsi,[((0+64))+rsp]
   3348 	mov	r15,QWORD[((16+64))+rsp]
   3349 	mov	r8,QWORD[((24+64))+rsp]
   3350 	lea	rdi,[128+rsp]
   3351 	call	__ecp_nistz256_sqr_montq
   3352 
   3353 	mov	rax,QWORD[((0+96))+rsp]
   3354 	mov	r14,QWORD[((8+96))+rsp]
   3355 	lea	rsi,[((0+96))+rsp]
   3356 	mov	r15,QWORD[((16+96))+rsp]
   3357 	mov	r8,QWORD[((24+96))+rsp]
   3358 	lea	rdi,[192+rsp]
   3359 	call	__ecp_nistz256_sqr_montq
   3360 
   3361 	mov	rax,QWORD[128+rsp]
   3362 	lea	rbx,[128+rsp]
   3363 	mov	r9,QWORD[((0+64))+rsp]
   3364 	mov	r10,QWORD[((8+64))+rsp]
   3365 	lea	rsi,[((0+64))+rsp]
   3366 	mov	r11,QWORD[((16+64))+rsp]
   3367 	mov	r12,QWORD[((24+64))+rsp]
   3368 	lea	rdi,[160+rsp]
   3369 	call	__ecp_nistz256_mul_montq
   3370 
   3371 	mov	rax,QWORD[320+rsp]
   3372 	lea	rbx,[320+rsp]
   3373 	mov	r9,QWORD[((0+128))+rsp]
   3374 	mov	r10,QWORD[((8+128))+rsp]
   3375 	lea	rsi,[((0+128))+rsp]
   3376 	mov	r11,QWORD[((16+128))+rsp]
   3377 	mov	r12,QWORD[((24+128))+rsp]
   3378 	lea	rdi,[rsp]
   3379 	call	__ecp_nistz256_mul_montq
   3380 
   3381 
   3382 
   3383 
   3384 	xor	r11,r11
   3385 	add	r12,r12
   3386 	lea	rsi,[192+rsp]
   3387 	adc	r13,r13
   3388 	mov	rax,r12
   3389 	adc	r8,r8
   3390 	adc	r9,r9
   3391 	mov	rbp,r13
   3392 	adc	r11,0
   3393 
   3394 	sub	r12,-1
   3395 	mov	rcx,r8
   3396 	sbb	r13,r14
   3397 	sbb	r8,0
   3398 	mov	r10,r9
   3399 	sbb	r9,r15
   3400 	sbb	r11,0
   3401 
   3402 	cmovc	r12,rax
   3403 	mov	rax,QWORD[rsi]
   3404 	cmovc	r13,rbp
   3405 	mov	rbp,QWORD[8+rsi]
   3406 	cmovc	r8,rcx
   3407 	mov	rcx,QWORD[16+rsi]
   3408 	cmovc	r9,r10
   3409 	mov	r10,QWORD[24+rsi]
   3410 
   3411 	call	__ecp_nistz256_subq
   3412 
   3413 	lea	rbx,[160+rsp]
   3414 	lea	rdi,[224+rsp]
   3415 	call	__ecp_nistz256_sub_fromq
   3416 
   3417 	mov	rax,QWORD[((0+0))+rsp]
   3418 	mov	rbp,QWORD[((0+8))+rsp]
   3419 	mov	rcx,QWORD[((0+16))+rsp]
   3420 	mov	r10,QWORD[((0+24))+rsp]
   3421 	lea	rdi,[64+rsp]
   3422 
   3423 	call	__ecp_nistz256_subq
   3424 
   3425 	mov	QWORD[rdi],r12
   3426 	mov	QWORD[8+rdi],r13
   3427 	mov	QWORD[16+rdi],r8
   3428 	mov	QWORD[24+rdi],r9
   3429 	mov	rax,QWORD[352+rsp]
   3430 	lea	rbx,[352+rsp]
   3431 	mov	r9,QWORD[((0+160))+rsp]
   3432 	mov	r10,QWORD[((8+160))+rsp]
   3433 	lea	rsi,[((0+160))+rsp]
   3434 	mov	r11,QWORD[((16+160))+rsp]
   3435 	mov	r12,QWORD[((24+160))+rsp]
   3436 	lea	rdi,[32+rsp]
   3437 	call	__ecp_nistz256_mul_montq
   3438 
   3439 	mov	rax,QWORD[96+rsp]
   3440 	lea	rbx,[96+rsp]
   3441 	mov	r9,QWORD[((0+64))+rsp]
   3442 	mov	r10,QWORD[((8+64))+rsp]
   3443 	lea	rsi,[((0+64))+rsp]
   3444 	mov	r11,QWORD[((16+64))+rsp]
   3445 	mov	r12,QWORD[((24+64))+rsp]
   3446 	lea	rdi,[64+rsp]
   3447 	call	__ecp_nistz256_mul_montq
   3448 
   3449 	lea	rbx,[32+rsp]
   3450 	lea	rdi,[256+rsp]
   3451 	call	__ecp_nistz256_sub_fromq
   3452 
   3453 DB	102,72,15,126,199
   3454 
   3455 	movdqa	xmm0,xmm5
   3456 	movdqa	xmm1,xmm5
   3457 	pandn	xmm0,XMMWORD[288+rsp]
   3458 	movdqa	xmm2,xmm5
   3459 	pandn	xmm1,XMMWORD[((288+16))+rsp]
   3460 	movdqa	xmm3,xmm5
   3461 	pand	xmm2,XMMWORD[$L$ONE_mont]
   3462 	pand	xmm3,XMMWORD[(($L$ONE_mont+16))]
   3463 	por	xmm2,xmm0
   3464 	por	xmm3,xmm1
   3465 
   3466 	movdqa	xmm0,xmm4
   3467 	movdqa	xmm1,xmm4
   3468 	pandn	xmm0,xmm2
   3469 	movdqa	xmm2,xmm4
   3470 	pandn	xmm1,xmm3
   3471 	movdqa	xmm3,xmm4
   3472 	pand	xmm2,XMMWORD[384+rsp]
   3473 	pand	xmm3,XMMWORD[((384+16))+rsp]
   3474 	por	xmm2,xmm0
   3475 	por	xmm3,xmm1
   3476 	movdqu	XMMWORD[64+rdi],xmm2
   3477 	movdqu	XMMWORD[80+rdi],xmm3
   3478 
   3479 	movdqa	xmm0,xmm5
   3480 	movdqa	xmm1,xmm5
   3481 	pandn	xmm0,XMMWORD[224+rsp]
   3482 	movdqa	xmm2,xmm5
   3483 	pandn	xmm1,XMMWORD[((224+16))+rsp]
   3484 	movdqa	xmm3,xmm5
   3485 	pand	xmm2,XMMWORD[416+rsp]
   3486 	pand	xmm3,XMMWORD[((416+16))+rsp]
   3487 	por	xmm2,xmm0
   3488 	por	xmm3,xmm1
   3489 
   3490 	movdqa	xmm0,xmm4
   3491 	movdqa	xmm1,xmm4
   3492 	pandn	xmm0,xmm2
   3493 	movdqa	xmm2,xmm4
   3494 	pandn	xmm1,xmm3
   3495 	movdqa	xmm3,xmm4
   3496 	pand	xmm2,XMMWORD[320+rsp]
   3497 	pand	xmm3,XMMWORD[((320+16))+rsp]
   3498 	por	xmm2,xmm0
   3499 	por	xmm3,xmm1
   3500 	movdqu	XMMWORD[rdi],xmm2
   3501 	movdqu	XMMWORD[16+rdi],xmm3
   3502 
   3503 	movdqa	xmm0,xmm5
   3504 	movdqa	xmm1,xmm5
   3505 	pandn	xmm0,XMMWORD[256+rsp]
   3506 	movdqa	xmm2,xmm5
   3507 	pandn	xmm1,XMMWORD[((256+16))+rsp]
   3508 	movdqa	xmm3,xmm5
   3509 	pand	xmm2,XMMWORD[448+rsp]
   3510 	pand	xmm3,XMMWORD[((448+16))+rsp]
   3511 	por	xmm2,xmm0
   3512 	por	xmm3,xmm1
   3513 
   3514 	movdqa	xmm0,xmm4
   3515 	movdqa	xmm1,xmm4
   3516 	pandn	xmm0,xmm2
   3517 	movdqa	xmm2,xmm4
   3518 	pandn	xmm1,xmm3
   3519 	movdqa	xmm3,xmm4
   3520 	pand	xmm2,XMMWORD[352+rsp]
   3521 	pand	xmm3,XMMWORD[((352+16))+rsp]
   3522 	por	xmm2,xmm0
   3523 	por	xmm3,xmm1
   3524 	movdqu	XMMWORD[32+rdi],xmm2
   3525 	movdqu	XMMWORD[48+rdi],xmm3
   3526 
   3527 	lea	rsi,[((480+56))+rsp]
   3528 
   3529 	mov	r15,QWORD[((-48))+rsi]
   3530 
   3531 	mov	r14,QWORD[((-40))+rsi]
   3532 
   3533 	mov	r13,QWORD[((-32))+rsi]
   3534 
   3535 	mov	r12,QWORD[((-24))+rsi]
   3536 
   3537 	mov	rbx,QWORD[((-16))+rsi]
   3538 
   3539 	mov	rbp,QWORD[((-8))+rsi]
   3540 
   3541 	lea	rsp,[rsi]
   3542 
   3543 $L$add_affineq_epilogue:
   3544 	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
   3545 	mov	rsi,QWORD[16+rsp]
   3546 	DB	0F3h,0C3h		;repret
   3547 
   3548 $L$SEH_end_ecp_nistz256_point_add_affine:
   3549 
   3550 ALIGN	32
   3551 __ecp_nistz256_add_tox:
   3552 
   3553 	xor	r11,r11
   3554 	adc	r12,QWORD[rbx]
   3555 	adc	r13,QWORD[8+rbx]
   3556 	mov	rax,r12
   3557 	adc	r8,QWORD[16+rbx]
   3558 	adc	r9,QWORD[24+rbx]
   3559 	mov	rbp,r13
   3560 	adc	r11,0
   3561 
   3562 	xor	r10,r10
   3563 	sbb	r12,-1
   3564 	mov	rcx,r8
   3565 	sbb	r13,r14
   3566 	sbb	r8,0
   3567 	mov	r10,r9
   3568 	sbb	r9,r15
   3569 	sbb	r11,0
   3570 
   3571 	cmovc	r12,rax
   3572 	cmovc	r13,rbp
   3573 	mov	QWORD[rdi],r12
   3574 	cmovc	r8,rcx
   3575 	mov	QWORD[8+rdi],r13
   3576 	cmovc	r9,r10
   3577 	mov	QWORD[16+rdi],r8
   3578 	mov	QWORD[24+rdi],r9
   3579 
   3580 	DB	0F3h,0C3h		;repret
   3581 
   3582 
   3583 
   3584 
   3585 ALIGN	32
   3586 __ecp_nistz256_sub_fromx:
   3587 
   3588 	xor	r11,r11
   3589 	sbb	r12,QWORD[rbx]
   3590 	sbb	r13,QWORD[8+rbx]
   3591 	mov	rax,r12
   3592 	sbb	r8,QWORD[16+rbx]
   3593 	sbb	r9,QWORD[24+rbx]
   3594 	mov	rbp,r13
   3595 	sbb	r11,0
   3596 
   3597 	xor	r10,r10
   3598 	adc	r12,-1
   3599 	mov	rcx,r8
   3600 	adc	r13,r14
   3601 	adc	r8,0
   3602 	mov	r10,r9
   3603 	adc	r9,r15
   3604 
   3605 	bt	r11,0
   3606 	cmovnc	r12,rax
   3607 	cmovnc	r13,rbp
   3608 	mov	QWORD[rdi],r12
   3609 	cmovnc	r8,rcx
   3610 	mov	QWORD[8+rdi],r13
   3611 	cmovnc	r9,r10
   3612 	mov	QWORD[16+rdi],r8
   3613 	mov	QWORD[24+rdi],r9
   3614 
   3615 	DB	0F3h,0C3h		;repret
   3616 
   3617 
   3618 
   3619 
   3620 ALIGN	32
   3621 __ecp_nistz256_subx:
   3622 
   3623 	xor	r11,r11
   3624 	sbb	rax,r12
   3625 	sbb	rbp,r13
   3626 	mov	r12,rax
   3627 	sbb	rcx,r8
   3628 	sbb	r10,r9
   3629 	mov	r13,rbp
   3630 	sbb	r11,0
   3631 
   3632 	xor	r9,r9
   3633 	adc	rax,-1
   3634 	mov	r8,rcx
   3635 	adc	rbp,r14
   3636 	adc	rcx,0
   3637 	mov	r9,r10
   3638 	adc	r10,r15
   3639 
   3640 	bt	r11,0
   3641 	cmovc	r12,rax
   3642 	cmovc	r13,rbp
   3643 	cmovc	r8,rcx
   3644 	cmovc	r9,r10
   3645 
   3646 	DB	0F3h,0C3h		;repret
   3647 
   3648 
   3649 
   3650 
   3651 ALIGN	32
   3652 __ecp_nistz256_mul_by_2x:
   3653 
   3654 	xor	r11,r11
   3655 	adc	r12,r12
   3656 	adc	r13,r13
   3657 	mov	rax,r12
   3658 	adc	r8,r8
   3659 	adc	r9,r9
   3660 	mov	rbp,r13
   3661 	adc	r11,0
   3662 
   3663 	xor	r10,r10
   3664 	sbb	r12,-1
   3665 	mov	rcx,r8
   3666 	sbb	r13,r14
   3667 	sbb	r8,0
   3668 	mov	r10,r9
   3669 	sbb	r9,r15
   3670 	sbb	r11,0
   3671 
   3672 	cmovc	r12,rax
   3673 	cmovc	r13,rbp
   3674 	mov	QWORD[rdi],r12
   3675 	cmovc	r8,rcx
   3676 	mov	QWORD[8+rdi],r13
   3677 	cmovc	r9,r10
   3678 	mov	QWORD[16+rdi],r8
   3679 	mov	QWORD[24+rdi],r9
   3680 
   3681 	DB	0F3h,0C3h		;repret
   3682 
   3683 
   3684 
   3685 ALIGN	32
   3686 ecp_nistz256_point_doublex:
   3687 	mov	QWORD[8+rsp],rdi	;WIN64 prologue
   3688 	mov	QWORD[16+rsp],rsi
   3689 	mov	rax,rsp
   3690 $L$SEH_begin_ecp_nistz256_point_doublex:
   3691 	mov	rdi,rcx
   3692 	mov	rsi,rdx
   3693 
   3694 
   3695 
   3696 $L$point_doublex:
   3697 	push	rbp
   3698 
   3699 	push	rbx
   3700 
   3701 	push	r12
   3702 
   3703 	push	r13
   3704 
   3705 	push	r14
   3706 
   3707 	push	r15
   3708 
   3709 	sub	rsp,32*5+8
   3710 
   3711 $L$point_doublex_body:
   3712 
   3713 $L$point_double_shortcutx:
   3714 	movdqu	xmm0,XMMWORD[rsi]
   3715 	mov	rbx,rsi
   3716 	movdqu	xmm1,XMMWORD[16+rsi]
   3717 	mov	r12,QWORD[((32+0))+rsi]
   3718 	mov	r13,QWORD[((32+8))+rsi]
   3719 	mov	r8,QWORD[((32+16))+rsi]
   3720 	mov	r9,QWORD[((32+24))+rsi]
   3721 	mov	r14,QWORD[(($L$poly+8))]
   3722 	mov	r15,QWORD[(($L$poly+24))]
   3723 	movdqa	XMMWORD[96+rsp],xmm0
   3724 	movdqa	XMMWORD[(96+16)+rsp],xmm1
   3725 	lea	r10,[32+rdi]
   3726 	lea	r11,[64+rdi]
   3727 DB	102,72,15,110,199
   3728 DB	102,73,15,110,202
   3729 DB	102,73,15,110,211
   3730 
   3731 	lea	rdi,[rsp]
   3732 	call	__ecp_nistz256_mul_by_2x
   3733 
   3734 	mov	rdx,QWORD[((64+0))+rsi]
   3735 	mov	r14,QWORD[((64+8))+rsi]
   3736 	mov	r15,QWORD[((64+16))+rsi]
   3737 	mov	r8,QWORD[((64+24))+rsi]
   3738 	lea	rsi,[((64-128))+rsi]
   3739 	lea	rdi,[64+rsp]
   3740 	call	__ecp_nistz256_sqr_montx
   3741 
   3742 	mov	rdx,QWORD[((0+0))+rsp]
   3743 	mov	r14,QWORD[((8+0))+rsp]
   3744 	lea	rsi,[((-128+0))+rsp]
   3745 	mov	r15,QWORD[((16+0))+rsp]
   3746 	mov	r8,QWORD[((24+0))+rsp]
   3747 	lea	rdi,[rsp]
   3748 	call	__ecp_nistz256_sqr_montx
   3749 
   3750 	mov	rdx,QWORD[32+rbx]
   3751 	mov	r9,QWORD[((64+0))+rbx]
   3752 	mov	r10,QWORD[((64+8))+rbx]
   3753 	mov	r11,QWORD[((64+16))+rbx]
   3754 	mov	r12,QWORD[((64+24))+rbx]
   3755 	lea	rsi,[((64-128))+rbx]
   3756 	lea	rbx,[32+rbx]
   3757 DB	102,72,15,126,215
   3758 	call	__ecp_nistz256_mul_montx
   3759 	call	__ecp_nistz256_mul_by_2x
   3760 
   3761 	mov	r12,QWORD[((96+0))+rsp]
   3762 	mov	r13,QWORD[((96+8))+rsp]
   3763 	lea	rbx,[64+rsp]
   3764 	mov	r8,QWORD[((96+16))+rsp]
   3765 	mov	r9,QWORD[((96+24))+rsp]
   3766 	lea	rdi,[32+rsp]
   3767 	call	__ecp_nistz256_add_tox
   3768 
   3769 	mov	r12,QWORD[((96+0))+rsp]
   3770 	mov	r13,QWORD[((96+8))+rsp]
   3771 	lea	rbx,[64+rsp]
   3772 	mov	r8,QWORD[((96+16))+rsp]
   3773 	mov	r9,QWORD[((96+24))+rsp]
   3774 	lea	rdi,[64+rsp]
   3775 	call	__ecp_nistz256_sub_fromx
   3776 
   3777 	mov	rdx,QWORD[((0+0))+rsp]
   3778 	mov	r14,QWORD[((8+0))+rsp]
   3779 	lea	rsi,[((-128+0))+rsp]
   3780 	mov	r15,QWORD[((16+0))+rsp]
   3781 	mov	r8,QWORD[((24+0))+rsp]
   3782 DB	102,72,15,126,207
   3783 	call	__ecp_nistz256_sqr_montx
   3784 	xor	r9,r9
   3785 	mov	rax,r12
   3786 	add	r12,-1
   3787 	mov	r10,r13
   3788 	adc	r13,rsi
   3789 	mov	rcx,r14
   3790 	adc	r14,0
   3791 	mov	r8,r15
   3792 	adc	r15,rbp
   3793 	adc	r9,0
   3794 	xor	rsi,rsi
   3795 	test	rax,1
   3796 
   3797 	cmovz	r12,rax
   3798 	cmovz	r13,r10
   3799 	cmovz	r14,rcx
   3800 	cmovz	r15,r8
   3801 	cmovz	r9,rsi
   3802 
   3803 	mov	rax,r13
   3804 	shr	r12,1
   3805 	shl	rax,63
   3806 	mov	r10,r14
   3807 	shr	r13,1
   3808 	or	r12,rax
   3809 	shl	r10,63
   3810 	mov	rcx,r15
   3811 	shr	r14,1
   3812 	or	r13,r10
   3813 	shl	rcx,63
   3814 	mov	QWORD[rdi],r12
   3815 	shr	r15,1
   3816 	mov	QWORD[8+rdi],r13
   3817 	shl	r9,63
   3818 	or	r14,rcx
   3819 	or	r15,r9
   3820 	mov	QWORD[16+rdi],r14
   3821 	mov	QWORD[24+rdi],r15
   3822 	mov	rdx,QWORD[64+rsp]
   3823 	lea	rbx,[64+rsp]
   3824 	mov	r9,QWORD[((0+32))+rsp]
   3825 	mov	r10,QWORD[((8+32))+rsp]
   3826 	lea	rsi,[((-128+32))+rsp]
   3827 	mov	r11,QWORD[((16+32))+rsp]
   3828 	mov	r12,QWORD[((24+32))+rsp]
   3829 	lea	rdi,[32+rsp]
   3830 	call	__ecp_nistz256_mul_montx
   3831 
   3832 	lea	rdi,[128+rsp]
   3833 	call	__ecp_nistz256_mul_by_2x
   3834 
   3835 	lea	rbx,[32+rsp]
   3836 	lea	rdi,[32+rsp]
   3837 	call	__ecp_nistz256_add_tox
   3838 
   3839 	mov	rdx,QWORD[96+rsp]
   3840 	lea	rbx,[96+rsp]
   3841 	mov	r9,QWORD[((0+0))+rsp]
   3842 	mov	r10,QWORD[((8+0))+rsp]
   3843 	lea	rsi,[((-128+0))+rsp]
   3844 	mov	r11,QWORD[((16+0))+rsp]
   3845 	mov	r12,QWORD[((24+0))+rsp]
   3846 	lea	rdi,[rsp]
   3847 	call	__ecp_nistz256_mul_montx
   3848 
   3849 	lea	rdi,[128+rsp]
   3850 	call	__ecp_nistz256_mul_by_2x
   3851 
   3852 	mov	rdx,QWORD[((0+32))+rsp]
   3853 	mov	r14,QWORD[((8+32))+rsp]
   3854 	lea	rsi,[((-128+32))+rsp]
   3855 	mov	r15,QWORD[((16+32))+rsp]
   3856 	mov	r8,QWORD[((24+32))+rsp]
   3857 DB	102,72,15,126,199
   3858 	call	__ecp_nistz256_sqr_montx
   3859 
   3860 	lea	rbx,[128+rsp]
   3861 	mov	r8,r14
   3862 	mov	r9,r15
   3863 	mov	r14,rsi
   3864 	mov	r15,rbp
   3865 	call	__ecp_nistz256_sub_fromx
   3866 
   3867 	mov	rax,QWORD[((0+0))+rsp]
   3868 	mov	rbp,QWORD[((0+8))+rsp]
   3869 	mov	rcx,QWORD[((0+16))+rsp]
   3870 	mov	r10,QWORD[((0+24))+rsp]
   3871 	lea	rdi,[rsp]
   3872 	call	__ecp_nistz256_subx
   3873 
   3874 	mov	rdx,QWORD[32+rsp]
   3875 	lea	rbx,[32+rsp]
   3876 	mov	r14,r12
   3877 	xor	ecx,ecx
   3878 	mov	QWORD[((0+0))+rsp],r12
   3879 	mov	r10,r13
   3880 	mov	QWORD[((0+8))+rsp],r13
   3881 	cmovz	r11,r8
   3882 	mov	QWORD[((0+16))+rsp],r8
   3883 	lea	rsi,[((0-128))+rsp]
   3884 	cmovz	r12,r9
   3885 	mov	QWORD[((0+24))+rsp],r9
   3886 	mov	r9,r14
   3887 	lea	rdi,[rsp]
   3888 	call	__ecp_nistz256_mul_montx
   3889 
   3890 DB	102,72,15,126,203
   3891 DB	102,72,15,126,207
   3892 	call	__ecp_nistz256_sub_fromx
   3893 
   3894 	lea	rsi,[((160+56))+rsp]
   3895 
   3896 	mov	r15,QWORD[((-48))+rsi]
   3897 
   3898 	mov	r14,QWORD[((-40))+rsi]
   3899 
   3900 	mov	r13,QWORD[((-32))+rsi]
   3901 
   3902 	mov	r12,QWORD[((-24))+rsi]
   3903 
   3904 	mov	rbx,QWORD[((-16))+rsi]
   3905 
   3906 	mov	rbp,QWORD[((-8))+rsi]
   3907 
   3908 	lea	rsp,[rsi]
   3909 
   3910 $L$point_doublex_epilogue:
   3911 	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
   3912 	mov	rsi,QWORD[16+rsp]
   3913 	DB	0F3h,0C3h		;repret
   3914 
   3915 $L$SEH_end_ecp_nistz256_point_doublex:
   3916 
   3917 ALIGN	32
   3918 ecp_nistz256_point_addx:
   3919 	mov	QWORD[8+rsp],rdi	;WIN64 prologue
   3920 	mov	QWORD[16+rsp],rsi
   3921 	mov	rax,rsp
   3922 $L$SEH_begin_ecp_nistz256_point_addx:
   3923 	mov	rdi,rcx
   3924 	mov	rsi,rdx
   3925 	mov	rdx,r8
   3926 
   3927 
   3928 
   3929 $L$point_addx:
   3930 	push	rbp
   3931 
   3932 	push	rbx
   3933 
   3934 	push	r12
   3935 
   3936 	push	r13
   3937 
   3938 	push	r14
   3939 
   3940 	push	r15
   3941 
   3942 	sub	rsp,32*18+8
   3943 
   3944 $L$point_addx_body:
   3945 
   3946 	movdqu	xmm0,XMMWORD[rsi]
   3947 	movdqu	xmm1,XMMWORD[16+rsi]
   3948 	movdqu	xmm2,XMMWORD[32+rsi]
   3949 	movdqu	xmm3,XMMWORD[48+rsi]
   3950 	movdqu	xmm4,XMMWORD[64+rsi]
   3951 	movdqu	xmm5,XMMWORD[80+rsi]
   3952 	mov	rbx,rsi
   3953 	mov	rsi,rdx
   3954 	movdqa	XMMWORD[384+rsp],xmm0
   3955 	movdqa	XMMWORD[(384+16)+rsp],xmm1
   3956 	movdqa	XMMWORD[416+rsp],xmm2
   3957 	movdqa	XMMWORD[(416+16)+rsp],xmm3
   3958 	movdqa	XMMWORD[448+rsp],xmm4
   3959 	movdqa	XMMWORD[(448+16)+rsp],xmm5
   3960 	por	xmm5,xmm4
   3961 
   3962 	movdqu	xmm0,XMMWORD[rsi]
   3963 	pshufd	xmm3,xmm5,0xb1
   3964 	movdqu	xmm1,XMMWORD[16+rsi]
   3965 	movdqu	xmm2,XMMWORD[32+rsi]
   3966 	por	xmm5,xmm3
   3967 	movdqu	xmm3,XMMWORD[48+rsi]
   3968 	mov	rdx,QWORD[((64+0))+rsi]
   3969 	mov	r14,QWORD[((64+8))+rsi]
   3970 	mov	r15,QWORD[((64+16))+rsi]
   3971 	mov	r8,QWORD[((64+24))+rsi]
   3972 	movdqa	XMMWORD[480+rsp],xmm0
   3973 	pshufd	xmm4,xmm5,0x1e
   3974 	movdqa	XMMWORD[(480+16)+rsp],xmm1
   3975 	movdqu	xmm0,XMMWORD[64+rsi]
   3976 	movdqu	xmm1,XMMWORD[80+rsi]
   3977 	movdqa	XMMWORD[512+rsp],xmm2
   3978 	movdqa	XMMWORD[(512+16)+rsp],xmm3
   3979 	por	xmm5,xmm4
   3980 	pxor	xmm4,xmm4
   3981 	por	xmm1,xmm0
   3982 DB	102,72,15,110,199
   3983 
   3984 	lea	rsi,[((64-128))+rsi]
   3985 	mov	QWORD[((544+0))+rsp],rdx
   3986 	mov	QWORD[((544+8))+rsp],r14
   3987 	mov	QWORD[((544+16))+rsp],r15
   3988 	mov	QWORD[((544+24))+rsp],r8
   3989 	lea	rdi,[96+rsp]
   3990 	call	__ecp_nistz256_sqr_montx
   3991 
   3992 	pcmpeqd	xmm5,xmm4
   3993 	pshufd	xmm4,xmm1,0xb1
   3994 	por	xmm4,xmm1
   3995 	pshufd	xmm5,xmm5,0
   3996 	pshufd	xmm3,xmm4,0x1e
   3997 	por	xmm4,xmm3
   3998 	pxor	xmm3,xmm3
   3999 	pcmpeqd	xmm4,xmm3
   4000 	pshufd	xmm4,xmm4,0
   4001 	mov	rdx,QWORD[((64+0))+rbx]
   4002 	mov	r14,QWORD[((64+8))+rbx]
   4003 	mov	r15,QWORD[((64+16))+rbx]
   4004 	mov	r8,QWORD[((64+24))+rbx]
   4005 DB	102,72,15,110,203
   4006 
   4007 	lea	rsi,[((64-128))+rbx]
   4008 	lea	rdi,[32+rsp]
   4009 	call	__ecp_nistz256_sqr_montx
   4010 
   4011 	mov	rdx,QWORD[544+rsp]
   4012 	lea	rbx,[544+rsp]
   4013 	mov	r9,QWORD[((0+96))+rsp]
   4014 	mov	r10,QWORD[((8+96))+rsp]
   4015 	lea	rsi,[((-128+96))+rsp]
   4016 	mov	r11,QWORD[((16+96))+rsp]
   4017 	mov	r12,QWORD[((24+96))+rsp]
   4018 	lea	rdi,[224+rsp]
   4019 	call	__ecp_nistz256_mul_montx
   4020 
   4021 	mov	rdx,QWORD[448+rsp]
   4022 	lea	rbx,[448+rsp]
   4023 	mov	r9,QWORD[((0+32))+rsp]
   4024 	mov	r10,QWORD[((8+32))+rsp]
   4025 	lea	rsi,[((-128+32))+rsp]
   4026 	mov	r11,QWORD[((16+32))+rsp]
   4027 	mov	r12,QWORD[((24+32))+rsp]
   4028 	lea	rdi,[256+rsp]
   4029 	call	__ecp_nistz256_mul_montx
   4030 
   4031 	mov	rdx,QWORD[416+rsp]
   4032 	lea	rbx,[416+rsp]
   4033 	mov	r9,QWORD[((0+224))+rsp]
   4034 	mov	r10,QWORD[((8+224))+rsp]
   4035 	lea	rsi,[((-128+224))+rsp]
   4036 	mov	r11,QWORD[((16+224))+rsp]
   4037 	mov	r12,QWORD[((24+224))+rsp]
   4038 	lea	rdi,[224+rsp]
   4039 	call	__ecp_nistz256_mul_montx
   4040 
   4041 	mov	rdx,QWORD[512+rsp]
   4042 	lea	rbx,[512+rsp]
   4043 	mov	r9,QWORD[((0+256))+rsp]
   4044 	mov	r10,QWORD[((8+256))+rsp]
   4045 	lea	rsi,[((-128+256))+rsp]
   4046 	mov	r11,QWORD[((16+256))+rsp]
   4047 	mov	r12,QWORD[((24+256))+rsp]
   4048 	lea	rdi,[256+rsp]
   4049 	call	__ecp_nistz256_mul_montx
   4050 
   4051 	lea	rbx,[224+rsp]
   4052 	lea	rdi,[64+rsp]
   4053 	call	__ecp_nistz256_sub_fromx
   4054 
   4055 	or	r12,r13
   4056 	movdqa	xmm2,xmm4
   4057 	or	r12,r8
   4058 	or	r12,r9
   4059 	por	xmm2,xmm5
   4060 DB	102,73,15,110,220
   4061 
   4062 	mov	rdx,QWORD[384+rsp]
   4063 	lea	rbx,[384+rsp]
   4064 	mov	r9,QWORD[((0+96))+rsp]
   4065 	mov	r10,QWORD[((8+96))+rsp]
   4066 	lea	rsi,[((-128+96))+rsp]
   4067 	mov	r11,QWORD[((16+96))+rsp]
   4068 	mov	r12,QWORD[((24+96))+rsp]
   4069 	lea	rdi,[160+rsp]
   4070 	call	__ecp_nistz256_mul_montx
   4071 
   4072 	mov	rdx,QWORD[480+rsp]
   4073 	lea	rbx,[480+rsp]
   4074 	mov	r9,QWORD[((0+32))+rsp]
   4075 	mov	r10,QWORD[((8+32))+rsp]
   4076 	lea	rsi,[((-128+32))+rsp]
   4077 	mov	r11,QWORD[((16+32))+rsp]
   4078 	mov	r12,QWORD[((24+32))+rsp]
   4079 	lea	rdi,[192+rsp]
   4080 	call	__ecp_nistz256_mul_montx
   4081 
   4082 	lea	rbx,[160+rsp]
   4083 	lea	rdi,[rsp]
   4084 	call	__ecp_nistz256_sub_fromx
   4085 
   4086 	or	r12,r13
   4087 	or	r12,r8
   4088 	or	r12,r9
   4089 
   4090 DB	0x3e
   4091 	jnz	NEAR $L$add_proceedx
   4092 DB	102,73,15,126,208
   4093 DB	102,73,15,126,217
   4094 	test	r8,r8
   4095 	jnz	NEAR $L$add_proceedx
   4096 	test	r9,r9
   4097 	jz	NEAR $L$add_doublex
   4098 
   4099 DB	102,72,15,126,199
   4100 	pxor	xmm0,xmm0
   4101 	movdqu	XMMWORD[rdi],xmm0
   4102 	movdqu	XMMWORD[16+rdi],xmm0
   4103 	movdqu	XMMWORD[32+rdi],xmm0
   4104 	movdqu	XMMWORD[48+rdi],xmm0
   4105 	movdqu	XMMWORD[64+rdi],xmm0
   4106 	movdqu	XMMWORD[80+rdi],xmm0
   4107 	jmp	NEAR $L$add_donex
   4108 
   4109 ALIGN	32
   4110 $L$add_doublex:
   4111 DB	102,72,15,126,206
   4112 DB	102,72,15,126,199
   4113 	add	rsp,416
   4114 
   4115 	jmp	NEAR $L$point_double_shortcutx
   4116 
   4117 
   4118 ALIGN	32
   4119 $L$add_proceedx:
   4120 	mov	rdx,QWORD[((0+64))+rsp]
   4121 	mov	r14,QWORD[((8+64))+rsp]
   4122 	lea	rsi,[((-128+64))+rsp]
   4123 	mov	r15,QWORD[((16+64))+rsp]
   4124 	mov	r8,QWORD[((24+64))+rsp]
   4125 	lea	rdi,[96+rsp]
   4126 	call	__ecp_nistz256_sqr_montx
   4127 
   4128 	mov	rdx,QWORD[448+rsp]
   4129 	lea	rbx,[448+rsp]
   4130 	mov	r9,QWORD[((0+0))+rsp]
   4131 	mov	r10,QWORD[((8+0))+rsp]
   4132 	lea	rsi,[((-128+0))+rsp]
   4133 	mov	r11,QWORD[((16+0))+rsp]
   4134 	mov	r12,QWORD[((24+0))+rsp]
   4135 	lea	rdi,[352+rsp]
   4136 	call	__ecp_nistz256_mul_montx
   4137 
   4138 	mov	rdx,QWORD[((0+0))+rsp]
   4139 	mov	r14,QWORD[((8+0))+rsp]
   4140 	lea	rsi,[((-128+0))+rsp]
   4141 	mov	r15,QWORD[((16+0))+rsp]
   4142 	mov	r8,QWORD[((24+0))+rsp]
   4143 	lea	rdi,[32+rsp]
   4144 	call	__ecp_nistz256_sqr_montx
   4145 
   4146 	mov	rdx,QWORD[544+rsp]
   4147 	lea	rbx,[544+rsp]
   4148 	mov	r9,QWORD[((0+352))+rsp]
   4149 	mov	r10,QWORD[((8+352))+rsp]
   4150 	lea	rsi,[((-128+352))+rsp]
   4151 	mov	r11,QWORD[((16+352))+rsp]
   4152 	mov	r12,QWORD[((24+352))+rsp]
   4153 	lea	rdi,[352+rsp]
   4154 	call	__ecp_nistz256_mul_montx
   4155 
   4156 	mov	rdx,QWORD[rsp]
   4157 	lea	rbx,[rsp]
   4158 	mov	r9,QWORD[((0+32))+rsp]
   4159 	mov	r10,QWORD[((8+32))+rsp]
   4160 	lea	rsi,[((-128+32))+rsp]
   4161 	mov	r11,QWORD[((16+32))+rsp]
   4162 	mov	r12,QWORD[((24+32))+rsp]
   4163 	lea	rdi,[128+rsp]
   4164 	call	__ecp_nistz256_mul_montx
   4165 
   4166 	mov	rdx,QWORD[160+rsp]
   4167 	lea	rbx,[160+rsp]
   4168 	mov	r9,QWORD[((0+32))+rsp]
   4169 	mov	r10,QWORD[((8+32))+rsp]
   4170 	lea	rsi,[((-128+32))+rsp]
   4171 	mov	r11,QWORD[((16+32))+rsp]
   4172 	mov	r12,QWORD[((24+32))+rsp]
   4173 	lea	rdi,[192+rsp]
   4174 	call	__ecp_nistz256_mul_montx
   4175 
   4176 
   4177 
   4178 
   4179 	xor	r11,r11
   4180 	add	r12,r12
   4181 	lea	rsi,[96+rsp]
   4182 	adc	r13,r13
   4183 	mov	rax,r12
   4184 	adc	r8,r8
   4185 	adc	r9,r9
   4186 	mov	rbp,r13
   4187 	adc	r11,0
   4188 
   4189 	sub	r12,-1
   4190 	mov	rcx,r8
   4191 	sbb	r13,r14
   4192 	sbb	r8,0
   4193 	mov	r10,r9
   4194 	sbb	r9,r15
   4195 	sbb	r11,0
   4196 
   4197 	cmovc	r12,rax
   4198 	mov	rax,QWORD[rsi]
   4199 	cmovc	r13,rbp
   4200 	mov	rbp,QWORD[8+rsi]
   4201 	cmovc	r8,rcx
   4202 	mov	rcx,QWORD[16+rsi]
   4203 	cmovc	r9,r10
   4204 	mov	r10,QWORD[24+rsi]
   4205 
   4206 	call	__ecp_nistz256_subx
   4207 
   4208 	lea	rbx,[128+rsp]
   4209 	lea	rdi,[288+rsp]
   4210 	call	__ecp_nistz256_sub_fromx
   4211 
   4212 	mov	rax,QWORD[((192+0))+rsp]
   4213 	mov	rbp,QWORD[((192+8))+rsp]
   4214 	mov	rcx,QWORD[((192+16))+rsp]
   4215 	mov	r10,QWORD[((192+24))+rsp]
   4216 	lea	rdi,[320+rsp]
   4217 
   4218 	call	__ecp_nistz256_subx
   4219 
   4220 	mov	QWORD[rdi],r12
   4221 	mov	QWORD[8+rdi],r13
   4222 	mov	QWORD[16+rdi],r8
   4223 	mov	QWORD[24+rdi],r9
   4224 	mov	rdx,QWORD[128+rsp]
   4225 	lea	rbx,[128+rsp]
   4226 	mov	r9,QWORD[((0+224))+rsp]
   4227 	mov	r10,QWORD[((8+224))+rsp]
   4228 	lea	rsi,[((-128+224))+rsp]
   4229 	mov	r11,QWORD[((16+224))+rsp]
   4230 	mov	r12,QWORD[((24+224))+rsp]
   4231 	lea	rdi,[256+rsp]
   4232 	call	__ecp_nistz256_mul_montx
   4233 
   4234 	mov	rdx,QWORD[320+rsp]
   4235 	lea	rbx,[320+rsp]
   4236 	mov	r9,QWORD[((0+64))+rsp]
   4237 	mov	r10,QWORD[((8+64))+rsp]
   4238 	lea	rsi,[((-128+64))+rsp]
   4239 	mov	r11,QWORD[((16+64))+rsp]
   4240 	mov	r12,QWORD[((24+64))+rsp]
   4241 	lea	rdi,[320+rsp]
   4242 	call	__ecp_nistz256_mul_montx
   4243 
   4244 	lea	rbx,[256+rsp]
   4245 	lea	rdi,[320+rsp]
   4246 	call	__ecp_nistz256_sub_fromx
   4247 
   4248 DB	102,72,15,126,199
   4249 
   4250 	movdqa	xmm0,xmm5
   4251 	movdqa	xmm1,xmm5
   4252 	pandn	xmm0,XMMWORD[352+rsp]
   4253 	movdqa	xmm2,xmm5
   4254 	pandn	xmm1,XMMWORD[((352+16))+rsp]
   4255 	movdqa	xmm3,xmm5
   4256 	pand	xmm2,XMMWORD[544+rsp]
   4257 	pand	xmm3,XMMWORD[((544+16))+rsp]
   4258 	por	xmm2,xmm0
   4259 	por	xmm3,xmm1
   4260 
   4261 	movdqa	xmm0,xmm4
   4262 	movdqa	xmm1,xmm4
   4263 	pandn	xmm0,xmm2
   4264 	movdqa	xmm2,xmm4
   4265 	pandn	xmm1,xmm3
   4266 	movdqa	xmm3,xmm4
   4267 	pand	xmm2,XMMWORD[448+rsp]
   4268 	pand	xmm3,XMMWORD[((448+16))+rsp]
   4269 	por	xmm2,xmm0
   4270 	por	xmm3,xmm1
   4271 	movdqu	XMMWORD[64+rdi],xmm2
   4272 	movdqu	XMMWORD[80+rdi],xmm3
   4273 
   4274 	movdqa	xmm0,xmm5
   4275 	movdqa	xmm1,xmm5
   4276 	pandn	xmm0,XMMWORD[288+rsp]
   4277 	movdqa	xmm2,xmm5
   4278 	pandn	xmm1,XMMWORD[((288+16))+rsp]
   4279 	movdqa	xmm3,xmm5
   4280 	pand	xmm2,XMMWORD[480+rsp]
   4281 	pand	xmm3,XMMWORD[((480+16))+rsp]
   4282 	por	xmm2,xmm0
   4283 	por	xmm3,xmm1
   4284 
   4285 	movdqa	xmm0,xmm4
   4286 	movdqa	xmm1,xmm4
   4287 	pandn	xmm0,xmm2
   4288 	movdqa	xmm2,xmm4
   4289 	pandn	xmm1,xmm3
   4290 	movdqa	xmm3,xmm4
   4291 	pand	xmm2,XMMWORD[384+rsp]
   4292 	pand	xmm3,XMMWORD[((384+16))+rsp]
   4293 	por	xmm2,xmm0
   4294 	por	xmm3,xmm1
   4295 	movdqu	XMMWORD[rdi],xmm2
   4296 	movdqu	XMMWORD[16+rdi],xmm3
   4297 
   4298 	movdqa	xmm0,xmm5
   4299 	movdqa	xmm1,xmm5
   4300 	pandn	xmm0,XMMWORD[320+rsp]
   4301 	movdqa	xmm2,xmm5
   4302 	pandn	xmm1,XMMWORD[((320+16))+rsp]
   4303 	movdqa	xmm3,xmm5
   4304 	pand	xmm2,XMMWORD[512+rsp]
   4305 	pand	xmm3,XMMWORD[((512+16))+rsp]
   4306 	por	xmm2,xmm0
   4307 	por	xmm3,xmm1
   4308 
   4309 	movdqa	xmm0,xmm4
   4310 	movdqa	xmm1,xmm4
   4311 	pandn	xmm0,xmm2
   4312 	movdqa	xmm2,xmm4
   4313 	pandn	xmm1,xmm3
   4314 	movdqa	xmm3,xmm4
   4315 	pand	xmm2,XMMWORD[416+rsp]
   4316 	pand	xmm3,XMMWORD[((416+16))+rsp]
   4317 	por	xmm2,xmm0
   4318 	por	xmm3,xmm1
   4319 	movdqu	XMMWORD[32+rdi],xmm2
   4320 	movdqu	XMMWORD[48+rdi],xmm3
   4321 
   4322 $L$add_donex:
   4323 	lea	rsi,[((576+56))+rsp]
   4324 
   4325 	mov	r15,QWORD[((-48))+rsi]
   4326 
   4327 	mov	r14,QWORD[((-40))+rsi]
   4328 
   4329 	mov	r13,QWORD[((-32))+rsi]
   4330 
   4331 	mov	r12,QWORD[((-24))+rsi]
   4332 
   4333 	mov	rbx,QWORD[((-16))+rsi]
   4334 
   4335 	mov	rbp,QWORD[((-8))+rsi]
   4336 
   4337 	lea	rsp,[rsi]
   4338 
   4339 $L$point_addx_epilogue:
   4340 	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
   4341 	mov	rsi,QWORD[16+rsp]
   4342 	DB	0F3h,0C3h		;repret
   4343 
   4344 $L$SEH_end_ecp_nistz256_point_addx:
   4345 
   4346 ALIGN	32
   4347 ecp_nistz256_point_add_affinex:
   4348 	mov	QWORD[8+rsp],rdi	;WIN64 prologue
   4349 	mov	QWORD[16+rsp],rsi
   4350 	mov	rax,rsp
   4351 $L$SEH_begin_ecp_nistz256_point_add_affinex:
   4352 	mov	rdi,rcx
   4353 	mov	rsi,rdx
   4354 	mov	rdx,r8
   4355 
   4356 
   4357 
   4358 $L$point_add_affinex:
   4359 	push	rbp
   4360 
   4361 	push	rbx
   4362 
   4363 	push	r12
   4364 
   4365 	push	r13
   4366 
   4367 	push	r14
   4368 
   4369 	push	r15
   4370 
   4371 	sub	rsp,32*15+8
   4372 
   4373 $L$add_affinex_body:
   4374 
   4375 	movdqu	xmm0,XMMWORD[rsi]
   4376 	mov	rbx,rdx
   4377 	movdqu	xmm1,XMMWORD[16+rsi]
   4378 	movdqu	xmm2,XMMWORD[32+rsi]
   4379 	movdqu	xmm3,XMMWORD[48+rsi]
   4380 	movdqu	xmm4,XMMWORD[64+rsi]
   4381 	movdqu	xmm5,XMMWORD[80+rsi]
   4382 	mov	rdx,QWORD[((64+0))+rsi]
   4383 	mov	r14,QWORD[((64+8))+rsi]
   4384 	mov	r15,QWORD[((64+16))+rsi]
   4385 	mov	r8,QWORD[((64+24))+rsi]
   4386 	movdqa	XMMWORD[320+rsp],xmm0
   4387 	movdqa	XMMWORD[(320+16)+rsp],xmm1
   4388 	movdqa	XMMWORD[352+rsp],xmm2
   4389 	movdqa	XMMWORD[(352+16)+rsp],xmm3
   4390 	movdqa	XMMWORD[384+rsp],xmm4
   4391 	movdqa	XMMWORD[(384+16)+rsp],xmm5
   4392 	por	xmm5,xmm4
   4393 
   4394 	movdqu	xmm0,XMMWORD[rbx]
   4395 	pshufd	xmm3,xmm5,0xb1
   4396 	movdqu	xmm1,XMMWORD[16+rbx]
   4397 	movdqu	xmm2,XMMWORD[32+rbx]
   4398 	por	xmm5,xmm3
   4399 	movdqu	xmm3,XMMWORD[48+rbx]
   4400 	movdqa	XMMWORD[416+rsp],xmm0
   4401 	pshufd	xmm4,xmm5,0x1e
   4402 	movdqa	XMMWORD[(416+16)+rsp],xmm1
   4403 	por	xmm1,xmm0
   4404 DB	102,72,15,110,199
   4405 	movdqa	XMMWORD[448+rsp],xmm2
   4406 	movdqa	XMMWORD[(448+16)+rsp],xmm3
   4407 	por	xmm3,xmm2
   4408 	por	xmm5,xmm4
   4409 	pxor	xmm4,xmm4
   4410 	por	xmm3,xmm1
   4411 
   4412 	lea	rsi,[((64-128))+rsi]
   4413 	lea	rdi,[32+rsp]
   4414 	call	__ecp_nistz256_sqr_montx
   4415 
   4416 	pcmpeqd	xmm5,xmm4
   4417 	pshufd	xmm4,xmm3,0xb1
   4418 	mov	rdx,QWORD[rbx]
   4419 
   4420 	mov	r9,r12
   4421 	por	xmm4,xmm3
   4422 	pshufd	xmm5,xmm5,0
   4423 	pshufd	xmm3,xmm4,0x1e
   4424 	mov	r10,r13
   4425 	por	xmm4,xmm3
   4426 	pxor	xmm3,xmm3
   4427 	mov	r11,r14
   4428 	pcmpeqd	xmm4,xmm3
   4429 	pshufd	xmm4,xmm4,0
   4430 
   4431 	lea	rsi,[((32-128))+rsp]
   4432 	mov	r12,r15
   4433 	lea	rdi,[rsp]
   4434 	call	__ecp_nistz256_mul_montx
   4435 
   4436 	lea	rbx,[320+rsp]
   4437 	lea	rdi,[64+rsp]
   4438 	call	__ecp_nistz256_sub_fromx
   4439 
   4440 	mov	rdx,QWORD[384+rsp]
   4441 	lea	rbx,[384+rsp]
   4442 	mov	r9,QWORD[((0+32))+rsp]
   4443 	mov	r10,QWORD[((8+32))+rsp]
   4444 	lea	rsi,[((-128+32))+rsp]
   4445 	mov	r11,QWORD[((16+32))+rsp]
   4446 	mov	r12,QWORD[((24+32))+rsp]
   4447 	lea	rdi,[32+rsp]
   4448 	call	__ecp_nistz256_mul_montx
   4449 
   4450 	mov	rdx,QWORD[384+rsp]
   4451 	lea	rbx,[384+rsp]
   4452 	mov	r9,QWORD[((0+64))+rsp]
   4453 	mov	r10,QWORD[((8+64))+rsp]
   4454 	lea	rsi,[((-128+64))+rsp]
   4455 	mov	r11,QWORD[((16+64))+rsp]
   4456 	mov	r12,QWORD[((24+64))+rsp]
   4457 	lea	rdi,[288+rsp]
   4458 	call	__ecp_nistz256_mul_montx
   4459 
   4460 	mov	rdx,QWORD[448+rsp]
   4461 	lea	rbx,[448+rsp]
   4462 	mov	r9,QWORD[((0+32))+rsp]
   4463 	mov	r10,QWORD[((8+32))+rsp]
   4464 	lea	rsi,[((-128+32))+rsp]
   4465 	mov	r11,QWORD[((16+32))+rsp]
   4466 	mov	r12,QWORD[((24+32))+rsp]
   4467 	lea	rdi,[32+rsp]
   4468 	call	__ecp_nistz256_mul_montx
   4469 
   4470 	lea	rbx,[352+rsp]
   4471 	lea	rdi,[96+rsp]
   4472 	call	__ecp_nistz256_sub_fromx
   4473 
   4474 	mov	rdx,QWORD[((0+64))+rsp]
   4475 	mov	r14,QWORD[((8+64))+rsp]
   4476 	lea	rsi,[((-128+64))+rsp]
   4477 	mov	r15,QWORD[((16+64))+rsp]
   4478 	mov	r8,QWORD[((24+64))+rsp]
   4479 	lea	rdi,[128+rsp]
   4480 	call	__ecp_nistz256_sqr_montx
   4481 
   4482 	mov	rdx,QWORD[((0+96))+rsp]
   4483 	mov	r14,QWORD[((8+96))+rsp]
   4484 	lea	rsi,[((-128+96))+rsp]
   4485 	mov	r15,QWORD[((16+96))+rsp]
   4486 	mov	r8,QWORD[((24+96))+rsp]
   4487 	lea	rdi,[192+rsp]
   4488 	call	__ecp_nistz256_sqr_montx
   4489 
   4490 	mov	rdx,QWORD[128+rsp]
   4491 	lea	rbx,[128+rsp]
   4492 	mov	r9,QWORD[((0+64))+rsp]
   4493 	mov	r10,QWORD[((8+64))+rsp]
   4494 	lea	rsi,[((-128+64))+rsp]
   4495 	mov	r11,QWORD[((16+64))+rsp]
   4496 	mov	r12,QWORD[((24+64))+rsp]
   4497 	lea	rdi,[160+rsp]
   4498 	call	__ecp_nistz256_mul_montx
   4499 
   4500 	mov	rdx,QWORD[320+rsp]
   4501 	lea	rbx,[320+rsp]
   4502 	mov	r9,QWORD[((0+128))+rsp]
   4503 	mov	r10,QWORD[((8+128))+rsp]
   4504 	lea	rsi,[((-128+128))+rsp]
   4505 	mov	r11,QWORD[((16+128))+rsp]
   4506 	mov	r12,QWORD[((24+128))+rsp]
   4507 	lea	rdi,[rsp]
   4508 	call	__ecp_nistz256_mul_montx
   4509 
   4510 
   4511 
   4512 
   4513 	xor	r11,r11
   4514 	add	r12,r12
   4515 	lea	rsi,[192+rsp]
   4516 	adc	r13,r13
   4517 	mov	rax,r12
   4518 	adc	r8,r8
   4519 	adc	r9,r9
   4520 	mov	rbp,r13
   4521 	adc	r11,0
   4522 
   4523 	sub	r12,-1
   4524 	mov	rcx,r8
   4525 	sbb	r13,r14
   4526 	sbb	r8,0
   4527 	mov	r10,r9
   4528 	sbb	r9,r15
   4529 	sbb	r11,0
   4530 
   4531 	cmovc	r12,rax
   4532 	mov	rax,QWORD[rsi]
   4533 	cmovc	r13,rbp
   4534 	mov	rbp,QWORD[8+rsi]
   4535 	cmovc	r8,rcx
   4536 	mov	rcx,QWORD[16+rsi]
   4537 	cmovc	r9,r10
   4538 	mov	r10,QWORD[24+rsi]
   4539 
   4540 	call	__ecp_nistz256_subx
   4541 
   4542 	lea	rbx,[160+rsp]
   4543 	lea	rdi,[224+rsp]
   4544 	call	__ecp_nistz256_sub_fromx
   4545 
   4546 	mov	rax,QWORD[((0+0))+rsp]
   4547 	mov	rbp,QWORD[((0+8))+rsp]
   4548 	mov	rcx,QWORD[((0+16))+rsp]
   4549 	mov	r10,QWORD[((0+24))+rsp]
   4550 	lea	rdi,[64+rsp]
   4551 
   4552 	call	__ecp_nistz256_subx
   4553 
   4554 	mov	QWORD[rdi],r12
   4555 	mov	QWORD[8+rdi],r13
   4556 	mov	QWORD[16+rdi],r8
   4557 	mov	QWORD[24+rdi],r9
   4558 	mov	rdx,QWORD[352+rsp]
   4559 	lea	rbx,[352+rsp]
   4560 	mov	r9,QWORD[((0+160))+rsp]
   4561 	mov	r10,QWORD[((8+160))+rsp]
   4562 	lea	rsi,[((-128+160))+rsp]
   4563 	mov	r11,QWORD[((16+160))+rsp]
   4564 	mov	r12,QWORD[((24+160))+rsp]
   4565 	lea	rdi,[32+rsp]
   4566 	call	__ecp_nistz256_mul_montx
   4567 
   4568 	mov	rdx,QWORD[96+rsp]
   4569 	lea	rbx,[96+rsp]
   4570 	mov	r9,QWORD[((0+64))+rsp]
   4571 	mov	r10,QWORD[((8+64))+rsp]
   4572 	lea	rsi,[((-128+64))+rsp]
   4573 	mov	r11,QWORD[((16+64))+rsp]
   4574 	mov	r12,QWORD[((24+64))+rsp]
   4575 	lea	rdi,[64+rsp]
   4576 	call	__ecp_nistz256_mul_montx
   4577 
   4578 	lea	rbx,[32+rsp]
   4579 	lea	rdi,[256+rsp]
   4580 	call	__ecp_nistz256_sub_fromx
   4581 
   4582 DB	102,72,15,126,199
   4583 
   4584 	movdqa	xmm0,xmm5
   4585 	movdqa	xmm1,xmm5
   4586 	pandn	xmm0,XMMWORD[288+rsp]
   4587 	movdqa	xmm2,xmm5
   4588 	pandn	xmm1,XMMWORD[((288+16))+rsp]
   4589 	movdqa	xmm3,xmm5
   4590 	pand	xmm2,XMMWORD[$L$ONE_mont]
   4591 	pand	xmm3,XMMWORD[(($L$ONE_mont+16))]
   4592 	por	xmm2,xmm0
   4593 	por	xmm3,xmm1
   4594 
   4595 	movdqa	xmm0,xmm4
   4596 	movdqa	xmm1,xmm4
   4597 	pandn	xmm0,xmm2
   4598 	movdqa	xmm2,xmm4
   4599 	pandn	xmm1,xmm3
   4600 	movdqa	xmm3,xmm4
   4601 	pand	xmm2,XMMWORD[384+rsp]
   4602 	pand	xmm3,XMMWORD[((384+16))+rsp]
   4603 	por	xmm2,xmm0
   4604 	por	xmm3,xmm1
   4605 	movdqu	XMMWORD[64+rdi],xmm2
   4606 	movdqu	XMMWORD[80+rdi],xmm3
   4607 
   4608 	movdqa	xmm0,xmm5
   4609 	movdqa	xmm1,xmm5
   4610 	pandn	xmm0,XMMWORD[224+rsp]
   4611 	movdqa	xmm2,xmm5
   4612 	pandn	xmm1,XMMWORD[((224+16))+rsp]
   4613 	movdqa	xmm3,xmm5
   4614 	pand	xmm2,XMMWORD[416+rsp]
   4615 	pand	xmm3,XMMWORD[((416+16))+rsp]
   4616 	por	xmm2,xmm0
   4617 	por	xmm3,xmm1
   4618 
   4619 	movdqa	xmm0,xmm4
   4620 	movdqa	xmm1,xmm4
   4621 	pandn	xmm0,xmm2
   4622 	movdqa	xmm2,xmm4
   4623 	pandn	xmm1,xmm3
   4624 	movdqa	xmm3,xmm4
   4625 	pand	xmm2,XMMWORD[320+rsp]
   4626 	pand	xmm3,XMMWORD[((320+16))+rsp]
   4627 	por	xmm2,xmm0
   4628 	por	xmm3,xmm1
   4629 	movdqu	XMMWORD[rdi],xmm2
   4630 	movdqu	XMMWORD[16+rdi],xmm3
   4631 
   4632 	movdqa	xmm0,xmm5
   4633 	movdqa	xmm1,xmm5
   4634 	pandn	xmm0,XMMWORD[256+rsp]
   4635 	movdqa	xmm2,xmm5
   4636 	pandn	xmm1,XMMWORD[((256+16))+rsp]
   4637 	movdqa	xmm3,xmm5
   4638 	pand	xmm2,XMMWORD[448+rsp]
   4639 	pand	xmm3,XMMWORD[((448+16))+rsp]
   4640 	por	xmm2,xmm0
   4641 	por	xmm3,xmm1
   4642 
   4643 	movdqa	xmm0,xmm4
   4644 	movdqa	xmm1,xmm4
   4645 	pandn	xmm0,xmm2
   4646 	movdqa	xmm2,xmm4
   4647 	pandn	xmm1,xmm3
   4648 	movdqa	xmm3,xmm4
   4649 	pand	xmm2,XMMWORD[352+rsp]
   4650 	pand	xmm3,XMMWORD[((352+16))+rsp]
   4651 	por	xmm2,xmm0
   4652 	por	xmm3,xmm1
   4653 	movdqu	XMMWORD[32+rdi],xmm2
   4654 	movdqu	XMMWORD[48+rdi],xmm3
   4655 
   4656 	lea	rsi,[((480+56))+rsp]
   4657 
   4658 	mov	r15,QWORD[((-48))+rsi]
   4659 
   4660 	mov	r14,QWORD[((-40))+rsi]
   4661 
   4662 	mov	r13,QWORD[((-32))+rsi]
   4663 
   4664 	mov	r12,QWORD[((-24))+rsi]
   4665 
   4666 	mov	rbx,QWORD[((-16))+rsi]
   4667 
   4668 	mov	rbp,QWORD[((-8))+rsi]
   4669 
   4670 	lea	rsp,[rsi]
   4671 
   4672 $L$add_affinex_epilogue:
   4673 	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
   4674 	mov	rsi,QWORD[16+rsp]
   4675 	DB	0F3h,0C3h		;repret
   4676 
   4677 $L$SEH_end_ecp_nistz256_point_add_affinex:
   4678 EXTERN	__imp_RtlVirtualUnwind
   4679 
   4680 
   4681 ALIGN	16
   4682 short_handler:
   4683 	push	rsi
   4684 	push	rdi
   4685 	push	rbx
   4686 	push	rbp
   4687 	push	r12
   4688 	push	r13
   4689 	push	r14
   4690 	push	r15
   4691 	pushfq
   4692 	sub	rsp,64
   4693 
   4694 	mov	rax,QWORD[120+r8]
   4695 	mov	rbx,QWORD[248+r8]
   4696 
   4697 	mov	rsi,QWORD[8+r9]
   4698 	mov	r11,QWORD[56+r9]
   4699 
   4700 	mov	r10d,DWORD[r11]
   4701 	lea	r10,[r10*1+rsi]
   4702 	cmp	rbx,r10
   4703 	jb	NEAR $L$common_seh_tail
   4704 
   4705 	mov	rax,QWORD[152+r8]
   4706 
   4707 	mov	r10d,DWORD[4+r11]
   4708 	lea	r10,[r10*1+rsi]
   4709 	cmp	rbx,r10
   4710 	jae	NEAR $L$common_seh_tail
   4711 
   4712 	lea	rax,[16+rax]
   4713 
   4714 	mov	r12,QWORD[((-8))+rax]
   4715 	mov	r13,QWORD[((-16))+rax]
   4716 	mov	QWORD[216+r8],r12
   4717 	mov	QWORD[224+r8],r13
   4718 
   4719 	jmp	NEAR $L$common_seh_tail
   4720 
   4721 
   4722 
   4723 ALIGN	16
   4724 full_handler:
   4725 	push	rsi
   4726 	push	rdi
   4727 	push	rbx
   4728 	push	rbp
   4729 	push	r12
   4730 	push	r13
   4731 	push	r14
   4732 	push	r15
   4733 	pushfq
   4734 	sub	rsp,64
   4735 
   4736 	mov	rax,QWORD[120+r8]
   4737 	mov	rbx,QWORD[248+r8]
   4738 
   4739 	mov	rsi,QWORD[8+r9]
   4740 	mov	r11,QWORD[56+r9]
   4741 
   4742 	mov	r10d,DWORD[r11]
   4743 	lea	r10,[r10*1+rsi]
   4744 	cmp	rbx,r10
   4745 	jb	NEAR $L$common_seh_tail
   4746 
   4747 	mov	rax,QWORD[152+r8]
   4748 
   4749 	mov	r10d,DWORD[4+r11]
   4750 	lea	r10,[r10*1+rsi]
   4751 	cmp	rbx,r10
   4752 	jae	NEAR $L$common_seh_tail
   4753 
   4754 	mov	r10d,DWORD[8+r11]
   4755 	lea	rax,[r10*1+rax]
   4756 
   4757 	mov	rbp,QWORD[((-8))+rax]
   4758 	mov	rbx,QWORD[((-16))+rax]
   4759 	mov	r12,QWORD[((-24))+rax]
   4760 	mov	r13,QWORD[((-32))+rax]
   4761 	mov	r14,QWORD[((-40))+rax]
   4762 	mov	r15,QWORD[((-48))+rax]
   4763 	mov	QWORD[144+r8],rbx
   4764 	mov	QWORD[160+r8],rbp
   4765 	mov	QWORD[216+r8],r12
   4766 	mov	QWORD[224+r8],r13
   4767 	mov	QWORD[232+r8],r14
   4768 	mov	QWORD[240+r8],r15
   4769 
   4770 $L$common_seh_tail:
   4771 	mov	rdi,QWORD[8+rax]
   4772 	mov	rsi,QWORD[16+rax]
   4773 	mov	QWORD[152+r8],rax
   4774 	mov	QWORD[168+r8],rsi
   4775 	mov	QWORD[176+r8],rdi
   4776 
   4777 	mov	rdi,QWORD[40+r9]
   4778 	mov	rsi,r8
   4779 	mov	ecx,154
   4780 	DD	0xa548f3fc
   4781 
   4782 	mov	rsi,r9
   4783 	xor	rcx,rcx
   4784 	mov	rdx,QWORD[8+rsi]
   4785 	mov	r8,QWORD[rsi]
   4786 	mov	r9,QWORD[16+rsi]
   4787 	mov	r10,QWORD[40+rsi]
   4788 	lea	r11,[56+rsi]
   4789 	lea	r12,[24+rsi]
   4790 	mov	QWORD[32+rsp],r10
   4791 	mov	QWORD[40+rsp],r11
   4792 	mov	QWORD[48+rsp],r12
   4793 	mov	QWORD[56+rsp],rcx
   4794 	call	QWORD[__imp_RtlVirtualUnwind]
   4795 
   4796 	mov	eax,1
   4797 	add	rsp,64
   4798 	popfq
   4799 	pop	r15
   4800 	pop	r14
   4801 	pop	r13
   4802 	pop	r12
   4803 	pop	rbp
   4804 	pop	rbx
   4805 	pop	rdi
   4806 	pop	rsi
   4807 	DB	0F3h,0C3h		;repret
   4808 
   4809 
   4810 section	.pdata rdata align=4
   4811 ALIGN	4
   4812 	DD	$L$SEH_begin_ecp_nistz256_neg wrt ..imagebase
   4813 	DD	$L$SEH_end_ecp_nistz256_neg wrt ..imagebase
   4814 	DD	$L$SEH_info_ecp_nistz256_neg wrt ..imagebase
   4815 
   4816 	DD	$L$SEH_begin_ecp_nistz256_ord_mul_mont wrt ..imagebase
   4817 	DD	$L$SEH_end_ecp_nistz256_ord_mul_mont wrt ..imagebase
   4818 	DD	$L$SEH_info_ecp_nistz256_ord_mul_mont wrt ..imagebase
   4819 
   4820 	DD	$L$SEH_begin_ecp_nistz256_ord_sqr_mont wrt ..imagebase
   4821 	DD	$L$SEH_end_ecp_nistz256_ord_sqr_mont wrt ..imagebase
   4822 	DD	$L$SEH_info_ecp_nistz256_ord_sqr_mont wrt ..imagebase
   4823 	DD	$L$SEH_begin_ecp_nistz256_ord_mul_montx wrt ..imagebase
   4824 	DD	$L$SEH_end_ecp_nistz256_ord_mul_montx wrt ..imagebase
   4825 	DD	$L$SEH_info_ecp_nistz256_ord_mul_montx wrt ..imagebase
   4826 
   4827 	DD	$L$SEH_begin_ecp_nistz256_ord_sqr_montx wrt ..imagebase
   4828 	DD	$L$SEH_end_ecp_nistz256_ord_sqr_montx wrt ..imagebase
   4829 	DD	$L$SEH_info_ecp_nistz256_ord_sqr_montx wrt ..imagebase
   4830 	DD	$L$SEH_begin_ecp_nistz256_mul_mont wrt ..imagebase
   4831 	DD	$L$SEH_end_ecp_nistz256_mul_mont wrt ..imagebase
   4832 	DD	$L$SEH_info_ecp_nistz256_mul_mont wrt ..imagebase
   4833 
   4834 	DD	$L$SEH_begin_ecp_nistz256_sqr_mont wrt ..imagebase
   4835 	DD	$L$SEH_end_ecp_nistz256_sqr_mont wrt ..imagebase
   4836 	DD	$L$SEH_info_ecp_nistz256_sqr_mont wrt ..imagebase
   4837 
   4838 	DD	$L$SEH_begin_ecp_nistz256_select_w5 wrt ..imagebase
   4839 	DD	$L$SEH_end_ecp_nistz256_select_w5 wrt ..imagebase
   4840 	DD	$L$SEH_info_ecp_nistz256_select_wX wrt ..imagebase
   4841 
   4842 	DD	$L$SEH_begin_ecp_nistz256_select_w7 wrt ..imagebase
   4843 	DD	$L$SEH_end_ecp_nistz256_select_w7 wrt ..imagebase
   4844 	DD	$L$SEH_info_ecp_nistz256_select_wX wrt ..imagebase
   4845 	DD	$L$SEH_begin_ecp_nistz256_avx2_select_w5 wrt ..imagebase
   4846 	DD	$L$SEH_end_ecp_nistz256_avx2_select_w5 wrt ..imagebase
   4847 	DD	$L$SEH_info_ecp_nistz256_avx2_select_wX wrt ..imagebase
   4848 
   4849 	DD	$L$SEH_begin_ecp_nistz256_avx2_select_w7 wrt ..imagebase
   4850 	DD	$L$SEH_end_ecp_nistz256_avx2_select_w7 wrt ..imagebase
   4851 	DD	$L$SEH_info_ecp_nistz256_avx2_select_wX wrt ..imagebase
   4852 	DD	$L$SEH_begin_ecp_nistz256_point_double wrt ..imagebase
   4853 	DD	$L$SEH_end_ecp_nistz256_point_double wrt ..imagebase
   4854 	DD	$L$SEH_info_ecp_nistz256_point_double wrt ..imagebase
   4855 
   4856 	DD	$L$SEH_begin_ecp_nistz256_point_add wrt ..imagebase
   4857 	DD	$L$SEH_end_ecp_nistz256_point_add wrt ..imagebase
   4858 	DD	$L$SEH_info_ecp_nistz256_point_add wrt ..imagebase
   4859 
   4860 	DD	$L$SEH_begin_ecp_nistz256_point_add_affine wrt ..imagebase
   4861 	DD	$L$SEH_end_ecp_nistz256_point_add_affine wrt ..imagebase
   4862 	DD	$L$SEH_info_ecp_nistz256_point_add_affine wrt ..imagebase
   4863 	DD	$L$SEH_begin_ecp_nistz256_point_doublex wrt ..imagebase
   4864 	DD	$L$SEH_end_ecp_nistz256_point_doublex wrt ..imagebase
   4865 	DD	$L$SEH_info_ecp_nistz256_point_doublex wrt ..imagebase
   4866 
   4867 	DD	$L$SEH_begin_ecp_nistz256_point_addx wrt ..imagebase
   4868 	DD	$L$SEH_end_ecp_nistz256_point_addx wrt ..imagebase
   4869 	DD	$L$SEH_info_ecp_nistz256_point_addx wrt ..imagebase
   4870 
   4871 	DD	$L$SEH_begin_ecp_nistz256_point_add_affinex wrt ..imagebase
   4872 	DD	$L$SEH_end_ecp_nistz256_point_add_affinex wrt ..imagebase
   4873 	DD	$L$SEH_info_ecp_nistz256_point_add_affinex wrt ..imagebase
   4874 
   4875 section	.xdata rdata align=8
   4876 ALIGN	8
   4877 $L$SEH_info_ecp_nistz256_neg:
   4878 DB	9,0,0,0
   4879 	DD	short_handler wrt ..imagebase
   4880 	DD	$L$neg_body wrt ..imagebase,$L$neg_epilogue wrt ..imagebase
   4881 $L$SEH_info_ecp_nistz256_ord_mul_mont:
   4882 DB	9,0,0,0
   4883 	DD	full_handler wrt ..imagebase
   4884 	DD	$L$ord_mul_body wrt ..imagebase,$L$ord_mul_epilogue wrt ..imagebase
   4885 	DD	48,0
   4886 $L$SEH_info_ecp_nistz256_ord_sqr_mont:
   4887 DB	9,0,0,0
   4888 	DD	full_handler wrt ..imagebase
   4889 	DD	$L$ord_sqr_body wrt ..imagebase,$L$ord_sqr_epilogue wrt ..imagebase
   4890 	DD	48,0
   4891 $L$SEH_info_ecp_nistz256_ord_mul_montx:
   4892 DB	9,0,0,0
   4893 	DD	full_handler wrt ..imagebase
   4894 	DD	$L$ord_mulx_body wrt ..imagebase,$L$ord_mulx_epilogue wrt ..imagebase
   4895 	DD	48,0
   4896 $L$SEH_info_ecp_nistz256_ord_sqr_montx:
   4897 DB	9,0,0,0
   4898 	DD	full_handler wrt ..imagebase
   4899 	DD	$L$ord_sqrx_body wrt ..imagebase,$L$ord_sqrx_epilogue wrt ..imagebase
   4900 	DD	48,0
   4901 $L$SEH_info_ecp_nistz256_mul_mont:
   4902 DB	9,0,0,0
   4903 	DD	full_handler wrt ..imagebase
   4904 	DD	$L$mul_body wrt ..imagebase,$L$mul_epilogue wrt ..imagebase
   4905 	DD	48,0
   4906 $L$SEH_info_ecp_nistz256_sqr_mont:
   4907 DB	9,0,0,0
   4908 	DD	full_handler wrt ..imagebase
   4909 	DD	$L$sqr_body wrt ..imagebase,$L$sqr_epilogue wrt ..imagebase
   4910 	DD	48,0
   4911 $L$SEH_info_ecp_nistz256_select_wX:
   4912 DB	0x01,0x33,0x16,0x00
   4913 DB	0x33,0xf8,0x09,0x00
   4914 DB	0x2e,0xe8,0x08,0x00
   4915 DB	0x29,0xd8,0x07,0x00
   4916 DB	0x24,0xc8,0x06,0x00
   4917 DB	0x1f,0xb8,0x05,0x00
   4918 DB	0x1a,0xa8,0x04,0x00
   4919 DB	0x15,0x98,0x03,0x00
   4920 DB	0x10,0x88,0x02,0x00
   4921 DB	0x0c,0x78,0x01,0x00
   4922 DB	0x08,0x68,0x00,0x00
   4923 DB	0x04,0x01,0x15,0x00
   4924 ALIGN	8
   4925 $L$SEH_info_ecp_nistz256_avx2_select_wX:
   4926 DB	0x01,0x36,0x17,0x0b
   4927 DB	0x36,0xf8,0x09,0x00
   4928 DB	0x31,0xe8,0x08,0x00
   4929 DB	0x2c,0xd8,0x07,0x00
   4930 DB	0x27,0xc8,0x06,0x00
   4931 DB	0x22,0xb8,0x05,0x00
   4932 DB	0x1d,0xa8,0x04,0x00
   4933 DB	0x18,0x98,0x03,0x00
   4934 DB	0x13,0x88,0x02,0x00
   4935 DB	0x0e,0x78,0x01,0x00
   4936 DB	0x09,0x68,0x00,0x00
   4937 DB	0x04,0x01,0x15,0x00
   4938 DB	0x00,0xb3,0x00,0x00
   4939 ALIGN	8
   4940 $L$SEH_info_ecp_nistz256_point_double:
   4941 DB	9,0,0,0
   4942 	DD	full_handler wrt ..imagebase
   4943 	DD	$L$point_doubleq_body wrt ..imagebase,$L$point_doubleq_epilogue wrt ..imagebase
   4944 	DD	32*5+56,0
   4945 $L$SEH_info_ecp_nistz256_point_add:
   4946 DB	9,0,0,0
   4947 	DD	full_handler wrt ..imagebase
   4948 	DD	$L$point_addq_body wrt ..imagebase,$L$point_addq_epilogue wrt ..imagebase
   4949 	DD	32*18+56,0
   4950 $L$SEH_info_ecp_nistz256_point_add_affine:
   4951 DB	9,0,0,0
   4952 	DD	full_handler wrt ..imagebase
   4953 	DD	$L$add_affineq_body wrt ..imagebase,$L$add_affineq_epilogue wrt ..imagebase
   4954 	DD	32*15+56,0
   4955 ALIGN	8
   4956 $L$SEH_info_ecp_nistz256_point_doublex:
   4957 DB	9,0,0,0
   4958 	DD	full_handler wrt ..imagebase
   4959 	DD	$L$point_doublex_body wrt ..imagebase,$L$point_doublex_epilogue wrt ..imagebase
   4960 	DD	32*5+56,0
   4961 $L$SEH_info_ecp_nistz256_point_addx:
   4962 DB	9,0,0,0
   4963 	DD	full_handler wrt ..imagebase
   4964 	DD	$L$point_addx_body wrt ..imagebase,$L$point_addx_epilogue wrt ..imagebase
   4965 	DD	32*18+56,0
   4966 $L$SEH_info_ecp_nistz256_point_add_affinex:
   4967 DB	9,0,0,0
   4968 	DD	full_handler wrt ..imagebase
   4969 	DD	$L$add_affinex_body wrt ..imagebase,$L$add_affinex_epilogue wrt ..imagebase
   4970 	DD	32*15+56,0
   4971