annotate src/atomic/qnx/SDL_atomic.c @ 3439:0acec8c9f5c9

Fixed some bugs in the automated test suite, revealed by working SDL_RenderReadPixels()
author Sam Lantinga <slouken@libsdl.org>
date Tue, 17 Nov 2009 05:17:11 +0000
parents 70bfe3337f8a
children f7b03b6838cb
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
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
21
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
22 QNX native atomic operations
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
23 Copyright (C) 2009 Mike Gorchak
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
24 (mike@malva.ua, lestat@i.com.ua)
3217
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
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
27 #include "SDL_stdinc.h"
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
28 #include "SDL_atomic.h"
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
29 #include "SDL_error.h"
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
30
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
31 #include <atomic.h>
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
32
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
33 /* SMP Exchange for PPC platform */
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
34 #ifdef __PPC__
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
35 #include <ppc/smpxchg.h>
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
36 #endif /* __PPC__ */
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
37
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
38 /* SMP Exchange for ARM platform */
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
39 #ifdef __ARM__
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
40 #include <arm/smpxchg.h>
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
41 #endif /* __ARM__ */
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
42
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
43 /* SMP Exchange for MIPS platform */
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
44 #if defined (__MIPSEB__) || defined(__MIPSEL__)
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
45 #include <mips/smpxchg.h>
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
46 #endif /* __MIPSEB__ || __MIPSEL__ */
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
47
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
48 /* SMP Exchange for SH platform */
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
49 #ifdef __SH__
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
50 #include <sh/smpxchg.h>
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
51 #endif /* __SH__ */
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
52
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
53 /* SMP Exchange for x86 platform */
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
54 #ifdef __X86__
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
55 #include <x86/smpxchg.h>
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
56 #endif /* __X86__ */
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
57
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
58 /*
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
59 This file provides 32, and 64 bit atomic operations. If the
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
60 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
61 they are used. If they are not then the operations are emulated
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
62 using the SDL spin lock operations. If spin lock can not be
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
63 implemented then these functions must fail.
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
64 */
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
65
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
66 void
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
67 SDL_AtomicLock(SDL_SpinLock *lock)
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
68 {
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
69 unsigned volatile* l = (unsigned volatile*)lock;
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
70 Uint32 oldval = 0;
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
71 Uint32 newval = 1;
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
72
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
73 oldval = _smp_xchg(l, newval);
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
74 while(1 == oldval)
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
75 {
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
76 oldval = _smp_xchg(l, newval);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
77 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
78 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
79
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
80 void
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
81 SDL_AtomicUnlock(SDL_SpinLock *lock)
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
82 {
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
83 unsigned volatile* l = (unsigned volatile*)lock;
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
84 Uint32 newval = 0;
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
85
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
86 _smp_xchg(l, newval);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
87 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
88
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
89 /*
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
90 QNX 6.4.1 supports only 32 bit atomic access
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
91 */
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
92
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
93 #undef nativeTestThenSet32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
94 #define nativeClear32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
95 #define nativeFetchThenIncrement32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
96 #define nativeFetchThenDecrement32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
97 #define nativeFetchThenAdd32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
98 #define nativeFetchThenSubtract32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
99 #define nativeIncrementThenFetch32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
100 #define nativeDecrementThenFetch32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
101 #define nativeAddThenFetch32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
102 #define nativeSubtractThenFetch32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
103
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
104 #undef nativeTestThenSet64
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
105 #undef nativeClear64
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
106 #undef nativeFetchThenIncrement64
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
107 #undef nativeFetchThenDecrement64
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
108 #undef nativeFetchThenAdd64
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
109 #undef nativeFetchThenSubtract64
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
110 #undef nativeIncrementThenFetch64
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
111 #undef nativeDecrementThenFetch64
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
112 #undef nativeAddThenFetch64
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
113 #undef nativeSubtractThenFetch64
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
114
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
115 /*
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
116 If any of the operations are not provided then we must emulate some
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
117 of them. That means we need a nice implementation of spin locks
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
118 that avoids the "one big lock" problem. We use a vector of spin
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
119 locks and pick which one to use based on the address of the operand
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
120 of the function.
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
121
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
122 To generate the index of the lock we first shift by 3 bits to get
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
123 rid on the zero bits that result from 32 and 64 bit allignment of
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
124 data. We then mask off all but 5 bits and use those 5 bits as an
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
125 index into the table.
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
126
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
127 Picking the lock this way insures that accesses to the same data at
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
128 the same time will go to the same lock. OTOH, accesses to different
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
129 data have only a 1/32 chance of hitting the same lock. That should
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
130 pretty much eliminate the chances of several atomic operations on
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
131 different data from waiting on the same "big lock". If it isn't
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
132 then the table of locks can be expanded to a new size so long as
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
133 the new size is a power of two.
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
134 */
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
135
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
136 static SDL_SpinLock locks[32] = {
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
137 0, 0, 0, 0, 0, 0, 0, 0,
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
138 0, 0, 0, 0, 0, 0, 0, 0,
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
139 0, 0, 0, 0, 0, 0, 0, 0,
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
140 0, 0, 0, 0, 0, 0, 0, 0,
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
141 };
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
142
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
143 static __inline__ void
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
144 privateWaitLock(volatile void *ptr)
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
145 {
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
146 #if SIZEOF_VOIDP == 4
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
147 Uint32 index = ((((Uint32)ptr) >> 3) & 0x1f);
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
148 #elif SIZEOF_VOIDP == 8
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
149 Uint64 index = ((((Uint64)ptr) >> 3) & 0x1f);
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
150 #endif /* SIZEOF_VOIDP */
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
151
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
152 SDL_AtomicLock(&locks[index]);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
153 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
154
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
155 static __inline__ void
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
156 privateUnlock(volatile void *ptr)
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
157 {
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
158 #if SIZEOF_VOIDP == 4
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
159 Uint32 index = ((((Uint32)ptr) >> 3) & 0x1f);
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
160 #elif SIZEOF_VOIDP == 8
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
161 Uint64 index = ((((Uint64)ptr) >> 3) & 0x1f);
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
162 #endif /* SIZEOF_VOIDP */
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
163
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
164 SDL_AtomicUnlock(&locks[index]);
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
165 }
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
166
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
167 /* 32 bit atomic operations */
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
168
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
169 SDL_bool
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
170 SDL_AtomicTestThenSet32(volatile Uint32 * ptr)
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
171 {
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
172 #ifdef nativeTestThenSet32
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
173 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
174 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
175
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
176 privateWaitLock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
177 result = (*ptr == 0);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
178 if (result)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
179 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
180 *ptr = 1;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
181 }
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
182 privateUnlock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
183
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
184 return result;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
185 #endif /* nativeTestThenSet32 */
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
186 }
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 void
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
189 SDL_AtomicClear32(volatile Uint32 * ptr)
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
190 {
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
191 #ifdef nativeClear32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
192 atomic_clr(ptr, 0xFFFFFFFF);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
193 #else
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
194 privateWaitLock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
195 *ptr = 0;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
196 privateUnlock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
197
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
198 return;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
199 #endif /* nativeClear32 */
3217
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
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
202 Uint32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
203 SDL_AtomicFetchThenIncrement32(volatile Uint32 * ptr)
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
204 {
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
205 #ifdef nativeFetchThenIncrement32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
206 return atomic_add_value(ptr, 0x00000001);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
207 #else
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
208 Uint32 tmp = 0;
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
209
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
210 privateWaitLock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
211 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
212 (*ptr)+= 1;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
213 privateUnlock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
214
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
215 return tmp;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
216 #endif /* nativeFetchThenIncrement32 */
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
217 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
218
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
219 Uint32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
220 SDL_AtomicFetchThenDecrement32(volatile Uint32 * ptr)
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
221 {
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
222 #ifdef nativeFetchThenDecrement32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
223 return atomic_sub_value(ptr, 0x00000001);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
224 #else
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
225 Uint32 tmp = 0;
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
226
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
227 privateWaitLock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
228 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
229 (*ptr) -= 1;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
230 privateUnlock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
231
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
232 return tmp;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
233 #endif /* nativeFetchThenDecrement32 */
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
234 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
235
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
236 Uint32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
237 SDL_AtomicFetchThenAdd32(volatile Uint32 * ptr, Uint32 value)
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
238 {
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
239 #ifdef nativeFetchThenAdd32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
240 return atomic_add_value(ptr, value);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
241 #else
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
242 Uint32 tmp = 0;
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
243
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
244 privateWaitLock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
245 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
246 (*ptr)+= value;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
247 privateUnlock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
248
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
249 return tmp;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
250 #endif /* nativeFetchThenAdd32 */
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
251 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
252
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
253 Uint32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
254 SDL_AtomicFetchThenSubtract32(volatile Uint32 * ptr, Uint32 value)
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
255 {
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
256 #ifdef nativeFetchThenSubtract32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
257 return atomic_sub_value(ptr, value);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
258 #else
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
259 Uint32 tmp = 0;
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
260
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
261 privateWaitLock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
262 tmp = *ptr;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
263 (*ptr)-= value;
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
264 privateUnlock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
265
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
266 return tmp;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
267 #endif /* nativeFetchThenSubtract32 */
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
268 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
269
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
270 Uint32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
271 SDL_AtomicIncrementThenFetch32(volatile Uint32 * ptr)
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
272 {
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
273 #ifdef nativeIncrementThenFetch32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
274 atomic_add(ptr, 0x00000001);
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
275 return atomic_add_value(ptr, 0x00000000);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
276 #else
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
277 Uint32 tmp = 0;
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
278
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
279 privateWaitLock(ptr);
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
280 (*ptr)+= 1;
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
281 tmp = *ptr;
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
282 privateUnlock(ptr);
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
283
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
284 return tmp;
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
285 #endif /* nativeIncrementThenFetch32 */
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
286 }
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
287
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
288 Uint32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
289 SDL_AtomicDecrementThenFetch32(volatile Uint32 * ptr)
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
290 {
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
291 #ifdef nativeDecrementThenFetch32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
292 atomic_sub(ptr, 0x00000001);
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
293 return atomic_sub_value(ptr, 0x00000000);
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
294 #else
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
295 Uint32 tmp = 0;
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
296
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
297 privateWaitLock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
298 (*ptr)-= 1;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
299 tmp = *ptr;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
300 privateUnlock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
301
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
302 return tmp;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
303 #endif /* nativeDecrementThenFetch32 */
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
304 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
305
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
306 Uint32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
307 SDL_AtomicAddThenFetch32(volatile Uint32 * ptr, Uint32 value)
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
308 {
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
309 #ifdef nativeAddThenFetch32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
310 atomic_add(ptr, value);
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
311 return atomic_add_value(ptr, 0x00000000);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
312 #else
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
313 Uint32 tmp = 0;
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
314
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
315 privateWaitLock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
316 (*ptr)+= value;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
317 tmp = *ptr;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
318 privateUnlock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
319
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
320 return tmp;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
321 #endif /* nativeAddThenFetch32 */
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
322 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
323
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
324 Uint32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
325 SDL_AtomicSubtractThenFetch32(volatile Uint32 * ptr, Uint32 value)
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
326 {
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
327 #ifdef nativeSubtractThenFetch32
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
328 atomic_sub(ptr, value);
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
329 return atomic_sub_value(ptr, 0x00000000);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
330 #else
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
331 Uint32 tmp = 0;
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
332
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
333 privateWaitLock(ptr);
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
334 (*ptr)-= value;
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
335 tmp = *ptr;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
336 privateUnlock(ptr);
3217
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;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
339 #endif /* nativeSubtractThenFetch32 */
3217
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
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
342 /* 64 bit atomic operations */
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
343 #ifdef SDL_HAS_64BIT_TYPE
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
344
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
345 SDL_bool
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
346 SDL_AtomicTestThenSet64(volatile Uint64 * ptr)
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
347 {
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
348 #ifdef nativeTestThenSet64
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
349 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
350 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
351
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
352 privateWaitLock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
353 result = (*ptr == 0);
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
354 if (result)
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
355 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
356 *ptr = 1;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
357 }
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
358 privateUnlock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
359
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
360 return result;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
361 #endif /* nativeTestThenSet64 */
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
362 }
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 void
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
365 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
366 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
367 #ifdef nativeClear64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
368 #else
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
369 privateWaitLock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
370 *ptr = 0;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
371 privateUnlock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
372
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
373 return;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
374 #endif /* nativeClear64 */
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
375 }
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 Uint64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
378 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
379 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
380 #ifdef nativeFetchThenIncrement64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
381 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
382 Uint64 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
383
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
384 privateWaitLock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
385 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
386 (*ptr)+= 1;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
387 privateUnlock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
388
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
389 return tmp;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
390 #endif /* nativeFetchThenIncrement64 */
3217
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
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
393 Uint64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
394 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
395 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
396 #ifdef nativeFetchThenDecrement64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
397 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
398 Uint64 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
399
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
400 privateWaitLock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
401 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
402 (*ptr) -= 1;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
403 privateUnlock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
404
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
405 return tmp;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
406 #endif /* nativeFetchThenDecrement64 */
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
407 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
408
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
409 Uint64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
410 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
411 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
412 #ifdef nativeFetchThenAdd64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
413 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
414 Uint64 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
415
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
416 privateWaitLock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
417 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
418 (*ptr)+= value;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
419 privateUnlock(ptr);
3217
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 return tmp;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
422 #endif /* nativeFetchThenAdd64 */
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
423 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
424
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
425 Uint64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
426 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
427 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
428 #ifdef nativeFetchThenSubtract64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
429 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
430 Uint64 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
431
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
432 privateWaitLock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
433 tmp = *ptr;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
434 (*ptr)-= value;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
435 privateUnlock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
436
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
437 return tmp;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
438 #endif /* nativeFetchThenSubtract64 */
3217
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
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
441 Uint64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
442 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
443 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
444 #ifdef nativeIncrementThenFetch64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
445 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
446 Uint64 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
447
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
448 privateWaitLock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
449 (*ptr)+= 1;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
450 tmp = *ptr;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
451 privateUnlock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
452
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
453 return tmp;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
454 #endif /* nativeIncrementThenFetch64 */
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
455 }
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 Uint64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
458 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
459 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
460 #ifdef nativeDecrementThenFetch64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
461 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
462 Uint64 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
463
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
464 privateWaitLock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
465 (*ptr)-= 1;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
466 tmp = *ptr;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
467 privateUnlock(ptr);
3217
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 return tmp;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
470 #endif /* nativeDecrementThenFetch64 */
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
471 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
472
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
473 Uint64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
474 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
475 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
476 #ifdef nativeAddThenFetch64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
477 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
478 Uint64 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
479
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
480 privateWaitLock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
481 (*ptr)+= value;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
482 tmp = *ptr;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
483 privateUnlock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
484
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
485 return tmp;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
486 #endif /* nativeAddThenFetch64 */
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
487 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
488
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
489 Uint64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
490 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
491 {
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
492 #ifdef nativeSubtractThenFetch64
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
493 #else
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
494 Uint64 tmp = 0;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
495
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
496 privateWaitLock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
497 (*ptr)-= value;
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
498 tmp = *ptr;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
499 privateUnlock(ptr);
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
500
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
501 return tmp;
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
502 #endif /* nativeSubtractThenFetch64 */
3217
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
503 }
26ce0b98f2fb Support for native and emulated atomic operations has been added.
Mike Gorchak <lestat@i.com.ua>
parents:
diff changeset
504
3364
70bfe3337f8a Support for the atomic operations for ARM, PPC, MIPS, SH, X86 platforms has been added.
Mike Gorchak <lestat@i.com.ua>
parents: 3217
diff changeset
505 #endif /* SDL_HAS_64BIT_TYPE */