blob: 472b2be35f80f62877f96590cf2dd06fde9930ce [file] [log] [blame]
lh9ed821d2023-04-07 01:36:19 -07001/*
2 * Copyright (C) 2004-2007 Atmel Corporation
3 *
4 * This file is subject to the terms and conditions of the GNU Lesser General
5 * Public License. See the file "COPYING.LIB" in the main directory of this
6 * archive for more details.
7 */
8
9#include <features.h>
10
11#define s r12
12#define c r11
13#define n r10
14
15 .text
16 .global memset
17 .type memset, @function
18
19 .align 1
20memset:
21 cp.w n, 32
22 mov r9, s
23 brge .Llarge_memset
24
25 sub n, 1
26 retlt s
271: st.b s++, c
28 sub n, 1
29 brge 1b
30
31 retal r9
32
33.Llarge_memset:
34 mov r8, r11
35 mov r11, 3
36 bfins r8, r8, 8, 8
37 bfins r8, r8, 16, 16
38 tst s, r11
39 breq 2f
40
411: st.b s++, r8
42 sub n, 1
43 tst s, r11
44 brne 1b
45
462: mov r11, r9
47 mov r9, r8
48 sub n, 8
49
503: st.d s++, r8
51 sub n, 8
52 brge 3b
53
54 /* If we are done, n == -8 and we'll skip all st.b insns below */
55 neg n
56 lsl n, 1
57 add pc, n
58 .rept 7
59 st.b s++, r8
60 .endr
61 retal r11
62
63 .size memset, . - memset
64
65libc_hidden_def(memset)