[libc-commits] [libc] [libc] Proof of concept of aliasing long double math functions. (PR #132627)
via libc-commits
libc-commits at lists.llvm.org
Tue Mar 25 07:01:53 PDT 2025
================
@@ -37,21 +37,44 @@
#define LLVM_LIBC_ATTR(name) EXPAND_THEN_SECOND(LLVM_LIBC_FUNCTION_ATTR_##name)
-// MacOS needs to be excluded because it does not support aliasing.
-#if defined(LIBC_COPT_PUBLIC_PACKAGING) && (!defined(__APPLE__))
-#define LLVM_LIBC_FUNCTION_IMPL(type, name, arglist) \
+// MacOS needs to be excluded because it does not support [[gnu::aliasing]].
+#ifndef __APPLE__
+
+#if defined(LIBC_COPT_PUBLIC_PACKAGING)
+#define LLVM_LIBC_FUNCTION(type, name, arglist) \
LLVM_LIBC_ATTR(name) \
LLVM_LIBC_FUNCTION_ATTR decltype(LIBC_NAMESPACE::name) \
- __##name##_impl__ __asm__(#name); \
+ __##name##_impl__ asm(#name); \
decltype(LIBC_NAMESPACE::name) name [[gnu::alias(#name)]]; \
type __##name##_impl__ arglist
-#else
-#define LLVM_LIBC_FUNCTION_IMPL(type, name, arglist) type name arglist
-#endif
-// This extra layer of macro allows `name` to be a macro to rename a function.
+#define LLVM_LIBC_ALIASING_FUNCTION(name, func) \
+ decltype(LIBC_NAMESPACE::name) LIBC_NAMESPACE::name [[gnu::alias(#func)]]; \
+ asm(#name " = " #func); \
+ static_assert(true, "Require semicolon")
+#else
#define LLVM_LIBC_FUNCTION(type, name, arglist) \
- LLVM_LIBC_FUNCTION_IMPL(type, name, arglist)
+ LLVM_LIBC_ATTR(name) \
+ LLVM_LIBC_FUNCTION_ATTR decltype(LIBC_NAMESPACE::name) \
+ __##name##_impl__ asm("__" #name "_impl__"); \
+ decltype(LIBC_NAMESPACE::name) name [[gnu::alias("__" #name "_impl__")]]; \
+ type __##name##_impl__ arglist
+
+#define LLVM_LIBC_ALIASING_FUNCTION(name, func) \
+ decltype(LIBC_NAMESPACE::name) LIBC_NAMESPACE::name \
+ [[gnu::alias("__" #func "_impl__")]]; \
+ asm(#name " = __" #func "_impl__"); \
----------------
lntue wrote:
Just noticed I overly exported the C symbol for `.__internal__` target also. Removed the `asm()` statement here.
https://github.com/llvm/llvm-project/pull/132627
More information about the libc-commits
mailing list