https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=6c5537c0298e9135ff27119c6a18dcc6f94459f5

commit 6c5537c0298e9135ff27119c6a18dcc6f94459f5
Author: Thirumalai Nagalingam <thirumalai.nagalin...@multicorewareinc.com>
Date:   Fri Mar 28 16:51:05 2025 +0000

    Cygwin: testsuite: Fix compilation for arm64
    
    Introduce a cpu_relax.h header to provide architecture-specific
    processor idling instructions for the`cancel3` and `cancel5` tests.

Diff:
---
 winsup/testsuite/winsup.api/pthread/cancel3.c   |  3 ++-
 winsup/testsuite/winsup.api/pthread/cancel5.c   | 15 ++++++++-------
 winsup/testsuite/winsup.api/pthread/cpu_relax.h | 12 ++++++++++++
 3 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/winsup/testsuite/winsup.api/pthread/cancel3.c 
b/winsup/testsuite/winsup.api/pthread/cancel3.c
index 8ed7d529b..18caf2360 100644
--- a/winsup/testsuite/winsup.api/pthread/cancel3.c
+++ b/winsup/testsuite/winsup.api/pthread/cancel3.c
@@ -40,6 +40,7 @@
  */
 
 #include "test.h"
+#include "cpu_relax.h"
 
 /*
  * Create NUMTHREADS threads in addition to the Main thread.
@@ -88,7 +89,7 @@ mythread(void * arg)
        {
          int i;
          for (i = 0; i < 1E7; i++)
-           __asm__ volatile ("pause":::);
+           CPU_RELAX();
        }
     }
 
diff --git a/winsup/testsuite/winsup.api/pthread/cancel5.c 
b/winsup/testsuite/winsup.api/pthread/cancel5.c
index dd5be7bea..05b8ef9a3 100644
--- a/winsup/testsuite/winsup.api/pthread/cancel5.c
+++ b/winsup/testsuite/winsup.api/pthread/cancel5.c
@@ -38,12 +38,13 @@
  *
  * Fail Criteria:
  * - Process returns non-zero exit status.
- */
-
-#include "test.h"
-
-/*
- * Create NUMTHREADS threads in addition to the Main thread.
+ */
+
+#include "test.h"
+#include "cpu_relax.h"
+
+/*
+ * Create NUMTHREADS threads in addition to the Main thread.
  */
 enum {
   NUMTHREADS = 10
@@ -89,7 +90,7 @@ mythread(void * arg)
        {
          int i;
          for (i = 0; i < 1E7; i++)
-           __asm__ volatile ("pause":::);
+           CPU_RELAX();
        }
     }
 
diff --git a/winsup/testsuite/winsup.api/pthread/cpu_relax.h 
b/winsup/testsuite/winsup.api/pthread/cpu_relax.h
new file mode 100644
index 000000000..1936dc5f4
--- /dev/null
+++ b/winsup/testsuite/winsup.api/pthread/cpu_relax.h
@@ -0,0 +1,12 @@
+#ifndef CPU_RELAX_H
+#define CPU_RELAX_H
+
+#if defined(__x86_64__) || defined(__i386__)  // Check for x86 architectures
+   #define CPU_RELAX() __asm__ volatile ("pause" :::)
+#elif defined(__aarch64__) || defined(__arm__)  // Check for ARM architectures
+   #define CPU_RELAX() __asm__ volatile ("yield" :::)
+#else
+   #error unimplemented for this target
+#endif
+
+#endif

Reply via email to