; This file is generated from a similarly-named Perl script in the BoringSSL ; source tree. Do not edit by hand. default rel %define XMMWORD %define YMMWORD %define ZMMWORD %ifdef BORINGSSL_PREFIX %include "boringssl_prefix_symbols_nasm.inc" %endif section .text code align=64 EXTERN OPENSSL_ia32cap_P ALIGN 64 $L$poly: DQ 0xffffffffffffffff,0x00000000ffffffff,0x0000000000000000,0xffffffff00000001 $L$One: DD 1,1,1,1,1,1,1,1 $L$Two: DD 2,2,2,2,2,2,2,2 $L$Three: DD 3,3,3,3,3,3,3,3 $L$ONE_mont: DQ 0x0000000000000001,0xffffffff00000000,0xffffffffffffffff,0x00000000fffffffe $L$ord: DQ 0xf3b9cac2fc632551,0xbce6faada7179e84,0xffffffffffffffff,0xffffffff00000000 $L$ordK: DQ 0xccd1c8aaee00bc4f global ecp_nistz256_neg ALIGN 32 ecp_nistz256_neg: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp $L$SEH_begin_ecp_nistz256_neg: mov rdi,rcx mov rsi,rdx push r12 push r13 $L$neg_body: xor r8,r8 xor r9,r9 xor r10,r10 xor r11,r11 xor r13,r13 sub r8,QWORD[rsi] sbb r9,QWORD[8+rsi] sbb r10,QWORD[16+rsi] mov rax,r8 sbb r11,QWORD[24+rsi] lea rsi,[$L$poly] mov rdx,r9 sbb r13,0 add r8,QWORD[rsi] mov rcx,r10 adc r9,QWORD[8+rsi] adc r10,QWORD[16+rsi] mov r12,r11 adc r11,QWORD[24+rsi] test r13,r13 cmovz r8,rax cmovz r9,rdx mov QWORD[rdi],r8 cmovz r10,rcx mov QWORD[8+rdi],r9 cmovz r11,r12 mov QWORD[16+rdi],r10 mov QWORD[24+rdi],r11 mov r13,QWORD[rsp] mov r12,QWORD[8+rsp] lea rsp,[16+rsp] $L$neg_epilogue: mov rdi,QWORD[8+rsp] ;WIN64 epilogue mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret $L$SEH_end_ecp_nistz256_neg: global ecp_nistz256_ord_mul_mont ALIGN 32 ecp_nistz256_ord_mul_mont: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp $L$SEH_begin_ecp_nistz256_ord_mul_mont: mov rdi,rcx mov rsi,rdx mov rdx,r8 lea rcx,[OPENSSL_ia32cap_P] mov rcx,QWORD[8+rcx] and ecx,0x80100 cmp ecx,0x80100 je NEAR $L$ecp_nistz256_ord_mul_montx push rbp push rbx push r12 push r13 push r14 push r15 $L$ord_mul_body: mov rax,QWORD[rdx] mov rbx,rdx lea r14,[$L$ord] mov r15,QWORD[$L$ordK] mov rcx,rax mul QWORD[rsi] mov r8,rax mov rax,rcx mov r9,rdx mul QWORD[8+rsi] add r9,rax mov rax,rcx adc rdx,0 mov r10,rdx mul QWORD[16+rsi] add r10,rax mov rax,rcx adc rdx,0 mov r13,r8 imul r8,r15 mov r11,rdx mul QWORD[24+rsi] add r11,rax mov rax,r8 adc rdx,0 mov r12,rdx mul QWORD[r14] mov rbp,r8 add r13,rax mov rax,r8 adc rdx,0 mov rcx,rdx sub r10,r8 sbb r8,0 mul QWORD[8+r14] add r9,rcx adc rdx,0 add r9,rax mov rax,rbp adc r10,rdx mov rdx,rbp adc r8,0 shl rax,32 shr rdx,32 sub r11,rax mov rax,QWORD[8+rbx] sbb rbp,rdx add r11,r8 adc r12,rbp adc r13,0 mov rcx,rax mul QWORD[rsi] add r9,rax mov rax,rcx adc rdx,0 mov rbp,rdx mul QWORD[8+rsi] add r10,rbp adc rdx,0 add r10,rax mov rax,rcx adc rdx,0 mov rbp,rdx mul QWORD[16+rsi] add r11,rbp adc rdx,0 add r11,rax mov rax,rcx adc rdx,0 mov rcx,r9 imul r9,r15 mov rbp,rdx mul QWORD[24+rsi] add r12,rbp adc rdx,0 xor r8,r8 add r12,rax mov rax,r9 adc r13,rdx adc r8,0 mul QWORD[r14] mov rbp,r9 add rcx,rax mov rax,r9 adc rcx,rdx sub r11,r9 sbb r9,0 mul QWORD[8+r14] add r10,rcx adc rdx,0 add r10,rax mov rax,rbp adc r11,rdx mov rdx,rbp adc r9,0 shl rax,32 shr rdx,32 sub r12,rax mov rax,QWORD[16+rbx] sbb rbp,rdx add r12,r9 adc r13,rbp adc r8,0 mov rcx,rax mul QWORD[rsi] add r10,rax mov rax,rcx adc rdx,0 mov rbp,rdx mul QWORD[8+rsi] add r11,rbp adc rdx,0 add r11,rax mov rax,rcx adc rdx,0 mov rbp,rdx mul QWORD[16+rsi] add r12,rbp adc rdx,0 add r12,rax mov rax,rcx adc rdx,0 mov rcx,r10 imul r10,r15 mov rbp,rdx mul QWORD[24+rsi] add r13,rbp adc rdx,0 xor r9,r9 add r13,rax mov rax,r10 adc r8,rdx adc r9,0 mul QWORD[r14] mov rbp,r10 add rcx,rax mov rax,r10 adc rcx,rdx sub r12,r10 sbb r10,0 mul QWORD[8+r14] add r11,rcx adc rdx,0 add r11,rax mov rax,rbp adc r12,rdx mov rdx,rbp adc r10,0 shl rax,32 shr rdx,32 sub r13,rax mov rax,QWORD[24+rbx] sbb rbp,rdx add r13,r10 adc r8,rbp adc r9,0 mov rcx,rax mul QWORD[rsi] add r11,rax mov rax,rcx adc rdx,0 mov rbp,rdx mul QWORD[8+rsi] add r12,rbp adc rdx,0 add r12,rax mov rax,rcx adc rdx,0 mov rbp,rdx mul QWORD[16+rsi] add r13,rbp adc rdx,0 add r13,rax mov rax,rcx adc rdx,0 mov rcx,r11 imul r11,r15 mov rbp,rdx mul QWORD[24+rsi] add r8,rbp adc rdx,0 xor r10,r10 add r8,rax mov rax,r11 adc r9,rdx adc r10,0 mul QWORD[r14] mov rbp,r11 add rcx,rax mov rax,r11 adc rcx,rdx sub r13,r11 sbb r11,0 mul QWORD[8+r14] add r12,rcx adc rdx,0 add r12,rax mov rax,rbp adc r13,rdx mov rdx,rbp adc r11,0 shl rax,32 shr rdx,32 sub r8,rax sbb rbp,rdx add r8,r11 adc r9,rbp adc r10,0 mov rsi,r12 sub r12,QWORD[r14] mov r11,r13 sbb r13,QWORD[8+r14] mov rcx,r8 sbb r8,QWORD[16+r14] mov rbp,r9 sbb r9,QWORD[24+r14] sbb r10,0 cmovc r12,rsi cmovc r13,r11 cmovc r8,rcx cmovc r9,rbp mov QWORD[rdi],r12 mov QWORD[8+rdi],r13 mov QWORD[16+rdi],r8 mov QWORD[24+rdi],r9 mov r15,QWORD[rsp] mov r14,QWORD[8+rsp] mov r13,QWORD[16+rsp] mov r12,QWORD[24+rsp] mov rbx,QWORD[32+rsp] mov rbp,QWORD[40+rsp] lea rsp,[48+rsp] $L$ord_mul_epilogue: mov rdi,QWORD[8+rsp] ;WIN64 epilogue mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret $L$SEH_end_ecp_nistz256_ord_mul_mont: global ecp_nistz256_ord_sqr_mont ALIGN 32 ecp_nistz256_ord_sqr_mont: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp $L$SEH_begin_ecp_nistz256_ord_sqr_mont: mov rdi,rcx mov rsi,rdx mov rdx,r8 lea rcx,[OPENSSL_ia32cap_P] mov rcx,QWORD[8+rcx] and ecx,0x80100 cmp ecx,0x80100 je NEAR $L$ecp_nistz256_ord_sqr_montx push rbp push rbx push r12 push r13 push r14 push r15 $L$ord_sqr_body: mov r8,QWORD[rsi] mov rax,QWORD[8+rsi] mov r14,QWORD[16+rsi] mov r15,QWORD[24+rsi] lea rsi,[$L$ord] mov rbx,rdx jmp NEAR $L$oop_ord_sqr ALIGN 32 $L$oop_ord_sqr: mov rbp,rax mul r8 mov r9,rax DB 102,72,15,110,205 mov rax,r14 mov r10,rdx mul r8 add r10,rax mov rax,r15 DB 102,73,15,110,214 adc rdx,0 mov r11,rdx mul r8 add r11,rax mov rax,r15 DB 102,73,15,110,223 adc rdx,0 mov r12,rdx mul r14 mov r13,rax mov rax,r14 mov r14,rdx mul rbp add r11,rax mov rax,r15 adc rdx,0 mov r15,rdx mul rbp add r12,rax adc rdx,0 add r12,r15 adc r13,rdx adc r14,0 xor r15,r15 mov rax,r8 add r9,r9 adc r10,r10 adc r11,r11 adc r12,r12 adc r13,r13 adc r14,r14 adc r15,0 mul rax mov r8,rax DB 102,72,15,126,200 mov rbp,rdx mul rax add r9,rbp adc r10,rax DB 102,72,15,126,208 adc rdx,0 mov rbp,rdx mul rax add r11,rbp adc r12,rax DB 102,72,15,126,216 adc rdx,0 mov rbp,rdx mov rcx,r8 imul r8,QWORD[32+rsi] mul rax add r13,rbp adc r14,rax mov rax,QWORD[rsi] adc r15,rdx mul r8 mov rbp,r8 add rcx,rax mov rax,QWORD[8+rsi] adc rcx,rdx sub r10,r8 sbb rbp,0 mul r8 add r9,rcx adc rdx,0 add r9,rax mov rax,r8 adc r10,rdx mov rdx,r8 adc rbp,0 mov rcx,r9 imul r9,QWORD[32+rsi] shl rax,32 shr rdx,32 sub r11,rax mov rax,QWORD[rsi] sbb r8,rdx add r11,rbp adc r8,0 mul r9 mov rbp,r9 add rcx,rax mov rax,QWORD[8+rsi] adc rcx,rdx sub r11,r9 sbb rbp,0 mul r9 add r10,rcx adc rdx,0 add r10,rax mov rax,r9 adc r11,rdx mov rdx,r9 adc rbp,0 mov rcx,r10 imul r10,QWORD[32+rsi] shl rax,32 shr rdx,32 sub r8,rax mov rax,QWORD[rsi] sbb r9,rdx add r8,rbp adc r9,0 mul r10 mov rbp,r10 add rcx,rax mov rax,QWORD[8+rsi] adc rcx,rdx sub r8,r10 sbb rbp,0 mul r10 add r11,rcx adc rdx,0 add r11,rax mov rax,r10 adc r8,rdx mov rdx,r10 adc rbp,0 mov rcx,r11 imul r11,QWORD[32+rsi] shl rax,32 shr rdx,32 sub r9,rax mov rax,QWORD[rsi] sbb r10,rdx add r9,rbp adc r10,0 mul r11 mov rbp,r11 add rcx,rax mov rax,QWORD[8+rsi] adc rcx,rdx sub r9,r11 sbb rbp,0 mul r11 add r8,rcx adc rdx,0 add r8,rax mov rax,r11 adc r9,rdx mov rdx,r11 adc rbp,0 shl rax,32 shr rdx,32 sub r10,rax sbb r11,rdx add r10,rbp adc r11,0 xor rdx,rdx add r8,r12 adc r9,r13 mov r12,r8 adc r10,r14 adc r11,r15 mov rax,r9 adc rdx,0 sub r8,QWORD[rsi] mov r14,r10 sbb r9,QWORD[8+rsi] sbb r10,QWORD[16+rsi] mov r15,r11 sbb r11,QWORD[24+rsi] sbb rdx,0 cmovc r8,r12 cmovnc rax,r9 cmovnc r14,r10 cmovnc r15,r11 dec rbx jnz NEAR $L$oop_ord_sqr mov QWORD[rdi],r8 mov QWORD[8+rdi],rax pxor xmm1,xmm1 mov QWORD[16+rdi],r14 pxor xmm2,xmm2 mov QWORD[24+rdi],r15 pxor xmm3,xmm3 mov r15,QWORD[rsp] mov r14,QWORD[8+rsp] mov r13,QWORD[16+rsp] mov r12,QWORD[24+rsp] mov rbx,QWORD[32+rsp] mov rbp,QWORD[40+rsp] lea rsp,[48+rsp] $L$ord_sqr_epilogue: mov rdi,QWORD[8+rsp] ;WIN64 epilogue mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret $L$SEH_end_ecp_nistz256_ord_sqr_mont: ALIGN 32 ecp_nistz256_ord_mul_montx: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp $L$SEH_begin_ecp_nistz256_ord_mul_montx: mov rdi,rcx mov rsi,rdx mov rdx,r8 $L$ecp_nistz256_ord_mul_montx: push rbp push rbx push r12 push r13 push r14 push r15 $L$ord_mulx_body: mov rbx,rdx mov rdx,QWORD[rdx] mov r9,QWORD[rsi] mov r10,QWORD[8+rsi] mov r11,QWORD[16+rsi] mov r12,QWORD[24+rsi] lea rsi,[((-128))+rsi] lea r14,[(($L$ord-128))] mov r15,QWORD[$L$ordK] mulx r9,r8,r9 mulx r10,rcx,r10 mulx r11,rbp,r11 add r9,rcx mulx r12,rcx,r12 mov rdx,r8 mulx rax,rdx,r15 adc r10,rbp adc r11,rcx adc r12,0 xor r13,r13 mulx rbp,rcx,QWORD[((0+128))+r14] adcx r8,rcx adox r9,rbp mulx rbp,rcx,QWORD[((8+128))+r14] adcx r9,rcx adox r10,rbp mulx rbp,rcx,QWORD[((16+128))+r14] adcx r10,rcx adox r11,rbp mulx rbp,rcx,QWORD[((24+128))+r14] mov rdx,QWORD[8+rbx] adcx r11,rcx adox r12,rbp adcx r12,r8 adox r13,r8 adc r13,0 mulx rbp,rcx,QWORD[((0+128))+rsi] adcx r9,rcx adox r10,rbp mulx rbp,rcx,QWORD[((8+128))+rsi] adcx r10,rcx adox r11,rbp mulx rbp,rcx,QWORD[((16+128))+rsi] adcx r11,rcx adox r12,rbp mulx rbp,rcx,QWORD[((24+128))+rsi] mov rdx,r9 mulx rax,rdx,r15 adcx r12,rcx adox r13,rbp adcx r13,r8 adox r8,r8 adc r8,0 mulx rbp,rcx,QWORD[((0+128))+r14] adcx r9,rcx adox r10,rbp mulx rbp,rcx,QWORD[((8+128))+r14] adcx r10,rcx adox r11,rbp mulx rbp,rcx,QWORD[((16+128))+r14] adcx r11,rcx adox r12,rbp mulx rbp,rcx,QWORD[((24+128))+r14] mov rdx,QWORD[16+rbx] adcx r12,rcx adox r13,rbp adcx r13,r9 adox r8,r9 adc r8,0 mulx rbp,rcx,QWORD[((0+128))+rsi] adcx r10,rcx adox r11,rbp mulx rbp,rcx,QWORD[((8+128))+rsi] adcx r11,rcx adox r12,rbp mulx rbp,rcx,QWORD[((16+128))+rsi] adcx r12,rcx adox r13,rbp mulx rbp,rcx,QWORD[((24+128))+rsi] mov rdx,r10 mulx rax,rdx,r15 adcx r13,rcx adox r8,rbp adcx r8,r9 adox r9,r9 adc r9,0 mulx rbp,rcx,QWORD[((0+128))+r14] adcx r10,rcx adox r11,rbp mulx rbp,rcx,QWORD[((8+128))+r14] adcx r11,rcx adox r12,rbp mulx rbp,rcx,QWORD[((16+128))+r14] adcx r12,rcx adox r13,rbp mulx rbp,rcx,QWORD[((24+128))+r14] mov rdx,QWORD[24+rbx] adcx r13,rcx adox r8,rbp adcx r8,r10 adox r9,r10 adc r9,0 mulx rbp,rcx,QWORD[((0+128))+rsi] adcx r11,rcx adox r12,rbp mulx rbp,rcx,QWORD[((8+128))+rsi] adcx r12,rcx adox r13,rbp mulx rbp,rcx,QWORD[((16+128))+rsi] adcx r13,rcx adox r8,rbp mulx rbp,rcx,QWORD[((24+128))+rsi] mov rdx,r11 mulx rax,rdx,r15 adcx r8,rcx adox r9,rbp adcx r9,r10 adox r10,r10 adc r10,0 mulx rbp,rcx,QWORD[((0+128))+r14] adcx r11,rcx adox r12,rbp mulx rbp,rcx,QWORD[((8+128))+r14] adcx r12,rcx adox r13,rbp mulx rbp,rcx,QWORD[((16+128))+r14] adcx r13,rcx adox r8,rbp mulx rbp,rcx,QWORD[((24+128))+r14] lea r14,[128+r14] mov rbx,r12 adcx r8,rcx adox r9,rbp mov rdx,r13 adcx r9,r11 adox r10,r11 adc r10,0 mov rcx,r8 sub r12,QWORD[r14] sbb r13,QWORD[8+r14] sbb r8,QWORD[16+r14] mov rbp,r9 sbb r9,QWORD[24+r14] sbb r10,0 cmovc r12,rbx cmovc r13,rdx cmovc r8,rcx cmovc r9,rbp mov QWORD[rdi],r12 mov QWORD[8+rdi],r13 mov QWORD[16+rdi],r8 mov QWORD[24+rdi],r9 mov r15,QWORD[rsp] mov r14,QWORD[8+rsp] mov r13,QWORD[16+rsp] mov r12,QWORD[24+rsp] mov rbx,QWORD[32+rsp] mov rbp,QWORD[40+rsp] lea rsp,[48+rsp] $L$ord_mulx_epilogue: mov rdi,QWORD[8+rsp] ;WIN64 epilogue mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret $L$SEH_end_ecp_nistz256_ord_mul_montx: ALIGN 32 ecp_nistz256_ord_sqr_montx: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp $L$SEH_begin_ecp_nistz256_ord_sqr_montx: mov rdi,rcx mov rsi,rdx mov rdx,r8 $L$ecp_nistz256_ord_sqr_montx: push rbp push rbx push r12 push r13 push r14 push r15 $L$ord_sqrx_body: mov rbx,rdx mov rdx,QWORD[rsi] mov r14,QWORD[8+rsi] mov r15,QWORD[16+rsi] mov r8,QWORD[24+rsi] lea rsi,[$L$ord] jmp NEAR $L$oop_ord_sqrx ALIGN 32 $L$oop_ord_sqrx: mulx r10,r9,r14 mulx r11,rcx,r15 mov rax,rdx DB 102,73,15,110,206 mulx r12,rbp,r8 mov rdx,r14 add r10,rcx DB 102,73,15,110,215 adc r11,rbp adc r12,0 xor r13,r13 mulx rbp,rcx,r15 adcx r11,rcx adox r12,rbp mulx rbp,rcx,r8 mov rdx,r15 adcx r12,rcx adox r13,rbp adc r13,0 mulx r14,rcx,r8 mov rdx,rax DB 102,73,15,110,216 xor r15,r15 adcx r9,r9 adox r13,rcx adcx r10,r10 adox r14,r15 mulx rbp,r8,rdx DB 102,72,15,126,202 adcx r11,r11 adox r9,rbp adcx r12,r12 mulx rax,rcx,rdx DB 102,72,15,126,210 adcx r13,r13 adox r10,rcx adcx r14,r14 mulx rbp,rcx,rdx DB 0x67 DB 102,72,15,126,218 adox r11,rax adcx r15,r15 adox r12,rcx adox r13,rbp mulx rax,rcx,rdx adox r14,rcx adox r15,rax mov rdx,r8 mulx rcx,rdx,QWORD[32+rsi] xor rax,rax mulx rbp,rcx,QWORD[rsi] adcx r8,rcx adox r9,rbp mulx rbp,rcx,QWORD[8+rsi] adcx r9,rcx adox r10,rbp mulx rbp,rcx,QWORD[16+rsi] adcx r10,rcx adox r11,rbp mulx rbp,rcx,QWORD[24+rsi] adcx r11,rcx adox r8,rbp adcx r8,rax mov rdx,r9 mulx rcx,rdx,QWORD[32+rsi] mulx rbp,rcx,QWORD[rsi] adox r9,rcx adcx r10,rbp mulx rbp,rcx,QWORD[8+rsi] adox r10,rcx adcx r11,rbp mulx rbp,rcx,QWORD[16+rsi] adox r11,rcx adcx r8,rbp mulx rbp,rcx,QWORD[24+rsi] adox r8,rcx adcx r9,rbp adox r9,rax mov rdx,r10 mulx rcx,rdx,QWORD[32+rsi] mulx rbp,rcx,QWORD[rsi] adcx r10,rcx adox r11,rbp mulx rbp,rcx,QWORD[8+rsi] adcx r11,rcx adox r8,rbp mulx rbp,rcx,QWORD[16+rsi] adcx r8,rcx adox r9,rbp mulx rbp,rcx,QWORD[24+rsi] adcx r9,rcx adox r10,rbp adcx r10,rax mov rdx,r11 mulx rcx,rdx,QWORD[32+rsi] mulx rbp,rcx,QWORD[rsi] adox r11,rcx adcx r8,rbp mulx rbp,rcx,QWORD[8+rsi] adox r8,rcx adcx r9,rbp mulx rbp,rcx,QWORD[16+rsi] adox r9,rcx adcx r10,rbp mulx rbp,rcx,QWORD[24+rsi] adox r10,rcx adcx r11,rbp adox r11,rax add r12,r8 adc r9,r13 mov rdx,r12 adc r10,r14 adc r11,r15 mov r14,r9 adc rax,0 sub r12,QWORD[rsi] mov r15,r10 sbb r9,QWORD[8+rsi] sbb r10,QWORD[16+rsi] mov r8,r11 sbb r11,QWORD[24+rsi] sbb rax,0 cmovnc rdx,r12 cmovnc r14,r9 cmovnc r15,r10 cmovnc r8,r11 dec rbx jnz NEAR $L$oop_ord_sqrx mov QWORD[rdi],rdx mov QWORD[8+rdi],r14 pxor xmm1,xmm1 mov QWORD[16+rdi],r15 pxor xmm2,xmm2 mov QWORD[24+rdi],r8 pxor xmm3,xmm3 mov r15,QWORD[rsp] mov r14,QWORD[8+rsp] mov r13,QWORD[16+rsp] mov r12,QWORD[24+rsp] mov rbx,QWORD[32+rsp] mov rbp,QWORD[40+rsp] lea rsp,[48+rsp] $L$ord_sqrx_epilogue: mov rdi,QWORD[8+rsp] ;WIN64 epilogue mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret $L$SEH_end_ecp_nistz256_ord_sqr_montx: global ecp_nistz256_mul_mont ALIGN 32 ecp_nistz256_mul_mont: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp $L$SEH_begin_ecp_nistz256_mul_mont: mov rdi,rcx mov rsi,rdx mov rdx,r8 lea rcx,[OPENSSL_ia32cap_P] mov rcx,QWORD[8+rcx] and ecx,0x80100 $L$mul_mont: push rbp push rbx push r12 push r13 push r14 push r15 $L$mul_body: cmp ecx,0x80100 je NEAR $L$mul_montx mov rbx,rdx mov rax,QWORD[rdx] mov r9,QWORD[rsi] mov r10,QWORD[8+rsi] mov r11,QWORD[16+rsi] mov r12,QWORD[24+rsi] call __ecp_nistz256_mul_montq jmp NEAR $L$mul_mont_done ALIGN 32 $L$mul_montx: mov rbx,rdx mov rdx,QWORD[rdx] mov r9,QWORD[rsi] mov r10,QWORD[8+rsi] mov r11,QWORD[16+rsi] mov r12,QWORD[24+rsi] lea rsi,[((-128))+rsi] call __ecp_nistz256_mul_montx $L$mul_mont_done: mov r15,QWORD[rsp] mov r14,QWORD[8+rsp] mov r13,QWORD[16+rsp] mov r12,QWORD[24+rsp] mov rbx,QWORD[32+rsp] mov rbp,QWORD[40+rsp] lea rsp,[48+rsp] $L$mul_epilogue: mov rdi,QWORD[8+rsp] ;WIN64 epilogue mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret $L$SEH_end_ecp_nistz256_mul_mont: ALIGN 32 __ecp_nistz256_mul_montq: mov rbp,rax mul r9 mov r14,QWORD[(($L$poly+8))] mov r8,rax mov rax,rbp mov r9,rdx mul r10 mov r15,QWORD[(($L$poly+24))] add r9,rax mov rax,rbp adc rdx,0 mov r10,rdx mul r11 add r10,rax mov rax,rbp adc rdx,0 mov r11,rdx mul r12 add r11,rax mov rax,r8 adc rdx,0 xor r13,r13 mov r12,rdx mov rbp,r8 shl r8,32 mul r15 shr rbp,32 add r9,r8 adc r10,rbp adc r11,rax mov rax,QWORD[8+rbx] adc r12,rdx adc r13,0 xor r8,r8 mov rbp,rax mul QWORD[rsi] add r9,rax mov rax,rbp adc rdx,0 mov rcx,rdx mul QWORD[8+rsi] add r10,rcx adc rdx,0 add r10,rax mov rax,rbp adc rdx,0 mov rcx,rdx mul QWORD[16+rsi] add r11,rcx adc rdx,0 add r11,rax mov rax,rbp adc rdx,0 mov rcx,rdx mul QWORD[24+rsi] add r12,rcx adc rdx,0 add r12,rax mov rax,r9 adc r13,rdx adc r8,0 mov rbp,r9 shl r9,32 mul r15 shr rbp,32 add r10,r9 adc r11,rbp adc r12,rax mov rax,QWORD[16+rbx] adc r13,rdx adc r8,0 xor r9,r9 mov rbp,rax mul QWORD[rsi] add r10,rax mov rax,rbp adc rdx,0 mov rcx,rdx mul QWORD[8+rsi] add r11,rcx adc rdx,0 add r11,rax mov rax,rbp adc rdx,0 mov rcx,rdx mul QWORD[16+rsi] add r12,rcx adc rdx,0 add r12,rax mov rax,rbp adc rdx,0 mov rcx,rdx mul QWORD[24+rsi] add r13,rcx adc rdx,0 add r13,rax mov rax,r10 adc r8,rdx adc r9,0 mov rbp,r10 shl r10,32 mul r15 shr rbp,32 add r11,r10 adc r12,rbp adc r13,rax mov rax,QWORD[24+rbx] adc r8,rdx adc r9,0 xor r10,r10 mov rbp,rax mul QWORD[rsi] add r11,rax mov rax,rbp adc rdx,0 mov rcx,rdx mul QWORD[8+rsi] add r12,rcx adc rdx,0 add r12,rax mov rax,rbp adc rdx,0 mov rcx,rdx mul QWORD[16+rsi] add r13,rcx adc rdx,0 add r13,rax mov rax,rbp adc rdx,0 mov rcx,rdx mul QWORD[24+rsi] add r8,rcx adc rdx,0 add r8,rax mov rax,r11 adc r9,rdx adc r10,0 mov rbp,r11 shl r11,32 mul r15 shr rbp,32 add r12,r11 adc r13,rbp mov rcx,r12 adc r8,rax adc r9,rdx mov rbp,r13 adc r10,0 sub r12,-1 mov rbx,r8 sbb r13,r14 sbb r8,0 mov rdx,r9 sbb r9,r15 sbb r10,0 cmovc r12,rcx cmovc r13,rbp mov QWORD[rdi],r12 cmovc r8,rbx mov QWORD[8+rdi],r13 cmovc r9,rdx mov QWORD[16+rdi],r8 mov QWORD[24+rdi],r9 DB 0F3h,0C3h ;repret global ecp_nistz256_sqr_mont ALIGN 32 ecp_nistz256_sqr_mont: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp $L$SEH_begin_ecp_nistz256_sqr_mont: mov rdi,rcx mov rsi,rdx lea rcx,[OPENSSL_ia32cap_P] mov rcx,QWORD[8+rcx] and ecx,0x80100 push rbp push rbx push r12 push r13 push r14 push r15 $L$sqr_body: cmp ecx,0x80100 je NEAR $L$sqr_montx mov rax,QWORD[rsi] mov r14,QWORD[8+rsi] mov r15,QWORD[16+rsi] mov r8,QWORD[24+rsi] call __ecp_nistz256_sqr_montq jmp NEAR $L$sqr_mont_done ALIGN 32 $L$sqr_montx: mov rdx,QWORD[rsi] mov r14,QWORD[8+rsi] mov r15,QWORD[16+rsi] mov r8,QWORD[24+rsi] lea rsi,[((-128))+rsi] call __ecp_nistz256_sqr_montx $L$sqr_mont_done: mov r15,QWORD[rsp] mov r14,QWORD[8+rsp] mov r13,QWORD[16+rsp] mov r12,QWORD[24+rsp] mov rbx,QWORD[32+rsp] mov rbp,QWORD[40+rsp] lea rsp,[48+rsp] $L$sqr_epilogue: mov rdi,QWORD[8+rsp] ;WIN64 epilogue mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret $L$SEH_end_ecp_nistz256_sqr_mont: ALIGN 32 __ecp_nistz256_sqr_montq: mov r13,rax mul r14 mov r9,rax mov rax,r15 mov r10,rdx mul r13 add r10,rax mov rax,r8 adc rdx,0 mov r11,rdx mul r13 add r11,rax mov rax,r15 adc rdx,0 mov r12,rdx mul r14 add r11,rax mov rax,r8 adc rdx,0 mov rbp,rdx mul r14 add r12,rax mov rax,r8 adc rdx,0 add r12,rbp mov r13,rdx adc r13,0 mul r15 xor r15,r15 add r13,rax mov rax,QWORD[rsi] mov r14,rdx adc r14,0 add r9,r9 adc r10,r10 adc r11,r11 adc r12,r12 adc r13,r13 adc r14,r14 adc r15,0 mul rax mov r8,rax mov rax,QWORD[8+rsi] mov rcx,rdx mul rax add r9,rcx adc r10,rax mov rax,QWORD[16+rsi] adc rdx,0 mov rcx,rdx mul rax add r11,rcx adc r12,rax mov rax,QWORD[24+rsi] adc rdx,0 mov rcx,rdx mul rax add r13,rcx adc r14,rax mov rax,r8 adc r15,rdx mov rsi,QWORD[(($L$poly+8))] mov rbp,QWORD[(($L$poly+24))] mov rcx,r8 shl r8,32 mul rbp shr rcx,32 add r9,r8 adc r10,rcx adc r11,rax mov rax,r9 adc rdx,0 mov rcx,r9 shl r9,32 mov r8,rdx mul rbp shr rcx,32 add r10,r9 adc r11,rcx adc r8,rax mov rax,r10 adc rdx,0 mov rcx,r10 shl r10,32 mov r9,rdx mul rbp shr rcx,32 add r11,r10 adc r8,rcx adc r9,rax mov rax,r11 adc rdx,0 mov rcx,r11 shl r11,32 mov r10,rdx mul rbp shr rcx,32 add r8,r11 adc r9,rcx adc r10,rax adc rdx,0 xor r11,r11 add r12,r8 adc r13,r9 mov r8,r12 adc r14,r10 adc r15,rdx mov r9,r13 adc r11,0 sub r12,-1 mov r10,r14 sbb r13,rsi sbb r14,0 mov rcx,r15 sbb r15,rbp sbb r11,0 cmovc r12,r8 cmovc r13,r9 mov QWORD[rdi],r12 cmovc r14,r10 mov QWORD[8+rdi],r13 cmovc r15,rcx mov QWORD[16+rdi],r14 mov QWORD[24+rdi],r15 DB 0F3h,0C3h ;repret ALIGN 32 __ecp_nistz256_mul_montx: mulx r9,r8,r9 mulx r10,rcx,r10 mov r14,32 xor r13,r13 mulx r11,rbp,r11 mov r15,QWORD[(($L$poly+24))] adc r9,rcx mulx r12,rcx,r12 mov rdx,r8 adc r10,rbp shlx rbp,r8,r14 adc r11,rcx shrx rcx,r8,r14 adc r12,0 add r9,rbp adc r10,rcx mulx rbp,rcx,r15 mov rdx,QWORD[8+rbx] adc r11,rcx adc r12,rbp adc r13,0 xor r8,r8 mulx rbp,rcx,QWORD[((0+128))+rsi] adcx r9,rcx adox r10,rbp mulx rbp,rcx,QWORD[((8+128))+rsi] adcx r10,rcx adox r11,rbp mulx rbp,rcx,QWORD[((16+128))+rsi] adcx r11,rcx adox r12,rbp mulx rbp,rcx,QWORD[((24+128))+rsi] mov rdx,r9 adcx r12,rcx shlx rcx,r9,r14 adox r13,rbp shrx rbp,r9,r14 adcx r13,r8 adox r8,r8 adc r8,0 add r10,rcx adc r11,rbp mulx rbp,rcx,r15 mov rdx,QWORD[16+rbx] adc r12,rcx adc r13,rbp adc r8,0 xor r9,r9 mulx rbp,rcx,QWORD[((0+128))+rsi] adcx r10,rcx adox r11,rbp mulx rbp,rcx,QWORD[((8+128))+rsi] adcx r11,rcx adox r12,rbp mulx rbp,rcx,QWORD[((16+128))+rsi] adcx r12,rcx adox r13,rbp mulx rbp,rcx,QWORD[((24+128))+rsi] mov rdx,r10 adcx r13,rcx shlx rcx,r10,r14 adox r8,rbp shrx rbp,r10,r14 adcx r8,r9 adox r9,r9 adc r9,0 add r11,rcx adc r12,rbp mulx rbp,rcx,r15 mov rdx,QWORD[24+rbx] adc r13,rcx adc r8,rbp adc r9,0 xor r10,r10 mulx rbp,rcx,QWORD[((0+128))+rsi] adcx r11,rcx adox r12,rbp mulx rbp,rcx,QWORD[((8+128))+rsi] adcx r12,rcx adox r13,rbp mulx rbp,rcx,QWORD[((16+128))+rsi] adcx r13,rcx adox r8,rbp mulx rbp,rcx,QWORD[((24+128))+rsi] mov rdx,r11 adcx r8,rcx shlx rcx,r11,r14 adox r9,rbp shrx rbp,r11,r14 adcx r9,r10 adox r10,r10 adc r10,0 add r12,rcx adc r13,rbp mulx rbp,rcx,r15 mov rbx,r12 mov r14,QWORD[(($L$poly+8))] adc r8,rcx mov rdx,r13 adc r9,rbp adc r10,0 xor eax,eax mov rcx,r8 sbb r12,-1 sbb r13,r14 sbb r8,0 mov rbp,r9 sbb r9,r15 sbb r10,0 cmovc r12,rbx cmovc r13,rdx mov QWORD[rdi],r12 cmovc r8,rcx mov QWORD[8+rdi],r13 cmovc r9,rbp mov QWORD[16+rdi],r8 mov QWORD[24+rdi],r9 DB 0F3h,0C3h ;repret ALIGN 32 __ecp_nistz256_sqr_montx: mulx r10,r9,r14 mulx r11,rcx,r15 xor eax,eax adc r10,rcx mulx r12,rbp,r8 mov rdx,r14 adc r11,rbp adc r12,0 xor r13,r13 mulx rbp,rcx,r15 adcx r11,rcx adox r12,rbp mulx rbp,rcx,r8 mov rdx,r15 adcx r12,rcx adox r13,rbp adc r13,0 mulx r14,rcx,r8 mov rdx,QWORD[((0+128))+rsi] xor r15,r15 adcx r9,r9 adox r13,rcx adcx r10,r10 adox r14,r15 mulx rbp,r8,rdx mov rdx,QWORD[((8+128))+rsi] adcx r11,r11 adox r9,rbp adcx r12,r12 mulx rax,rcx,rdx mov rdx,QWORD[((16+128))+rsi] adcx r13,r13 adox r10,rcx adcx r14,r14 DB 0x67 mulx rbp,rcx,rdx mov rdx,QWORD[((24+128))+rsi] adox r11,rax adcx r15,r15 adox r12,rcx mov rsi,32 adox r13,rbp DB 0x67,0x67 mulx rax,rcx,rdx mov rdx,QWORD[(($L$poly+24))] adox r14,rcx shlx rcx,r8,rsi adox r15,rax shrx rax,r8,rsi mov rbp,rdx add r9,rcx adc r10,rax mulx r8,rcx,r8 adc r11,rcx shlx rcx,r9,rsi adc r8,0 shrx rax,r9,rsi add r10,rcx adc r11,rax mulx r9,rcx,r9 adc r8,rcx shlx rcx,r10,rsi adc r9,0 shrx rax,r10,rsi add r11,rcx adc r8,rax mulx r10,rcx,r10 adc r9,rcx shlx rcx,r11,rsi adc r10,0 shrx rax,r11,rsi add r8,rcx adc r9,rax mulx r11,rcx,r11 adc r10,rcx adc r11,0 xor rdx,rdx add r12,r8 mov rsi,QWORD[(($L$poly+8))] adc r13,r9 mov r8,r12 adc r14,r10 adc r15,r11 mov r9,r13 adc rdx,0 sub r12,-1 mov r10,r14 sbb r13,rsi sbb r14,0 mov r11,r15 sbb r15,rbp sbb rdx,0 cmovc r12,r8 cmovc r13,r9 mov QWORD[rdi],r12 cmovc r14,r10 mov QWORD[8+rdi],r13 cmovc r15,r11 mov QWORD[16+rdi],r14 mov QWORD[24+rdi],r15 DB 0F3h,0C3h ;repret global ecp_nistz256_select_w5 ALIGN 32 ecp_nistz256_select_w5: lea rax,[OPENSSL_ia32cap_P] mov rax,QWORD[8+rax] test eax,32 jnz NEAR $L$avx2_select_w5 lea rax,[((-136))+rsp] $L$SEH_begin_ecp_nistz256_select_w5: DB 0x48,0x8d,0x60,0xe0 DB 0x0f,0x29,0x70,0xe0 DB 0x0f,0x29,0x78,0xf0 DB 0x44,0x0f,0x29,0x00 DB 0x44,0x0f,0x29,0x48,0x10 DB 0x44,0x0f,0x29,0x50,0x20 DB 0x44,0x0f,0x29,0x58,0x30 DB 0x44,0x0f,0x29,0x60,0x40 DB 0x44,0x0f,0x29,0x68,0x50 DB 0x44,0x0f,0x29,0x70,0x60 DB 0x44,0x0f,0x29,0x78,0x70 movdqa xmm0,XMMWORD[$L$One] movd xmm1,r8d pxor xmm2,xmm2 pxor xmm3,xmm3 pxor xmm4,xmm4 pxor xmm5,xmm5 pxor xmm6,xmm6 pxor xmm7,xmm7 movdqa xmm8,xmm0 pshufd xmm1,xmm1,0 mov rax,16 $L$select_loop_sse_w5: movdqa xmm15,xmm8 paddd xmm8,xmm0 pcmpeqd xmm15,xmm1 movdqa xmm9,XMMWORD[rdx] movdqa xmm10,XMMWORD[16+rdx] movdqa xmm11,XMMWORD[32+rdx] movdqa xmm12,XMMWORD[48+rdx] movdqa xmm13,XMMWORD[64+rdx] movdqa xmm14,XMMWORD[80+rdx] lea rdx,[96+rdx] pand xmm9,xmm15 pand xmm10,xmm15 por xmm2,xmm9 pand xmm11,xmm15 por xmm3,xmm10 pand xmm12,xmm15 por xmm4,xmm11 pand xmm13,xmm15 por xmm5,xmm12 pand xmm14,xmm15 por xmm6,xmm13 por xmm7,xmm14 dec rax jnz NEAR $L$select_loop_sse_w5 movdqu XMMWORD[rcx],xmm2 movdqu XMMWORD[16+rcx],xmm3 movdqu XMMWORD[32+rcx],xmm4 movdqu XMMWORD[48+rcx],xmm5 movdqu XMMWORD[64+rcx],xmm6 movdqu XMMWORD[80+rcx],xmm7 movaps xmm6,XMMWORD[rsp] movaps xmm7,XMMWORD[16+rsp] movaps xmm8,XMMWORD[32+rsp] movaps xmm9,XMMWORD[48+rsp] movaps xmm10,XMMWORD[64+rsp] movaps xmm11,XMMWORD[80+rsp] movaps xmm12,XMMWORD[96+rsp] movaps xmm13,XMMWORD[112+rsp] movaps xmm14,XMMWORD[128+rsp] movaps xmm15,XMMWORD[144+rsp] lea rsp,[168+rsp] DB 0F3h,0C3h ;repret $L$SEH_end_ecp_nistz256_select_w5: global ecp_nistz256_select_w7 ALIGN 32 ecp_nistz256_select_w7: lea rax,[OPENSSL_ia32cap_P] mov rax,QWORD[8+rax] test eax,32 jnz NEAR $L$avx2_select_w7 lea rax,[((-136))+rsp] $L$SEH_begin_ecp_nistz256_select_w7: DB 0x48,0x8d,0x60,0xe0 DB 0x0f,0x29,0x70,0xe0 DB 0x0f,0x29,0x78,0xf0 DB 0x44,0x0f,0x29,0x00 DB 0x44,0x0f,0x29,0x48,0x10 DB 0x44,0x0f,0x29,0x50,0x20 DB 0x44,0x0f,0x29,0x58,0x30 DB 0x44,0x0f,0x29,0x60,0x40 DB 0x44,0x0f,0x29,0x68,0x50 DB 0x44,0x0f,0x29,0x70,0x60 DB 0x44,0x0f,0x29,0x78,0x70 movdqa xmm8,XMMWORD[$L$One] movd xmm1,r8d pxor xmm2,xmm2 pxor xmm3,xmm3 pxor xmm4,xmm4 pxor xmm5,xmm5 movdqa xmm0,xmm8 pshufd xmm1,xmm1,0 mov rax,64 $L$select_loop_sse_w7: movdqa xmm15,xmm8 paddd xmm8,xmm0 movdqa xmm9,XMMWORD[rdx] movdqa xmm10,XMMWORD[16+rdx] pcmpeqd xmm15,xmm1 movdqa xmm11,XMMWORD[32+rdx] movdqa xmm12,XMMWORD[48+rdx] lea rdx,[64+rdx] pand xmm9,xmm15 pand xmm10,xmm15 por xmm2,xmm9 pand xmm11,xmm15 por xmm3,xmm10 pand xmm12,xmm15 por xmm4,xmm11 prefetcht0 [255+rdx] por xmm5,xmm12 dec rax jnz NEAR $L$select_loop_sse_w7 movdqu XMMWORD[rcx],xmm2 movdqu XMMWORD[16+rcx],xmm3 movdqu XMMWORD[32+rcx],xmm4 movdqu XMMWORD[48+rcx],xmm5 movaps xmm6,XMMWORD[rsp] movaps xmm7,XMMWORD[16+rsp] movaps xmm8,XMMWORD[32+rsp] movaps xmm9,XMMWORD[48+rsp] movaps xmm10,XMMWORD[64+rsp] movaps xmm11,XMMWORD[80+rsp] movaps xmm12,XMMWORD[96+rsp] movaps xmm13,XMMWORD[112+rsp] movaps xmm14,XMMWORD[128+rsp] movaps xmm15,XMMWORD[144+rsp] lea rsp,[168+rsp] DB 0F3h,0C3h ;repret $L$SEH_end_ecp_nistz256_select_w7: ALIGN 32 ecp_nistz256_avx2_select_w5: $L$avx2_select_w5: vzeroupper lea rax,[((-136))+rsp] mov r11,rsp $L$SEH_begin_ecp_nistz256_avx2_select_w5: DB 0x48,0x8d,0x60,0xe0 DB 0xc5,0xf8,0x29,0x70,0xe0 DB 0xc5,0xf8,0x29,0x78,0xf0 DB 0xc5,0x78,0x29,0x40,0x00 DB 0xc5,0x78,0x29,0x48,0x10 DB 0xc5,0x78,0x29,0x50,0x20 DB 0xc5,0x78,0x29,0x58,0x30 DB 0xc5,0x78,0x29,0x60,0x40 DB 0xc5,0x78,0x29,0x68,0x50 DB 0xc5,0x78,0x29,0x70,0x60 DB 0xc5,0x78,0x29,0x78,0x70 vmovdqa ymm0,YMMWORD[$L$Two] vpxor ymm2,ymm2,ymm2 vpxor ymm3,ymm3,ymm3 vpxor ymm4,ymm4,ymm4 vmovdqa ymm5,YMMWORD[$L$One] vmovdqa ymm10,YMMWORD[$L$Two] vmovd xmm1,r8d vpermd ymm1,ymm2,ymm1 mov rax,8 $L$select_loop_avx2_w5: vmovdqa ymm6,YMMWORD[rdx] vmovdqa ymm7,YMMWORD[32+rdx] vmovdqa ymm8,YMMWORD[64+rdx] vmovdqa ymm11,YMMWORD[96+rdx] vmovdqa ymm12,YMMWORD[128+rdx] vmovdqa ymm13,YMMWORD[160+rdx] vpcmpeqd ymm9,ymm5,ymm1 vpcmpeqd ymm14,ymm10,ymm1 vpaddd ymm5,ymm5,ymm0 vpaddd ymm10,ymm10,ymm0 lea rdx,[192+rdx] vpand ymm6,ymm6,ymm9 vpand ymm7,ymm7,ymm9 vpand ymm8,ymm8,ymm9 vpand ymm11,ymm11,ymm14 vpand ymm12,ymm12,ymm14 vpand ymm13,ymm13,ymm14 vpxor ymm2,ymm2,ymm6 vpxor ymm3,ymm3,ymm7 vpxor ymm4,ymm4,ymm8 vpxor ymm2,ymm2,ymm11 vpxor ymm3,ymm3,ymm12 vpxor ymm4,ymm4,ymm13 dec rax jnz NEAR $L$select_loop_avx2_w5 vmovdqu YMMWORD[rcx],ymm2 vmovdqu YMMWORD[32+rcx],ymm3 vmovdqu YMMWORD[64+rcx],ymm4 vzeroupper movaps xmm6,XMMWORD[rsp] movaps xmm7,XMMWORD[16+rsp] movaps xmm8,XMMWORD[32+rsp] movaps xmm9,XMMWORD[48+rsp] movaps xmm10,XMMWORD[64+rsp] movaps xmm11,XMMWORD[80+rsp] movaps xmm12,XMMWORD[96+rsp] movaps xmm13,XMMWORD[112+rsp] movaps xmm14,XMMWORD[128+rsp] movaps xmm15,XMMWORD[144+rsp] lea rsp,[r11] DB 0F3h,0C3h ;repret $L$SEH_end_ecp_nistz256_avx2_select_w5: global ecp_nistz256_avx2_select_w7 ALIGN 32 ecp_nistz256_avx2_select_w7: $L$avx2_select_w7: vzeroupper mov r11,rsp lea rax,[((-136))+rsp] $L$SEH_begin_ecp_nistz256_avx2_select_w7: DB 0x48,0x8d,0x60,0xe0 DB 0xc5,0xf8,0x29,0x70,0xe0 DB 0xc5,0xf8,0x29,0x78,0xf0 DB 0xc5,0x78,0x29,0x40,0x00 DB 0xc5,0x78,0x29,0x48,0x10 DB 0xc5,0x78,0x29,0x50,0x20 DB 0xc5,0x78,0x29,0x58,0x30 DB 0xc5,0x78,0x29,0x60,0x40 DB 0xc5,0x78,0x29,0x68,0x50 DB 0xc5,0x78,0x29,0x70,0x60 DB 0xc5,0x78,0x29,0x78,0x70 vmovdqa ymm0,YMMWORD[$L$Three] vpxor ymm2,ymm2,ymm2 vpxor ymm3,ymm3,ymm3 vmovdqa ymm4,YMMWORD[$L$One] vmovdqa ymm8,YMMWORD[$L$Two] vmovdqa ymm12,YMMWORD[$L$Three] vmovd xmm1,r8d vpermd ymm1,ymm2,ymm1 mov rax,21 $L$select_loop_avx2_w7: vmovdqa ymm5,YMMWORD[rdx] vmovdqa ymm6,YMMWORD[32+rdx] vmovdqa ymm9,YMMWORD[64+rdx] vmovdqa ymm10,YMMWORD[96+rdx] vmovdqa ymm13,YMMWORD[128+rdx] vmovdqa ymm14,YMMWORD[160+rdx] vpcmpeqd ymm7,ymm4,ymm1 vpcmpeqd ymm11,ymm8,ymm1 vpcmpeqd ymm15,ymm12,ymm1 vpaddd ymm4,ymm4,ymm0 vpaddd ymm8,ymm8,ymm0 vpaddd ymm12,ymm12,ymm0 lea rdx,[192+rdx] vpand ymm5,ymm5,ymm7 vpand ymm6,ymm6,ymm7 vpand ymm9,ymm9,ymm11 vpand ymm10,ymm10,ymm11 vpand ymm13,ymm13,ymm15 vpand ymm14,ymm14,ymm15 vpxor ymm2,ymm2,ymm5 vpxor ymm3,ymm3,ymm6 vpxor ymm2,ymm2,ymm9 vpxor ymm3,ymm3,ymm10 vpxor ymm2,ymm2,ymm13 vpxor ymm3,ymm3,ymm14 dec rax jnz NEAR $L$select_loop_avx2_w7 vmovdqa ymm5,YMMWORD[rdx] vmovdqa ymm6,YMMWORD[32+rdx] vpcmpeqd ymm7,ymm4,ymm1 vpand ymm5,ymm5,ymm7 vpand ymm6,ymm6,ymm7 vpxor ymm2,ymm2,ymm5 vpxor ymm3,ymm3,ymm6 vmovdqu YMMWORD[rcx],ymm2 vmovdqu YMMWORD[32+rcx],ymm3 vzeroupper movaps xmm6,XMMWORD[rsp] movaps xmm7,XMMWORD[16+rsp] movaps xmm8,XMMWORD[32+rsp] movaps xmm9,XMMWORD[48+rsp] movaps xmm10,XMMWORD[64+rsp] movaps xmm11,XMMWORD[80+rsp] movaps xmm12,XMMWORD[96+rsp] movaps xmm13,XMMWORD[112+rsp] movaps xmm14,XMMWORD[128+rsp] movaps xmm15,XMMWORD[144+rsp] lea rsp,[r11] DB 0F3h,0C3h ;repret $L$SEH_end_ecp_nistz256_avx2_select_w7: ALIGN 32 __ecp_nistz256_add_toq: xor r11,r11 add r12,QWORD[rbx] adc r13,QWORD[8+rbx] mov rax,r12 adc r8,QWORD[16+rbx] adc r9,QWORD[24+rbx] mov rbp,r13 adc r11,0 sub r12,-1 mov rcx,r8 sbb r13,r14 sbb r8,0 mov r10,r9 sbb r9,r15 sbb r11,0 cmovc r12,rax cmovc r13,rbp mov QWORD[rdi],r12 cmovc r8,rcx mov QWORD[8+rdi],r13 cmovc r9,r10 mov QWORD[16+rdi],r8 mov QWORD[24+rdi],r9 DB 0F3h,0C3h ;repret ALIGN 32 __ecp_nistz256_sub_fromq: sub r12,QWORD[rbx] sbb r13,QWORD[8+rbx] mov rax,r12 sbb r8,QWORD[16+rbx] sbb r9,QWORD[24+rbx] mov rbp,r13 sbb r11,r11 add r12,-1 mov rcx,r8 adc r13,r14 adc r8,0 mov r10,r9 adc r9,r15 test r11,r11 cmovz r12,rax cmovz r13,rbp mov QWORD[rdi],r12 cmovz r8,rcx mov QWORD[8+rdi],r13 cmovz r9,r10 mov QWORD[16+rdi],r8 mov QWORD[24+rdi],r9 DB 0F3h,0C3h ;repret ALIGN 32 __ecp_nistz256_subq: sub rax,r12 sbb rbp,r13 mov r12,rax sbb rcx,r8 sbb r10,r9 mov r13,rbp sbb r11,r11 add rax,-1 mov r8,rcx adc rbp,r14 adc rcx,0 mov r9,r10 adc r10,r15 test r11,r11 cmovnz r12,rax cmovnz r13,rbp cmovnz r8,rcx cmovnz r9,r10 DB 0F3h,0C3h ;repret ALIGN 32 __ecp_nistz256_mul_by_2q: xor r11,r11 add r12,r12 adc r13,r13 mov rax,r12 adc r8,r8 adc r9,r9 mov rbp,r13 adc r11,0 sub r12,-1 mov rcx,r8 sbb r13,r14 sbb r8,0 mov r10,r9 sbb r9,r15 sbb r11,0 cmovc r12,rax cmovc r13,rbp mov QWORD[rdi],r12 cmovc r8,rcx mov QWORD[8+rdi],r13 cmovc r9,r10 mov QWORD[16+rdi],r8 mov QWORD[24+rdi],r9 DB 0F3h,0C3h ;repret global ecp_nistz256_point_double ALIGN 32 ecp_nistz256_point_double: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp $L$SEH_begin_ecp_nistz256_point_double: mov rdi,rcx mov rsi,rdx lea rcx,[OPENSSL_ia32cap_P] mov rcx,QWORD[8+rcx] and ecx,0x80100 cmp ecx,0x80100 je NEAR $L$point_doublex push rbp push rbx push r12 push r13 push r14 push r15 sub rsp,32*5+8 $L$point_doubleq_body: $L$point_double_shortcutq: movdqu xmm0,XMMWORD[rsi] mov rbx,rsi movdqu xmm1,XMMWORD[16+rsi] mov r12,QWORD[((32+0))+rsi] mov r13,QWORD[((32+8))+rsi] mov r8,QWORD[((32+16))+rsi] mov r9,QWORD[((32+24))+rsi] mov r14,QWORD[(($L$poly+8))] mov r15,QWORD[(($L$poly+24))] movdqa XMMWORD[96+rsp],xmm0 movdqa XMMWORD[(96+16)+rsp],xmm1 lea r10,[32+rdi] lea r11,[64+rdi] DB 102,72,15,110,199 DB 102,73,15,110,202 DB 102,73,15,110,211 lea rdi,[rsp] call __ecp_nistz256_mul_by_2q mov rax,QWORD[((64+0))+rsi] mov r14,QWORD[((64+8))+rsi] mov r15,QWORD[((64+16))+rsi] mov r8,QWORD[((64+24))+rsi] lea rsi,[((64-0))+rsi] lea rdi,[64+rsp] call __ecp_nistz256_sqr_montq mov rax,QWORD[((0+0))+rsp] mov r14,QWORD[((8+0))+rsp] lea rsi,[((0+0))+rsp] mov r15,QWORD[((16+0))+rsp] mov r8,QWORD[((24+0))+rsp] lea rdi,[rsp] call __ecp_nistz256_sqr_montq mov rax,QWORD[32+rbx] mov r9,QWORD[((64+0))+rbx] mov r10,QWORD[((64+8))+rbx] mov r11,QWORD[((64+16))+rbx] mov r12,QWORD[((64+24))+rbx] lea rsi,[((64-0))+rbx] lea rbx,[32+rbx] DB 102,72,15,126,215 call __ecp_nistz256_mul_montq call __ecp_nistz256_mul_by_2q mov r12,QWORD[((96+0))+rsp] mov r13,QWORD[((96+8))+rsp] lea rbx,[64+rsp] mov r8,QWORD[((96+16))+rsp] mov r9,QWORD[((96+24))+rsp] lea rdi,[32+rsp] call __ecp_nistz256_add_toq mov r12,QWORD[((96+0))+rsp] mov r13,QWORD[((96+8))+rsp] lea rbx,[64+rsp] mov r8,QWORD[((96+16))+rsp] mov r9,QWORD[((96+24))+rsp] lea rdi,[64+rsp] call __ecp_nistz256_sub_fromq mov rax,QWORD[((0+0))+rsp] mov r14,QWORD[((8+0))+rsp] lea rsi,[((0+0))+rsp] mov r15,QWORD[((16+0))+rsp] mov r8,QWORD[((24+0))+rsp] DB 102,72,15,126,207 call __ecp_nistz256_sqr_montq xor r9,r9 mov rax,r12 add r12,-1 mov r10,r13 adc r13,rsi mov rcx,r14 adc r14,0 mov r8,r15 adc r15,rbp adc r9,0 xor rsi,rsi test rax,1 cmovz r12,rax cmovz r13,r10 cmovz r14,rcx cmovz r15,r8 cmovz r9,rsi mov rax,r13 shr r12,1 shl rax,63 mov r10,r14 shr r13,1 or r12,rax shl r10,63 mov rcx,r15 shr r14,1 or r13,r10 shl rcx,63 mov QWORD[rdi],r12 shr r15,1 mov QWORD[8+rdi],r13 shl r9,63 or r14,rcx or r15,r9 mov QWORD[16+rdi],r14 mov QWORD[24+rdi],r15 mov rax,QWORD[64+rsp] lea rbx,[64+rsp] mov r9,QWORD[((0+32))+rsp] mov r10,QWORD[((8+32))+rsp] lea rsi,[((0+32))+rsp] mov r11,QWORD[((16+32))+rsp] mov r12,QWORD[((24+32))+rsp] lea rdi,[32+rsp] call __ecp_nistz256_mul_montq lea rdi,[128+rsp] call __ecp_nistz256_mul_by_2q lea rbx,[32+rsp] lea rdi,[32+rsp] call __ecp_nistz256_add_toq mov rax,QWORD[96+rsp] lea rbx,[96+rsp] mov r9,QWORD[((0+0))+rsp] mov r10,QWORD[((8+0))+rsp] lea rsi,[((0+0))+rsp] mov r11,QWORD[((16+0))+rsp] mov r12,QWORD[((24+0))+rsp] lea rdi,[rsp] call __ecp_nistz256_mul_montq lea rdi,[128+rsp] call __ecp_nistz256_mul_by_2q mov rax,QWORD[((0+32))+rsp] mov r14,QWORD[((8+32))+rsp] lea rsi,[((0+32))+rsp] mov r15,QWORD[((16+32))+rsp] mov r8,QWORD[((24+32))+rsp] DB 102,72,15,126,199 call __ecp_nistz256_sqr_montq lea rbx,[128+rsp] mov r8,r14 mov r9,r15 mov r14,rsi mov r15,rbp call __ecp_nistz256_sub_fromq mov rax,QWORD[((0+0))+rsp] mov rbp,QWORD[((0+8))+rsp] mov rcx,QWORD[((0+16))+rsp] mov r10,QWORD[((0+24))+rsp] lea rdi,[rsp] call __ecp_nistz256_subq mov rax,QWORD[32+rsp] lea rbx,[32+rsp] mov r14,r12 xor ecx,ecx mov QWORD[((0+0))+rsp],r12 mov r10,r13 mov QWORD[((0+8))+rsp],r13 cmovz r11,r8 mov QWORD[((0+16))+rsp],r8 lea rsi,[((0-0))+rsp] cmovz r12,r9 mov QWORD[((0+24))+rsp],r9 mov r9,r14 lea rdi,[rsp] call __ecp_nistz256_mul_montq DB 102,72,15,126,203 DB 102,72,15,126,207 call __ecp_nistz256_sub_fromq lea rsi,[((160+56))+rsp] mov r15,QWORD[((-48))+rsi] mov r14,QWORD[((-40))+rsi] mov r13,QWORD[((-32))+rsi] mov r12,QWORD[((-24))+rsi] mov rbx,QWORD[((-16))+rsi] mov rbp,QWORD[((-8))+rsi] lea rsp,[rsi] $L$point_doubleq_epilogue: mov rdi,QWORD[8+rsp] ;WIN64 epilogue mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret $L$SEH_end_ecp_nistz256_point_double: global ecp_nistz256_point_add ALIGN 32 ecp_nistz256_point_add: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp $L$SEH_begin_ecp_nistz256_point_add: mov rdi,rcx mov rsi,rdx mov rdx,r8 lea rcx,[OPENSSL_ia32cap_P] mov rcx,QWORD[8+rcx] and ecx,0x80100 cmp ecx,0x80100 je NEAR $L$point_addx push rbp push rbx push r12 push r13 push r14 push r15 sub rsp,32*18+8 $L$point_addq_body: movdqu xmm0,XMMWORD[rsi] movdqu xmm1,XMMWORD[16+rsi] movdqu xmm2,XMMWORD[32+rsi] movdqu xmm3,XMMWORD[48+rsi] movdqu xmm4,XMMWORD[64+rsi] movdqu xmm5,XMMWORD[80+rsi] mov rbx,rsi mov rsi,rdx movdqa XMMWORD[384+rsp],xmm0 movdqa XMMWORD[(384+16)+rsp],xmm1 movdqa XMMWORD[416+rsp],xmm2 movdqa XMMWORD[(416+16)+rsp],xmm3 movdqa XMMWORD[448+rsp],xmm4 movdqa XMMWORD[(448+16)+rsp],xmm5 por xmm5,xmm4 movdqu xmm0,XMMWORD[rsi] pshufd xmm3,xmm5,0xb1 movdqu xmm1,XMMWORD[16+rsi] movdqu xmm2,XMMWORD[32+rsi] por xmm5,xmm3 movdqu xmm3,XMMWORD[48+rsi] mov rax,QWORD[((64+0))+rsi] mov r14,QWORD[((64+8))+rsi] mov r15,QWORD[((64+16))+rsi] mov r8,QWORD[((64+24))+rsi] movdqa XMMWORD[480+rsp],xmm0 pshufd xmm4,xmm5,0x1e movdqa XMMWORD[(480+16)+rsp],xmm1 movdqu xmm0,XMMWORD[64+rsi] movdqu xmm1,XMMWORD[80+rsi] movdqa XMMWORD[512+rsp],xmm2 movdqa XMMWORD[(512+16)+rsp],xmm3 por xmm5,xmm4 pxor xmm4,xmm4 por xmm1,xmm0 DB 102,72,15,110,199 lea rsi,[((64-0))+rsi] mov QWORD[((544+0))+rsp],rax mov QWORD[((544+8))+rsp],r14 mov QWORD[((544+16))+rsp],r15 mov QWORD[((544+24))+rsp],r8 lea rdi,[96+rsp] call __ecp_nistz256_sqr_montq pcmpeqd xmm5,xmm4 pshufd xmm4,xmm1,0xb1 por xmm4,xmm1 pshufd xmm5,xmm5,0 pshufd xmm3,xmm4,0x1e por xmm4,xmm3 pxor xmm3,xmm3 pcmpeqd xmm4,xmm3 pshufd xmm4,xmm4,0 mov rax,QWORD[((64+0))+rbx] mov r14,QWORD[((64+8))+rbx] mov r15,QWORD[((64+16))+rbx] mov r8,QWORD[((64+24))+rbx] DB 102,72,15,110,203 lea rsi,[((64-0))+rbx] lea rdi,[32+rsp] call __ecp_nistz256_sqr_montq mov rax,QWORD[544+rsp] lea rbx,[544+rsp] mov r9,QWORD[((0+96))+rsp] mov r10,QWORD[((8+96))+rsp] lea rsi,[((0+96))+rsp] mov r11,QWORD[((16+96))+rsp] mov r12,QWORD[((24+96))+rsp] lea rdi,[224+rsp] call __ecp_nistz256_mul_montq mov rax,QWORD[448+rsp] lea rbx,[448+rsp] mov r9,QWORD[((0+32))+rsp] mov r10,QWORD[((8+32))+rsp] lea rsi,[((0+32))+rsp] mov r11,QWORD[((16+32))+rsp] mov r12,QWORD[((24+32))+rsp] lea rdi,[256+rsp] call __ecp_nistz256_mul_montq mov rax,QWORD[416+rsp] lea rbx,[416+rsp] mov r9,QWORD[((0+224))+rsp] mov r10,QWORD[((8+224))+rsp] lea rsi,[((0+224))+rsp] mov r11,QWORD[((16+224))+rsp] mov r12,QWORD[((24+224))+rsp] lea rdi,[224+rsp] call __ecp_nistz256_mul_montq mov rax,QWORD[512+rsp] lea rbx,[512+rsp] mov r9,QWORD[((0+256))+rsp] mov r10,QWORD[((8+256))+rsp] lea rsi,[((0+256))+rsp] mov r11,QWORD[((16+256))+rsp] mov r12,QWORD[((24+256))+rsp] lea rdi,[256+rsp] call __ecp_nistz256_mul_montq lea rbx,[224+rsp] lea rdi,[64+rsp] call __ecp_nistz256_sub_fromq or r12,r13 movdqa xmm2,xmm4 or r12,r8 or r12,r9 por xmm2,xmm5 DB 102,73,15,110,220 mov rax,QWORD[384+rsp] lea rbx,[384+rsp] mov r9,QWORD[((0+96))+rsp] mov r10,QWORD[((8+96))+rsp] lea rsi,[((0+96))+rsp] mov r11,QWORD[((16+96))+rsp] mov r12,QWORD[((24+96))+rsp] lea rdi,[160+rsp] call __ecp_nistz256_mul_montq mov rax,QWORD[480+rsp] lea rbx,[480+rsp] mov r9,QWORD[((0+32))+rsp] mov r10,QWORD[((8+32))+rsp] lea rsi,[((0+32))+rsp] mov r11,QWORD[((16+32))+rsp] mov r12,QWORD[((24+32))+rsp] lea rdi,[192+rsp] call __ecp_nistz256_mul_montq lea rbx,[160+rsp] lea rdi,[rsp] call __ecp_nistz256_sub_fromq or r12,r13 or r12,r8 or r12,r9 DB 102,73,15,126,208 DB 102,73,15,126,217 or r12,r8 DB 0x3e jnz NEAR $L$add_proceedq test r9,r9 jz NEAR $L$add_doubleq DB 102,72,15,126,199 pxor xmm0,xmm0 movdqu XMMWORD[rdi],xmm0 movdqu XMMWORD[16+rdi],xmm0 movdqu XMMWORD[32+rdi],xmm0 movdqu XMMWORD[48+rdi],xmm0 movdqu XMMWORD[64+rdi],xmm0 movdqu XMMWORD[80+rdi],xmm0 jmp NEAR $L$add_doneq ALIGN 32 $L$add_doubleq: DB 102,72,15,126,206 DB 102,72,15,126,199 add rsp,416 jmp NEAR $L$point_double_shortcutq ALIGN 32 $L$add_proceedq: mov rax,QWORD[((0+64))+rsp] mov r14,QWORD[((8+64))+rsp] lea rsi,[((0+64))+rsp] mov r15,QWORD[((16+64))+rsp] mov r8,QWORD[((24+64))+rsp] lea rdi,[96+rsp] call __ecp_nistz256_sqr_montq mov rax,QWORD[448+rsp] lea rbx,[448+rsp] mov r9,QWORD[((0+0))+rsp] mov r10,QWORD[((8+0))+rsp] lea rsi,[((0+0))+rsp] mov r11,QWORD[((16+0))+rsp] mov r12,QWORD[((24+0))+rsp] lea rdi,[352+rsp] call __ecp_nistz256_mul_montq mov rax,QWORD[((0+0))+rsp] mov r14,QWORD[((8+0))+rsp] lea rsi,[((0+0))+rsp] mov r15,QWORD[((16+0))+rsp] mov r8,QWORD[((24+0))+rsp] lea rdi,[32+rsp] call __ecp_nistz256_sqr_montq mov rax,QWORD[544+rsp] lea rbx,[544+rsp] mov r9,QWORD[((0+352))+rsp] mov r10,QWORD[((8+352))+rsp] lea rsi,[((0+352))+rsp] mov r11,QWORD[((16+352))+rsp] mov r12,QWORD[((24+352))+rsp] lea rdi,[352+rsp] call __ecp_nistz256_mul_montq mov rax,QWORD[rsp] lea rbx,[rsp] mov r9,QWORD[((0+32))+rsp] mov r10,QWORD[((8+32))+rsp] lea rsi,[((0+32))+rsp] mov r11,QWORD[((16+32))+rsp] mov r12,QWORD[((24+32))+rsp] lea rdi,[128+rsp] call __ecp_nistz256_mul_montq mov rax,QWORD[160+rsp] lea rbx,[160+rsp] mov r9,QWORD[((0+32))+rsp] mov r10,QWORD[((8+32))+rsp] lea rsi,[((0+32))+rsp] mov r11,QWORD[((16+32))+rsp] mov r12,QWORD[((24+32))+rsp] lea rdi,[192+rsp] call __ecp_nistz256_mul_montq xor r11,r11 add r12,r12 lea rsi,[96+rsp] adc r13,r13 mov rax,r12 adc r8,r8 adc r9,r9 mov rbp,r13 adc r11,0 sub r12,-1 mov rcx,r8 sbb r13,r14 sbb r8,0 mov r10,r9 sbb r9,r15 sbb r11,0 cmovc r12,rax mov rax,QWORD[rsi] cmovc r13,rbp mov rbp,QWORD[8+rsi] cmovc r8,rcx mov rcx,QWORD[16+rsi] cmovc r9,r10 mov r10,QWORD[24+rsi] call __ecp_nistz256_subq lea rbx,[128+rsp] lea rdi,[288+rsp] call __ecp_nistz256_sub_fromq mov rax,QWORD[((192+0))+rsp] mov rbp,QWORD[((192+8))+rsp] mov rcx,QWORD[((192+16))+rsp] mov r10,QWORD[((192+24))+rsp] lea rdi,[320+rsp] call __ecp_nistz256_subq mov QWORD[rdi],r12 mov QWORD[8+rdi],r13 mov QWORD[16+rdi],r8 mov QWORD[24+rdi],r9 mov rax,QWORD[128+rsp] lea rbx,[128+rsp] mov r9,QWORD[((0+224))+rsp] mov r10,QWORD[((8+224))+rsp] lea rsi,[((0+224))+rsp] mov r11,QWORD[((16+224))+rsp] mov r12,QWORD[((24+224))+rsp] lea rdi,[256+rsp] call __ecp_nistz256_mul_montq mov rax,QWORD[320+rsp] lea rbx,[320+rsp] mov r9,QWORD[((0+64))+rsp] mov r10,QWORD[((8+64))+rsp] lea rsi,[((0+64))+rsp] mov r11,QWORD[((16+64))+rsp] mov r12,QWORD[((24+64))+rsp] lea rdi,[320+rsp] call __ecp_nistz256_mul_montq lea rbx,[256+rsp] lea rdi,[320+rsp] call __ecp_nistz256_sub_fromq DB 102,72,15,126,199 movdqa xmm0,xmm5 movdqa xmm1,xmm5 pandn xmm0,XMMWORD[352+rsp] movdqa xmm2,xmm5 pandn xmm1,XMMWORD[((352+16))+rsp] movdqa xmm3,xmm5 pand xmm2,XMMWORD[544+rsp] pand xmm3,XMMWORD[((544+16))+rsp] por xmm2,xmm0 por xmm3,xmm1 movdqa xmm0,xmm4 movdqa xmm1,xmm4 pandn xmm0,xmm2 movdqa xmm2,xmm4 pandn xmm1,xmm3 movdqa xmm3,xmm4 pand xmm2,XMMWORD[448+rsp] pand xmm3,XMMWORD[((448+16))+rsp] por xmm2,xmm0 por xmm3,xmm1 movdqu XMMWORD[64+rdi],xmm2 movdqu XMMWORD[80+rdi],xmm3 movdqa xmm0,xmm5 movdqa xmm1,xmm5 pandn xmm0,XMMWORD[288+rsp] movdqa xmm2,xmm5 pandn xmm1,XMMWORD[((288+16))+rsp] movdqa xmm3,xmm5 pand xmm2,XMMWORD[480+rsp] pand xmm3,XMMWORD[((480+16))+rsp] por xmm2,xmm0 por xmm3,xmm1 movdqa xmm0,xmm4 movdqa xmm1,xmm4 pandn xmm0,xmm2 movdqa xmm2,xmm4 pandn xmm1,xmm3 movdqa xmm3,xmm4 pand xmm2,XMMWORD[384+rsp] pand xmm3,XMMWORD[((384+16))+rsp] por xmm2,xmm0 por xmm3,xmm1 movdqu XMMWORD[rdi],xmm2 movdqu XMMWORD[16+rdi],xmm3 movdqa xmm0,xmm5 movdqa xmm1,xmm5 pandn xmm0,XMMWORD[320+rsp] movdqa xmm2,xmm5 pandn xmm1,XMMWORD[((320+16))+rsp] movdqa xmm3,xmm5 pand xmm2,XMMWORD[512+rsp] pand xmm3,XMMWORD[((512+16))+rsp] por xmm2,xmm0 por xmm3,xmm1 movdqa xmm0,xmm4 movdqa xmm1,xmm4 pandn xmm0,xmm2 movdqa xmm2,xmm4 pandn xmm1,xmm3 movdqa xmm3,xmm4 pand xmm2,XMMWORD[416+rsp] pand xmm3,XMMWORD[((416+16))+rsp] por xmm2,xmm0 por xmm3,xmm1 movdqu XMMWORD[32+rdi],xmm2 movdqu XMMWORD[48+rdi],xmm3 $L$add_doneq: lea rsi,[((576+56))+rsp] mov r15,QWORD[((-48))+rsi] mov r14,QWORD[((-40))+rsi] mov r13,QWORD[((-32))+rsi] mov r12,QWORD[((-24))+rsi] mov rbx,QWORD[((-16))+rsi] mov rbp,QWORD[((-8))+rsi] lea rsp,[rsi] $L$point_addq_epilogue: mov rdi,QWORD[8+rsp] ;WIN64 epilogue mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret $L$SEH_end_ecp_nistz256_point_add: global ecp_nistz256_point_add_affine ALIGN 32 ecp_nistz256_point_add_affine: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp $L$SEH_begin_ecp_nistz256_point_add_affine: mov rdi,rcx mov rsi,rdx mov rdx,r8 lea rcx,[OPENSSL_ia32cap_P] mov rcx,QWORD[8+rcx] and ecx,0x80100 cmp ecx,0x80100 je NEAR $L$point_add_affinex push rbp push rbx push r12 push r13 push r14 push r15 sub rsp,32*15+8 $L$add_affineq_body: movdqu xmm0,XMMWORD[rsi] mov rbx,rdx movdqu xmm1,XMMWORD[16+rsi] movdqu xmm2,XMMWORD[32+rsi] movdqu xmm3,XMMWORD[48+rsi] movdqu xmm4,XMMWORD[64+rsi] movdqu xmm5,XMMWORD[80+rsi] mov rax,QWORD[((64+0))+rsi] mov r14,QWORD[((64+8))+rsi] mov r15,QWORD[((64+16))+rsi] mov r8,QWORD[((64+24))+rsi] movdqa XMMWORD[320+rsp],xmm0 movdqa XMMWORD[(320+16)+rsp],xmm1 movdqa XMMWORD[352+rsp],xmm2 movdqa XMMWORD[(352+16)+rsp],xmm3 movdqa XMMWORD[384+rsp],xmm4 movdqa XMMWORD[(384+16)+rsp],xmm5 por xmm5,xmm4 movdqu xmm0,XMMWORD[rbx] pshufd xmm3,xmm5,0xb1 movdqu xmm1,XMMWORD[16+rbx] movdqu xmm2,XMMWORD[32+rbx] por xmm5,xmm3 movdqu xmm3,XMMWORD[48+rbx] movdqa XMMWORD[416+rsp],xmm0 pshufd xmm4,xmm5,0x1e movdqa XMMWORD[(416+16)+rsp],xmm1 por xmm1,xmm0 DB 102,72,15,110,199 movdqa XMMWORD[448+rsp],xmm2 movdqa XMMWORD[(448+16)+rsp],xmm3 por xmm3,xmm2 por xmm5,xmm4 pxor xmm4,xmm4 por xmm3,xmm1 lea rsi,[((64-0))+rsi] lea rdi,[32+rsp] call __ecp_nistz256_sqr_montq pcmpeqd xmm5,xmm4 pshufd xmm4,xmm3,0xb1 mov rax,QWORD[rbx] mov r9,r12 por xmm4,xmm3 pshufd xmm5,xmm5,0 pshufd xmm3,xmm4,0x1e mov r10,r13 por xmm4,xmm3 pxor xmm3,xmm3 mov r11,r14 pcmpeqd xmm4,xmm3 pshufd xmm4,xmm4,0 lea rsi,[((32-0))+rsp] mov r12,r15 lea rdi,[rsp] call __ecp_nistz256_mul_montq lea rbx,[320+rsp] lea rdi,[64+rsp] call __ecp_nistz256_sub_fromq mov rax,QWORD[384+rsp] lea rbx,[384+rsp] mov r9,QWORD[((0+32))+rsp] mov r10,QWORD[((8+32))+rsp] lea rsi,[((0+32))+rsp] mov r11,QWORD[((16+32))+rsp] mov r12,QWORD[((24+32))+rsp] lea rdi,[32+rsp] call __ecp_nistz256_mul_montq mov rax,QWORD[384+rsp] lea rbx,[384+rsp] mov r9,QWORD[((0+64))+rsp] mov r10,QWORD[((8+64))+rsp] lea rsi,[((0+64))+rsp] mov r11,QWORD[((16+64))+rsp] mov r12,QWORD[((24+64))+rsp] lea rdi,[288+rsp] call __ecp_nistz256_mul_montq mov rax,QWORD[448+rsp] lea rbx,[448+rsp] mov r9,QWORD[((0+32))+rsp] mov r10,QWORD[((8+32))+rsp] lea rsi,[((0+32))+rsp] mov r11,QWORD[((16+32))+rsp] mov r12,QWORD[((24+32))+rsp] lea rdi,[32+rsp] call __ecp_nistz256_mul_montq lea rbx,[352+rsp] lea rdi,[96+rsp] call __ecp_nistz256_sub_fromq mov rax,QWORD[((0+64))+rsp] mov r14,QWORD[((8+64))+rsp] lea rsi,[((0+64))+rsp] mov r15,QWORD[((16+64))+rsp] mov r8,QWORD[((24+64))+rsp] lea rdi,[128+rsp] call __ecp_nistz256_sqr_montq mov rax,QWORD[((0+96))+rsp] mov r14,QWORD[((8+96))+rsp] lea rsi,[((0+96))+rsp] mov r15,QWORD[((16+96))+rsp] mov r8,QWORD[((24+96))+rsp] lea rdi,[192+rsp] call __ecp_nistz256_sqr_montq mov rax,QWORD[128+rsp] lea rbx,[128+rsp] mov r9,QWORD[((0+64))+rsp] mov r10,QWORD[((8+64))+rsp] lea rsi,[((0+64))+rsp] mov r11,QWORD[((16+64))+rsp] mov r12,QWORD[((24+64))+rsp] lea rdi,[160+rsp] call __ecp_nistz256_mul_montq mov rax,QWORD[320+rsp] lea rbx,[320+rsp] mov r9,QWORD[((0+128))+rsp] mov r10,QWORD[((8+128))+rsp] lea rsi,[((0+128))+rsp] mov r11,QWORD[((16+128))+rsp] mov r12,QWORD[((24+128))+rsp] lea rdi,[rsp] call __ecp_nistz256_mul_montq xor r11,r11 add r12,r12 lea rsi,[192+rsp] adc r13,r13 mov rax,r12 adc r8,r8 adc r9,r9 mov rbp,r13 adc r11,0 sub r12,-1 mov rcx,r8 sbb r13,r14 sbb r8,0 mov r10,r9 sbb r9,r15 sbb r11,0 cmovc r12,rax mov rax,QWORD[rsi] cmovc r13,rbp mov rbp,QWORD[8+rsi] cmovc r8,rcx mov rcx,QWORD[16+rsi] cmovc r9,r10 mov r10,QWORD[24+rsi] call __ecp_nistz256_subq lea rbx,[160+rsp] lea rdi,[224+rsp] call __ecp_nistz256_sub_fromq mov rax,QWORD[((0+0))+rsp] mov rbp,QWORD[((0+8))+rsp] mov rcx,QWORD[((0+16))+rsp] mov r10,QWORD[((0+24))+rsp] lea rdi,[64+rsp] call __ecp_nistz256_subq mov QWORD[rdi],r12 mov QWORD[8+rdi],r13 mov QWORD[16+rdi],r8 mov QWORD[24+rdi],r9 mov rax,QWORD[352+rsp] lea rbx,[352+rsp] mov r9,QWORD[((0+160))+rsp] mov r10,QWORD[((8+160))+rsp] lea rsi,[((0+160))+rsp] mov r11,QWORD[((16+160))+rsp] mov r12,QWORD[((24+160))+rsp] lea rdi,[32+rsp] call __ecp_nistz256_mul_montq mov rax,QWORD[96+rsp] lea rbx,[96+rsp] mov r9,QWORD[((0+64))+rsp] mov r10,QWORD[((8+64))+rsp] lea rsi,[((0+64))+rsp] mov r11,QWORD[((16+64))+rsp] mov r12,QWORD[((24+64))+rsp] lea rdi,[64+rsp] call __ecp_nistz256_mul_montq lea rbx,[32+rsp] lea rdi,[256+rsp] call __ecp_nistz256_sub_fromq DB 102,72,15,126,199 movdqa xmm0,xmm5 movdqa xmm1,xmm5 pandn xmm0,XMMWORD[288+rsp] movdqa xmm2,xmm5 pandn xmm1,XMMWORD[((288+16))+rsp] movdqa xmm3,xmm5 pand xmm2,XMMWORD[$L$ONE_mont] pand xmm3,XMMWORD[(($L$ONE_mont+16))] por xmm2,xmm0 por xmm3,xmm1 movdqa xmm0,xmm4 movdqa xmm1,xmm4 pandn xmm0,xmm2 movdqa xmm2,xmm4 pandn xmm1,xmm3 movdqa xmm3,xmm4 pand xmm2,XMMWORD[384+rsp] pand xmm3,XMMWORD[((384+16))+rsp] por xmm2,xmm0 por xmm3,xmm1 movdqu XMMWORD[64+rdi],xmm2 movdqu XMMWORD[80+rdi],xmm3 movdqa xmm0,xmm5 movdqa xmm1,xmm5 pandn xmm0,XMMWORD[224+rsp] movdqa xmm2,xmm5 pandn xmm1,XMMWORD[((224+16))+rsp] movdqa xmm3,xmm5 pand xmm2,XMMWORD[416+rsp] pand xmm3,XMMWORD[((416+16))+rsp] por xmm2,xmm0 por xmm3,xmm1 movdqa xmm0,xmm4 movdqa xmm1,xmm4 pandn xmm0,xmm2 movdqa xmm2,xmm4 pandn xmm1,xmm3 movdqa xmm3,xmm4 pand xmm2,XMMWORD[320+rsp] pand xmm3,XMMWORD[((320+16))+rsp] por xmm2,xmm0 por xmm3,xmm1 movdqu XMMWORD[rdi],xmm2 movdqu XMMWORD[16+rdi],xmm3 movdqa xmm0,xmm5 movdqa xmm1,xmm5 pandn xmm0,XMMWORD[256+rsp] movdqa xmm2,xmm5 pandn xmm1,XMMWORD[((256+16))+rsp] movdqa xmm3,xmm5 pand xmm2,XMMWORD[448+rsp] pand xmm3,XMMWORD[((448+16))+rsp] por xmm2,xmm0 por xmm3,xmm1 movdqa xmm0,xmm4 movdqa xmm1,xmm4 pandn xmm0,xmm2 movdqa xmm2,xmm4 pandn xmm1,xmm3 movdqa xmm3,xmm4 pand xmm2,XMMWORD[352+rsp] pand xmm3,XMMWORD[((352+16))+rsp] por xmm2,xmm0 por xmm3,xmm1 movdqu XMMWORD[32+rdi],xmm2 movdqu XMMWORD[48+rdi],xmm3 lea rsi,[((480+56))+rsp] mov r15,QWORD[((-48))+rsi] mov r14,QWORD[((-40))+rsi] mov r13,QWORD[((-32))+rsi] mov r12,QWORD[((-24))+rsi] mov rbx,QWORD[((-16))+rsi] mov rbp,QWORD[((-8))+rsi] lea rsp,[rsi] $L$add_affineq_epilogue: mov rdi,QWORD[8+rsp] ;WIN64 epilogue mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret $L$SEH_end_ecp_nistz256_point_add_affine: ALIGN 32 __ecp_nistz256_add_tox: xor r11,r11 adc r12,QWORD[rbx] adc r13,QWORD[8+rbx] mov rax,r12 adc r8,QWORD[16+rbx] adc r9,QWORD[24+rbx] mov rbp,r13 adc r11,0 xor r10,r10 sbb r12,-1 mov rcx,r8 sbb r13,r14 sbb r8,0 mov r10,r9 sbb r9,r15 sbb r11,0 cmovc r12,rax cmovc r13,rbp mov QWORD[rdi],r12 cmovc r8,rcx mov QWORD[8+rdi],r13 cmovc r9,r10 mov QWORD[16+rdi],r8 mov QWORD[24+rdi],r9 DB 0F3h,0C3h ;repret ALIGN 32 __ecp_nistz256_sub_fromx: xor r11,r11 sbb r12,QWORD[rbx] sbb r13,QWORD[8+rbx] mov rax,r12 sbb r8,QWORD[16+rbx] sbb r9,QWORD[24+rbx] mov rbp,r13 sbb r11,0 xor r10,r10 adc r12,-1 mov rcx,r8 adc r13,r14 adc r8,0 mov r10,r9 adc r9,r15 bt r11,0 cmovnc r12,rax cmovnc r13,rbp mov QWORD[rdi],r12 cmovnc r8,rcx mov QWORD[8+rdi],r13 cmovnc r9,r10 mov QWORD[16+rdi],r8 mov QWORD[24+rdi],r9 DB 0F3h,0C3h ;repret ALIGN 32 __ecp_nistz256_subx: xor r11,r11 sbb rax,r12 sbb rbp,r13 mov r12,rax sbb rcx,r8 sbb r10,r9 mov r13,rbp sbb r11,0 xor r9,r9 adc rax,-1 mov r8,rcx adc rbp,r14 adc rcx,0 mov r9,r10 adc r10,r15 bt r11,0 cmovc r12,rax cmovc r13,rbp cmovc r8,rcx cmovc r9,r10 DB 0F3h,0C3h ;repret ALIGN 32 __ecp_nistz256_mul_by_2x: xor r11,r11 adc r12,r12 adc r13,r13 mov rax,r12 adc r8,r8 adc r9,r9 mov rbp,r13 adc r11,0 xor r10,r10 sbb r12,-1 mov rcx,r8 sbb r13,r14 sbb r8,0 mov r10,r9 sbb r9,r15 sbb r11,0 cmovc r12,rax cmovc r13,rbp mov QWORD[rdi],r12 cmovc r8,rcx mov QWORD[8+rdi],r13 cmovc r9,r10 mov QWORD[16+rdi],r8 mov QWORD[24+rdi],r9 DB 0F3h,0C3h ;repret ALIGN 32 ecp_nistz256_point_doublex: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp $L$SEH_begin_ecp_nistz256_point_doublex: mov rdi,rcx mov rsi,rdx $L$point_doublex: push rbp push rbx push r12 push r13 push r14 push r15 sub rsp,32*5+8 $L$point_doublex_body: $L$point_double_shortcutx: movdqu xmm0,XMMWORD[rsi] mov rbx,rsi movdqu xmm1,XMMWORD[16+rsi] mov r12,QWORD[((32+0))+rsi] mov r13,QWORD[((32+8))+rsi] mov r8,QWORD[((32+16))+rsi] mov r9,QWORD[((32+24))+rsi] mov r14,QWORD[(($L$poly+8))] mov r15,QWORD[(($L$poly+24))] movdqa XMMWORD[96+rsp],xmm0 movdqa XMMWORD[(96+16)+rsp],xmm1 lea r10,[32+rdi] lea r11,[64+rdi] DB 102,72,15,110,199 DB 102,73,15,110,202 DB 102,73,15,110,211 lea rdi,[rsp] call __ecp_nistz256_mul_by_2x mov rdx,QWORD[((64+0))+rsi] mov r14,QWORD[((64+8))+rsi] mov r15,QWORD[((64+16))+rsi] mov r8,QWORD[((64+24))+rsi] lea rsi,[((64-128))+rsi] lea rdi,[64+rsp] call __ecp_nistz256_sqr_montx mov rdx,QWORD[((0+0))+rsp] mov r14,QWORD[((8+0))+rsp] lea rsi,[((-128+0))+rsp] mov r15,QWORD[((16+0))+rsp] mov r8,QWORD[((24+0))+rsp] lea rdi,[rsp] call __ecp_nistz256_sqr_montx mov rdx,QWORD[32+rbx] mov r9,QWORD[((64+0))+rbx] mov r10,QWORD[((64+8))+rbx] mov r11,QWORD[((64+16))+rbx] mov r12,QWORD[((64+24))+rbx] lea rsi,[((64-128))+rbx] lea rbx,[32+rbx] DB 102,72,15,126,215 call __ecp_nistz256_mul_montx call __ecp_nistz256_mul_by_2x mov r12,QWORD[((96+0))+rsp] mov r13,QWORD[((96+8))+rsp] lea rbx,[64+rsp] mov r8,QWORD[((96+16))+rsp] mov r9,QWORD[((96+24))+rsp] lea rdi,[32+rsp] call __ecp_nistz256_add_tox mov r12,QWORD[((96+0))+rsp] mov r13,QWORD[((96+8))+rsp] lea rbx,[64+rsp] mov r8,QWORD[((96+16))+rsp] mov r9,QWORD[((96+24))+rsp] lea rdi,[64+rsp] call __ecp_nistz256_sub_fromx mov rdx,QWORD[((0+0))+rsp] mov r14,QWORD[((8+0))+rsp] lea rsi,[((-128+0))+rsp] mov r15,QWORD[((16+0))+rsp] mov r8,QWORD[((24+0))+rsp] DB 102,72,15,126,207 call __ecp_nistz256_sqr_montx xor r9,r9 mov rax,r12 add r12,-1 mov r10,r13 adc r13,rsi mov rcx,r14 adc r14,0 mov r8,r15 adc r15,rbp adc r9,0 xor rsi,rsi test rax,1 cmovz r12,rax cmovz r13,r10 cmovz r14,rcx cmovz r15,r8 cmovz r9,rsi mov rax,r13 shr r12,1 shl rax,63 mov r10,r14 shr r13,1 or r12,rax shl r10,63 mov rcx,r15 shr r14,1 or r13,r10 shl rcx,63 mov QWORD[rdi],r12 shr r15,1 mov QWORD[8+rdi],r13 shl r9,63 or r14,rcx or r15,r9 mov QWORD[16+rdi],r14 mov QWORD[24+rdi],r15 mov rdx,QWORD[64+rsp] lea rbx,[64+rsp] mov r9,QWORD[((0+32))+rsp] mov r10,QWORD[((8+32))+rsp] lea rsi,[((-128+32))+rsp] mov r11,QWORD[((16+32))+rsp] mov r12,QWORD[((24+32))+rsp] lea rdi,[32+rsp] call __ecp_nistz256_mul_montx lea rdi,[128+rsp] call __ecp_nistz256_mul_by_2x lea rbx,[32+rsp] lea rdi,[32+rsp] call __ecp_nistz256_add_tox mov rdx,QWORD[96+rsp] lea rbx,[96+rsp] mov r9,QWORD[((0+0))+rsp] mov r10,QWORD[((8+0))+rsp] lea rsi,[((-128+0))+rsp] mov r11,QWORD[((16+0))+rsp] mov r12,QWORD[((24+0))+rsp] lea rdi,[rsp] call __ecp_nistz256_mul_montx lea rdi,[128+rsp] call __ecp_nistz256_mul_by_2x mov rdx,QWORD[((0+32))+rsp] mov r14,QWORD[((8+32))+rsp] lea rsi,[((-128+32))+rsp] mov r15,QWORD[((16+32))+rsp] mov r8,QWORD[((24+32))+rsp] DB 102,72,15,126,199 call __ecp_nistz256_sqr_montx lea rbx,[128+rsp] mov r8,r14 mov r9,r15 mov r14,rsi mov r15,rbp call __ecp_nistz256_sub_fromx mov rax,QWORD[((0+0))+rsp] mov rbp,QWORD[((0+8))+rsp] mov rcx,QWORD[((0+16))+rsp] mov r10,QWORD[((0+24))+rsp] lea rdi,[rsp] call __ecp_nistz256_subx mov rdx,QWORD[32+rsp] lea rbx,[32+rsp] mov r14,r12 xor ecx,ecx mov QWORD[((0+0))+rsp],r12 mov r10,r13 mov QWORD[((0+8))+rsp],r13 cmovz r11,r8 mov QWORD[((0+16))+rsp],r8 lea rsi,[((0-128))+rsp] cmovz r12,r9 mov QWORD[((0+24))+rsp],r9 mov r9,r14 lea rdi,[rsp] call __ecp_nistz256_mul_montx DB 102,72,15,126,203 DB 102,72,15,126,207 call __ecp_nistz256_sub_fromx lea rsi,[((160+56))+rsp] mov r15,QWORD[((-48))+rsi] mov r14,QWORD[((-40))+rsi] mov r13,QWORD[((-32))+rsi] mov r12,QWORD[((-24))+rsi] mov rbx,QWORD[((-16))+rsi] mov rbp,QWORD[((-8))+rsi] lea rsp,[rsi] $L$point_doublex_epilogue: mov rdi,QWORD[8+rsp] ;WIN64 epilogue mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret $L$SEH_end_ecp_nistz256_point_doublex: ALIGN 32 ecp_nistz256_point_addx: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp $L$SEH_begin_ecp_nistz256_point_addx: mov rdi,rcx mov rsi,rdx mov rdx,r8 $L$point_addx: push rbp push rbx push r12 push r13 push r14 push r15 sub rsp,32*18+8 $L$point_addx_body: movdqu xmm0,XMMWORD[rsi] movdqu xmm1,XMMWORD[16+rsi] movdqu xmm2,XMMWORD[32+rsi] movdqu xmm3,XMMWORD[48+rsi] movdqu xmm4,XMMWORD[64+rsi] movdqu xmm5,XMMWORD[80+rsi] mov rbx,rsi mov rsi,rdx movdqa XMMWORD[384+rsp],xmm0 movdqa XMMWORD[(384+16)+rsp],xmm1 movdqa XMMWORD[416+rsp],xmm2 movdqa XMMWORD[(416+16)+rsp],xmm3 movdqa XMMWORD[448+rsp],xmm4 movdqa XMMWORD[(448+16)+rsp],xmm5 por xmm5,xmm4 movdqu xmm0,XMMWORD[rsi] pshufd xmm3,xmm5,0xb1 movdqu xmm1,XMMWORD[16+rsi] movdqu xmm2,XMMWORD[32+rsi] por xmm5,xmm3 movdqu xmm3,XMMWORD[48+rsi] mov rdx,QWORD[((64+0))+rsi] mov r14,QWORD[((64+8))+rsi] mov r15,QWORD[((64+16))+rsi] mov r8,QWORD[((64+24))+rsi] movdqa XMMWORD[480+rsp],xmm0 pshufd xmm4,xmm5,0x1e movdqa XMMWORD[(480+16)+rsp],xmm1 movdqu xmm0,XMMWORD[64+rsi] movdqu xmm1,XMMWORD[80+rsi] movdqa XMMWORD[512+rsp],xmm2 movdqa XMMWORD[(512+16)+rsp],xmm3 por xmm5,xmm4 pxor xmm4,xmm4 por xmm1,xmm0 DB 102,72,15,110,199 lea rsi,[((64-128))+rsi] mov QWORD[((544+0))+rsp],rdx mov QWORD[((544+8))+rsp],r14 mov QWORD[((544+16))+rsp],r15 mov QWORD[((544+24))+rsp],r8 lea rdi,[96+rsp] call __ecp_nistz256_sqr_montx pcmpeqd xmm5,xmm4 pshufd xmm4,xmm1,0xb1 por xmm4,xmm1 pshufd xmm5,xmm5,0 pshufd xmm3,xmm4,0x1e por xmm4,xmm3 pxor xmm3,xmm3 pcmpeqd xmm4,xmm3 pshufd xmm4,xmm4,0 mov rdx,QWORD[((64+0))+rbx] mov r14,QWORD[((64+8))+rbx] mov r15,QWORD[((64+16))+rbx] mov r8,QWORD[((64+24))+rbx] DB 102,72,15,110,203 lea rsi,[((64-128))+rbx] lea rdi,[32+rsp] call __ecp_nistz256_sqr_montx mov rdx,QWORD[544+rsp] lea rbx,[544+rsp] mov r9,QWORD[((0+96))+rsp] mov r10,QWORD[((8+96))+rsp] lea rsi,[((-128+96))+rsp] mov r11,QWORD[((16+96))+rsp] mov r12,QWORD[((24+96))+rsp] lea rdi,[224+rsp] call __ecp_nistz256_mul_montx mov rdx,QWORD[448+rsp] lea rbx,[448+rsp] mov r9,QWORD[((0+32))+rsp] mov r10,QWORD[((8+32))+rsp] lea rsi,[((-128+32))+rsp] mov r11,QWORD[((16+32))+rsp] mov r12,QWORD[((24+32))+rsp] lea rdi,[256+rsp] call __ecp_nistz256_mul_montx mov rdx,QWORD[416+rsp] lea rbx,[416+rsp] mov r9,QWORD[((0+224))+rsp] mov r10,QWORD[((8+224))+rsp] lea rsi,[((-128+224))+rsp] mov r11,QWORD[((16+224))+rsp] mov r12,QWORD[((24+224))+rsp] lea rdi,[224+rsp] call __ecp_nistz256_mul_montx mov rdx,QWORD[512+rsp] lea rbx,[512+rsp] mov r9,QWORD[((0+256))+rsp] mov r10,QWORD[((8+256))+rsp] lea rsi,[((-128+256))+rsp] mov r11,QWORD[((16+256))+rsp] mov r12,QWORD[((24+256))+rsp] lea rdi,[256+rsp] call __ecp_nistz256_mul_montx lea rbx,[224+rsp] lea rdi,[64+rsp] call __ecp_nistz256_sub_fromx or r12,r13 movdqa xmm2,xmm4 or r12,r8 or r12,r9 por xmm2,xmm5 DB 102,73,15,110,220 mov rdx,QWORD[384+rsp] lea rbx,[384+rsp] mov r9,QWORD[((0+96))+rsp] mov r10,QWORD[((8+96))+rsp] lea rsi,[((-128+96))+rsp] mov r11,QWORD[((16+96))+rsp] mov r12,QWORD[((24+96))+rsp] lea rdi,[160+rsp] call __ecp_nistz256_mul_montx mov rdx,QWORD[480+rsp] lea rbx,[480+rsp] mov r9,QWORD[((0+32))+rsp] mov r10,QWORD[((8+32))+rsp] lea rsi,[((-128+32))+rsp] mov r11,QWORD[((16+32))+rsp] mov r12,QWORD[((24+32))+rsp] lea rdi,[192+rsp] call __ecp_nistz256_mul_montx lea rbx,[160+rsp] lea rdi,[rsp] call __ecp_nistz256_sub_fromx or r12,r13 or r12,r8 or r12,r9 DB 102,73,15,126,208 DB 102,73,15,126,217 or r12,r8 DB 0x3e jnz NEAR $L$add_proceedx test r9,r9 jz NEAR $L$add_doublex DB 102,72,15,126,199 pxor xmm0,xmm0 movdqu XMMWORD[rdi],xmm0 movdqu XMMWORD[16+rdi],xmm0 movdqu XMMWORD[32+rdi],xmm0 movdqu XMMWORD[48+rdi],xmm0 movdqu XMMWORD[64+rdi],xmm0 movdqu XMMWORD[80+rdi],xmm0 jmp NEAR $L$add_donex ALIGN 32 $L$add_doublex: DB 102,72,15,126,206 DB 102,72,15,126,199 add rsp,416 jmp NEAR $L$point_double_shortcutx ALIGN 32 $L$add_proceedx: mov rdx,QWORD[((0+64))+rsp] mov r14,QWORD[((8+64))+rsp] lea rsi,[((-128+64))+rsp] mov r15,QWORD[((16+64))+rsp] mov r8,QWORD[((24+64))+rsp] lea rdi,[96+rsp] call __ecp_nistz256_sqr_montx mov rdx,QWORD[448+rsp] lea rbx,[448+rsp] mov r9,QWORD[((0+0))+rsp] mov r10,QWORD[((8+0))+rsp] lea rsi,[((-128+0))+rsp] mov r11,QWORD[((16+0))+rsp] mov r12,QWORD[((24+0))+rsp] lea rdi,[352+rsp] call __ecp_nistz256_mul_montx mov rdx,QWORD[((0+0))+rsp] mov r14,QWORD[((8+0))+rsp] lea rsi,[((-128+0))+rsp] mov r15,QWORD[((16+0))+rsp] mov r8,QWORD[((24+0))+rsp] lea rdi,[32+rsp] call __ecp_nistz256_sqr_montx mov rdx,QWORD[544+rsp] lea rbx,[544+rsp] mov r9,QWORD[((0+352))+rsp] mov r10,QWORD[((8+352))+rsp] lea rsi,[((-128+352))+rsp] mov r11,QWORD[((16+352))+rsp] mov r12,QWORD[((24+352))+rsp] lea rdi,[352+rsp] call __ecp_nistz256_mul_montx mov rdx,QWORD[rsp] lea rbx,[rsp] mov r9,QWORD[((0+32))+rsp] mov r10,QWORD[((8+32))+rsp] lea rsi,[((-128+32))+rsp] mov r11,QWORD[((16+32))+rsp] mov r12,QWORD[((24+32))+rsp] lea rdi,[128+rsp] call __ecp_nistz256_mul_montx mov rdx,QWORD[160+rsp] lea rbx,[160+rsp] mov r9,QWORD[((0+32))+rsp] mov r10,QWORD[((8+32))+rsp] lea rsi,[((-128+32))+rsp] mov r11,QWORD[((16+32))+rsp] mov r12,QWORD[((24+32))+rsp] lea rdi,[192+rsp] call __ecp_nistz256_mul_montx xor r11,r11 add r12,r12 lea rsi,[96+rsp] adc r13,r13 mov rax,r12 adc r8,r8 adc r9,r9 mov rbp,r13 adc r11,0 sub r12,-1 mov rcx,r8 sbb r13,r14 sbb r8,0 mov r10,r9 sbb r9,r15 sbb r11,0 cmovc r12,rax mov rax,QWORD[rsi] cmovc r13,rbp mov rbp,QWORD[8+rsi] cmovc r8,rcx mov rcx,QWORD[16+rsi] cmovc r9,r10 mov r10,QWORD[24+rsi] call __ecp_nistz256_subx lea rbx,[128+rsp] lea rdi,[288+rsp] call __ecp_nistz256_sub_fromx mov rax,QWORD[((192+0))+rsp] mov rbp,QWORD[((192+8))+rsp] mov rcx,QWORD[((192+16))+rsp] mov r10,QWORD[((192+24))+rsp] lea rdi,[320+rsp] call __ecp_nistz256_subx mov QWORD[rdi],r12 mov QWORD[8+rdi],r13 mov QWORD[16+rdi],r8 mov QWORD[24+rdi],r9 mov rdx,QWORD[128+rsp] lea rbx,[128+rsp] mov r9,QWORD[((0+224))+rsp] mov r10,QWORD[((8+224))+rsp] lea rsi,[((-128+224))+rsp] mov r11,QWORD[((16+224))+rsp] mov r12,QWORD[((24+224))+rsp] lea rdi,[256+rsp] call __ecp_nistz256_mul_montx mov rdx,QWORD[320+rsp] lea rbx,[320+rsp] mov r9,QWORD[((0+64))+rsp] mov r10,QWORD[((8+64))+rsp] lea rsi,[((-128+64))+rsp] mov r11,QWORD[((16+64))+rsp] mov r12,QWORD[((24+64))+rsp] lea rdi,[320+rsp] call __ecp_nistz256_mul_montx lea rbx,[256+rsp] lea rdi,[320+rsp] call __ecp_nistz256_sub_fromx DB 102,72,15,126,199 movdqa xmm0,xmm5 movdqa xmm1,xmm5 pandn xmm0,XMMWORD[352+rsp] movdqa xmm2,xmm5 pandn xmm1,XMMWORD[((352+16))+rsp] movdqa xmm3,xmm5 pand xmm2,XMMWORD[544+rsp] pand xmm3,XMMWORD[((544+16))+rsp] por xmm2,xmm0 por xmm3,xmm1 movdqa xmm0,xmm4 movdqa xmm1,xmm4 pandn xmm0,xmm2 movdqa xmm2,xmm4 pandn xmm1,xmm3 movdqa xmm3,xmm4 pand xmm2,XMMWORD[448+rsp] pand xmm3,XMMWORD[((448+16))+rsp] por xmm2,xmm0 por xmm3,xmm1 movdqu XMMWORD[64+rdi],xmm2 movdqu XMMWORD[80+rdi],xmm3 movdqa xmm0,xmm5 movdqa xmm1,xmm5 pandn xmm0,XMMWORD[288+rsp] movdqa xmm2,xmm5 pandn xmm1,XMMWORD[((288+16))+rsp] movdqa xmm3,xmm5 pand xmm2,XMMWORD[480+rsp] pand xmm3,XMMWORD[((480+16))+rsp] por xmm2,xmm0 por xmm3,xmm1 movdqa xmm0,xmm4 movdqa xmm1,xmm4 pandn xmm0,xmm2 movdqa xmm2,xmm4 pandn xmm1,xmm3 movdqa xmm3,xmm4 pand xmm2,XMMWORD[384+rsp] pand xmm3,XMMWORD[((384+16))+rsp] por xmm2,xmm0 por xmm3,xmm1 movdqu XMMWORD[rdi],xmm2 movdqu XMMWORD[16+rdi],xmm3 movdqa xmm0,xmm5 movdqa xmm1,xmm5 pandn xmm0,XMMWORD[320+rsp] movdqa xmm2,xmm5 pandn xmm1,XMMWORD[((320+16))+rsp] movdqa xmm3,xmm5 pand xmm2,XMMWORD[512+rsp] pand xmm3,XMMWORD[((512+16))+rsp] por xmm2,xmm0 por xmm3,xmm1 movdqa xmm0,xmm4 movdqa xmm1,xmm4 pandn xmm0,xmm2 movdqa xmm2,xmm4 pandn xmm1,xmm3 movdqa xmm3,xmm4 pand xmm2,XMMWORD[416+rsp] pand xmm3,XMMWORD[((416+16))+rsp] por xmm2,xmm0 por xmm3,xmm1 movdqu XMMWORD[32+rdi],xmm2 movdqu XMMWORD[48+rdi],xmm3 $L$add_donex: lea rsi,[((576+56))+rsp] mov r15,QWORD[((-48))+rsi] mov r14,QWORD[((-40))+rsi] mov r13,QWORD[((-32))+rsi] mov r12,QWORD[((-24))+rsi] mov rbx,QWORD[((-16))+rsi] mov rbp,QWORD[((-8))+rsi] lea rsp,[rsi] $L$point_addx_epilogue: mov rdi,QWORD[8+rsp] ;WIN64 epilogue mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret $L$SEH_end_ecp_nistz256_point_addx: ALIGN 32 ecp_nistz256_point_add_affinex: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp $L$SEH_begin_ecp_nistz256_point_add_affinex: mov rdi,rcx mov rsi,rdx mov rdx,r8 $L$point_add_affinex: push rbp push rbx push r12 push r13 push r14 push r15 sub rsp,32*15+8 $L$add_affinex_body: movdqu xmm0,XMMWORD[rsi] mov rbx,rdx movdqu xmm1,XMMWORD[16+rsi] movdqu xmm2,XMMWORD[32+rsi] movdqu xmm3,XMMWORD[48+rsi] movdqu xmm4,XMMWORD[64+rsi] movdqu xmm5,XMMWORD[80+rsi] mov rdx,QWORD[((64+0))+rsi] mov r14,QWORD[((64+8))+rsi] mov r15,QWORD[((64+16))+rsi] mov r8,QWORD[((64+24))+rsi] movdqa XMMWORD[320+rsp],xmm0 movdqa XMMWORD[(320+16)+rsp],xmm1 movdqa XMMWORD[352+rsp],xmm2 movdqa XMMWORD[(352+16)+rsp],xmm3 movdqa XMMWORD[384+rsp],xmm4 movdqa XMMWORD[(384+16)+rsp],xmm5 por xmm5,xmm4 movdqu xmm0,XMMWORD[rbx] pshufd xmm3,xmm5,0xb1 movdqu xmm1,XMMWORD[16+rbx] movdqu xmm2,XMMWORD[32+rbx] por xmm5,xmm3 movdqu xmm3,XMMWORD[48+rbx] movdqa XMMWORD[416+rsp],xmm0 pshufd xmm4,xmm5,0x1e movdqa XMMWORD[(416+16)+rsp],xmm1 por xmm1,xmm0 DB 102,72,15,110,199 movdqa XMMWORD[448+rsp],xmm2 movdqa XMMWORD[(448+16)+rsp],xmm3 por xmm3,xmm2 por xmm5,xmm4 pxor xmm4,xmm4 por xmm3,xmm1 lea rsi,[((64-128))+rsi] lea rdi,[32+rsp] call __ecp_nistz256_sqr_montx pcmpeqd xmm5,xmm4 pshufd xmm4,xmm3,0xb1 mov rdx,QWORD[rbx] mov r9,r12 por xmm4,xmm3 pshufd xmm5,xmm5,0 pshufd xmm3,xmm4,0x1e mov r10,r13 por xmm4,xmm3 pxor xmm3,xmm3 mov r11,r14 pcmpeqd xmm4,xmm3 pshufd xmm4,xmm4,0 lea rsi,[((32-128))+rsp] mov r12,r15 lea rdi,[rsp] call __ecp_nistz256_mul_montx lea rbx,[320+rsp] lea rdi,[64+rsp] call __ecp_nistz256_sub_fromx mov rdx,QWORD[384+rsp] lea rbx,[384+rsp] mov r9,QWORD[((0+32))+rsp] mov r10,QWORD[((8+32))+rsp] lea rsi,[((-128+32))+rsp] mov r11,QWORD[((16+32))+rsp] mov r12,QWORD[((24+32))+rsp] lea rdi,[32+rsp] call __ecp_nistz256_mul_montx mov rdx,QWORD[384+rsp] lea rbx,[384+rsp] mov r9,QWORD[((0+64))+rsp] mov r10,QWORD[((8+64))+rsp] lea rsi,[((-128+64))+rsp] mov r11,QWORD[((16+64))+rsp] mov r12,QWORD[((24+64))+rsp] lea rdi,[288+rsp] call __ecp_nistz256_mul_montx mov rdx,QWORD[448+rsp] lea rbx,[448+rsp] mov r9,QWORD[((0+32))+rsp] mov r10,QWORD[((8+32))+rsp] lea rsi,[((-128+32))+rsp] mov r11,QWORD[((16+32))+rsp] mov r12,QWORD[((24+32))+rsp] lea rdi,[32+rsp] call __ecp_nistz256_mul_montx lea rbx,[352+rsp] lea rdi,[96+rsp] call __ecp_nistz256_sub_fromx mov rdx,QWORD[((0+64))+rsp] mov r14,QWORD[((8+64))+rsp] lea rsi,[((-128+64))+rsp] mov r15,QWORD[((16+64))+rsp] mov r8,QWORD[((24+64))+rsp] lea rdi,[128+rsp] call __ecp_nistz256_sqr_montx mov rdx,QWORD[((0+96))+rsp] mov r14,QWORD[((8+96))+rsp] lea rsi,[((-128+96))+rsp] mov r15,QWORD[((16+96))+rsp] mov r8,QWORD[((24+96))+rsp] lea rdi,[192+rsp] call __ecp_nistz256_sqr_montx mov rdx,QWORD[128+rsp] lea rbx,[128+rsp] mov r9,QWORD[((0+64))+rsp] mov r10,QWORD[((8+64))+rsp] lea rsi,[((-128+64))+rsp] mov r11,QWORD[((16+64))+rsp] mov r12,QWORD[((24+64))+rsp] lea rdi,[160+rsp] call __ecp_nistz256_mul_montx mov rdx,QWORD[320+rsp] lea rbx,[320+rsp] mov r9,QWORD[((0+128))+rsp] mov r10,QWORD[((8+128))+rsp] lea rsi,[((-128+128))+rsp] mov r11,QWORD[((16+128))+rsp] mov r12,QWORD[((24+128))+rsp] lea rdi,[rsp] call __ecp_nistz256_mul_montx xor r11,r11 add r12,r12 lea rsi,[192+rsp] adc r13,r13 mov rax,r12 adc r8,r8 adc r9,r9 mov rbp,r13 adc r11,0 sub r12,-1 mov rcx,r8 sbb r13,r14 sbb r8,0 mov r10,r9 sbb r9,r15 sbb r11,0 cmovc r12,rax mov rax,QWORD[rsi] cmovc r13,rbp mov rbp,QWORD[8+rsi] cmovc r8,rcx mov rcx,QWORD[16+rsi] cmovc r9,r10 mov r10,QWORD[24+rsi] call __ecp_nistz256_subx lea rbx,[160+rsp] lea rdi,[224+rsp] call __ecp_nistz256_sub_fromx mov rax,QWORD[((0+0))+rsp] mov rbp,QWORD[((0+8))+rsp] mov rcx,QWORD[((0+16))+rsp] mov r10,QWORD[((0+24))+rsp] lea rdi,[64+rsp] call __ecp_nistz256_subx mov QWORD[rdi],r12 mov QWORD[8+rdi],r13 mov QWORD[16+rdi],r8 mov QWORD[24+rdi],r9 mov rdx,QWORD[352+rsp] lea rbx,[352+rsp] mov r9,QWORD[((0+160))+rsp] mov r10,QWORD[((8+160))+rsp] lea rsi,[((-128+160))+rsp] mov r11,QWORD[((16+160))+rsp] mov r12,QWORD[((24+160))+rsp] lea rdi,[32+rsp] call __ecp_nistz256_mul_montx mov rdx,QWORD[96+rsp] lea rbx,[96+rsp] mov r9,QWORD[((0+64))+rsp] mov r10,QWORD[((8+64))+rsp] lea rsi,[((-128+64))+rsp] mov r11,QWORD[((16+64))+rsp] mov r12,QWORD[((24+64))+rsp] lea rdi,[64+rsp] call __ecp_nistz256_mul_montx lea rbx,[32+rsp] lea rdi,[256+rsp] call __ecp_nistz256_sub_fromx DB 102,72,15,126,199 movdqa xmm0,xmm5 movdqa xmm1,xmm5 pandn xmm0,XMMWORD[288+rsp] movdqa xmm2,xmm5 pandn xmm1,XMMWORD[((288+16))+rsp] movdqa xmm3,xmm5 pand xmm2,XMMWORD[$L$ONE_mont] pand xmm3,XMMWORD[(($L$ONE_mont+16))] por xmm2,xmm0 por xmm3,xmm1 movdqa xmm0,xmm4 movdqa xmm1,xmm4 pandn xmm0,xmm2 movdqa xmm2,xmm4 pandn xmm1,xmm3 movdqa xmm3,xmm4 pand xmm2,XMMWORD[384+rsp] pand xmm3,XMMWORD[((384+16))+rsp] por xmm2,xmm0 por xmm3,xmm1 movdqu XMMWORD[64+rdi],xmm2 movdqu XMMWORD[80+rdi],xmm3 movdqa xmm0,xmm5 movdqa xmm1,xmm5 pandn xmm0,XMMWORD[224+rsp] movdqa xmm2,xmm5 pandn xmm1,XMMWORD[((224+16))+rsp] movdqa xmm3,xmm5 pand xmm2,XMMWORD[416+rsp] pand xmm3,XMMWORD[((416+16))+rsp] por xmm2,xmm0 por xmm3,xmm1 movdqa xmm0,xmm4 movdqa xmm1,xmm4 pandn xmm0,xmm2 movdqa xmm2,xmm4 pandn xmm1,xmm3 movdqa xmm3,xmm4 pand xmm2,XMMWORD[320+rsp] pand xmm3,XMMWORD[((320+16))+rsp] por xmm2,xmm0 por xmm3,xmm1 movdqu XMMWORD[rdi],xmm2 movdqu XMMWORD[16+rdi],xmm3 movdqa xmm0,xmm5 movdqa xmm1,xmm5 pandn xmm0,XMMWORD[256+rsp] movdqa xmm2,xmm5 pandn xmm1,XMMWORD[((256+16))+rsp] movdqa xmm3,xmm5 pand xmm2,XMMWORD[448+rsp] pand xmm3,XMMWORD[((448+16))+rsp] por xmm2,xmm0 por xmm3,xmm1 movdqa xmm0,xmm4 movdqa xmm1,xmm4 pandn xmm0,xmm2 movdqa xmm2,xmm4 pandn xmm1,xmm3 movdqa xmm3,xmm4 pand xmm2,XMMWORD[352+rsp] pand xmm3,XMMWORD[((352+16))+rsp] por xmm2,xmm0 por xmm3,xmm1 movdqu XMMWORD[32+rdi],xmm2 movdqu XMMWORD[48+rdi],xmm3 lea rsi,[((480+56))+rsp] mov r15,QWORD[((-48))+rsi] mov r14,QWORD[((-40))+rsi] mov r13,QWORD[((-32))+rsi] mov r12,QWORD[((-24))+rsi] mov rbx,QWORD[((-16))+rsi] mov rbp,QWORD[((-8))+rsi] lea rsp,[rsi] $L$add_affinex_epilogue: mov rdi,QWORD[8+rsp] ;WIN64 epilogue mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret $L$SEH_end_ecp_nistz256_point_add_affinex: EXTERN __imp_RtlVirtualUnwind ALIGN 16 short_handler: push rsi push rdi push rbx push rbp push r12 push r13 push r14 push r15 pushfq sub rsp,64 mov rax,QWORD[120+r8] mov rbx,QWORD[248+r8] mov rsi,QWORD[8+r9] mov r11,QWORD[56+r9] mov r10d,DWORD[r11] lea r10,[r10*1+rsi] cmp rbx,r10 jb NEAR $L$common_seh_tail mov rax,QWORD[152+r8] mov r10d,DWORD[4+r11] lea r10,[r10*1+rsi] cmp rbx,r10 jae NEAR $L$common_seh_tail lea rax,[16+rax] mov r12,QWORD[((-8))+rax] mov r13,QWORD[((-16))+rax] mov QWORD[216+r8],r12 mov QWORD[224+r8],r13 jmp NEAR $L$common_seh_tail ALIGN 16 full_handler: push rsi push rdi push rbx push rbp push r12 push r13 push r14 push r15 pushfq sub rsp,64 mov rax,QWORD[120+r8] mov rbx,QWORD[248+r8] mov rsi,QWORD[8+r9] mov r11,QWORD[56+r9] mov r10d,DWORD[r11] lea r10,[r10*1+rsi] cmp rbx,r10 jb NEAR $L$common_seh_tail mov rax,QWORD[152+r8] mov r10d,DWORD[4+r11] lea r10,[r10*1+rsi] cmp rbx,r10 jae NEAR $L$common_seh_tail mov r10d,DWORD[8+r11] lea rax,[r10*1+rax] mov rbp,QWORD[((-8))+rax] mov rbx,QWORD[((-16))+rax] mov r12,QWORD[((-24))+rax] mov r13,QWORD[((-32))+rax] mov r14,QWORD[((-40))+rax] mov r15,QWORD[((-48))+rax] mov QWORD[144+r8],rbx mov QWORD[160+r8],rbp mov QWORD[216+r8],r12 mov QWORD[224+r8],r13 mov QWORD[232+r8],r14 mov QWORD[240+r8],r15 $L$common_seh_tail: mov rdi,QWORD[8+rax] mov rsi,QWORD[16+rax] mov QWORD[152+r8],rax mov QWORD[168+r8],rsi mov QWORD[176+r8],rdi mov rdi,QWORD[40+r9] mov rsi,r8 mov ecx,154 DD 0xa548f3fc mov rsi,r9 xor rcx,rcx mov rdx,QWORD[8+rsi] mov r8,QWORD[rsi] mov r9,QWORD[16+rsi] mov r10,QWORD[40+rsi] lea r11,[56+rsi] lea r12,[24+rsi] mov QWORD[32+rsp],r10 mov QWORD[40+rsp],r11 mov QWORD[48+rsp],r12 mov QWORD[56+rsp],rcx call QWORD[__imp_RtlVirtualUnwind] mov eax,1 add rsp,64 popfq pop r15 pop r14 pop r13 pop r12 pop rbp pop rbx pop rdi pop rsi DB 0F3h,0C3h ;repret section .pdata rdata align=4 ALIGN 4 DD $L$SEH_begin_ecp_nistz256_neg wrt ..imagebase DD $L$SEH_end_ecp_nistz256_neg wrt ..imagebase DD $L$SEH_info_ecp_nistz256_neg wrt ..imagebase DD $L$SEH_begin_ecp_nistz256_ord_mul_mont wrt ..imagebase DD $L$SEH_end_ecp_nistz256_ord_mul_mont wrt ..imagebase DD $L$SEH_info_ecp_nistz256_ord_mul_mont wrt ..imagebase DD $L$SEH_begin_ecp_nistz256_ord_sqr_mont wrt ..imagebase DD $L$SEH_end_ecp_nistz256_ord_sqr_mont wrt ..imagebase DD $L$SEH_info_ecp_nistz256_ord_sqr_mont wrt ..imagebase DD $L$SEH_begin_ecp_nistz256_ord_mul_montx wrt ..imagebase DD $L$SEH_end_ecp_nistz256_ord_mul_montx wrt ..imagebase DD $L$SEH_info_ecp_nistz256_ord_mul_montx wrt ..imagebase DD $L$SEH_begin_ecp_nistz256_ord_sqr_montx wrt ..imagebase DD $L$SEH_end_ecp_nistz256_ord_sqr_montx wrt ..imagebase DD $L$SEH_info_ecp_nistz256_ord_sqr_montx wrt ..imagebase DD $L$SEH_begin_ecp_nistz256_mul_mont wrt ..imagebase DD $L$SEH_end_ecp_nistz256_mul_mont wrt ..imagebase DD $L$SEH_info_ecp_nistz256_mul_mont wrt ..imagebase DD $L$SEH_begin_ecp_nistz256_sqr_mont wrt ..imagebase DD $L$SEH_end_ecp_nistz256_sqr_mont wrt ..imagebase DD $L$SEH_info_ecp_nistz256_sqr_mont wrt ..imagebase DD $L$SEH_begin_ecp_nistz256_select_w5 wrt ..imagebase DD $L$SEH_end_ecp_nistz256_select_w5 wrt ..imagebase DD $L$SEH_info_ecp_nistz256_select_wX wrt ..imagebase DD $L$SEH_begin_ecp_nistz256_select_w7 wrt ..imagebase DD $L$SEH_end_ecp_nistz256_select_w7 wrt ..imagebase DD $L$SEH_info_ecp_nistz256_select_wX wrt ..imagebase DD $L$SEH_begin_ecp_nistz256_avx2_select_w5 wrt ..imagebase DD $L$SEH_end_ecp_nistz256_avx2_select_w5 wrt ..imagebase DD $L$SEH_info_ecp_nistz256_avx2_select_wX wrt ..imagebase DD $L$SEH_begin_ecp_nistz256_avx2_select_w7 wrt ..imagebase DD $L$SEH_end_ecp_nistz256_avx2_select_w7 wrt ..imagebase DD $L$SEH_info_ecp_nistz256_avx2_select_wX wrt ..imagebase DD $L$SEH_begin_ecp_nistz256_point_double wrt ..imagebase DD $L$SEH_end_ecp_nistz256_point_double wrt ..imagebase DD $L$SEH_info_ecp_nistz256_point_double wrt ..imagebase DD $L$SEH_begin_ecp_nistz256_point_add wrt ..imagebase DD $L$SEH_end_ecp_nistz256_point_add wrt ..imagebase DD $L$SEH_info_ecp_nistz256_point_add wrt ..imagebase DD $L$SEH_begin_ecp_nistz256_point_add_affine wrt ..imagebase DD $L$SEH_end_ecp_nistz256_point_add_affine wrt ..imagebase DD $L$SEH_info_ecp_nistz256_point_add_affine wrt ..imagebase DD $L$SEH_begin_ecp_nistz256_point_doublex wrt ..imagebase DD $L$SEH_end_ecp_nistz256_point_doublex wrt ..imagebase DD $L$SEH_info_ecp_nistz256_point_doublex wrt ..imagebase DD $L$SEH_begin_ecp_nistz256_point_addx wrt ..imagebase DD $L$SEH_end_ecp_nistz256_point_addx wrt ..imagebase DD $L$SEH_info_ecp_nistz256_point_addx wrt ..imagebase DD $L$SEH_begin_ecp_nistz256_point_add_affinex wrt ..imagebase DD $L$SEH_end_ecp_nistz256_point_add_affinex wrt ..imagebase DD $L$SEH_info_ecp_nistz256_point_add_affinex wrt ..imagebase section .xdata rdata align=8 ALIGN 8 $L$SEH_info_ecp_nistz256_neg: DB 9,0,0,0 DD short_handler wrt ..imagebase DD $L$neg_body wrt ..imagebase,$L$neg_epilogue wrt ..imagebase $L$SEH_info_ecp_nistz256_ord_mul_mont: DB 9,0,0,0 DD full_handler wrt ..imagebase DD $L$ord_mul_body wrt ..imagebase,$L$ord_mul_epilogue wrt ..imagebase DD 48,0 $L$SEH_info_ecp_nistz256_ord_sqr_mont: DB 9,0,0,0 DD full_handler wrt ..imagebase DD $L$ord_sqr_body wrt ..imagebase,$L$ord_sqr_epilogue wrt ..imagebase DD 48,0 $L$SEH_info_ecp_nistz256_ord_mul_montx: DB 9,0,0,0 DD full_handler wrt ..imagebase DD $L$ord_mulx_body wrt ..imagebase,$L$ord_mulx_epilogue wrt ..imagebase DD 48,0 $L$SEH_info_ecp_nistz256_ord_sqr_montx: DB 9,0,0,0 DD full_handler wrt ..imagebase DD $L$ord_sqrx_body wrt ..imagebase,$L$ord_sqrx_epilogue wrt ..imagebase DD 48,0 $L$SEH_info_ecp_nistz256_mul_mont: DB 9,0,0,0 DD full_handler wrt ..imagebase DD $L$mul_body wrt ..imagebase,$L$mul_epilogue wrt ..imagebase DD 48,0 $L$SEH_info_ecp_nistz256_sqr_mont: DB 9,0,0,0 DD full_handler wrt ..imagebase DD $L$sqr_body wrt ..imagebase,$L$sqr_epilogue wrt ..imagebase DD 48,0 $L$SEH_info_ecp_nistz256_select_wX: DB 0x01,0x33,0x16,0x00 DB 0x33,0xf8,0x09,0x00 DB 0x2e,0xe8,0x08,0x00 DB 0x29,0xd8,0x07,0x00 DB 0x24,0xc8,0x06,0x00 DB 0x1f,0xb8,0x05,0x00 DB 0x1a,0xa8,0x04,0x00 DB 0x15,0x98,0x03,0x00 DB 0x10,0x88,0x02,0x00 DB 0x0c,0x78,0x01,0x00 DB 0x08,0x68,0x00,0x00 DB 0x04,0x01,0x15,0x00 ALIGN 8 $L$SEH_info_ecp_nistz256_avx2_select_wX: DB 0x01,0x36,0x17,0x0b DB 0x36,0xf8,0x09,0x00 DB 0x31,0xe8,0x08,0x00 DB 0x2c,0xd8,0x07,0x00 DB 0x27,0xc8,0x06,0x00 DB 0x22,0xb8,0x05,0x00 DB 0x1d,0xa8,0x04,0x00 DB 0x18,0x98,0x03,0x00 DB 0x13,0x88,0x02,0x00 DB 0x0e,0x78,0x01,0x00 DB 0x09,0x68,0x00,0x00 DB 0x04,0x01,0x15,0x00 DB 0x00,0xb3,0x00,0x00 ALIGN 8 $L$SEH_info_ecp_nistz256_point_double: DB 9,0,0,0 DD full_handler wrt ..imagebase DD $L$point_doubleq_body wrt ..imagebase,$L$point_doubleq_epilogue wrt ..imagebase DD 32*5+56,0 $L$SEH_info_ecp_nistz256_point_add: DB 9,0,0,0 DD full_handler wrt ..imagebase DD $L$point_addq_body wrt ..imagebase,$L$point_addq_epilogue wrt ..imagebase DD 32*18+56,0 $L$SEH_info_ecp_nistz256_point_add_affine: DB 9,0,0,0 DD full_handler wrt ..imagebase DD $L$add_affineq_body wrt ..imagebase,$L$add_affineq_epilogue wrt ..imagebase DD 32*15+56,0 ALIGN 8 $L$SEH_info_ecp_nistz256_point_doublex: DB 9,0,0,0 DD full_handler wrt ..imagebase DD $L$point_doublex_body wrt ..imagebase,$L$point_doublex_epilogue wrt ..imagebase DD 32*5+56,0 $L$SEH_info_ecp_nistz256_point_addx: DB 9,0,0,0 DD full_handler wrt ..imagebase DD $L$point_addx_body wrt ..imagebase,$L$point_addx_epilogue wrt ..imagebase DD 32*18+56,0 $L$SEH_info_ecp_nistz256_point_add_affinex: DB 9,0,0,0 DD full_handler wrt ..imagebase DD $L$add_affinex_body wrt ..imagebase,$L$add_affinex_epilogue wrt ..imagebase DD 32*15+56,0