endif
ifeq ($(subdir),math)
-# The fma routines rely on inexact being raised for correct results.
-CFLAGS-s_fma.c = -mieee-with-inexact
-CFLAGS-s_fmaf.c = -mieee-with-inexact
# This test tries to check for inexact being raised by arithmetic.
CFLAGS-test-misc.c += -mieee-with-inexact
# Avoid "conflicting types for built-in function" warnings
CFLAGS-s_isnan.c += -fno-builtin-isnanf
endif
-# Build everything with full IEEE math support, and with dynamic rounding;
-# there are a number of math routines that are defined to work with the
-# "current" rounding mode, and it's easiest to set this with all of them.
-sysdep-CFLAGS += -mieee -mfp-rounding-mode=d
+# Build everything with full IEEE math support (including inexact-flag)),
+# and with dynamic rounding; there are a number of math routines that are
+# defined to work with the "current" rounding mode, and it's easiest to set
+# this with all of them.
+sysdep-CFLAGS += -mieee-with-inexact -mfp-rounding-mode=d
# Software floating-point emulation.
-/* Copyright (C) 2007-2025 Free Software Foundation, Inc.
+/* Fix for conversion of floating point to integer overflow. Alpha version.
+ Copyright (C) 2025 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
+ License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
-#define __llrint not___llrint
-#define llrint not_llrint
-#include <math.h>
-#include <math_ldbl_opt.h>
-#include <libm-alias-double.h>
-#undef __llrint
-#undef llrint
+#ifndef FIX_FP_INT_CONVERT_OVERFLOW_H
+#define FIX_FP_INT_CONVERT_OVERFLOW_H 1
-long int
-__lrint (double x)
-{
- long ret;
+#define FIX_FLT_LLONG_CONVERT_OVERFLOW 1
+#define FIX_DBL_LLONG_CONVERT_OVERFLOW 1
+#define FIX_LDBL_LLONG_CONVERT_OVERFLOW 1
- __asm ("cvttq/svd %1,%0" : "=&f"(ret) : "f"(x));
+#define FIX_FLT_LONG_CONVERT_OVERFLOW 1
+#define FIX_DBL_LONG_CONVERT_OVERFLOW 1
+#define FIX_LDBL_LONG_CONVERT_OVERFLOW 1
- return ret;
-}
-
-strong_alias (__lrint, __llrint)
-libm_alias_double (__lrint, lrint)
-libm_alias_double (__llrint, llrint)
+#endif /* fix-fp-int-convert-overflow.h */
+++ /dev/null
-/* In s_lrint.c */
+++ /dev/null
-/* In s_lrintf.c */
+++ /dev/null
-/* In s_lround.c. */
+++ /dev/null
-/* In s_lroundf.c. */
+++ /dev/null
-/* Copyright (C) 2007-2025 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <https://www.gnu.org/licenses/>. */
-
-#define __llrintf not___llrintf
-#define llrintf not_llrintf
-#include <math.h>
-#include <libm-alias-float.h>
-#undef __llrintf
-#undef llrintf
-
-long int
-__lrintf (float x)
-{
- double tmp;
- long ret;
-
- __asm ("cvtst/s %2,%1\n\tcvttq/svd %1,%0"
- : "=&f"(ret), "=&f"(tmp) : "f"(x));
-
- return ret;
-}
-
-strong_alias (__lrintf, __llrintf)
-libm_alias_float (__lrint, lrint)
-libm_alias_float (__llrint, llrint)
+++ /dev/null
-/* Copyright (C) 2007-2025 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <https://www.gnu.org/licenses/>. */
-
-#define __llround not___llround
-#define llround not_llround
-#include <math.h>
-#include <math_ldbl_opt.h>
-#include <libm-alias-double.h>
-#undef __llround
-#undef llround
-
-long int
-__lround (double x)
-{
- double adj, y;
-
- adj = copysign (0.5, x);
- asm("addt/suc %1,%2,%0" : "=&f"(y) : "f"(x), "f"(adj));
- return y;
-}
-
-strong_alias (__lround, __llround)
-libm_alias_double (__lround, lround)
-libm_alias_double (__llround, llround)
+++ /dev/null
-/* Copyright (C) 2007-2025 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <https://www.gnu.org/licenses/>. */
-
-#define __llroundf not___llroundf
-#define llroundf not_llroundf
-#include <math.h>
-#include <libm-alias-float.h>
-#undef __llroundf
-#undef llroundf
-
-
-long int
-__lroundf (float x)
-{
- float adj, y;
-
- adj = copysignf (0.5f, x);
- asm("adds/suc %1,%2,%0" : "=&f"(y) : "f"(x), "f"(adj));
- return y;
-}
-
-strong_alias (__lroundf, __llroundf)
-libm_alias_float (__lround, lround)
-libm_alias_float (__llround, llround)