mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-24 06:10:12 +00:00
d9f033146b
The 'errno' value is most likely not useful on the GPU and it prevents us from providing certain functions on the GPU that depend on it, like `atoi`. This patch makes the necessary changes to support `errno` by simple replacing it with a consumer class. Supporting `errno` on the GPU is possible in some aspects. The first approach would be to use a buffer of shared memory that has enough space for all threads. Another option would be to change code generation to support `thread_local` using `address_space(5)` memory allocated at kernel launch. The former could look like the following, which could be implemented in a later patch: ``` template <typename T> using SharedBuffer = T[gpu::MAX_THREADS] [[clang::address_space(3)]]; template <typename T> struct ErrnoSetter { constexpr ErrnoSetter(SharedBuffer<T> &storage) : storage(storage) {} SharedBuffer<T> &storage; void operator=(const T &val) { storage[gpu::get_thread_id()] = val; } }; static SharedBuffer<int> thread_local_buffer [[clang::loader_uninitialized]]; ErrnoSetter<int> __llvmlibc_internal_errno(thread_local_buffer); ``` Reviewed By: sivachandra Differential Revision: https://reviews.llvm.org/D149107 |
||
---|---|---|
.. | ||
arpa | ||
llvm-libc-macros | ||
llvm-libc-types | ||
sys | ||
__llvm-libc-common.h | ||
assert.h.def | ||
CMakeLists.txt | ||
ctype.h.def | ||
dirent.h.def | ||
errno.h.def | ||
fcntl.h.def | ||
fenv.h.def | ||
inttypes.h.def | ||
math.h.def | ||
pthread.h.def | ||
sched.h.def | ||
setjmp.h.def | ||
signal.h.def | ||
spawn.h.def | ||
stdio.h.def | ||
stdlib.h.def | ||
string.h.def | ||
strings.h.def | ||
termios.h.def | ||
threads.h.def | ||
time.h.def | ||
unistd.h.def | ||
wchar.h.def |