1
2
3
4#include <asm/linkage.h>
5
6
7 .h8300h
8#endif
9
10 .h8300s
11#endif
12 .text
13
14.global memset
15.global clear_user
16
17;;void *memset(*ptr, int c, size_t count)
18;; ptr = er0
19;; c = er1(r1l)
20;; count = er2
21memset:
22 btst
23 beq 2f
24
25 ;; odd address
261:
27 mov.b r1l,@er0
28 adds
29 dec.l
30 beq 6f
31
32 ;; even address
332:
34 mov.l er2,er3
35 cmp.l
36 blo 4f
37 ;; count>=4 -> count/4
38
39 shlr.l er2
40 shlr.l er2
41#endif
42
43 shlr.l
44#endif
45 ;; byte -> long
46 mov.b r1l,r1h
47 mov.w r1,e1
483:
49 mov.l er1,@er0
50 adds
51 dec.l
52 bne 3b
534:
54 ;; count % 4
55 and.b
56 beq 6f
575:
58 mov.b r1l,@er0
59 adds
60 dec.b r3l
61 bne 5b
626:
63 rts
64
65clear_user:
66 mov.l er1, er2
67 sub.l er1, er1
68 bra memset
69
70 .end
71