kusano fc6ab3
;/* inffas32.asm is a hand tuned assembler version of inffast.c -- fast decoding
kusano fc6ab3
; *
kusano fc6ab3
; * inffas32.asm is derivated from inffas86.c, with translation of assembly code
kusano fc6ab3
; *
kusano fc6ab3
; * Copyright (C) 1995-2003 Mark Adler
kusano fc6ab3
; * For conditions of distribution and use, see copyright notice in zlib.h
kusano fc6ab3
; *
kusano fc6ab3
; * Copyright (C) 2003 Chris Anderson <christop@charm.net></christop@charm.net>
kusano fc6ab3
; * Please use the copyright conditions above.
kusano fc6ab3
; *
kusano fc6ab3
; * Mar-13-2003 -- Most of this is derived from inffast.S which is derived from
kusano fc6ab3
; * the gcc -S output of zlib-1.2.0/inffast.c.  Zlib-1.2.0 is in beta release at
kusano fc6ab3
; * the moment.  I have successfully compiled and tested this code with gcc2.96,
kusano fc6ab3
; * gcc3.2, icc5.0, msvc6.0.  It is very close to the speed of inffast.S
kusano fc6ab3
; * compiled with gcc -DNO_MMX, but inffast.S is still faster on the P3 with MMX
kusano fc6ab3
; * enabled.  I will attempt to merge the MMX code into this version.  Newer
kusano fc6ab3
; * versions of this and inffast.S can be found at
kusano fc6ab3
; * http://www.eetbeetee.com/zlib/ and http://www.charm.net/~christop/zlib/
kusano fc6ab3
; *
kusano fc6ab3
; * 2005 : modification by Gilles Vollant
kusano fc6ab3
; */
kusano fc6ab3
; For Visual C++ 4.x and higher and ML 6.x and higher
kusano fc6ab3
;   ml.exe is in directory \MASM611C of Win95 DDK
kusano fc6ab3
;   ml.exe is also distributed in http://www.masm32.com/masmdl.htm
kusano fc6ab3
;    and in VC++2003 toolkit at http://msdn.microsoft.com/visualc/vctoolkit2003/
kusano fc6ab3
;
kusano fc6ab3
;
kusano fc6ab3
;   compile with command line option
kusano fc6ab3
;   ml  /coff /Zi /c /Flinffas32.lst inffas32.asm
kusano fc6ab3
kusano fc6ab3
;   if you define NO_GZIP (see inflate.h), compile with
kusano fc6ab3
;   ml  /coff /Zi /c /Flinffas32.lst /DNO_GUNZIP inffas32.asm
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
; zlib122sup is 0 fort zlib 1.2.2.1 and lower
kusano fc6ab3
; zlib122sup is 8 fort zlib 1.2.2.2 and more (with addition of dmax and head
kusano fc6ab3
;        in inflate_state in inflate.h)
kusano fc6ab3
zlib1222sup      equ    8
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
IFDEF GUNZIP
kusano fc6ab3
  INFLATE_MODE_TYPE    equ 11
kusano fc6ab3
  INFLATE_MODE_BAD     equ 26
kusano fc6ab3
ELSE
kusano fc6ab3
  IFNDEF NO_GUNZIP
kusano fc6ab3
    INFLATE_MODE_TYPE    equ 11
kusano fc6ab3
    INFLATE_MODE_BAD     equ 26
kusano fc6ab3
  ELSE
kusano fc6ab3
    INFLATE_MODE_TYPE    equ 3
kusano fc6ab3
    INFLATE_MODE_BAD     equ 17
kusano fc6ab3
  ENDIF
kusano fc6ab3
ENDIF
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
; 75 "inffast.S"
kusano fc6ab3
;FILE "inffast.S"
kusano fc6ab3
kusano fc6ab3
;;;GLOBAL _inflate_fast
kusano fc6ab3
kusano fc6ab3
;;;SECTION .text
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	.586p
kusano fc6ab3
	.mmx
kusano fc6ab3
kusano fc6ab3
	name	inflate_fast_x86
kusano fc6ab3
	.MODEL	FLAT
kusano fc6ab3
kusano fc6ab3
_DATA			segment
kusano fc6ab3
inflate_fast_use_mmx:
kusano fc6ab3
	dd	1
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
_TEXT			segment
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
ALIGN 4
kusano fc6ab3
	db	'Fast decoding Code from Chris Anderson'
kusano fc6ab3
	db	0
kusano fc6ab3
kusano fc6ab3
ALIGN 4
kusano fc6ab3
invalid_literal_length_code_msg:
kusano fc6ab3
	db	'invalid literal/length code'
kusano fc6ab3
	db	0
kusano fc6ab3
kusano fc6ab3
ALIGN 4
kusano fc6ab3
invalid_distance_code_msg:
kusano fc6ab3
	db	'invalid distance code'
kusano fc6ab3
	db	0
kusano fc6ab3
kusano fc6ab3
ALIGN 4
kusano fc6ab3
invalid_distance_too_far_msg:
kusano fc6ab3
	db	'invalid distance too far back'
kusano fc6ab3
	db	0
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
ALIGN 4
kusano fc6ab3
inflate_fast_mask:
kusano fc6ab3
dd	0
kusano fc6ab3
dd	1
kusano fc6ab3
dd	3
kusano fc6ab3
dd	7
kusano fc6ab3
dd	15
kusano fc6ab3
dd	31
kusano fc6ab3
dd	63
kusano fc6ab3
dd	127
kusano fc6ab3
dd	255
kusano fc6ab3
dd	511
kusano fc6ab3
dd	1023
kusano fc6ab3
dd	2047
kusano fc6ab3
dd	4095
kusano fc6ab3
dd	8191
kusano fc6ab3
dd	16383
kusano fc6ab3
dd	32767
kusano fc6ab3
dd	65535
kusano fc6ab3
dd	131071
kusano fc6ab3
dd	262143
kusano fc6ab3
dd	524287
kusano fc6ab3
dd	1048575
kusano fc6ab3
dd	2097151
kusano fc6ab3
dd	4194303
kusano fc6ab3
dd	8388607
kusano fc6ab3
dd	16777215
kusano fc6ab3
dd	33554431
kusano fc6ab3
dd	67108863
kusano fc6ab3
dd	134217727
kusano fc6ab3
dd	268435455
kusano fc6ab3
dd	536870911
kusano fc6ab3
dd	1073741823
kusano fc6ab3
dd	2147483647
kusano fc6ab3
dd	4294967295
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
mode_state	 equ	0	;/* state->mode	*/
kusano fc6ab3
wsize_state	 equ	(32+zlib1222sup)	;/* state->wsize */
kusano fc6ab3
write_state	 equ	(36+4+zlib1222sup)	;/* state->write */
kusano fc6ab3
window_state	 equ	(40+4+zlib1222sup)	;/* state->window */
kusano fc6ab3
hold_state	 equ	(44+4+zlib1222sup)	;/* state->hold	*/
kusano fc6ab3
bits_state	 equ	(48+4+zlib1222sup)	;/* state->bits	*/
kusano fc6ab3
lencode_state	 equ	(64+4+zlib1222sup)	;/* state->lencode */
kusano fc6ab3
distcode_state	 equ	(68+4+zlib1222sup)	;/* state->distcode */
kusano fc6ab3
lenbits_state	 equ	(72+4+zlib1222sup)	;/* state->lenbits */
kusano fc6ab3
distbits_state	 equ	(76+4+zlib1222sup)	;/* state->distbits */
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
;;SECTION .text
kusano fc6ab3
; 205 "inffast.S"
kusano fc6ab3
;GLOBAL	inflate_fast_use_mmx
kusano fc6ab3
kusano fc6ab3
;SECTION .data
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
; GLOBAL inflate_fast_use_mmx:object
kusano fc6ab3
;.size inflate_fast_use_mmx, 4
kusano fc6ab3
; 226 "inffast.S"
kusano fc6ab3
;SECTION .text
kusano fc6ab3
kusano fc6ab3
ALIGN 4
kusano fc6ab3
_inflate_fast proc near
kusano fc6ab3
.FPO (16, 4, 0, 0, 1, 0)
kusano fc6ab3
	push  edi
kusano fc6ab3
	push  esi
kusano fc6ab3
	push  ebp
kusano fc6ab3
	push  ebx
kusano fc6ab3
	pushfd
kusano fc6ab3
	sub  esp,64
kusano fc6ab3
	cld
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	mov  esi, [esp+88]
kusano fc6ab3
	mov  edi, [esi+28]
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	mov  edx, [esi+4]
kusano fc6ab3
	mov  eax, [esi+0]
kusano fc6ab3
kusano fc6ab3
	add  edx,eax
kusano fc6ab3
	sub  edx,11
kusano fc6ab3
kusano fc6ab3
	mov  [esp+44],eax
kusano fc6ab3
	mov  [esp+20],edx
kusano fc6ab3
kusano fc6ab3
	mov  ebp, [esp+92]
kusano fc6ab3
	mov  ecx, [esi+16]
kusano fc6ab3
	mov  ebx, [esi+12]
kusano fc6ab3
kusano fc6ab3
	sub  ebp,ecx
kusano fc6ab3
	neg  ebp
kusano fc6ab3
	add  ebp,ebx
kusano fc6ab3
kusano fc6ab3
	sub  ecx,257
kusano fc6ab3
	add  ecx,ebx
kusano fc6ab3
kusano fc6ab3
	mov  [esp+60],ebx
kusano fc6ab3
	mov  [esp+40],ebp
kusano fc6ab3
	mov  [esp+16],ecx
kusano fc6ab3
; 285 "inffast.S"
kusano fc6ab3
	mov  eax, [edi+lencode_state]
kusano fc6ab3
	mov  ecx, [edi+distcode_state]
kusano fc6ab3
kusano fc6ab3
	mov  [esp+8],eax
kusano fc6ab3
	mov  [esp+12],ecx
kusano fc6ab3
kusano fc6ab3
	mov  eax,1
kusano fc6ab3
	mov  ecx, [edi+lenbits_state]
kusano fc6ab3
	shl  eax,cl
kusano fc6ab3
	dec  eax
kusano fc6ab3
	mov  [esp+0],eax
kusano fc6ab3
kusano fc6ab3
	mov  eax,1
kusano fc6ab3
	mov  ecx, [edi+distbits_state]
kusano fc6ab3
	shl  eax,cl
kusano fc6ab3
	dec  eax
kusano fc6ab3
	mov  [esp+4],eax
kusano fc6ab3
kusano fc6ab3
	mov  eax, [edi+wsize_state]
kusano fc6ab3
	mov  ecx, [edi+write_state]
kusano fc6ab3
	mov  edx, [edi+window_state]
kusano fc6ab3
kusano fc6ab3
	mov  [esp+52],eax
kusano fc6ab3
	mov  [esp+48],ecx
kusano fc6ab3
	mov  [esp+56],edx
kusano fc6ab3
kusano fc6ab3
	mov  ebp, [edi+hold_state]
kusano fc6ab3
	mov  ebx, [edi+bits_state]
kusano fc6ab3
; 321 "inffast.S"
kusano fc6ab3
	mov  esi, [esp+44]
kusano fc6ab3
	mov  ecx, [esp+20]
kusano fc6ab3
	cmp  ecx,esi
kusano fc6ab3
	ja   L_align_long
kusano fc6ab3
kusano fc6ab3
	add  ecx,11
kusano fc6ab3
	sub  ecx,esi
kusano fc6ab3
	mov  eax,12
kusano fc6ab3
	sub  eax,ecx
kusano fc6ab3
	lea  edi, [esp+28]
kusano fc6ab3
	rep movsb
kusano fc6ab3
	mov  ecx,eax
kusano fc6ab3
	xor  eax,eax
kusano fc6ab3
	rep stosb
kusano fc6ab3
	lea  esi, [esp+28]
kusano fc6ab3
	mov  [esp+20],esi
kusano fc6ab3
	jmp  L_is_aligned
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
L_align_long:
kusano fc6ab3
	test  esi,3
kusano fc6ab3
	jz   L_is_aligned
kusano fc6ab3
	xor  eax,eax
kusano fc6ab3
	mov  al, [esi]
kusano fc6ab3
	inc  esi
kusano fc6ab3
	mov  ecx,ebx
kusano fc6ab3
	add  ebx,8
kusano fc6ab3
	shl  eax,cl
kusano fc6ab3
	or  ebp,eax
kusano fc6ab3
	jmp L_align_long
kusano fc6ab3
kusano fc6ab3
L_is_aligned:
kusano fc6ab3
	mov  edi, [esp+60]
kusano fc6ab3
; 366 "inffast.S"
kusano fc6ab3
L_check_mmx:
kusano fc6ab3
	cmp  dword ptr [inflate_fast_use_mmx],2
kusano fc6ab3
	je   L_init_mmx
kusano fc6ab3
	ja   L_do_loop
kusano fc6ab3
kusano fc6ab3
	push  eax
kusano fc6ab3
	push  ebx
kusano fc6ab3
	push  ecx
kusano fc6ab3
	push  edx
kusano fc6ab3
	pushfd
kusano fc6ab3
	mov  eax, [esp]
kusano fc6ab3
	xor  dword ptr [esp],0200000h
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	popfd
kusano fc6ab3
	pushfd
kusano fc6ab3
	pop  edx
kusano fc6ab3
	xor  edx,eax
kusano fc6ab3
	jz   L_dont_use_mmx
kusano fc6ab3
	xor  eax,eax
kusano fc6ab3
	cpuid
kusano fc6ab3
	cmp  ebx,0756e6547h
kusano fc6ab3
	jne  L_dont_use_mmx
kusano fc6ab3
	cmp  ecx,06c65746eh
kusano fc6ab3
	jne  L_dont_use_mmx
kusano fc6ab3
	cmp  edx,049656e69h
kusano fc6ab3
	jne  L_dont_use_mmx
kusano fc6ab3
	mov  eax,1
kusano fc6ab3
	cpuid
kusano fc6ab3
	shr  eax,8
kusano fc6ab3
	and  eax,15
kusano fc6ab3
	cmp  eax,6
kusano fc6ab3
	jne  L_dont_use_mmx
kusano fc6ab3
	test  edx,0800000h
kusano fc6ab3
	jnz  L_use_mmx
kusano fc6ab3
	jmp  L_dont_use_mmx
kusano fc6ab3
L_use_mmx:
kusano fc6ab3
	mov  dword ptr [inflate_fast_use_mmx],2
kusano fc6ab3
	jmp  L_check_mmx_pop
kusano fc6ab3
L_dont_use_mmx:
kusano fc6ab3
	mov  dword ptr [inflate_fast_use_mmx],3
kusano fc6ab3
L_check_mmx_pop:
kusano fc6ab3
	pop  edx
kusano fc6ab3
	pop  ecx
kusano fc6ab3
	pop  ebx
kusano fc6ab3
	pop  eax
kusano fc6ab3
	jmp  L_check_mmx
kusano fc6ab3
; 426 "inffast.S"
kusano fc6ab3
ALIGN 4
kusano fc6ab3
L_do_loop:
kusano fc6ab3
; 437 "inffast.S"
kusano fc6ab3
	cmp  bl,15
kusano fc6ab3
	ja   L_get_length_code
kusano fc6ab3
kusano fc6ab3
	xor  eax,eax
kusano fc6ab3
	lodsw
kusano fc6ab3
	mov  cl,bl
kusano fc6ab3
	add  bl,16
kusano fc6ab3
	shl  eax,cl
kusano fc6ab3
	or  ebp,eax
kusano fc6ab3
kusano fc6ab3
L_get_length_code:
kusano fc6ab3
	mov  edx, [esp+0]
kusano fc6ab3
	mov  ecx, [esp+8]
kusano fc6ab3
	and  edx,ebp
kusano fc6ab3
	mov  eax, [ecx+edx*4]
kusano fc6ab3
kusano fc6ab3
L_dolen:
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	mov  cl,ah
kusano fc6ab3
	sub  bl,ah
kusano fc6ab3
	shr  ebp,cl
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	test  al,al
kusano fc6ab3
	jnz   L_test_for_length_base
kusano fc6ab3
kusano fc6ab3
	shr  eax,16
kusano fc6ab3
	stosb
kusano fc6ab3
kusano fc6ab3
L_while_test:
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	cmp  [esp+16],edi
kusano fc6ab3
	jbe  L_break_loop
kusano fc6ab3
kusano fc6ab3
	cmp  [esp+20],esi
kusano fc6ab3
	ja   L_do_loop
kusano fc6ab3
	jmp  L_break_loop
kusano fc6ab3
kusano fc6ab3
L_test_for_length_base:
kusano fc6ab3
; 502 "inffast.S"
kusano fc6ab3
	mov  edx,eax
kusano fc6ab3
	shr  edx,16
kusano fc6ab3
	mov  cl,al
kusano fc6ab3
kusano fc6ab3
	test  al,16
kusano fc6ab3
	jz   L_test_for_second_level_length
kusano fc6ab3
	and  cl,15
kusano fc6ab3
	jz   L_save_len
kusano fc6ab3
	cmp  bl,cl
kusano fc6ab3
	jae  L_add_bits_to_len
kusano fc6ab3
kusano fc6ab3
	mov  ch,cl
kusano fc6ab3
	xor  eax,eax
kusano fc6ab3
	lodsw
kusano fc6ab3
	mov  cl,bl
kusano fc6ab3
	add  bl,16
kusano fc6ab3
	shl  eax,cl
kusano fc6ab3
	or  ebp,eax
kusano fc6ab3
	mov  cl,ch
kusano fc6ab3
kusano fc6ab3
L_add_bits_to_len:
kusano fc6ab3
	mov  eax,1
kusano fc6ab3
	shl  eax,cl
kusano fc6ab3
	dec  eax
kusano fc6ab3
	sub  bl,cl
kusano fc6ab3
	and  eax,ebp
kusano fc6ab3
	shr  ebp,cl
kusano fc6ab3
	add  edx,eax
kusano fc6ab3
kusano fc6ab3
L_save_len:
kusano fc6ab3
	mov  [esp+24],edx
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
L_decode_distance:
kusano fc6ab3
; 549 "inffast.S"
kusano fc6ab3
	cmp  bl,15
kusano fc6ab3
	ja   L_get_distance_code
kusano fc6ab3
kusano fc6ab3
	xor  eax,eax
kusano fc6ab3
	lodsw
kusano fc6ab3
	mov  cl,bl
kusano fc6ab3
	add  bl,16
kusano fc6ab3
	shl  eax,cl
kusano fc6ab3
	or  ebp,eax
kusano fc6ab3
kusano fc6ab3
L_get_distance_code:
kusano fc6ab3
	mov  edx, [esp+4]
kusano fc6ab3
	mov  ecx, [esp+12]
kusano fc6ab3
	and  edx,ebp
kusano fc6ab3
	mov  eax, [ecx+edx*4]
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
L_dodist:
kusano fc6ab3
	mov  edx,eax
kusano fc6ab3
	shr  edx,16
kusano fc6ab3
	mov  cl,ah
kusano fc6ab3
	sub  bl,ah
kusano fc6ab3
	shr  ebp,cl
kusano fc6ab3
; 584 "inffast.S"
kusano fc6ab3
	mov  cl,al
kusano fc6ab3
kusano fc6ab3
	test  al,16
kusano fc6ab3
	jz  L_test_for_second_level_dist
kusano fc6ab3
	and  cl,15
kusano fc6ab3
	jz  L_check_dist_one
kusano fc6ab3
	cmp  bl,cl
kusano fc6ab3
	jae  L_add_bits_to_dist
kusano fc6ab3
kusano fc6ab3
	mov  ch,cl
kusano fc6ab3
	xor  eax,eax
kusano fc6ab3
	lodsw
kusano fc6ab3
	mov  cl,bl
kusano fc6ab3
	add  bl,16
kusano fc6ab3
	shl  eax,cl
kusano fc6ab3
	or  ebp,eax
kusano fc6ab3
	mov  cl,ch
kusano fc6ab3
kusano fc6ab3
L_add_bits_to_dist:
kusano fc6ab3
	mov  eax,1
kusano fc6ab3
	shl  eax,cl
kusano fc6ab3
	dec  eax
kusano fc6ab3
	sub  bl,cl
kusano fc6ab3
	and  eax,ebp
kusano fc6ab3
	shr  ebp,cl
kusano fc6ab3
	add  edx,eax
kusano fc6ab3
	jmp  L_check_window
kusano fc6ab3
kusano fc6ab3
L_check_window:
kusano fc6ab3
; 625 "inffast.S"
kusano fc6ab3
	mov  [esp+44],esi
kusano fc6ab3
	mov  eax,edi
kusano fc6ab3
	sub  eax, [esp+40]
kusano fc6ab3
kusano fc6ab3
	cmp  eax,edx
kusano fc6ab3
	jb   L_clip_window
kusano fc6ab3
kusano fc6ab3
	mov  ecx, [esp+24]
kusano fc6ab3
	mov  esi,edi
kusano fc6ab3
	sub  esi,edx
kusano fc6ab3
kusano fc6ab3
	sub  ecx,3
kusano fc6ab3
	mov  al, [esi]
kusano fc6ab3
	mov  [edi],al
kusano fc6ab3
	mov  al, [esi+1]
kusano fc6ab3
	mov  dl, [esi+2]
kusano fc6ab3
	add  esi,3
kusano fc6ab3
	mov  [edi+1],al
kusano fc6ab3
	mov  [edi+2],dl
kusano fc6ab3
	add  edi,3
kusano fc6ab3
	rep movsb
kusano fc6ab3
kusano fc6ab3
	mov  esi, [esp+44]
kusano fc6ab3
	jmp  L_while_test
kusano fc6ab3
kusano fc6ab3
ALIGN 4
kusano fc6ab3
L_check_dist_one:
kusano fc6ab3
	cmp  edx,1
kusano fc6ab3
	jne  L_check_window
kusano fc6ab3
	cmp  [esp+40],edi
kusano fc6ab3
	je  L_check_window
kusano fc6ab3
kusano fc6ab3
	dec  edi
kusano fc6ab3
	mov  ecx, [esp+24]
kusano fc6ab3
	mov  al, [edi]
kusano fc6ab3
	sub  ecx,3
kusano fc6ab3
kusano fc6ab3
	mov  [edi+1],al
kusano fc6ab3
	mov  [edi+2],al
kusano fc6ab3
	mov  [edi+3],al
kusano fc6ab3
	add  edi,4
kusano fc6ab3
	rep stosb
kusano fc6ab3
kusano fc6ab3
	jmp  L_while_test
kusano fc6ab3
kusano fc6ab3
ALIGN 4
kusano fc6ab3
L_test_for_second_level_length:
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	test  al,64
kusano fc6ab3
	jnz   L_test_for_end_of_block
kusano fc6ab3
kusano fc6ab3
	mov  eax,1
kusano fc6ab3
	shl  eax,cl
kusano fc6ab3
	dec  eax
kusano fc6ab3
	and  eax,ebp
kusano fc6ab3
	add  eax,edx
kusano fc6ab3
	mov  edx, [esp+8]
kusano fc6ab3
	mov  eax, [edx+eax*4]
kusano fc6ab3
	jmp  L_dolen
kusano fc6ab3
kusano fc6ab3
ALIGN 4
kusano fc6ab3
L_test_for_second_level_dist:
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	test  al,64
kusano fc6ab3
	jnz   L_invalid_distance_code
kusano fc6ab3
kusano fc6ab3
	mov  eax,1
kusano fc6ab3
	shl  eax,cl
kusano fc6ab3
	dec  eax
kusano fc6ab3
	and  eax,ebp
kusano fc6ab3
	add  eax,edx
kusano fc6ab3
	mov  edx, [esp+12]
kusano fc6ab3
	mov  eax, [edx+eax*4]
kusano fc6ab3
	jmp  L_dodist
kusano fc6ab3
kusano fc6ab3
ALIGN 4
kusano fc6ab3
L_clip_window:
kusano fc6ab3
; 721 "inffast.S"
kusano fc6ab3
	mov  ecx,eax
kusano fc6ab3
	mov  eax, [esp+52]
kusano fc6ab3
	neg  ecx
kusano fc6ab3
	mov  esi, [esp+56]
kusano fc6ab3
kusano fc6ab3
	cmp  eax,edx
kusano fc6ab3
	jb   L_invalid_distance_too_far
kusano fc6ab3
kusano fc6ab3
	add  ecx,edx
kusano fc6ab3
	cmp  dword ptr [esp+48],0
kusano fc6ab3
	jne  L_wrap_around_window
kusano fc6ab3
kusano fc6ab3
	sub  eax,ecx
kusano fc6ab3
	add  esi,eax
kusano fc6ab3
; 749 "inffast.S"
kusano fc6ab3
	mov  eax, [esp+24]
kusano fc6ab3
	cmp  eax,ecx
kusano fc6ab3
	jbe  L_do_copy1
kusano fc6ab3
kusano fc6ab3
	sub  eax,ecx
kusano fc6ab3
	rep movsb
kusano fc6ab3
	mov  esi,edi
kusano fc6ab3
	sub  esi,edx
kusano fc6ab3
	jmp  L_do_copy1
kusano fc6ab3
kusano fc6ab3
	cmp  eax,ecx
kusano fc6ab3
	jbe  L_do_copy1
kusano fc6ab3
kusano fc6ab3
	sub  eax,ecx
kusano fc6ab3
	rep movsb
kusano fc6ab3
	mov  esi,edi
kusano fc6ab3
	sub  esi,edx
kusano fc6ab3
	jmp  L_do_copy1
kusano fc6ab3
kusano fc6ab3
L_wrap_around_window:
kusano fc6ab3
; 793 "inffast.S"
kusano fc6ab3
	mov  eax, [esp+48]
kusano fc6ab3
	cmp  ecx,eax
kusano fc6ab3
	jbe  L_contiguous_in_window
kusano fc6ab3
kusano fc6ab3
	add  esi, [esp+52]
kusano fc6ab3
	add  esi,eax
kusano fc6ab3
	sub  esi,ecx
kusano fc6ab3
	sub  ecx,eax
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	mov  eax, [esp+24]
kusano fc6ab3
	cmp  eax,ecx
kusano fc6ab3
	jbe  L_do_copy1
kusano fc6ab3
kusano fc6ab3
	sub  eax,ecx
kusano fc6ab3
	rep movsb
kusano fc6ab3
	mov  esi, [esp+56]
kusano fc6ab3
	mov  ecx, [esp+48]
kusano fc6ab3
	cmp  eax,ecx
kusano fc6ab3
	jbe  L_do_copy1
kusano fc6ab3
kusano fc6ab3
	sub  eax,ecx
kusano fc6ab3
	rep movsb
kusano fc6ab3
	mov  esi,edi
kusano fc6ab3
	sub  esi,edx
kusano fc6ab3
	jmp  L_do_copy1
kusano fc6ab3
kusano fc6ab3
L_contiguous_in_window:
kusano fc6ab3
; 836 "inffast.S"
kusano fc6ab3
	add  esi,eax
kusano fc6ab3
	sub  esi,ecx
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	mov  eax, [esp+24]
kusano fc6ab3
	cmp  eax,ecx
kusano fc6ab3
	jbe  L_do_copy1
kusano fc6ab3
kusano fc6ab3
	sub  eax,ecx
kusano fc6ab3
	rep movsb
kusano fc6ab3
	mov  esi,edi
kusano fc6ab3
	sub  esi,edx
kusano fc6ab3
kusano fc6ab3
L_do_copy1:
kusano fc6ab3
; 862 "inffast.S"
kusano fc6ab3
	mov  ecx,eax
kusano fc6ab3
	rep movsb
kusano fc6ab3
kusano fc6ab3
	mov  esi, [esp+44]
kusano fc6ab3
	jmp  L_while_test
kusano fc6ab3
; 878 "inffast.S"
kusano fc6ab3
ALIGN 4
kusano fc6ab3
L_init_mmx:
kusano fc6ab3
	emms
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	movd mm0,ebp
kusano fc6ab3
	mov  ebp,ebx
kusano fc6ab3
; 896 "inffast.S"
kusano fc6ab3
	movd mm4,dword ptr [esp+0]
kusano fc6ab3
	movq mm3,mm4
kusano fc6ab3
	movd mm5,dword ptr [esp+4]
kusano fc6ab3
	movq mm2,mm5
kusano fc6ab3
	pxor mm1,mm1
kusano fc6ab3
	mov  ebx, [esp+8]
kusano fc6ab3
	jmp  L_do_loop_mmx
kusano fc6ab3
kusano fc6ab3
ALIGN 4
kusano fc6ab3
L_do_loop_mmx:
kusano fc6ab3
	psrlq mm0,mm1
kusano fc6ab3
kusano fc6ab3
	cmp  ebp,32
kusano fc6ab3
	ja  L_get_length_code_mmx
kusano fc6ab3
kusano fc6ab3
	movd mm6,ebp
kusano fc6ab3
	movd mm7,dword ptr [esi]
kusano fc6ab3
	add  esi,4
kusano fc6ab3
	psllq mm7,mm6
kusano fc6ab3
	add  ebp,32
kusano fc6ab3
	por mm0,mm7
kusano fc6ab3
kusano fc6ab3
L_get_length_code_mmx:
kusano fc6ab3
	pand mm4,mm0
kusano fc6ab3
	movd eax,mm4
kusano fc6ab3
	movq mm4,mm3
kusano fc6ab3
	mov  eax, [ebx+eax*4]
kusano fc6ab3
kusano fc6ab3
L_dolen_mmx:
kusano fc6ab3
	movzx  ecx,ah
kusano fc6ab3
	movd mm1,ecx
kusano fc6ab3
	sub  ebp,ecx
kusano fc6ab3
kusano fc6ab3
	test  al,al
kusano fc6ab3
	jnz L_test_for_length_base_mmx
kusano fc6ab3
kusano fc6ab3
	shr  eax,16
kusano fc6ab3
	stosb
kusano fc6ab3
kusano fc6ab3
L_while_test_mmx:
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	cmp  [esp+16],edi
kusano fc6ab3
	jbe L_break_loop
kusano fc6ab3
kusano fc6ab3
	cmp  [esp+20],esi
kusano fc6ab3
	ja L_do_loop_mmx
kusano fc6ab3
	jmp L_break_loop
kusano fc6ab3
kusano fc6ab3
L_test_for_length_base_mmx:
kusano fc6ab3
kusano fc6ab3
	mov  edx,eax
kusano fc6ab3
	shr  edx,16
kusano fc6ab3
kusano fc6ab3
	test  al,16
kusano fc6ab3
	jz  L_test_for_second_level_length_mmx
kusano fc6ab3
	and  eax,15
kusano fc6ab3
	jz L_decode_distance_mmx
kusano fc6ab3
kusano fc6ab3
	psrlq mm0,mm1
kusano fc6ab3
	movd mm1,eax
kusano fc6ab3
	movd ecx,mm0
kusano fc6ab3
	sub  ebp,eax
kusano fc6ab3
	and  ecx, [inflate_fast_mask+eax*4]
kusano fc6ab3
	add  edx,ecx
kusano fc6ab3
kusano fc6ab3
L_decode_distance_mmx:
kusano fc6ab3
	psrlq mm0,mm1
kusano fc6ab3
kusano fc6ab3
	cmp  ebp,32
kusano fc6ab3
	ja L_get_dist_code_mmx
kusano fc6ab3
kusano fc6ab3
	movd mm6,ebp
kusano fc6ab3
	movd mm7,dword ptr [esi]
kusano fc6ab3
	add  esi,4
kusano fc6ab3
	psllq mm7,mm6
kusano fc6ab3
	add  ebp,32
kusano fc6ab3
	por mm0,mm7
kusano fc6ab3
kusano fc6ab3
L_get_dist_code_mmx:
kusano fc6ab3
	mov  ebx, [esp+12]
kusano fc6ab3
	pand mm5,mm0
kusano fc6ab3
	movd eax,mm5
kusano fc6ab3
	movq mm5,mm2
kusano fc6ab3
	mov  eax, [ebx+eax*4]
kusano fc6ab3
kusano fc6ab3
L_dodist_mmx:
kusano fc6ab3
kusano fc6ab3
	movzx  ecx,ah
kusano fc6ab3
	mov  ebx,eax
kusano fc6ab3
	shr  ebx,16
kusano fc6ab3
	sub  ebp,ecx
kusano fc6ab3
	movd mm1,ecx
kusano fc6ab3
kusano fc6ab3
	test  al,16
kusano fc6ab3
	jz L_test_for_second_level_dist_mmx
kusano fc6ab3
	and  eax,15
kusano fc6ab3
	jz L_check_dist_one_mmx
kusano fc6ab3
kusano fc6ab3
L_add_bits_to_dist_mmx:
kusano fc6ab3
	psrlq mm0,mm1
kusano fc6ab3
	movd mm1,eax
kusano fc6ab3
	movd ecx,mm0
kusano fc6ab3
	sub  ebp,eax
kusano fc6ab3
	and  ecx, [inflate_fast_mask+eax*4]
kusano fc6ab3
	add  ebx,ecx
kusano fc6ab3
kusano fc6ab3
L_check_window_mmx:
kusano fc6ab3
	mov  [esp+44],esi
kusano fc6ab3
	mov  eax,edi
kusano fc6ab3
	sub  eax, [esp+40]
kusano fc6ab3
kusano fc6ab3
	cmp  eax,ebx
kusano fc6ab3
	jb L_clip_window_mmx
kusano fc6ab3
kusano fc6ab3
	mov  ecx,edx
kusano fc6ab3
	mov  esi,edi
kusano fc6ab3
	sub  esi,ebx
kusano fc6ab3
kusano fc6ab3
	sub  ecx,3
kusano fc6ab3
	mov  al, [esi]
kusano fc6ab3
	mov  [edi],al
kusano fc6ab3
	mov  al, [esi+1]
kusano fc6ab3
	mov  dl, [esi+2]
kusano fc6ab3
	add  esi,3
kusano fc6ab3
	mov  [edi+1],al
kusano fc6ab3
	mov  [edi+2],dl
kusano fc6ab3
	add  edi,3
kusano fc6ab3
	rep movsb
kusano fc6ab3
kusano fc6ab3
	mov  esi, [esp+44]
kusano fc6ab3
	mov  ebx, [esp+8]
kusano fc6ab3
	jmp  L_while_test_mmx
kusano fc6ab3
kusano fc6ab3
ALIGN 4
kusano fc6ab3
L_check_dist_one_mmx:
kusano fc6ab3
	cmp  ebx,1
kusano fc6ab3
	jne  L_check_window_mmx
kusano fc6ab3
	cmp  [esp+40],edi
kusano fc6ab3
	je   L_check_window_mmx
kusano fc6ab3
kusano fc6ab3
	dec  edi
kusano fc6ab3
	mov  ecx,edx
kusano fc6ab3
	mov  al, [edi]
kusano fc6ab3
	sub  ecx,3
kusano fc6ab3
kusano fc6ab3
	mov  [edi+1],al
kusano fc6ab3
	mov  [edi+2],al
kusano fc6ab3
	mov  [edi+3],al
kusano fc6ab3
	add  edi,4
kusano fc6ab3
	rep stosb
kusano fc6ab3
kusano fc6ab3
	mov  ebx, [esp+8]
kusano fc6ab3
	jmp  L_while_test_mmx
kusano fc6ab3
kusano fc6ab3
ALIGN 4
kusano fc6ab3
L_test_for_second_level_length_mmx:
kusano fc6ab3
	test  al,64
kusano fc6ab3
	jnz L_test_for_end_of_block
kusano fc6ab3
kusano fc6ab3
	and  eax,15
kusano fc6ab3
	psrlq mm0,mm1
kusano fc6ab3
	movd ecx,mm0
kusano fc6ab3
	and  ecx, [inflate_fast_mask+eax*4]
kusano fc6ab3
	add  ecx,edx
kusano fc6ab3
	mov  eax, [ebx+ecx*4]
kusano fc6ab3
	jmp L_dolen_mmx
kusano fc6ab3
kusano fc6ab3
ALIGN 4
kusano fc6ab3
L_test_for_second_level_dist_mmx:
kusano fc6ab3
	test  al,64
kusano fc6ab3
	jnz L_invalid_distance_code
kusano fc6ab3
kusano fc6ab3
	and  eax,15
kusano fc6ab3
	psrlq mm0,mm1
kusano fc6ab3
	movd ecx,mm0
kusano fc6ab3
	and  ecx, [inflate_fast_mask+eax*4]
kusano fc6ab3
	mov  eax, [esp+12]
kusano fc6ab3
	add  ecx,ebx
kusano fc6ab3
	mov  eax, [eax+ecx*4]
kusano fc6ab3
	jmp  L_dodist_mmx
kusano fc6ab3
kusano fc6ab3
ALIGN 4
kusano fc6ab3
L_clip_window_mmx:
kusano fc6ab3
kusano fc6ab3
	mov  ecx,eax
kusano fc6ab3
	mov  eax, [esp+52]
kusano fc6ab3
	neg  ecx
kusano fc6ab3
	mov  esi, [esp+56]
kusano fc6ab3
kusano fc6ab3
	cmp  eax,ebx
kusano fc6ab3
	jb  L_invalid_distance_too_far
kusano fc6ab3
kusano fc6ab3
	add  ecx,ebx
kusano fc6ab3
	cmp  dword ptr [esp+48],0
kusano fc6ab3
	jne  L_wrap_around_window_mmx
kusano fc6ab3
kusano fc6ab3
	sub  eax,ecx
kusano fc6ab3
	add  esi,eax
kusano fc6ab3
kusano fc6ab3
	cmp  edx,ecx
kusano fc6ab3
	jbe  L_do_copy1_mmx
kusano fc6ab3
kusano fc6ab3
	sub  edx,ecx
kusano fc6ab3
	rep movsb
kusano fc6ab3
	mov  esi,edi
kusano fc6ab3
	sub  esi,ebx
kusano fc6ab3
	jmp  L_do_copy1_mmx
kusano fc6ab3
kusano fc6ab3
	cmp  edx,ecx
kusano fc6ab3
	jbe  L_do_copy1_mmx
kusano fc6ab3
kusano fc6ab3
	sub  edx,ecx
kusano fc6ab3
	rep movsb
kusano fc6ab3
	mov  esi,edi
kusano fc6ab3
	sub  esi,ebx
kusano fc6ab3
	jmp  L_do_copy1_mmx
kusano fc6ab3
kusano fc6ab3
L_wrap_around_window_mmx:
kusano fc6ab3
kusano fc6ab3
	mov  eax, [esp+48]
kusano fc6ab3
	cmp  ecx,eax
kusano fc6ab3
	jbe  L_contiguous_in_window_mmx
kusano fc6ab3
kusano fc6ab3
	add  esi, [esp+52]
kusano fc6ab3
	add  esi,eax
kusano fc6ab3
	sub  esi,ecx
kusano fc6ab3
	sub  ecx,eax
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	cmp  edx,ecx
kusano fc6ab3
	jbe  L_do_copy1_mmx
kusano fc6ab3
kusano fc6ab3
	sub  edx,ecx
kusano fc6ab3
	rep movsb
kusano fc6ab3
	mov  esi, [esp+56]
kusano fc6ab3
	mov  ecx, [esp+48]
kusano fc6ab3
	cmp  edx,ecx
kusano fc6ab3
	jbe  L_do_copy1_mmx
kusano fc6ab3
kusano fc6ab3
	sub  edx,ecx
kusano fc6ab3
	rep movsb
kusano fc6ab3
	mov  esi,edi
kusano fc6ab3
	sub  esi,ebx
kusano fc6ab3
	jmp  L_do_copy1_mmx
kusano fc6ab3
kusano fc6ab3
L_contiguous_in_window_mmx:
kusano fc6ab3
kusano fc6ab3
	add  esi,eax
kusano fc6ab3
	sub  esi,ecx
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	cmp  edx,ecx
kusano fc6ab3
	jbe  L_do_copy1_mmx
kusano fc6ab3
kusano fc6ab3
	sub  edx,ecx
kusano fc6ab3
	rep movsb
kusano fc6ab3
	mov  esi,edi
kusano fc6ab3
	sub  esi,ebx
kusano fc6ab3
kusano fc6ab3
L_do_copy1_mmx:
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	mov  ecx,edx
kusano fc6ab3
	rep movsb
kusano fc6ab3
kusano fc6ab3
	mov  esi, [esp+44]
kusano fc6ab3
	mov  ebx, [esp+8]
kusano fc6ab3
	jmp  L_while_test_mmx
kusano fc6ab3
; 1174 "inffast.S"
kusano fc6ab3
L_invalid_distance_code:
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	mov  ecx, invalid_distance_code_msg
kusano fc6ab3
	mov  edx,INFLATE_MODE_BAD
kusano fc6ab3
	jmp  L_update_stream_state
kusano fc6ab3
kusano fc6ab3
L_test_for_end_of_block:
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	test  al,32
kusano fc6ab3
	jz  L_invalid_literal_length_code
kusano fc6ab3
kusano fc6ab3
	mov  ecx,0
kusano fc6ab3
	mov  edx,INFLATE_MODE_TYPE
kusano fc6ab3
	jmp  L_update_stream_state
kusano fc6ab3
kusano fc6ab3
L_invalid_literal_length_code:
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	mov  ecx, invalid_literal_length_code_msg
kusano fc6ab3
	mov  edx,INFLATE_MODE_BAD
kusano fc6ab3
	jmp  L_update_stream_state
kusano fc6ab3
kusano fc6ab3
L_invalid_distance_too_far:
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	mov  esi, [esp+44]
kusano fc6ab3
	mov  ecx, invalid_distance_too_far_msg
kusano fc6ab3
	mov  edx,INFLATE_MODE_BAD
kusano fc6ab3
	jmp  L_update_stream_state
kusano fc6ab3
kusano fc6ab3
L_update_stream_state:
kusano fc6ab3
kusano fc6ab3
	mov  eax, [esp+88]
kusano fc6ab3
	test  ecx,ecx
kusano fc6ab3
	jz  L_skip_msg
kusano fc6ab3
	mov  [eax+24],ecx
kusano fc6ab3
L_skip_msg:
kusano fc6ab3
	mov  eax, [eax+28]
kusano fc6ab3
	mov  [eax+mode_state],edx
kusano fc6ab3
	jmp  L_break_loop
kusano fc6ab3
kusano fc6ab3
ALIGN 4
kusano fc6ab3
L_break_loop:
kusano fc6ab3
; 1243 "inffast.S"
kusano fc6ab3
	cmp  dword ptr [inflate_fast_use_mmx],2
kusano fc6ab3
	jne  L_update_next_in
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	mov  ebx,ebp
kusano fc6ab3
kusano fc6ab3
L_update_next_in:
kusano fc6ab3
; 1266 "inffast.S"
kusano fc6ab3
	mov  eax, [esp+88]
kusano fc6ab3
	mov  ecx,ebx
kusano fc6ab3
	mov  edx, [eax+28]
kusano fc6ab3
	shr  ecx,3
kusano fc6ab3
	sub  esi,ecx
kusano fc6ab3
	shl  ecx,3
kusano fc6ab3
	sub  ebx,ecx
kusano fc6ab3
	mov  [eax+12],edi
kusano fc6ab3
	mov  [edx+bits_state],ebx
kusano fc6ab3
	mov  ecx,ebx
kusano fc6ab3
kusano fc6ab3
	lea  ebx, [esp+28]
kusano fc6ab3
	cmp  [esp+20],ebx
kusano fc6ab3
	jne  L_buf_not_used
kusano fc6ab3
kusano fc6ab3
	sub  esi,ebx
kusano fc6ab3
	mov  ebx, [eax+0]
kusano fc6ab3
	mov  [esp+20],ebx
kusano fc6ab3
	add  esi,ebx
kusano fc6ab3
	mov  ebx, [eax+4]
kusano fc6ab3
	sub  ebx,11
kusano fc6ab3
	add  [esp+20],ebx
kusano fc6ab3
kusano fc6ab3
L_buf_not_used:
kusano fc6ab3
	mov  [eax+0],esi
kusano fc6ab3
kusano fc6ab3
	mov  ebx,1
kusano fc6ab3
	shl  ebx,cl
kusano fc6ab3
	dec  ebx
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	cmp  dword ptr [inflate_fast_use_mmx],2
kusano fc6ab3
	jne  L_update_hold
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	psrlq mm0,mm1
kusano fc6ab3
	movd ebp,mm0
kusano fc6ab3
kusano fc6ab3
	emms
kusano fc6ab3
kusano fc6ab3
L_update_hold:
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	and  ebp,ebx
kusano fc6ab3
	mov  [edx+hold_state],ebp
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
	mov  ebx, [esp+20]
kusano fc6ab3
	cmp  ebx,esi
kusano fc6ab3
	jbe  L_last_is_smaller
kusano fc6ab3
kusano fc6ab3
	sub  ebx,esi
kusano fc6ab3
	add  ebx,11
kusano fc6ab3
	mov  [eax+4],ebx
kusano fc6ab3
	jmp  L_fixup_out
kusano fc6ab3
L_last_is_smaller:
kusano fc6ab3
	sub  esi,ebx
kusano fc6ab3
	neg  esi
kusano fc6ab3
	add  esi,11
kusano fc6ab3
	mov  [eax+4],esi
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
L_fixup_out:
kusano fc6ab3
kusano fc6ab3
	mov  ebx, [esp+16]
kusano fc6ab3
	cmp  ebx,edi
kusano fc6ab3
	jbe  L_end_is_smaller
kusano fc6ab3
kusano fc6ab3
	sub  ebx,edi
kusano fc6ab3
	add  ebx,257
kusano fc6ab3
	mov  [eax+16],ebx
kusano fc6ab3
	jmp  L_done
kusano fc6ab3
L_end_is_smaller:
kusano fc6ab3
	sub  edi,ebx
kusano fc6ab3
	neg  edi
kusano fc6ab3
	add  edi,257
kusano fc6ab3
	mov  [eax+16],edi
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
kusano fc6ab3
L_done:
kusano fc6ab3
	add  esp,64
kusano fc6ab3
	popfd
kusano fc6ab3
	pop  ebx
kusano fc6ab3
	pop  ebp
kusano fc6ab3
	pop  esi
kusano fc6ab3
	pop  edi
kusano fc6ab3
	ret
kusano fc6ab3
_inflate_fast endp
kusano fc6ab3
kusano fc6ab3
_TEXT	ends
kusano fc6ab3
end