Skip to content

Commit 10d7553

Browse files
authored
Merge pull request #179 from hvdijk/atomic64
[compiler] Fix up 64-bit atomics.
2 parents ee97f5a + f140160 commit 10d7553

22 files changed

+524
-139
lines changed

modules/compiler/builtins/include/builtins/builtins.h

+48
Original file line numberDiff line numberDiff line change
@@ -13001,6 +13001,10 @@ int __CL_BUILTIN_ATTRIBUTES atomic_dec(volatile int local* p);
1300113001
int __CL_BUILTIN_ATTRIBUTES atomic_inc(volatile int local* p);
1300213002
int __CL_BUILTIN_ATTRIBUTES atom_dec(volatile int local* p);
1300313003
int __CL_BUILTIN_ATTRIBUTES atom_inc(volatile int local* p);
13004+
long __CL_BUILTIN_ATTRIBUTES atom_dec(volatile long global* p);
13005+
long __CL_BUILTIN_ATTRIBUTES atom_inc(volatile long global* p);
13006+
long __CL_BUILTIN_ATTRIBUTES atom_dec(volatile long local* p);
13007+
long __CL_BUILTIN_ATTRIBUTES atom_inc(volatile long local* p);
1300413008
uint __CL_BUILTIN_ATTRIBUTES atomic_dec(volatile uint global* p);
1300513009
uint __CL_BUILTIN_ATTRIBUTES atomic_inc(volatile uint global* p);
1300613010
uint __CL_BUILTIN_ATTRIBUTES atom_dec(volatile uint global* p);
@@ -13009,6 +13013,10 @@ uint __CL_BUILTIN_ATTRIBUTES atomic_dec(volatile uint local* p);
1300913013
uint __CL_BUILTIN_ATTRIBUTES atomic_inc(volatile uint local* p);
1301013014
uint __CL_BUILTIN_ATTRIBUTES atom_dec(volatile uint local* p);
1301113015
uint __CL_BUILTIN_ATTRIBUTES atom_inc(volatile uint local* p);
13016+
ulong __CL_BUILTIN_ATTRIBUTES atom_dec(volatile ulong global* p);
13017+
ulong __CL_BUILTIN_ATTRIBUTES atom_inc(volatile ulong global* p);
13018+
ulong __CL_BUILTIN_ATTRIBUTES atom_dec(volatile ulong local* p);
13019+
ulong __CL_BUILTIN_ATTRIBUTES atom_inc(volatile ulong local* p);
1301213020
int __CL_BUILTIN_ATTRIBUTES atomic_add(volatile int global* p, int val);
1301313021
int __CL_BUILTIN_ATTRIBUTES atomic_sub(volatile int global* p, int val);
1301413022
int __CL_BUILTIN_ATTRIBUTES atomic_xchg(volatile int global* p, int val);
@@ -13041,6 +13049,22 @@ int __CL_BUILTIN_ATTRIBUTES atom_max(volatile int local* p, int val);
1304113049
int __CL_BUILTIN_ATTRIBUTES atom_and(volatile int local* p, int val);
1304213050
int __CL_BUILTIN_ATTRIBUTES atom_or(volatile int local* p, int val);
1304313051
int __CL_BUILTIN_ATTRIBUTES atom_xor(volatile int local* p, int val);
13052+
long __CL_BUILTIN_ATTRIBUTES atom_add(volatile long global* p, long val);
13053+
long __CL_BUILTIN_ATTRIBUTES atom_sub(volatile long global* p, long val);
13054+
long __CL_BUILTIN_ATTRIBUTES atom_xchg(volatile long global* p, long val);
13055+
long __CL_BUILTIN_ATTRIBUTES atom_min(volatile long global* p, long val);
13056+
long __CL_BUILTIN_ATTRIBUTES atom_max(volatile long global* p, long val);
13057+
long __CL_BUILTIN_ATTRIBUTES atom_and(volatile long global* p, long val);
13058+
long __CL_BUILTIN_ATTRIBUTES atom_or(volatile long global* p, long val);
13059+
long __CL_BUILTIN_ATTRIBUTES atom_xor(volatile long global* p, long val);
13060+
long __CL_BUILTIN_ATTRIBUTES atom_add(volatile long local* p, long val);
13061+
long __CL_BUILTIN_ATTRIBUTES atom_sub(volatile long local* p, long val);
13062+
long __CL_BUILTIN_ATTRIBUTES atom_xchg(volatile long local* p, long val);
13063+
long __CL_BUILTIN_ATTRIBUTES atom_min(volatile long local* p, long val);
13064+
long __CL_BUILTIN_ATTRIBUTES atom_max(volatile long local* p, long val);
13065+
long __CL_BUILTIN_ATTRIBUTES atom_and(volatile long local* p, long val);
13066+
long __CL_BUILTIN_ATTRIBUTES atom_or(volatile long local* p, long val);
13067+
long __CL_BUILTIN_ATTRIBUTES atom_xor(volatile long local* p, long val);
1304413068
uint __CL_BUILTIN_ATTRIBUTES atomic_add(volatile uint global* p, uint val);
1304513069
uint __CL_BUILTIN_ATTRIBUTES atomic_sub(volatile uint global* p, uint val);
1304613070
uint __CL_BUILTIN_ATTRIBUTES atomic_xchg(volatile uint global* p, uint val);
@@ -13073,6 +13097,22 @@ uint __CL_BUILTIN_ATTRIBUTES atom_max(volatile uint local* p, uint val);
1307313097
uint __CL_BUILTIN_ATTRIBUTES atom_and(volatile uint local* p, uint val);
1307413098
uint __CL_BUILTIN_ATTRIBUTES atom_or(volatile uint local* p, uint val);
1307513099
uint __CL_BUILTIN_ATTRIBUTES atom_xor(volatile uint local* p, uint val);
13100+
ulong __CL_BUILTIN_ATTRIBUTES atom_add(volatile ulong global* p, ulong val);
13101+
ulong __CL_BUILTIN_ATTRIBUTES atom_sub(volatile ulong global* p, ulong val);
13102+
ulong __CL_BUILTIN_ATTRIBUTES atom_xchg(volatile ulong global* p, ulong val);
13103+
ulong __CL_BUILTIN_ATTRIBUTES atom_min(volatile ulong global* p, ulong val);
13104+
ulong __CL_BUILTIN_ATTRIBUTES atom_max(volatile ulong global* p, ulong val);
13105+
ulong __CL_BUILTIN_ATTRIBUTES atom_and(volatile ulong global* p, ulong val);
13106+
ulong __CL_BUILTIN_ATTRIBUTES atom_or(volatile ulong global* p, ulong val);
13107+
ulong __CL_BUILTIN_ATTRIBUTES atom_xor(volatile ulong global* p, ulong val);
13108+
ulong __CL_BUILTIN_ATTRIBUTES atom_add(volatile ulong local* p, ulong val);
13109+
ulong __CL_BUILTIN_ATTRIBUTES atom_sub(volatile ulong local* p, ulong val);
13110+
ulong __CL_BUILTIN_ATTRIBUTES atom_xchg(volatile ulong local* p, ulong val);
13111+
ulong __CL_BUILTIN_ATTRIBUTES atom_min(volatile ulong local* p, ulong val);
13112+
ulong __CL_BUILTIN_ATTRIBUTES atom_max(volatile ulong local* p, ulong val);
13113+
ulong __CL_BUILTIN_ATTRIBUTES atom_and(volatile ulong local* p, ulong val);
13114+
ulong __CL_BUILTIN_ATTRIBUTES atom_or(volatile ulong local* p, ulong val);
13115+
ulong __CL_BUILTIN_ATTRIBUTES atom_xor(volatile ulong local* p, ulong val);
1307613116
float __CL_BUILTIN_ATTRIBUTES atomic_xchg(volatile float global* p, float val);
1307713117
float __CL_BUILTIN_ATTRIBUTES atom_xchg(volatile float global* p, float val);
1307813118
float __CL_BUILTIN_ATTRIBUTES atomic_xchg(volatile float local* p, float val);
@@ -13085,6 +13125,10 @@ int __CL_BUILTIN_ATTRIBUTES atomic_cmpxchg(volatile int local* p, int cmp,
1308513125
int val);
1308613126
int __CL_BUILTIN_ATTRIBUTES atom_cmpxchg(volatile int local* p, int cmp,
1308713127
int val);
13128+
long __CL_BUILTIN_ATTRIBUTES atom_cmpxchg(volatile long global* p, long cmp,
13129+
long val);
13130+
long __CL_BUILTIN_ATTRIBUTES atom_cmpxchg(volatile long local* p, long cmp,
13131+
long val);
1308813132
uint __CL_BUILTIN_ATTRIBUTES atomic_cmpxchg(volatile uint global* p, uint cmp,
1308913133
uint val);
1309013134
uint __CL_BUILTIN_ATTRIBUTES atom_cmpxchg(volatile uint global* p, uint cmp,
@@ -13093,6 +13137,10 @@ uint __CL_BUILTIN_ATTRIBUTES atomic_cmpxchg(volatile uint local* p, uint cmp,
1309313137
uint val);
1309413138
uint __CL_BUILTIN_ATTRIBUTES atom_cmpxchg(volatile uint local* p, uint cmp,
1309513139
uint val);
13140+
ulong __CL_BUILTIN_ATTRIBUTES atom_cmpxchg(volatile ulong global* p, ulong cmp,
13141+
ulong val);
13142+
ulong __CL_BUILTIN_ATTRIBUTES atom_cmpxchg(volatile ulong local* p, ulong cmp,
13143+
ulong val);
1309613144

1309713145
/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1309813146

modules/compiler/builtins/scripts/generate_header.sh

+8-4
Original file line numberDiff line numberDiff line change
@@ -1467,12 +1467,13 @@ function a_atomic_one_arg()
14671467

14681468
function all_atomic_one_arg()
14691469
{
1470-
for i in int uint
1470+
for i in int long uint ulong
14711471
do
14721472
for k in global local
14731473
do
14741474
for m in atomic_dec atomic_inc atom_dec atom_inc
14751475
do
1476+
[[ $m = atomic_* && $i = *long ]] && continue
14761477
a_atomic_one_arg $i $k $m
14771478
done
14781479
done
@@ -1505,12 +1506,13 @@ function a_atomic_two_args_for_float()
15051506

15061507
function all_atomic_two_args()
15071508
{
1508-
for i in int uint
1509+
for i in int long uint ulong
15091510
do
15101511
for k in global local
15111512
do
15121513
for m in atomic_add atomic_sub atomic_xchg atomic_min atomic_max atomic_and atomic_or atomic_xor atom_add atom_sub atom_xchg atom_min atom_max atom_and atom_or atom_xor
15131514
do
1515+
[[ $m = atomic_* && $i = *long ]] && continue
15141516
a_atomic_two_args $i $k $m
15151517
done
15161518
done
@@ -1535,12 +1537,13 @@ function a_atomic_three_args()
15351537

15361538
function all_atomic_three_args()
15371539
{
1538-
for i in int uint
1540+
for i in int long uint ulong
15391541
do
15401542
for k in global local
15411543
do
15421544
for m in atomic_cmpxchg atom_cmpxchg
15431545
do
1546+
[[ $m = atomic_* && $i = *long ]] && continue
15441547
a_atomic_three_args $i $k $m
15451548
done
15461549
done
@@ -2670,8 +2673,9 @@ scriptDir="$(cd $(dirname $0); pwd)"
26702673

26712674
# This version of clang-format used must match the version specified in the
26722675
# root CMakeLists.txt file, so scrape that.
2673-
CLANG_FORMAT_VERSION="$(cat "$scriptDir"/../../../CMakeLists.txt \
2676+
CLANG_FORMAT_VERSION="$(cat "$scriptDir"/../../../../CMakeLists.txt \
26742677
| grep 'find_package(ClangTools' \
2678+
| head -n 1 \
26752679
| sed -e 's/.*ClangTools \([0-9\.]*\) COMPONENTS.*/\1/')"
26762680
CLANG_FORMAT_LONG="clang-format-${CLANG_FORMAT_VERSION}"
26772681
CLANG_FORMAT_SHORT="clang-format-${CLANG_FORMAT_VERSION%.[0-9]}"

modules/compiler/builtins/source/builtins.cl

+48
Original file line numberDiff line numberDiff line change
@@ -10365,6 +10365,10 @@ int __CL_BUILTIN_ATTRIBUTES atomic_dec(volatile int local *p);
1036510365
int __CL_BUILTIN_ATTRIBUTES atomic_inc(volatile int local *p);
1036610366
int __CL_BUILTIN_ATTRIBUTES atom_dec(volatile int local *p);
1036710367
int __CL_BUILTIN_ATTRIBUTES atom_inc(volatile int local *p);
10368+
long __CL_BUILTIN_ATTRIBUTES atom_dec(volatile long global *p);
10369+
long __CL_BUILTIN_ATTRIBUTES atom_inc(volatile long global *p);
10370+
long __CL_BUILTIN_ATTRIBUTES atom_dec(volatile long local *p);
10371+
long __CL_BUILTIN_ATTRIBUTES atom_inc(volatile long local *p);
1036810372
uint __CL_BUILTIN_ATTRIBUTES atomic_dec(volatile uint global *p);
1036910373
uint __CL_BUILTIN_ATTRIBUTES atomic_inc(volatile uint global *p);
1037010374
uint __CL_BUILTIN_ATTRIBUTES atom_dec(volatile uint global *p);
@@ -10373,6 +10377,10 @@ uint __CL_BUILTIN_ATTRIBUTES atomic_dec(volatile uint local *p);
1037310377
uint __CL_BUILTIN_ATTRIBUTES atomic_inc(volatile uint local *p);
1037410378
uint __CL_BUILTIN_ATTRIBUTES atom_dec(volatile uint local *p);
1037510379
uint __CL_BUILTIN_ATTRIBUTES atom_inc(volatile uint local *p);
10380+
ulong __CL_BUILTIN_ATTRIBUTES atom_dec(volatile ulong global *p);
10381+
ulong __CL_BUILTIN_ATTRIBUTES atom_inc(volatile ulong global *p);
10382+
ulong __CL_BUILTIN_ATTRIBUTES atom_dec(volatile ulong local *p);
10383+
ulong __CL_BUILTIN_ATTRIBUTES atom_inc(volatile ulong local *p);
1037610384
int __CL_BUILTIN_ATTRIBUTES atomic_add(volatile int global *p, int val);
1037710385
int __CL_BUILTIN_ATTRIBUTES atomic_sub(volatile int global *p, int val);
1037810386
int __CL_BUILTIN_ATTRIBUTES atomic_xchg(volatile int global *p, int val);
@@ -10405,6 +10413,22 @@ int __CL_BUILTIN_ATTRIBUTES atom_max(volatile int local *p, int val);
1040510413
int __CL_BUILTIN_ATTRIBUTES atom_and(volatile int local *p, int val);
1040610414
int __CL_BUILTIN_ATTRIBUTES atom_or(volatile int local *p, int val);
1040710415
int __CL_BUILTIN_ATTRIBUTES atom_xor(volatile int local *p, int val);
10416+
long __CL_BUILTIN_ATTRIBUTES atom_add(volatile long global *p, long val);
10417+
long __CL_BUILTIN_ATTRIBUTES atom_sub(volatile long global *p, long val);
10418+
long __CL_BUILTIN_ATTRIBUTES atom_xchg(volatile long global *p, long val);
10419+
long __CL_BUILTIN_ATTRIBUTES atom_min(volatile long global *p, long val);
10420+
long __CL_BUILTIN_ATTRIBUTES atom_max(volatile long global *p, long val);
10421+
long __CL_BUILTIN_ATTRIBUTES atom_and(volatile long global *p, long val);
10422+
long __CL_BUILTIN_ATTRIBUTES atom_or(volatile long global *p, long val);
10423+
long __CL_BUILTIN_ATTRIBUTES atom_xor(volatile long global *p, long val);
10424+
long __CL_BUILTIN_ATTRIBUTES atom_add(volatile long local *p, long val);
10425+
long __CL_BUILTIN_ATTRIBUTES atom_sub(volatile long local *p, long val);
10426+
long __CL_BUILTIN_ATTRIBUTES atom_xchg(volatile long local *p, long val);
10427+
long __CL_BUILTIN_ATTRIBUTES atom_min(volatile long local *p, long val);
10428+
long __CL_BUILTIN_ATTRIBUTES atom_max(volatile long local *p, long val);
10429+
long __CL_BUILTIN_ATTRIBUTES atom_and(volatile long local *p, long val);
10430+
long __CL_BUILTIN_ATTRIBUTES atom_or(volatile long local *p, long val);
10431+
long __CL_BUILTIN_ATTRIBUTES atom_xor(volatile long local *p, long val);
1040810432
uint __CL_BUILTIN_ATTRIBUTES atomic_add(volatile uint global *p, uint val);
1040910433
uint __CL_BUILTIN_ATTRIBUTES atomic_sub(volatile uint global *p, uint val);
1041010434
uint __CL_BUILTIN_ATTRIBUTES atomic_xchg(volatile uint global *p, uint val);
@@ -10437,6 +10461,22 @@ uint __CL_BUILTIN_ATTRIBUTES atom_max(volatile uint local *p, uint val);
1043710461
uint __CL_BUILTIN_ATTRIBUTES atom_and(volatile uint local *p, uint val);
1043810462
uint __CL_BUILTIN_ATTRIBUTES atom_or(volatile uint local *p, uint val);
1043910463
uint __CL_BUILTIN_ATTRIBUTES atom_xor(volatile uint local *p, uint val);
10464+
ulong __CL_BUILTIN_ATTRIBUTES atom_add(volatile ulong global *p, ulong val);
10465+
ulong __CL_BUILTIN_ATTRIBUTES atom_sub(volatile ulong global *p, ulong val);
10466+
ulong __CL_BUILTIN_ATTRIBUTES atom_xchg(volatile ulong global *p, ulong val);
10467+
ulong __CL_BUILTIN_ATTRIBUTES atom_min(volatile ulong global *p, ulong val);
10468+
ulong __CL_BUILTIN_ATTRIBUTES atom_max(volatile ulong global *p, ulong val);
10469+
ulong __CL_BUILTIN_ATTRIBUTES atom_and(volatile ulong global *p, ulong val);
10470+
ulong __CL_BUILTIN_ATTRIBUTES atom_or(volatile ulong global *p, ulong val);
10471+
ulong __CL_BUILTIN_ATTRIBUTES atom_xor(volatile ulong global *p, ulong val);
10472+
ulong __CL_BUILTIN_ATTRIBUTES atom_add(volatile ulong local *p, ulong val);
10473+
ulong __CL_BUILTIN_ATTRIBUTES atom_sub(volatile ulong local *p, ulong val);
10474+
ulong __CL_BUILTIN_ATTRIBUTES atom_xchg(volatile ulong local *p, ulong val);
10475+
ulong __CL_BUILTIN_ATTRIBUTES atom_min(volatile ulong local *p, ulong val);
10476+
ulong __CL_BUILTIN_ATTRIBUTES atom_max(volatile ulong local *p, ulong val);
10477+
ulong __CL_BUILTIN_ATTRIBUTES atom_and(volatile ulong local *p, ulong val);
10478+
ulong __CL_BUILTIN_ATTRIBUTES atom_or(volatile ulong local *p, ulong val);
10479+
ulong __CL_BUILTIN_ATTRIBUTES atom_xor(volatile ulong local *p, ulong val);
1044010480
float __CL_BUILTIN_ATTRIBUTES atomic_xchg(volatile float global *p, float val);
1044110481
float __CL_BUILTIN_ATTRIBUTES atom_xchg(volatile float global *p, float val);
1044210482
float __CL_BUILTIN_ATTRIBUTES atomic_xchg(volatile float local *p, float val);
@@ -10449,6 +10489,10 @@ int __CL_BUILTIN_ATTRIBUTES atomic_cmpxchg(volatile int local *p, int cmp,
1044910489
int val);
1045010490
int __CL_BUILTIN_ATTRIBUTES atom_cmpxchg(volatile int local *p, int cmp,
1045110491
int val);
10492+
long __CL_BUILTIN_ATTRIBUTES atom_cmpxchg(volatile long global *p, long cmp,
10493+
long val);
10494+
long __CL_BUILTIN_ATTRIBUTES atom_cmpxchg(volatile long local *p, long cmp,
10495+
long val);
1045210496
uint __CL_BUILTIN_ATTRIBUTES atomic_cmpxchg(volatile uint global *p, uint cmp,
1045310497
uint val);
1045410498
uint __CL_BUILTIN_ATTRIBUTES atom_cmpxchg(volatile uint global *p, uint cmp,
@@ -10457,6 +10501,10 @@ uint __CL_BUILTIN_ATTRIBUTES atomic_cmpxchg(volatile uint local *p, uint cmp,
1045710501
uint val);
1045810502
uint __CL_BUILTIN_ATTRIBUTES atom_cmpxchg(volatile uint local *p, uint cmp,
1045910503
uint val);
10504+
ulong __CL_BUILTIN_ATTRIBUTES atom_cmpxchg(volatile ulong global *p, ulong cmp,
10505+
ulong val);
10506+
ulong __CL_BUILTIN_ATTRIBUTES atom_cmpxchg(volatile ulong local *p, ulong cmp,
10507+
ulong val);
1046010508

1046110509
/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
1046210510

0 commit comments

Comments
 (0)