mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-24 06:10:12 +00:00
[libc] Add definitions of double_t and float_t to math.h.
This change does not handle any extensions. Only the C standard variations are handled. Reviewers: abrachet Differential Revision: https://reviews.llvm.org/D79150
This commit is contained in:
parent
675eea46f0
commit
245cbd15a4
@ -117,6 +117,20 @@ def IsNanMacro : MacroDef<"isnan"> {
|
||||
}];
|
||||
}
|
||||
|
||||
def FloatT : TypeDecl<"float_t"> {
|
||||
let Decl = [{
|
||||
#define __need_float_t
|
||||
#include <__llvm-libc-stdc-types.h>
|
||||
}];
|
||||
}
|
||||
|
||||
def DoubleT : TypeDecl<"double_t"> {
|
||||
let Decl = [{
|
||||
#define __need_double_t
|
||||
#include <__llvm-libc-stdc-types.h>
|
||||
}];
|
||||
}
|
||||
|
||||
def MathAPI : PublicAPI<"math.h"> {
|
||||
let Macros = [
|
||||
SimpleMacroDef<"MATH_ERRNO", "1">,
|
||||
@ -130,6 +144,10 @@ def MathAPI : PublicAPI<"math.h"> {
|
||||
IsInfMacro,
|
||||
IsNanMacro,
|
||||
];
|
||||
let TypeDeclarations = [
|
||||
DoubleT,
|
||||
FloatT,
|
||||
];
|
||||
let Functions = [
|
||||
"cosf",
|
||||
"round",
|
||||
|
@ -11,6 +11,12 @@ add_header(
|
||||
__posix-types.h
|
||||
)
|
||||
|
||||
add_header(
|
||||
stdc_types
|
||||
HDR
|
||||
__llvm-libc-stdc-types.h
|
||||
)
|
||||
|
||||
add_header(
|
||||
ctype
|
||||
HDR
|
||||
@ -25,6 +31,7 @@ add_gen_header(
|
||||
GEN_HDR math.h
|
||||
DEPENDS
|
||||
.llvm_libc_common_h
|
||||
.stdc_types
|
||||
)
|
||||
|
||||
add_gen_header(
|
||||
|
37
libc/include/__llvm-libc-stdc-types.h
Normal file
37
libc/include/__llvm-libc-stdc-types.h
Normal file
@ -0,0 +1,37 @@
|
||||
//===-- Definitions of common types from the C standard. ------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// This header file does not have a header guard. It is internal to LLVM libc
|
||||
// and intended to be used to pick specific definitions without polluting the
|
||||
// public headers with unnecessary definitions.
|
||||
|
||||
#undef __LLVM_LIBC_FLOAT_T
|
||||
#undef __LLVM_LIBC_DOUBLE_T
|
||||
|
||||
#if !defined(__FLT_EVAL_METHOD__) || __FLT_EVAL_METHOD__ == 0
|
||||
#define __LLVM_LIBC_FLOAT_T float
|
||||
#define __LLVM_LIBC_DOUBLE_T double
|
||||
#elif __FLT_EVAL_METHOD__ == 1
|
||||
#define __LLVM_LIBC_FLOAT_T double
|
||||
#define __LLVM_LIBC_DOUBLE_T double
|
||||
#elif __FLT_EVAL_METHOD__ == 2
|
||||
#define __LLVM_LIBC_FLOAT_T long double
|
||||
#define __LLVM_LIBC_DOUBLE_T long double
|
||||
#else
|
||||
#error "Unsupported __FLT_EVAL_METHOD__ value."
|
||||
#endif
|
||||
|
||||
#if defined(__need_float_t) && !defined(__llvm_libc_float_t_defined)
|
||||
typedef __LLVM_LIBC_FLOAT_T float_t;
|
||||
#define __llvm_libc_float_t_defined
|
||||
#endif // __need_float_t
|
||||
|
||||
#if defined(__need_double_t) && !defined(__llvm_libc_double_t_defined)
|
||||
typedef __LLVM_LIBC_DOUBLE_T double_t;
|
||||
#define __llvm_libc_double_t_defined
|
||||
#endif // __need_double_t
|
Loading…
Reference in New Issue
Block a user