forked from KolibriOS/kolibrios
fix calculation 'adler32',
other small fixes git-svn-id: svn://kolibrios.org@6873 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
846906fa8c
commit
c5ce2bec50
@ -149,9 +149,6 @@ f_zbz db ' ZB_line_z',0
|
|||||||
f_zb db ' ZB_line',0
|
f_zb db ' ZB_line',0
|
||||||
f_find_l db 'find_list',0
|
f_find_l db 'find_list',0
|
||||||
f_alloc_l db 'alloc_list',0
|
f_alloc_l db 'alloc_list',0
|
||||||
f_is_l db 'glIsList',0
|
|
||||||
f_gen_l db 'glGenLists',0
|
|
||||||
f_end_l db 'glEndList',0
|
|
||||||
f_fill_tr db 'ZB_fillTriangle...',0
|
f_fill_tr db 'ZB_fillTriangle...',0
|
||||||
f_fill_tr_nl db ' lines',0
|
f_fill_tr_nl db ' lines',0
|
||||||
f_fill_tr_nll db ' len',0
|
f_fill_tr_nll db ' len',0
|
||||||
|
@ -2941,7 +2941,7 @@ align 4
|
|||||||
.cycle4:
|
.cycle4:
|
||||||
mov dword[edi+png_struct.zstream.avail_out],16*1024
|
mov dword[edi+png_struct.zstream.avail_out],16*1024
|
||||||
|
|
||||||
stdcall [deflate], esi, Z_NO_FLUSH
|
stdcall [deflate], esi, Z_FINISH ;Z_NO_FLUSH
|
||||||
cmp eax,Z_STREAM_ERROR
|
cmp eax,Z_STREAM_ERROR
|
||||||
je .end1
|
je .end1
|
||||||
|
|
||||||
@ -2949,13 +2949,14 @@ align 4
|
|||||||
sub ecx,[edi+png_struct.zstream.avail_out]
|
sub ecx,[edi+png_struct.zstream.avail_out]
|
||||||
cmp dword[edi+png_struct.zstream.avail_out],0
|
cmp dword[edi+png_struct.zstream.avail_out],0
|
||||||
je .cycle4 ;while (strm.avail_out == 0)
|
je .cycle4 ;while (strm.avail_out == 0)
|
||||||
|
if 0
|
||||||
mov dword[edi+png_struct.zstream.avail_out],16*1024
|
mov dword[edi+png_struct.zstream.avail_out],16*1024
|
||||||
stdcall [deflate], esi, Z_FINISH
|
stdcall [deflate], esi, Z_FINISH
|
||||||
add ecx,16*1024
|
add ecx,16*1024
|
||||||
sub ecx,[edi+png_struct.zstream.avail_out]
|
sub ecx,[edi+png_struct.zstream.avail_out]
|
||||||
cmp eax,Z_STREAM_ERROR
|
cmp eax,Z_STREAM_ERROR
|
||||||
je .end1
|
je .end1
|
||||||
|
end if
|
||||||
stdcall [deflateEnd], esi
|
stdcall [deflateEnd], esi
|
||||||
|
|
||||||
if PNG_WRITE_OPTIMIZE_CMF_SUPPORTED eq 1
|
if PNG_WRITE_OPTIMIZE_CMF_SUPPORTED eq 1
|
||||||
|
@ -9,12 +9,9 @@ NMAX equ 5552
|
|||||||
|
|
||||||
macro DO1 buf,i
|
macro DO1 buf,i
|
||||||
{
|
{
|
||||||
mov eax,buf
|
movzx eax,byte[buf+i]
|
||||||
add eax,i
|
|
||||||
movzx eax,byte[eax]
|
|
||||||
add [adler],eax
|
add [adler],eax
|
||||||
mov eax,[adler]
|
add edi,[adler]
|
||||||
add [sum2],eax
|
|
||||||
}
|
}
|
||||||
macro DO2 buf,i
|
macro DO2 buf,i
|
||||||
{
|
{
|
||||||
@ -113,25 +110,18 @@ end if
|
|||||||
}
|
}
|
||||||
|
|
||||||
; =========================================================================
|
; =========================================================================
|
||||||
;uLong (adler, buf, len)
|
;uLong (uLong adler, const Bytef *buf, uInt len)
|
||||||
; uLong adler
|
align 16
|
||||||
; const Bytef *buf
|
proc adler32 uses ebx ecx edx edi, adler:dword, buf:dword, len:dword
|
||||||
; uInt len
|
|
||||||
align 4
|
|
||||||
proc adler32 uses ebx edx, adler:dword, buf:dword, len:dword
|
|
||||||
locals
|
|
||||||
sum2 dd ? ;uLong
|
|
||||||
endl
|
|
||||||
;zlib_debug 'adler32 adler = %d',[adler]
|
|
||||||
; split Adler-32 into component sums
|
; split Adler-32 into component sums
|
||||||
mov eax,[adler]
|
mov edi,[adler]
|
||||||
shr eax,16
|
shr edi,16
|
||||||
mov [sum2],eax
|
and dword[adler],0xffff
|
||||||
and [adler],0xffff
|
|
||||||
mov ebx,[buf]
|
mov ebx,[buf]
|
||||||
|
mov ecx,[len]
|
||||||
|
|
||||||
; in case user likes doing a byte at a time, keep it fast
|
; in case user likes doing a byte at a time, keep it fast
|
||||||
cmp dword[len],1
|
cmp ecx,1
|
||||||
jne .end0 ;if (..==..)
|
jne .end0 ;if (..==..)
|
||||||
movzx eax,byte[ebx]
|
movzx eax,byte[ebx]
|
||||||
add [adler],eax
|
add [adler],eax
|
||||||
@ -139,15 +129,13 @@ endl
|
|||||||
jb @f ;if (..>=..)
|
jb @f ;if (..>=..)
|
||||||
sub dword[adler],BASE
|
sub dword[adler],BASE
|
||||||
@@:
|
@@:
|
||||||
mov eax,[adler]
|
add edi,[adler]
|
||||||
add [sum2],eax
|
cmp edi,BASE
|
||||||
cmp dword[sum2],BASE
|
jae .combine ;if (..>=..)
|
||||||
jb @f ;if (..>=..)
|
sub edi,BASE
|
||||||
sub dword[sum2],BASE
|
|
||||||
@@:
|
|
||||||
jmp .combine
|
jmp .combine
|
||||||
align 4
|
align 4
|
||||||
.end0:
|
.end0:
|
||||||
|
|
||||||
; initial Adler-32 value (deferred check for len == 1 speed)
|
; initial Adler-32 value (deferred check for len == 1 speed)
|
||||||
cmp ebx,Z_NULL
|
cmp ebx,Z_NULL
|
||||||
@ -159,89 +147,82 @@ align 4
|
|||||||
@@:
|
@@:
|
||||||
|
|
||||||
; in case short lengths are provided, keep it somewhat fast
|
; in case short lengths are provided, keep it somewhat fast
|
||||||
cmp dword[len],16
|
cmp ecx,16
|
||||||
jge .end1 ;if (..<..)
|
jae .cycle3 ;if (..<..)
|
||||||
.cycle0:
|
.cycle0:
|
||||||
cmp dword[len],0
|
mov eax,ecx
|
||||||
jne @f ;while (..)
|
dec ecx
|
||||||
|
test eax,eax
|
||||||
|
je @f ;while (..)
|
||||||
movzx eax,byte[ebx]
|
movzx eax,byte[ebx]
|
||||||
inc ebx
|
|
||||||
add [adler],eax
|
add [adler],eax
|
||||||
mov eax,[adler]
|
inc ebx
|
||||||
add [sum2],eax
|
add edi,[adler]
|
||||||
dec dword[len]
|
|
||||||
jmp .cycle0
|
jmp .cycle0
|
||||||
align 4
|
align 4
|
||||||
@@:
|
@@:
|
||||||
cmp dword[adler],BASE
|
cmp dword[adler],BASE
|
||||||
jl @f ;if (..>=..)
|
jb @f ;if (..>=..)
|
||||||
sub dword[adler],BASE
|
sub dword[adler],BASE
|
||||||
@@:
|
@@:
|
||||||
MOD28 dword[sum2] ;only added so many BASE's
|
MOD28 edi ;only added so many BASE's
|
||||||
jmp .combine
|
jmp .combine
|
||||||
align 4
|
|
||||||
.end1:
|
|
||||||
|
|
||||||
; do length NMAX blocks -- requires just one modulo operation
|
; do length NMAX blocks -- requires just one modulo operation
|
||||||
|
align 4
|
||||||
.cycle3:
|
.cycle3:
|
||||||
cmp dword[len],NMAX
|
cmp ecx,NMAX
|
||||||
jl .cycle3end ;while (..>=..)
|
jb .cycle3end ;while (..>=..)
|
||||||
sub dword[len],NMAX
|
sub ecx,NMAX
|
||||||
mov edx,NMAX/16 ;NMAX is divisible by 16
|
mov edx,NMAX/16 ;NMAX is divisible by 16
|
||||||
.cycle1: ;do
|
.cycle1: ;do
|
||||||
DO16 ebx ;16 sums unrolled
|
DO16 ebx ;16 sums unrolled
|
||||||
add ebx,16
|
add ebx,16
|
||||||
dec edx
|
dec edx
|
||||||
cmp edx,0
|
jne .cycle1 ;while (..)
|
||||||
jg .cycle1 ;while (..)
|
|
||||||
MOD [adler]
|
MOD [adler]
|
||||||
MOD [sum2]
|
MOD edi
|
||||||
jmp .cycle3
|
jmp .cycle3
|
||||||
align 4
|
align 4
|
||||||
.cycle3end:
|
.cycle3end:
|
||||||
|
|
||||||
; do remaining bytes (less than NMAX, still just one modulo)
|
; do remaining bytes (less than NMAX, still just one modulo)
|
||||||
cmp dword[len],0
|
cmp ecx,0
|
||||||
jne .end2 ;if (..) ;avoid modulos if none remaining
|
je .combine ;if (..) ;avoid modulos if none remaining
|
||||||
@@:
|
@@:
|
||||||
cmp dword[len],16
|
cmp ecx,16
|
||||||
jl .cycle2 ;while (..>=..)
|
jb .cycle2 ;while (..>=..)
|
||||||
sub dword[len],16
|
sub ecx,16
|
||||||
DO16 ebx
|
DO16 ebx
|
||||||
add ebx,16
|
add ebx,16
|
||||||
jmp @b
|
jmp @b
|
||||||
align 4
|
align 4
|
||||||
.cycle2:
|
.cycle2:
|
||||||
cmp dword[len],0
|
mov eax,ecx
|
||||||
jne @f ;while (..)
|
dec ecx
|
||||||
|
test eax,eax
|
||||||
|
je @f ;while (..)
|
||||||
movzx eax,byte[ebx]
|
movzx eax,byte[ebx]
|
||||||
inc ebx
|
|
||||||
add [adler],eax
|
add [adler],eax
|
||||||
mov eax,[adler]
|
inc ebx
|
||||||
add [sum2],eax
|
add edi,[adler]
|
||||||
dec dword[len]
|
|
||||||
jmp .cycle2
|
jmp .cycle2
|
||||||
align 4
|
align 4
|
||||||
@@:
|
@@:
|
||||||
MOD [adler]
|
MOD [adler]
|
||||||
MOD [sum2]
|
MOD edi
|
||||||
.end2:
|
|
||||||
|
|
||||||
; return recombined sums
|
; return recombined sums
|
||||||
.combine:
|
.combine:
|
||||||
mov eax,[sum2]
|
mov eax,edi
|
||||||
shl eax,16
|
shl eax,16
|
||||||
or eax,[adler]
|
or eax,[adler]
|
||||||
.end_f:
|
.end_f:
|
||||||
;zlib_debug ' adler32.ret = %d',eax
|
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
; =========================================================================
|
; =========================================================================
|
||||||
;uLong (adler1, adler2, len2)
|
;uLong (uLong adler1, uLong adler2, z_off64_t len2)
|
||||||
; uLong adler1
|
|
||||||
; uLong adler2
|
|
||||||
; z_off64_t len2
|
|
||||||
align 4
|
align 4
|
||||||
proc adler32_combine_, adler1:dword, adler2:dword, len2:dword
|
proc adler32_combine_, adler1:dword, adler2:dword, len2:dword
|
||||||
locals
|
locals
|
||||||
|
@ -341,6 +341,7 @@ end if
|
|||||||
mov edi,eax ;edi = s
|
mov edi,eax ;edi = s
|
||||||
mov [ebx+z_stream.state],edi
|
mov [ebx+z_stream.state],edi
|
||||||
mov [edi+deflate_state.strm],ebx
|
mov [edi+deflate_state.strm],ebx
|
||||||
|
mov dword[edi+deflate_state.status],INIT_STATE ;to pass state test in deflateReset()
|
||||||
|
|
||||||
mov eax,[wrap]
|
mov eax,[wrap]
|
||||||
mov [edi+deflate_state.wrap],eax
|
mov [edi+deflate_state.wrap],eax
|
||||||
@ -1009,7 +1010,7 @@ proc flush_pending uses eax ebx ecx edx, strm:dword
|
|||||||
mov ecx,[edx+deflate_state.pending]
|
mov ecx,[edx+deflate_state.pending]
|
||||||
mov eax,[ebx+z_stream.avail_out]
|
mov eax,[ebx+z_stream.avail_out]
|
||||||
cmp ecx,eax
|
cmp ecx,eax
|
||||||
jle @f ;if (..>..)
|
jbe @f ;if (..>..)
|
||||||
mov ecx,eax
|
mov ecx,eax
|
||||||
@@:
|
@@:
|
||||||
test ecx,ecx
|
test ecx,ecx
|
||||||
@ -1220,7 +1221,7 @@ end if
|
|||||||
bswap ecx
|
bswap ecx
|
||||||
put_dword edi, ecx
|
put_dword edi, ecx
|
||||||
@@:
|
@@:
|
||||||
xor eax,eax ;stdcall calc_crc32, 0, Z_NULL, 0
|
stdcall adler32, 0,0,0
|
||||||
mov [ebx+z_stream.adler],eax
|
mov [ebx+z_stream.adler],eax
|
||||||
.end2:
|
.end2:
|
||||||
if GZIP eq 1
|
if GZIP eq 1
|
||||||
@ -1772,7 +1773,7 @@ proc read_buf uses ebx ecx, strm:dword, buf:dword, size:dword
|
|||||||
mov eax,[ebx+z_stream.avail_in]
|
mov eax,[ebx+z_stream.avail_in]
|
||||||
|
|
||||||
cmp eax,[size]
|
cmp eax,[size]
|
||||||
jle @f ;if (..>..)
|
jbe @f ;if (..>..)
|
||||||
mov eax,[size]
|
mov eax,[size]
|
||||||
@@:
|
@@:
|
||||||
cmp eax,0
|
cmp eax,0
|
||||||
|
@ -170,15 +170,7 @@ test_code:
|
|||||||
mov [eax+z_stream.next_out],m1 ;ãáâ ¢«¨¢ ¥¬ ¡ãä¥à ¤«ï ᦠâ¨ï
|
mov [eax+z_stream.next_out],m1 ;ãáâ ¢«¨¢ ¥¬ ¡ãä¥à ¤«ï ᦠâ¨ï
|
||||||
mov dword[eax+z_stream.avail_out],1024 ;à §¬¥à ¡ãä¥à ¤«ï ᦠâ¨ï (¬ ªá¨¬ã¬ 16 Š¡)
|
mov dword[eax+z_stream.avail_out],1024 ;à §¬¥à ¡ãä¥à ¤«ï ᦠâ¨ï (¬ ªá¨¬ã¬ 16 Š¡)
|
||||||
|
|
||||||
;¢ëç¨á«ï¥¬ crc ¤«ï ᦨ¬ ¥¬ë¦ ¤ ëå
|
stdcall [deflate], my_strm, Z_FINISH
|
||||||
stdcall [calc_crc32], 0,m0,ecx
|
|
||||||
mov edx,eax
|
|
||||||
|
|
||||||
;call print_z_struct
|
|
||||||
|
|
||||||
stdcall [deflate], my_strm, Z_FINISH ;Z_NO_FLUSH
|
|
||||||
|
|
||||||
;call print_z_struct
|
|
||||||
|
|
||||||
;à §¬¥à ᦠâëå ¤ ëå: 1024-[my_strm.avail_out]
|
;à §¬¥à ᦠâëå ¤ ëå: 1024-[my_strm.avail_out]
|
||||||
mov ecx,1024
|
mov ecx,1024
|
||||||
@ -188,12 +180,6 @@ test_code:
|
|||||||
;assert(ret != Z_STREAM_ERROR)
|
;assert(ret != Z_STREAM_ERROR)
|
||||||
;while (strm.avail_out == 0)
|
;while (strm.avail_out == 0)
|
||||||
|
|
||||||
;áâ ¢¨¬ crc ᦠâë¥ ¤ ë¥
|
|
||||||
mov ecx,[m1size]
|
|
||||||
sub ecx,4
|
|
||||||
add ecx,m1
|
|
||||||
mov [ecx],edx
|
|
||||||
|
|
||||||
;ä®à¬¨à®¢ ¨¥ ⥪áâ ¤«ï ®â®¡à ¦¥¨ï ᦠâëå ¤ ëå
|
;ä®à¬¨à®¢ ¨¥ ⥪áâ ¤«ï ®â®¡à ¦¥¨ï ᦠâëå ¤ ëå
|
||||||
;¢ 16-à¨ç®¬ ¢¨¤¥, 㦮 ⮫쪮 ¤«ï ¯à¨¬¥à
|
;¢ 16-à¨ç®¬ ¢¨¤¥, 㦮 ⮫쪮 ¤«ï ¯à¨¬¥à
|
||||||
mov ebx,[m1size]
|
mov ebx,[m1size]
|
||||||
@ -229,7 +215,7 @@ align 4
|
|||||||
add eax,2
|
add eax,2
|
||||||
stdcall [deflate_unpack],eax,m2size
|
stdcall [deflate_unpack],eax,m2size
|
||||||
mov [m2],eax ;§ ¯¨áì ®¢ëå à ᯠª®¢ ëå ¤ ëå
|
mov [m2],eax ;§ ¯¨áì ®¢ëå à ᯠª®¢ ëå ¤ ëå
|
||||||
mov ecx,[m0size] ;;; ???
|
;;; mov ecx,[m0size] ;;; ???
|
||||||
mov [m2size],ecx
|
mov [m2size],ecx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user