Sebastian Lackner : vcomp: Implement atomic double functions.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Jul 28 13:30:07 CDT 2015


Module: wine
Branch: master
Commit: 36fe1f8a82c0dca06a749dda8f2239e643e37fed
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=36fe1f8a82c0dca06a749dda8f2239e643e37fed

Author: Sebastian Lackner <sebastian at fds-team.de>
Date:   Mon Jul 27 01:38:52 2015 +0200

vcomp: Implement atomic double functions.

---

 dlls/vcomp/main.c           | 44 ++++++++++++++++++++++++++++++++++++++++++++
 dlls/vcomp/vcomp.spec       |  8 ++++----
 dlls/vcomp100/vcomp100.spec |  8 ++++----
 dlls/vcomp90/vcomp90.spec   |  8 ++++----
 4 files changed, 56 insertions(+), 12 deletions(-)

diff --git a/dlls/vcomp/main.c b/dlls/vcomp/main.c
index 92c8eaf..301370c 100644
--- a/dlls/vcomp/main.c
+++ b/dlls/vcomp/main.c
@@ -330,6 +330,50 @@ void CDECL _vcomp_atomic_sub_r4(float *dest, float val)
     while (interlocked_cmpxchg((int *)dest, new, old) != old);
 }
 
+void CDECL _vcomp_atomic_add_r8(double *dest, double val)
+{
+    LONG64 old, new;
+    do
+    {
+        old = *(LONG64 *)dest;
+        *(double *)&new = *(double *)&old + val;
+    }
+    while (interlocked_cmpxchg64((LONG64 *)dest, new, old) != old);
+}
+
+void CDECL _vcomp_atomic_div_r8(double *dest, double val)
+{
+    LONG64 old, new;
+    do
+    {
+        old = *(LONG64 *)dest;
+        *(double *)&new = *(double *)&old / val;
+    }
+    while (interlocked_cmpxchg64((LONG64 *)dest, new, old) != old);
+}
+
+void CDECL _vcomp_atomic_mul_r8(double *dest, double val)
+{
+    LONG64 old, new;
+    do
+    {
+        old = *(LONG64 *)dest;
+        *(double *)&new = *(double *)&old * val;
+    }
+    while (interlocked_cmpxchg64((LONG64 *)dest, new, old) != old);
+}
+
+void CDECL _vcomp_atomic_sub_r8(double *dest, double val)
+{
+    LONG64 old, new;
+    do
+    {
+        old = *(LONG64 *)dest;
+        *(double *)&new = *(double *)&old - val;
+    }
+    while (interlocked_cmpxchg64((LONG64 *)dest, new, old) != old);
+}
+
 int CDECL omp_get_dynamic(void)
 {
     TRACE("stub\n");
diff --git a/dlls/vcomp/vcomp.spec b/dlls/vcomp/vcomp.spec
index bc963cb..3a709df 100644
--- a/dlls/vcomp/vcomp.spec
+++ b/dlls/vcomp/vcomp.spec
@@ -3,7 +3,7 @@
 @ cdecl _vcomp_atomic_add_i4(ptr long)
 @ stub _vcomp_atomic_add_i8
 @ cdecl _vcomp_atomic_add_r4(ptr float)
-@ stub _vcomp_atomic_add_r8
+@ cdecl _vcomp_atomic_add_r8(ptr double)
 @ stub _vcomp_atomic_and_i1
 @ stub _vcomp_atomic_and_i2
 @ cdecl _vcomp_atomic_and_i4(ptr long)
@@ -13,7 +13,7 @@
 @ cdecl _vcomp_atomic_div_i4(ptr long)
 @ stub _vcomp_atomic_div_i8
 @ cdecl _vcomp_atomic_div_r4(ptr float)
-@ stub _vcomp_atomic_div_r8
+@ cdecl _vcomp_atomic_div_r8(ptr double)
 @ stub _vcomp_atomic_div_ui1
 @ stub _vcomp_atomic_div_ui2
 @ cdecl _vcomp_atomic_div_ui4(ptr long)
@@ -23,7 +23,7 @@
 @ cdecl _vcomp_atomic_mul_i4(ptr long)
 @ stub _vcomp_atomic_mul_i8
 @ cdecl _vcomp_atomic_mul_r4(ptr float)
-@ stub _vcomp_atomic_mul_r8
+@ cdecl _vcomp_atomic_mul_r8(ptr double)
 @ stub _vcomp_atomic_or_i1
 @ stub _vcomp_atomic_or_i2
 @ cdecl _vcomp_atomic_or_i4(ptr long)
@@ -45,7 +45,7 @@
 @ cdecl _vcomp_atomic_sub_i4(ptr long)
 @ stub _vcomp_atomic_sub_i8
 @ cdecl _vcomp_atomic_sub_r4(ptr float)
-@ stub _vcomp_atomic_sub_r8
+@ cdecl _vcomp_atomic_sub_r8(ptr double)
 @ stub _vcomp_atomic_xor_i1
 @ stub _vcomp_atomic_xor_i2
 @ cdecl _vcomp_atomic_xor_i4(ptr long)
diff --git a/dlls/vcomp100/vcomp100.spec b/dlls/vcomp100/vcomp100.spec
index 2f4401e..eb6e568 100644
--- a/dlls/vcomp100/vcomp100.spec
+++ b/dlls/vcomp100/vcomp100.spec
@@ -3,7 +3,7 @@
 @ cdecl _vcomp_atomic_add_i4(ptr long) vcomp._vcomp_atomic_add_i4
 @ stub _vcomp_atomic_add_i8
 @ cdecl _vcomp_atomic_add_r4(ptr float) vcomp._vcomp_atomic_add_r4
-@ stub _vcomp_atomic_add_r8
+@ cdecl _vcomp_atomic_add_r8(ptr double) vcomp._vcomp_atomic_add_r8
 @ stub _vcomp_atomic_and_i1
 @ stub _vcomp_atomic_and_i2
 @ cdecl _vcomp_atomic_and_i4(ptr long) vcomp._vcomp_atomic_and_i4
@@ -13,7 +13,7 @@
 @ cdecl _vcomp_atomic_div_i4(ptr long) vcomp._vcomp_atomic_div_i4
 @ stub _vcomp_atomic_div_i8
 @ cdecl _vcomp_atomic_div_r4(ptr float) vcomp._vcomp_atomic_div_r4
-@ stub _vcomp_atomic_div_r8
+@ cdecl _vcomp_atomic_div_r8(ptr double) vcomp._vcomp_atomic_div_r8
 @ stub _vcomp_atomic_div_ui1
 @ stub _vcomp_atomic_div_ui2
 @ cdecl _vcomp_atomic_div_ui4(ptr long) vcomp._vcomp_atomic_div_ui4
@@ -23,7 +23,7 @@
 @ cdecl _vcomp_atomic_mul_i4(ptr long) vcomp._vcomp_atomic_mul_i4
 @ stub _vcomp_atomic_mul_i8
 @ cdecl _vcomp_atomic_mul_r4(ptr float) vcomp._vcomp_atomic_mul_r4
-@ stub _vcomp_atomic_mul_r8
+@ cdecl _vcomp_atomic_mul_r8(ptr double) vcomp._vcomp_atomic_mul_r8
 @ stub _vcomp_atomic_or_i1
 @ stub _vcomp_atomic_or_i2
 @ cdecl _vcomp_atomic_or_i4(ptr long) vcomp._vcomp_atomic_or_i4
@@ -45,7 +45,7 @@
 @ cdecl _vcomp_atomic_sub_i4(ptr long) vcomp._vcomp_atomic_sub_i4
 @ stub _vcomp_atomic_sub_i8
 @ cdecl _vcomp_atomic_sub_r4(ptr float) vcomp._vcomp_atomic_sub_r4
-@ stub _vcomp_atomic_sub_r8
+@ cdecl _vcomp_atomic_sub_r8(ptr double) vcomp._vcomp_atomic_sub_r8
 @ stub _vcomp_atomic_xor_i1
 @ stub _vcomp_atomic_xor_i2
 @ cdecl _vcomp_atomic_xor_i4(ptr long) vcomp._vcomp_atomic_xor_i4
diff --git a/dlls/vcomp90/vcomp90.spec b/dlls/vcomp90/vcomp90.spec
index 2f4401e..eb6e568 100644
--- a/dlls/vcomp90/vcomp90.spec
+++ b/dlls/vcomp90/vcomp90.spec
@@ -3,7 +3,7 @@
 @ cdecl _vcomp_atomic_add_i4(ptr long) vcomp._vcomp_atomic_add_i4
 @ stub _vcomp_atomic_add_i8
 @ cdecl _vcomp_atomic_add_r4(ptr float) vcomp._vcomp_atomic_add_r4
-@ stub _vcomp_atomic_add_r8
+@ cdecl _vcomp_atomic_add_r8(ptr double) vcomp._vcomp_atomic_add_r8
 @ stub _vcomp_atomic_and_i1
 @ stub _vcomp_atomic_and_i2
 @ cdecl _vcomp_atomic_and_i4(ptr long) vcomp._vcomp_atomic_and_i4
@@ -13,7 +13,7 @@
 @ cdecl _vcomp_atomic_div_i4(ptr long) vcomp._vcomp_atomic_div_i4
 @ stub _vcomp_atomic_div_i8
 @ cdecl _vcomp_atomic_div_r4(ptr float) vcomp._vcomp_atomic_div_r4
-@ stub _vcomp_atomic_div_r8
+@ cdecl _vcomp_atomic_div_r8(ptr double) vcomp._vcomp_atomic_div_r8
 @ stub _vcomp_atomic_div_ui1
 @ stub _vcomp_atomic_div_ui2
 @ cdecl _vcomp_atomic_div_ui4(ptr long) vcomp._vcomp_atomic_div_ui4
@@ -23,7 +23,7 @@
 @ cdecl _vcomp_atomic_mul_i4(ptr long) vcomp._vcomp_atomic_mul_i4
 @ stub _vcomp_atomic_mul_i8
 @ cdecl _vcomp_atomic_mul_r4(ptr float) vcomp._vcomp_atomic_mul_r4
-@ stub _vcomp_atomic_mul_r8
+@ cdecl _vcomp_atomic_mul_r8(ptr double) vcomp._vcomp_atomic_mul_r8
 @ stub _vcomp_atomic_or_i1
 @ stub _vcomp_atomic_or_i2
 @ cdecl _vcomp_atomic_or_i4(ptr long) vcomp._vcomp_atomic_or_i4
@@ -45,7 +45,7 @@
 @ cdecl _vcomp_atomic_sub_i4(ptr long) vcomp._vcomp_atomic_sub_i4
 @ stub _vcomp_atomic_sub_i8
 @ cdecl _vcomp_atomic_sub_r4(ptr float) vcomp._vcomp_atomic_sub_r4
-@ stub _vcomp_atomic_sub_r8
+@ cdecl _vcomp_atomic_sub_r8(ptr double) vcomp._vcomp_atomic_sub_r8
 @ stub _vcomp_atomic_xor_i1
 @ stub _vcomp_atomic_xor_i2
 @ cdecl _vcomp_atomic_xor_i4(ptr long) vcomp._vcomp_atomic_xor_i4




More information about the wine-cvs mailing list