crc_lcc.asm
上传用户:andy_li
上传日期:2007-01-06
资源大小:1019k
文件大小:2k
源码类别:

压缩解压

开发平台:

MultiPlatform

  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