]> git.sur5r.net Git - cc65/blob - libsrc/common/memchr.s
Add LZ4 decompression support
[cc65] / libsrc / common / memchr.s
1 ;
2 ; Ullrich von Bassewitz, 2003-05-05
3 ;
4 ; void* __fastcall__ memchr (const void* p, int c, size_t n);
5 ;
6
7         .export         _memchr
8         .import         popax, return0
9         .importzp       ptr1, ptr2
10
11
12 .proc   _memchr
13
14         eor     #$FF
15         sta     ptr2
16         txa
17         eor     #$FF
18         sta     ptr2+1          ; Save ones complement of n
19         jsr     popax           ; get c
20         pha
21         jsr     popax           ; get p
22         sta     ptr1
23         stx     ptr1+1
24
25         ldy     #$00
26         pla                     ; Get c
27         ldx     ptr2            ; Use X as low counter byte
28
29 L1:     inx
30         beq     L3
31 L2:     cmp     (ptr1),y
32         beq     found
33         iny
34         bne     L1
35         inc     ptr1+1
36         bne     L1              ; Branch always
37
38 L3:     inc     ptr2+1          ; Bump counter high byte
39         bne     L2
40
41 ; Not found, return NULL
42
43 notfound:
44         jmp     return0
45
46 ; Found, return pointer to char
47
48 found:  ldx     ptr1+1          ; get high byte of pointer
49         tya                     ; low byte offset
50         clc
51         adc     ptr1
52         bcc     L9
53         inx
54 L9:     rts
55
56 .endproc
57