Re: Adding isinfl() and isnanl()
Brian Inglis <[email protected]> Fri, 6 Feb 2026 14:30:45 -0700
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Organization | Systematic Software |
| Message-ID | <[email protected]> |
On 2026-02-05 17:53, Joel Sherrill wrote: > > > On Thu, Feb 5, 2026 at 9:28 AM Corinna Vinschen <[email protected] > <mailto:[email protected]>> wrote: > > On Feb 5 09:09, Joel Sherrill wrote: > > Hi > > > > math.h:123 has isinfl () and isnanl() as this: > > > > 123 > > <https://sourceware.org/git?p=newlib-cygwin.git;a=blob;f=newlib/libc/ > include/math.h;h=5e92d2662da145cabad51e5946051aa34e9092b6;hb=HEAD#l123 > <https://sourceware.org/git?p=newlib-cygwin.git;a=blob;f=newlib/libc/ > include/math.h;h=5e92d2662da145cabad51e5946051aa34e9092b6;hb=HEAD#l123>> > > #ifdef __CYGWIN__ /* not implemented in newlib yet */ > > 124 > > <https://sourceware.org/git?p=newlib-cygwin.git;a=blob;f=newlib/libc/ > include/math.h;h=5e92d2662da145cabad51e5946051aa34e9092b6;hb=HEAD#l124 > <https://sourceware.org/git?p=newlib-cygwin.git;a=blob;f=newlib/libc/ > include/math.h;h=5e92d2662da145cabad51e5946051aa34e9092b6;hb=HEAD#l124>> > > extern int isinfl (long double); > > 125 > > <https://sourceware.org/git?p=newlib-cygwin.git;a=blob;f=newlib/libc/ > include/math.h;h=5e92d2662da145cabad51e5946051aa34e9092b6;hb=HEAD#l125 > <https://sourceware.org/git?p=newlib-cygwin.git;a=blob;f=newlib/libc/ > include/math.h;h=5e92d2662da145cabad51e5946051aa34e9092b6;hb=HEAD#l125>> > > extern int isnanl (long double); > > 126 > > <https://sourceware.org/git?p=newlib-cygwin.git;a=blob;f=newlib/libc/ > include/math.h;h=5e92d2662da145cabad51e5946051aa34e9092b6;hb=HEAD#l126 > <https://sourceware.org/git?p=newlib-cygwin.git;a=blob;f=newlib/libc/ > include/math.h;h=5e92d2662da145cabad51e5946051aa34e9092b6;hb=HEAD#l126>> > > #endif > > > > The winsup implementation has them as simple wrappers for the > > corresponding built-in functions such as __builtin_isinf_sign(). > > > > If I copied the winsup/ implementation and put each in a new file > > in newlib/libm so they are always available, is that OK? > > Barring other problems, you should just move them out of winsup into > newlib. > > > If so, any suggestions on location inside libm for simple wrappers > > for the corresponding builtin? > > libm/common > > > What would the conditional guard need to be? Just Cygwin and RTEMS? > > or more? > > I think this would have to be target cpu dependent. > > > Anything I am missing? > > Is it a safe bet that these builtins are available as inline functions > on all supported target cpus and compilers? Unimplemented builtins just > point to their corresponding C lib function, isn't it? You can use __has_builtin since gcc 10: $ info cpp __has_builtin # gcc 13.4 4.2.9 https://gcc.gnu.org/onlinedocs/gcc-13.4.0/cpp/_005f_005fhas_005fbuiltin.html $ info gcc 'C Extensions' 'Other Builtins' # gcc 13.4 6.59 https://gcc.gnu.org/onlinedocs/gcc-13.4.0/gcc/Other-Builtins.html Two paras above builtin_alloca: https://gcc.gnu.org/onlinedocs/gcc-13.4.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005falloca ... "GCC provides built-in versions of the ISO C99 floating-point comparison macros that avoid raising exceptions for unordered operands. They have the same names as the standard macros ( ‘isgreater’, ‘isgreaterequal’, ‘isless’, ‘islessequal’, ‘islessgreater’, and ‘isunordered’) , with ‘__builtin_’ prefixed. *We intend for a library implementor to be able to simply ‘#define’ each standard macro to its built-in equivalent.* In the same fashion, GCC provides ‘fpclassify’, ‘isfinite’, ‘isinf_sign’, ‘isnormal’ and ‘signbit’ built-ins used with ‘__builtin_’ prefixed. The ‘isinf’ and ‘isnan’ built-in functions appear both with and without the ‘__builtin_’ prefix. With ‘-ffinite-math-only’ option the ‘isinf’ and ‘isnan’ built-in functions will always return 0." > Thanks. This one comment makes me want to avoid doing this. > > I can easily test the ~15 RTEMS architectures but that leaves a lot > I can't easily check. I will see if the code using this can be done a different > way. Suggestions on that? Avoid target builtins? -- Take care. Thanks, Brian Inglis Calgary, Alberta, Canada La perfection est atteinte Perfection is achieved non pas lorsqu'il n'y a plus rien à ajouter not when there is no more to add mais lorsqu'il n'y a plus rien à retrancher but when there is no more to cut -- Antoine de Saint-Exupéry