This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perl.h - enable USE_QUADMATH builds (mingw compilers only) on MS Windows
authorsisyphus <sisyphus@cpan.org>
Sun, 10 Jan 2021 04:11:37 +0000 (15:11 +1100)
committerKarl Williamson <khw@cpan.org>
Mon, 11 Jan 2021 00:08:05 +0000 (17:08 -0700)
Align __float128 when using 64-bit mingw compilers.

perl.h

diff --git a/perl.h b/perl.h
index 9627f34..0ca6f89 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -2178,7 +2178,22 @@ You probably want to be using L<C</INT2PTR>> instead.
 #  endif
 #endif
 
-typedef NVTYPE NV;
+/* On MS Windows,with 64-bit mingw-w64 compilers, we
+   need to attend to a __float128 alignment issue if
+   USE_QUADMATH is defined. Otherwise we simply:
+   typedef NVTYPE NV
+   32-bit mingw.org compilers might also require
+   aligned(32) - at least that's what I found with my
+   Math::Foat128 module. But this is as yet untested
+   here, so no allowance is being made for mingw.org
+   compilers at this stage. -- sisyphus January 2021
+*/
+#if defined(USE_QUADMATH) && defined(__MINGW64__)
+   /* 64-bit build, mingw-w64 compiler only */
+   typedef NVTYPE NV __attribute__ ((aligned(8)));
+#else
+   typedef NVTYPE NV;
+#endif
 
 #ifdef I_IEEEFP
 #   include <ieeefp.h>