]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - arch/arc/lib/memset.S
Merge branch 'karo-tx-uboot' into kc-merge
[karo-tx-uboot.git] / arch / arc / lib / memset.S
1 /*
2  * Copyright (C) 2004, 2007-2010, 2011-2014 Synopsys, Inc. All rights reserved.
3  *
4  * SPDX-License-Identifier:     GPL-2.0+
5  */
6
7 #define SMALL   7 /* Must be at least 6 to deal with alignment/loop issues.  */
8
9 .global memset
10 .align 4
11 memset:
12         mov_s   %r4, %r0
13         or      %r12, %r0, %r2
14         bmsk.f  %r12, %r12, 1
15         extb_s  %r1, %r1
16         asl     %r3, %r1, 8
17         beq.d   .Laligned
18         or_s    %r1, %r1, %r3
19         brls    %r2, SMALL, .Ltiny
20         add     %r3, %r2, %r0
21         stb     %r1, [%r3, -1]
22         bclr_s  %r3, %r3, 0
23         stw     %r1, [%r3, -2]
24         bmsk.f  %r12, %r0, 1
25         add_s   %r2, %r2, %r12
26         sub.ne  %r2, %r2, 4
27         stb.ab  %r1, [%r4, 1]
28         and     %r4, %r4, -2
29         stw.ab  %r1, [%r4, 2]
30         and     %r4, %r4, -4
31
32         .balign 4
33 .Laligned:
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
50 /*
51  * memzero: @r0 = mem, @r1 = size_t
52  * memset:  @r0 = mem, @r1 = char, @r2 = size_t
53  */
54
55 .global memzero
56 .align 4
57 memzero:
58         /* adjust bzero args to memset args */
59         mov     %r2, %r1
60         mov     %r1, 0
61         /* tail call so need to tinker with blink */
62         b       memset