Imported Upstream version 2.9.0
[debian/cc1111] / device / lib / gbz80 / asm_strings.s
1         ;; Implementation of some string functions in
2         ;; assembler.
3
4         ;; Why - because I want a better dhrystone score :)
5
6 ; char *strcpy(char *dest, const char *source)
7 _strcpy::
8         lda     hl,2(sp)
9         ld      e,(hl)
10         inc     hl
11         ld      d,(hl)
12         inc     hl
13         ld      a,(hl+)
14         ld      h,(hl)
15         ld      l,a
16
17         push    de
18 1$:
19         ld      a,(hl+)
20         ld      (de),a
21         inc     de
22         or      a,a
23         jr      NZ,1$
24
25         pop     de
26         ret
27
28 ; void *memcpy(void *dest, const void *source, int count)
29 _memcpy::
30         push    bc
31         lda     hl,6(sp)
32         ld      e,(hl)
33         inc     hl
34         ld      d,(hl)
35         inc     hl
36         ld      c,(hl)
37         inc     hl
38         ld      b,(hl)
39         lda     hl,4(sp)
40         ld      a,(hl+)
41         ld      h,(hl)
42         ld      l,a
43
44         inc     b
45         inc     c
46         push    hl
47
48         jr      2$
49 1$:
50         ld      a,(de)
51         ld      (hl+),a
52         inc     de
53 2$:
54         dec     c
55         jr      NZ,1$
56         dec     b
57         jr      NZ,1$
58
59         pop     de
60         pop     bc
61         ret
62
63 ; int strcmp(const char *s1, const char *s2)
64 _strcmp::
65         lda     hl,2(sp)
66         ld      e,(hl)
67         inc     hl
68         ld      d,(hl)
69         inc     hl
70         ld      a,(hl+)
71         ld      h,(hl)
72         ld      l,a
73
74         jr      1$
75 2$:
76         ld      a,(de)
77         sub     (hl)
78         jr      NZ,4$
79         ;; A == 0
80         cp      (hl)
81         jr      Z,3$
82 1$:
83         inc     de
84         inc     hl
85         jr      2$
86
87 3$:
88         ld      de,#0
89         jr      5$
90 4$:
91         ld      de,#1
92         jr      nc,5$
93         ld      de,#-1
94 5$:
95         ret