small fixes

git-svn-id: svn://kolibrios.org@6863 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA 2017-02-14 08:45:25 +00:00
parent 568fb16110
commit 0c0f92cb4e
1 changed files with 113 additions and 61 deletions

View File

@ -287,7 +287,7 @@ if FASTEST eq 1
@@:
else
cmp dword[level],Z_DEFAULT_COMPRESSION
jne @f ;if (..==0)
jne @f ;if (..==..)
mov dword[level],6
@@:
end if
@ -296,7 +296,6 @@ end if
jge @f ;if (..<0) ;suppress zlib wrapper
mov dword[wrap],0
neg dword[windowBits]
inc dword[windowBits]
jmp .end1
@@:
if GZIP eq 1
@ -411,7 +410,6 @@ end if
jmp .end_f
@@:
mov eax,[edi+deflate_state.lit_bufsize]
shr eax,1 ;/=sizeof(uint_16)
add eax,[overlay]
mov [edi+deflate_state.d_buf],eax
mov eax,[edi+deflate_state.lit_bufsize]
@ -428,7 +426,6 @@ end if
stdcall deflateReset, ebx
.end_f:
zlib_debug 'deflateInit2_ strategy = %d',[strategy]
ret
endp
@ -628,7 +625,6 @@ endp
align 4
proc deflateReset uses ebx, strm:dword
mov ebx,[strm]
zlib_debug 'deflateReset'
stdcall deflateResetKeep, ebx
cmp eax,Z_OK
jne @f ;if (..==Z_OK)
@ -765,7 +761,7 @@ if FASTEST eq 1
@@:
else
cmp dword[level],Z_DEFAULT_COMPRESSION
jne @f ;if (..==0)
jne @f ;if (..==..)
mov dword[level],6
@@:
end if
@ -857,63 +853,124 @@ endp
; upper bound of about 14% expansion does not seem onerous for output buffer
; allocation.
;uLong (strm, sourceLen)
; z_streamp strm
; uLong sourceLen
;uLong (z_streamp strm, uLong sourceLen)
align 4
proc deflateBound, strm:dword, sourceLen:dword
; deflate_state *s;
; uLong complen, wraplen;
; Bytef *str;
zlib_debug 'deflateBound'
proc deflateBound uses ebx edi, strm:dword, sourceLen:dword
locals
complen dd ?
wraplen dd ?
endl
;edi = s
; conservative upper bound for compressed data
; complen = sourceLen +
; ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5;
mov ebx,[sourceLen]
mov eax,ebx
add eax,7
shr eax,3
add eax,ebx
add ebx,63
shr ebx,6
lea eax,[eax+ebx+5]
mov [complen],eax
; if can't get parameters, return conservative bound plus zlib wrapper
; if (strm == Z_NULL || strm->state == Z_NULL)
; return complen + 6;
mov eax,[strm]
cmp eax,Z_NULL
je .end0
mov edi,[eax+z_stream.state] ;s = strm.state
cmp edi,Z_NULL
jne @f
.end0: ;if (..==0 || ..==0)
mov eax,[complen]
add eax,6
jmp .end_f
@@:
; compute wrapper length
; s = strm->state;
; switch (s->wrap) {
; case 0: /* raw deflate */
; wraplen = 0;
; break;
; case 1: /* zlib wrapper */
; wraplen = 6 + (s->strstart ? 4 : 0);
; break;
; case 2: /* gzip wrapper */
; wraplen = 18;
; if (s->gzhead != Z_NULL) { /* user-supplied gzip header */
; if (s->gzhead->extra != Z_NULL)
; wraplen += 2 + s->gzhead->extra_len;
; str = s->gzhead->name;
; if (str != Z_NULL)
; do {
; wraplen++;
; } while (*str++);
; str = s->gzhead->comment;
; if (str != Z_NULL)
; do {
; wraplen++;
; } while (*str++);
; if (s->gzhead->hcrc)
; wraplen += 2;
; }
; break;
; default: /* for compiler happiness */
; wraplen = 6;
; }
mov ebx,[edi+deflate_state.wrap]
cmp ebx,0
je .end1
cmp ebx,1
je .end2
cmp ebx,2
je .end3
jmp .end4
.end1: ;raw deflate
mov dword[wraplen],0
jmp .end5
.end2: ;zlib wrapper
mov eax,[edi+deflate_state.strstart]
neg eax
sbb eax,eax
and eax,4
add eax,6
mov [wraplen],eax
jmp .end5
.end3: ;gzip wrapper
mov dword[wraplen],18
cmp dword[edi+deflate_state.gzhead],Z_NULL ;user-supplied gzip header
je .end5
mov eax,[edi+deflate_state.gzhead]
cmp dword[eax+gz_header.extra],0
je @f
mov eax,[edi+deflate_state.gzhead]
mov eax,[eax+gz_header.extra_len]
add dword[wraplen],eax
add dword[wraplen],2
@@:
mov eax,[edi+deflate_state.gzhead]
mov eax,[eax+gz_header.name]
cmp eax,0
je @f
.cycle0: ;do
inc dword[wraplen]
movzx ebx,byte[eax]
inc eax
test ebx,ebx
jne .cycle0
@@:
mov eax,[edi+deflate_state.gzhead]
mov eax,[eax+gz_header.comment]
cmp eax,0
je @f
.cycle1: ;do
inc dword[wraplen]
movzx ebx,byte[eax]
inc eax
test ebx,ebx
jne .cycle1
@@:
mov eax,[edi+deflate_state.gzhead]
cmp dword[eax+gz_header.hcrc],0
je .end5
add dword[wraplen],2
jmp .end5
.end4: ;for compiler happiness
mov dword[wraplen],6
.end5:
; if not default parameters, return conservative bound
; if (s->w_bits != 15 || s->hash_bits != 8 + 7)
; return complen + wraplen;
cmp dword[edi+deflate_state.w_bits],15
jne .end6
cmp dword[edi+deflate_state.hash_bits],8+7
je @f
.end6: ;if (s->w_bits !=.. || s->hash_bits !=..)
mov eax,[complen]
add eax,[wraplen]
jmp .end_f
@@:
; default settings: return tight bound for that case
; return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
; (sourceLen >> 25) + 13 - 6 + wraplen;
mov eax,[sourceLen]
mov ebx,eax
shr ebx,12
add ebx,eax
mov edi,eax
shr edi,14
add ebx,edi
shr eax,25
add ebx,[wraplen]
lea eax,[eax+ebx+7]
.end_f:
ret
endp
@ -923,11 +980,9 @@ endp
; IN assertion: the stream state is correct and there is enough room in
; pending_buf.
;void (s, b)
; deflate_state *s
; uInt b
;void (deflate_state *s, uInt b)
align 4
proc putShortMSB uses ebx ecx, s:dword, b:dword
proc putShortMSB uses eax ebx ecx, s:dword, b:dword
mov ebx,[s]
mov ecx,[b]
put_byte ebx, ch
@ -2004,7 +2059,6 @@ else ;FASTEST
; ---------------------------------------------------------------------------
; Optimized version for FASTEST only
mov edx,[s]
zlib_debug 'longest_match'
; The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
; It is easy to get rid of this optimization if necessary.
@ -2244,7 +2298,7 @@ end if
mov eax,[edi+deflate_state.lookahead]
add eax,[edi+deflate_state.insert]
cmp eax,MIN_MATCH
jl .end1 ;if (..>=..)
jb .end1 ;if (..>=..)
mov esi,[edi+deflate_state.strstart]
sub esi,[edi+deflate_state.insert]
;esi = str
@ -2414,9 +2468,7 @@ end if
; NOTE: this function should be optimized to avoid extra copying from
; window to pending_buf.
;block_state (s, flush)
; deflate_state *s
; int flush
;block_state (deflate_state *s, int flush)
align 4
proc deflate_stored uses ebx ecx edi, s:dword, flush:dword
; Stored blocks are limited to 0xffff bytes, pending_buf is limited