inffas32.lst 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224
  1. Microsoft (R) Macro Assembler Version 8.00.50727.104 01/29/13 15:28:20
  2. inffas32.asm Page 1 - 1
  3. ;/* inffas32.asm is a hand tuned assembler version of inffast.c -- fast decoding
  4. ; *
  5. ; * inffas32.asm is derivated from inffas86.c, with translation of assembly code
  6. ; *
  7. ; * Copyright (C) 1995-2003 Mark Adler
  8. ; * For conditions of distribution and use, see copyright notice in zlib.h
  9. ; *
  10. ; * Copyright (C) 2003 Chris Anderson <[email protected]>
  11. ; * Please use the copyright conditions above.
  12. ; *
  13. ; * Mar-13-2003 -- Most of this is derived from inffast.S which is derived from
  14. ; * the gcc -S output of zlib-1.2.0/inffast.c. Zlib-1.2.0 is in beta release at
  15. ; * the moment. I have successfully compiled and tested this code with gcc2.96,
  16. ; * gcc3.2, icc5.0, msvc6.0. It is very close to the speed of inffast.S
  17. ; * compiled with gcc -DNO_MMX, but inffast.S is still faster on the P3 with MMX
  18. ; * enabled. I will attempt to merge the MMX code into this version. Newer
  19. ; * versions of this and inffast.S can be found at
  20. ; * http://www.eetbeetee.com/zlib/ and http://www.charm.net/~christop/zlib/
  21. ; *
  22. ; * 2005 : modification by Gilles Vollant
  23. ; */
  24. ; For Visual C++ 4.x and higher and ML 6.x and higher
  25. ; ml.exe is in directory \MASM611C of Win95 DDK
  26. ; ml.exe is also distributed in http://www.masm32.com/masmdl.htm
  27. ; and in VC++2003 toolkit at http://msdn.microsoft.com/visualc/vctoolkit2003/
  28. ;
  29. ;
  30. ; compile with command line option
  31. ; ml /coff /Zi /c /Flinffas32.lst inffas32.asm
  32. ; if you define NO_GZIP (see inflate.h), compile with
  33. ; ml /coff /Zi /c /Flinffas32.lst /DNO_GUNZIP inffas32.asm
  34. ; zlib122sup is 0 fort zlib 1.2.2.1 and lower
  35. ; zlib122sup is 8 fort zlib 1.2.2.2 and more (with addition of dmax and head
  36. ; in inflate_state in inflate.h)
  37. = 00000008 zlib1222sup equ 8
  38. IFDEF GUNZIP
  39. ELSE
  40. IFNDEF NO_GUNZIP
  41. = 0000000B INFLATE_MODE_TYPE equ 11
  42. = 0000001A INFLATE_MODE_BAD equ 26
  43. ELSE
  44. ENDIF
  45. ENDIF
  46. ; 75 "inffast.S"
  47. ;FILE "inffast.S"
  48. ;;;GLOBAL _inflate_fast
  49. ;;;SECTION .text
  50. .586p
  51. .mmx
  52. name inflate_fast_x86
  53. .MODEL FLAT
  54. 00000000 _DATA segment
  55. 00000000 inflate_fast_use_mmx:
  56. 00000000 00000001 dd 1
  57. 00000000 _TEXT segment
  58. ALIGN 4
  59. 00000000 46 61 73 74 20 db 'Fast decoding Code from Chris Anderson'
  60. 64 65 63 6F 64
  61. 69 6E 67 20 43
  62. 6F 64 65 20 66
  63. 72 6F 6D 20 43
  64. 68 72 69 73 20
  65. 41 6E 64 65 72
  66. 73 6F 6E
  67. 00000026 00 db 0
  68. ALIGN 4
  69. 00000028 invalid_literal_length_code_msg:
  70. 00000028 69 6E 76 61 6C db 'invalid literal/length code'
  71. 69 64 20 6C 69
  72. 74 65 72 61 6C
  73. 2F 6C 65 6E 67
  74. 74 68 20 63 6F
  75. 64 65
  76. 00000043 00 db 0
  77. ALIGN 4
  78. 00000044 invalid_distance_code_msg:
  79. 00000044 69 6E 76 61 6C db 'invalid distance code'
  80. 69 64 20 64 69
  81. 73 74 61 6E 63
  82. 65 20 63 6F 64
  83. 65
  84. 00000059 00 db 0
  85. ALIGN 4
  86. 0000005C invalid_distance_too_far_msg:
  87. 0000005C 69 6E 76 61 6C db 'invalid distance too far back'
  88. 69 64 20 64 69
  89. 73 74 61 6E 63
  90. 65 20 74 6F 6F
  91. 20 66 61 72 20
  92. 62 61 63 6B
  93. 00000079 00 db 0
  94. ALIGN 4
  95. 0000007C inflate_fast_mask:
  96. 0000007C 00000000 dd 0
  97. 00000080 00000001 dd 1
  98. 00000084 00000003 dd 3
  99. 00000088 00000007 dd 7
  100. 0000008C 0000000F dd 15
  101. 00000090 0000001F dd 31
  102. 00000094 0000003F dd 63
  103. 00000098 0000007F dd 127
  104. 0000009C 000000FF dd 255
  105. 000000A0 000001FF dd 511
  106. 000000A4 000003FF dd 1023
  107. 000000A8 000007FF dd 2047
  108. 000000AC 00000FFF dd 4095
  109. 000000B0 00001FFF dd 8191
  110. 000000B4 00003FFF dd 16383
  111. 000000B8 00007FFF dd 32767
  112. 000000BC 0000FFFF dd 65535
  113. 000000C0 0001FFFF dd 131071
  114. 000000C4 0003FFFF dd 262143
  115. 000000C8 0007FFFF dd 524287
  116. 000000CC 000FFFFF dd 1048575
  117. 000000D0 001FFFFF dd 2097151
  118. 000000D4 003FFFFF dd 4194303
  119. 000000D8 007FFFFF dd 8388607
  120. 000000DC 00FFFFFF dd 16777215
  121. 000000E0 01FFFFFF dd 33554431
  122. 000000E4 03FFFFFF dd 67108863
  123. 000000E8 07FFFFFF dd 134217727
  124. 000000EC 0FFFFFFF dd 268435455
  125. 000000F0 1FFFFFFF dd 536870911
  126. 000000F4 3FFFFFFF dd 1073741823
  127. 000000F8 7FFFFFFF dd 2147483647
  128. 000000FC FFFFFFFF dd 4294967295
  129. = 00000000 mode_state equ 0 ;/* state->mode */
  130. = 00000028 wsize_state equ (32+zlib1222sup) ;/* state->wsize */
  131. = 00000030 write_state equ (36+4+zlib1222sup) ;/* state->write */
  132. = 00000034 window_state equ (40+4+zlib1222sup) ;/* state->window */
  133. = 00000038 hold_state equ (44+4+zlib1222sup) ;/* state->hold */
  134. = 0000003C bits_state equ (48+4+zlib1222sup) ;/* state->bits */
  135. = 0000004C lencode_state equ (64+4+zlib1222sup) ;/* state->lencode */
  136. = 00000050 distcode_state equ (68+4+zlib1222sup) ;/* state->distcode */
  137. = 00000054 lenbits_state equ (72+4+zlib1222sup) ;/* state->lenbits */
  138. = 00000058 distbits_state equ (76+4+zlib1222sup) ;/* state->distbits */
  139. ;;SECTION .text
  140. ; 205 "inffast.S"
  141. ;GLOBAL inflate_fast_use_mmx
  142. ;SECTION .data
  143. ; GLOBAL inflate_fast_use_mmx:object
  144. ;.size inflate_fast_use_mmx, 4
  145. ; 226 "inffast.S"
  146. ;SECTION .text
  147. ALIGN 4
  148. 00000100 _inflate_fast proc near
  149. 00000100 .FPO (16, 4, 0, 0, 1, 0)
  150. 00000100 57 push edi
  151. 00000101 56 push esi
  152. 00000102 55 push ebp
  153. 00000103 53 push ebx
  154. 00000104 9C pushfd
  155. 00000105 83 EC 40 sub esp,64
  156. 00000108 FC cld
  157. 00000109 8B 74 24 58 mov esi, [esp+88]
  158. 0000010D 8B 7E 1C mov edi, [esi+28]
  159. 00000110 8B 56 04 mov edx, [esi+4]
  160. 00000113 8B 06 mov eax, [esi+0]
  161. 00000115 03 D0 add edx,eax
  162. 00000117 83 EA 0B sub edx,11
  163. 0000011A 89 44 24 2C mov [esp+44],eax
  164. 0000011E 89 54 24 14 mov [esp+20],edx
  165. 00000122 8B 6C 24 5C mov ebp, [esp+92]
  166. 00000126 8B 4E 10 mov ecx, [esi+16]
  167. 00000129 8B 5E 0C mov ebx, [esi+12]
  168. 0000012C 2B E9 sub ebp,ecx
  169. 0000012E F7 DD neg ebp
  170. 00000130 03 EB add ebp,ebx
  171. 00000132 81 E9 00000101 sub ecx,257
  172. 00000138 03 CB add ecx,ebx
  173. 0000013A 89 5C 24 3C mov [esp+60],ebx
  174. 0000013E 89 6C 24 28 mov [esp+40],ebp
  175. 00000142 89 4C 24 10 mov [esp+16],ecx
  176. ; 285 "inffast.S"
  177. 00000146 8B 47 4C mov eax, [edi+lencode_state]
  178. 00000149 8B 4F 50 mov ecx, [edi+distcode_state]
  179. 0000014C 89 44 24 08 mov [esp+8],eax
  180. 00000150 89 4C 24 0C mov [esp+12],ecx
  181. 00000154 B8 00000001 mov eax,1
  182. 00000159 8B 4F 54 mov ecx, [edi+lenbits_state]
  183. 0000015C D3 E0 shl eax,cl
  184. 0000015E 48 dec eax
  185. 0000015F 89 04 24 mov [esp+0],eax
  186. 00000162 B8 00000001 mov eax,1
  187. 00000167 8B 4F 58 mov ecx, [edi+distbits_state]
  188. 0000016A D3 E0 shl eax,cl
  189. 0000016C 48 dec eax
  190. 0000016D 89 44 24 04 mov [esp+4],eax
  191. 00000171 8B 47 28 mov eax, [edi+wsize_state]
  192. 00000174 8B 4F 30 mov ecx, [edi+write_state]
  193. 00000177 8B 57 34 mov edx, [edi+window_state]
  194. 0000017A 89 44 24 34 mov [esp+52],eax
  195. 0000017E 89 4C 24 30 mov [esp+48],ecx
  196. 00000182 89 54 24 38 mov [esp+56],edx
  197. 00000186 8B 6F 38 mov ebp, [edi+hold_state]
  198. 00000189 8B 5F 3C mov ebx, [edi+bits_state]
  199. ; 321 "inffast.S"
  200. 0000018C 8B 74 24 2C mov esi, [esp+44]
  201. 00000190 8B 4C 24 14 mov ecx, [esp+20]
  202. 00000194 3B CE cmp ecx,esi
  203. 00000196 77 22 ja L_align_long
  204. 00000198 83 C1 0B add ecx,11
  205. 0000019B 2B CE sub ecx,esi
  206. 0000019D B8 0000000C mov eax,12
  207. 000001A2 2B C1 sub eax,ecx
  208. 000001A4 8D 7C 24 1C lea edi, [esp+28]
  209. 000001A8 F3/ A4 rep movsb
  210. 000001AA 8B C8 mov ecx,eax
  211. 000001AC 33 C0 xor eax,eax
  212. 000001AE F3/ AA rep stosb
  213. 000001B0 8D 74 24 1C lea esi, [esp+28]
  214. 000001B4 89 74 24 14 mov [esp+20],esi
  215. 000001B8 EB 18 jmp L_is_aligned
  216. 000001BA L_align_long:
  217. 000001BA F7 C6 00000003 test esi,3
  218. 000001C0 74 10 jz L_is_aligned
  219. 000001C2 33 C0 xor eax,eax
  220. 000001C4 8A 06 mov al, [esi]
  221. 000001C6 46 inc esi
  222. 000001C7 8B CB mov ecx,ebx
  223. 000001C9 83 C3 08 add ebx,8
  224. 000001CC D3 E0 shl eax,cl
  225. 000001CE 0B E8 or ebp,eax
  226. 000001D0 EB E8 jmp L_align_long
  227. 000001D2 L_is_aligned:
  228. 000001D2 8B 7C 24 3C mov edi, [esp+60]
  229. ; 366 "inffast.S"
  230. 000001D6 L_check_mmx:
  231. 000001D6 83 3D 00000000 R cmp dword ptr [inflate_fast_use_mmx],2
  232. 02
  233. 000001DD 0F 84 00000289 je L_init_mmx
  234. 000001E3 77 6B ja L_do_loop
  235. 000001E5 50 push eax
  236. 000001E6 53 push ebx
  237. 000001E7 51 push ecx
  238. 000001E8 52 push edx
  239. 000001E9 9C pushfd
  240. 000001EA 8B 04 24 mov eax, [esp]
  241. 000001ED 81 34 24 xor dword ptr [esp],0200000h
  242. 00200000
  243. 000001F4 9D popfd
  244. 000001F5 9C pushfd
  245. 000001F6 5A pop edx
  246. 000001F7 33 D0 xor edx,eax
  247. 000001F9 74 44 jz L_dont_use_mmx
  248. 000001FB 33 C0 xor eax,eax
  249. 000001FD 0F A2 cpuid
  250. 000001FF 81 FB 756E6547 cmp ebx,0756e6547h
  251. 00000205 75 38 jne L_dont_use_mmx
  252. 00000207 81 F9 6C65746E cmp ecx,06c65746eh
  253. 0000020D 75 30 jne L_dont_use_mmx
  254. 0000020F 81 FA 49656E69 cmp edx,049656e69h
  255. 00000215 75 28 jne L_dont_use_mmx
  256. 00000217 B8 00000001 mov eax,1
  257. 0000021C 0F A2 cpuid
  258. 0000021E C1 E8 08 shr eax,8
  259. 00000221 83 E0 0F and eax,15
  260. 00000224 83 F8 06 cmp eax,6
  261. 00000227 75 16 jne L_dont_use_mmx
  262. 00000229 F7 C2 00800000 test edx,0800000h
  263. 0000022F 75 02 jnz L_use_mmx
  264. 00000231 EB 0C jmp L_dont_use_mmx
  265. 00000233 L_use_mmx:
  266. 00000233 C7 05 00000000 R mov dword ptr [inflate_fast_use_mmx],2
  267. 00000002
  268. 0000023D EB 0A jmp L_check_mmx_pop
  269. 0000023F L_dont_use_mmx:
  270. 0000023F C7 05 00000000 R mov dword ptr [inflate_fast_use_mmx],3
  271. 00000003
  272. 00000249 L_check_mmx_pop:
  273. 00000249 5A pop edx
  274. 0000024A 59 pop ecx
  275. 0000024B 5B pop ebx
  276. 0000024C 58 pop eax
  277. 0000024D EB 87 jmp L_check_mmx
  278. ; 426 "inffast.S"
  279. ALIGN 4
  280. 00000250 L_do_loop:
  281. ; 437 "inffast.S"
  282. 00000250 80 FB 0F cmp bl,15
  283. 00000253 77 0D ja L_get_length_code
  284. 00000255 33 C0 xor eax,eax
  285. 00000257 66| AD lodsw
  286. 00000259 8A CB mov cl,bl
  287. 0000025B 80 C3 10 add bl,16
  288. 0000025E D3 E0 shl eax,cl
  289. 00000260 0B E8 or ebp,eax
  290. 00000262 L_get_length_code:
  291. 00000262 8B 14 24 mov edx, [esp+0]
  292. 00000265 8B 4C 24 08 mov ecx, [esp+8]
  293. 00000269 23 D5 and edx,ebp
  294. 0000026B 8B 04 91 mov eax, [ecx+edx*4]
  295. 0000026E L_dolen:
  296. 0000026E 8A CC mov cl,ah
  297. 00000270 2A DC sub bl,ah
  298. 00000272 D3 ED shr ebp,cl
  299. 00000274 84 C0 test al,al
  300. 00000276 75 19 jnz L_test_for_length_base
  301. 00000278 C1 E8 10 shr eax,16
  302. 0000027B AA stosb
  303. 0000027C L_while_test:
  304. 0000027C 39 7C 24 10 cmp [esp+16],edi
  305. 00000280 0F 86 00000462 jbe L_break_loop
  306. 00000286 39 74 24 14 cmp [esp+20],esi
  307. 0000028A 77 C4 ja L_do_loop
  308. 0000028C E9 00000457 jmp L_break_loop
  309. 00000291 L_test_for_length_base:
  310. ; 502 "inffast.S"
  311. 00000291 8B D0 mov edx,eax
  312. 00000293 C1 EA 10 shr edx,16
  313. 00000296 8A C8 mov cl,al
  314. 00000298 A8 10 test al,16
  315. 0000029A 0F 84 000000F4 jz L_test_for_second_level_length
  316. 000002A0 80 E1 0F and cl,15
  317. 000002A3 74 25 jz L_save_len
  318. 000002A5 3A D9 cmp bl,cl
  319. 000002A7 73 11 jae L_add_bits_to_len
  320. 000002A9 8A E9 mov ch,cl
  321. 000002AB 33 C0 xor eax,eax
  322. 000002AD 66| AD lodsw
  323. 000002AF 8A CB mov cl,bl
  324. 000002B1 80 C3 10 add bl,16
  325. 000002B4 D3 E0 shl eax,cl
  326. 000002B6 0B E8 or ebp,eax
  327. 000002B8 8A CD mov cl,ch
  328. 000002BA L_add_bits_to_len:
  329. 000002BA B8 00000001 mov eax,1
  330. 000002BF D3 E0 shl eax,cl
  331. 000002C1 48 dec eax
  332. 000002C2 2A D9 sub bl,cl
  333. 000002C4 23 C5 and eax,ebp
  334. 000002C6 D3 ED shr ebp,cl
  335. 000002C8 03 D0 add edx,eax
  336. 000002CA L_save_len:
  337. 000002CA 89 54 24 18 mov [esp+24],edx
  338. 000002CE L_decode_distance:
  339. ; 549 "inffast.S"
  340. 000002CE 80 FB 0F cmp bl,15
  341. 000002D1 77 0D ja L_get_distance_code
  342. 000002D3 33 C0 xor eax,eax
  343. 000002D5 66| AD lodsw
  344. 000002D7 8A CB mov cl,bl
  345. 000002D9 80 C3 10 add bl,16
  346. 000002DC D3 E0 shl eax,cl
  347. 000002DE 0B E8 or ebp,eax
  348. 000002E0 L_get_distance_code:
  349. 000002E0 8B 54 24 04 mov edx, [esp+4]
  350. 000002E4 8B 4C 24 0C mov ecx, [esp+12]
  351. 000002E8 23 D5 and edx,ebp
  352. 000002EA 8B 04 91 mov eax, [ecx+edx*4]
  353. 000002ED L_dodist:
  354. 000002ED 8B D0 mov edx,eax
  355. 000002EF C1 EA 10 shr edx,16
  356. 000002F2 8A CC mov cl,ah
  357. 000002F4 2A DC sub bl,ah
  358. 000002F6 D3 ED shr ebp,cl
  359. ; 584 "inffast.S"
  360. 000002F8 8A C8 mov cl,al
  361. 000002FA A8 10 test al,16
  362. 000002FC 0F 84 000000B2 jz L_test_for_second_level_dist
  363. 00000302 80 E1 0F and cl,15
  364. 00000305 74 65 jz L_check_dist_one
  365. 00000307 3A D9 cmp bl,cl
  366. 00000309 73 11 jae L_add_bits_to_dist
  367. 0000030B 8A E9 mov ch,cl
  368. 0000030D 33 C0 xor eax,eax
  369. 0000030F 66| AD lodsw
  370. 00000311 8A CB mov cl,bl
  371. 00000313 80 C3 10 add bl,16
  372. 00000316 D3 E0 shl eax,cl
  373. 00000318 0B E8 or ebp,eax
  374. 0000031A 8A CD mov cl,ch
  375. 0000031C L_add_bits_to_dist:
  376. 0000031C B8 00000001 mov eax,1
  377. 00000321 D3 E0 shl eax,cl
  378. 00000323 48 dec eax
  379. 00000324 2A D9 sub bl,cl
  380. 00000326 23 C5 and eax,ebp
  381. 00000328 D3 ED shr ebp,cl
  382. 0000032A 03 D0 add edx,eax
  383. 0000032C EB 00 jmp L_check_window
  384. 0000032E L_check_window:
  385. ; 625 "inffast.S"
  386. 0000032E 89 74 24 2C mov [esp+44],esi
  387. 00000332 8B C7 mov eax,edi
  388. 00000334 2B 44 24 28 sub eax, [esp+40]
  389. 00000338 3B C2 cmp eax,edx
  390. 0000033A 0F 82 00000094 jb L_clip_window
  391. 00000340 8B 4C 24 18 mov ecx, [esp+24]
  392. 00000344 8B F7 mov esi,edi
  393. 00000346 2B F2 sub esi,edx
  394. 00000348 83 E9 03 sub ecx,3
  395. 0000034B 8A 06 mov al, [esi]
  396. 0000034D 88 07 mov [edi],al
  397. 0000034F 8A 46 01 mov al, [esi+1]
  398. 00000352 8A 56 02 mov dl, [esi+2]
  399. 00000355 83 C6 03 add esi,3
  400. 00000358 88 47 01 mov [edi+1],al
  401. 0000035B 88 57 02 mov [edi+2],dl
  402. 0000035E 83 C7 03 add edi,3
  403. 00000361 F3/ A4 rep movsb
  404. 00000363 8B 74 24 2C mov esi, [esp+44]
  405. 00000367 E9 FFFFFF10 jmp L_while_test
  406. ALIGN 4
  407. 0000036C L_check_dist_one:
  408. 0000036C 83 FA 01 cmp edx,1
  409. 0000036F 75 BD jne L_check_window
  410. 00000371 39 7C 24 28 cmp [esp+40],edi
  411. 00000375 74 B7 je L_check_window
  412. 00000377 4F dec edi
  413. 00000378 8B 4C 24 18 mov ecx, [esp+24]
  414. 0000037C 8A 07 mov al, [edi]
  415. 0000037E 83 E9 03 sub ecx,3
  416. 00000381 88 47 01 mov [edi+1],al
  417. 00000384 88 47 02 mov [edi+2],al
  418. 00000387 88 47 03 mov [edi+3],al
  419. 0000038A 83 C7 04 add edi,4
  420. 0000038D F3/ AA rep stosb
  421. 0000038F E9 FFFFFEE8 jmp L_while_test
  422. ALIGN 4
  423. 00000394 L_test_for_second_level_length:
  424. 00000394 A8 40 test al,64
  425. 00000396 0F 85 0000030E jnz L_test_for_end_of_block
  426. 0000039C B8 00000001 mov eax,1
  427. 000003A1 D3 E0 shl eax,cl
  428. 000003A3 48 dec eax
  429. 000003A4 23 C5 and eax,ebp
  430. 000003A6 03 C2 add eax,edx
  431. 000003A8 8B 54 24 08 mov edx, [esp+8]
  432. 000003AC 8B 04 82 mov eax, [edx+eax*4]
  433. 000003AF E9 FFFFFEBA jmp L_dolen
  434. ALIGN 4
  435. 000003B4 L_test_for_second_level_dist:
  436. 000003B4 A8 40 test al,64
  437. 000003B6 0F 85 000002E2 jnz L_invalid_distance_code
  438. 000003BC B8 00000001 mov eax,1
  439. 000003C1 D3 E0 shl eax,cl
  440. 000003C3 48 dec eax
  441. 000003C4 23 C5 and eax,ebp
  442. 000003C6 03 C2 add eax,edx
  443. 000003C8 8B 54 24 0C mov edx, [esp+12]
  444. 000003CC 8B 04 82 mov eax, [edx+eax*4]
  445. 000003CF E9 FFFFFF19 jmp L_dodist
  446. ALIGN 4
  447. 000003D4 L_clip_window:
  448. ; 721 "inffast.S"
  449. 000003D4 8B C8 mov ecx,eax
  450. 000003D6 8B 44 24 34 mov eax, [esp+52]
  451. 000003DA F7 D9 neg ecx
  452. 000003DC 8B 74 24 38 mov esi, [esp+56]
  453. 000003E0 3B C2 cmp eax,edx
  454. 000003E2 0F 82 000002DE jb L_invalid_distance_too_far
  455. 000003E8 03 CA add ecx,edx
  456. 000003EA 83 7C 24 30 00 cmp dword ptr [esp+48],0
  457. 000003EF 75 24 jne L_wrap_around_window
  458. 000003F1 2B C1 sub eax,ecx
  459. 000003F3 03 F0 add esi,eax
  460. ; 749 "inffast.S"
  461. 000003F5 8B 44 24 18 mov eax, [esp+24]
  462. 000003F9 3B C1 cmp eax,ecx
  463. 000003FB 76 60 jbe L_do_copy1
  464. 000003FD 2B C1 sub eax,ecx
  465. 000003FF F3/ A4 rep movsb
  466. 00000401 8B F7 mov esi,edi
  467. 00000403 2B F2 sub esi,edx
  468. 00000405 EB 56 jmp L_do_copy1
  469. 00000407 3B C1 cmp eax,ecx
  470. 00000409 76 52 jbe L_do_copy1
  471. 0000040B 2B C1 sub eax,ecx
  472. 0000040D F3/ A4 rep movsb
  473. 0000040F 8B F7 mov esi,edi
  474. 00000411 2B F2 sub esi,edx
  475. 00000413 EB 48 jmp L_do_copy1
  476. 00000415 L_wrap_around_window:
  477. ; 793 "inffast.S"
  478. 00000415 8B 44 24 30 mov eax, [esp+48]
  479. 00000419 3B C8 cmp ecx,eax
  480. 0000041B 76 2C jbe L_contiguous_in_window
  481. 0000041D 03 74 24 34 add esi, [esp+52]
  482. 00000421 03 F0 add esi,eax
  483. 00000423 2B F1 sub esi,ecx
  484. 00000425 2B C8 sub ecx,eax
  485. 00000427 8B 44 24 18 mov eax, [esp+24]
  486. 0000042B 3B C1 cmp eax,ecx
  487. 0000042D 76 2E jbe L_do_copy1
  488. 0000042F 2B C1 sub eax,ecx
  489. 00000431 F3/ A4 rep movsb
  490. 00000433 8B 74 24 38 mov esi, [esp+56]
  491. 00000437 8B 4C 24 30 mov ecx, [esp+48]
  492. 0000043B 3B C1 cmp eax,ecx
  493. 0000043D 76 1E jbe L_do_copy1
  494. 0000043F 2B C1 sub eax,ecx
  495. 00000441 F3/ A4 rep movsb
  496. 00000443 8B F7 mov esi,edi
  497. 00000445 2B F2 sub esi,edx
  498. 00000447 EB 14 jmp L_do_copy1
  499. 00000449 L_contiguous_in_window:
  500. ; 836 "inffast.S"
  501. 00000449 03 F0 add esi,eax
  502. 0000044B 2B F1 sub esi,ecx
  503. 0000044D 8B 44 24 18 mov eax, [esp+24]
  504. 00000451 3B C1 cmp eax,ecx
  505. 00000453 76 08 jbe L_do_copy1
  506. 00000455 2B C1 sub eax,ecx
  507. 00000457 F3/ A4 rep movsb
  508. 00000459 8B F7 mov esi,edi
  509. 0000045B 2B F2 sub esi,edx
  510. 0000045D L_do_copy1:
  511. ; 862 "inffast.S"
  512. 0000045D 8B C8 mov ecx,eax
  513. 0000045F F3/ A4 rep movsb
  514. 00000461 8B 74 24 2C mov esi, [esp+44]
  515. 00000465 E9 FFFFFE12 jmp L_while_test
  516. ; 878 "inffast.S"
  517. ALIGN 4
  518. 0000046C L_init_mmx:
  519. 0000046C 0F 77 emms
  520. 0000046E 0F 6E C5 movd mm0,ebp
  521. 00000471 8B EB mov ebp,ebx
  522. ; 896 "inffast.S"
  523. 00000473 0F 6E 24 24 movd mm4,dword ptr [esp+0]
  524. 00000477 0F 7F E3 movq mm3,mm4
  525. 0000047A 0F 6E 6C 24 04 movd mm5,dword ptr [esp+4]
  526. 0000047F 0F 7F EA movq mm2,mm5
  527. 00000482 0F EF C9 pxor mm1,mm1
  528. 00000485 8B 5C 24 08 mov ebx, [esp+8]
  529. 00000489 EB 01 jmp L_do_loop_mmx
  530. ALIGN 4
  531. 0000048C L_do_loop_mmx:
  532. 0000048C 0F D3 C1 psrlq mm0,mm1
  533. 0000048F 83 FD 20 cmp ebp,32
  534. 00000492 77 12 ja L_get_length_code_mmx
  535. 00000494 0F 6E F5 movd mm6,ebp
  536. 00000497 0F 6E 3E movd mm7,dword ptr [esi]
  537. 0000049A 83 C6 04 add esi,4
  538. 0000049D 0F F3 FE psllq mm7,mm6
  539. 000004A0 83 C5 20 add ebp,32
  540. 000004A3 0F EB C7 por mm0,mm7
  541. 000004A6 L_get_length_code_mmx:
  542. 000004A6 0F DB E0 pand mm4,mm0
  543. 000004A9 0F 7E E0 movd eax,mm4
  544. 000004AC 0F 7F DC movq mm4,mm3
  545. 000004AF 8B 04 83 mov eax, [ebx+eax*4]
  546. 000004B2 L_dolen_mmx:
  547. 000004B2 0F B6 CC movzx ecx,ah
  548. 000004B5 0F 6E C9 movd mm1,ecx
  549. 000004B8 2B E9 sub ebp,ecx
  550. 000004BA 84 C0 test al,al
  551. 000004BC 75 19 jnz L_test_for_length_base_mmx
  552. 000004BE C1 E8 10 shr eax,16
  553. 000004C1 AA stosb
  554. 000004C2 L_while_test_mmx:
  555. 000004C2 39 7C 24 10 cmp [esp+16],edi
  556. 000004C6 0F 86 0000021C jbe L_break_loop
  557. 000004CC 39 74 24 14 cmp [esp+20],esi
  558. 000004D0 77 BA ja L_do_loop_mmx
  559. 000004D2 E9 00000211 jmp L_break_loop
  560. 000004D7 L_test_for_length_base_mmx:
  561. 000004D7 8B D0 mov edx,eax
  562. 000004D9 C1 EA 10 shr edx,16
  563. 000004DC A8 10 test al,16
  564. 000004DE 0F 84 000000E0 jz L_test_for_second_level_length_mmx
  565. 000004E4 83 E0 0F and eax,15
  566. 000004E7 74 14 jz L_decode_distance_mmx
  567. 000004E9 0F D3 C1 psrlq mm0,mm1
  568. 000004EC 0F 6E C8 movd mm1,eax
  569. 000004EF 0F 7E C1 movd ecx,mm0
  570. 000004F2 2B E8 sub ebp,eax
  571. 000004F4 23 0C 85 and ecx, [inflate_fast_mask+eax*4]
  572. 0000007C R
  573. 000004FB 03 D1 add edx,ecx
  574. 000004FD L_decode_distance_mmx:
  575. 000004FD 0F D3 C1 psrlq mm0,mm1
  576. 00000500 83 FD 20 cmp ebp,32
  577. 00000503 77 12 ja L_get_dist_code_mmx
  578. 00000505 0F 6E F5 movd mm6,ebp
  579. 00000508 0F 6E 3E movd mm7,dword ptr [esi]
  580. 0000050B 83 C6 04 add esi,4
  581. 0000050E 0F F3 FE psllq mm7,mm6
  582. 00000511 83 C5 20 add ebp,32
  583. 00000514 0F EB C7 por mm0,mm7
  584. 00000517 L_get_dist_code_mmx:
  585. 00000517 8B 5C 24 0C mov ebx, [esp+12]
  586. 0000051B 0F DB E8 pand mm5,mm0
  587. 0000051E 0F 7E E8 movd eax,mm5
  588. 00000521 0F 7F D5 movq mm5,mm2
  589. 00000524 8B 04 83 mov eax, [ebx+eax*4]
  590. 00000527 L_dodist_mmx:
  591. 00000527 0F B6 CC movzx ecx,ah
  592. 0000052A 8B D8 mov ebx,eax
  593. 0000052C C1 EB 10 shr ebx,16
  594. 0000052F 2B E9 sub ebp,ecx
  595. 00000531 0F 6E C9 movd mm1,ecx
  596. 00000534 A8 10 test al,16
  597. 00000536 0F 84 000000AC jz L_test_for_second_level_dist_mmx
  598. 0000053C 83 E0 0F and eax,15
  599. 0000053F 74 57 jz L_check_dist_one_mmx
  600. 00000541 L_add_bits_to_dist_mmx:
  601. 00000541 0F D3 C1 psrlq mm0,mm1
  602. 00000544 0F 6E C8 movd mm1,eax
  603. 00000547 0F 7E C1 movd ecx,mm0
  604. 0000054A 2B E8 sub ebp,eax
  605. 0000054C 23 0C 85 and ecx, [inflate_fast_mask+eax*4]
  606. 0000007C R
  607. 00000553 03 D9 add ebx,ecx
  608. 00000555 L_check_window_mmx:
  609. 00000555 89 74 24 2C mov [esp+44],esi
  610. 00000559 8B C7 mov eax,edi
  611. 0000055B 2B 44 24 28 sub eax, [esp+40]
  612. 0000055F 3B C3 cmp eax,ebx
  613. 00000561 0F 82 000000A9 jb L_clip_window_mmx
  614. 00000567 8B CA mov ecx,edx
  615. 00000569 8B F7 mov esi,edi
  616. 0000056B 2B F3 sub esi,ebx
  617. 0000056D 83 E9 03 sub ecx,3
  618. 00000570 8A 06 mov al, [esi]
  619. 00000572 88 07 mov [edi],al
  620. 00000574 8A 46 01 mov al, [esi+1]
  621. 00000577 8A 56 02 mov dl, [esi+2]
  622. 0000057A 83 C6 03 add esi,3
  623. 0000057D 88 47 01 mov [edi+1],al
  624. 00000580 88 57 02 mov [edi+2],dl
  625. 00000583 83 C7 03 add edi,3
  626. 00000586 F3/ A4 rep movsb
  627. 00000588 8B 74 24 2C mov esi, [esp+44]
  628. 0000058C 8B 5C 24 08 mov ebx, [esp+8]
  629. 00000590 E9 FFFFFF2D jmp L_while_test_mmx
  630. ALIGN 4
  631. 00000598 L_check_dist_one_mmx:
  632. 00000598 83 FB 01 cmp ebx,1
  633. 0000059B 75 B8 jne L_check_window_mmx
  634. 0000059D 39 7C 24 28 cmp [esp+40],edi
  635. 000005A1 74 B2 je L_check_window_mmx
  636. 000005A3 4F dec edi
  637. 000005A4 8B CA mov ecx,edx
  638. 000005A6 8A 07 mov al, [edi]
  639. 000005A8 83 E9 03 sub ecx,3
  640. 000005AB 88 47 01 mov [edi+1],al
  641. 000005AE 88 47 02 mov [edi+2],al
  642. 000005B1 88 47 03 mov [edi+3],al
  643. 000005B4 83 C7 04 add edi,4
  644. 000005B7 F3/ AA rep stosb
  645. 000005B9 8B 5C 24 08 mov ebx, [esp+8]
  646. 000005BD E9 FFFFFF00 jmp L_while_test_mmx
  647. ALIGN 4
  648. 000005C4 L_test_for_second_level_length_mmx:
  649. 000005C4 A8 40 test al,64
  650. 000005C6 0F 85 000000DE jnz L_test_for_end_of_block
  651. 000005CC 83 E0 0F and eax,15
  652. 000005CF 0F D3 C1 psrlq mm0,mm1
  653. 000005D2 0F 7E C1 movd ecx,mm0
  654. 000005D5 23 0C 85 and ecx, [inflate_fast_mask+eax*4]
  655. 0000007C R
  656. 000005DC 03 CA add ecx,edx
  657. 000005DE 8B 04 8B mov eax, [ebx+ecx*4]
  658. 000005E1 E9 FFFFFECC jmp L_dolen_mmx
  659. ALIGN 4
  660. 000005E8 L_test_for_second_level_dist_mmx:
  661. 000005E8 A8 40 test al,64
  662. 000005EA 0F 85 000000AE jnz L_invalid_distance_code
  663. 000005F0 83 E0 0F and eax,15
  664. 000005F3 0F D3 C1 psrlq mm0,mm1
  665. 000005F6 0F 7E C1 movd ecx,mm0
  666. 000005F9 23 0C 85 and ecx, [inflate_fast_mask+eax*4]
  667. 0000007C R
  668. 00000600 8B 44 24 0C mov eax, [esp+12]
  669. 00000604 03 CB add ecx,ebx
  670. 00000606 8B 04 88 mov eax, [eax+ecx*4]
  671. 00000609 E9 FFFFFF19 jmp L_dodist_mmx
  672. ALIGN 4
  673. 00000610 L_clip_window_mmx:
  674. 00000610 8B C8 mov ecx,eax
  675. 00000612 8B 44 24 34 mov eax, [esp+52]
  676. 00000616 F7 D9 neg ecx
  677. 00000618 8B 74 24 38 mov esi, [esp+56]
  678. 0000061C 3B C3 cmp eax,ebx
  679. 0000061E 0F 82 000000A2 jb L_invalid_distance_too_far
  680. 00000624 03 CB add ecx,ebx
  681. 00000626 83 7C 24 30 00 cmp dword ptr [esp+48],0
  682. 0000062B 75 20 jne L_wrap_around_window_mmx
  683. 0000062D 2B C1 sub eax,ecx
  684. 0000062F 03 F0 add esi,eax
  685. 00000631 3B D1 cmp edx,ecx
  686. 00000633 76 58 jbe L_do_copy1_mmx
  687. 00000635 2B D1 sub edx,ecx
  688. 00000637 F3/ A4 rep movsb
  689. 00000639 8B F7 mov esi,edi
  690. 0000063B 2B F3 sub esi,ebx
  691. 0000063D EB 4E jmp L_do_copy1_mmx
  692. 0000063F 3B D1 cmp edx,ecx
  693. 00000641 76 4A jbe L_do_copy1_mmx
  694. 00000643 2B D1 sub edx,ecx
  695. 00000645 F3/ A4 rep movsb
  696. 00000647 8B F7 mov esi,edi
  697. 00000649 2B F3 sub esi,ebx
  698. 0000064B EB 40 jmp L_do_copy1_mmx
  699. 0000064D L_wrap_around_window_mmx:
  700. 0000064D 8B 44 24 30 mov eax, [esp+48]
  701. 00000651 3B C8 cmp ecx,eax
  702. 00000653 76 28 jbe L_contiguous_in_window_mmx
  703. 00000655 03 74 24 34 add esi, [esp+52]
  704. 00000659 03 F0 add esi,eax
  705. 0000065B 2B F1 sub esi,ecx
  706. 0000065D 2B C8 sub ecx,eax
  707. 0000065F 3B D1 cmp edx,ecx
  708. 00000661 76 2A jbe L_do_copy1_mmx
  709. 00000663 2B D1 sub edx,ecx
  710. 00000665 F3/ A4 rep movsb
  711. 00000667 8B 74 24 38 mov esi, [esp+56]
  712. 0000066B 8B 4C 24 30 mov ecx, [esp+48]
  713. 0000066F 3B D1 cmp edx,ecx
  714. 00000671 76 1A jbe L_do_copy1_mmx
  715. 00000673 2B D1 sub edx,ecx
  716. 00000675 F3/ A4 rep movsb
  717. 00000677 8B F7 mov esi,edi
  718. 00000679 2B F3 sub esi,ebx
  719. 0000067B EB 10 jmp L_do_copy1_mmx
  720. 0000067D L_contiguous_in_window_mmx:
  721. 0000067D 03 F0 add esi,eax
  722. 0000067F 2B F1 sub esi,ecx
  723. 00000681 3B D1 cmp edx,ecx
  724. 00000683 76 08 jbe L_do_copy1_mmx
  725. 00000685 2B D1 sub edx,ecx
  726. 00000687 F3/ A4 rep movsb
  727. 00000689 8B F7 mov esi,edi
  728. 0000068B 2B F3 sub esi,ebx
  729. 0000068D L_do_copy1_mmx:
  730. 0000068D 8B CA mov ecx,edx
  731. 0000068F F3/ A4 rep movsb
  732. 00000691 8B 74 24 2C mov esi, [esp+44]
  733. 00000695 8B 5C 24 08 mov ebx, [esp+8]
  734. 00000699 E9 FFFFFE24 jmp L_while_test_mmx
  735. ; 1174 "inffast.S"
  736. 0000069E L_invalid_distance_code:
  737. 0000069E B9 00000044 R mov ecx, invalid_distance_code_msg
  738. 000006A3 BA 0000001A mov edx,INFLATE_MODE_BAD
  739. 000006A8 EB 2C jmp L_update_stream_state
  740. 000006AA L_test_for_end_of_block:
  741. 000006AA A8 20 test al,32
  742. 000006AC 74 0C jz L_invalid_literal_length_code
  743. 000006AE B9 00000000 mov ecx,0
  744. 000006B3 BA 0000000B mov edx,INFLATE_MODE_TYPE
  745. 000006B8 EB 1C jmp L_update_stream_state
  746. 000006BA L_invalid_literal_length_code:
  747. 000006BA B9 00000028 R mov ecx, invalid_literal_length_code_msg
  748. 000006BF BA 0000001A mov edx,INFLATE_MODE_BAD
  749. 000006C4 EB 10 jmp L_update_stream_state
  750. 000006C6 L_invalid_distance_too_far:
  751. 000006C6 8B 74 24 2C mov esi, [esp+44]
  752. 000006CA B9 0000005C R mov ecx, invalid_distance_too_far_msg
  753. 000006CF BA 0000001A mov edx,INFLATE_MODE_BAD
  754. 000006D4 EB 00 jmp L_update_stream_state
  755. 000006D6 L_update_stream_state:
  756. 000006D6 8B 44 24 58 mov eax, [esp+88]
  757. 000006DA 85 C9 test ecx,ecx
  758. 000006DC 74 03 jz L_skip_msg
  759. 000006DE 89 48 18 mov [eax+24],ecx
  760. 000006E1 L_skip_msg:
  761. 000006E1 8B 40 1C mov eax, [eax+28]
  762. 000006E4 89 10 mov [eax+mode_state],edx
  763. 000006E6 EB 00 jmp L_break_loop
  764. ALIGN 4
  765. 000006E8 L_break_loop:
  766. ; 1243 "inffast.S"
  767. 000006E8 83 3D 00000000 R cmp dword ptr [inflate_fast_use_mmx],2
  768. 02
  769. 000006EF 75 02 jne L_update_next_in
  770. 000006F1 8B DD mov ebx,ebp
  771. 000006F3 L_update_next_in:
  772. ; 1266 "inffast.S"
  773. 000006F3 8B 44 24 58 mov eax, [esp+88]
  774. 000006F7 8B CB mov ecx,ebx
  775. 000006F9 8B 50 1C mov edx, [eax+28]
  776. 000006FC C1 E9 03 shr ecx,3
  777. 000006FF 2B F1 sub esi,ecx
  778. 00000701 C1 E1 03 shl ecx,3
  779. 00000704 2B D9 sub ebx,ecx
  780. 00000706 89 78 0C mov [eax+12],edi
  781. 00000709 89 5A 3C mov [edx+bits_state],ebx
  782. 0000070C 8B CB mov ecx,ebx
  783. 0000070E 8D 5C 24 1C lea ebx, [esp+28]
  784. 00000712 39 5C 24 14 cmp [esp+20],ebx
  785. 00000716 75 14 jne L_buf_not_used
  786. 00000718 2B F3 sub esi,ebx
  787. 0000071A 8B 18 mov ebx, [eax+0]
  788. 0000071C 89 5C 24 14 mov [esp+20],ebx
  789. 00000720 03 F3 add esi,ebx
  790. 00000722 8B 58 04 mov ebx, [eax+4]
  791. 00000725 83 EB 0B sub ebx,11
  792. 00000728 01 5C 24 14 add [esp+20],ebx
  793. 0000072C L_buf_not_used:
  794. 0000072C 89 30 mov [eax+0],esi
  795. 0000072E BB 00000001 mov ebx,1
  796. 00000733 D3 E3 shl ebx,cl
  797. 00000735 4B dec ebx
  798. 00000736 83 3D 00000000 R cmp dword ptr [inflate_fast_use_mmx],2
  799. 02
  800. 0000073D 75 08 jne L_update_hold
  801. 0000073F 0F D3 C1 psrlq mm0,mm1
  802. 00000742 0F 7E C5 movd ebp,mm0
  803. 00000745 0F 77 emms
  804. 00000747 L_update_hold:
  805. 00000747 23 EB and ebp,ebx
  806. 00000749 89 6A 38 mov [edx+hold_state],ebp
  807. 0000074C 8B 5C 24 14 mov ebx, [esp+20]
  808. 00000750 3B DE cmp ebx,esi
  809. 00000752 76 0A jbe L_last_is_smaller
  810. 00000754 2B DE sub ebx,esi
  811. 00000756 83 C3 0B add ebx,11
  812. 00000759 89 58 04 mov [eax+4],ebx
  813. 0000075C EB 0A jmp L_fixup_out
  814. 0000075E L_last_is_smaller:
  815. 0000075E 2B F3 sub esi,ebx
  816. 00000760 F7 DE neg esi
  817. 00000762 83 C6 0B add esi,11
  818. 00000765 89 70 04 mov [eax+4],esi
  819. 00000768 L_fixup_out:
  820. 00000768 8B 5C 24 10 mov ebx, [esp+16]
  821. 0000076C 3B DF cmp ebx,edi
  822. 0000076E 76 0D jbe L_end_is_smaller
  823. 00000770 2B DF sub ebx,edi
  824. 00000772 81 C3 00000101 add ebx,257
  825. 00000778 89 58 10 mov [eax+16],ebx
  826. 0000077B EB 0D jmp L_done
  827. 0000077D L_end_is_smaller:
  828. 0000077D 2B FB sub edi,ebx
  829. 0000077F F7 DF neg edi
  830. 00000781 81 C7 00000101 add edi,257
  831. 00000787 89 78 10 mov [eax+16],edi
  832. 0000078A L_done:
  833. 0000078A 83 C4 40 add esp,64
  834. 0000078D 9D popfd
  835. 0000078E 5B pop ebx
  836. 0000078F 5D pop ebp
  837. 00000790 5E pop esi
  838. 00000791 5F pop edi
  839. 00000792 C3 ret
  840. 00000793 _inflate_fast endp
  841. 00000004 _TEXT ends
  842. end
  843. Microsoft (R) Macro Assembler Version 8.00.50727.104 01/29/13 15:28:20
  844. inffas32.asm Symbols 2 - 1
  845. Segments and Groups:
  846. N a m e Size Length Align Combine Class
  847. FLAT . . . . . . . . . . . . . . GROUP
  848. _DATA . . . . . . . . . . . . . 32 Bit 00000004 Para Public 'DATA'
  849. _TEXT . . . . . . . . . . . . . 32 Bit 00000793 Para Public 'CODE'
  850. Procedures, parameters, and locals:
  851. N a m e Type Value Attr
  852. _inflate_fast . . . . . . . . . P Near 00000100 _TEXT Length= 00000693 Public
  853. L_align_long . . . . . . . . . L Near 000001BA _TEXT
  854. L_is_aligned . . . . . . . . . L Near 000001D2 _TEXT
  855. L_check_mmx . . . . . . . . . L Near 000001D6 _TEXT
  856. L_use_mmx . . . . . . . . . . L Near 00000233 _TEXT
  857. L_dont_use_mmx . . . . . . . . L Near 0000023F _TEXT
  858. L_check_mmx_pop . . . . . . . L Near 00000249 _TEXT
  859. L_do_loop . . . . . . . . . . L Near 00000250 _TEXT
  860. L_get_length_code . . . . . . L Near 00000262 _TEXT
  861. L_dolen . . . . . . . . . . . L Near 0000026E _TEXT
  862. L_while_test . . . . . . . . . L Near 0000027C _TEXT
  863. L_test_for_length_base . . . . L Near 00000291 _TEXT
  864. L_add_bits_to_len . . . . . . L Near 000002BA _TEXT
  865. L_save_len . . . . . . . . . . L Near 000002CA _TEXT
  866. L_decode_distance . . . . . . L Near 000002CE _TEXT
  867. L_get_distance_code . . . . . L Near 000002E0 _TEXT
  868. L_dodist . . . . . . . . . . . L Near 000002ED _TEXT
  869. L_add_bits_to_dist . . . . . . L Near 0000031C _TEXT
  870. L_check_window . . . . . . . . L Near 0000032E _TEXT
  871. L_check_dist_one . . . . . . . L Near 0000036C _TEXT
  872. L_test_for_second_level_length . L Near 00000394 _TEXT
  873. L_test_for_second_level_dist . L Near 000003B4 _TEXT
  874. L_clip_window . . . . . . . . L Near 000003D4 _TEXT
  875. L_wrap_around_window . . . . . L Near 00000415 _TEXT
  876. L_contiguous_in_window . . . . L Near 00000449 _TEXT
  877. L_do_copy1 . . . . . . . . . . L Near 0000045D _TEXT
  878. L_init_mmx . . . . . . . . . . L Near 0000046C _TEXT
  879. L_do_loop_mmx . . . . . . . . L Near 0000048C _TEXT
  880. L_get_length_code_mmx . . . . L Near 000004A6 _TEXT
  881. L_dolen_mmx . . . . . . . . . L Near 000004B2 _TEXT
  882. L_while_test_mmx . . . . . . . L Near 000004C2 _TEXT
  883. L_test_for_length_base_mmx . . L Near 000004D7 _TEXT
  884. L_decode_distance_mmx . . . . L Near 000004FD _TEXT
  885. L_get_dist_code_mmx . . . . . L Near 00000517 _TEXT
  886. L_dodist_mmx . . . . . . . . . L Near 00000527 _TEXT
  887. L_add_bits_to_dist_mmx . . . . L Near 00000541 _TEXT
  888. L_check_window_mmx . . . . . . L Near 00000555 _TEXT
  889. L_check_dist_one_mmx . . . . . L Near 00000598 _TEXT
  890. L_test_for_second_level_length_mmx . L Near 000005C4 _TEXT
  891. L_test_for_second_level_dist_mmx . L Near 000005E8 _TEXT
  892. L_clip_window_mmx . . . . . . L Near 00000610 _TEXT
  893. L_wrap_around_window_mmx . . . L Near 0000064D _TEXT
  894. L_contiguous_in_window_mmx . . L Near 0000067D _TEXT
  895. L_do_copy1_mmx . . . . . . . . L Near 0000068D _TEXT
  896. L_invalid_distance_code . . . L Near 0000069E _TEXT
  897. L_test_for_end_of_block . . . L Near 000006AA _TEXT
  898. L_invalid_literal_length_code L Near 000006BA _TEXT
  899. L_invalid_distance_too_far . . L Near 000006C6 _TEXT
  900. L_update_stream_state . . . . L Near 000006D6 _TEXT
  901. L_skip_msg . . . . . . . . . . L Near 000006E1 _TEXT
  902. L_break_loop . . . . . . . . . L Near 000006E8 _TEXT
  903. L_update_next_in . . . . . . . L Near 000006F3 _TEXT
  904. L_buf_not_used . . . . . . . . L Near 0000072C _TEXT
  905. L_update_hold . . . . . . . . L Near 00000747 _TEXT
  906. L_last_is_smaller . . . . . . L Near 0000075E _TEXT
  907. L_fixup_out . . . . . . . . . L Near 00000768 _TEXT
  908. L_end_is_smaller . . . . . . . L Near 0000077D _TEXT
  909. L_done . . . . . . . . . . . . L Near 0000078A _TEXT
  910. Symbols:
  911. N a m e Type Value Attr
  912. @CodeSize . . . . . . . . . . . Number 00000000h
  913. @DataSize . . . . . . . . . . . Number 00000000h
  914. @Interface . . . . . . . . . . . Number 00000000h
  915. @Model . . . . . . . . . . . . . Number 00000007h
  916. @code . . . . . . . . . . . . . Text _TEXT
  917. @data . . . . . . . . . . . . . Text FLAT
  918. @fardata? . . . . . . . . . . . Text FLAT
  919. @fardata . . . . . . . . . . . . Text FLAT
  920. @stack . . . . . . . . . . . . . Text FLAT
  921. INFLATE_MODE_BAD . . . . . . . . Number 0000001Ah
  922. INFLATE_MODE_TYPE . . . . . . . Number 0000000Bh
  923. bits_state . . . . . . . . . . . Number 0000003Ch
  924. distbits_state . . . . . . . . . Number 00000058h
  925. distcode_state . . . . . . . . . Number 00000050h
  926. hold_state . . . . . . . . . . . Number 00000038h
  927. inflate_fast_mask . . . . . . . L Near 0000007C _TEXT
  928. inflate_fast_use_mmx . . . . . . L Near 00000000 _DATA
  929. invalid_distance_code_msg . . . L Near 00000044 _TEXT
  930. invalid_distance_too_far_msg . . L Near 0000005C _TEXT
  931. invalid_literal_length_code_msg L Near 00000028 _TEXT
  932. lenbits_state . . . . . . . . . Number 00000054h
  933. lencode_state . . . . . . . . . Number 0000004Ch
  934. mode_state . . . . . . . . . . . Number 00000000h
  935. window_state . . . . . . . . . . Number 00000034h
  936. write_state . . . . . . . . . . Number 00000030h
  937. wsize_state . . . . . . . . . . Number 00000028h
  938. zlib1222sup . . . . . . . . . . Number 00000008h
  939. 0 Warnings
  940. 0 Errors