summaryrefslogtreecommitdiff
path: root/deps/openssl/asm/x64-win32-masm/rc4/rc4-x86_64.asm
diff options
context:
space:
mode:
Diffstat (limited to 'deps/openssl/asm/x64-win32-masm/rc4/rc4-x86_64.asm')
-rw-r--r--deps/openssl/asm/x64-win32-masm/rc4/rc4-x86_64.asm586
1 files changed, 586 insertions, 0 deletions
diff --git a/deps/openssl/asm/x64-win32-masm/rc4/rc4-x86_64.asm b/deps/openssl/asm/x64-win32-masm/rc4/rc4-x86_64.asm
new file mode 100644
index 0000000000..f508fa6679
--- /dev/null
+++ b/deps/openssl/asm/x64-win32-masm/rc4/rc4-x86_64.asm
@@ -0,0 +1,586 @@
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(64) 'CODE'
+
+PUBLIC RC4
+
+ALIGN 16
+RC4 PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_RC4::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+
+ or rsi,rsi
+ jne $L$entry
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$entry::
+ push rbx
+ push r12
+ push r13
+$L$prologue::
+
+ add rdi,8
+ mov r8d,DWORD PTR[((-8))+rdi]
+ mov r12d,DWORD PTR[((-4))+rdi]
+ cmp DWORD PTR[256+rdi],-1
+ je $L$RC4_CHAR
+ inc r8b
+ mov r9d,DWORD PTR[r8*4+rdi]
+ test rsi,-8
+ jz $L$loop1
+ jmp $L$loop8
+ALIGN 16
+$L$loop8::
+ add r12b,r9b
+ mov r10,r8
+ mov r13d,DWORD PTR[r12*4+rdi]
+ ror rax,8
+ inc r10b
+ mov r11d,DWORD PTR[r10*4+rdi]
+ cmp r12,r10
+ mov DWORD PTR[r12*4+rdi],r9d
+ cmove r11,r9
+ mov DWORD PTR[r8*4+rdi],r13d
+ add r13b,r9b
+ mov al,BYTE PTR[r13*4+rdi]
+ add r12b,r11b
+ mov r8,r10
+ mov r13d,DWORD PTR[r12*4+rdi]
+ ror rax,8
+ inc r8b
+ mov r9d,DWORD PTR[r8*4+rdi]
+ cmp r12,r8
+ mov DWORD PTR[r12*4+rdi],r11d
+ cmove r9,r11
+ mov DWORD PTR[r10*4+rdi],r13d
+ add r13b,r11b
+ mov al,BYTE PTR[r13*4+rdi]
+ add r12b,r9b
+ mov r10,r8
+ mov r13d,DWORD PTR[r12*4+rdi]
+ ror rax,8
+ inc r10b
+ mov r11d,DWORD PTR[r10*4+rdi]
+ cmp r12,r10
+ mov DWORD PTR[r12*4+rdi],r9d
+ cmove r11,r9
+ mov DWORD PTR[r8*4+rdi],r13d
+ add r13b,r9b
+ mov al,BYTE PTR[r13*4+rdi]
+ add r12b,r11b
+ mov r8,r10
+ mov r13d,DWORD PTR[r12*4+rdi]
+ ror rax,8
+ inc r8b
+ mov r9d,DWORD PTR[r8*4+rdi]
+ cmp r12,r8
+ mov DWORD PTR[r12*4+rdi],r11d
+ cmove r9,r11
+ mov DWORD PTR[r10*4+rdi],r13d
+ add r13b,r11b
+ mov al,BYTE PTR[r13*4+rdi]
+ add r12b,r9b
+ mov r10,r8
+ mov r13d,DWORD PTR[r12*4+rdi]
+ ror rax,8
+ inc r10b
+ mov r11d,DWORD PTR[r10*4+rdi]
+ cmp r12,r10
+ mov DWORD PTR[r12*4+rdi],r9d
+ cmove r11,r9
+ mov DWORD PTR[r8*4+rdi],r13d
+ add r13b,r9b
+ mov al,BYTE PTR[r13*4+rdi]
+ add r12b,r11b
+ mov r8,r10
+ mov r13d,DWORD PTR[r12*4+rdi]
+ ror rax,8
+ inc r8b
+ mov r9d,DWORD PTR[r8*4+rdi]
+ cmp r12,r8
+ mov DWORD PTR[r12*4+rdi],r11d
+ cmove r9,r11
+ mov DWORD PTR[r10*4+rdi],r13d
+ add r13b,r11b
+ mov al,BYTE PTR[r13*4+rdi]
+ add r12b,r9b
+ mov r10,r8
+ mov r13d,DWORD PTR[r12*4+rdi]
+ ror rax,8
+ inc r10b
+ mov r11d,DWORD PTR[r10*4+rdi]
+ cmp r12,r10
+ mov DWORD PTR[r12*4+rdi],r9d
+ cmove r11,r9
+ mov DWORD PTR[r8*4+rdi],r13d
+ add r13b,r9b
+ mov al,BYTE PTR[r13*4+rdi]
+ add r12b,r11b
+ mov r8,r10
+ mov r13d,DWORD PTR[r12*4+rdi]
+ ror rax,8
+ inc r8b
+ mov r9d,DWORD PTR[r8*4+rdi]
+ cmp r12,r8
+ mov DWORD PTR[r12*4+rdi],r11d
+ cmove r9,r11
+ mov DWORD PTR[r10*4+rdi],r13d
+ add r13b,r11b
+ mov al,BYTE PTR[r13*4+rdi]
+ ror rax,8
+ sub rsi,8
+
+ xor rax,QWORD PTR[rdx]
+ add rdx,8
+ mov QWORD PTR[rcx],rax
+ add rcx,8
+
+ test rsi,-8
+ jnz $L$loop8
+ cmp rsi,0
+ jne $L$loop1
+ jmp $L$exit
+
+ALIGN 16
+$L$loop1::
+ add r12b,r9b
+ mov r13d,DWORD PTR[r12*4+rdi]
+ mov DWORD PTR[r12*4+rdi],r9d
+ mov DWORD PTR[r8*4+rdi],r13d
+ add r9b,r13b
+ inc r8b
+ mov r13d,DWORD PTR[r9*4+rdi]
+ mov r9d,DWORD PTR[r8*4+rdi]
+ xor r13b,BYTE PTR[rdx]
+ inc rdx
+ mov BYTE PTR[rcx],r13b
+ inc rcx
+ dec rsi
+ jnz $L$loop1
+ jmp $L$exit
+
+ALIGN 16
+$L$RC4_CHAR::
+ add r8b,1
+ movzx r9d,BYTE PTR[r8*1+rdi]
+ test rsi,-8
+ jz $L$cloop1
+ cmp DWORD PTR[260+rdi],0
+ jnz $L$cloop1
+ jmp $L$cloop8
+ALIGN 16
+$L$cloop8::
+ mov eax,DWORD PTR[rdx]
+ mov ebx,DWORD PTR[4+rdx]
+ add r12b,r9b
+ lea r10,QWORD PTR[1+r8]
+ movzx r13d,BYTE PTR[r12*1+rdi]
+ movzx r10d,r10b
+ movzx r11d,BYTE PTR[r10*1+rdi]
+ mov BYTE PTR[r12*1+rdi],r9b
+ cmp r12,r10
+ mov BYTE PTR[r8*1+rdi],r13b
+ jne $L$cmov0
+
+ mov r11,r9
+$L$cmov0::
+ add r13b,r9b
+ xor al,BYTE PTR[r13*1+rdi]
+ ror eax,8
+ add r12b,r11b
+ lea r8,QWORD PTR[1+r10]
+ movzx r13d,BYTE PTR[r12*1+rdi]
+ movzx r8d,r8b
+ movzx r9d,BYTE PTR[r8*1+rdi]
+ mov BYTE PTR[r12*1+rdi],r11b
+ cmp r12,r8
+ mov BYTE PTR[r10*1+rdi],r13b
+ jne $L$cmov1
+
+ mov r9,r11
+$L$cmov1::
+ add r13b,r11b
+ xor al,BYTE PTR[r13*1+rdi]
+ ror eax,8
+ add r12b,r9b
+ lea r10,QWORD PTR[1+r8]
+ movzx r13d,BYTE PTR[r12*1+rdi]
+ movzx r10d,r10b
+ movzx r11d,BYTE PTR[r10*1+rdi]
+ mov BYTE PTR[r12*1+rdi],r9b
+ cmp r12,r10
+ mov BYTE PTR[r8*1+rdi],r13b
+ jne $L$cmov2
+
+ mov r11,r9
+$L$cmov2::
+ add r13b,r9b
+ xor al,BYTE PTR[r13*1+rdi]
+ ror eax,8
+ add r12b,r11b
+ lea r8,QWORD PTR[1+r10]
+ movzx r13d,BYTE PTR[r12*1+rdi]
+ movzx r8d,r8b
+ movzx r9d,BYTE PTR[r8*1+rdi]
+ mov BYTE PTR[r12*1+rdi],r11b
+ cmp r12,r8
+ mov BYTE PTR[r10*1+rdi],r13b
+ jne $L$cmov3
+
+ mov r9,r11
+$L$cmov3::
+ add r13b,r11b
+ xor al,BYTE PTR[r13*1+rdi]
+ ror eax,8
+ add r12b,r9b
+ lea r10,QWORD PTR[1+r8]
+ movzx r13d,BYTE PTR[r12*1+rdi]
+ movzx r10d,r10b
+ movzx r11d,BYTE PTR[r10*1+rdi]
+ mov BYTE PTR[r12*1+rdi],r9b
+ cmp r12,r10
+ mov BYTE PTR[r8*1+rdi],r13b
+ jne $L$cmov4
+
+ mov r11,r9
+$L$cmov4::
+ add r13b,r9b
+ xor bl,BYTE PTR[r13*1+rdi]
+ ror ebx,8
+ add r12b,r11b
+ lea r8,QWORD PTR[1+r10]
+ movzx r13d,BYTE PTR[r12*1+rdi]
+ movzx r8d,r8b
+ movzx r9d,BYTE PTR[r8*1+rdi]
+ mov BYTE PTR[r12*1+rdi],r11b
+ cmp r12,r8
+ mov BYTE PTR[r10*1+rdi],r13b
+ jne $L$cmov5
+
+ mov r9,r11
+$L$cmov5::
+ add r13b,r11b
+ xor bl,BYTE PTR[r13*1+rdi]
+ ror ebx,8
+ add r12b,r9b
+ lea r10,QWORD PTR[1+r8]
+ movzx r13d,BYTE PTR[r12*1+rdi]
+ movzx r10d,r10b
+ movzx r11d,BYTE PTR[r10*1+rdi]
+ mov BYTE PTR[r12*1+rdi],r9b
+ cmp r12,r10
+ mov BYTE PTR[r8*1+rdi],r13b
+ jne $L$cmov6
+
+ mov r11,r9
+$L$cmov6::
+ add r13b,r9b
+ xor bl,BYTE PTR[r13*1+rdi]
+ ror ebx,8
+ add r12b,r11b
+ lea r8,QWORD PTR[1+r10]
+ movzx r13d,BYTE PTR[r12*1+rdi]
+ movzx r8d,r8b
+ movzx r9d,BYTE PTR[r8*1+rdi]
+ mov BYTE PTR[r12*1+rdi],r11b
+ cmp r12,r8
+ mov BYTE PTR[r10*1+rdi],r13b
+ jne $L$cmov7
+
+ mov r9,r11
+$L$cmov7::
+ add r13b,r11b
+ xor bl,BYTE PTR[r13*1+rdi]
+ ror ebx,8
+ lea rsi,QWORD PTR[((-8))+rsi]
+ mov DWORD PTR[rcx],eax
+ lea rdx,QWORD PTR[8+rdx]
+ mov DWORD PTR[4+rcx],ebx
+ lea rcx,QWORD PTR[8+rcx]
+
+ test rsi,-8
+ jnz $L$cloop8
+ cmp rsi,0
+ jne $L$cloop1
+ jmp $L$exit
+ALIGN 16
+$L$cloop1::
+ add r12b,r9b
+ movzx r13d,BYTE PTR[r12*1+rdi]
+ mov BYTE PTR[r12*1+rdi],r9b
+ mov BYTE PTR[r8*1+rdi],r13b
+ add r13b,r9b
+ add r8b,1
+ movzx r13d,r13b
+ movzx r8d,r8b
+ movzx r13d,BYTE PTR[r13*1+rdi]
+ movzx r9d,BYTE PTR[r8*1+rdi]
+ xor r13b,BYTE PTR[rdx]
+ lea rdx,QWORD PTR[1+rdx]
+ mov BYTE PTR[rcx],r13b
+ lea rcx,QWORD PTR[1+rcx]
+ sub rsi,1
+ jnz $L$cloop1
+ jmp $L$exit
+
+ALIGN 16
+$L$exit::
+ sub r8b,1
+ mov DWORD PTR[((-8))+rdi],r8d
+ mov DWORD PTR[((-4))+rdi],r12d
+
+ mov r13,QWORD PTR[rsp]
+ mov r12,QWORD PTR[8+rsp]
+ mov rbx,QWORD PTR[16+rsp]
+ add rsp,24
+$L$epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_RC4::
+RC4 ENDP
+EXTERN OPENSSL_ia32cap_P:NEAR
+PUBLIC RC4_set_key
+
+ALIGN 16
+RC4_set_key PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_RC4_set_key::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+ lea rdi,QWORD PTR[8+rdi]
+ lea rdx,QWORD PTR[rsi*1+rdx]
+ neg rsi
+ mov rcx,rsi
+ xor eax,eax
+ xor r9,r9
+ xor r10,r10
+ xor r11,r11
+
+ mov r8d,DWORD PTR[OPENSSL_ia32cap_P]
+ bt r8d,20
+ jnc $L$w1stloop
+ bt r8d,30
+ setc r9b
+ mov DWORD PTR[260+rdi],r9d
+ jmp $L$c1stloop
+
+ALIGN 16
+$L$w1stloop::
+ mov DWORD PTR[rax*4+rdi],eax
+ add al,1
+ jnc $L$w1stloop
+
+ xor r9,r9
+ xor r8,r8
+ALIGN 16
+$L$w2ndloop::
+ mov r10d,DWORD PTR[r9*4+rdi]
+ add r8b,BYTE PTR[rsi*1+rdx]
+ add r8b,r10b
+ add rsi,1
+ mov r11d,DWORD PTR[r8*4+rdi]
+ cmovz rsi,rcx
+ mov DWORD PTR[r8*4+rdi],r10d
+ mov DWORD PTR[r9*4+rdi],r11d
+ add r9b,1
+ jnc $L$w2ndloop
+ jmp $L$exit_key
+
+ALIGN 16
+$L$c1stloop::
+ mov BYTE PTR[rax*1+rdi],al
+ add al,1
+ jnc $L$c1stloop
+
+ xor r9,r9
+ xor r8,r8
+ALIGN 16
+$L$c2ndloop::
+ mov r10b,BYTE PTR[r9*1+rdi]
+ add r8b,BYTE PTR[rsi*1+rdx]
+ add r8b,r10b
+ add rsi,1
+ mov r11b,BYTE PTR[r8*1+rdi]
+ jnz $L$cnowrap
+ mov rsi,rcx
+$L$cnowrap::
+ mov BYTE PTR[r8*1+rdi],r10b
+ mov BYTE PTR[r9*1+rdi],r11b
+ add r9b,1
+ jnc $L$c2ndloop
+ mov DWORD PTR[256+rdi],-1
+
+ALIGN 16
+$L$exit_key::
+ xor eax,eax
+ mov DWORD PTR[((-8))+rdi],eax
+ mov DWORD PTR[((-4))+rdi],eax
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_RC4_set_key::
+RC4_set_key ENDP
+
+PUBLIC RC4_options
+
+ALIGN 16
+RC4_options PROC PUBLIC
+ lea rax,QWORD PTR[$L$opts]
+ mov edx,DWORD PTR[OPENSSL_ia32cap_P]
+ bt edx,20
+ jnc $L$done
+ add rax,12
+ bt edx,30
+ jnc $L$done
+ add rax,13
+$L$done::
+ DB 0F3h,0C3h ;repret
+ALIGN 64
+$L$opts::
+DB 114,99,52,40,56,120,44,105,110,116,41,0
+DB 114,99,52,40,56,120,44,99,104,97,114,41,0
+DB 114,99,52,40,49,120,44,99,104,97,114,41,0
+DB 82,67,52,32,102,111,114,32,120,56,54,95,54,52,44,32
+DB 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
+DB 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
+DB 62,0
+ALIGN 64
+RC4_options ENDP
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+stream_se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ lea r10,QWORD PTR[$L$prologue]
+ cmp rbx,r10
+ jb $L$in_prologue
+
+ mov rax,QWORD PTR[152+r8]
+
+ lea r10,QWORD PTR[$L$epilogue]
+ cmp rbx,r10
+ jae $L$in_prologue
+
+ lea rax,QWORD PTR[24+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov r12,QWORD PTR[((-16))+rax]
+ mov r13,QWORD PTR[((-24))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+
+$L$in_prologue::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ jmp $L$common_seh_exit
+stream_se_handler ENDP
+
+
+ALIGN 16
+key_se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[152+r8]
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+$L$common_seh_exit::
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__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
+key_se_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_RC4
+ DD imagerel $L$SEH_end_RC4
+ DD imagerel $L$SEH_info_RC4
+
+ DD imagerel $L$SEH_begin_RC4_set_key
+ DD imagerel $L$SEH_end_RC4_set_key
+ DD imagerel $L$SEH_info_RC4_set_key
+
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_RC4::
+DB 9,0,0,0
+ DD imagerel stream_se_handler
+$L$SEH_info_RC4_set_key::
+DB 9,0,0,0
+ DD imagerel key_se_handler
+
+.xdata ENDS
+END