Function at 0x463240
Capabilities:
Compute adler32 checksum

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff0
push esi
push edi
push ebx
sub esp, 0x44
mov eax, dword [ebp + 0x10]
mov ecx, dword [ebp + 0xc]
mov edi, dword [ebp + 8]
mov esi, dword [eax]
movzx ebx, si
shr esi, 0x10
cmp ecx, 0x1f
jl 0x463526
mov edx, edi
vmovdqu xmm3, xmmword [0x61d220]
vpxor xmm1, xmm1, xmm1
vmovdqu xmm4, xmmword [0x61d230]
and edx, 0xf
je 0x4632f2
neg edx
and edx, 0xf
jle 0x4632ee
mov eax, edx
shr eax, 1
mov dword [esp + 8], eax
test eax, eax
jbe 0x4635af
xor eax, eax
mov dword [esp + 4], eax
mov dword [esp], edx
mov dword [esp + 0x20], ecx
mov edx, eax
movzx ecx, byte [edi + eax*2]
add ebx, ecx
movzx ecx, byte [edi + eax*2 + 1]
add esi, ebx
add ebx, ecx
inc eax
add edx, ebx
cmp eax, dword [esp + 8]
jb 0x4632a7
mov dword [esp + 4], edx
lea eax, [eax + eax + 1]
mov edx, dword [esp]
mov ecx, dword [esp + 0x20]
add esi, dword [esp + 4]
mov dword [esp + 8], eax
mov eax, dword [esp + 8]
lea eax, [eax - 1]
cmp edx, eax
jbe 0x4632ee
mov eax, dword [esp + 8]
movzx eax, byte [eax + edi - 1]
add ebx, eax
add esi, ebx
sub ecx, edx
add edi, edx
mov eax, ecx
vmovd xmm5, ebx
sar eax, 4
vmovd xmm0, esi
mov dword [esp + 0x34], eax
cmp eax, 0x15a
jl 0x463483
xor ebx, ebx
cdq
vmovdqu xmmword [esp + 0x10], xmm0
vmovdqu xmmword [esp], xmm5
mov dword [esp + 0x30], ebx
mov dword [esp + 0x24], edx
mov dword [esp + 0x20], ecx
mov dword [esp + 0x2c], edi
mov edi, ebx
mov edx, dword [esp + 0x2c]
xor eax, eax
vmovdqu xmm6, xmmword [esp + 0x10]
vpxor xmm2, xmm2, xmm2
vmovdqu xmm0, xmmword [esp]
vmovdqu xmm3, xmmword [0x61d230]
vmovdqu xmm4, xmmword [0x61d220]
mov ecx, eax
vpslld xmm5, xmm0, 4
shl ecx, 4
vpaddd xmm7, xmm6, xmm5
inc eax
cmp eax, 0x15a
vmovdqu xmm1, xmmword [edx + ecx]
lea ecx, [edx + ecx + 0x10]
vpunpcklbw xmm6, xmm1, xmm2
vpmaddwd xmm5, xmm6, xmm4
vpunpckhbw xmm6, xmm1, xmm2
vpaddd xmm7, xmm7, xmm5
vpmaddwd xmm5, xmm6, xmm3
vpsadbw xmm1, xmm1, xmm2
vpaddd xmm6, xmm7, xmm5
vpaddd xmm0, xmm0, xmm1
jb 0x463353
vmovdqu xmmword [esp], xmm0
mov eax, 0x80078071
vmovdqu xmm0, xmmword [esp]
inc edi
vpsrldq xmm1, xmm0, 8
vmovd ebx, xmm0
vmovd esi, xmm1
vmovdqu xmmword [esp + 0x10], xmm6
vmovdqu xmm2, xmmword [esp + 0x10]
add ebx, esi
mul ebx
shr edx, 0xf
imul esi, edx, 0xfff1
vpsrldq xmm3, xmm2, 4
vpsrldq xmm5, xmm2, 0xc
vpsrldq xmm4, xmm2, 8
vmovd eax, xmm5
mov dword [esp + 0x2c], ecx
sub ebx, esi
vmovd esi, xmm2
vmovd ecx, xmm3
vmovd xmm6, ebx
add esi, ecx
vmovd ecx, xmm4
vmovdqu xmmword [esp], xmm6
add ecx, eax
mov eax, 0x80078071
add esi, ecx
mul esi
shr edx, 0xf
imul eax, edx, 0xfff1
mov ecx, dword [esp + 0x34]
sub esi, eax
mov edx, dword [esp + 0x30]
vmovd xmm7, esi
lea eax, [edx + ecx - 0x15a]
mov dword [esp + 0x28], eax
xor eax, eax
sub eax, ecx
mov ecx, 0
vmovdqu xmmword [esp + 0x10], xmm7
sbb ecx, dword [esp + 0x24]
add edx, 0xfffffea6
mov dword [esp + 0x30], edx
push 0xffffffffffffffff
push 0xfffffea6
push ecx
push eax
call fcn.0058c810
cmp edi, eax
jb 0x46332e
vmovdqu xmm0, xmmword [esp + 0x10]
vmovdqu xmm5, xmmword [esp]
vpxor xmm1, xmm1, xmm1
mov eax, dword [esp + 0x28]
mov ecx, dword [esp + 0x20]
mov edi, dword [esp + 0x2c]
vmovdqu xmm4, xmmword [0x61d230]
vmovdqu xmm3, xmmword [0x61d220]
mov edx, edi
test eax, eax
je 0x463523
xor ebx, ebx
mov esi, ebx
vpslld xmm6, xmm5, 4
shl esi, 4
vpaddd xmm7, xmm0, xmm6
inc ebx
cmp ebx, eax
vmovdqu xmm2, xmmword [edx + esi]
lea edi, [edx + esi + 0x10]
vpunpcklbw xmm0, xmm2, xmm1
vpmaddwd xmm0, xmm0, xmm3
vpunpckhbw xmm6, xmm2, xmm1
vpaddd xmm7, xmm7, xmm0
vpmaddwd xmm0, xmm6, xmm4
vpsadbw xmm2, xmm2, xmm1
vpaddd xmm0, xmm7, xmm0
vpaddd xmm5, xmm5, xmm2
jb 0x46348f
vpsrldq xmm1, xmm5, 8
mov eax, 0x80078071
vmovd ebx, xmm5
vmovd esi, xmm1
vpsrldq xmm2, xmm0, 4
vpsrldq xmm4, xmm0, 0xc
add ebx, esi
mul ebx
shr edx, 0xf
imul esi, edx, 0xfff1
vpsrldq xmm3, xmm0, 8
vmovd eax, xmm2
vmovd edx, xmm3
sub ebx, esi
vmovd esi, xmm0
add esi, eax
vmovd eax, xmm4
add edx, eax
mov eax, 0x80078071
add esi, edx
mul esi
shr edx, 0xf
imul eax, edx, 0xfff1
sub esi, eax
and ecx, 0xf
test ecx, ecx
jle 0x463577
mov eax, ecx
shr eax, 0x1f
add eax, ecx
sar eax, 1
mov dword [esp], eax
test eax, eax
jbe 0x4635bc
xor eax, eax
mov dword [esp + 0x20], ecx
xor edx, edx
movzx ecx, byte [edi + eax*2]
add ebx, ecx
movzx ecx, byte [edi + eax*2 + 1]
add esi, ebx
add ebx, ecx
inc eax
add edx, ebx
cmp eax, dword [esp]
jb 0x463546
mov ecx, dword [esp + 0x20]
add esi, edx
lea edx, [eax + eax + 1]
lea eax, [edx - 1]
cmp ecx, eax
jbe 0x463577
movzx eax, byte [edi + edx - 1]
add ebx, eax
add esi, ebx
mov eax, 0x80078071
mul ebx
shr edx, 0xf
mov eax, 0x80078071
imul ecx, edx, 0xfff1
mul esi
shr edx, 0xf
sub ebx, ecx
imul edi, edx, 0xfff1
sub esi, edi
shl esi, 0x10
or ebx, esi
mov esi, dword [ebp + 0x10]
mov dword [esi], ebx
add esp, 0x44
pop ebx
pop edi
pop esi
mov esp, ebp
pop ebp
ret
mov dword [esp + 8], 1
jmp 0x4632d6
mov edx, 1
jmp 0x463567