summaryrefslogtreecommitdiff
path: root/deps/openssl/asm/x86-win32-masm/rc4/rc4-586.asm
diff options
context:
space:
mode:
Diffstat (limited to 'deps/openssl/asm/x86-win32-masm/rc4/rc4-586.asm')
-rw-r--r--deps/openssl/asm/x86-win32-masm/rc4/rc4-586.asm239
1 files changed, 239 insertions, 0 deletions
diff --git a/deps/openssl/asm/x86-win32-masm/rc4/rc4-586.asm b/deps/openssl/asm/x86-win32-masm/rc4/rc4-586.asm
new file mode 100644
index 0000000000..3eb66f7350
--- /dev/null
+++ b/deps/openssl/asm/x86-win32-masm/rc4/rc4-586.asm
@@ -0,0 +1,239 @@
+TITLE rc4-586.asm
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.586
+.MODEL FLAT
+OPTION DOTNAME
+IF @Version LT 800
+.text$ SEGMENT PAGE 'CODE'
+ELSE
+.text$ SEGMENT ALIGN(64) 'CODE'
+ENDIF
+ALIGN 16
+_RC4 PROC PUBLIC
+$L_RC4_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov edi,DWORD PTR 20[esp]
+ mov edx,DWORD PTR 24[esp]
+ mov esi,DWORD PTR 28[esp]
+ mov ebp,DWORD PTR 32[esp]
+ xor eax,eax
+ xor ebx,ebx
+ cmp edx,0
+ je $L000abort
+ mov al,BYTE PTR [edi]
+ mov bl,BYTE PTR 4[edi]
+ add edi,8
+ lea ecx,DWORD PTR [edx*1+esi]
+ sub ebp,esi
+ mov DWORD PTR 24[esp],ecx
+ inc al
+ cmp DWORD PTR 256[edi],-1
+ je $L001RC4_CHAR
+ mov ecx,DWORD PTR [eax*4+edi]
+ and edx,-4
+ jz $L002loop1
+ lea edx,DWORD PTR [edx*1+esi-4]
+ mov DWORD PTR 28[esp],edx
+ mov DWORD PTR 32[esp],ebp
+ALIGN 16
+$L003loop4:
+ add bl,cl
+ mov edx,DWORD PTR [ebx*4+edi]
+ mov DWORD PTR [ebx*4+edi],ecx
+ mov DWORD PTR [eax*4+edi],edx
+ add edx,ecx
+ inc al
+ and edx,255
+ mov ecx,DWORD PTR [eax*4+edi]
+ mov ebp,DWORD PTR [edx*4+edi]
+ add bl,cl
+ mov edx,DWORD PTR [ebx*4+edi]
+ mov DWORD PTR [ebx*4+edi],ecx
+ mov DWORD PTR [eax*4+edi],edx
+ add edx,ecx
+ inc al
+ and edx,255
+ ror ebp,8
+ mov ecx,DWORD PTR [eax*4+edi]
+ or ebp,DWORD PTR [edx*4+edi]
+ add bl,cl
+ mov edx,DWORD PTR [ebx*4+edi]
+ mov DWORD PTR [ebx*4+edi],ecx
+ mov DWORD PTR [eax*4+edi],edx
+ add edx,ecx
+ inc al
+ and edx,255
+ ror ebp,8
+ mov ecx,DWORD PTR [eax*4+edi]
+ or ebp,DWORD PTR [edx*4+edi]
+ add bl,cl
+ mov edx,DWORD PTR [ebx*4+edi]
+ mov DWORD PTR [ebx*4+edi],ecx
+ mov DWORD PTR [eax*4+edi],edx
+ add edx,ecx
+ inc al
+ and edx,255
+ ror ebp,8
+ mov ecx,DWORD PTR 32[esp]
+ or ebp,DWORD PTR [edx*4+edi]
+ ror ebp,8
+ xor ebp,DWORD PTR [esi]
+ cmp esi,DWORD PTR 28[esp]
+ mov DWORD PTR [esi*1+ecx],ebp
+ lea esi,DWORD PTR 4[esi]
+ mov ecx,DWORD PTR [eax*4+edi]
+ jb $L003loop4
+ cmp esi,DWORD PTR 24[esp]
+ je $L004done
+ mov ebp,DWORD PTR 32[esp]
+ALIGN 16
+$L002loop1:
+ add bl,cl
+ mov edx,DWORD PTR [ebx*4+edi]
+ mov DWORD PTR [ebx*4+edi],ecx
+ mov DWORD PTR [eax*4+edi],edx
+ add edx,ecx
+ inc al
+ and edx,255
+ mov edx,DWORD PTR [edx*4+edi]
+ xor dl,BYTE PTR [esi]
+ lea esi,DWORD PTR 1[esi]
+ mov ecx,DWORD PTR [eax*4+edi]
+ cmp esi,DWORD PTR 24[esp]
+ mov BYTE PTR [esi*1+ebp-1],dl
+ jb $L002loop1
+ jmp $L004done
+ALIGN 16
+$L001RC4_CHAR:
+ movzx ecx,BYTE PTR [eax*1+edi]
+$L005cloop1:
+ add bl,cl
+ movzx edx,BYTE PTR [ebx*1+edi]
+ mov BYTE PTR [ebx*1+edi],cl
+ mov BYTE PTR [eax*1+edi],dl
+ add dl,cl
+ movzx edx,BYTE PTR [edx*1+edi]
+ add al,1
+ xor dl,BYTE PTR [esi]
+ lea esi,DWORD PTR 1[esi]
+ movzx ecx,BYTE PTR [eax*1+edi]
+ cmp esi,DWORD PTR 24[esp]
+ mov BYTE PTR [esi*1+ebp-1],dl
+ jb $L005cloop1
+$L004done:
+ dec al
+ mov BYTE PTR [edi-4],bl
+ mov BYTE PTR [edi-8],al
+$L000abort:
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_RC4 ENDP
+;EXTERN _OPENSSL_ia32cap_P:NEAR
+ALIGN 16
+_RC4_set_key PROC PUBLIC
+$L_RC4_set_key_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov edi,DWORD PTR 20[esp]
+ mov ebp,DWORD PTR 24[esp]
+ mov esi,DWORD PTR 28[esp]
+ lea edx,DWORD PTR _OPENSSL_ia32cap_P
+ lea edi,DWORD PTR 8[edi]
+ lea esi,DWORD PTR [ebp*1+esi]
+ neg ebp
+ xor eax,eax
+ mov DWORD PTR [edi-4],ebp
+ bt DWORD PTR [edx],20
+ jc $L006c1stloop
+ALIGN 16
+$L007w1stloop:
+ mov DWORD PTR [eax*4+edi],eax
+ add al,1
+ jnc $L007w1stloop
+ xor ecx,ecx
+ xor edx,edx
+ALIGN 16
+$L008w2ndloop:
+ mov eax,DWORD PTR [ecx*4+edi]
+ add dl,BYTE PTR [ebp*1+esi]
+ add dl,al
+ add ebp,1
+ mov ebx,DWORD PTR [edx*4+edi]
+ jnz $L009wnowrap
+ mov ebp,DWORD PTR [edi-4]
+$L009wnowrap:
+ mov DWORD PTR [edx*4+edi],eax
+ mov DWORD PTR [ecx*4+edi],ebx
+ add cl,1
+ jnc $L008w2ndloop
+ jmp $L010exit
+ALIGN 16
+$L006c1stloop:
+ mov BYTE PTR [eax*1+edi],al
+ add al,1
+ jnc $L006c1stloop
+ xor ecx,ecx
+ xor edx,edx
+ xor ebx,ebx
+ALIGN 16
+$L011c2ndloop:
+ mov al,BYTE PTR [ecx*1+edi]
+ add dl,BYTE PTR [ebp*1+esi]
+ add dl,al
+ add ebp,1
+ mov bl,BYTE PTR [edx*1+edi]
+ jnz $L012cnowrap
+ mov ebp,DWORD PTR [edi-4]
+$L012cnowrap:
+ mov BYTE PTR [edx*1+edi],al
+ mov BYTE PTR [ecx*1+edi],bl
+ add cl,1
+ jnc $L011c2ndloop
+ mov DWORD PTR 256[edi],-1
+$L010exit:
+ xor eax,eax
+ mov DWORD PTR [edi-8],eax
+ mov DWORD PTR [edi-4],eax
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_RC4_set_key ENDP
+ALIGN 16
+_RC4_options PROC PUBLIC
+$L_RC4_options_begin::
+ call $L013pic_point
+$L013pic_point:
+ pop eax
+ lea eax,DWORD PTR ($L014opts-$L013pic_point)[eax]
+ lea edx,DWORD PTR _OPENSSL_ia32cap_P
+ bt DWORD PTR [edx],20
+ jnc $L015skip
+ add eax,12
+$L015skip:
+ ret
+ALIGN 64
+$L014opts:
+DB 114,99,52,40,52,120,44,105,110,116,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,44,32,67,82,89
+DB 80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114
+DB 111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
+ALIGN 64
+_RC4_options ENDP
+.text$ ENDS
+.bss SEGMENT 'BSS'
+COMM _OPENSSL_ia32cap_P:DWORD
+.bss ENDS
+END