Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/avr32/lib/memset.S
10817 views
1
/*
2
* Copyright (C) 2004-2006 Atmel Corporation
3
*
4
* Based on linux/arch/arm/lib/memset.S
5
* Copyright (C) 1995-2000 Russell King
6
*
7
* This program is free software; you can redistribute it and/or modify
8
* it under the terms of the GNU General Public License version 2 as
9
* published by the Free Software Foundation.
10
*
11
* ASM optimised string functions
12
*/
13
#include <asm/asm.h>
14
15
/*
16
* r12: void *b
17
* r11: int c
18
* r10: size_t len
19
*
20
* Returns b in r12
21
*/
22
.text
23
.global memset
24
.type memset, @function
25
.align 5
26
memset:
27
mov r9, r12
28
mov r8, r12
29
or r11, r11, r11 << 8
30
andl r9, 3, COH
31
brne 1f
32
33
2: or r11, r11, r11 << 16
34
sub r10, 4
35
brlt 5f
36
37
/* Let's do some real work */
38
4: st.w r8++, r11
39
sub r10, 4
40
brge 4b
41
42
/*
43
* When we get here, we've got less than 4 bytes to set. r10
44
* might be negative.
45
*/
46
5: sub r10, -4
47
reteq r12
48
49
/* Fastpath ends here, exactly 32 bytes from memset */
50
51
/* Handle unaligned count or pointer */
52
bld r10, 1
53
brcc 6f
54
st.b r8++, r11
55
st.b r8++, r11
56
bld r10, 0
57
retcc r12
58
6: st.b r8++, r11
59
retal r12
60
61
/* Handle unaligned pointer */
62
1: sub r10, 4
63
brlt 5b
64
add r10, r9
65
lsl r9, 1
66
add pc, r9
67
st.b r8++, r11
68
st.b r8++, r11
69
st.b r8++, r11
70
rjmp 2b
71
72
.size memset, . - memset
73
74