mirror of
https://github.com/intel/llvm.git
synced 2026-02-04 03:26:06 +08:00
[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
This commit is contained in:
@@ -12,3 +12,7 @@ def StdlibAPI : PublicAPI<"stdlib.h"> {
|
||||
"__atexithandler_t",
|
||||
];
|
||||
}
|
||||
|
||||
def FenvAPI: PublicAPI<"fenv.h"> {
|
||||
let Types = ["fenv_t"];
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
set(TARGET_PUBLIC_HEADERS
|
||||
libc.include.ctype
|
||||
libc.include.string
|
||||
libc.include.fenv
|
||||
libc.include.errno
|
||||
libc.include.stdlib
|
||||
)
|
||||
|
||||
@@ -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|
|
||||
============= ========= ============
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user