| Index: third_party/boringssl/win-x86/crypto/rc4/rc4-586.asm
|
| diff --git a/third_party/boringssl/win-x86/crypto/rc4/rc4-586.asm b/third_party/boringssl/win-x86/crypto/rc4/rc4-586.asm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..08cd9f6d70a7569421e45398fd59ff99e94ecc56
|
| --- /dev/null
|
| +++ b/third_party/boringssl/win-x86/crypto/rc4/rc4-586.asm
|
| @@ -0,0 +1,382 @@
|
| +%ifidn __OUTPUT_FORMAT__,obj
|
| +section code use32 class=code align=64
|
| +%elifidn __OUTPUT_FORMAT__,win32
|
| +%ifdef __YASM_VERSION_ID__
|
| +%if __YASM_VERSION_ID__ < 01010000h
|
| +%error yasm version 1.1.0 or later needed.
|
| +%endif
|
| +; Yasm automatically includes .00 and complains about redefining it.
|
| +; https://www.tortall.net/projects/yasm/manual/html/objfmt-win32-safeseh.html
|
| +%else
|
| +$@feat.00 equ 1
|
| +%endif
|
| +section .text code align=64
|
| +%else
|
| +section .text code
|
| +%endif
|
| +;extern _OPENSSL_ia32cap_P
|
| +global _asm_RC4
|
| +align 16
|
| +_asm_RC4:
|
| +L$_asm_RC4_begin:
|
| + push ebp
|
| + push ebx
|
| + push esi
|
| + push edi
|
| + mov edi,DWORD [20+esp]
|
| + mov edx,DWORD [24+esp]
|
| + mov esi,DWORD [28+esp]
|
| + mov ebp,DWORD [32+esp]
|
| + xor eax,eax
|
| + xor ebx,ebx
|
| + cmp edx,0
|
| + je NEAR L$000abort
|
| + mov al,BYTE [edi]
|
| + mov bl,BYTE [4+edi]
|
| + add edi,8
|
| + lea ecx,[edx*1+esi]
|
| + sub ebp,esi
|
| + mov DWORD [24+esp],ecx
|
| + inc al
|
| + cmp DWORD [256+edi],-1
|
| + je NEAR L$001RC4_CHAR
|
| + mov ecx,DWORD [eax*4+edi]
|
| + and edx,-4
|
| + jz NEAR L$002loop1
|
| + mov DWORD [32+esp],ebp
|
| + test edx,-8
|
| + jz NEAR L$003go4loop4
|
| + lea ebp,[_OPENSSL_ia32cap_P]
|
| + bt DWORD [ebp],26
|
| + jnc NEAR L$003go4loop4
|
| + mov ebp,DWORD [32+esp]
|
| + and edx,-8
|
| + lea edx,[edx*1+esi-8]
|
| + mov DWORD [edi-4],edx
|
| + add bl,cl
|
| + mov edx,DWORD [ebx*4+edi]
|
| + mov DWORD [ebx*4+edi],ecx
|
| + mov DWORD [eax*4+edi],edx
|
| + inc eax
|
| + add edx,ecx
|
| + movzx eax,al
|
| + movzx edx,dl
|
| + movq mm0,[esi]
|
| + mov ecx,DWORD [eax*4+edi]
|
| + movd mm2,DWORD [edx*4+edi]
|
| + jmp NEAR L$004loop_mmx_enter
|
| +align 16
|
| +L$005loop_mmx:
|
| + add bl,cl
|
| + psllq mm1,56
|
| + mov edx,DWORD [ebx*4+edi]
|
| + mov DWORD [ebx*4+edi],ecx
|
| + mov DWORD [eax*4+edi],edx
|
| + inc eax
|
| + add edx,ecx
|
| + movzx eax,al
|
| + movzx edx,dl
|
| + pxor mm2,mm1
|
| + movq mm0,[esi]
|
| + movq [esi*1+ebp-8],mm2
|
| + mov ecx,DWORD [eax*4+edi]
|
| + movd mm2,DWORD [edx*4+edi]
|
| +L$004loop_mmx_enter:
|
| + add bl,cl
|
| + mov edx,DWORD [ebx*4+edi]
|
| + mov DWORD [ebx*4+edi],ecx
|
| + mov DWORD [eax*4+edi],edx
|
| + inc eax
|
| + add edx,ecx
|
| + movzx eax,al
|
| + movzx edx,dl
|
| + pxor mm2,mm0
|
| + mov ecx,DWORD [eax*4+edi]
|
| + movd mm1,DWORD [edx*4+edi]
|
| + add bl,cl
|
| + psllq mm1,8
|
| + mov edx,DWORD [ebx*4+edi]
|
| + mov DWORD [ebx*4+edi],ecx
|
| + mov DWORD [eax*4+edi],edx
|
| + inc eax
|
| + add edx,ecx
|
| + movzx eax,al
|
| + movzx edx,dl
|
| + pxor mm2,mm1
|
| + mov ecx,DWORD [eax*4+edi]
|
| + movd mm1,DWORD [edx*4+edi]
|
| + add bl,cl
|
| + psllq mm1,16
|
| + mov edx,DWORD [ebx*4+edi]
|
| + mov DWORD [ebx*4+edi],ecx
|
| + mov DWORD [eax*4+edi],edx
|
| + inc eax
|
| + add edx,ecx
|
| + movzx eax,al
|
| + movzx edx,dl
|
| + pxor mm2,mm1
|
| + mov ecx,DWORD [eax*4+edi]
|
| + movd mm1,DWORD [edx*4+edi]
|
| + add bl,cl
|
| + psllq mm1,24
|
| + mov edx,DWORD [ebx*4+edi]
|
| + mov DWORD [ebx*4+edi],ecx
|
| + mov DWORD [eax*4+edi],edx
|
| + inc eax
|
| + add edx,ecx
|
| + movzx eax,al
|
| + movzx edx,dl
|
| + pxor mm2,mm1
|
| + mov ecx,DWORD [eax*4+edi]
|
| + movd mm1,DWORD [edx*4+edi]
|
| + add bl,cl
|
| + psllq mm1,32
|
| + mov edx,DWORD [ebx*4+edi]
|
| + mov DWORD [ebx*4+edi],ecx
|
| + mov DWORD [eax*4+edi],edx
|
| + inc eax
|
| + add edx,ecx
|
| + movzx eax,al
|
| + movzx edx,dl
|
| + pxor mm2,mm1
|
| + mov ecx,DWORD [eax*4+edi]
|
| + movd mm1,DWORD [edx*4+edi]
|
| + add bl,cl
|
| + psllq mm1,40
|
| + mov edx,DWORD [ebx*4+edi]
|
| + mov DWORD [ebx*4+edi],ecx
|
| + mov DWORD [eax*4+edi],edx
|
| + inc eax
|
| + add edx,ecx
|
| + movzx eax,al
|
| + movzx edx,dl
|
| + pxor mm2,mm1
|
| + mov ecx,DWORD [eax*4+edi]
|
| + movd mm1,DWORD [edx*4+edi]
|
| + add bl,cl
|
| + psllq mm1,48
|
| + mov edx,DWORD [ebx*4+edi]
|
| + mov DWORD [ebx*4+edi],ecx
|
| + mov DWORD [eax*4+edi],edx
|
| + inc eax
|
| + add edx,ecx
|
| + movzx eax,al
|
| + movzx edx,dl
|
| + pxor mm2,mm1
|
| + mov ecx,DWORD [eax*4+edi]
|
| + movd mm1,DWORD [edx*4+edi]
|
| + mov edx,ebx
|
| + xor ebx,ebx
|
| + mov bl,dl
|
| + cmp esi,DWORD [edi-4]
|
| + lea esi,[8+esi]
|
| + jb NEAR L$005loop_mmx
|
| + psllq mm1,56
|
| + pxor mm2,mm1
|
| + movq [esi*1+ebp-8],mm2
|
| + emms
|
| + cmp esi,DWORD [24+esp]
|
| + je NEAR L$006done
|
| + jmp NEAR L$002loop1
|
| +align 16
|
| +L$003go4loop4:
|
| + lea edx,[edx*1+esi-4]
|
| + mov DWORD [28+esp],edx
|
| +L$007loop4:
|
| + add bl,cl
|
| + mov edx,DWORD [ebx*4+edi]
|
| + mov DWORD [ebx*4+edi],ecx
|
| + mov DWORD [eax*4+edi],edx
|
| + add edx,ecx
|
| + inc al
|
| + and edx,255
|
| + mov ecx,DWORD [eax*4+edi]
|
| + mov ebp,DWORD [edx*4+edi]
|
| + add bl,cl
|
| + mov edx,DWORD [ebx*4+edi]
|
| + mov DWORD [ebx*4+edi],ecx
|
| + mov DWORD [eax*4+edi],edx
|
| + add edx,ecx
|
| + inc al
|
| + and edx,255
|
| + ror ebp,8
|
| + mov ecx,DWORD [eax*4+edi]
|
| + or ebp,DWORD [edx*4+edi]
|
| + add bl,cl
|
| + mov edx,DWORD [ebx*4+edi]
|
| + mov DWORD [ebx*4+edi],ecx
|
| + mov DWORD [eax*4+edi],edx
|
| + add edx,ecx
|
| + inc al
|
| + and edx,255
|
| + ror ebp,8
|
| + mov ecx,DWORD [eax*4+edi]
|
| + or ebp,DWORD [edx*4+edi]
|
| + add bl,cl
|
| + mov edx,DWORD [ebx*4+edi]
|
| + mov DWORD [ebx*4+edi],ecx
|
| + mov DWORD [eax*4+edi],edx
|
| + add edx,ecx
|
| + inc al
|
| + and edx,255
|
| + ror ebp,8
|
| + mov ecx,DWORD [32+esp]
|
| + or ebp,DWORD [edx*4+edi]
|
| + ror ebp,8
|
| + xor ebp,DWORD [esi]
|
| + cmp esi,DWORD [28+esp]
|
| + mov DWORD [esi*1+ecx],ebp
|
| + lea esi,[4+esi]
|
| + mov ecx,DWORD [eax*4+edi]
|
| + jb NEAR L$007loop4
|
| + cmp esi,DWORD [24+esp]
|
| + je NEAR L$006done
|
| + mov ebp,DWORD [32+esp]
|
| +align 16
|
| +L$002loop1:
|
| + add bl,cl
|
| + mov edx,DWORD [ebx*4+edi]
|
| + mov DWORD [ebx*4+edi],ecx
|
| + mov DWORD [eax*4+edi],edx
|
| + add edx,ecx
|
| + inc al
|
| + and edx,255
|
| + mov edx,DWORD [edx*4+edi]
|
| + xor dl,BYTE [esi]
|
| + lea esi,[1+esi]
|
| + mov ecx,DWORD [eax*4+edi]
|
| + cmp esi,DWORD [24+esp]
|
| + mov BYTE [esi*1+ebp-1],dl
|
| + jb NEAR L$002loop1
|
| + jmp NEAR L$006done
|
| +align 16
|
| +L$001RC4_CHAR:
|
| + movzx ecx,BYTE [eax*1+edi]
|
| +L$008cloop1:
|
| + add bl,cl
|
| + movzx edx,BYTE [ebx*1+edi]
|
| + mov BYTE [ebx*1+edi],cl
|
| + mov BYTE [eax*1+edi],dl
|
| + add dl,cl
|
| + movzx edx,BYTE [edx*1+edi]
|
| + add al,1
|
| + xor dl,BYTE [esi]
|
| + lea esi,[1+esi]
|
| + movzx ecx,BYTE [eax*1+edi]
|
| + cmp esi,DWORD [24+esp]
|
| + mov BYTE [esi*1+ebp-1],dl
|
| + jb NEAR L$008cloop1
|
| +L$006done:
|
| + dec al
|
| + mov DWORD [edi-4],ebx
|
| + mov BYTE [edi-8],al
|
| +L$000abort:
|
| + pop edi
|
| + pop esi
|
| + pop ebx
|
| + pop ebp
|
| + ret
|
| +global _asm_RC4_set_key
|
| +align 16
|
| +_asm_RC4_set_key:
|
| +L$_asm_RC4_set_key_begin:
|
| + push ebp
|
| + push ebx
|
| + push esi
|
| + push edi
|
| + mov edi,DWORD [20+esp]
|
| + mov ebp,DWORD [24+esp]
|
| + mov esi,DWORD [28+esp]
|
| + lea edx,[_OPENSSL_ia32cap_P]
|
| + lea edi,[8+edi]
|
| + lea esi,[ebp*1+esi]
|
| + neg ebp
|
| + xor eax,eax
|
| + mov DWORD [edi-4],ebp
|
| + bt DWORD [edx],20
|
| + jc NEAR L$009c1stloop
|
| +align 16
|
| +L$010w1stloop:
|
| + mov DWORD [eax*4+edi],eax
|
| + add al,1
|
| + jnc NEAR L$010w1stloop
|
| + xor ecx,ecx
|
| + xor edx,edx
|
| +align 16
|
| +L$011w2ndloop:
|
| + mov eax,DWORD [ecx*4+edi]
|
| + add dl,BYTE [ebp*1+esi]
|
| + add dl,al
|
| + add ebp,1
|
| + mov ebx,DWORD [edx*4+edi]
|
| + jnz NEAR L$012wnowrap
|
| + mov ebp,DWORD [edi-4]
|
| +L$012wnowrap:
|
| + mov DWORD [edx*4+edi],eax
|
| + mov DWORD [ecx*4+edi],ebx
|
| + add cl,1
|
| + jnc NEAR L$011w2ndloop
|
| + jmp NEAR L$013exit
|
| +align 16
|
| +L$009c1stloop:
|
| + mov BYTE [eax*1+edi],al
|
| + add al,1
|
| + jnc NEAR L$009c1stloop
|
| + xor ecx,ecx
|
| + xor edx,edx
|
| + xor ebx,ebx
|
| +align 16
|
| +L$014c2ndloop:
|
| + mov al,BYTE [ecx*1+edi]
|
| + add dl,BYTE [ebp*1+esi]
|
| + add dl,al
|
| + add ebp,1
|
| + mov bl,BYTE [edx*1+edi]
|
| + jnz NEAR L$015cnowrap
|
| + mov ebp,DWORD [edi-4]
|
| +L$015cnowrap:
|
| + mov BYTE [edx*1+edi],al
|
| + mov BYTE [ecx*1+edi],bl
|
| + add cl,1
|
| + jnc NEAR L$014c2ndloop
|
| + mov DWORD [256+edi],-1
|
| +L$013exit:
|
| + xor eax,eax
|
| + mov DWORD [edi-8],eax
|
| + mov DWORD [edi-4],eax
|
| + pop edi
|
| + pop esi
|
| + pop ebx
|
| + pop ebp
|
| + ret
|
| +global _RC4_options
|
| +align 16
|
| +_RC4_options:
|
| +L$_RC4_options_begin:
|
| + call L$016pic_point
|
| +L$016pic_point:
|
| + pop eax
|
| + lea eax,[(L$017opts-L$016pic_point)+eax]
|
| + lea edx,[_OPENSSL_ia32cap_P]
|
| + mov edx,DWORD [edx]
|
| + bt edx,20
|
| + jc NEAR L$0181xchar
|
| + bt edx,26
|
| + jnc NEAR L$019ret
|
| + add eax,25
|
| + ret
|
| +L$0181xchar:
|
| + add eax,12
|
| +L$019ret:
|
| + ret
|
| +align 64
|
| +L$017opts:
|
| +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 114,99,52,40,56,120,44,109,109,120,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
|
| +segment .bss
|
| +common _OPENSSL_ia32cap_P 16
|
|
|