xref: /llvm-project/libc/src/string/memory_utils/inline_memset.h (revision 2cc97951400ca2ab79d6bdeccffa6e431882a86e)
1 //===-- Implementation of memset and bzero --------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLVM_LIBC_SRC_STRING_MEMORY_UTILS_INLINE_MEMSET_H
10 #define LLVM_LIBC_SRC_STRING_MEMORY_UTILS_INLINE_MEMSET_H
11 
12 #include "src/__support/macros/attributes.h"               // LIBC_INLINE
13 #include "src/__support/macros/properties/architectures.h" // LIBC_TARGET_ARCH_IS_
14 #include "src/string/memory_utils/utils.h"                 // Ptr, CPtr
15 
16 #include <stddef.h> // size_t
17 
18 #if defined(LIBC_TARGET_ARCH_IS_X86)
19 #include "src/string/memory_utils/x86_64/inline_memset.h"
20 #define LIBC_SRC_STRING_MEMORY_UTILS_MEMSET inline_memset_x86
21 #elif defined(LIBC_TARGET_ARCH_IS_AARCH64)
22 #include "src/string/memory_utils/aarch64/inline_memset.h"
23 #define LIBC_SRC_STRING_MEMORY_UTILS_MEMSET inline_memset_aarch64
24 #elif defined(LIBC_TARGET_ARCH_IS_ANY_RISCV)
25 #include "src/string/memory_utils/riscv/inline_memset.h"
26 #define LIBC_SRC_STRING_MEMORY_UTILS_MEMSET inline_memset_riscv
27 #elif defined(LIBC_TARGET_ARCH_IS_ARM)
28 #include "src/string/memory_utils/generic/byte_per_byte.h"
29 #define LIBC_SRC_STRING_MEMORY_UTILS_MEMSET inline_memset_byte_per_byte
30 #elif defined(LIBC_TARGET_ARCH_IS_GPU)
31 #include "src/string/memory_utils/generic/builtin.h"
32 #define LIBC_SRC_STRING_MEMORY_UTILS_MEMSET inline_memset_builtin
33 #else
34 #error "Unsupported architecture"
35 #endif
36 
37 namespace LIBC_NAMESPACE_DECL {
38 
39 LIBC_INLINE static void inline_memset(void *dst, uint8_t value, size_t count) {
40   LIBC_SRC_STRING_MEMORY_UTILS_MEMSET(reinterpret_cast<Ptr>(dst), value, count);
41 }
42 
43 } // namespace LIBC_NAMESPACE_DECL
44 
45 #undef LIBC_SRC_STRING_MEMORY_UTILS_MEMSET
46 
47 #endif // LLVM_LIBC_SRC_STRING_MEMORY_UTILS_INLINE_MEMSET_H
48