<pre style='margin:0'>
Ken (kencu) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/092362fb7b256c27879c2b2eeaf8a868198aae9b">https://github.com/macports/macports-ports/commit/092362fb7b256c27879c2b2eeaf8a868198aae9b</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new 092362fb7b2 gcc14: Add ppc FPU patch
</span>092362fb7b2 is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 092362fb7b256c27879c2b2eeaf8a868198aae9b
</span>Author: Gleb Mazovetskiy <glex.spb@gmail.com>
AuthorDate: Sun Nov 17 13:42:10 2024 +0000
<span style='display:block; white-space:pre;color:#404040;'> gcc14: Add ppc FPU patch
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> This patch is from upstream gcc commit at:
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> https://github.com/gcc-mirror/gcc/commit/1cfe4a4d0d4447b364815d5e5c889deb2e533669
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Per barracuda156@, this is needed for gfortran on ppc.
</span><span style='display:block; white-space:pre;color:#404040;'> See https://github.com/macports/macports-ports/pull/26655#issuecomment-2481208553
</span>---
lang/gcc14/Portfile | 5 +
lang/gcc14/files/darwin-ppc-fpu.patch | 460 ++++++++++++++++++++++++++++++++++
2 files changed, 465 insertions(+)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/gcc14/Portfile b/lang/gcc14/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index b1c3b799689..1f9ff2ab4cd 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/lang/gcc14/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/gcc14/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -177,6 +177,7 @@ if { ${os.platform} eq "darwin" } {
</span> # Patch generated from https://github.com/iains/gcc-14-branch
# git diff --no-prefix releases/gcc-14.2.0 gcc-14.2-darwin-r1
patchfiles-append patch-darwin-gcc-${version}.diff
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # GCC fixinc work-around for sys/ucred.h on OSX10.14.4 no longer seems to work ???
if { ${os.major} == 18 } {
patchfiles-append patch-OSX10.14-ucred-atomic-define.diff
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -193,6 +194,10 @@ if { ${os.platform} eq "darwin" } {
</span> 0002-libgcc-Darwin-Drop-the-legacy-library-build-for-macO.patch \
0003-libgcc-Darwin-Don-t-build-legacy-libgcc_s.1-on-macOS.patch
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # This patch has been merged upstream in https://github.com/gcc-mirror/gcc/commit/1cfe4a4d0d4447b364815d5e5c889deb2e533669
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Remove it when upgrading gcc to a version that has it.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ patchfiles-append darwin-ppc-fpu.patch
</span> }
# Since GCC 7.4.0, during configure, it detects features supported by target-as.
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/gcc14/files/darwin-ppc-fpu.patch b/lang/gcc14/files/darwin-ppc-fpu.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..e31ac16585a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/gcc14/files/darwin-ppc-fpu.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,460 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 1cfe4a4d0d4447b364815d5e5c889deb2e533669 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Sergey Fedorov <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Sun, 18 Aug 2024 18:52:51 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] libgfortran: implement fpu-macppc for Darwin, support IEEE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ arithmetic
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This allows to build and use IEEE modules on Darwin PowerPC.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+libgfortran/ChangeLog:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * config/fpu-macppc.h (new file): initial support for powerpc-darwin.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * configure.host: enable ieee_support for powerpc-darwin case,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set fpu_host='fpu-macppc'.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Signed-off-by: Sergey Fedorov <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libgfortran/config/fpu-macppc.h | 413 ++++++++++++++++++++++++++++++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libgfortran/configure.host | 9 +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 2 files changed, 422 insertions(+)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ create mode 100644 libgfortran/config/fpu-macppc.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git libgfortran/config/fpu-macppc.h libgfortran/config/fpu-macppc.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+new file mode 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 0000000000000..cbffa01e0bba9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ libgfortran/config/fpu-macppc.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -0,0 +1,413 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* FPU-related code for PowerPC.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ Copyright (C) 2023-2024 Free Software Foundation, Inc.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ Contributed by Sergey Fedorov <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++This file is part of the GNU Fortran runtime library (libgfortran).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Libgfortran is free software; you can redistribute it and/or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++modify it under the terms of the GNU General Public
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++License as published by the Free Software Foundation; either
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++version 3 of the License, or (at your option) any later version.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Libgfortran is distributed in the hope that it will be useful,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++but WITHOUT ANY WARRANTY; without even the implied warranty of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++the GNU General Public License for more details.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Under Section 7 of GPL version 3, you are granted additional
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++permissions described in the GCC Runtime Library Exception, version 3.1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++as published by the Free Software Foundation.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++You should have received a copy of the GNU General Public License and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++a copy of the GCC Runtime Library Exception along with this program;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++<http://www.gnu.org/licenses/>. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* While some of the definitions and functions used here are available
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ with Apple libm, we on purpose avoid pulling it in: to avoid potential
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ conflicts and not self-impose unnecessary constraints. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* FP exception flags */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_INEXACT 0x02000000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_DIVBYZERO 0x04000000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_UNDERFLOW 0x08000000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_OVERFLOW 0x10000000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_INVALID 0x20000000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_ALL_EXCEPT 0x3E000000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_NO_EXCEPT 0xC1FFFFFF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* Extra invalid flags */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_INVALID_SNAN 0x01000000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_INVALID_ISI 0x00800000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_INVALID_IDI 0x00400000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_INVALID_ZDZ 0x00200000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_INVALID_IMZ 0x00100000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_INVALID_XVC 0x00080000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_INVALID_SOFT 0x00000400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_INVALID_SQRT 0x00000200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_INVALID_CVI 0x00000100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* Rounding modes */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_TONEAREST 0x00000000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_TOWARDZERO 0x00000001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_UPWARD 0x00000002
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_DOWNWARD 0x00000003
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* There is no consistency re what is to be included in all_invalid.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ Apple libm has 0x01f80300, Openlibm/FreeBSD/NetBSD has 0x21f80700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ and OpenBSD has 0x01f80700. In particular, FE_INVALID_SOFT and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ FE_INVALID are contested. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_ALL_INVALID 0x01F80300
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_NO_INVALID 0xFE07FCFF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_ALL_FLAGS 0xFFF80300
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_NO_FLAGS 0x0007FCFF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_ALL_RND 0x00000003
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_NO_RND 0xFFFFFFFC
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* Floating-point exception summary (FX) bit. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_SET_FX 0x80000000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_CLR_FX 0x7FFFFFFF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* Some implementations use FE_INVALID_SOFT here. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define SET_INVALID 0x01000000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_EXCEPT_SHIFT 22
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define EXCEPT_MASK FE_ALL_EXCEPT >> FE_EXCEPT_SHIFT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++typedef unsigned int fenv_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++typedef unsigned int fexcept_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* default environment object */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++extern const fenv_t _FE_DFL_ENV;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* pointer to default environment */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FE_DFL_ENV &_FE_DFL_ENV
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++typedef union {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ struct {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ unsigned int hi;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fenv_t lo;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ } i;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ double d;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} hexdouble;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define HEXDOUBLE(hi, lo) {{ hi, lo }}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* Check we can actually store the FPU state in the allocated size. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++_Static_assert (sizeof(fenv_t) <= (size_t) GFC_FPE_STATE_BUFFER_SIZE,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "GFC_FPE_STATE_BUFFER_SIZE is too small");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static inline int fegetexcept(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hexdouble fe;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fe.d = __builtin_mffs();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return ((fe.i.lo & EXCEPT_MASK) << FE_EXCEPT_SHIFT);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static inline int feclearexcept(int excepts)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hexdouble fe;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (excepts & FE_INVALID)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ excepts |= FE_ALL_INVALID;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fe.d = __builtin_mffs();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fe.i.lo &= ~excepts;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if ((fe.i.lo & FE_ALL_EXCEPT) == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fe.i.lo &= FE_CLR_FX;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __builtin_mtfsf(0xFF, fe.d);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* It is not possible to set VX bit directly. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static inline int feraiseexcept(int excepts)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hexdouble fe;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (excepts & FE_INVALID)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ excepts |= SET_INVALID;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fe.d = __builtin_mffs();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fe.i.lo |= excepts;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __builtin_mtfsf(0xFF, fe.d);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static inline int fetestexcept(int excepts)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hexdouble fe;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ excepts &= FE_ALL_EXCEPT;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fe.d = __builtin_mffs();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return (fe.i.lo & (excepts & FE_ALL_EXCEPT));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static inline int feenableexcept(int mask)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hexdouble fe;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fenv_t oldmask;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fe.d = __builtin_mffs();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ oldmask = fe.i.lo;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fe.i.lo |= (mask & FE_ALL_EXCEPT) >> FE_EXCEPT_SHIFT;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __builtin_mtfsf(0xFF, fe.d);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return ((oldmask & EXCEPT_MASK) << FE_EXCEPT_SHIFT);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static inline int fedisableexcept(int mask)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hexdouble fe;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fenv_t oldmask;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fe.d = __builtin_mffs();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ oldmask = fe.i.lo;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fe.i.lo &= ~((mask & FE_ALL_EXCEPT) >> FE_EXCEPT_SHIFT);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __builtin_mtfsf(0xFF, fe.d);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return ((oldmask & EXCEPT_MASK) << FE_EXCEPT_SHIFT);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static inline int fegetround(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hexdouble fe;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fe.d = __builtin_mffs();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return (fe.i.lo & FE_ALL_RND);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static inline int fesetround(int round)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hexdouble fe;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (round & FE_NO_RND)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return (-1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fe.d = __builtin_mffs();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fe.i.lo = (fe.i.lo & FE_NO_RND) | round;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __builtin_mtfsf(0xFF, fe.d);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static inline int fegetenv(fenv_t *envp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hexdouble fe;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fe.d = __builtin_mffs();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *envp = fe.i.lo;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static inline int fesetenv(const fenv_t *envp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hexdouble fe;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fe.i.lo = *envp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __builtin_mtfsf(0xFF, fe.d);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int get_fpu_trap_exceptions (void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ int exceptions = fegetexcept();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ int res = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (exceptions & FE_INVALID) res |= GFC_FPE_INVALID;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (exceptions & FE_DIVBYZERO) res |= GFC_FPE_ZERO;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (exceptions & FE_OVERFLOW) res |= GFC_FPE_OVERFLOW;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (exceptions & FE_UNDERFLOW) res |= GFC_FPE_UNDERFLOW;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (exceptions & FE_INEXACT) res |= GFC_FPE_INEXACT;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return res;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++void set_fpu (void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (options.fpe & GFC_FPE_DENORMAL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ estr_write ("Fortran runtime warning: Floating point 'denormal operand' "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "exception not supported.\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ set_fpu_trap_exceptions (options.fpe, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++void set_fpu_trap_exceptions (int trap, int notrap)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ unsigned int mode_set = 0, mode_clr = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (trap & GFC_FPE_INVALID)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ mode_set |= FE_INVALID;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (notrap & GFC_FPE_INVALID)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ mode_clr |= FE_INVALID;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (trap & GFC_FPE_ZERO)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ mode_set |= FE_DIVBYZERO;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (notrap & GFC_FPE_ZERO)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ mode_clr |= FE_DIVBYZERO;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (trap & GFC_FPE_OVERFLOW)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ mode_set |= FE_OVERFLOW;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (notrap & GFC_FPE_OVERFLOW)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ mode_clr |= FE_OVERFLOW;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (trap & GFC_FPE_UNDERFLOW)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ mode_set |= FE_UNDERFLOW;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (notrap & GFC_FPE_UNDERFLOW)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ mode_clr |= FE_UNDERFLOW;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (trap & GFC_FPE_INEXACT)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ mode_set |= FE_INEXACT;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (notrap & GFC_FPE_INEXACT)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ mode_clr |= FE_INEXACT;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* Clear stalled exception flags. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ feclearexcept (FE_ALL_EXCEPT);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ feenableexcept (mode_set);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fedisableexcept (mode_clr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int get_fpu_except_flags (void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ int result, set_excepts;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ result = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ set_excepts = fetestexcept (FE_ALL_EXCEPT);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (set_excepts & FE_INVALID)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ result |= GFC_FPE_INVALID;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (set_excepts & FE_DIVBYZERO)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ result |= GFC_FPE_ZERO;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (set_excepts & FE_OVERFLOW)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ result |= GFC_FPE_OVERFLOW;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (set_excepts & FE_UNDERFLOW)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ result |= GFC_FPE_UNDERFLOW;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (set_excepts & FE_INEXACT)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ result |= GFC_FPE_INEXACT;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return result;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++void set_fpu_except_flags (int set, int clear)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ unsigned int exc_set = 0, exc_clr = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (set & GFC_FPE_INVALID)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ exc_set |= FE_INVALID;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ else if (clear & GFC_FPE_INVALID)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ exc_clr |= FE_INVALID;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (set & GFC_FPE_ZERO)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ exc_set |= FE_DIVBYZERO;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ else if (clear & GFC_FPE_ZERO)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ exc_clr |= FE_DIVBYZERO;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (set & GFC_FPE_OVERFLOW)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ exc_set |= FE_OVERFLOW;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ else if (clear & GFC_FPE_OVERFLOW)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ exc_clr |= FE_OVERFLOW;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (set & GFC_FPE_UNDERFLOW)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ exc_set |= FE_UNDERFLOW;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ else if (clear & GFC_FPE_UNDERFLOW)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ exc_clr |= FE_UNDERFLOW;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (set & GFC_FPE_INEXACT)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ exc_set |= FE_INEXACT;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ else if (clear & GFC_FPE_INEXACT)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ exc_clr |= FE_INEXACT;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ feclearexcept (exc_clr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ feraiseexcept (exc_set);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++void get_fpu_state (void *state)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fegetenv (state);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++void set_fpu_state (void *state)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fesetenv (state);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int get_fpu_rounding_mode (void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ int rnd_mode;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ rnd_mode = fegetround();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ switch (rnd_mode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case FE_TONEAREST:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return GFC_FPE_TONEAREST;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case FE_UPWARD:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return GFC_FPE_UPWARD;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case FE_DOWNWARD:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return GFC_FPE_DOWNWARD;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case FE_TOWARDZERO:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return GFC_FPE_TOWARDZERO;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ default:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0; /* Should be unreachable. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++void set_fpu_rounding_mode (int round)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ int rnd_mode;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ switch (round)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case GFC_FPE_TONEAREST:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ rnd_mode = FE_TONEAREST;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case GFC_FPE_UPWARD:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ rnd_mode = FE_UPWARD;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case GFC_FPE_DOWNWARD:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ rnd_mode = FE_DOWNWARD;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case GFC_FPE_TOWARDZERO:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ rnd_mode = FE_TOWARDZERO;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ default:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return; /* Should be unreachable. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fesetround (rnd_mode);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int support_fpu_flag (int flag)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (flag & GFC_FPE_DENORMAL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int support_fpu_trap (int flag)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (flag & GFC_FPE_DENORMAL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int support_fpu_rounding_mode(int mode __attribute__((unused)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* The following are not supported. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int support_fpu_underflow_control(int kind __attribute__((unused)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int get_fpu_underflow_mode(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++void set_fpu_underflow_mode(int gradual __attribute__((unused)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git libgfortran/configure.host libgfortran/configure.host
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index b15969f0e65a7..291188d19c29c 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- libgfortran/configure.host
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ libgfortran/configure.host
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -61,6 +61,15 @@ case "${host_cpu}" in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ieee_support='yes'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ;;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ esac
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ;;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ powerpc*)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case "${host_os}" in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ darwin*)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ fpu_host='fpu-macppc'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ieee_support='yes'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ;;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ esac
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ esac
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span></pre><pre style='margin:0'>
</pre>