From: Billy Laws <[email protected]>
---
mingw-w64-crt/math/fma.c | 2 +-
mingw-w64-crt/math/fmaf.c | 2 +-
mingw-w64-crt/math/llrint.c | 2 +-
mingw-w64-crt/math/llrintf.c | 2 +-
mingw-w64-crt/math/llrintl.c | 3 ++-
mingw-w64-crt/math/lrint.c | 14 +++++++-------
mingw-w64-crt/math/lrintf.c | 14 +++++++-------
mingw-w64-crt/math/modf.c | 2 +-
mingw-w64-crt/math/modff.c | 2 +-
mingw-w64-crt/math/modfl.c | 2 +-
mingw-w64-crt/math/signbitl.c | 4 ++--
mingw-w64-crt/math/sqrt.def.h | 2 +-
12 files changed, 26 insertions(+), 25 deletions(-)
diff --git a/mingw-w64-crt/math/fma.c b/mingw-w64-crt/math/fma.c
index 6774be787..644a6f6b7 100644
--- a/mingw-w64-crt/math/fma.c
+++ b/mingw-w64-crt/math/fma.c
@@ -17,7 +17,7 @@ double fma(double x, double y, double z){
return z;
}
-#elif defined(_ARM64_) || defined(__aarch64__)
+#elif defined(_ARM64_) || defined(__aarch64__) || defined(_ARM64EC_) ||
defined(__arm64ec__)
/* Use hardware FMA on ARM64. */
double fma(double x, double y, double z){
diff --git a/mingw-w64-crt/math/fmaf.c b/mingw-w64-crt/math/fmaf.c
index 4661e4b82..2773c5435 100644
--- a/mingw-w64-crt/math/fmaf.c
+++ b/mingw-w64-crt/math/fmaf.c
@@ -17,7 +17,7 @@ float fmaf(float x, float y, float z){
return z;
}
-#elif defined(_ARM64_) || defined(__aarch64__)
+#elif defined(_ARM64_) || defined(__aarch64__) || defined(_ARM64EC_) ||
defined(__arm64ec__)
/* Use hardware FMA on ARM64. */
float fmaf(float x, float y, float z){
diff --git a/mingw-w64-crt/math/llrint.c b/mingw-w64-crt/math/llrint.c
index 4ba7af7e6..6b8b02a60 100644
--- a/mingw-w64-crt/math/llrint.c
+++ b/mingw-w64-crt/math/llrint.c
@@ -9,7 +9,7 @@
long long llrint (double x)
{
long long retval = 0ll;
-#if defined(_AMD64_) || defined(__x86_64__) || defined(_X86_) ||
defined(__i386__)
+#if (defined(_AMD64_) && !defined(_ARM64EC_)) || (defined(__x86_64__) &&
!defined(__arm64ec__)) || defined(_X86_) || defined(__i386__)
__asm__ __volatile__ ("fistpll %0" : "=m" (retval) : "t" (x) : "st");
#else
int mode = fegetround();
diff --git a/mingw-w64-crt/math/llrintf.c b/mingw-w64-crt/math/llrintf.c
index e8085ec4e..38f7c3c2f 100644
--- a/mingw-w64-crt/math/llrintf.c
+++ b/mingw-w64-crt/math/llrintf.c
@@ -9,7 +9,7 @@
long long llrintf (float x)
{
long long retval = 0ll;
-#if defined(_AMD64_) || defined(__x86_64__) || defined(_X86_) ||
defined(__i386__)
+#if (defined(_AMD64_) && !defined(_ARM64EC_)) || (defined(__x86_64__) &&
!defined(__arm64ec__)) || defined(_X86_) || defined(__i386__)
__asm__ __volatile__ ("fistpll %0" : "=m" (retval) : "t" (x) : "st");
#else
int mode = fegetround();
diff --git a/mingw-w64-crt/math/llrintl.c b/mingw-w64-crt/math/llrintl.c
index 6a2bf73d8..027686a92 100644
--- a/mingw-w64-crt/math/llrintl.c
+++ b/mingw-w64-crt/math/llrintl.c
@@ -9,7 +9,8 @@
long long llrintl (long double x)
{
long long retval = 0ll;
-#if defined(_AMD64_) || defined(__x86_64__) || defined(_X86_) ||
defined(__i386__)
+#if (defined(_AMD64_) && !defined(_ARM64EC_)) || (defined(__x86_64__) &&
!defined(__arm64ec__)) || \
+ defined(_X86_) || defined(__i386__)
__asm__ __volatile__ ("fistpll %0" : "=m" (retval) : "t" (x) : "st");
#else
int mode = fegetround();
diff --git a/mingw-w64-crt/math/lrint.c b/mingw-w64-crt/math/lrint.c
index 7831446be..a84e71426 100644
--- a/mingw-w64-crt/math/lrint.c
+++ b/mingw-w64-crt/math/lrint.c
@@ -5,14 +5,19 @@
*/
#include <math.h>
-#if defined(_AMD64_) || defined(__x86_64__)
+#if (defined(_AMD64_) && !defined(_ARM64EC_)) || (defined(__x86_64__) &&
!defined(__arm64ec__))
#include <xmmintrin.h>
#endif
long lrint (double x)
{
long retval = 0L;
-#if defined(_AMD64_) || defined(__x86_64__)
+#if defined(__aarch64__) || defined(_ARM64_) || defined(__arm64ec__) ||
defined(_ARM64EC_)
+ __asm__ __volatile__ (
+ "frintx %d1, %d1\n\t"
+ "fcvtzs %w0, %d1\n\t"
+ : "=r" (retval), "+w" (x));
+#elif defined(_AMD64_) || defined(__x86_64__)
retval = _mm_cvtsd_si32(_mm_load_sd(&x));
#elif defined(_X86_) || defined(__i386__)
__asm__ __volatile__ ("fistpl %0" : "=m" (retval) : "t" (x) : "st");
@@ -22,11 +27,6 @@ long lrint (double x)
"vcvtr.s32.f64 %[tmp], %[src]\n\t"
"fmrs %[dst], %[tmp]\n\t"
: [dst] "=r" (retval), [tmp] "=t" (temp) : [src] "w" (x));
-#elif defined(__aarch64__) || defined(_ARM64_)
- __asm__ __volatile__ (
- "frintx %d1, %d1\n\t"
- "fcvtzs %w0, %d1\n\t"
- : "=r" (retval), "+w" (x));
#endif
return retval;
}
diff --git a/mingw-w64-crt/math/lrintf.c b/mingw-w64-crt/math/lrintf.c
index 1e8902f03..27c9b304f 100644
--- a/mingw-w64-crt/math/lrintf.c
+++ b/mingw-w64-crt/math/lrintf.c
@@ -5,14 +5,19 @@
*/
#include <math.h>
-#if defined(_AMD64_) || defined(__x86_64__)
+#if (defined(_AMD64_) && !defined(_ARM64EC_)) || (defined(__x86_64__) &&
!defined(__arm64ec__))
#include <xmmintrin.h>
#endif
long lrintf (float x)
{
long retval = 0l;
-#if defined(_AMD64_) || defined(__x86_64__)
+#if defined(__aarch64__) || defined(_ARM64_) || defined(__arm64ec__) ||
defined(_ARM64EC_)
+ __asm__ __volatile__ (
+ "frintx %s1, %s1\n\t"
+ "fcvtzs %w0, %s1\n\t"
+ : "=r" (retval), "+w" (x));
+#elif defined(_AMD64_) || defined(__x86_64__)
retval = _mm_cvtss_si32(_mm_load_ss(&x));
#elif defined(_X86_) || defined(__i386__)
__asm__ __volatile__ ("fistpl %0" : "=m" (retval) : "t" (x) : "st");
@@ -21,11 +26,6 @@ long lrintf (float x)
"vcvtr.s32.f32 %[src], %[src]\n\t"
"fmrs %[dst], %[src]\n\t"
: [dst] "=r" (retval), [src] "+w" (x));
-#elif defined(__aarch64__) || defined(_ARM64_)
- __asm__ __volatile__ (
- "frintx %s1, %s1\n\t"
- "fcvtzs %w0, %s1\n\t"
- : "=r" (retval), "+w" (x));
#endif
return retval;
}
diff --git a/mingw-w64-crt/math/modf.c b/mingw-w64-crt/math/modf.c
index d2623095c..bf541fad2 100644
--- a/mingw-w64-crt/math/modf.c
+++ b/mingw-w64-crt/math/modf.c
@@ -12,7 +12,7 @@ modf (double value, double* iptr)
{
double int_part = 0.0;
/* truncate */
-#if defined(_AMD64_) || defined(__x86_64__)
+#if (defined(_AMD64_) && !defined(_ARM64EC_)) || (defined(__x86_64__) &&
!defined(__arm64ec__))
asm volatile ("subq $8, %%rsp\n"
"fnstcw 4(%%rsp)\n"
"movzwl 4(%%rsp), %%eax\n"
diff --git a/mingw-w64-crt/math/modff.c b/mingw-w64-crt/math/modff.c
index dcf19cfed..d2f8514d4 100644
--- a/mingw-w64-crt/math/modff.c
+++ b/mingw-w64-crt/math/modff.c
@@ -13,7 +13,7 @@ modff (float value, float* iptr)
float int_part = 0.0F;
/* truncate */
/* truncate */
-#if defined(_AMD64_) || defined(__x86_64__)
+#if (defined(_AMD64_) && !defined(_ARM64EC_)) || (defined(__x86_64__) &&
!defined(__arm64ec__))
asm volatile ("subq $8, %%rsp\n"
"fnstcw 4(%%rsp)\n"
"movzwl 4(%%rsp), %%eax\n"
diff --git a/mingw-w64-crt/math/modfl.c b/mingw-w64-crt/math/modfl.c
index 33593e6de..60b9b81b9 100644
--- a/mingw-w64-crt/math/modfl.c
+++ b/mingw-w64-crt/math/modfl.c
@@ -12,7 +12,7 @@ modfl (long double value, long double* iptr)
{
long double int_part = 0.0L;
/* truncate */
-#if defined(_AMD64_) || defined(__x86_64__)
+#if (defined(_AMD64_) && !defined(_ARM64EC_)) || (defined(__x86_64__) &&
!defined(__arm64ec__))
asm volatile ("subq $8, %%rsp\n"
"fnstcw 4(%%rsp)\n"
"movzwl 4(%%rsp), %%eax\n"
diff --git a/mingw-w64-crt/math/signbitl.c b/mingw-w64-crt/math/signbitl.c
index 19f2938db..b4dba713b 100644
--- a/mingw-w64-crt/math/signbitl.c
+++ b/mingw-w64-crt/math/signbitl.c
@@ -9,11 +9,11 @@
int __signbitl (long double x) {
-#if defined(__x86_64__) || defined(_AMD64_)
+#if (defined(_AMD64_) && !defined(_ARM64EC_)) || (defined(__x86_64__) &&
!defined(__arm64ec__))
__mingw_ldbl_type_t ld;
ld.x = x;
return ((ld.lh.sign_exponent & 0x8000) != 0);
-#elif defined(__arm__) || defined(_ARM_) || defined(__aarch64__) ||
defined(_ARM64_)
+#elif defined(__arm__) || defined(_ARM_) || defined(__aarch64__) ||
defined(_ARM64_) || defined(__arm64ec__) || defined(_ARM64EC_)
return __signbit(x);
#elif defined(__i386__) || defined(_X86_)
unsigned short sw;
diff --git a/mingw-w64-crt/math/sqrt.def.h b/mingw-w64-crt/math/sqrt.def.h
index ed1e663ba..43bd5a37d 100644
--- a/mingw-w64-crt/math/sqrt.def.h
+++ b/mingw-w64-crt/math/sqrt.def.h
@@ -77,7 +77,7 @@ __FLT_ABI (sqrt) (__FLT_TYPE x)
#else
asm volatile ("fsqrtd %[dst], %[src];\n" : [dst] "=w" (res) : [src] "w" (x));
#endif
-#elif defined(__aarch64__) || defined(_ARM64_)
+#elif defined(__aarch64__) || defined(_ARM64_) || defined(__arm64ec__) ||
defined(_ARM64EC_)
#if _NEW_COMPLEX_FLOAT
asm volatile ("fsqrt %s[dst], %s[src]\n" : [dst] "=w" (res) : [src] "w" (x));
#else
--
2.48.1
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public