]>
Commit | Line | Data |
---|---|---|
5210d1e6 VG |
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 | ||
ec7ac6af | 9 | #include <linux/linkage.h> |
5210d1e6 VG |
10 | |
11 | #define SMALL 7 /* Must be at least 6 to deal with alignment/loop issues. */ | |
12 | ||
ec7ac6af | 13 | ENTRY(memset) |
5210d1e6 VG |
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] | |
ec7ac6af | 49 | END(memset) |
5210d1e6 VG |
50 | |
51 | ; memzero: @r0 = mem, @r1 = size_t | |
52 | ; memset: @r0 = mem, @r1 = char, @r2 = size_t | |
53 | ||
ec7ac6af | 54 | ENTRY(memzero) |
5210d1e6 VG |
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 | |
ec7ac6af | 59 | END(memzero) |