blob: 9b2d88d2e14187c8d17b42b3f3a1ffa09bca3cdf [file] [log] [blame]
Vineet Gupta5210d1e2013-01-18 15:12:18 +05301/*
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 <asm/linkage.h>
10
11#define SMALL 7 /* Must be at least 6 to deal with alignment/loop issues. */
12
13ARC_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]
49ARC_EXIT memset
50
51; memzero: @r0 = mem, @r1 = size_t
52; memset: @r0 = mem, @r1 = char, @r2 = size_t
53
54ARC_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
59ARC_EXIT memzero