]> gerrit.simantics Code Review - simantics/sysdyn.git/blob
d949d12eace6de86ab7b3453a5f8e0d99651cac8
[simantics/sysdyn.git] /
1 ; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01 \r
2 \r
3         TITLE   D:\FMU\FMUSolution\zlib-1.2.6\adler32.c\r
4         .686P\r
5         .XMM\r
6         include listing.inc\r
7         .model  flat\r
8 \r
9 INCLUDELIB OLDNAMES\r
10 \r
11 EXTRN   __alldiv:PROC\r
12 ; Function compile flags: /Ogtp\r
13 ; File d:\fmu\fmusolution\zlib-1.2.6\adler32.c\r
14 ;       COMDAT _adler32_combine_\r
15 _TEXT   SEGMENT\r
16 _len2$ = 8                                              ; size = 8\r
17 _sum1$ = 12                                             ; size = 4\r
18 _adler32_combine_ PROC                                  ; COMDAT\r
19 ; _adler1$ = ecx\r
20 ; _adler2$ = eax\r
21 \r
22 ; 140  : {\r
23 \r
24   00000 55               push    ebp\r
25   00001 8b ec            mov     ebp, esp\r
26   00003 53               push    ebx\r
27   00004 56               push    esi\r
28   00005 8b d8            mov     ebx, eax\r
29 \r
30 ; 141  :     unsigned long sum1;\r
31 ; 142  :     unsigned long sum2;\r
32 ; 143  :     unsigned rem;\r
33 ; 144  : \r
34 ; 145  :     /* for negative len, return invalid adler32 as a clue for debugging */\r
35 ; 146  :     if (len2 < 0)\r
36 \r
37   00007 8b 45 0c         mov     eax, DWORD PTR _len2$[ebp+4]\r
38   0000a 57               push    edi\r
39   0000b 8b 7d 08         mov     edi, DWORD PTR _len2$[ebp]\r
40   0000e 8b f1            mov     esi, ecx\r
41   00010 85 c0            test    eax, eax\r
42   00012 7f 0e            jg      SHORT $LN5@adler32_co\r
43   00014 7c 04            jl      SHORT $LN8@adler32_co\r
44   00016 85 ff            test    edi, edi\r
45   00018 73 08            jae     SHORT $LN5@adler32_co\r
46 $LN8@adler32_co:\r
47   0001a 5f               pop     edi\r
48   0001b 5e               pop     esi\r
49 \r
50 ; 147  :         return 0xffffffffUL;\r
51 \r
52   0001c 83 c8 ff         or      eax, -1\r
53   0001f 5b               pop     ebx\r
54 \r
55 ; 162  : }\r
56 \r
57   00020 5d               pop     ebp\r
58   00021 c3               ret     0\r
59 $LN5@adler32_co:\r
60 \r
61 ; 148  : \r
62 ; 149  :     /* the derivation of this formula is left as an exercise for the reader */\r
63 ; 150  :     MOD63(len2);                /* assumes len2 >= 0 */\r
64 \r
65   00022 6a 00            push    0\r
66   00024 68 f1 ff 00 00   push    65521                  ; 0000fff1H\r
67   00029 50               push    eax\r
68   0002a 57               push    edi\r
69   0002b e8 00 00 00 00   call    __alldiv\r
70   00030 69 c0 f1 ff 00\r
71         00               imul    eax, 65521             ; 0000fff1H\r
72   00036 2b f8            sub     edi, eax\r
73 \r
74 ; 151  :     rem = (unsigned)len2;\r
75 ; 152  :     sum1 = adler1 & 0xffff;\r
76 \r
77   00038 0f b7 c6         movzx   eax, si\r
78 \r
79 ; 153  :     sum2 = rem * sum1;\r
80 \r
81   0003b 8b c8            mov     ecx, eax\r
82   0003d 0f af cf         imul    ecx, edi\r
83 \r
84 ; 154  :     MOD(sum2);\r
85 ; 155  :     sum1 += (adler2 & 0xffff) + BASE - 1;\r
86 \r
87   00040 0f b7 d3         movzx   edx, bx\r
88   00043 8d 84 10 f0 ff\r
89         00 00            lea     eax, DWORD PTR [eax+edx+65520]\r
90   0004a 89 45 0c         mov     DWORD PTR _sum1$[ebp], eax\r
91   0004d b8 71 80 07 80   mov     eax, -2146992015       ; 80078071H\r
92   00052 f7 e1            mul     ecx\r
93   00054 c1 ea 0f         shr     edx, 15                        ; 0000000fH\r
94 \r
95 ; 156  :     sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem;\r
96 \r
97   00057 69 d2 f1 ff 00\r
98         00               imul    edx, 65521             ; 0000fff1H\r
99   0005d c1 ee 10         shr     esi, 16                        ; 00000010H\r
100   00060 2b f2            sub     esi, edx\r
101 \r
102 ; 157  :     if (sum1 >= BASE) sum1 -= BASE;\r
103 \r
104   00062 8b 55 0c         mov     edx, DWORD PTR _sum1$[ebp]\r
105   00065 c1 eb 10         shr     ebx, 16                        ; 00000010H\r
106   00068 03 f3            add     esi, ebx\r
107   0006a 2b f7            sub     esi, edi\r
108   0006c 8d 8c 31 f1 ff\r
109         00 00            lea     ecx, DWORD PTR [ecx+esi+65521]\r
110   00073 81 fa f1 ff 00\r
111         00               cmp     edx, 65521             ; 0000fff1H\r
112   00079 72 14            jb      SHORT $LN3@adler32_co\r
113   0007b 81 ea f1 ff 00\r
114         00               sub     edx, 65521             ; 0000fff1H\r
115 \r
116 ; 158  :     if (sum1 >= BASE) sum1 -= BASE;\r
117 \r
118   00081 81 fa f1 ff 00\r
119         00               cmp     edx, 65521             ; 0000fff1H\r
120   00087 72 06            jb      SHORT $LN3@adler32_co\r
121   00089 81 ea f1 ff 00\r
122         00               sub     edx, 65521             ; 0000fff1H\r
123 $LN3@adler32_co:\r
124 \r
125 ; 159  :     if (sum2 >= (BASE << 1)) sum2 -= (BASE << 1);\r
126 \r
127   0008f 81 f9 e2 ff 01\r
128         00               cmp     ecx, 131042            ; 0001ffe2H\r
129   00095 72 06            jb      SHORT $LN2@adler32_co\r
130   00097 81 e9 e2 ff 01\r
131         00               sub     ecx, 131042            ; 0001ffe2H\r
132 $LN2@adler32_co:\r
133 \r
134 ; 160  :     if (sum2 >= BASE) sum2 -= BASE;\r
135 \r
136   0009d 81 f9 f1 ff 00\r
137         00               cmp     ecx, 65521             ; 0000fff1H\r
138   000a3 72 06            jb      SHORT $LN1@adler32_co\r
139   000a5 81 e9 f1 ff 00\r
140         00               sub     ecx, 65521             ; 0000fff1H\r
141 $LN1@adler32_co:\r
142   000ab 5f               pop     edi\r
143 \r
144 ; 161  :     return sum1 | (sum2 << 16);\r
145 \r
146   000ac 8b c1            mov     eax, ecx\r
147   000ae c1 e0 10         shl     eax, 16                        ; 00000010H\r
148   000b1 5e               pop     esi\r
149   000b2 0b c2            or      eax, edx\r
150   000b4 5b               pop     ebx\r
151 \r
152 ; 162  : }\r
153 \r
154   000b5 5d               pop     ebp\r
155   000b6 c3               ret     0\r
156 _adler32_combine_ ENDP\r
157 _TEXT   ENDS\r
158 PUBLIC  _adler32@12\r
159 ; Function compile flags: /Ogtp\r
160 ;       COMDAT _adler32@12\r
161 _TEXT   SEGMENT\r
162 _adler$ = 8                                             ; size = 4\r
163 tv884 = 12                                              ; size = 4\r
164 _buf$ = 12                                              ; size = 4\r
165 _len$ = 16                                              ; size = 4\r
166 _adler32@12 PROC                                        ; COMDAT\r
167 \r
168 ; 69   : {\r
169 \r
170   00000 55               push    ebp\r
171   00001 8b ec            mov     ebp, esp\r
172 \r
173 ; 70   :     unsigned long sum2;\r
174 ; 71   :     unsigned n;\r
175 ; 72   : \r
176 ; 73   :     /* split Adler-32 into component sums */\r
177 ; 74   :     sum2 = (adler >> 16) & 0xffff;\r
178 \r
179   00003 8b 4d 08         mov     ecx, DWORD PTR _adler$[ebp]\r
180   00006 53               push    ebx\r
181 \r
182 ; 75   :     adler &= 0xffff;\r
183 ; 76   : \r
184 ; 77   :     /* in case user likes doing a byte at a time, keep it fast */\r
185 ; 78   :     if (len == 1) {\r
186 \r
187   00007 8b 5d 10         mov     ebx, DWORD PTR _len$[ebp]\r
188   0000a 57               push    edi\r
189   0000b 8b f9            mov     edi, ecx\r
190   0000d c1 ef 10         shr     edi, 16                        ; 00000010H\r
191   00010 81 e1 ff ff 00\r
192         00               and     ecx, 65535             ; 0000ffffH\r
193   00016 83 fb 01         cmp     ebx, 1\r
194   00019 75 33            jne     SHORT $LN18@adler32\r
195 \r
196 ; 79   :         adler += buf[0];\r
197 \r
198   0001b 8b 45 0c         mov     eax, DWORD PTR _buf$[ebp]\r
199   0001e 0f b6 10         movzx   edx, BYTE PTR [eax]\r
200   00021 03 ca            add     ecx, edx\r
201 \r
202 ; 80   :         if (adler >= BASE)\r
203 \r
204   00023 81 f9 f1 ff 00\r
205         00               cmp     ecx, 65521             ; 0000fff1H\r
206   00029 72 06            jb      SHORT $LN17@adler32\r
207 \r
208 ; 81   :             adler -= BASE;\r
209 \r
210   0002b 81 e9 f1 ff 00\r
211         00               sub     ecx, 65521             ; 0000fff1H\r
212 $LN17@adler32:\r
213 \r
214 ; 82   :         sum2 += adler;\r
215 \r
216   00031 03 f9            add     edi, ecx\r
217 \r
218 ; 83   :         if (sum2 >= BASE)\r
219 \r
220   00033 81 ff f1 ff 00\r
221         00               cmp     edi, 65521             ; 0000fff1H\r
222   00039 72 06            jb      SHORT $LN16@adler32\r
223 \r
224 ; 84   :             sum2 -= BASE;\r
225 \r
226   0003b 81 ef f1 ff 00\r
227         00               sub     edi, 65521             ; 0000fff1H\r
228 $LN16@adler32:\r
229 \r
230 ; 85   :         return adler | (sum2 << 16);\r
231 \r
232   00041 8b c7            mov     eax, edi\r
233   00043 c1 e0 10         shl     eax, 16                        ; 00000010H\r
234   00046 5f               pop     edi\r
235   00047 0b c1            or      eax, ecx\r
236   00049 5b               pop     ebx\r
237 \r
238 ; 133  : }\r
239 \r
240   0004a 5d               pop     ebp\r
241   0004b c2 0c 00         ret     12                     ; 0000000cH\r
242 $LN18@adler32:\r
243   0004e 56               push    esi\r
244 \r
245 ; 86   :     }\r
246 ; 87   : \r
247 ; 88   :     /* initial Adler-32 value (deferred check for len == 1 speed) */\r
248 ; 89   :     if (buf == Z_NULL)\r
249 \r
250   0004f 8b 75 0c         mov     esi, DWORD PTR _buf$[ebp]\r
251   00052 85 f6            test    esi, esi\r
252   00054 75 0a            jne     SHORT $LN15@adler32\r
253 \r
254 ; 90   :         return 1L;\r
255 \r
256   00056 8d 46 01         lea     eax, DWORD PTR [esi+1]\r
257   00059 5e               pop     esi\r
258   0005a 5f               pop     edi\r
259   0005b 5b               pop     ebx\r
260 \r
261 ; 133  : }\r
262 \r
263   0005c 5d               pop     ebp\r
264   0005d c2 0c 00         ret     12                     ; 0000000cH\r
265 $LN15@adler32:\r
266 \r
267 ; 91   : \r
268 ; 92   :     /* in case short lengths are provided, keep it somewhat fast */\r
269 ; 93   :     if (len < 16) {\r
270 \r
271   00060 83 fb 10         cmp     ebx, 16                        ; 00000010H\r
272   00063 73 43            jae     SHORT $LN22@adler32\r
273 \r
274 ; 94   :         while (len--) {\r
275 \r
276   00065 85 db            test    ebx, ebx\r
277   00067 74 12            je      SHORT $LN26@adler32\r
278   00069 8d a4 24 00 00\r
279         00 00            npad    7\r
280 $LL13@adler32:\r
281 \r
282 ; 95   :             adler += *buf++;\r
283 \r
284   00070 0f b6 06         movzx   eax, BYTE PTR [esi]\r
285   00073 03 c8            add     ecx, eax\r
286   00075 46               inc     esi\r
287 \r
288 ; 96   :             sum2 += adler;\r
289 \r
290   00076 03 f9            add     edi, ecx\r
291   00078 4b               dec     ebx\r
292   00079 75 f5            jne     SHORT $LL13@adler32\r
293 $LN26@adler32:\r
294 \r
295 ; 97   :         }\r
296 ; 98   :         if (adler >= BASE)\r
297 \r
298   0007b 81 f9 f1 ff 00\r
299         00               cmp     ecx, 65521             ; 0000fff1H\r
300   00081 72 06            jb      SHORT $LN11@adler32\r
301 \r
302 ; 99   :             adler -= BASE;\r
303 \r
304   00083 81 e9 f1 ff 00\r
305         00               sub     ecx, 65521             ; 0000fff1H\r
306 $LN11@adler32:\r
307 \r
308 ; 100  :         MOD28(sum2);            /* only added so many BASE's */\r
309 \r
310   00089 b8 71 80 07 80   mov     eax, -2146992015       ; 80078071H\r
311   0008e f7 e7            mul     edi\r
312   00090 c1 ea 0f         shr     edx, 15                        ; 0000000fH\r
313 \r
314 ; 101  :         return adler | (sum2 << 16);\r
315 \r
316   00093 8b c2            mov     eax, edx\r
317   00095 c1 e0 04         shl     eax, 4\r
318   00098 2b c2            sub     eax, edx\r
319   0009a 03 c7            add     eax, edi\r
320   0009c 5e               pop     esi\r
321 \r
322 ; 129  :     }\r
323 ; 130  : \r
324 ; 131  :     /* return recombined sums */\r
325 ; 132  :     return adler | (sum2 << 16);\r
326 \r
327   0009d c1 e0 10         shl     eax, 16                        ; 00000010H\r
328   000a0 5f               pop     edi\r
329   000a1 0b c1            or      eax, ecx\r
330   000a3 5b               pop     ebx\r
331 \r
332 ; 133  : }\r
333 \r
334   000a4 5d               pop     ebp\r
335   000a5 c2 0c 00         ret     12                     ; 0000000cH\r
336 $LN22@adler32:\r
337 \r
338 ; 102  :     }\r
339 ; 103  : \r
340 ; 104  :     /* do length NMAX blocks -- requires just one modulo operation */\r
341 ; 105  :     while (len >= NMAX) {\r
342 \r
343   000a8 81 fb b0 15 00\r
344         00               cmp     ebx, 5552              ; 000015b0H\r
345   000ae 0f 82 d2 00 00\r
346         00               jb      $LN9@adler32\r
347   000b4 b8 af a9 6e 5e   mov     eax, 1584310703                ; 5e6ea9afH\r
348   000b9 f7 e3            mul     ebx\r
349   000bb c1 ea 0b         shr     edx, 11                        ; 0000000bH\r
350   000be 89 55 0c         mov     DWORD PTR tv884[ebp], edx\r
351 $LL10@adler32:\r
352 \r
353 ; 106  :         len -= NMAX;\r
354 \r
355   000c1 81 eb b0 15 00\r
356         00               sub     ebx, 5552              ; 000015b0H\r
357 \r
358 ; 107  :         n = NMAX / 16;          /* NMAX is divisible by 16 */\r
359 \r
360   000c7 b8 5b 01 00 00   mov     eax, 347               ; 0000015bH\r
361   000cc 8d 64 24 00      npad    4\r
362 $LL8@adler32:\r
363 \r
364 ; 108  :         do {\r
365 ; 109  :             DO16(buf);          /* 16 sums unrolled */\r
366 \r
367   000d0 0f b6 16         movzx   edx, BYTE PTR [esi]\r
368   000d3 03 ca            add     ecx, edx\r
369   000d5 0f b6 56 01      movzx   edx, BYTE PTR [esi+1]\r
370   000d9 03 f9            add     edi, ecx\r
371   000db 03 ca            add     ecx, edx\r
372   000dd 0f b6 56 02      movzx   edx, BYTE PTR [esi+2]\r
373   000e1 03 f9            add     edi, ecx\r
374   000e3 03 ca            add     ecx, edx\r
375   000e5 0f b6 56 03      movzx   edx, BYTE PTR [esi+3]\r
376   000e9 03 f9            add     edi, ecx\r
377   000eb 03 ca            add     ecx, edx\r
378   000ed 0f b6 56 04      movzx   edx, BYTE PTR [esi+4]\r
379   000f1 03 f9            add     edi, ecx\r
380   000f3 03 ca            add     ecx, edx\r
381   000f5 0f b6 56 05      movzx   edx, BYTE PTR [esi+5]\r
382   000f9 03 f9            add     edi, ecx\r
383   000fb 03 ca            add     ecx, edx\r
384   000fd 0f b6 56 06      movzx   edx, BYTE PTR [esi+6]\r
385   00101 03 f9            add     edi, ecx\r
386   00103 03 ca            add     ecx, edx\r
387   00105 0f b6 56 07      movzx   edx, BYTE PTR [esi+7]\r
388   00109 03 f9            add     edi, ecx\r
389   0010b 03 ca            add     ecx, edx\r
390   0010d 0f b6 56 08      movzx   edx, BYTE PTR [esi+8]\r
391   00111 03 f9            add     edi, ecx\r
392   00113 03 ca            add     ecx, edx\r
393   00115 0f b6 56 09      movzx   edx, BYTE PTR [esi+9]\r
394   00119 03 f9            add     edi, ecx\r
395   0011b 03 ca            add     ecx, edx\r
396   0011d 0f b6 56 0a      movzx   edx, BYTE PTR [esi+10]\r
397   00121 03 f9            add     edi, ecx\r
398   00123 03 ca            add     ecx, edx\r
399   00125 0f b6 56 0b      movzx   edx, BYTE PTR [esi+11]\r
400   00129 03 f9            add     edi, ecx\r
401   0012b 03 ca            add     ecx, edx\r
402   0012d 0f b6 56 0c      movzx   edx, BYTE PTR [esi+12]\r
403   00131 03 f9            add     edi, ecx\r
404   00133 03 ca            add     ecx, edx\r
405   00135 0f b6 56 0d      movzx   edx, BYTE PTR [esi+13]\r
406   00139 03 f9            add     edi, ecx\r
407   0013b 03 ca            add     ecx, edx\r
408   0013d 0f b6 56 0e      movzx   edx, BYTE PTR [esi+14]\r
409   00141 03 f9            add     edi, ecx\r
410   00143 03 ca            add     ecx, edx\r
411   00145 0f b6 56 0f      movzx   edx, BYTE PTR [esi+15]\r
412   00149 03 f9            add     edi, ecx\r
413   0014b 03 ca            add     ecx, edx\r
414   0014d 03 f9            add     edi, ecx\r
415 \r
416 ; 110  :             buf += 16;\r
417 \r
418   0014f 83 c6 10         add     esi, 16                        ; 00000010H\r
419 \r
420 ; 111  :         } while (--n);\r
421 \r
422   00152 48               dec     eax\r
423   00153 0f 85 77 ff ff\r
424         ff               jne     $LL8@adler32\r
425 \r
426 ; 112  :         MOD(adler);\r
427 \r
428   00159 b8 71 80 07 80   mov     eax, -2146992015       ; 80078071H\r
429   0015e f7 e1            mul     ecx\r
430   00160 c1 ea 0f         shr     edx, 15                        ; 0000000fH\r
431   00163 69 d2 0f 00 ff\r
432         ff               imul    edx, -65521            ; ffff000fH\r
433   00169 03 ca            add     ecx, edx\r
434 \r
435 ; 113  :         MOD(sum2);\r
436 \r
437   0016b b8 71 80 07 80   mov     eax, -2146992015       ; 80078071H\r
438   00170 f7 e7            mul     edi\r
439   00172 c1 ea 0f         shr     edx, 15                        ; 0000000fH\r
440   00175 69 d2 0f 00 ff\r
441         ff               imul    edx, -65521            ; ffff000fH\r
442   0017b 03 fa            add     edi, edx\r
443   0017d ff 4d 0c         dec     DWORD PTR tv884[ebp]\r
444   00180 0f 85 3b ff ff\r
445         ff               jne     $LL10@adler32\r
446 $LN9@adler32:\r
447 \r
448 ; 114  :     }\r
449 ; 115  : \r
450 ; 116  :     /* do remaining bytes (less than NMAX, still just one modulo) */\r
451 ; 117  :     if (len) {                  /* avoid modulos if none remaining */\r
452 \r
453   00186 85 db            test    ebx, ebx\r
454   00188 0f 84 d1 00 00\r
455         00               je      $LN5@adler32\r
456 \r
457 ; 118  :         while (len >= 16) {\r
458 \r
459   0018e 83 fb 10         cmp     ebx, 16                        ; 00000010H\r
460   00191 0f 82 95 00 00\r
461         00               jb      $LN32@adler32\r
462   00197 8b c3            mov     eax, ebx\r
463   00199 c1 e8 04         shr     eax, 4\r
464   0019c 8d 64 24 00      npad    4\r
465 $LL4@adler32:\r
466 \r
467 ; 119  :             len -= 16;\r
468 ; 120  :             DO16(buf);\r
469 \r
470   001a0 0f b6 16         movzx   edx, BYTE PTR [esi]\r
471   001a3 03 ca            add     ecx, edx\r
472   001a5 0f b6 56 01      movzx   edx, BYTE PTR [esi+1]\r
473   001a9 03 f9            add     edi, ecx\r
474   001ab 03 ca            add     ecx, edx\r
475   001ad 0f b6 56 02      movzx   edx, BYTE PTR [esi+2]\r
476   001b1 03 f9            add     edi, ecx\r
477   001b3 03 ca            add     ecx, edx\r
478   001b5 0f b6 56 03      movzx   edx, BYTE PTR [esi+3]\r
479   001b9 03 f9            add     edi, ecx\r
480   001bb 03 ca            add     ecx, edx\r
481   001bd 0f b6 56 04      movzx   edx, BYTE PTR [esi+4]\r
482   001c1 03 f9            add     edi, ecx\r
483   001c3 03 ca            add     ecx, edx\r
484   001c5 0f b6 56 05      movzx   edx, BYTE PTR [esi+5]\r
485   001c9 03 f9            add     edi, ecx\r
486   001cb 03 ca            add     ecx, edx\r
487   001cd 0f b6 56 06      movzx   edx, BYTE PTR [esi+6]\r
488   001d1 03 f9            add     edi, ecx\r
489   001d3 03 ca            add     ecx, edx\r
490   001d5 0f b6 56 07      movzx   edx, BYTE PTR [esi+7]\r
491   001d9 03 f9            add     edi, ecx\r
492   001db 03 ca            add     ecx, edx\r
493   001dd 0f b6 56 08      movzx   edx, BYTE PTR [esi+8]\r
494   001e1 03 f9            add     edi, ecx\r
495   001e3 03 ca            add     ecx, edx\r
496   001e5 0f b6 56 09      movzx   edx, BYTE PTR [esi+9]\r
497   001e9 03 f9            add     edi, ecx\r
498   001eb 03 ca            add     ecx, edx\r
499   001ed 0f b6 56 0a      movzx   edx, BYTE PTR [esi+10]\r
500   001f1 03 f9            add     edi, ecx\r
501   001f3 03 ca            add     ecx, edx\r
502   001f5 0f b6 56 0b      movzx   edx, BYTE PTR [esi+11]\r
503   001f9 03 f9            add     edi, ecx\r
504   001fb 03 ca            add     ecx, edx\r
505   001fd 0f b6 56 0c      movzx   edx, BYTE PTR [esi+12]\r
506   00201 03 f9            add     edi, ecx\r
507   00203 03 ca            add     ecx, edx\r
508   00205 0f b6 56 0d      movzx   edx, BYTE PTR [esi+13]\r
509   00209 03 f9            add     edi, ecx\r
510   0020b 03 ca            add     ecx, edx\r
511   0020d 0f b6 56 0e      movzx   edx, BYTE PTR [esi+14]\r
512   00211 03 f9            add     edi, ecx\r
513   00213 03 ca            add     ecx, edx\r
514   00215 0f b6 56 0f      movzx   edx, BYTE PTR [esi+15]\r
515   00219 03 f9            add     edi, ecx\r
516   0021b 03 ca            add     ecx, edx\r
517   0021d 83 eb 10         sub     ebx, 16                        ; 00000010H\r
518   00220 03 f9            add     edi, ecx\r
519 \r
520 ; 121  :             buf += 16;\r
521 \r
522   00222 83 c6 10         add     esi, 16                        ; 00000010H\r
523   00225 48               dec     eax\r
524   00226 0f 85 74 ff ff\r
525         ff               jne     $LL4@adler32\r
526 $LN32@adler32:\r
527 \r
528 ; 122  :         }\r
529 ; 123  :         while (len--) {\r
530 \r
531   0022c 85 db            test    ebx, ebx\r
532   0022e 74 0b            je      SHORT $LN30@adler32\r
533 $LL2@adler32:\r
534 \r
535 ; 124  :             adler += *buf++;\r
536 \r
537   00230 0f b6 06         movzx   eax, BYTE PTR [esi]\r
538   00233 03 c8            add     ecx, eax\r
539   00235 46               inc     esi\r
540 \r
541 ; 125  :             sum2 += adler;\r
542 \r
543   00236 03 f9            add     edi, ecx\r
544   00238 4b               dec     ebx\r
545   00239 75 f5            jne     SHORT $LL2@adler32\r
546 $LN30@adler32:\r
547 \r
548 ; 126  :         }\r
549 ; 127  :         MOD(adler);\r
550 \r
551   0023b b8 71 80 07 80   mov     eax, -2146992015       ; 80078071H\r
552   00240 f7 e1            mul     ecx\r
553   00242 c1 ea 0f         shr     edx, 15                        ; 0000000fH\r
554   00245 69 d2 0f 00 ff\r
555         ff               imul    edx, -65521            ; ffff000fH\r
556   0024b 03 ca            add     ecx, edx\r
557 \r
558 ; 128  :         MOD(sum2);\r
559 \r
560   0024d b8 71 80 07 80   mov     eax, -2146992015       ; 80078071H\r
561   00252 f7 e7            mul     edi\r
562   00254 c1 ea 0f         shr     edx, 15                        ; 0000000fH\r
563   00257 69 d2 0f 00 ff\r
564         ff               imul    edx, -65521            ; ffff000fH\r
565   0025d 03 fa            add     edi, edx\r
566 $LN5@adler32:\r
567 \r
568 ; 129  :     }\r
569 ; 130  : \r
570 ; 131  :     /* return recombined sums */\r
571 ; 132  :     return adler | (sum2 << 16);\r
572 \r
573   0025f 8b c7            mov     eax, edi\r
574   00261 5e               pop     esi\r
575   00262 c1 e0 10         shl     eax, 16                        ; 00000010H\r
576   00265 5f               pop     edi\r
577   00266 0b c1            or      eax, ecx\r
578   00268 5b               pop     ebx\r
579 \r
580 ; 133  : }\r
581 \r
582   00269 5d               pop     ebp\r
583   0026a c2 0c 00         ret     12                     ; 0000000cH\r
584 _adler32@12 ENDP\r
585 PUBLIC  _adler32_combine@12\r
586 ; Function compile flags: /Ogtp\r
587 ;       COMDAT _adler32_combine@12\r
588 _TEXT   SEGMENT\r
589 _adler1$ = 8                                            ; size = 4\r
590 _adler2$ = 12                                           ; size = 4\r
591 _len2$ = 16                                             ; size = 4\r
592 _adler32_combine@12 PROC                                ; COMDAT\r
593 \r
594 ; 169  : {\r
595 \r
596   00000 55               push    ebp\r
597   00001 8b ec            mov     ebp, esp\r
598 \r
599 ; 170  :     return adler32_combine_(adler1, adler2, len2);\r
600 \r
601   00003 8b 45 10         mov     eax, DWORD PTR _len2$[ebp]\r
602   00006 8b 4d 08         mov     ecx, DWORD PTR _adler1$[ebp]\r
603   00009 99               cdq\r
604   0000a 52               push    edx\r
605   0000b 50               push    eax\r
606   0000c 8b 45 0c         mov     eax, DWORD PTR _adler2$[ebp]\r
607   0000f e8 00 00 00 00   call    _adler32_combine_\r
608   00014 83 c4 08         add     esp, 8\r
609 \r
610 ; 171  : }\r
611 \r
612   00017 5d               pop     ebp\r
613   00018 c2 0c 00         ret     12                     ; 0000000cH\r
614 _adler32_combine@12 ENDP\r
615 END\r