]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blob - arch/h8300/lib/memset.S
Linux-2.6.12-rc2
[mirror_ubuntu-bionic-kernel.git] / arch / h8300 / lib / memset.S
1 /* memset.S */
2
3 #include <asm/linkage.h>
4
5 #if defined(__H8300H__)
6 .h8300h
7 #endif
8 #if defined(__H8300S__)
9 .h8300s
10 #endif
11 .text
12
13 .global SYMBOL_NAME(memset)
14
15 ;;void *memset(*ptr, int c, size_t count)
16 ;; ptr = er0
17 ;; c = er1(r1l)
18 ;; count = er2
19 SYMBOL_NAME_LABEL(memset)
20 btst #0,r0l
21 beq 2f
22
23 ;; odd address
24 1:
25 mov.b r1l,@er0
26 adds #1,er0
27 dec.l #1,er2
28 beq 6f
29
30 ;; even address
31 2:
32 mov.l er2,er3
33 cmp.l #4,er2
34 blo 4f
35 ;; count>=4 -> count/4
36 #if defined(__H8300H__)
37 shlr.l er2
38 shlr.l er2
39 #endif
40 #if defined(__H8300S__)
41 shlr.l #2,er2
42 #endif
43 ;; byte -> long
44 mov.b r1l,r1h
45 mov.w r1,e1
46 3:
47 mov.l er1,@er0
48 adds #4,er0
49 dec.l #1,er2
50 bne 3b
51 4:
52 ;; count % 4
53 and.b #3,r3l
54 beq 6f
55 5:
56 mov.b r1l,@er0
57 adds #1,er0
58 dec.b r3l
59 bne 5b
60 6:
61 rts