annotate src/atomic/qnx/SDL_atomic.c @ 3261:72b542f34739

The new, cleaner, version of the atomic operations. The dummy code is what you should start working with to port atomic ops. The linux code appears to be complete and *should* be the base of all Unix and GCC based versions. The macosx and win32 versions are currently just copies of the dummy code. I will begin working on the windows version as soon as this check in is done. I need someone to work on the Mac OS X version. I'm afraid that this check in will break QNX (Sorry!)
author Bob Pendleton <bob@pendleton.com>
date Thu, 17 Sep 2009 20:35:12 +0000
parents 26ce0b98f2fb
children 70bfe3337f8a
rev   line source
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
1 /*
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
2 SDL - Simple DirectMedia Layer
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
3 Copyright (C) 1997-2009 Sam Lantinga
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
4
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
5 This library is free software; you can redistribute it and/or
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
6 modify it under the terms of the GNU Lesser General Public
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
7 License as published by the Free Software Foundation; either
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
8 version 2.1 of the License, or (at your option) any later version.
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
9
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
10 This library is distributed in the hope that it will be useful,
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
13 Lesser General Public License for more details.
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
14
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
15 You should have received a copy of the GNU Lesser General Public
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
16 License along with this library; if not, write to the Free Software
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
18
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
19 Sam Lantinga
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
20 slouken@libsdl.org
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
21 */
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
22
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
23 #include "SDL_stdinc.h"
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
24 #include "SDL_atomic.h"
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
25
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
26 #include <atomic.h>
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
27
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
28 /*
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
29 This file provides 8, 16, 32, and 64 bit atomic operations. If the
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
30 operations are provided by the native hardware and operating system
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
31 they are used. If they are not then the operations are emulated
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
32 using the SDL mutex operations.
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
33 */
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
34
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
35 /*
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
36 First, detect whether the operations are supported and create
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
37 #defines that indicate that they do exist. The goal is to have all
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
38 the system dependent code in the top part of the file so that the
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
39 bottom can be use unchanged across all platforms.
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
40
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
41 Second, #define all the operations in each size class that are
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
42 supported. Doing this allows supported operations to be used along
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
43 side of emulated operations.
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
44 */
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
45
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
46 /*
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
47 Emmulated version.
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
48
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
49 Assume there is no support for atomic operations. All such
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
50 operations are implemented using SDL mutex operations.
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
51 */
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
52
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
53 #ifdef EMULATED_ATOMIC_OPERATIONS
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
54 #undef EMULATED_ATOMIC_OPERATIONS
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
55 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
56
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
57 #ifdef EMULATED_ATOMIC_OPERATIONS
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
58 #define HAVE_ALL_8_BIT_OPS
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
59
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
60 #define nativeExchange8(ptr, value) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
61 #define nativeCompareThenSet8(ptr, oldvalue, newvalue) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
62 #define nativeTestThenSet8(ptr) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
63 #define nativeClear8(ptr) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
64 #define nativeFetchThenIncrement8(ptr) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
65 #define nativeFetchThenDecrement8(ptr) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
66 #define nativeFetchThenAdd8(ptr, value) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
67 #define nativeFetchThenSubtract8(ptr, value) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
68 #define nativeIncrementThenFetch8(ptr) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
69 #define nativeDecrementThenFetch8(ptr) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
70 #define nativeAddThenFetch8(ptr, value) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
71 #define nativeSubtractThenFetch8(ptr, value) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
72 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
73
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
74 #ifdef EMULATED_ATOMIC_OPERATIONS
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
75 #define HAVE_ALL_16_BIT_OPS
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
76
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
77 #define nativeExchange16(ptr, value) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
78 #define nativeCompareThenSet16(ptr, oldvalue, newvalue) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
79 #define nativeTestThenSet16(ptr) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
80 #define nativeClear16(ptr) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
81 #define nativeFetchThenIncrement16(ptr) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
82 #define nativeFetchThenDecrement16(ptr) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
83 #define nativeFetchThenAdd16(ptr, value) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
84 #define nativeFetchThenSubtract16(ptr, value) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
85 #define nativeIncrementThenFetch16(ptr) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
86 #define nativeDecrementThenFetch16(ptr) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
87 #define nativeAddThenFetch16(ptr, value) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
88 #define nativeSubtractThenFetch16(ptr, value) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
89 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
90
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
91 #ifdef EMULATED_ATOMIC_OPERATIONS
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
92 #define HAVE_ALL_64_BIT_OPS
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
93
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
94 #define nativeExchange64(ptr, value) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
95 #define nativeCompareThenSet64(ptr, oldvalue, newvalue) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
96 #define nativeTestThenSet64(ptr) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
97 #define nativeClear64(ptr) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
98 #define nativeFetchThenIncrement64(ptr) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
99 #define nativeFetchThenDecrement64(ptr) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
100 #define nativeFetchThenAdd64(ptr, value) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
101 #define nativeFetchThenSubtract64(ptr, value) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
102 #define nativeIncrementThenFetch64(ptr) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
103 #define nativeDecrementThenFetch64(ptr) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
104 #define nativeAddThenFetch64(ptr, value) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
105 #define nativeSubtractThenFetch64(ptr, value) ()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
106 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
107
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
108 /*
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
109 If any of the operations are not provided then we must emulate some of
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
110 them.
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
111 */
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
112
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
113 #if !defined(HAVE_ALL_8_BIT_OPS) || !defined(HAVE_ALL_16_BIT_OPS) || !defined(HAVE_ALL_64_BIT_OPS)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
114
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
115 #include "SDL_mutex.h"
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
116 #include "SDL_error.h"
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
117
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
118 static SDL_mutex * lock = NULL;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
119
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
120 static __inline__ void
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
121 privateWaitLock()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
122 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
123 if(NULL == lock)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
124 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
125 lock = SDL_CreateMutex();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
126 if (NULL == lock)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
127 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
128 SDL_SetError("SDL_atomic.c: can't create a mutex");
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
129 return;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
130 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
131 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
132
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
133 if (-1 == SDL_LockMutex(lock))
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
134 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
135 SDL_SetError("SDL_atomic.c: can't lock mutex");
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
136 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
137 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
138
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
139 static __inline__ void
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
140 privateUnlock()
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
141 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
142 if (-1 == SDL_UnlockMutex(lock))
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
143 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
144 SDL_SetError("SDL_atomic.c: can't unlock mutex");
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
145 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
146 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
147
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
148 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
149
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
150 /* 8 bit atomic operations */
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
151
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
152 Uint8
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
153 SDL_AtomicExchange8(volatile Uint8 * ptr, Uint8 value)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
154 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
155 #ifdef nativeExchange8
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
156 return nativeExchange8(ptr, value);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
157 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
158 Uint8 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
159
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
160 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
161 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
162 *ptr = value;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
163 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
164
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
165 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
166 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
167 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
168
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
169 SDL_bool
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
170 SDL_AtomicCompareThenSet8(volatile Uint8 * ptr, Uint8 oldvalue, Uint8 newvalue)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
171 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
172 #ifdef nativeCompareThenSet8
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
173 return (SDL_bool)nativeCompareThenSet8(ptr, oldvalue, newvalue);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
174 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
175 SDL_bool result = SDL_FALSE;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
176
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
177 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
178 result = (*ptr == oldvalue);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
179 if (result)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
180 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
181 *ptr = newvalue;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
182 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
183 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
184
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
185 return result;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
186 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
187 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
188
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
189 SDL_bool
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
190 SDL_AtomicTestThenSet8(volatile Uint8 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
191 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
192 #ifdef nativeTestThenSet8
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
193 return (SDL_bool)nativeTestThenSet8(ptr);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
194 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
195 SDL_bool result = SDL_FALSE;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
196
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
197 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
198 result = (*ptr == 0);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
199 if (result)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
200 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
201 *ptr = 1;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
202 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
203 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
204
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
205 return result;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
206 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
207 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
208
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
209 void
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
210 SDL_AtomicClear8(volatile Uint8 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
211 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
212 #ifdef nativeClear8
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
213 nativeClear8(ptr);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
214 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
215 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
216 *ptr = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
217 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
218
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
219 return;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
220 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
221 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
222
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
223 Uint8
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
224 SDL_AtomicFetchThenIncrement8(volatile Uint8 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
225 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
226 #ifdef nativeFetchThenIncrement8
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
227 return nativeFetchThenIncrement8(ptr);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
228 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
229 Uint8 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
230
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
231 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
232 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
233 (*ptr)+= 1;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
234 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
235
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
236 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
237 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
238 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
239
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
240 Uint8
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
241 SDL_AtomicFetchThenDecrement8(volatile Uint8 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
242 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
243 #ifdef nativeFetchThenDecrement8
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
244 return nativeFetchThenDecrement8(ptr);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
245 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
246 Uint8 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
247
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
248 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
249 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
250 (*ptr) -= 1;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
251 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
252
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
253 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
254 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
255 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
256
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
257 Uint8
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
258 SDL_AtomicFetchThenAdd8(volatile Uint8 * ptr, Uint8 value)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
259 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
260 #ifdef nativeFetchThenAdd8
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
261 return nativeFetchThenAdd8(ptr, value);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
262 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
263 Uint8 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
264
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
265 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
266 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
267 (*ptr)+= value;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
268 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
269
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
270 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
271 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
272 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
273
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
274 Uint8
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
275 SDL_AtomicFetchThenSubtract8(volatile Uint8 * ptr, Uint8 value)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
276 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
277 #ifdef nativeFetchThenSubtract8
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
278 return nativeFetchThenSubtract8(ptr, value);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
279 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
280 Uint8 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
281
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
282 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
283 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
284 (*ptr)-= value;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
285 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
286
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
287 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
288 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
289 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
290
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
291 Uint8
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
292 SDL_AtomicIncrementThenFetch8(volatile Uint8 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
293 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
294 #ifdef nativeIncrementThenFetch8
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
295 return nativeIncrementThenFetch8(ptr);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
296 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
297 Uint8 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
298
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
299 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
300 (*ptr)+= 1;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
301 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
302 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
303
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
304 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
305 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
306 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
307
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
308 Uint8
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
309 SDL_AtomicDecrementThenFetch8(volatile Uint8 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
310 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
311 #ifdef nativeDecrementThenFetch8
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
312 return nativeDecrementThenFetch8(ptr);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
313 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
314 Uint8 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
315
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
316 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
317 (*ptr)-= 1;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
318 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
319 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
320
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
321 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
322 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
323 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
324
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
325 Uint8
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
326 SDL_AtomicAddThenFetch8(volatile Uint8 * ptr, Uint8 value)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
327 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
328 #ifdef nativeAddThenFetch8
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
329 return nativeAddThenFetch8(ptr, value);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
330 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
331 Uint8 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
332
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
333 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
334 (*ptr)+= value;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
335 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
336 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
337
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
338 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
339 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
340 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
341
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
342 Uint8
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
343 SDL_AtomicSubtractThenFetch8(volatile Uint8 * ptr, Uint8 value)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
344 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
345 #ifdef nativeSubtractThenFetch8
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
346 return nativeSubtractThenFetch8(ptr, value);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
347 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
348 Uint8 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
349
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
350 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
351 (*ptr)-= value;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
352 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
353 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
354
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
355 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
356 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
357 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
358
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
359 /* 16 bit atomic operations */
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
360
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
361 Uint16
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
362 SDL_AtomicExchange16(volatile Uint16 * ptr, Uint16 value)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
363 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
364 #ifdef nativeExchange16
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
365 return nativeExchange16(ptr, value);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
366 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
367 Uint16 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
368
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
369 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
370 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
371 *ptr = value;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
372 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
373
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
374 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
375 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
376 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
377
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
378 SDL_bool
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
379 SDL_AtomicCompareThenSet16(volatile Uint16 * ptr, Uint16 oldvalue, Uint16 newvalue)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
380 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
381 #ifdef nativeCompareThenSet16
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
382 return (SDL_bool)nativeCompareThenSet16(ptr, oldvalue, newvalue);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
383 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
384 SDL_bool result = SDL_FALSE;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
385
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
386 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
387 result = (*ptr == oldvalue);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
388 if (result)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
389 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
390 *ptr = newvalue;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
391 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
392 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
393
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
394 return result;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
395 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
396 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
397
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
398 SDL_bool
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
399 SDL_AtomicTestThenSet16(volatile Uint16 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
400 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
401 #ifdef nativeTestThenSet16
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
402 return (SDL_bool)nativeTestThenSet16(ptr);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
403 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
404 SDL_bool result = SDL_FALSE;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
405
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
406 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
407 result = (*ptr == 0);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
408 if (result)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
409 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
410 *ptr = 1;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
411 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
412 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
413
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
414 return result;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
415 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
416 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
417
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
418 void
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
419 SDL_AtomicClear16(volatile Uint16 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
420 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
421 #ifdef nativeClear16
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
422 nativeClear16(ptr);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
423 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
424 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
425 *ptr = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
426 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
427
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
428 return;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
429 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
430 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
431
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
432 Uint16
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
433 SDL_AtomicFetchThenIncrement16(volatile Uint16 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
434 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
435 #ifdef nativeFetchThenIncrement16
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
436 return nativeFetchThenIncrement16(ptr);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
437 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
438 Uint16 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
439
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
440 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
441 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
442 (*ptr)+= 1;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
443 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
444
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
445 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
446 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
447 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
448
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
449 Uint16
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
450 SDL_AtomicFetchThenDecrement16(volatile Uint16 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
451 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
452 #ifdef nativeFetchThenDecrement16
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
453 return nativeFetchThenDecrement16(ptr);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
454 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
455 Uint16 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
456
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
457 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
458 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
459 (*ptr) -= 1;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
460 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
461
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
462 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
463 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
464 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
465
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
466 Uint16
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
467 SDL_AtomicFetchThenAdd16(volatile Uint16 * ptr, Uint16 value)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
468 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
469 #ifdef nativeFetchThenAdd16
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
470 return nativeFetchThenAdd16(ptr, value);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
471 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
472 Uint16 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
473
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
474 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
475 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
476 (*ptr)+= value;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
477 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
478
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
479 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
480 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
481 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
482
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
483 Uint16
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
484 SDL_AtomicFetchThenSubtract16(volatile Uint16 * ptr, Uint16 value)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
485 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
486 #ifdef nativeFetchThenSubtract16
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
487 return nativeFetchThenSubtract16(ptr, value);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
488 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
489 Uint16 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
490
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
491 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
492 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
493 (*ptr)-= value;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
494 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
495
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
496 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
497 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
498 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
499
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
500 Uint16
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
501 SDL_AtomicIncrementThenFetch16(volatile Uint16 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
502 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
503 #ifdef nativeIncrementThenFetch16
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
504 return nativeIncrementThenFetch16(ptr);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
505 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
506 Uint16 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
507
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
508 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
509 (*ptr)+= 1;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
510 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
511 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
512
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
513 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
514 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
515 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
516
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
517 Uint16
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
518 SDL_AtomicDecrementThenFetch16(volatile Uint16 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
519 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
520 #ifdef nativeDecrementThenFetch16
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
521 return nativeDecrementThenFetch16(ptr);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
522 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
523 Uint16 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
524
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
525 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
526 (*ptr)-= 1;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
527 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
528 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
529
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
530 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
531 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
532 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
533
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
534 Uint16
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
535 SDL_AtomicAddThenFetch16(volatile Uint16 * ptr, Uint16 value)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
536 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
537 #ifdef nativeAddThenFetch16
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
538 return nativeAddThenFetch16(ptr, value);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
539 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
540 Uint16 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
541
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
542 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
543 (*ptr)+= value;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
544 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
545 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
546
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
547 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
548 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
549 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
550
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
551 Uint16
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
552 SDL_AtomicSubtractThenFetch16(volatile Uint16 * ptr, Uint16 value)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
553 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
554 #ifdef nativeSubtractThenFetch16
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
555 return nativeSubtractThenFetch16(ptr, value);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
556 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
557 Uint16 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
558
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
559 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
560 (*ptr)-= value;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
561 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
562 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
563
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
564 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
565 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
566 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
567
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
568 /* 64 bit atomic operations */
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
569 #ifdef SDL_HAS_64BIT_TYPE
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
570
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
571 Uint64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
572 SDL_AtomicExchange64(volatile Uint64 * ptr, Uint64 value)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
573 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
574 #ifdef nativeExchange64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
575 return nativeExchange64(ptr, value);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
576 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
577 Uint64 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
578
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
579 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
580 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
581 *ptr = value;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
582 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
583
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
584 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
585 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
586 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
587
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
588 SDL_bool
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
589 SDL_AtomicCompareThenSet64(volatile Uint64 * ptr, Uint64 oldvalue, Uint64 newvalue)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
590 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
591 #ifdef nativeCompareThenSet64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
592 return (SDL_bool)nativeCompareThenSet64(ptr, oldvalue, newvalue);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
593 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
594 SDL_bool result = SDL_FALSE;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
595
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
596 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
597 result = (*ptr == oldvalue);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
598 if (result)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
599 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
600 *ptr = newvalue;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
601 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
602 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
603
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
604 return result;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
605 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
606 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
607
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
608 SDL_bool
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
609 SDL_AtomicTestThenSet64(volatile Uint64 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
610 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
611 #ifdef nativeTestThenSet64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
612 return (SDL_bool)nativeTestThenSet64(ptr);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
613 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
614 SDL_bool result = SDL_FALSE;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
615
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
616 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
617 result = (*ptr == 0);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
618 if (result)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
619 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
620 *ptr = 1;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
621 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
622 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
623
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
624 return result;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
625 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
626 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
627
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
628 void
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
629 SDL_AtomicClear64(volatile Uint64 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
630 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
631 #ifdef nativeClear64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
632 nativeClear64(ptr);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
633 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
634 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
635 *ptr = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
636 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
637
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
638 return;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
639 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
640 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
641
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
642 Uint64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
643 SDL_AtomicFetchThenIncrement64(volatile Uint64 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
644 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
645 #ifdef nativeFetchThenIncrement64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
646 return nativeFetchThenIncrement64(ptr);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
647 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
648 Uint64 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
649
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
650 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
651 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
652 (*ptr)+= 1;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
653 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
654
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
655 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
656 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
657 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
658
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
659 Uint64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
660 SDL_AtomicFetchThenDecrement64(volatile Uint64 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
661 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
662 #ifdef nativeFetchThenDecrement64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
663 return nativeFetchThenDecrement64(ptr);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
664 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
665 Uint64 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
666
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
667 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
668 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
669 (*ptr) -= 1;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
670 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
671
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
672 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
673 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
674 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
675
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
676 Uint64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
677 SDL_AtomicFetchThenAdd64(volatile Uint64 * ptr, Uint64 value)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
678 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
679 #ifdef nativeFetchThenAdd64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
680 return nativeFetchThenAdd64(ptr, value);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
681 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
682 Uint64 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
683
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
684 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
685 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
686 (*ptr)+= value;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
687 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
688
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
689 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
690 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
691 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
692
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
693 Uint64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
694 SDL_AtomicFetchThenSubtract64(volatile Uint64 * ptr, Uint64 value)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
695 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
696 #ifdef nativeFetchThenSubtract64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
697 return nativeFetchThenSubtract64(ptr, value);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
698 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
699 Uint64 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
700
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
701 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
702 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
703 (*ptr)-= value;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
704 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
705
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
706 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
707 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
708 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
709
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
710 Uint64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
711 SDL_AtomicIncrementThenFetch64(volatile Uint64 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
712 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
713 #ifdef nativeIncrementThenFetch64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
714 return nativeIncrementThenFetch64(ptr);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
715 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
716 Uint64 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
717
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
718 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
719 (*ptr)+= 1;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
720 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
721 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
722
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
723 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
724 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
725 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
726
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
727 Uint64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
728 SDL_AtomicDecrementThenFetch64(volatile Uint64 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
729 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
730 #ifdef nativeDecrementThenFetch64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
731 return nativeDecrementThenFetch64(ptr);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
732 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
733 Uint64 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
734
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
735 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
736 (*ptr)-= 1;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
737 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
738 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
739
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
740 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
741 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
742 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
743
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
744 Uint64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
745 SDL_AtomicAddThenFetch64(volatile Uint64 * ptr, Uint64 value)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
746 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
747 #ifdef nativeAddThenFetch64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
748 return nativeAddThenFetch64(ptr, value);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
749 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
750 Uint64 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
751
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
752 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
753 (*ptr)+= value;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
754 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
755 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
756
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
757 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
758 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
759 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
760
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
761 Uint64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
762 SDL_AtomicSubtractThenFetch64(volatile Uint64 * ptr, Uint64 value)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
763 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
764 #ifdef nativeSubtractThenFetch64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
765 return nativeSubtractThenFetch64(ptr, value);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
766 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
767 Uint64 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
768
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
769 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
770 (*ptr)-= value;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
771 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
772 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
773
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
774 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
775 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
776 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
777 #endif
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
778
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
779 /* QNX native 32 bit atomic operations */
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
780
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
781 Uint32
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
782 SDL_AtomicExchange32(volatile Uint32 * ptr, Uint32 value)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
783 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
784 Uint32 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
785
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
786 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
787 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
788 *ptr = value;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
789 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
790
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
791 return tmp;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
792 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
793
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
794 SDL_bool
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
795 SDL_AtomicCompareThenSet32(volatile Uint32 * ptr, Uint32 oldvalue, Uint32 newvalue)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
796 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
797 SDL_bool result = SDL_FALSE;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
798
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
799 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
800 result = (*ptr == oldvalue);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
801 if (result)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
802 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
803 *ptr = newvalue;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
804 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
805 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
806
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
807 return result;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
808 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
809
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
810 SDL_bool
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
811 SDL_AtomicTestThenSet32(volatile Uint32 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
812 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
813 SDL_bool result = SDL_FALSE;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
814
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
815 privateWaitLock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
816 result = (*ptr == 0);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
817 if (result)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
818 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
819 *ptr = 1;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
820 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
821 privateUnlock();
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
822
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
823 return result;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
824 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
825
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
826 void
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
827 SDL_AtomicClear32(volatile Uint32 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
828 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
829 atomic_clr(ptr, 0xFFFFFFFF);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
830 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
831
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
832 Uint32
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
833 SDL_AtomicFetchThenIncrement32(volatile Uint32 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
834 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
835 return atomic_add_value(ptr, 0x00000001);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
836 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
837
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
838 Uint32
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
839 SDL_AtomicFetchThenDecrement32(volatile Uint32 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
840 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
841 return atomic_sub_value(ptr, 0x00000001);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
842 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
843
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
844 Uint32
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
845 SDL_AtomicFetchThenAdd32(volatile Uint32 * ptr, Uint32 value)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
846 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
847 return atomic_add_value(ptr, value);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
848 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
849
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
850 Uint32
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
851 SDL_AtomicFetchThenSubtract32(volatile Uint32 * ptr, Uint32 value)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
852 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
853 return atomic_sub_value(ptr, value);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
854 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
855
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
856 Uint32
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
857 SDL_AtomicIncrementThenFetch32(volatile Uint32 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
858 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
859 atomic_add(ptr, 0x00000001);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
860 return atomic_add_value(ptr, 0x00000000);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
861 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
862
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
863 Uint32
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
864 SDL_AtomicDecrementThenFetch32(volatile Uint32 * ptr)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
865 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
866 atomic_sub(ptr, 0x00000001);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
867 return atomic_sub_value(ptr, 0x00000000);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
868 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
869
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
870 Uint32
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
871 SDL_AtomicAddThenFetch32(volatile Uint32 * ptr, Uint32 value)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
872 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
873 atomic_add(ptr, value);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
874 return atomic_add_value(ptr, 0x00000000);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
875 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
876
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
877 Uint32
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
878 SDL_AtomicSubtractThenFetch32(volatile Uint32 * ptr, Uint32 value)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
879 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
880 atomic_sub(ptr, value);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
881 return atomic_sub_value(ptr, 0x00000000);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
882 }