home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 9 Archive / 09-Archive.zip / unzip540.zip / win32 / crc_lcc.asm < prev    next >
Assembly Source File  |  1998-07-03  |  2KB  |  109 lines

  1. ; crc_lcc.asm, optimized CRC calculation function for Zip and UnZip, not
  2. ; copyrighted by Paul Kienitz and Christian Spieler.  Last revised 25 Mar 98.
  3. ;
  4. ; The code in this file has been copied verbatim from crc_i386.{asm|S};
  5. ; only the assembler syntax and metacommands have been adapted to
  6. ; the habits of the free LCC-Win32 C compiler package.
  7. ; This version of the code uses the "optimized for i686" variant of
  8. ; crc_i386.{asm|S}.
  9. ;
  10. ; For more information (and a revision log), look into the original
  11. ; source files.
  12. ;
  13.     .text
  14.     .file "crc32.c"
  15.     .text
  16.     .type    _crc32,function
  17. _crc32:
  18.     pushl    %ebp
  19.     movl    %esp,%ebp
  20.     pushl    %ecx
  21.     pushl    %ebx
  22.     pushl    %esi
  23.     pushl    %edi
  24.     .line    34
  25.     .line    37
  26.     movl    12(%ebp),%esi
  27.     subl    %eax,%eax
  28.     testl    %esi,%esi
  29.     jz    _$3
  30.     .line    39
  31.     call    _get_crc_table
  32.     movl    %eax,%edi
  33.     .line    41
  34.     movl    8(%ebp),%eax
  35.     movl    16(%ebp),%ecx
  36.     notl    %eax
  37.     testl    %ecx,%ecx
  38.     jz    _$4
  39. _$5:
  40.     testl    $3,%esi
  41.     jz    _$6
  42.     xorb    (%esi),%al
  43.     incl    %esi
  44.     movzbl    %al,%ebx
  45.     shrl    $8,%eax
  46.     xorl    (%edi,%ebx,4),%eax
  47.     decl    %ecx
  48.     jnz    _$5
  49. _$6:
  50.     movl    %ecx,%edx
  51.     andl    $7,%edx
  52.     shrl    $3,%ecx
  53.     jz    _$8
  54. _$7:
  55.     xorl    (%esi),%eax
  56.     addl    $4,%esi
  57.     movzbl    %al,%ebx
  58.     shrl    $8,%eax
  59.     xorl    (%edi,%ebx,4),%eax
  60.     movzbl    %al,%ebx
  61.     shrl    $8,%eax
  62.     xorl    (%edi,%ebx,4),%eax
  63.     movzbl    %al,%ebx
  64.     shrl    $8,%eax
  65.     xorl    (%edi,%ebx,4),%eax
  66.     movzbl    %al,%ebx
  67.     shrl    $8,%eax
  68.     xorl    (%edi,%ebx,4),%eax
  69.     xorl    (%esi),%eax
  70.     addl    $4,%esi
  71.     movzbl    %al,%ebx
  72.     shrl    $8,%eax
  73.     xorl    (%edi,%ebx,4),%eax
  74.     movzbl    %al,%ebx
  75.     shrl    $8,%eax
  76.     xorl    (%edi,%ebx,4),%eax
  77.     movzbl    %al,%ebx
  78.     shrl    $8,%eax
  79.     xorl    (%edi,%ebx,4),%eax
  80.     movzbl    %al,%ebx
  81.     shrl    $8,%eax
  82.     xorl    (%edi,%ebx,4),%eax
  83.     decl    %ecx
  84.     jnz    _$7
  85. _$8:
  86.     movl    %edx,%ecx
  87.     jecxz    _$4
  88. _$9:
  89.     xorb    (%esi),%al
  90.     incl    %esi
  91.     movzbl    %al,%ebx
  92.     shrl    $8,%eax
  93.     xorl    (%edi,%ebx,4),%eax
  94.     decl    %ecx
  95.     jnz    _$9
  96. _$4:
  97.     xorl    $0xffffffff,%eax
  98. _$3:
  99.     .line    52
  100.     popl    %edi
  101.     popl    %esi
  102.     popl    %ebx
  103.     leave
  104.     ret
  105. _$34:
  106.     .size    _crc32,_$34-_crc32
  107.     .globl    _crc32
  108.     .extern    _get_crc_table
  109.