blob: 9f35960da114182706158037dff960f400088d4a [file] [log] [blame]
Thomas Gleixnerd2912cb2019-06-04 10:11:33 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Vineet Gupta5210d1e2013-01-18 15:12:18 +05302/*
3 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
Vineet Gupta5210d1e2013-01-18 15:12:18 +05304 */
5
Vineet Guptaec7ac6a2014-02-07 13:47:43 +05306#include <linux/linkage.h>
Vineet Gupta5210d1e2013-01-18 15:12:18 +05307
8#define SMALL 7 /* Must be at least 6 to deal with alignment/loop issues. */
9
Vineet Gupta86effd02016-09-19 16:42:25 -070010ENTRY_CFI(memset)
Vineet Gupta5210d1e2013-01-18 15:12:18 +053011 mov_s r4,r0
12 or r12,r0,r2
13 bmsk.f r12,r12,1
14 extb_s r1,r1
15 asl r3,r1,8
16 beq.d .Laligned
17 or_s r1,r1,r3
18 brls r2,SMALL,.Ltiny
19 add r3,r2,r0
20 stb r1,[r3,-1]
21 bclr_s r3,r3,0
22 stw r1,[r3,-2]
23 bmsk.f r12,r0,1
24 add_s r2,r2,r12
25 sub.ne r2,r2,4
26 stb.ab r1,[r4,1]
27 and r4,r4,-2
28 stw.ab r1,[r4,2]
29 and r4,r4,-4
30.Laligned: ; This code address should be aligned for speed.
31 asl r3,r1,16
32 lsr.f lp_count,r2,2
33 or_s r1,r1,r3
34 lpne .Loop_end
35 st.ab r1,[r4,4]
36.Loop_end:
37 j_s [blink]
38
39 .balign 4
40.Ltiny:
41 mov.f lp_count,r2
42 lpne .Ltiny_end
43 stb.ab r1,[r4,1]
44.Ltiny_end:
45 j_s [blink]
Vineet Gupta86effd02016-09-19 16:42:25 -070046END_CFI(memset)
Vineet Gupta5210d1e2013-01-18 15:12:18 +053047
48; memzero: @r0 = mem, @r1 = size_t
49; memset: @r0 = mem, @r1 = char, @r2 = size_t
50
Vineet Gupta86effd02016-09-19 16:42:25 -070051ENTRY_CFI(memzero)
Vineet Gupta5210d1e2013-01-18 15:12:18 +053052 ; adjust bzero args to memset args
53 mov r2, r1
54 mov r1, 0
55 b memset ;tail call so need to tinker with blink
Vineet Gupta86effd02016-09-19 16:42:25 -070056END_CFI(memzero)