xref: /llvm-project/libc/src/string/memory_utils/inline_memset.h (revision b6bc9d72f65a5086f310f321e969d96e9a559e75)
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/config.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) || defined(LIBC_TARGET_ARCH_IS_GPU)
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 #else
31 #error "Unsupported architecture"
32 #endif
33 
34 namespace LIBC_NAMESPACE {
35 
36 LIBC_INLINE static void inline_memset(void *dst, uint8_t value, size_t count) {
37   LIBC_SRC_STRING_MEMORY_UTILS_MEMSET(reinterpret_cast<Ptr>(dst), value, count);
38 }
39 
40 } // namespace LIBC_NAMESPACE
41 
42 #undef LIBC_SRC_STRING_MEMORY_UTILS_MEMSET
43 
44 #endif // LLVM_LIBC_SRC_STRING_MEMORY_UTILS_INLINE_MEMSET_H
45