diff options
author | Joseph Huber <jhuber6@vols.utk.edu> | 2023-04-26 18:37:30 -0500 |
---|---|---|
committer | Joseph Huber <jhuber6@vols.utk.edu> | 2023-04-27 20:31:58 -0500 |
commit | 72bfe2c05a09e39c6e9c8f35fcbbd9322ed56432 (patch) | |
tree | 1901c864f225cd5eebdf770ea4ad55ecacd8749b /libc | |
parent | db381405ced7b65ad1cf8fc60bbdfb505e1ed3de (diff) | |
download | llvm-72bfe2c05a09e39c6e9c8f35fcbbd9322ed56432.tar.gz |
[libc] Support the string conversion methods on the GPU
This patch enables us to use the existing `libc` support for string
conversion functions on the GPU. This required setting the `fenv_t` and
long double configuration. As far as I am aware, long doubles are
converted to doubles on the GPU and the floating point environment is
just an `uint32_t`.
This code is still untested as we are still working out how to run the
unit tests on the GPU.
Reviewed By: michaelrj
Differential Revision: https://reviews.llvm.org/D149306
Diffstat (limited to 'libc')
-rw-r--r-- | libc/config/gpu/api.td | 4 | ||||
-rw-r--r-- | libc/config/gpu/entrypoints.txt | 10 | ||||
-rw-r--r-- | libc/config/gpu/headers.txt | 1 | ||||
-rw-r--r-- | libc/docs/gpu/support.rst | 11 | ||||
-rw-r--r-- | libc/include/llvm-libc-types/fenv_t.h | 4 | ||||
-rw-r--r-- | libc/src/__support/FPUtil/PlatformDefs.h | 5 |
6 files changed, 33 insertions, 2 deletions
diff --git a/libc/config/gpu/api.td b/libc/config/gpu/api.td index 3e6927de9463..c5f555c90178 100644 --- a/libc/config/gpu/api.td +++ b/libc/config/gpu/api.td @@ -12,3 +12,7 @@ def StdlibAPI : PublicAPI<"stdlib.h"> { "__atexithandler_t", ]; } + +def FenvAPI: PublicAPI<"fenv.h"> { + let Types = ["fenv_t"]; +} diff --git a/libc/config/gpu/entrypoints.txt b/libc/config/gpu/entrypoints.txt index c5ed1e3dd476..13d70f97363f 100644 --- a/libc/config/gpu/entrypoints.txt +++ b/libc/config/gpu/entrypoints.txt @@ -56,7 +56,17 @@ set(TARGET_LIBC_ENTRYPOINTS # stdlib.h entrypoints libc.src.stdlib.atoi + libc.src.stdlib.atof + libc.src.stdlib.atol + libc.src.stdlib.atoll libc.src.stdlib.atexit + 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 # Only implemented in the test suite libc.src.stdlib.malloc diff --git a/libc/config/gpu/headers.txt b/libc/config/gpu/headers.txt index 1b77c97b00d8..608ff42cbdbc 100644 --- a/libc/config/gpu/headers.txt +++ b/libc/config/gpu/headers.txt @@ -1,6 +1,7 @@ set(TARGET_PUBLIC_HEADERS libc.include.ctype libc.include.string + libc.include.fenv libc.include.errno libc.include.stdlib ) diff --git a/libc/docs/gpu/support.rst b/libc/docs/gpu/support.rst index 59fdb6196683..5638e51dd53f 100644 --- a/libc/docs/gpu/support.rst +++ b/libc/docs/gpu/support.rst @@ -85,4 +85,15 @@ stdlib.h Function Name Available RPC Required ============= ========= ============ atoi |check| +atof |check| +atol |check| +atoll |check| +atexit |check| +strtod |check| +strtof |check| +strtol |check| +strtold |check| +strtoll |check| +strtoul |check| +strtoull |check| ============= ========= ============ diff --git a/libc/include/llvm-libc-types/fenv_t.h b/libc/include/llvm-libc-types/fenv_t.h index 6d2bea74560d..86fcf2e49a7f 100644 --- a/libc/include/llvm-libc-types/fenv_t.h +++ b/libc/include/llvm-libc-types/fenv_t.h @@ -25,6 +25,10 @@ typedef struct { } fenv_t; #elif defined(__riscv) typedef unsigned int fenv_t; +#elif defined(__AMDGPU__) || defined(__NVPTX__) +typedef struct { + unsigned int __fpc; +} fenv_t; #else #error "fenv_t not defined for your platform" #endif diff --git a/libc/src/__support/FPUtil/PlatformDefs.h b/libc/src/__support/FPUtil/PlatformDefs.h index 488bfc3bbd96..175a62a1c930 100644 --- a/libc/src/__support/FPUtil/PlatformDefs.h +++ b/libc/src/__support/FPUtil/PlatformDefs.h @@ -17,8 +17,9 @@ // https://developer.arm.com/documentation/dui0491/i/C-and-C---Implementation-Details/Basic-data-types // https://developer.apple.com/documentation/xcode/writing-arm64-code-for-apple-platforms -#if defined(_WIN32) || defined(__arm__) || \ - (defined(__APPLE__) && defined(__aarch64__)) +// https://docs.amd.com/bundle/HIP-Programming-Guide-v5.1/page/Programming_with_HIP.html +#if defined(_WIN32) || defined(__arm__) || defined(__NVPTX__) || \ + defined(__AMDGPU__) || (defined(__APPLE__) && defined(__aarch64__)) #define LONG_DOUBLE_IS_DOUBLE #endif |