Sebastian Lackner : vcomp: Implement 32-bit atomic integer functions.

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


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

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

vcomp: Implement 32-bit atomic integer functions.

---

 dlls/vcomp/main.c           | 65 +++++++++++++++++++++++++++++++++++++++++++++
 dlls/vcomp/vcomp.spec       | 22 +++++++--------
 dlls/vcomp100/vcomp100.spec | 22 +++++++--------
 dlls/vcomp90/vcomp90.spec   | 22 +++++++--------
 4 files changed, 98 insertions(+), 33 deletions(-)

diff --git a/dlls/vcomp/main.c b/dlls/vcomp/main.c
index ae5623b..6f0caf6 100644
--- a/dlls/vcomp/main.c
+++ b/dlls/vcomp/main.c
@@ -22,6 +22,7 @@
  */
 
 #include "config.h"
+#include "wine/port.h"
 
 #include <stdarg.h>
 #include <assert.h>
@@ -221,6 +222,70 @@ static void vcomp_free_thread_data(void)
     vcomp_set_thread_data(NULL);
 }
 
+void CDECL _vcomp_atomic_add_i4(int *dest, int val)
+{
+    interlocked_xchg_add(dest, val);
+}
+
+void CDECL _vcomp_atomic_and_i4(int *dest, int val)
+{
+    int old;
+    do old = *dest; while (interlocked_cmpxchg(dest, old & val, old) != old);
+}
+
+void CDECL _vcomp_atomic_div_i4(int *dest, int val)
+{
+    int old;
+    do old = *dest; while (interlocked_cmpxchg(dest, old / val, old) != old);
+}
+
+void CDECL _vcomp_atomic_div_ui4(unsigned int *dest, unsigned int val)
+{
+    unsigned int old;
+    do old = *dest; while (interlocked_cmpxchg((int *)dest, old / val, old) != old);
+}
+
+void CDECL _vcomp_atomic_mul_i4(int *dest, int val)
+{
+    int old;
+    do old = *dest; while (interlocked_cmpxchg(dest, old * val, old) != old);
+}
+
+void CDECL _vcomp_atomic_or_i4(int *dest, int val)
+{
+    int old;
+    do old = *dest; while (interlocked_cmpxchg(dest, old | val, old) != old);
+}
+
+void CDECL _vcomp_atomic_shl_i4(int *dest, int val)
+{
+    int old;
+    do old = *dest; while (interlocked_cmpxchg(dest, old << val, old) != old);
+}
+
+void CDECL _vcomp_atomic_shr_i4(int *dest, int val)
+{
+    int old;
+    do old = *dest; while (interlocked_cmpxchg(dest, old >> val, old) != old);
+}
+
+void CDECL _vcomp_atomic_shr_ui4(unsigned int *dest, unsigned int val)
+{
+    unsigned int old;
+    do old = *dest; while (interlocked_cmpxchg((int *)dest, old >> val, old) != old);
+}
+
+void CDECL _vcomp_atomic_sub_i4(int *dest, int val)
+{
+    interlocked_xchg_add(dest, -val);
+}
+
+void CDECL _vcomp_atomic_xor_i4(int *dest, int val)
+{
+    int old;
+    do old = *dest; while (interlocked_cmpxchg(dest, old ^ val, old) != old);
+}
+
 int CDECL omp_get_dynamic(void)
 {
     TRACE("stub\n");
diff --git a/dlls/vcomp/vcomp.spec b/dlls/vcomp/vcomp.spec
index 7083ce4..768daef 100644
--- a/dlls/vcomp/vcomp.spec
+++ b/dlls/vcomp/vcomp.spec
@@ -1,54 +1,54 @@
 @ stub _vcomp_atomic_add_i1
 @ stub _vcomp_atomic_add_i2
-@ stub _vcomp_atomic_add_i4
+@ cdecl _vcomp_atomic_add_i4(ptr long)
 @ stub _vcomp_atomic_add_i8
 @ stub _vcomp_atomic_add_r4
 @ stub _vcomp_atomic_add_r8
 @ stub _vcomp_atomic_and_i1
 @ stub _vcomp_atomic_and_i2
-@ stub _vcomp_atomic_and_i4
+@ cdecl _vcomp_atomic_and_i4(ptr long)
 @ stub _vcomp_atomic_and_i8
 @ stub _vcomp_atomic_div_i1
 @ stub _vcomp_atomic_div_i2
-@ stub _vcomp_atomic_div_i4
+@ cdecl _vcomp_atomic_div_i4(ptr long)
 @ stub _vcomp_atomic_div_i8
 @ stub _vcomp_atomic_div_r4
 @ stub _vcomp_atomic_div_r8
 @ stub _vcomp_atomic_div_ui1
 @ stub _vcomp_atomic_div_ui2
-@ stub _vcomp_atomic_div_ui4
+@ cdecl _vcomp_atomic_div_ui4(ptr long)
 @ stub _vcomp_atomic_div_ui8
 @ stub _vcomp_atomic_mul_i1
 @ stub _vcomp_atomic_mul_i2
-@ stub _vcomp_atomic_mul_i4
+@ cdecl _vcomp_atomic_mul_i4(ptr long)
 @ stub _vcomp_atomic_mul_i8
 @ stub _vcomp_atomic_mul_r4
 @ stub _vcomp_atomic_mul_r8
 @ stub _vcomp_atomic_or_i1
 @ stub _vcomp_atomic_or_i2
-@ stub _vcomp_atomic_or_i4
+@ cdecl _vcomp_atomic_or_i4(ptr long)
 @ stub _vcomp_atomic_or_i8
 @ stub _vcomp_atomic_shl_i1
 @ stub _vcomp_atomic_shl_i2
-@ stub _vcomp_atomic_shl_i4
+@ cdecl _vcomp_atomic_shl_i4(ptr long)
 @ stub _vcomp_atomic_shl_i8
 @ stub _vcomp_atomic_shr_i1
 @ stub _vcomp_atomic_shr_i2
-@ stub _vcomp_atomic_shr_i4
+@ cdecl _vcomp_atomic_shr_i4(ptr long)
 @ stub _vcomp_atomic_shr_i8
 @ stub _vcomp_atomic_shr_ui1
 @ stub _vcomp_atomic_shr_ui2
-@ stub _vcomp_atomic_shr_ui4
+@ cdecl _vcomp_atomic_shr_ui4(ptr long)
 @ stub _vcomp_atomic_shr_ui8
 @ stub _vcomp_atomic_sub_i1
 @ stub _vcomp_atomic_sub_i2
-@ stub _vcomp_atomic_sub_i4
+@ cdecl _vcomp_atomic_sub_i4(ptr long)
 @ stub _vcomp_atomic_sub_i8
 @ stub _vcomp_atomic_sub_r4
 @ stub _vcomp_atomic_sub_r8
 @ stub _vcomp_atomic_xor_i1
 @ stub _vcomp_atomic_xor_i2
-@ stub _vcomp_atomic_xor_i4
+@ cdecl _vcomp_atomic_xor_i4(ptr long)
 @ stub _vcomp_atomic_xor_i8
 @ cdecl _vcomp_barrier()
 @ stub _vcomp_copyprivate_broadcast
diff --git a/dlls/vcomp100/vcomp100.spec b/dlls/vcomp100/vcomp100.spec
index 56c7ae3..7f77ce1 100644
--- a/dlls/vcomp100/vcomp100.spec
+++ b/dlls/vcomp100/vcomp100.spec
@@ -1,54 +1,54 @@
 @ stub _vcomp_atomic_add_i1
 @ stub _vcomp_atomic_add_i2
-@ stub _vcomp_atomic_add_i4
+@ cdecl _vcomp_atomic_add_i4(ptr long) vcomp._vcomp_atomic_add_i4
 @ stub _vcomp_atomic_add_i8
 @ stub _vcomp_atomic_add_r4
 @ stub _vcomp_atomic_add_r8
 @ stub _vcomp_atomic_and_i1
 @ stub _vcomp_atomic_and_i2
-@ stub _vcomp_atomic_and_i4
+@ cdecl _vcomp_atomic_and_i4(ptr long) vcomp._vcomp_atomic_and_i4
 @ stub _vcomp_atomic_and_i8
 @ stub _vcomp_atomic_div_i1
 @ stub _vcomp_atomic_div_i2
-@ stub _vcomp_atomic_div_i4
+@ cdecl _vcomp_atomic_div_i4(ptr long) vcomp._vcomp_atomic_div_i4
 @ stub _vcomp_atomic_div_i8
 @ stub _vcomp_atomic_div_r4
 @ stub _vcomp_atomic_div_r8
 @ stub _vcomp_atomic_div_ui1
 @ stub _vcomp_atomic_div_ui2
-@ stub _vcomp_atomic_div_ui4
+@ cdecl _vcomp_atomic_div_ui4(ptr long) vcomp._vcomp_atomic_div_ui4
 @ stub _vcomp_atomic_div_ui8
 @ stub _vcomp_atomic_mul_i1
 @ stub _vcomp_atomic_mul_i2
-@ stub _vcomp_atomic_mul_i4
+@ cdecl _vcomp_atomic_mul_i4(ptr long) vcomp._vcomp_atomic_mul_i4
 @ stub _vcomp_atomic_mul_i8
 @ stub _vcomp_atomic_mul_r4
 @ stub _vcomp_atomic_mul_r8
 @ stub _vcomp_atomic_or_i1
 @ stub _vcomp_atomic_or_i2
-@ stub _vcomp_atomic_or_i4
+@ cdecl _vcomp_atomic_or_i4(ptr long) vcomp._vcomp_atomic_or_i4
 @ stub _vcomp_atomic_or_i8
 @ stub _vcomp_atomic_shl_i1
 @ stub _vcomp_atomic_shl_i2
-@ stub _vcomp_atomic_shl_i4
+@ cdecl _vcomp_atomic_shl_i4(ptr long) vcomp._vcomp_atomic_shl_i4
 @ stub _vcomp_atomic_shl_i8
 @ stub _vcomp_atomic_shr_i1
 @ stub _vcomp_atomic_shr_i2
-@ stub _vcomp_atomic_shr_i4
+@ cdecl _vcomp_atomic_shr_i4(ptr long) vcomp._vcomp_atomic_shr_i4
 @ stub _vcomp_atomic_shr_i8
 @ stub _vcomp_atomic_shr_ui1
 @ stub _vcomp_atomic_shr_ui2
-@ stub _vcomp_atomic_shr_ui4
+@ cdecl _vcomp_atomic_shr_ui4(ptr long) vcomp._vcomp_atomic_shr_ui4
 @ stub _vcomp_atomic_shr_ui8
 @ stub _vcomp_atomic_sub_i1
 @ stub _vcomp_atomic_sub_i2
-@ stub _vcomp_atomic_sub_i4
+@ cdecl _vcomp_atomic_sub_i4(ptr long) vcomp._vcomp_atomic_sub_i4
 @ stub _vcomp_atomic_sub_i8
 @ stub _vcomp_atomic_sub_r4
 @ stub _vcomp_atomic_sub_r8
 @ stub _vcomp_atomic_xor_i1
 @ stub _vcomp_atomic_xor_i2
-@ stub _vcomp_atomic_xor_i4
+@ cdecl _vcomp_atomic_xor_i4(ptr long) vcomp._vcomp_atomic_xor_i4
 @ stub _vcomp_atomic_xor_i8
 @ cdecl _vcomp_barrier() vcomp._vcomp_barrier
 @ stub _vcomp_copyprivate_broadcast
diff --git a/dlls/vcomp90/vcomp90.spec b/dlls/vcomp90/vcomp90.spec
index 56c7ae3..7f77ce1 100644
--- a/dlls/vcomp90/vcomp90.spec
+++ b/dlls/vcomp90/vcomp90.spec
@@ -1,54 +1,54 @@
 @ stub _vcomp_atomic_add_i1
 @ stub _vcomp_atomic_add_i2
-@ stub _vcomp_atomic_add_i4
+@ cdecl _vcomp_atomic_add_i4(ptr long) vcomp._vcomp_atomic_add_i4
 @ stub _vcomp_atomic_add_i8
 @ stub _vcomp_atomic_add_r4
 @ stub _vcomp_atomic_add_r8
 @ stub _vcomp_atomic_and_i1
 @ stub _vcomp_atomic_and_i2
-@ stub _vcomp_atomic_and_i4
+@ cdecl _vcomp_atomic_and_i4(ptr long) vcomp._vcomp_atomic_and_i4
 @ stub _vcomp_atomic_and_i8
 @ stub _vcomp_atomic_div_i1
 @ stub _vcomp_atomic_div_i2
-@ stub _vcomp_atomic_div_i4
+@ cdecl _vcomp_atomic_div_i4(ptr long) vcomp._vcomp_atomic_div_i4
 @ stub _vcomp_atomic_div_i8
 @ stub _vcomp_atomic_div_r4
 @ stub _vcomp_atomic_div_r8
 @ stub _vcomp_atomic_div_ui1
 @ stub _vcomp_atomic_div_ui2
-@ stub _vcomp_atomic_div_ui4
+@ cdecl _vcomp_atomic_div_ui4(ptr long) vcomp._vcomp_atomic_div_ui4
 @ stub _vcomp_atomic_div_ui8
 @ stub _vcomp_atomic_mul_i1
 @ stub _vcomp_atomic_mul_i2
-@ stub _vcomp_atomic_mul_i4
+@ cdecl _vcomp_atomic_mul_i4(ptr long) vcomp._vcomp_atomic_mul_i4
 @ stub _vcomp_atomic_mul_i8
 @ stub _vcomp_atomic_mul_r4
 @ stub _vcomp_atomic_mul_r8
 @ stub _vcomp_atomic_or_i1
 @ stub _vcomp_atomic_or_i2
-@ stub _vcomp_atomic_or_i4
+@ cdecl _vcomp_atomic_or_i4(ptr long) vcomp._vcomp_atomic_or_i4
 @ stub _vcomp_atomic_or_i8
 @ stub _vcomp_atomic_shl_i1
 @ stub _vcomp_atomic_shl_i2
-@ stub _vcomp_atomic_shl_i4
+@ cdecl _vcomp_atomic_shl_i4(ptr long) vcomp._vcomp_atomic_shl_i4
 @ stub _vcomp_atomic_shl_i8
 @ stub _vcomp_atomic_shr_i1
 @ stub _vcomp_atomic_shr_i2
-@ stub _vcomp_atomic_shr_i4
+@ cdecl _vcomp_atomic_shr_i4(ptr long) vcomp._vcomp_atomic_shr_i4
 @ stub _vcomp_atomic_shr_i8
 @ stub _vcomp_atomic_shr_ui1
 @ stub _vcomp_atomic_shr_ui2
-@ stub _vcomp_atomic_shr_ui4
+@ cdecl _vcomp_atomic_shr_ui4(ptr long) vcomp._vcomp_atomic_shr_ui4
 @ stub _vcomp_atomic_shr_ui8
 @ stub _vcomp_atomic_sub_i1
 @ stub _vcomp_atomic_sub_i2
-@ stub _vcomp_atomic_sub_i4
+@ cdecl _vcomp_atomic_sub_i4(ptr long) vcomp._vcomp_atomic_sub_i4
 @ stub _vcomp_atomic_sub_i8
 @ stub _vcomp_atomic_sub_r4
 @ stub _vcomp_atomic_sub_r8
 @ stub _vcomp_atomic_xor_i1
 @ stub _vcomp_atomic_xor_i2
-@ stub _vcomp_atomic_xor_i4
+@ cdecl _vcomp_atomic_xor_i4(ptr long) vcomp._vcomp_atomic_xor_i4
 @ stub _vcomp_atomic_xor_i8
 @ cdecl _vcomp_barrier() vcomp._vcomp_barrier
 @ stub _vcomp_copyprivate_broadcast




More information about the wine-cvs mailing list