Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
a71a29de YS |
2 | /* memset.S */ |
3 | ||
4 | #include <asm/linkage.h> | |
5 | ||
6 | #if defined(CONFIG_CPU_H8300H) | |
7 | .h8300h | |
8 | #endif | |
9 | #if defined(CONFIG_CPU_H8S) | |
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 | |
21 | memset: | |
22 | btst #0,r0l | |
23 | beq 2f | |
24 | ||
25 | ;; odd address | |
26 | 1: | |
27 | mov.b r1l,@er0 | |
28 | adds #1,er0 | |
29 | dec.l #1,er2 | |
30 | beq 6f | |
31 | ||
32 | ;; even address | |
33 | 2: | |
34 | mov.l er2,er3 | |
35 | cmp.l #4,er2 | |
36 | blo 4f | |
37 | ;; count>=4 -> count/4 | |
38 | #if defined(CONFIG_CPU_H8300H) | |
39 | shlr.l er2 | |
40 | shlr.l er2 | |
41 | #endif | |
42 | #if defined(CONFIG_CPU_H8S) | |
43 | shlr.l #2,er2 | |
44 | #endif | |
45 | ;; byte -> long | |
46 | mov.b r1l,r1h | |
47 | mov.w r1,e1 | |
48 | 3: | |
49 | mov.l er1,@er0 | |
50 | adds #4,er0 | |
51 | dec.l #1,er2 | |
52 | bne 3b | |
53 | 4: | |
54 | ;; count % 4 | |
55 | and.b #3,r3l | |
56 | beq 6f | |
57 | 5: | |
58 | mov.b r1l,@er0 | |
59 | adds #1,er0 | |
60 | dec.b r3l | |
61 | bne 5b | |
62 | 6: | |
63 | rts | |
64 | ||
65 | clear_user: | |
66 | mov.l er1, er2 | |
67 | sub.l er1, er1 | |
68 | bra memset | |
69 | ||
70 | .end |