xref: /aosp_15_r20/external/llvm-libc/src/string/memory_utils/inline_memset.h (revision 71db0c75aadcf003ffe3238005f61d7618a3fead)
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 
inline_memset(void * dst,uint8_t value,size_t count)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