Subversion Repositories Kolibri OS

Rev

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
; ===========================================================================