|  | /* | 
|  | * Copyright (C) 2004-2007 Atmel Corporation | 
|  | * | 
|  | * This file is subject to the terms and conditions of the GNU Lesser General | 
|  | * Public License.  See the file "COPYING.LIB" in the main directory of this | 
|  | * archive for more details. | 
|  | */ | 
|  |  | 
|  | #include <features.h> | 
|  |  | 
|  | #define s r12 | 
|  | #define c r11 | 
|  | #define n r10 | 
|  |  | 
|  | .text | 
|  | .global memset | 
|  | .type	memset, @function | 
|  |  | 
|  | .align	1 | 
|  | memset: | 
|  | cp.w	n, 32 | 
|  | mov	r9, s | 
|  | brge	.Llarge_memset | 
|  |  | 
|  | sub	n, 1 | 
|  | retlt	s | 
|  | 1:	st.b	s++, c | 
|  | sub	n, 1 | 
|  | brge	1b | 
|  |  | 
|  | retal	r9 | 
|  |  | 
|  | .Llarge_memset: | 
|  | mov	r8, r11 | 
|  | mov	r11, 3 | 
|  | bfins	r8, r8, 8, 8 | 
|  | bfins	r8, r8, 16, 16 | 
|  | tst	s, r11 | 
|  | breq	2f | 
|  |  | 
|  | 1:	st.b	s++, r8 | 
|  | sub	n, 1 | 
|  | tst	s, r11 | 
|  | brne	1b | 
|  |  | 
|  | 2:	mov	r11, r9 | 
|  | mov	r9, r8 | 
|  | sub	n, 8 | 
|  |  | 
|  | 3:	st.d	s++, r8 | 
|  | sub	n, 8 | 
|  | brge	3b | 
|  |  | 
|  | /* If we are done, n == -8 and we'll skip all st.b insns below */ | 
|  | neg	n | 
|  | lsl	n, 1 | 
|  | add	pc, n | 
|  | .rept	7 | 
|  | st.b	s++, r8 | 
|  | .endr | 
|  | retal	r11 | 
|  |  | 
|  | .size	memset, . - memset | 
|  |  | 
|  | libc_hidden_def(memset) |