2 ; Lauri Kasanen, 6 Jun 2017
4 ; An optimized LZ4 decompressor
7 .importzp sp, sreg, regsave, regbank
8 .importzp tmp1, tmp2, tmp3, tmp4, ptr1, ptr2, ptr3, ptr4
10 .import memcpy_upwards,pushax,popax
11 .export _decompress_lz4
14 _written = regsave + 2
21 ; ---------------------------------------------------------------
22 ; void decompress_lz4 (const u8 *in, u8 * const out, const u16 outlen)
23 ; ---------------------------------------------------------------
27 .proc _decompress_lz4: near
46 ; while (written < outlen) {
61 ; offset = token >> 4;
72 ; token += 4; // Minmatch
121 ; memcpy(&out[written], in, offset);
160 ; if (written >= outlen)
172 ; memcpy(&offset, in, 2);
190 ; copysrc = out + written - offset;
248 ; memcpy(&out[written], copysrc, offset);
270 L0046: sta _written+1
272 ; while (written < outlen) {