/* * 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)