File: memset.S

package info (click to toggle)
u-boot 2014.10%2Bdfsg1-5
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 86,340 kB
  • ctags: 382,377
  • sloc: ansic: 1,071,015; asm: 34,076; perl: 8,007; python: 6,290; makefile: 5,210; sh: 2,297; cpp: 1,826; php: 1,299; yacc: 604; lex: 363; sql: 71; tcl: 28; sed: 14; awk: 6
file content (62 lines) | stat: -rw-r--r-- 1,118 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/*
 * Copyright (C) 2004, 2007-2010, 2011-2014 Synopsys, Inc. All rights reserved.
 *
 * SPDX-License-Identifier:	GPL-2.0+
 */

#define SMALL	7 /* Must be at least 6 to deal with alignment/loop issues.  */

.global memset
.align 4
memset:
	mov_s	%r4, %r0
	or	%r12, %r0, %r2
	bmsk.f	%r12, %r12, 1
	extb_s	%r1, %r1
	asl	%r3, %r1, 8
	beq.d	.Laligned
	or_s	%r1, %r1, %r3
	brls	%r2, SMALL, .Ltiny
	add	%r3, %r2, %r0
	stb	%r1, [%r3, -1]
	bclr_s	%r3, %r3, 0
	stw	%r1, [%r3, -2]
	bmsk.f	%r12, %r0, 1
	add_s	%r2, %r2, %r12
	sub.ne	%r2, %r2, 4
	stb.ab	%r1, [%r4, 1]
	and	%r4, %r4, -2
	stw.ab	%r1, [%r4, 2]
	and	%r4, %r4, -4

	.balign	4
.Laligned:
	asl	%r3, %r1, 16
	lsr.f	%lp_count, %r2, 2
	or_s	%r1, %r1, %r3
	lpne	.Loop_end
	st.ab	%r1, [%r4, 4]
.Loop_end:
	j_s	[%blink]

	.balign	4
.Ltiny:
	mov.f	%lp_count, %r2
	lpne	.Ltiny_end
	stb.ab	%r1, [%r4, 1]
.Ltiny_end:
	j_s	[%blink]

/*
 * memzero: @r0 = mem, @r1 = size_t
 * memset:  @r0 = mem, @r1 = char, @r2 = size_t
 */

.global memzero
.align 4
memzero:
	/* adjust bzero args to memset args */
	mov	%r2, %r1
	mov	%r1, 0
	/* tail call so need to tinker with blink */
	b	memset