From 0674009b78fc79430aab39facf78bc57a0386a7f Mon Sep 17 00:00:00 2001
From: Sergey Fedorov <barracuda@macos-powerpc.org>
Date: Wed, 10 Jul 2024 19:37:46 +0800
Subject: [PATCH] os_bsd_zero.cpp: implement sync_val_compare_and_swap_8

Credits to @nilsvanvelzen
Cherry-picked from: https://github.com/nilsvanvelzen/mac_ppc_openjdk8u60/commit/25b5795c961e3199e76d023f6a2f531d5fc33210
---
 hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp
index 9bbabfbcf9..3dcd3244de 100644
--- hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp
+++ hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp
@@ -456,8 +456,16 @@ extern "C" {
     volatile void *ptr,
     long long unsigned int oldval,
     long long unsigned int newval) {
-    ShouldNotCallThis();
-    return 0; // silence compiler warnings
+    long long unsigned int curval;
+    __sync_synchronize();
+    curval = *( long long unsigned int *) (ptr);
+    // curval = static_cast<long long unsigned int>(*ptr);
+    if (curval == oldval){
+       // static_cast<long long unsigned int> *ptr = newval;
+     *( long long unsigned int *) (ptr) = newval; 
+    }
+    return curval;
+    // ShouldNotCallThis();
   }
 };
 #endif // !_LP64
