Merge branch 'next' into for-linus
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / arch / sh / lib / memset.S
1 /* $Id: memset.S,v 1.1 2000/04/14 16:49:01 mjd Exp $
2 *
3 * "memset" implementation of SuperH
4 *
5 * Copyright (C) 1999 Niibe Yutaka
6 *
7 */
8
9 /*
10 * void *memset(void *s, int c, size_t n);
11 */
12
13 #include <linux/linkage.h>
14
15 ENTRY(memset)
16 tst r6,r6
17 bt/s 5f ! if n=0, do nothing
18 add r6,r4
19 mov #12,r0
20 cmp/gt r6,r0
21 bt/s 4f ! if it's too small, set a byte at once
22 mov r4,r0
23 and #3,r0
24 cmp/eq #0,r0
25 bt/s 2f ! It's aligned
26 sub r0,r6
27 1:
28 dt r0
29 bf/s 1b
30 mov.b r5,@-r4
31 2: ! make VVVV
32 extu.b r5,r5
33 swap.b r5,r0 ! V0
34 or r0,r5 ! VV
35 swap.w r5,r0 ! VV00
36 or r0,r5 ! VVVV
37 !
38 mov r6,r0
39 shlr2 r0
40 shlr r0 ! r0 = r6 >> 3
41 3:
42 dt r0
43 mov.l r5,@-r4 ! set 8-byte at once
44 bf/s 3b
45 mov.l r5,@-r4
46 !
47 mov #7,r0
48 and r0,r6
49 tst r6,r6
50 bt 5f
51 ! fill bytes
52 4:
53 dt r6
54 bf/s 4b
55 mov.b r5,@-r4
56 5:
57 rts
58 mov r4,r0