[libc-commits] [libc] f7e91f2 - [libc] Add riscv64 config.
Siva Chandra via libc-commits
libc-commits at lists.llvm.org
Mon Mar 6 15:04:03 PST 2023
Author: Siva Chandra
Date: 2023-03-06T23:03:43Z
New Revision: f7e91f2b824a2abe50433febe506b9aeb36245d9
URL: https://github.com/llvm/llvm-project/commit/f7e91f2b824a2abe50433febe506b9aeb36245d9
DIFF: https://github.com/llvm/llvm-project/commit/f7e91f2b824a2abe50433febe506b9aeb36245d9.diff
LOG: [libc] Add riscv64 config.
Memory functions get the basic implementation. They can be tuned
as a follow up.
Reviewed By: michaelrj, lntue
Differential Revision: https://reviews.llvm.org/D145433
Added:
libc/config/linux/riscv64/entrypoints.txt
libc/config/linux/riscv64/headers.txt
Modified:
libc/cmake/modules/LLVMLibCArchitectures.cmake
libc/src/string/memory_utils/bcmp_implementations.h
libc/src/string/memory_utils/memcmp_implementations.h
libc/src/string/memory_utils/memcpy_implementations.h
libc/src/string/memory_utils/memmove_implementations.h
libc/src/string/memory_utils/memset_implementations.h
Removed:
################################################################################
diff --git a/libc/cmake/modules/LLVMLibCArchitectures.cmake b/libc/cmake/modules/LLVMLibCArchitectures.cmake
index e2ae2e3af217..77d2b5453e03 100644
--- a/libc/cmake/modules/LLVMLibCArchitectures.cmake
+++ b/libc/cmake/modules/LLVMLibCArchitectures.cmake
@@ -55,6 +55,8 @@ function(get_arch_and_system_from_triple triple arch_var sys_var)
set(target_arch "x86_64")
elseif(target_arch MATCHES "^(powerpc|ppc)")
set(target_arch "power")
+ elseif(target_arch MATCHES "^riscv64")
+ set(target_arch "riscv64")
else()
return()
endif()
@@ -146,6 +148,8 @@ elseif(LIBC_TARGET_ARCHITECTURE STREQUAL "aarch64")
set(LIBC_TARGET_ARCHITECTURE_IS_AARCH64 TRUE)
elseif(LIBC_TARGET_ARCHITECTURE STREQUAL "x86_64")
set(LIBC_TARGET_ARCHITECTURE_IS_X86 TRUE)
+elseif(LIBC_TARGET_ARCHITECTURE STREQUAL "riscv64")
+ set(LIBC_TARGET_ARCHITECTURE_IS_RISCV64 TRUE)
else()
message(FATAL_ERROR
"Unsupported libc target architecture ${LIBC_TARGET_ARCHITECTURE}")
diff --git a/libc/config/linux/riscv64/entrypoints.txt b/libc/config/linux/riscv64/entrypoints.txt
new file mode 100644
index 000000000000..183cf1b66a88
--- /dev/null
+++ b/libc/config/linux/riscv64/entrypoints.txt
@@ -0,0 +1,106 @@
+set(TARGET_LIBC_ENTRYPOINTS
+ # ctype.h entrypoints
+ libc.src.ctype.isalnum
+ libc.src.ctype.isalpha
+ libc.src.ctype.isascii
+ libc.src.ctype.isblank
+ libc.src.ctype.iscntrl
+ libc.src.ctype.isdigit
+ libc.src.ctype.isgraph
+ libc.src.ctype.islower
+ libc.src.ctype.isprint
+ libc.src.ctype.ispunct
+ libc.src.ctype.isspace
+ libc.src.ctype.isupper
+ libc.src.ctype.isxdigit
+ libc.src.ctype.toascii
+ libc.src.ctype.tolower
+ libc.src.ctype.toupper
+
+ # errno.h entrypoints
+ libc.src.errno.errno
+
+ # string.h entrypoints
+ libc.src.string.bcmp
+ libc.src.string.bcopy
+ libc.src.string.bzero
+ libc.src.string.memccpy
+ libc.src.string.memchr
+ libc.src.string.memcmp
+ libc.src.string.memcpy
+ libc.src.string.memmove
+ libc.src.string.mempcpy
+ libc.src.string.memrchr
+ libc.src.string.memset
+ libc.src.string.stpcpy
+ libc.src.string.stpncpy
+ libc.src.string.strcasecmp
+ libc.src.string.strcasestr
+ libc.src.string.strcat
+ libc.src.string.strchr
+ libc.src.string.strcmp
+ libc.src.string.strcpy
+ libc.src.string.strcspn
+ libc.src.string.strlcat
+ libc.src.string.strlcpy
+ libc.src.string.strlen
+ libc.src.string.strncasecmp
+ libc.src.string.strncat
+ libc.src.string.strncmp
+ libc.src.string.strncpy
+ libc.src.string.strnlen
+ libc.src.string.strpbrk
+ libc.src.string.strrchr
+ libc.src.string.strspn
+ libc.src.string.strstr
+ libc.src.string.strtok
+ libc.src.string.strtok_r
+
+ # inttypes.h entrypoints
+ libc.src.inttypes.imaxabs
+ libc.src.inttypes.imaxdiv
+ libc.src.inttypes.strtoimax
+ libc.src.inttypes.strtoumax
+
+ # stdlib.h entrypoints
+ libc.src.stdlib.abs
+ libc.src.stdlib.atoi
+ libc.src.stdlib.atof
+ libc.src.stdlib.atol
+ libc.src.stdlib.atoll
+ libc.src.stdlib.bsearch
+ libc.src.stdlib.div
+ libc.src.stdlib.labs
+ libc.src.stdlib.ldiv
+ libc.src.stdlib.llabs
+ libc.src.stdlib.lldiv
+ libc.src.stdlib.qsort
+ libc.src.stdlib.strtod
+ libc.src.stdlib.strtof
+ libc.src.stdlib.strtol
+ libc.src.stdlib.strtold
+ libc.src.stdlib.strtoll
+ libc.src.stdlib.strtoul
+ libc.src.stdlib.strtoull
+)
+
+set(TARGET_LIBM_ENTRYPOINTS
+ # math.h entrypoints
+ libc.src.math.fabs
+ libc.src.math.fabsf
+ libc.src.math.fabsl
+ libc.src.math.fdim
+ libc.src.math.fdimf
+ libc.src.math.fdiml
+ libc.src.math.fmax
+ libc.src.math.fmaxf
+ libc.src.math.fmaxl
+ libc.src.math.fmin
+ libc.src.math.fminf
+ libc.src.math.fminl
+)
+
+set(TARGET_LLVMLIBC_ENTRYPOINTS
+ ${TARGET_LIBC_ENTRYPOINTS}
+ ${TARGET_LIBM_ENTRYPOINTS}
+)
diff --git a/libc/config/linux/riscv64/headers.txt b/libc/config/linux/riscv64/headers.txt
new file mode 100644
index 000000000000..cc436c7119f4
--- /dev/null
+++ b/libc/config/linux/riscv64/headers.txt
@@ -0,0 +1,8 @@
+set(TARGET_PUBLIC_HEADERS
+ libc.include.ctype
+ libc.include.errno
+ libc.include.inttypes
+ libc.include.math
+ libc.include.stdlib
+ libc.include.string
+)
diff --git a/libc/src/string/memory_utils/bcmp_implementations.h b/libc/src/string/memory_utils/bcmp_implementations.h
index 483d3c2f98c9..1c238cb88398 100644
--- a/libc/src/string/memory_utils/bcmp_implementations.h
+++ b/libc/src/string/memory_utils/bcmp_implementations.h
@@ -167,12 +167,8 @@ LIBC_INLINE BcmpReturnType inline_bcmp(CPtr p1, CPtr p2, size_t count) {
return inline_bcmp_x86(p1, p2, count);
#elif defined(LIBC_TARGET_ARCH_IS_AARCH64)
return inline_bcmp_aarch64(p1, p2, count);
-#elif defined(LIBC_TARGET_ARCH_IS_ARM)
- return inline_bcmp_embedded_tiny(p1, p2, count);
-#elif defined(LIBC_TARGET_ARCH_IS_GPU)
- return inline_bcmp_embedded_tiny(p1, p2, count);
#else
-#error "Unsupported platform"
+ return inline_bcmp_embedded_tiny(p1, p2, count);
#endif
}
diff --git a/libc/src/string/memory_utils/memcmp_implementations.h b/libc/src/string/memory_utils/memcmp_implementations.h
index f99e2e47a830..01c524d6aa33 100644
--- a/libc/src/string/memory_utils/memcmp_implementations.h
+++ b/libc/src/string/memory_utils/memcmp_implementations.h
@@ -139,12 +139,8 @@ LIBC_INLINE MemcmpReturnType inline_memcmp(CPtr p1, CPtr p2, size_t count) {
else
return inline_memcmp_generic_gt16(p1, p2, count);
#endif
-#elif defined(LIBC_TARGET_ARCH_IS_ARM)
- return inline_memcmp_embedded_tiny(p1, p2, count);
-#elif defined(LIBC_TARGET_ARCH_IS_GPU)
- return inline_memcmp_embedded_tiny(p1, p2, count);
#else
-#error "Unsupported platform"
+ return inline_memcmp_embedded_tiny(p1, p2, count);
#endif
}
diff --git a/libc/src/string/memory_utils/memcpy_implementations.h b/libc/src/string/memory_utils/memcpy_implementations.h
index f0344b3319bb..b1b60ff590d5 100644
--- a/libc/src/string/memory_utils/memcpy_implementations.h
+++ b/libc/src/string/memory_utils/memcpy_implementations.h
@@ -36,15 +36,14 @@ inline_memcpy_embedded_tiny(Ptr __restrict dst, CPtr __restrict src,
LIBC_INLINE void inline_memcpy(Ptr __restrict dst, CPtr __restrict src,
size_t count) {
using namespace __llvm_libc::builtin;
-#if defined(LIBC_COPT_MEMCPY_USE_EMBEDDED_TINY) || \
- defined(LIBC_TARGET_ARCH_IS_ARM) || defined(LIBC_TARGET_ARCH_IS_GPU)
+#if defined(LIBC_COPT_MEMCPY_USE_EMBEDDED_TINY)
return inline_memcpy_embedded_tiny(dst, src, count);
#elif defined(LIBC_TARGET_ARCH_IS_X86)
return inline_memcpy_x86_maybe_interpose_repmovsb(dst, src, count);
#elif defined(LIBC_TARGET_ARCH_IS_AARCH64)
return inline_memcpy_aarch64(dst, src, count);
#else
-#error "Unsupported platform"
+ return inline_memcpy_embedded_tiny(dst, src, count);
#endif
}
diff --git a/libc/src/string/memory_utils/memmove_implementations.h b/libc/src/string/memory_utils/memmove_implementations.h
index 2d920daf4708..1eb6d4e7e235 100644
--- a/libc/src/string/memory_utils/memmove_implementations.h
+++ b/libc/src/string/memory_utils/memmove_implementations.h
@@ -102,12 +102,8 @@ LIBC_INLINE void inline_memmove(Ptr dst, CPtr src, size_t count) {
return generic::Memmove<64, kMaxSize>::loop_and_tail_backward(dst, src,
count);
}
-#elif defined(LIBC_TARGET_ARCH_IS_ARM)
- return inline_memmove_embedded_tiny(dst, src, count);
-#elif defined(LIBC_TARGET_ARCH_IS_GPU)
- return inline_memmove_embedded_tiny(dst, src, count);
#else
-#error "Unsupported platform"
+ return inline_memmove_embedded_tiny(dst, src, count);
#endif
}
diff --git a/libc/src/string/memory_utils/memset_implementations.h b/libc/src/string/memory_utils/memset_implementations.h
index 089d74996188..16c11470572b 100644
--- a/libc/src/string/memory_utils/memset_implementations.h
+++ b/libc/src/string/memory_utils/memset_implementations.h
@@ -106,12 +106,8 @@ LIBC_INLINE static void inline_memset(Ptr dst, uint8_t value, size_t count) {
#elif defined(LIBC_TARGET_ARCH_IS_AARCH64)
static constexpr size_t kMaxSize = aarch64::kNeon ? 16 : 8;
return inline_memset_aarch64<kMaxSize>(dst, value, count);
-#elif defined(LIBC_TARGET_ARCH_IS_ARM)
- return inline_memset_embedded_tiny(dst, value, count);
-#elif defined(LIBC_TARGET_ARCH_IS_GPU)
- return inline_memset_embedded_tiny(dst, value, count);
#else
-#error "Unsupported platform"
+ return inline_memset_embedded_tiny(dst, value, count);
#endif
}
More information about the libc-commits
mailing list