Linux 2.6.17.7
[linux/fpc-iii.git] / arch / h8300 / lib / memset.S
blob59abdf9485a5af7f73591c0f076a61f9e3907517
1 /* memset.S */
3 #include <asm/linkage.h>
5 #if defined(__H8300H__) 
6         .h8300h
7 #endif
8 #if defined(__H8300S__) 
9         .h8300s
10 #endif
11         .text
13 .global SYMBOL_NAME(memset)
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
23         ;; odd address
25         mov.b   r1l,@er0
26         adds    #1,er0
27         dec.l   #1,er2
28         beq     6f
30         ;; even address
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
47         mov.l   er1,@er0
48         adds    #4,er0
49         dec.l   #1,er2
50         bne     3b
52         ;; count % 4
53         and.b   #3,r3l
54         beq     6f
56         mov.b   r1l,@er0
57         adds    #1,er0
58         dec.b   r3l
59         bne     5b
61         rts