1 //===-- Implementation of memset and bzero --------------------------------===//
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
7 //===----------------------------------------------------------------------===//
9 #ifndef LLVM_LIBC_SRC_STRING_MEMORY_UTILS_INLINE_MEMSET_H
10 #define LLVM_LIBC_SRC_STRING_MEMORY_UTILS_INLINE_MEMSET_H
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
16 #include <stddef.h> // size_t
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
34 #error "Unsupported architecture"
37 namespace LIBC_NAMESPACE
{
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
);
43 } // namespace LIBC_NAMESPACE
45 #undef LIBC_SRC_STRING_MEMORY_UTILS_MEMSET
47 #endif // LLVM_LIBC_SRC_STRING_MEMORY_UTILS_INLINE_MEMSET_H