11f578347SGuillaume Chatelet //===-- Dispatch logic for bcmp -------------------------------------------===// 21f578347SGuillaume Chatelet // 31f578347SGuillaume Chatelet // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 41f578347SGuillaume Chatelet // See https://llvm.org/LICENSE.txt for license information. 51f578347SGuillaume Chatelet // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 61f578347SGuillaume Chatelet // 71f578347SGuillaume Chatelet //===----------------------------------------------------------------------===// 81f578347SGuillaume Chatelet 91f578347SGuillaume Chatelet #ifndef LLVM_LIBC_SRC_STRING_MEMORY_UTILS_INLINE_BCMP_H 101f578347SGuillaume Chatelet #define LLVM_LIBC_SRC_STRING_MEMORY_UTILS_INLINE_BCMP_H 111f578347SGuillaume Chatelet 121f578347SGuillaume Chatelet #include "src/__support/common.h" 13*5ff3ff33SPetr Hosek #include "src/__support/macros/config.h" 141f578347SGuillaume Chatelet #include "src/__support/macros/properties/architectures.h" // LIBC_TARGET_ARCH_IS_ 151f578347SGuillaume Chatelet 161f578347SGuillaume Chatelet #include <stddef.h> // size_t 171f578347SGuillaume Chatelet 181f578347SGuillaume Chatelet #if defined(LIBC_TARGET_ARCH_IS_X86) 191f578347SGuillaume Chatelet #include "src/string/memory_utils/x86_64/inline_bcmp.h" 201f578347SGuillaume Chatelet #define LIBC_SRC_STRING_MEMORY_UTILS_BCMP inline_bcmp_x86 211f578347SGuillaume Chatelet #elif defined(LIBC_TARGET_ARCH_IS_AARCH64) 221f578347SGuillaume Chatelet #include "src/string/memory_utils/aarch64/inline_bcmp.h" 231f578347SGuillaume Chatelet #define LIBC_SRC_STRING_MEMORY_UTILS_BCMP inline_bcmp_aarch64 241f578347SGuillaume Chatelet #elif defined(LIBC_TARGET_ARCH_IS_ANY_RISCV) 251f578347SGuillaume Chatelet #include "src/string/memory_utils/riscv/inline_bcmp.h" 261f578347SGuillaume Chatelet #define LIBC_SRC_STRING_MEMORY_UTILS_BCMP inline_bcmp_riscv 271f578347SGuillaume Chatelet #elif defined(LIBC_TARGET_ARCH_IS_ARM) || defined(LIBC_TARGET_ARCH_IS_GPU) 281f578347SGuillaume Chatelet #include "src/string/memory_utils/generic/byte_per_byte.h" 291f578347SGuillaume Chatelet #define LIBC_SRC_STRING_MEMORY_UTILS_BCMP inline_bcmp_byte_per_byte 301f578347SGuillaume Chatelet #else 311f578347SGuillaume Chatelet #error "Unsupported architecture" 321f578347SGuillaume Chatelet #endif 331f578347SGuillaume Chatelet 34*5ff3ff33SPetr Hosek namespace LIBC_NAMESPACE_DECL { 351f578347SGuillaume Chatelet 3664671dbeSGuillaume Chatelet [[gnu::flatten]] LIBC_INLINE int inline_bcmp(const void *p1, const void *p2, 3764671dbeSGuillaume Chatelet size_t count) { 381f578347SGuillaume Chatelet return static_cast<int>(LIBC_SRC_STRING_MEMORY_UTILS_BCMP( 391f578347SGuillaume Chatelet reinterpret_cast<CPtr>(p1), reinterpret_cast<CPtr>(p2), count)); 401f578347SGuillaume Chatelet } 411f578347SGuillaume Chatelet 42*5ff3ff33SPetr Hosek } // namespace LIBC_NAMESPACE_DECL 431f578347SGuillaume Chatelet 441f578347SGuillaume Chatelet #undef LIBC_SRC_STRING_MEMORY_UTILS_BCMP 451f578347SGuillaume Chatelet 461f578347SGuillaume Chatelet #endif // LLVM_LIBC_SRC_STRING_MEMORY_UTILS_INLINE_BCMP_H 47