diff --git a/programs/develop/libraries/libs-dev/libimg/png/libpng/png.asm b/programs/develop/libraries/libs-dev/libimg/png/libpng/png.asm index bb7d36dcf1..869f19e6e0 100644 --- a/programs/develop/libraries/libs-dev/libimg/png/libpng/png.asm +++ b/programs/develop/libraries/libs-dev/libimg/png/libpng/png.asm @@ -10,10 +10,9 @@ ; For conditions of distribution and use, see the disclaimer ; and license in png.inc -crc_table rd 256 +DEBUG equ 0 include '../../../../../../KOSfuncs.inc' -include '../../../../../../fs/kfar/trunk/kfar_arc/crc.inc' include '../../../../../../fs/kfar/trunk/zlib/deflate.inc' include 'pngtokos.inc' ;integrate png to kos @@ -1294,8 +1293,8 @@ proc png_colorspace_sync uses ecx edi esi, png_ptr:dword, info_ptr:dword je @f ;if (..==0) ;reduce code size; check here not in the caller mov ecx,sizeof.png_colorspace mov esi,[png_ptr] - mov esi,[esi+png_struct.colorspace] - mov edi,[edi+png_info_def.colorspace] + add esi,png_struct.colorspace + add edi,png_info_def.colorspace rep movsb stdcall png_colorspace_sync_info, [png_ptr], [info_ptr] @@: diff --git a/programs/develop/libraries/libs-dev/libimg/png/libpng/png.inc b/programs/develop/libraries/libs-dev/libimg/png/libpng/png.inc index c973ebfa7d..35fcb638ec 100644 --- a/programs/develop/libraries/libs-dev/libimg/png/libpng/png.inc +++ b/programs/develop/libraries/libs-dev/libimg/png/libpng/png.inc @@ -554,6 +554,7 @@ if (PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED eq 1) | (PNG_USER_CHUNKS_SUPPORTED eq 1) struct png_unknown_chunk name rb 5 ;byte[5] ;Textual chunk name with '\0' terminator + rb 3 ;align podata dd ? ;byte* ;Data, should not be modified on read! size dd ? ;png_size_t diff --git a/programs/develop/libraries/libs-dev/libimg/png/libpng/pngget.asm b/programs/develop/libraries/libs-dev/libimg/png/libpng/pngget.asm index 75de1c6fce..18d39d7697 100644 --- a/programs/develop/libraries/libs-dev/libimg/png/libpng/pngget.asm +++ b/programs/develop/libraries/libs-dev/libimg/png/libpng/pngget.asm @@ -1183,16 +1183,16 @@ if PNG_WRITE_SUPPORTED eq 1 end if ; { if PNG_SEQUENTIAL_READ_SUPPORTED eq 1 -; return png_ptr->IDAT_read_size; + mov eax,[eax+png_struct.IDAT_read_size] else mov eax,PNG_IDAT_READ_SIZE - jmp .end_f end if ; } if PNG_WRITE_SUPPORTED eq 1 + jmp .end_f ; else -; return png_ptr->zbuffer_size; + mov eax,[eax+png_struct.zbuffer_size] end if .end_f: ret diff --git a/programs/develop/libraries/libs-dev/libimg/png/libpng/pnginfo.inc b/programs/develop/libraries/libs-dev/libimg/png/libpng/pnginfo.inc index cc8f6b498d..793b4207fa 100644 --- a/programs/develop/libraries/libs-dev/libimg/png/libpng/pnginfo.inc +++ b/programs/develop/libraries/libs-dev/libimg/png/libpng/pnginfo.inc @@ -135,8 +135,7 @@ if PNG_sBIT_SUPPORTED eq 1 sig_bit png_color_8 ; significant bits in color channels end if -;#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_EXPAND_SUPPORTED) || \ -;defined(PNG_READ_BACKGROUND_SUPPORTED) +if (PNG_tRNS_SUPPORTED eq 1) | (PNG_READ_EXPAND_SUPPORTED eq 1) | (PNG_READ_BACKGROUND_SUPPORTED eq 1) ; The tRNS chunk supplies transparency data for paletted images and ; other image types that don't need a full alpha channel. There are ; "num_trans" transparency values for a paletted image, stored in the @@ -148,7 +147,7 @@ end if trans_alpha dd ? ;bytep ; alpha values for paletted image trans_color png_color_16 ;transparent color for non-palette image -;end if +end if if (PNG_bKGD_SUPPORTED eq 1) | (PNG_READ_BACKGROUND_SUPPORTED eq 1) ; The bKGD chunk gives the suggested image background color if the diff --git a/programs/develop/libraries/libs-dev/libimg/png/libpng/pngstruct.inc b/programs/develop/libraries/libs-dev/libimg/png/libpng/pngstruct.inc index f4454dd21f..278551b9c3 100644 --- a/programs/develop/libraries/libs-dev/libimg/png/libpng/pngstruct.inc +++ b/programs/develop/libraries/libs-dev/libimg/png/libpng/pngstruct.inc @@ -126,7 +126,7 @@ end if ;COLORSPACE || GAMMA struct png_struct if PNG_SETJMP_SUPPORTED eq 1 - jmp_buf_local dd ? ;jmp_buf ;New name in 1.6.0 for jmp_buf in png_struct + jmp_buf_local rb 64 ;jmp_buf ;New name in 1.6.0 for jmp_buf in png_struct longjmp_fn dd ? ;png_longjmp_ptr ;setjmp non-local goto function. jmp_buf_ptr dd ? ;jmp_buf * ;passed to longjmp_fn jmp_buf_size dd ? ;size_t ;size of the above, if allocated @@ -154,6 +154,7 @@ if (PNG_READ_USER_TRANSFORM_SUPPORTED eq 1) | (PNG_WRITE_USER_TRANSFORM_SUPPORTE user_transform_ptr dd ? ;voidp ;user supplied struct for user transform user_transform_depth db ? ;byte ;bit depth of user transformed pixels user_transform_channels db ? ;byte ;channels in user transformed pixels + rb 2 ;align end if end if @@ -216,7 +217,7 @@ end if crc dd ? ;uint_32 ;current chunk CRC value palette dd ? ;png_colorp ;palette from the input file num_palette dw ? ;uint_16 ;number of color entries in palette - + rb 2 ;align ; Added at libpng-1.5.10 if PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED eq 1 num_palette_max dd ? ;int ;maximum palette index found in IDAT @@ -237,20 +238,23 @@ end if sig_bytes db ? ;byte ;magic bytes read/written from start of file maximum_pixel_depth db ? ;byte ;pixel depth used for the row buffers transformed_pixel_depth db ? ;byte ;pixel depth after read/write transforms -;#if PNG_ZLIB_VERNUM >= 0x1240 - zstream_start db ? ;byte ;at start of an input zlib stream -;end if /* Zlib >= 1.2.4 */ +;if PNG_ZLIB_VERNUM >= 0x1240 + ;zstream_start db 1 ;byte ;at start of an input zlib stream +;end if ;Zlib >= 1.2.4 if (PNG_READ_FILLER_SUPPORTED eq 1) | (PNG_WRITE_FILLER_SUPPORTED eq 1) - filler dw ? ;uint_16 ; filler bytes for pixel expansion + filler dw ? ;uint_16 ;filler bytes for pixel expansion end if if (PNG_bKGD_SUPPORTED eq 1) | (PNG_READ_BACKGROUND_SUPPORTED eq 1) | \ (PNG_READ_ALPHA_MODE_SUPPORTED eq 1) background_gamma_type db ? ;byte + rb 1 ;align background_gamma dd ? ;png_fixed_point background png_color_16 ;background color in screen gamma space + rb 1 ;align if PNG_READ_GAMMA_SUPPORTED eq 1 background_1 png_color_16 ;background normalized to gamma 1.0 + rb 1 ;align end if end if ;bKGD @@ -282,12 +286,14 @@ end if if (PNG_READ_SHIFT_SUPPORTED eq 1) | (PNG_WRITE_SHIFT_SUPPORTED eq 1) shift png_color_8 ;shift for significant bit tranformation + rb 2 ;align end if if (PNG_tRNS_SUPPORTED eq 1) | (PNG_READ_BACKGROUND_SUPPORTED eq 1) \ | (PNG_READ_EXPAND_SUPPORTED eq 1) | (PNG_READ_BACKGROUND_SUPPORTED eq 1) trans_alpha dd ? ;bytep ;alpha values for paletted files trans_color png_color_16 ;transparent color for non-paletted files + rb 3 ;align end if read_row_fn dd ? ;png_read_status_ptr ;called after each row is decoded @@ -325,6 +331,7 @@ end if ; To do: remove this from libpng-1.7 if PNG_TIME_RFC1123_SUPPORTED eq 1 time_buffer rb 29 ;char[29] ;String to hold RFC 1123 time text + rb 2 ;align end if ;end if @@ -355,6 +362,7 @@ if PNG_READ_RGB_TO_GRAY_SUPPORTED eq 1 rgb_to_gray_red_coeff dw ? ;uint_16 rgb_to_gray_green_coeff dw ? ;uint_16 ; deleted in 1.5.5: rgb_to_gray_blue_coeff; + rb 2 ;align end if if PNG_MNG_FEATURES_SUPPORTED eq 1 @@ -364,6 +372,7 @@ if PNG_MNG_FEATURES_SUPPORTED eq 1 ; New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 filter_type db ? ;byte + rb 3 ;align end if ; New members added in libpng-1.2.0 @@ -387,6 +396,7 @@ end if ; New members added in libpng-1.0.16 and 1.2.6 compression_type db ? ;byte + rb 3 ;align if PNG_USER_LIMITS_SUPPORTED eq 1 user_width_max dd ? ;uint_32 @@ -408,7 +418,8 @@ if PNG_READ_UNKNOWN_CHUNKS_SUPPORTED eq 1 ; Temporary storage for unknown chunk that the library doesn't recognize, ; used while reading the chunk. -; png_unknown_chunk unknown_chunk; + unknown_chunk png_unknown_chunk + rb 3 ;align end if ; New member added in libpng-1.2.26 @@ -431,9 +442,8 @@ end if ; New member added in libpng-1.5.6 big_prev_row dd ? ;bytep -; New member added in libpng-1.5.7 -; void (*read_filter[PNG_FILTER_VALUE_LAST-1])(png_row_infop row_info, -; bytep row, bytep prev_row); + ; New member added in libpng-1.5.7 + read_filter rd PNG_FILTER_VALUE_LAST-1 if PNG_READ_SUPPORTED eq 1 if (PNG_COLORSPACE_SUPPORTED eq 1) | (PNG_GAMMA_SUPPORTED eq 1) diff --git a/programs/develop/libraries/libs-dev/libimg/png/libpng/pngwrite.asm b/programs/develop/libraries/libs-dev/libimg/png/libpng/pngwrite.asm index 75dddd377e..1c846732ad 100644 --- a/programs/develop/libraries/libs-dev/libimg/png/libpng/pngwrite.asm +++ b/programs/develop/libraries/libs-dev/libimg/png/libpng/pngwrite.asm @@ -631,8 +631,8 @@ if PNG_USER_MEM_SUPPORTED eq 1 stdcall png_create_png_struct, [user_png_ver], [error_ptr], [error_fn], [warn_fn], 0, 0, 0 ;eax = png_ptr end if ;USER_MEM - cmp eax,0 - je .end0 ;if (..!=0) + test eax,eax + jz .end0 ;if (..!=0) ; Set the zlib control values to defaults; they can be overridden by the ; application after the struct has been created. @@ -1839,20 +1839,20 @@ proc png_image_write_init uses ebx ecx edx edi esi, image:dword stdcall png_create_write_struct, PNG_LIBPNG_VER_STRING, ebx, png_safe_error, png_safe_warning ;eax = png_ptr - cmp eax,0 - je .end0 ;if (..!=0) + test eax,eax + jz .end0 ;if (..!=0) mov edi,eax stdcall png_create_info_struct, edi ;eax = info_ptr - cmp eax,0 - je .end1 ;if (..!=0) + test eax,eax + jz .end1 ;if (..!=0) mov esi,eax stdcall png_malloc_warn, edi, sizeof.png_control ;control = eax - cmp eax,0 - je .end2 ;if (..!=0) + test eax,eax + jz .end2 ;if (..!=0) push eax mov edx,edi ; edx = png_ptr mov ecx,sizeof.png_control @@ -2745,8 +2745,8 @@ end if stdcall png_free, edi, ecx ; Skip the 'write_end' on error: - cmp eax,0 - je .end_f ;if (..==0) return 0 + test eax,eax + jz .end_f ;if (..==0) return 0 jmp .end8 ; Otherwise this is the case where the input is in a format currently @@ -2793,8 +2793,8 @@ png_debug 1, 'IDAT compress all' ;create buffer with filters stdcall png_zalloc, edi, 1, [len] - cmp eax,0 - je .end_f + test eax,eax + jz .end_f mov [buf_f],eax mov eax,ZLIB_IO_MAX @@ -2803,8 +2803,8 @@ png_debug 1, 'IDAT compress all' mov eax,[len] @@: stdcall png_zalloc, edi, 1, eax - cmp eax,0 - je .end0 + test eax,eax + jz .end0 mov [m1],eax ;init buffer with filters @@ -3100,8 +3100,8 @@ endl @@: stdcall png_image_write_init, ebx - cmp eax,0 - je .end3 ;if (..!=0) + test eax,eax + jz .end3 ;if (..!=0) mov ecx,sizeof.png_image_write_control mov edi,ebp sub edi,ecx diff --git a/programs/develop/libraries/libs-dev/libimg/png/libpng/pngwutil.asm b/programs/develop/libraries/libs-dev/libimg/png/libpng/pngwutil.asm index 2631944469..8e2b8fec03 100644 --- a/programs/develop/libraries/libs-dev/libimg/png/libpng/pngwutil.asm +++ b/programs/develop/libraries/libs-dev/libimg/png/libpng/pngwutil.asm @@ -82,14 +82,14 @@ locals buf rb 8 ;ebp-8 endl -;#if defined(PNG_DEBUG) && (PNG_DEBUG > 0) +if (PNG_DEBUG eq 1) & (PNG_DEBUG > 0) ; PNG_CSTRING_FROM_CHUNK(buf, chunk_name); ; png_debug2(0, "Writing %s chunk, length = %lu", buf, (unsigned long)length); -;end if +end if mov edi,[png_ptr] - cmp edi,0 - je .end_f ;if (png_ptr == NULL) return + test edi,edi + jz .end_f ;if (..==0) return if PNG_IO_STATE_SUPPORTED eq 1 ; Inform the I/O callback that the chunk header is being written. @@ -99,8 +99,7 @@ if PNG_IO_STATE_SUPPORTED eq 1 end if ; Write the length and the chunk name - mov ebx,ebp - sub ebx,8 + lea ebx,[ebp-8] stdcall png_save_uint_32, ebx, [length] m2m dword[ebx+4],dword[chunk_name] stdcall png_write_data, edi, ebx, 8 @@ -110,9 +109,7 @@ end if ; Reset the crc and run it over the chunk name stdcall png_reset_crc, edi - - mov ebx,ebp - sub ebx,4 ;buf + 4 + lea ebx,[ebp-4] ;buf + 4 stdcall png_calculate_crc, edi, ebx, 4 if PNG_IO_STATE_SUPPORTED eq 1 @@ -199,8 +196,8 @@ endp align 4 proc png_write_complete_chunk uses edi, png_ptr:dword, chunk_name:dword, p3data:dword, length:dword mov edi,[png_ptr] - cmp edi,0 - je .end_f ;if (..==0) return + test edi,edi + jz .end_f ;if (..==0) return ; On 64-bit architectures 'length' may not fit in a uint_32. cmp dword[length],PNG_UINT_31_MAX ;if(..>..) @@ -678,14 +675,14 @@ endl mov eax,[edx] mov [next],eax - cmp eax,0 - jne .end1 ;if (..==0) + test eax,eax + jnz .end1 ;if (..==0) PNG_COMPRESSION_BUFFER_SIZE edi stdcall png_malloc, edi, eax mov [next],eax - cmp eax,0 - jne @f ;if (..==0) + test eax,eax + jnz @f ;if (..==0) mov esi,Z_MEM_ERROR jmp .cycle0end @@: @@ -1180,6 +1177,7 @@ endp align 4 proc png_compress_IDAT uses eax ebx ecx edx, input:dword, input_len:dword, flush:dword png_debug 1, 'in png_compress_IDAT' + cmp dword[edi+png_struct.zowner],png_IDAT je .end0 ;if (..!=..) ; First time. Ensure we have a temporary buffer for compression and @@ -1232,7 +1230,7 @@ align 4 mov eax,ZLIB_IO_MAX cmp eax,[input_len] - jle @f ;if (..>..) + jbe @f ;if (..>..) mov eax,[input_len] ;safe because of the check @@: @@ -1451,8 +1449,8 @@ endl stdcall png_check_keyword, edi, [name], ebx mov [name_len],eax - cmp eax,0 - jne @f ;if (..==0) + test eax,eax + jnz @f ;if (..==0) png_error edi, 'iCCP: invalid keyword' @@: @@ -1955,8 +1953,8 @@ pushad stdcall png_check_keyword, edi, [key], ebx mov [key_len],eax - cmp eax,0 - jne @f ;if (..==0) + test eax,eax + jnz @f ;if (..==0) png_error edi, 'iTXt: invalid keyword' @@: @@ -2103,8 +2101,8 @@ pushad stdcall png_check_keyword, edi, [purpose], ebx mov [purpose_len],eax - cmp eax,0 - jne @f ;if(..==0) + test eax,eax + jnz @f ;if(..==0) png_error edi, 'pCAL: invalid keyword' @@: @@ -2460,8 +2458,6 @@ proc png_write_finish_row uses eax ecx edx edi, png_ptr:dword ; See if we are done mov eax,[edi+png_struct.row_number] -;png_debug1 2, ' row_number = %d', eax -;png_debug1 2, ' num_rows = %d', [edi+png_struct.num_rows] cmp eax,[edi+png_struct.num_rows] jl .end_f ;if (..<..) return @@ -3063,13 +3059,17 @@ locals endl pushad mov edi,[png_ptr] -if PNG_WRITE_FILTER_SUPPORTED eq 1 +if PNG_WRITE_FILTER_SUPPORTED eq 0 +mov eax,[edi+png_struct.row_number] +png_debug1 2, ' (3)= %d', eax mov eax,[edi+png_struct.rowbytes] inc eax stdcall png_write_filtered_row, edi, [edi+png_struct.row_buf], eax +mov eax,[edi+png_struct.row_number] +png_debug1 2, ' (4)= %d', eax else mov esi,[row_info] - mov eax,[edi+png_struct.do_filter] + movzx eax,byte[edi+png_struct.do_filter] mov [filter_to_do],eax mov eax,[esi+png_row_info.rowbytes] mov [row_bytes],eax @@ -3119,8 +3119,8 @@ else mov eax,[edi+png_struct.row_buf] mov [best_row],eax - cmp PNG_SIZE_MAX/128, dword[row_bytes] - jg @f ;if (..<=..) + cmp dword[row_bytes],PNG_SIZE_MAX/128 + jl @f ;if (..>=..) ; Overflow can occur in the calculation, just select the lowest set ; filter. @@ -3168,8 +3168,8 @@ else mov [mins],eax mov eax,[edi+png_struct.try_row] mov [best_row],eax - cmp eax,0 - je .end1 ;if (..!=0) + test eax,eax + jz .end1 ;if (..!=0) mov eax,[edi+png_struct.tst_row] mov [edi+png_struct.try_row],eax mov eax,[best_row] @@ -3194,8 +3194,8 @@ else mov [mins],eax mov eax,[edi+png_struct.try_row] mov [best_row],eax - cmp eax,0 - je .end2 ;if (..!=0) + test eax,eax + jz .end2 ;if (..!=0) mov eax,[edi+png_struct.tst_row] mov [edi+png_struct.try_row],eax mov eax,[best_row] @@ -3220,14 +3220,14 @@ else mov [mins],eax mov eax,[edi+png_struct.try_row] mov [best_row],eax - cmp eax,0 - je .end3 ;if (..!=0) + test eax,eax + jz .end3 ;if (..!=0) mov eax,[edi+png_struct.tst_row] mov [edi+png_struct.try_row],eax mov eax,[best_row] mov [edi+png_struct.tst_row],eax .end3: - +if 0 ;;; tmp ; Paeth filter mov eax,[filter_to_do] cmp eax,PNG_FILTER_PAETH @@ -3246,14 +3246,14 @@ else mov [mins],eax mov eax,[edi+png_struct.try_row] mov [best_row],eax - cmp eax,0 - je .end4 ;if (..!=0) + test eax,eax + jz .end4 ;if (..!=0) mov eax,[edi+png_struct.tst_row] mov [edi+png_struct.try_row],eax mov eax,[best_row] mov [edi+png_struct.tst_row],eax .end4: - +end if ; Do the actual writing of the filtered row data from the chosen filter. mov eax,[esi+png_row_info.rowbytes] inc eax @@ -3281,8 +3281,8 @@ proc png_write_filtered_row uses eax ebx edi, png_ptr:dword, filtered_row:dword, if PNG_WRITE_FILTER_SUPPORTED eq 1 ; Swap the current and previous rows mov eax,[edi+png_struct.prev_row] - cmp eax,0 - je @f ;if (..!=0) + test eax,eax + jz @f ;if (..!=0) ;eax = tptr mov ebx,[edi+png_struct.row_buf] mov [edi+png_struct.prev_row],ebx diff --git a/programs/fs/kfar/trunk/zlib/crc32.asm b/programs/fs/kfar/trunk/zlib/crc32.asm index da68d15a47..2a8459756d 100644 --- a/programs/fs/kfar/trunk/zlib/crc32.asm +++ b/programs/fs/kfar/trunk/zlib/crc32.asm @@ -17,14 +17,10 @@ ; Definitions for doing the crc four data bytes at a time. -TBLS equ 1 - if DYNAMIC_CRC_TABLE eq 1 align 4 crc_table_empty dd 1 -;align 4 -;crc_table rd TBLS*256 ; Generate tables for a byte-wise 32-bit CRC calculation on the polynomial: ; x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. @@ -100,15 +96,12 @@ end if endp ; ========================================================================= -;unsigned long (crc, buf, len) -; unsigned long crc -; unsigned char *buf -; uInt len +;unsigned long (unsigned long crc, unsigned char *buf, uInt len) align 4 proc calc_crc32 uses ecx esi, p1crc:dword, buf:dword, len:dword xor eax,eax mov esi,[buf] -zlib_debug 'calc_crc32 buf = %d',esi + cmp esi,Z_NULL je .end_f ;if (..==0) return 0 @@ -121,7 +114,9 @@ end if mov eax,[p1crc] mov ecx,[len] + push edx call crc + pop edx .end_f: ret endp @@ -129,9 +124,7 @@ endp GF2_DIM equ 32 ;dimension of GF(2) vectors (length of CRC) ; ========================================================================= -;unsigned long (mat, vec) -; unsigned long *mat -; unsigned long vec +;unsigned long (unsigned long *mat, unsigned long vec) align 4 proc gf2_matrix_times, mat:dword, vec:dword ; unsigned long sum; @@ -148,9 +141,7 @@ proc gf2_matrix_times, mat:dword, vec:dword endp ; ========================================================================= -;local void (square, mat) -; unsigned long *square -; unsigned long *mat +;local void (unsigned long *square, unsigned long *mat) align 4 proc gf2_matrix_square, square:dword, mat:dword ; int n; @@ -161,10 +152,7 @@ proc gf2_matrix_square, square:dword, mat:dword endp ; ========================================================================= -;uLong (crc1, crc2, len2) -; uLong crc1 -; uLong crc2 -; z_off64_t len2 +;uLong (uLong crc1, uLong crc2, z_off64_t len2) align 4 proc crc32_combine_, crc1:dword, crc2:dword, len2:dword ; int n; @@ -219,20 +207,14 @@ proc crc32_combine_, crc1:dword, crc2:dword, len2:dword endp ; ========================================================================= -;uLong (crc1, crc2, len2) -; uLong crc1 -; uLong crc2 -; z_off_t len2 +;uLong (uLong crc1, uLong crc2, z_off_t len2) align 4 proc crc32_combine, crc1:dword, crc2:dword, len2:dword stdcall crc32_combine_, [crc1], [crc2], [len2] ret endp -;uLong (crc1, crc2, len2) -; uLong crc1 -; uLong crc2 -; z_off64_t len2 +;uLong (uLong crc1, uLong crc2, z_off64_t len2) align 4 proc crc32_combine64, crc1:dword, crc2:dword, len2:dword stdcall crc32_combine_, [crc1], [crc2], [len2]