Skip to content

Commit c64cc52

Browse files
committed
Repair some more <cmath> typos
1 parent ac23a86 commit c64cc52

1 file changed

Lines changed: 39 additions & 22 deletions

File tree

  • ref_app/src/util/STL

ref_app/src/util/STL/cmath

Lines changed: 39 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -235,10 +235,6 @@
235235
double atanh (double x);
236236
long double atanhl(long double x);
237237

238-
int isfinitef(float x);
239-
int isfinite (double x);
240-
int isfinitel(long double x);
241-
242238
int ilogbf(float x);
243239
int ilogb (double x);
244240
int ilogbl(long double x);
@@ -254,9 +250,30 @@
254250

255251
namespace std
256252
{
257-
inline bool isfinite (float x) { return (::isfinitef(x) == 1); }
258-
inline bool isfinite (double x) { return (::isfinite (x) == 1); }
259-
inline bool isfinite (long double x) { return (::isfinitel(x) == 1); }
253+
namespace cmath_detail {
254+
255+
__ATTR_CONST__ static __ATTR_ALWAYS_INLINE__ int isfinitef_impl(float my_x)
256+
{
257+
unsigned char my_exp { };
258+
259+
asm volatile
260+
(
261+
"mov %0, %C1" "\n\t"
262+
"lsl %0" "\n\t"
263+
"mov %0, %D1" "\n\t"
264+
"rol %0"
265+
: "=&r" (my_exp)
266+
: "r" (my_x)
267+
);
268+
269+
return ((my_exp != static_cast<unsigned char>(0xFFU)) ? 1 : 0);
270+
}
271+
272+
} // namespace cmath_detail
273+
274+
inline bool isfinite (float x) { return (::std::cmath_detail::isfinitef_impl(x) == 1); }
275+
inline bool isfinite (double x) { return (::std::cmath_detail::isfinitef_impl(static_cast<float>(x)) == 1); }
276+
inline bool isfinite (long double x) { return (::std::cmath_detail::isfinitef_impl(static_cast<float>(x)) == 1); }
260277
inline bool isnan (float x) { return (__BUILTIN_ISNANF(x) == 1); }
261278
inline bool isnan (double x) { return (__BUILTIN_ISNAN (x) == 1); }
262279
inline bool isnan (long double x) { return (__BUILTIN_ISNANL(x) == 1); }
@@ -266,15 +283,15 @@
266283

267284
namespace cmath_detail {
268285

269-
inline bool isinf_impl(float x) { return (__BUILTIN_ISINFF(x) == 1); }
270-
inline bool isinf_impl(double x) { return (__BUILTIN_ISINF (x) == 1); }
271-
inline bool isinf_impl(long double x) { return (__BUILTIN_ISINFL(x) == 1); }
286+
__ATTR_CONST__ static __ATTR_ALWAYS_INLINE__ bool isinf_impl(float x) { return (__BUILTIN_ISINFF(x) == 1); }
287+
__ATTR_CONST__ static __ATTR_ALWAYS_INLINE__ bool isinf_impl(double x) { return (__BUILTIN_ISINF (x) == 1); }
288+
__ATTR_CONST__ static __ATTR_ALWAYS_INLINE__ bool isinf_impl(long double x) { return (__BUILTIN_ISINFL(x) == 1); }
272289

273290
} // namespace cmath_detail
274291

275-
inline bool isinf(float x) { return cmath_detail::isinf_impl(x); }
276-
inline bool isinf(double x) { return cmath_detail::isinf_impl(x); }
277-
inline bool isinf(long double x) { return cmath_detail::isinf_impl(x); }
292+
inline bool isinf(float x) { return ::std::cmath_detail::isinf_impl(x); }
293+
inline bool isinf(double x) { return ::std::cmath_detail::isinf_impl(x); }
294+
inline bool isinf(long double x) { return ::std::cmath_detail::isinf_impl(x); }
278295

279296
namespace cmath_detail {
280297

@@ -321,9 +338,9 @@
321338

322339
} // namespace cmath_detail
323340

324-
inline int fpclassify(float x) { return cmath_detail::fpclassify_impl(x); }
325-
inline int fpclassify(double x) { return cmath_detail::fpclassify_impl(x); }
326-
inline int fpclassify(long double x) { return cmath_detail::fpclassify_impl(x); }
341+
inline int fpclassify(float x) { return ::std::cmath_detail::fpclassify_impl(x); }
342+
inline int fpclassify(double x) { return ::std::cmath_detail::fpclassify_impl(x); }
343+
inline int fpclassify(long double x) { return ::std::cmath_detail::fpclassify_impl(x); }
327344

328345
inline int ilogb (float x) { return ::ilogbf (x); }
329346
inline int ilogb (double x) { return ::ilogb (x); }
@@ -720,9 +737,9 @@
720737

721738
} // namespace cmath_detail
722739

723-
inline bool isinf(float x) { return cmath_detail::isinf_impl(x); }
724-
inline bool isinf(double x) { return cmath_detail::isinf_impl(x); }
725-
inline bool isinf(long double x) { return cmath_detail::isinf_impl(x); }
740+
inline bool isinf(float x) { return ::std::cmath_detail::isinf_impl(x); }
741+
inline bool isinf(double x) { return ::std::cmath_detail::isinf_impl(x); }
742+
inline bool isinf(long double x) { return ::std::cmath_detail::isinf_impl(x); }
726743

727744
using ::isnan;
728745
using ::abs;
@@ -774,9 +791,9 @@
774791

775792
} // namespace cmath_detail
776793

777-
inline int fpclassify(float x) { return cmath_detail::fpclassify_impl(x); }
778-
inline int fpclassify(double x) { return cmath_detail::fpclassify_impl(x); }
779-
inline int fpclassify(long double x) { return cmath_detail::fpclassify_impl(x); }
794+
inline int fpclassify(float x) { return ::std::cmath_detail::fpclassify_impl(x); }
795+
inline int fpclassify(double x) { return ::std::cmath_detail::fpclassify_impl(x); }
796+
inline int fpclassify(long double x) { return ::std::cmath_detail::fpclassify_impl(x); }
780797

781798
using ::modf;
782799
using ::floor;

0 commit comments

Comments
 (0)