Rev 6799 | Rev 6815 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6799 | Rev 6813 | ||
---|---|---|---|
Line 730... | Line 730... | ||
730 | cmp word[eax],0 |
730 | cmp word[eax],0 |
731 | jne @f ;while (..==0) bits-- |
731 | jne @f ;while (..==0) bits-- |
732 | dec dword[bits] |
732 | dec dword[bits] |
733 | sub eax,2 |
733 | sub eax,2 |
734 | jmp @b |
734 | jmp @b |
- | 735 | align 4 |
|
735 | @@: |
736 | @@: |
736 | dec word[eax] ;move one leaf down the tree |
737 | dec word[eax] ;move one leaf down the tree |
737 | add word[eax+2],2 ;move one overflow item as its brother |
738 | add word[eax+2],2 ;move one overflow item as its brother |
738 | mov eax,[max_length] |
739 | mov eax,[max_length] |
739 | dec word[edi+deflate_state.bl_count+2*eax] |
740 | dec word[edi+deflate_state.bl_count+2*eax] |
Line 763... | Line 764... | ||
763 | dec dword[h] |
764 | dec dword[h] |
764 | mov eax,[h] |
765 | mov eax,[h] |
765 | movzx eax,word[edi+deflate_state.heap+2*eax] |
766 | movzx eax,word[edi+deflate_state.heap+2*eax] |
766 | mov [m],eax ;m = s.heap[--h] |
767 | mov [m],eax ;m = s.heap[--h] |
767 | cmp eax,[max_code] |
768 | cmp eax,[max_code] |
768 | jle @f ;if (..>..) continue |
769 | jg .cycle4 ;if (..>..) continue |
769 | dec ecx |
- | |
770 | jmp .cycle4 |
- | |
771 | @@: |
- | |
772 | mov esi,[m] |
770 | mov esi,[m] |
773 | imul esi,sizeof.ct_data |
771 | imul esi,sizeof.ct_data |
774 | add esi,[tree] ;esi = &tree[m] |
772 | add esi,[tree] ;esi = &tree[m] |
775 | mov eax,[bits] |
773 | mov eax,[bits] |
776 | cmp word[esi+Len],ax |
774 | cmp word[esi+Len],ax |
Line 784... | Line 782... | ||
784 | mov eax,[bits] |
782 | mov eax,[bits] |
785 | mov word[esi+Len],ax |
783 | mov word[esi+Len],ax |
786 | @@: |
784 | @@: |
787 | dec ecx |
785 | dec ecx |
788 | jmp .cycle4 |
786 | jmp .cycle4 |
- | 787 | align 4 |
|
789 | .cycle4end: |
788 | .cycle4end: |
790 | dec dword[bits] |
789 | dec dword[bits] |
791 | jmp .cycle3 |
790 | jmp .cycle3 |
- | 791 | align 4 |
|
792 | .end_f: |
792 | .end_f: |
793 | popad |
793 | popad |
794 | ret |
794 | ret |
795 | endp |
795 | endp |
Line 911... | Line 911... | ||
911 | zlib_debug 'build_tree cycle0 ecx = %d',ecx |
911 | zlib_debug 'build_tree cycle0 ecx = %d',ecx |
Line 912... | Line 912... | ||
912 | 912 | ||
913 | mov dword[edi+deflate_state.heap_len],0 |
913 | mov dword[edi+deflate_state.heap_len],0 |
Line 914... | Line 914... | ||
914 | mov dword[edi+deflate_state.heap_max],HEAP_SIZE |
914 | mov dword[edi+deflate_state.heap_max],HEAP_SIZE |
915 | - | ||
916 | cmp ecx,0 |
915 | |
917 | jle .cycle0end |
916 | mov edx,[tree] |
918 | xor edx,edx |
917 | xor ecx,ecx |
919 | .cycle0: ;for (..;..<..;..) |
- | |
920 | mov eax,edx |
918 | .cycle0: ;for (..;..<..;..) |
921 | imul eax,sizeof.ct_data |
919 | cmp ecx,[elems] |
922 | add eax,[tree] |
920 | jge .cycle0end |
923 | cmp word[eax+Freq],0 |
921 | cmp word[edx+Freq],0 |
924 | je @f ;if (..!=0) |
922 | je @f ;if (..!=0) |
925 | inc dword[edi+deflate_state.heap_len] |
923 | inc dword[edi+deflate_state.heap_len] |
926 | mov eax,[edi+deflate_state.heap_len] |
924 | mov eax,[edi+deflate_state.heap_len] |
927 | mov [max_code],edx |
- | |
928 | mov [edi+deflate_state.heap+2*eax],dx |
- | |
929 | mov eax,edx |
925 | mov [max_code],ecx |
930 | add eax,edi |
- | |
931 | add eax,deflate_state.depth |
926 | mov [edi+deflate_state.heap+2*eax],cx |
932 | mov byte[eax],0 |
927 | mov byte[edi+deflate_state.depth+ecx],0 |
933 | jmp .end0 |
928 | jmp .end0 |
934 | align 4 |
929 | align 4 |
935 | @@: ;else |
930 | @@: ;else |
- | 931 | mov word[edx+Len],0 |
|
936 | mov word[eax+Len],0 |
932 | .end0: |
937 | .end0: |
933 | add edx,sizeof.ct_data |
938 | inc edx |
934 | inc ecx |
939 | loop .cycle0 |
935 | jmp .cycle0 |
Line 940... | Line 936... | ||
940 | align 4 |
936 | align 4 |
941 | .cycle0end: |
937 | .cycle0end: |
Line 1023... | Line 1019... | ||
1023 | add edx,[tree] |
1019 | add edx,[tree] |
1024 | mov word[edx+Freq],ax |
1020 | mov word[edx+Freq],ax |
Line 1025... | Line 1021... | ||
1025 | 1021 | ||
1026 | mov eax,ecx |
1022 | mov eax,ecx |
1027 | add eax,edi |
1023 | add eax,edi |
1028 | add eax,deflate_state.depth |
- | |
1029 | mov al,byte[eax] |
1024 | mov al,byte[eax+deflate_state.depth] |
1030 | mov edx,[m] |
1025 | mov edx,[m] |
1031 | add edx,edi |
1026 | add edx,edi |
1032 | add edx,deflate_state.depth |
- | |
1033 | mov ah,byte[edx] |
1027 | mov ah,byte[edx+deflate_state.depth] |
1034 | cmp al,ah |
1028 | cmp al,ah |
1035 | jl @f ;if (al>=ah) al=al : al=ah |
1029 | jl @f ;if (al>=ah) al=al : al=ah |
1036 | mov al,ah |
1030 | mov al,ah |
1037 | @@: |
1031 | @@: |
1038 | inc al |
1032 | inc al |
1039 | mov edx,[node] |
1033 | mov edx,[node] |
1040 | add edx,edi |
1034 | add edx,edi |
1041 | add edx,deflate_state.depth |
- | |
Line 1042... | Line 1035... | ||
1042 | mov byte[edx],al |
1035 | mov byte[edx+deflate_state.depth],al |
1043 | 1036 | ||
1044 | mov eax,[node] |
1037 | mov eax,[node] |
1045 | mov edx,[m] |
1038 | mov edx,[m] |
Line 1141... | Line 1134... | ||
1141 | cmp ebx,[min_count] |
1134 | cmp ebx,[min_count] |
1142 | jge .end1 ;else if (..<..) |
1135 | jge .end1 ;else if (..<..) |
1143 | mov eax,[curlen] |
1136 | mov eax,[curlen] |
1144 | imul eax,sizeof.ct_data |
1137 | imul eax,sizeof.ct_data |
1145 | add eax,edi |
1138 | add eax,edi |
1146 | add eax,deflate_state.bl_tree+Freq |
1139 | add word[eax+deflate_state.bl_tree+Freq],bx |
1147 | add word[eax],bx |
- | |
1148 | jmp .end4 |
1140 | jmp .end4 |
1149 | .end1: |
1141 | .end1: |
1150 | cmp dword[curlen],0 |
1142 | cmp dword[curlen],0 |
1151 | je .end2 ;else if (..!=0) |
1143 | je .end2 ;else if (..!=0) |
1152 | mov eax,[curlen] |
1144 | mov eax,[curlen] |
1153 | cmp eax,[prevlen] |
1145 | cmp eax,[prevlen] |
1154 | je @f ;if (..!=..) |
1146 | je @f ;if (..!=..) |
1155 | imul eax,sizeof.ct_data |
1147 | imul eax,sizeof.ct_data |
1156 | add eax,edi |
1148 | add eax,edi |
1157 | add eax,deflate_state.bl_tree+Freq |
1149 | inc word[eax+deflate_state.bl_tree+Freq] |
1158 | inc word[eax] |
- | |
1159 | @@: |
1150 | @@: |
1160 | mov eax,REP_3_6 |
1151 | mov eax,REP_3_6 |
1161 | imul eax,sizeof.ct_data |
1152 | imul eax,sizeof.ct_data |
1162 | add eax,edi |
1153 | add eax,edi |
1163 | add eax,deflate_state.bl_tree+Freq |
1154 | inc word[eax+deflate_state.bl_tree+Freq] |
1164 | inc word[eax] |
- | |
1165 | jmp .end4 |
1155 | jmp .end4 |
1166 | .end2: |
1156 | .end2: |
1167 | cmp ebx,10 |
1157 | cmp ebx,10 |
1168 | jg .end3 ;else if (..<=..) |
1158 | jg .end3 ;else if (..<=..) |
1169 | mov eax,REPZ_3_10 |
1159 | mov eax,REPZ_3_10 |
1170 | imul eax,sizeof.ct_data |
1160 | imul eax,sizeof.ct_data |
1171 | add eax,edi |
1161 | add eax,edi |
1172 | add eax,deflate_state.bl_tree+Freq |
1162 | inc word[eax+deflate_state.bl_tree+Freq] |
1173 | inc word[eax] |
- | |
1174 | jmp .end4 |
1163 | jmp .end4 |
1175 | .end3: ;else |
1164 | .end3: ;else |
1176 | mov eax,REPZ_11_138 |
1165 | mov eax,REPZ_11_138 |
1177 | imul eax,sizeof.ct_data |
1166 | imul eax,sizeof.ct_data |
1178 | add eax,edi |
1167 | add eax,edi |
1179 | add eax,deflate_state.bl_tree+Freq |
1168 | inc word[eax+deflate_state.bl_tree+Freq] |
1180 | inc word[eax] |
- | |
1181 | .end4: |
1169 | .end4: |
1182 | mov dword[curlen],0 |
1170 | mov dword[curlen],0 |
1183 | mov eax,[curlen] |
1171 | mov eax,[curlen] |
1184 | mov [prevlen],eax |
1172 | mov [prevlen],eax |
1185 | mov [nextlen],eax |
1173 | mov [nextlen],eax |
Line 1228... | Line 1216... | ||
1228 | zlib_debug 'send_tree' |
1216 | zlib_debug 'send_tree' |
1229 | ; *** tree[max_code+1].Len = -1 ;guard already set |
1217 | ; *** tree[max_code+1].Len = -1 ;guard already set |
1230 | mov eax,[tree] |
1218 | mov eax,[tree] |
1231 | movzx eax,word[eax+Len] |
1219 | movzx eax,word[eax+Len] |
1232 | mov [nextlen],eax |
1220 | mov [nextlen],eax |
- | 1221 | xor ecx,ecx |
|
1233 | cmp eax,0 |
1222 | test eax,eax |
1234 | jne @f ;if (..==0) |
1223 | jnz .cycle0 ;if (..==0) |
1235 | mov dword[max_count],138 |
1224 | mov dword[max_count],138 |
1236 | mov dword[min_count],3 |
1225 | mov dword[min_count],3 |
1237 | @@: |
- | |
Line 1238... | Line 1226... | ||
1238 | 1226 | ||
1239 | xor ecx,ecx |
1227 | align 4 |
1240 | .cycle0: ;for (..;..<=..;..) |
1228 | .cycle0: ;for (..;..<=..;..) |
1241 | cmp ecx,[max_code] |
1229 | cmp ecx,[max_code] |
1242 | jg .cycle0end |
1230 | jg .cycle0end |
1243 | mov eax,[nextlen] |
1231 | mov eax,[nextlen] |
Line 1255... | Line 1243... | ||
1255 | mov eax,[nextlen] |
1243 | mov eax,[nextlen] |
1256 | cmp [curlen],eax |
1244 | cmp [curlen],eax |
1257 | jne .end0 ;if (..<.. && ..==..) |
1245 | jne .end0 ;if (..<.. && ..==..) |
1258 | inc ecx |
1246 | inc ecx |
1259 | jmp .cycle0 ;continue |
1247 | jmp .cycle0 ;continue |
- | 1248 | align 4 |
|
1260 | .end0: |
1249 | .end0: |
1261 | cmp ebx,[min_count] |
1250 | cmp ebx,[min_count] |
1262 | jge .end1 ;else if (..<..) |
1251 | jge .end1 ;else if (..<..) |
1263 | @@: ;do |
1252 | @@: ;do |
1264 | mov ebx,edi |
1253 | mov ebx,edi |
1265 | add ebx,deflate_state.bl_tree |
1254 | add ebx,deflate_state.bl_tree |
1266 | send_code edi, [curlen], ebx |
1255 | send_code edi, [curlen], ebx |
1267 | dec dword[count] |
1256 | dec dword[count] |
1268 | cmp dword[count],0 |
- | |
1269 | jne @b ;while (..!=0) |
1257 | jnz @b ;while (..!=0) |
1270 | jmp .end4 |
1258 | jmp .end4 |
1271 | align 4 |
1259 | align 4 |
1272 | .end1: |
1260 | .end1: |
1273 | cmp dword[curlen],0 |
1261 | cmp dword[curlen],0 |
1274 | je .end2 ;else if (..!=0) |
1262 | je .end2 ;else if (..!=0) |
Line 1376... | Line 1364... | ||
1376 | mov eax,[max_blindex] |
1364 | mov eax,[max_blindex] |
1377 | add eax,bl_order |
1365 | add eax,bl_order |
1378 | movzx eax,byte[eax] |
1366 | movzx eax,byte[eax] |
1379 | imul eax,sizeof.ct_data |
1367 | imul eax,sizeof.ct_data |
1380 | add eax,edi |
1368 | add eax,edi |
1381 | add eax,deflate_state.bl_tree+Len |
1369 | cmp word[eax+deflate_state.bl_tree+Len],0 |
1382 | cmp word[eax],0 |
- | |
1383 | jne .cycle0end ;if (..!=0) break |
1370 | jne .cycle0end ;if (..!=0) break |
1384 | jmp .cycle0 |
1371 | jmp .cycle0 |
- | 1372 | align 4 |
|
1385 | .cycle0end: |
1373 | .cycle0end: |
1386 | ; Update opt_len to include the bit length tree and counts |
1374 | ; Update opt_len to include the bit length tree and counts |
1387 | mov eax,[max_blindex] |
1375 | mov eax,[max_blindex] |
1388 | inc eax |
1376 | inc eax |
1389 | imul eax,3 |
1377 | imul eax,3 |
Line 1443... | Line 1431... | ||
1443 | ; Tracev((stderr, "\nbl code %2d ", bl_order[ecx])); |
1431 | ; Tracev((stderr, "\nbl code %2d ", bl_order[ecx])); |
1444 | mov eax,ecx |
1432 | mov eax,ecx |
1445 | add eax,bl_order |
1433 | add eax,bl_order |
1446 | movzx eax,byte[eax] |
1434 | movzx eax,byte[eax] |
1447 | imul eax,sizeof.ct_data |
1435 | imul eax,sizeof.ct_data |
1448 | mov ebx,edi |
1436 | add eax,edi |
1449 | add ebx,deflate_state.bl_tree+Len |
1437 | movzx eax,word[eax+deflate_state.bl_tree+Len] |
1450 | add ebx,eax |
- | |
1451 | stdcall send_bits, edi, ebx, 3 |
1438 | stdcall send_bits, edi, eax, 3 |
1452 | inc ecx |
1439 | inc ecx |
1453 | jmp .cycle0 |
1440 | jmp .cycle0 |
1454 | align 4 |
1441 | align 4 |
1455 | .cycle0end: |
1442 | .cycle0end: |
1456 | ; Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); |
1443 | ; Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); |
Line 1987... | Line 1974... | ||
1987 | shr dword[p1code],1 |
1974 | shr dword[p1code],1 |
1988 | shl eax,1 |
1975 | shl eax,1 |
1989 | dec dword[len] |
1976 | dec dword[len] |
1990 | cmp dword[len],0 |
1977 | cmp dword[len],0 |
1991 | jg @b ;while (..>..) |
1978 | jg @b ;while (..>..) |
1992 | shl eax,1 |
1979 | shr eax,1 |
1993 | ret |
1980 | ret |
1994 | endp |
1981 | endp |
Line 1995... | Line 1982... | ||
1995 | 1982 | ||
1996 | ; =========================================================================== |
1983 | ; =========================================================================== |