]> git.proxmox.com Git - mirror_edk2.git/blob - ArmPkg/Library/CompilerIntrinsicsLib/memset.c
7271b4be6f962cc0d7758db837464b5410f9187a
[mirror_edk2.git] / ArmPkg / Library / CompilerIntrinsicsLib / memset.c
1 //------------------------------------------------------------------------------
2 //
3 // Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
4 //
5 // This program and the accompanying materials are licensed and made
6 // available under the terms and conditions of the BSD License which
7 // accompanies this distribution. The full text of the license may be
8 // found at http://opensource.org/licenses/bsd-license.php
9 //
10 // THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR
12 // IMPLIED.
13 //
14 //------------------------------------------------------------------------------
15
16 typedef __SIZE_TYPE__ size_t;
17
18 static __attribute__((__used__))
19 void *__memset(void *s, int c, size_t n)
20 {
21 unsigned char *d = s;
22
23 while (n--)
24 *d++ = c;
25
26 return s;
27 }
28
29 //
30 // Other modules (such as CryptoPkg/IntrinsicLib) may provide another
31 // implementation of memset(), which may conflict with this one if this
32 // object was pulled into the link due to the definitions below. So make
33 // our memset() 'weak' to let the other implementation take precedence.
34 //
35 __attribute__((__weak__, __alias__("__memset")))
36 void *memset(void *dest, int c, size_t n);
37
38 #ifdef __arm__
39
40 void __aeabi_memset(void *dest, size_t n, int c)
41 {
42 __memset(dest, c, n);
43 }
44
45 __attribute__((__alias__("__aeabi_memset")))
46 void __aeabi_memset4(void *dest, size_t n, int c);
47
48 __attribute__((__alias__("__aeabi_memset")))
49 void __aeabi_memset8(void *dest, size_t n, int c);
50
51 void __aeabi_memclr(void *dest, size_t n)
52 {
53 __memset(dest, 0, n);
54 }
55
56 __attribute__((__alias__("__aeabi_memclr")))
57 void __aeabi_memclr4(void *dest, size_t n);
58
59 __attribute__((__alias__("__aeabi_memclr")))
60 void __aeabi_memclr8(void *dest, size_t n);
61
62 #endif