ObjFW  History of src/atomic.h of b9b4a8e27054f717

History of the file that is called src/atomic.h at check-in b9b4a8e27054f717

2024-04-03
02:16
[98096c2476] part of check-in [7413a728a7] Change license to LGPLv3 only (check-in: [7413a728a7] user: js, branch: trunk, size: 3854) [annotate] [blame] [check-ins using] [diff]
2024-01-02
17:17
[44218ac496] part of check-in [26ddd2e4e4] Update copyright (check-in: [26ddd2e4e4] user: js, branch: trunk, size: 3646) [annotate] [blame] [check-ins using] [diff]
2023-04-22
20:22
[7b3ed1a98e] part of check-in [b7a4e61b88] Rename x86_64 to AMD64

It's just a less awkward name and also what the BSDs use. (check-in: [b7a4e61b88] user: js, branch: trunk, size: 3646) [annotate] [blame] [check-ins using] [diff]

2023-01-06
09:04
[bcb517e893] part of check-in [8939cbdb52] Update copyright (check-in: [8939cbdb52] user: js, branch: trunk, size: 3647) [annotate] [blame] [check-ins using] [diff]
2022-02-12
07:46
[25c89d25b5] part of check-in [1a86b8175b] Update copyright (check-in: [1a86b8175b] user: js, branch: trunk, size: 3647) [annotate] [blame] [check-ins using] [diff]
2021-05-01
03:21
[cd35260cdb] part of check-in [1aedad1588] Move OFAtomic.h variants to src/platform (check-in: [1aedad1588] user: js, branch: trunk, size: 3647) [annotate] [blame] [check-ins using] [diff]
2021-04-18
20:51
Renamed src/atomic.h → src/OFAtomic.h. [113d14691a] part of check-in [35de667566] Rename everything in several smaller files (check-in: [35de667566] user: js, branch: new-naming-convention, size: 1184) [annotate] [blame] [check-ins using] [diff]
2021-01-02
22:04
[7f44045855] part of check-in [374e1a1bfa] Update copyright (check-in: [374e1a1bfa] user: js, branch: trunk, size: 1172) [annotate] [blame] [check-ins using] [diff]
2020-12-12
22:31
[6778d083ff] part of check-in [c859e2230c] Remove OF_*_ASM defines

Duplicating defines for every CPU architecture is not very useful. (check-in: [c859e2230c] user: js, branch: trunk, size: 1261) [annotate] [blame] [check-ins using] [diff]

2020-01-02
01:51
[7db74776cf] part of check-in [c7f0229795] Update copyright (check-in: [c7f0229795] user: js, branch: trunk, size: 1223) [annotate] [blame] [check-ins using] [diff]
2019-01-27
16:13
[e53591a99c] part of check-in [4a6d9cd210] atomic.h: Don't use assembly implementation on AIX

The assembler on AIX is too limited. (check-in: [4a6d9cd210] user: js, branch: trunk, size: 1220) [annotate] [blame] [check-ins using] [diff]

2019-01-03
19:13
[eb0ca3c5ef] part of check-in [0509d7a844] Update copyright (check-in: [0509d7a844] user: js, branch: trunk, size: 1200) [annotate] [blame] [check-ins using] [diff]
2018-01-03
19:49
[40e749ef18] part of check-in [7e5c81e186] Update copyright notice (check-in: [7e5c81e186] user: js, branch: trunk, size: 1194) [annotate] [blame] [check-ins using] [diff]
2017-05-13
19:38
[72942f053d] part of check-in [636533772e] Do not use atomic_powerpc.h with Apple GCC

Apple GCC uses register 0 for "r" and there seems to be no way to avoid
this, while modern GCC does not seem to consider register 0 to be a GPR. (check-in: [636533772e] user: js, branch: trunk, size: 1171) [annotate] [blame] [check-ins using] [diff]

2017-01-09
17:36
[c91cb23822] part of check-in [44f45c2e35] Update copyright

Forgot to add 2017, even though I already did quite some changes in
2017. (check-in: [44f45c2e35] user: js, branch: trunk, size: 1145) [annotate] [blame] [check-ins using] [diff]

2016-07-31
23:41
[f4bb0c606a] part of check-in [64edae4128] atomic.h: Add support for __atomic_* builtins (check-in: [64edae4128] user: js, branch: trunk, size: 1139) [annotate] [blame] [check-ins using] [diff]
23:04
[f5eb774718] part of check-in [7115c55ef0] Split atomic.h into multiple files

Having one file per implementation reduces the #ifdef hell and makes it
much more readable. (check-in: [7115c55ef0] user: js, branch: trunk, size: 1071) [annotate] [blame] [check-ins using] [diff]

21:54
[0145f59683] part of check-in [24796a2dc1] Add of_memory_barrier_{producer,consumer}()

Also changes the naming slightly (leave -> exit). This is more similar
to the membar_*() API NetBSD and OpenBSD provides. (check-in: [24796a2dc1] user: js, branch: trunk, size: 20414) [annotate] [blame] [check-ins using] [diff]

2016-07-30
23:29
[50acc02363] part of check-in [0c3e3da576] atomic.h: Use the OSAtomic variant without barrier

This matches what the assembly versions does. However, the __sync_*
versions still use the barrier, but unfortunately, no version without it
is provided. The only way around this would be to use the new __atomic_*
that has been added in GCC 4.7. (check-in: [0c3e3da576] user: js, branch: trunk, size: 20052) [annotate] [blame] [check-ins using] [diff]

21:46
[23c4a049f4] part of check-in [9feaa90358] of_memory_barrier(): Only use mfence on x86_64

This is only available on x86 with SSE2, while it's always available on
x86_64. However, checking if SSE2 is available here would be too slow,
therefore let the compiler decide what do do instead (which will depend
on the selected target CPU). (check-in: [9feaa90358] user: js, branch: trunk, size: 20199) [annotate] [blame] [check-ins using] [diff]

21:18
[c6a5af4a20] part of check-in [96a128f954] atomic.h: Improve memory barrier

Replace of_memory_read_barrier() and of_memory_write_barrier() - which
are quite unspecific - with of_memory_enter_barrier() and
of_memory_leave_barrier().

Also add an assembly implementation for ARM and ARM64. (check-in: [96a128f954] user: js, branch: trunk, size: 20222) [annotate] [blame] [check-ins using] [diff]

2016-01-03
00:43
[4b9a633048] part of check-in [cec0f072f8] Update copyright

While at it, also update the mail address. (check-in: [cec0f072f8] user: js, branch: 0.8, size: 20345) [annotate] [blame] [check-ins using] [diff]

00:41
[17afd94567] part of check-in [2a27cf3000] Update copyright

While at it, also update the mail address. (check-in: [2a27cf3000] user: js, branch: trunk, size: 20353) [annotate] [blame] [check-ins using] [diff]

2015-11-21
18:35
[5acf14775c] part of check-in [d526d938d7] Remove OF_NULLABLE / OF_NONNULL

Now that Clang switched to use _Nullable and _Nonnull instead of
__nullable / __nonnull, there is no longer a conflict with glibc, which
means we can just define _Nullable / _Nonnull to nothing if they are not
understood by the compiler (which did not work with __nullable /
__nonnull due to this conflict).

This also defines _Null_unspecified to nothing if unavailable. (check-in: [d526d938d7] user: js, branch: trunk, size: 20349) [annotate] [blame] [check-ins using] [diff]

2015-10-19
22:15
[6e95bb1842] part of check-in [1ba08eebc5] Add platform.h & make platform defines consistent (check-in: [1ba08eebc5] user: js, branch: trunk, size: 20397) [annotate] [blame] [check-ins using] [diff]
2015-06-14
10:45
[cc8d24b757] part of check-in [b7097a67b6] Add OF_NONNULL / OF_NULLABLE and use that instead

Using __nonnull directly doesn't work on systems using glibc, as glibc
defines __nonnull as a parameterized define. While this does not fix the
problem of Clang introducing __nonnull even though it conflicts with
glibc, this at least means it's possible again to compile things with
versions of Clang that don't support __nonnull on systems with glibc. (check-in: [b7097a67b6] user: js, branch: trunk, size: 20341) [annotate] [blame] [check-ins using] [diff]

2015-06-13
22:26
[907e2f3914] part of check-in [9e76144ef8] Add support for and use the new nullability (check-in: [9e76144ef8] user: js, branch: trunk, size: 20317) [annotate] [blame] [check-ins using] [diff]
2015-01-03
20:57
[4c89aaf0ff] part of check-in [cfd374b906] Update copyright (check-in: [cfd374b906] user: js, branch: trunk, size: 20020) [annotate] [blame] [check-ins using] [diff]
2014-05-07
03:19
[e98a87dd4f] part of check-in [93e23b476c] Add atomic ops assembly implementation for PowerPC (check-in: [93e23b476c] user: js, branch: trunk, size: 20014) [annotate] [blame] [check-ins using] [diff]
02:46
[1f71674619] part of check-in [461e70403e] atomic.h: Minor style improvements (check-in: [461e70403e] user: js, branch: trunk, size: 15379) [annotate] [blame] [check-ins using] [diff]
2014-05-05
01:42
[53694a578a] part of check-in [a199313c53] atomic.h: Prefer GCC builtins over ASM

The compiler can optimize the builtins better. For example, if the
result is not used, the compiler can use an instruction that does not
fetch the result and thus might generate more efficient code. (check-in: [a199313c53] user: js, branch: trunk, size: 15396) [annotate] [blame] [check-ins using] [diff]

01:08
[838c97203e] part of check-in [a92844520a] Improve atomics API (check-in: [a92844520a] user: js, branch: trunk, size: 15396) [annotate] [blame] [check-ins using] [diff]
2014-02-22
01:14
[9f476a30f6] part of check-in [05f4b0a4f0] Rename AMD64 to x86_64 (check-in: [05f4b0a4f0] user: js, branch: trunk, size: 15348) [annotate] [blame] [check-ins using] [diff]
2014-02-21
17:16
[a649199f5c] part of check-in [2b00b3cec8] atomic.h: Fix OSAtomic on PPC64 (check-in: [2b00b3cec8] user: js, branch: trunk, size: 15319) [annotate] [blame] [check-ins using] [diff]
2014-01-31
13:33
[5741f77007] part of check-in [0a8dca300b] Make sure there's always an #else in abstractions (check-in: [0a8dca300b] user: js, branch: trunk, size: 16475) [annotate] [blame] [check-ins using] [diff]
2014-01-04
00:24
[b04aa21809] part of check-in [3b97fc3cd9] Update copyright. (check-in: [3b97fc3cd9] user: js, branch: trunk, size: 16413) [annotate] [blame] [check-ins using] [diff]
2013-06-03
15:20
[309e66c1ae] part of check-in [6b15bb229e] atomic.h: Fix several issues.

* of_atomic_cmpswap_*: Clobber eax by adding it as an (unused) output,
so the compiler resets eax (e.g. when used in a loop). (Adding it
to the input and clobber list is lot legal!)
* Don't dereference the pointer passed using "m"(*p) twice.
* Fix some code for ILP64 systems (it seems there is no architecture
using it, though, as it even contained syntax errors).
* Use __asm__ __volatile__ just to be sure.

Thanks to Florian Zeitz for pointing out most of these issues! (check-in: [6b15bb229e] user: js, branch: trunk, size: 16407) [annotate] [blame] [check-ins using] [diff]

2013-06-02
21:18
[a51ca829b8] part of check-in [1c7175697e] atomic.h: Remove a useless xor. (check-in: [1c7175697e] user: js, branch: trunk, size: 16022) [annotate] [blame] [check-ins using] [diff]
2013-03-14
19:25
[d4ea46f231] part of check-in [27138ee85b] Add a few memory barriers. (check-in: [27138ee85b] user: js, branch: trunk, size: 16091) [annotate] [blame] [check-ins using] [diff]
2013-03-04
17:20
[a4f95ba0da] part of check-in [c5ef582958] Replace BOOL with bool.

The only places where BOOL is left are those where they are required by
the ABI. (check-in: [c5ef582958] user: js, branch: trunk, size: 15322) [annotate] [blame] [check-ins using] [diff]

2013-01-15
02:06
[e354f89407] part of check-in [a7c16ea8b3] Prevent importing atomic.h without atomic ops. (check-in: [a7c16ea8b3] user: js, branch: trunk, size: 15310) [annotate] [blame] [check-ins using] [diff]
2013-01-12
20:53
[368de22827] part of check-in [b8ce2359f3] Clean up the feature #ifdef mess. (check-in: [b8ce2359f3] user: js, branch: trunk, size: 15211) [annotate] [blame] [check-ins using] [diff]
2013-01-09
22:24
[7c0142eaf1] part of check-in [813c00ccf0] Update copyright. (check-in: [813c00ccf0] user: js, branch: trunk, size: 15116) [annotate] [blame] [check-ins using] [diff]
2012-08-11
13:37
[ca437e8011] part of check-in [abd6fadbdb] atomic.h: Add cc to clobber list where necessary. (check-in: [abd6fadbdb] user: js, branch: trunk, size: 15110) [annotate] [blame] [check-ins using] [diff]
2012-07-21
11:42
[fe64838cdd] part of check-in [196aa3f6fe] Error out if an atomic operation is missing. (check-in: [196aa3f6fe] user: js, branch: trunk, size: 15024) [annotate] [blame] [check-ins using] [diff]
2012-07-10
22:39
[cfff404a91] part of check-in [932bc09a31] atomic.h: Work around a bug in GCC's inline asm. (check-in: [932bc09a31] user: js, branch: trunk, size: 14353) [annotate] [blame] [check-ins using] [diff]
2012-07-07
11:12
[fe9035342d] part of check-in [61d0a2e987] atomic.h: Add missing cast. (check-in: [61d0a2e987] user: js, branch: trunk, size: 14233) [annotate] [blame] [check-ins using] [diff]
2012-05-30
22:03
[874337cdfb] part of check-in [22aea96b79] atomic.h: Use sete instead of the ugly jne. (check-in: [22aea96b79] user: js, branch: trunk, size: 14219) [annotate] [blame] [check-ins using] [diff]
2012-03-21
09:46
[0e0a7c1a99] part of check-in [448d8b46f9] Make atomic ops work on an ILP64 AMD64 system. (check-in: [448d8b46f9] user: js, branch: trunk, size: 14225) [annotate] [blame] [check-ins using] [diff]
09:22
[6e23ade0bb] part of check-in [19421c0b6b] Fix of_atomic_{add,sub}_ptr on AMD64. (check-in: [19421c0b6b] user: js, branch: trunk, size: 12254) [annotate] [blame] [check-ins using] [diff]
2012-01-05
00:56
[1848f8ec6b] part of check-in [ce70e17b38] Update copyright. (check-in: [ce70e17b38] user: js, branch: trunk, size: 11965) [annotate] [blame] [check-ins using] [diff]
2011-03-11
13:16
[2048e9e8f7] part of check-in [80b8456b4b] Don't test OFHTTPRequest if we have no threads. (check-in: [80b8456b4b] user: js, branch: trunk, size: 11959) [annotate] [blame] [check-ins using] [diff]
2011-01-01
20:19
[672922eb8c] part of check-in [da6b3d26cb] Change license. (check-in: [da6b3d26cb] user: js, branch: trunk, size: 11925) [annotate] [blame] [check-ins using] [diff]
2010-12-08
23:18
[d7c1fc83e5] part of check-in [c10cc0f9e2] Fix local labels in inline assembly. (check-in: [c10cc0f9e2] user: js, branch: trunk, size: 11669) [annotate] [blame] [check-ins using] [diff]
2010-12-05
21:32
[c57a56dcf7] part of check-in [0272a8686f] Don't use the lahf instruction.
Some early AMD64 CPUs don't support it.
(check-in: [0272a8686f] user: js, branch: trunk, size: 11675) [annotate] [blame] [check-ins using] [diff]
2010-11-08
19:24
[9f0732f9a3] part of check-in [8ae37b5b5f] Fix type of the new *_ptr atomic ops. (check-in: [8ae37b5b5f] user: js, branch: trunk, size: 11754) [annotate] [blame] [check-ins using] [diff]
2010-10-31
22:18
[0a81676089] part of check-in [9626d917a6] Check if 64 bit version of OSAtomic* functions is available. (check-in: [9626d917a6] user: js, branch: trunk, size: 11754) [annotate] [blame] [check-ins using] [diff]
21:59
[ccf7d7d55b] part of check-in [dd061ee65e] More atomic operations. (check-in: [dd061ee65e] user: js, branch: trunk, size: 11551) [annotate] [blame] [check-ins using] [diff]
2010-10-06
09:21
[4d9142af8f] part of check-in [7334aa1c81] Fix x86(_64) asm for of_atomic_{or,and,xor}_32.
Improve x86(_64) asm for of_atomic_cmpswap_{32,ptr}.
(check-in: [7334aa1c81] user: js, branch: trunk, size: 5432) [annotate] [blame] [check-ins using] [diff]
2010-10-05
19:31
[842f2e4fa9] part of check-in [6ea2424dad] Fix x86(_64) asm for of_atomic_{add,sub,inc,dec}_32.
of_atomic_{or,and,xor}_32 to follow.
(check-in: [6ea2424dad] user: js, branch: trunk, size: 5151) [annotate] [blame] [check-ins using] [diff]
2010-08-25
21:35
[527e2eb067] part of check-in [bd2eef5fe1] Assembly implementation for atomic operations (x86 and AMD64). (check-in: [bd2eef5fe1] user: js, branch: trunk, size: 5062) [annotate] [blame] [check-ins using] [diff]
2010-03-05
11:52
[3969906906] part of check-in [b91a8283fe] Merge a few changesets from the default branch into the 0.2 branch.

Changesets:
* b95fcaa6d694
* 804c68d222b4
* da8cd738da3d
* 1109d5ce3419
* d03f5c1ca95d
* 2a7017722165
* 4fccdc79eeb7
* d228149fbc04
* 8782d412a4a6 (check-in: [b91a8283fe] user: js, branch: 0.2, size: 2842) [annotate] [blame] [check-ins using] [diff]

2010-02-19
16:36
[dece28bae9] part of check-in [42886185fd] Update copyright. (check-in: [42886185fd] user: js, branch: trunk, size: 3200) [annotate] [blame] [check-ins using] [diff]
2010-02-05
14:03
[9d7b0c4eb9] part of check-in [4e1ab53403] Rename of_atomic_*32 to of_atomic_*_32 and add of_atomic_cmpswap_ptr. (check-in: [4e1ab53403] user: js, branch: trunk, size: 3200) [annotate] [blame] [check-ins using] [diff]
2010-02-02
18:58
[9244f42746] part of check-in [832188d759] Rename OFMacros.h to macros.h, as it's not a class. (check-in: [832188d759] user: js, branch: trunk, size: 2840) [annotate] [blame] [check-ins using] [diff]
2010-01-30
12:33
[465cd0b0aa] part of check-in [8acda3b3fd] Convert more macros to OF_INLINE functions. (check-in: [8acda3b3fd] user: js, branch: trunk, size: 2842) [annotate] [blame] [check-ins using] [diff]
02:09
[243643e5ed] part of check-in [839f45a293] Replace some macros with OF_INLINE functions.
This way, there won't be a warning about unused results.
(check-in: [839f45a293] user: js, branch: trunk, size: 1861) [annotate] [blame] [check-ins using] [diff]
01:17
[a1c4c931ea] part of check-in [921b158d17] Change spinlock implementation, add fallbacks and move to threading.h. (check-in: [921b158d17] user: js, branch: trunk, size: 1799) [annotate] [blame] [check-ins using] [diff]
2010-01-29
15:22
[a774b233fa] part of check-in [78537d6ff3] Add more atomic ops. (check-in: [78537d6ff3] user: js, branch: trunk, size: 2028) [annotate] [blame] [check-ins using] [diff]
2010-01-25
22:39
[ac71df6e7f] part of check-in [212482d8c6] Add of_atomic_cmpswap32 and spinlocks to atomic.h. (check-in: [212482d8c6] user: js, branch: trunk, size: 1294) [annotate] [blame] [check-ins using] [diff]
22:14
[10a1c95236] part of check-in [c2af363418] Check for atomic ops in configure.ac. (check-in: [c2af363418] user: js, branch: trunk, size: 824) [annotate] [blame] [check-ins using] [diff]
2010-01-24
18:54
Added: [34bfd081ab] part of check-in [b4a9924066] Make retain/release atomic. (check-in: [b4a9924066] user: js, branch: trunk, size: 803) [annotate] [blame] [check-ins using]