Mercurial > sdl-ios-xcode
annotate src/atomic/qnx/SDL_atomic.c @ 4495:dbbfdb9ea716
Simplified clipboard API for sanity's sake.
A complete clipboard implementation would support multiple formats that could be queried at runtime, events for when the clipboard contents changed, support for HTML, images, etc. We're not going that crazy, at least for now. :)
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Wed, 07 Jul 2010 23:54:03 -0700 |
parents | f7b03b6838cb |
children |
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 |
3697 | 3 Copyright (C) 1997-2010 Sam Lantinga |
3217
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 */ |