]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blob - arch/arc/lib/memset.S
Merge branch 'overlayfs-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszer...
[mirror_ubuntu-artful-kernel.git] / arch / arc / lib / memset.S
1 /*
2 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8
9 #include <linux/linkage.h>
10
11 #define SMALL 7 /* Must be at least 6 to deal with alignment/loop issues. */
12
13 ENTRY(memset)
14 mov_s r4,r0
15 or r12,r0,r2
16 bmsk.f r12,r12,1
17 extb_s r1,r1
18 asl r3,r1,8
19 beq.d .Laligned
20 or_s r1,r1,r3
21 brls r2,SMALL,.Ltiny
22 add r3,r2,r0
23 stb r1,[r3,-1]
24 bclr_s r3,r3,0
25 stw r1,[r3,-2]
26 bmsk.f r12,r0,1
27 add_s r2,r2,r12
28 sub.ne r2,r2,4
29 stb.ab r1,[r4,1]
30 and r4,r4,-2
31 stw.ab r1,[r4,2]
32 and r4,r4,-4
33 .Laligned: ; This code address should be aligned for speed.
34 asl r3,r1,16
35 lsr.f lp_count,r2,2
36 or_s r1,r1,r3
37 lpne .Loop_end
38 st.ab r1,[r4,4]
39 .Loop_end:
40 j_s [blink]
41
42 .balign 4
43 .Ltiny:
44 mov.f lp_count,r2
45 lpne .Ltiny_end
46 stb.ab r1,[r4,1]
47 .Ltiny_end:
48 j_s [blink]
49 END(memset)
50
51 ; memzero: @r0 = mem, @r1 = size_t
52 ; memset: @r0 = mem, @r1 = char, @r2 = size_t
53
54 ENTRY(memzero)
55 ; adjust bzero args to memset args
56 mov r2, r1
57 mov r1, 0
58 b memset ;tail call so need to tinker with blink
59 END(memzero)