2 ; Piotr Fusik, 18.11.2001
4 ; unsigned long __fastcall__ adler32 (unsigned long adler, unsigned char* buf,
10 .import incsp2, incsp4, popptr1, popeax
11 .importzp sreg, ptr1, ptr2, tmp1
13 BASE = 65521 ; largest prime smaller than 65536
16 ; ptr2 = (len & 0xff) == 0 ? len : len + 0x100;
24 ; if (buf == NULL) return 1L;
27 ; s1 = adler & 0xFFFF; s2 = adler >> 16;
29 ; if (len == 0) return adler;
35 ; s1 += *ptr++; if (s1 >= BASE) s1 -= BASE;
40 beq @L5 ; C flag is set
46 @L5: sbc #<BASE ; C flag is set
49 ; s2 += s1; if (s2 >= BASE) s2 -= BASE;
50 adc sreg ; C flag is clear
62 sbc #<BASE ; C flag is set
75 ; return (s2 << 16) | s1;