2 ; Piotr Fusik, 18.11.2001
4 ; unsigned long __fastcall__ adler32 (unsigned long adler, unsigned char* buf,
10 .import incsp2, incsp4, popax, popeax
11 .importzp sreg, ptr1, ptr2, tmp1
13 BASE = 65521 ; largest prime smaller than 65536
16 ; ptr2 = (len & 0xff) == 0 ? len : len + 0x100;
26 ; if (buf == NULL) return 1L;
29 ; s1 = adler & 0xFFFF; s2 = adler >> 16;
31 ; if (len == 0) return adler;
37 ; s1 += *ptr++; if (s1 >= BASE) s1 -= BASE;
42 beq @L5 ; C flag is set
48 @L5: sbc #<BASE ; C flag is set
51 ; s2 += s1; if (s2 >= BASE) s2 -= BASE;
52 adc sreg ; C flag is clear
64 sbc #<BASE ; C flag is set
77 ; return (s2 << 16) | s1;