diff --git a/libc/config/baremetal/api.td b/libc/config/baremetal/api.td --- a/libc/config/baremetal/api.td +++ b/libc/config/baremetal/api.td @@ -5,6 +5,10 @@ def CTypeAPI : PublicAPI<"ctype.h"> { } +def FEnvAPI : PublicAPI<"fenv.h"> { + let Types = ["fenv_t", "fexcept_t"]; +} + def IntTypesAPI : PublicAPI<"inttypes.h"> { let Types = ["imaxdiv_t"]; } diff --git a/libc/config/baremetal/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt rename from libc/config/baremetal/entrypoints.txt rename to libc/config/baremetal/arm/entrypoints.txt --- a/libc/config/baremetal/entrypoints.txt +++ b/libc/config/baremetal/arm/entrypoints.txt @@ -85,6 +85,22 @@ ) set(TARGET_LIBM_ENTRYPOINTS + # fenv.h entrypoints + libc.src.fenv.feclearexcept + libc.src.fenv.fedisableexcept + libc.src.fenv.feenableexcept + libc.src.fenv.fegetenv + libc.src.fenv.fegetexcept + libc.src.fenv.fegetexceptflag + libc.src.fenv.fegetround + libc.src.fenv.feholdexcept + libc.src.fenv.fesetenv + libc.src.fenv.fesetexceptflag + libc.src.fenv.fesetround + libc.src.fenv.feraiseexcept + libc.src.fenv.fetestexcept + libc.src.fenv.feupdateenv + # math.h entrypoints libc.src.math.fabs libc.src.math.fabsf diff --git a/libc/config/baremetal/headers.txt b/libc/config/baremetal/arm/headers.txt rename from libc/config/baremetal/headers.txt rename to libc/config/baremetal/arm/headers.txt --- a/libc/config/baremetal/headers.txt +++ b/libc/config/baremetal/arm/headers.txt @@ -1,5 +1,6 @@ set(TARGET_PUBLIC_HEADERS libc.include.ctype + libc.include.fenv libc.include.errno libc.include.inttypes libc.include.math diff --git a/libc/include/llvm-libc-types/fenv_t.h b/libc/include/llvm-libc-types/fenv_t.h --- a/libc/include/llvm-libc-types/fenv_t.h +++ b/libc/include/llvm-libc-types/fenv_t.h @@ -14,12 +14,17 @@ unsigned char __control_word[4]; unsigned char __status_word[4]; } fenv_t; -#endif -#ifdef __x86_64__ +#elif defined(__x86_64__) typedef struct { unsigned char __x86_status[28]; unsigned char __mxcsr[4]; } fenv_t; +#elif defined(__arm__) || defined(_M_ARM) +typedef struct { + unsigned int __fpscr; +} fenv_t; +#else +#error "fenv_t not defined for your platform" #endif #endif // __LLVM_LIBC_TYPES_FENV_T_H__