xref: /rk3399_rockchip-uboot/arch/arc/lib/memset.S (revision 1ad6364eeb4f578e423081d1748e8a3fdf1ab01d)
1*22723828SAlexey Brodkin/*
2*22723828SAlexey Brodkin * Copyright (C) 2004, 2007-2010, 2011-2014 Synopsys, Inc. All rights reserved.
3*22723828SAlexey Brodkin *
4*22723828SAlexey Brodkin * SPDX-License-Identifier:	GPL-2.0+
5*22723828SAlexey Brodkin */
6*22723828SAlexey Brodkin
7*22723828SAlexey Brodkin#define SMALL	7 /* Must be at least 6 to deal with alignment/loop issues.  */
8*22723828SAlexey Brodkin
9*22723828SAlexey Brodkin.global memset
10*22723828SAlexey Brodkin.align 4
11*22723828SAlexey Brodkinmemset:
12*22723828SAlexey Brodkin	mov_s	%r4, %r0
13*22723828SAlexey Brodkin	or	%r12, %r0, %r2
14*22723828SAlexey Brodkin	bmsk.f	%r12, %r12, 1
15*22723828SAlexey Brodkin	extb_s	%r1, %r1
16*22723828SAlexey Brodkin	asl	%r3, %r1, 8
17*22723828SAlexey Brodkin	beq.d	.Laligned
18*22723828SAlexey Brodkin	or_s	%r1, %r1, %r3
19*22723828SAlexey Brodkin	brls	%r2, SMALL, .Ltiny
20*22723828SAlexey Brodkin	add	%r3, %r2, %r0
21*22723828SAlexey Brodkin	stb	%r1, [%r3, -1]
22*22723828SAlexey Brodkin	bclr_s	%r3, %r3, 0
23*22723828SAlexey Brodkin	stw	%r1, [%r3, -2]
24*22723828SAlexey Brodkin	bmsk.f	%r12, %r0, 1
25*22723828SAlexey Brodkin	add_s	%r2, %r2, %r12
26*22723828SAlexey Brodkin	sub.ne	%r2, %r2, 4
27*22723828SAlexey Brodkin	stb.ab	%r1, [%r4, 1]
28*22723828SAlexey Brodkin	and	%r4, %r4, -2
29*22723828SAlexey Brodkin	stw.ab	%r1, [%r4, 2]
30*22723828SAlexey Brodkin	and	%r4, %r4, -4
31*22723828SAlexey Brodkin
32*22723828SAlexey Brodkin	.balign	4
33*22723828SAlexey Brodkin.Laligned:
34*22723828SAlexey Brodkin	asl	%r3, %r1, 16
35*22723828SAlexey Brodkin	lsr.f	%lp_count, %r2, 2
36*22723828SAlexey Brodkin	or_s	%r1, %r1, %r3
37*22723828SAlexey Brodkin	lpne	.Loop_end
38*22723828SAlexey Brodkin	st.ab	%r1, [%r4, 4]
39*22723828SAlexey Brodkin.Loop_end:
40*22723828SAlexey Brodkin	j_s	[%blink]
41*22723828SAlexey Brodkin
42*22723828SAlexey Brodkin	.balign	4
43*22723828SAlexey Brodkin.Ltiny:
44*22723828SAlexey Brodkin	mov.f	%lp_count, %r2
45*22723828SAlexey Brodkin	lpne	.Ltiny_end
46*22723828SAlexey Brodkin	stb.ab	%r1, [%r4, 1]
47*22723828SAlexey Brodkin.Ltiny_end:
48*22723828SAlexey Brodkin	j_s	[%blink]
49*22723828SAlexey Brodkin
50*22723828SAlexey Brodkin/*
51*22723828SAlexey Brodkin * memzero: @r0 = mem, @r1 = size_t
52*22723828SAlexey Brodkin * memset:  @r0 = mem, @r1 = char, @r2 = size_t
53*22723828SAlexey Brodkin */
54*22723828SAlexey Brodkin
55*22723828SAlexey Brodkin.global memzero
56*22723828SAlexey Brodkin.align 4
57*22723828SAlexey Brodkinmemzero:
58*22723828SAlexey Brodkin	/* adjust bzero args to memset args */
59*22723828SAlexey Brodkin	mov	%r2, %r1
60*22723828SAlexey Brodkin	mov	%r1, 0
61*22723828SAlexey Brodkin	/* tail call so need to tinker with blink */
62*22723828SAlexey Brodkin	b	memset
63