@@ -13304,7 +13304,10 @@ void __ovld atomic_init(volatile atomic_double *object, double value);
13304
13304
void __ovld atomic_work_item_fence(cl_mem_fence_flags flags, memory_order order, memory_scope scope);
13305
13305
13306
13306
// atomic_fetch()
13307
+ // OpenCL v2.0 s6.13.11.7.5:
13308
+ // add/sub: atomic type argument can be uintptr_t/intptr_t, value type argument can be ptrdiff_t.
13307
13309
13310
+ #if defined(__opencl_c_atomic_order_seq_cst) && defined(__opencl_c_atomic_scope_device)
13308
13311
int __ovld atomic_fetch_add(volatile atomic_int *object, int operand);
13309
13312
uint __ovld atomic_fetch_add(volatile atomic_uint *object, uint operand);
13310
13313
int __ovld atomic_fetch_sub(volatile atomic_int *object, int operand);
@@ -13335,16 +13338,12 @@ long __ovld atomic_fetch_min(volatile atomic_long *object, long operand);
13335
13338
ulong __ovld atomic_fetch_min(volatile atomic_ulong *object, ulong operand);
13336
13339
long __ovld atomic_fetch_max(volatile atomic_long *object, long operand);
13337
13340
ulong __ovld atomic_fetch_max(volatile atomic_ulong *object, ulong operand);
13338
- #endif //defined(cl_khr_int64_base_atomics) && defined(cl_khr_int64_extended_atomics)
13339
-
13340
- // OpenCL v2.0 s6.13.11.7.5:
13341
- // add/sub: atomic type argument can be uintptr_t/intptr_t, value type argument can be ptrdiff_t.
13342
-
13343
- #if defined(cl_khr_int64_base_atomics) && defined(cl_khr_int64_extended_atomics)
13344
13341
uintptr_t __ovld atomic_fetch_add(volatile atomic_uintptr_t *object, ptrdiff_t operand);
13345
13342
uintptr_t __ovld atomic_fetch_sub(volatile atomic_uintptr_t *object, ptrdiff_t operand);
13343
+ #endif //defined(cl_khr_int64_base_atomics) && defined(cl_khr_int64_extended_atomics)
13346
13344
#endif
13347
13345
13346
+ #if defined(__opencl_c_atomic_scope_device)
13348
13347
int __ovld atomic_fetch_add_explicit(volatile atomic_int *object, int operand, memory_order order);
13349
13348
uint __ovld atomic_fetch_add_explicit(volatile atomic_uint *object, uint operand, memory_order order);
13350
13349
int __ovld atomic_fetch_sub_explicit(volatile atomic_int *object, int operand, memory_order order);
@@ -13374,10 +13373,9 @@ long __ovld atomic_fetch_min_explicit(volatile atomic_long *object, long operand
13374
13373
ulong __ovld atomic_fetch_min_explicit(volatile atomic_ulong *object, ulong operand, memory_order order);
13375
13374
long __ovld atomic_fetch_max_explicit(volatile atomic_long *object, long operand, memory_order order);
13376
13375
ulong __ovld atomic_fetch_max_explicit(volatile atomic_ulong *object, ulong operand, memory_order order);
13377
- #endif //defined(cl_khr_int64_base_atomics) && defined(cl_khr_int64_extended_atomics)
13378
- #if defined(cl_khr_int64_base_atomics) && defined(cl_khr_int64_extended_atomics)
13379
13376
uintptr_t __ovld atomic_fetch_add_explicit(volatile atomic_uintptr_t *object, ptrdiff_t operand, memory_order order);
13380
13377
uintptr_t __ovld atomic_fetch_sub_explicit(volatile atomic_uintptr_t *object, ptrdiff_t operand, memory_order order);
13378
+ #endif //defined(cl_khr_int64_base_atomics) && defined(cl_khr_int64_extended_atomics)
13381
13379
#endif
13382
13380
13383
13381
int __ovld atomic_fetch_add_explicit(volatile atomic_int *object, int operand, memory_order order, memory_scope scope);
@@ -13417,6 +13415,7 @@ uintptr_t __ovld atomic_fetch_sub_explicit(volatile atomic_uintptr_t *object, pt
13417
13415
13418
13416
// atomic_store()
13419
13417
13418
+ #if defined(__opencl_c_atomic_order_seq_cst) && defined(__opencl_c_atomic_scope_device)
13420
13419
void __ovld atomic_store(volatile atomic_int *object, int desired);
13421
13420
void __ovld atomic_store(volatile atomic_uint *object, uint desired);
13422
13421
void __ovld atomic_store(volatile atomic_float *object, float desired);
@@ -13428,7 +13427,9 @@ void __ovld atomic_store(volatile atomic_double *object, double desired);
13428
13427
void __ovld atomic_store(volatile atomic_long *object, long desired);
13429
13428
void __ovld atomic_store(volatile atomic_ulong *object, ulong desired);
13430
13429
#endif
13430
+ #endif
13431
13431
13432
+ #if defined(__opencl_c_atomic_scope_device)
13432
13433
void __ovld atomic_store_explicit(volatile atomic_int *object, int desired, memory_order order);
13433
13434
void __ovld atomic_store_explicit(volatile atomic_uint *object, uint desired, memory_order order);
13434
13435
void __ovld atomic_store_explicit(volatile atomic_float *object, float desired, memory_order order);
@@ -13439,6 +13440,7 @@ void __ovld atomic_store_explicit(volatile atomic_double *object, double desired
13439
13440
void __ovld atomic_store_explicit(volatile atomic_long *object, long desired, memory_order order);
13440
13441
void __ovld atomic_store_explicit(volatile atomic_ulong *object, ulong desired, memory_order order);
13441
13442
#endif
13443
+ #endif
13442
13444
13443
13445
void __ovld atomic_store_explicit(volatile atomic_int *object, int desired, memory_order order, memory_scope scope);
13444
13446
void __ovld atomic_store_explicit(volatile atomic_uint *object, uint desired, memory_order order, memory_scope scope);
@@ -13452,7 +13454,7 @@ void __ovld atomic_store_explicit(volatile atomic_ulong *object, ulong desired,
13452
13454
#endif
13453
13455
13454
13456
// atomic_load()
13455
-
13457
+ #if defined(__opencl_c_atomic_order_seq_cst) && defined(__opencl_c_atomic_scope_device)
13456
13458
int __ovld atomic_load(volatile atomic_int *object);
13457
13459
uint __ovld atomic_load(volatile atomic_uint *object);
13458
13460
float __ovld atomic_load(volatile atomic_float *object);
@@ -13463,7 +13465,9 @@ double __ovld atomic_load(volatile atomic_double *object);
13463
13465
long __ovld atomic_load(volatile atomic_long *object);
13464
13466
ulong __ovld atomic_load(volatile atomic_ulong *object);
13465
13467
#endif
13468
+ #endif
13466
13469
13470
+ #if defined(__opencl_c_atomic_scope_device)
13467
13471
int __ovld atomic_load_explicit(volatile atomic_int *object, memory_order order);
13468
13472
uint __ovld atomic_load_explicit(volatile atomic_uint *object, memory_order order);
13469
13473
float __ovld atomic_load_explicit(volatile atomic_float *object, memory_order order);
@@ -13474,6 +13478,7 @@ double __ovld atomic_load_explicit(volatile atomic_double *object, memory_order
13474
13478
long __ovld atomic_load_explicit(volatile atomic_long *object, memory_order order);
13475
13479
ulong __ovld atomic_load_explicit(volatile atomic_ulong *object, memory_order order);
13476
13480
#endif
13481
+ #endif
13477
13482
13478
13483
int __ovld atomic_load_explicit(volatile atomic_int *object, memory_order order, memory_scope scope);
13479
13484
uint __ovld atomic_load_explicit(volatile atomic_uint *object, memory_order order, memory_scope scope);
@@ -13488,6 +13493,7 @@ ulong __ovld atomic_load_explicit(volatile atomic_ulong *object, memory_order or
13488
13493
13489
13494
// atomic_exchange()
13490
13495
13496
+ #if defined(__opencl_c_atomic_order_seq_cst) && defined(__opencl_c_atomic_scope_device)
13491
13497
int __ovld atomic_exchange(volatile atomic_int *object, int desired);
13492
13498
uint __ovld atomic_exchange(volatile atomic_uint *object, uint desired);
13493
13499
float __ovld atomic_exchange(volatile atomic_float *object, float desired);
@@ -13498,7 +13504,9 @@ double __ovld atomic_exchange(volatile atomic_double *object, double desired);
13498
13504
long __ovld atomic_exchange(volatile atomic_long *object, long desired);
13499
13505
ulong __ovld atomic_exchange(volatile atomic_ulong *object, ulong desired);
13500
13506
#endif
13507
+ #endif
13501
13508
13509
+ #if defined(__opencl_c_atomic_scope_device)
13502
13510
int __ovld atomic_exchange_explicit(volatile atomic_int *object, int desired, memory_order order);
13503
13511
uint __ovld atomic_exchange_explicit(volatile atomic_uint *object, uint desired, memory_order order);
13504
13512
float __ovld atomic_exchange_explicit(volatile atomic_float *object, float desired, memory_order order);
@@ -13509,6 +13517,7 @@ double __ovld atomic_exchange_explicit(volatile atomic_double *object, double de
13509
13517
long __ovld atomic_exchange_explicit(volatile atomic_long *object, long desired, memory_order order);
13510
13518
ulong __ovld atomic_exchange_explicit(volatile atomic_ulong *object, ulong desired, memory_order order);
13511
13519
#endif
13520
+ #endif
13512
13521
13513
13522
int __ovld atomic_exchange_explicit(volatile atomic_int *object, int desired, memory_order order, memory_scope scope);
13514
13523
uint __ovld atomic_exchange_explicit(volatile atomic_uint *object, uint desired, memory_order order, memory_scope scope);
@@ -13522,7 +13531,7 @@ ulong __ovld atomic_exchange_explicit(volatile atomic_ulong *object, ulong desir
13522
13531
#endif
13523
13532
13524
13533
// atomic_compare_exchange_strong() and atomic_compare_exchange_weak()
13525
-
13534
+ #if defined(__opencl_c_atomic_order_seq_cst) && defined(__opencl_c_atomic_scope_device)
13526
13535
bool __ovld atomic_compare_exchange_strong(volatile atomic_int *object, int *expected, int desired);
13527
13536
bool __ovld atomic_compare_exchange_strong(volatile atomic_uint *object, uint *expected, uint desired);
13528
13537
bool __ovld atomic_compare_exchange_weak(volatile atomic_int *object, int *expected, int desired);
@@ -13540,6 +13549,7 @@ bool __ovld atomic_compare_exchange_weak(volatile atomic_long *object, long *exp
13540
13549
bool __ovld atomic_compare_exchange_strong(volatile atomic_ulong *object, ulong *expected, ulong desired);
13541
13550
bool __ovld atomic_compare_exchange_weak(volatile atomic_ulong *object, ulong *expected, ulong desired);
13542
13551
#endif
13552
+ #endif
13543
13553
13544
13554
bool __ovld atomic_compare_exchange_strong_explicit(volatile atomic_int *object, int *expected,
13545
13555
int desired, memory_order success, memory_order failure);
@@ -13600,12 +13610,15 @@ bool __ovld atomic_compare_exchange_weak_explicit(volatile atomic_ulong *object,
13600
13610
#endif
13601
13611
13602
13612
// atomic_flag_test_and_set() and atomic_flag_clear()
13603
-
13613
+ #if defined(__opencl_c_atomic_order_seq_cst) && defined(__opencl_c_atomic_scope_device)
13604
13614
bool __ovld atomic_flag_test_and_set(volatile atomic_flag *object);
13605
13615
void __ovld atomic_flag_clear(volatile atomic_flag *object);
13616
+ #endif
13606
13617
13618
+ #if defined(__opencl_c_atomic_scope_device)
13607
13619
bool __ovld atomic_flag_test_and_set_explicit(volatile atomic_flag *object, memory_order order);
13608
13620
void __ovld atomic_flag_clear_explicit(volatile atomic_flag *object, memory_order order);
13621
+ #endif
13609
13622
13610
13623
bool __ovld atomic_flag_test_and_set_explicit(volatile atomic_flag *object, memory_order order, memory_scope scope);
13611
13624
void __ovld atomic_flag_clear_explicit(volatile atomic_flag *object, memory_order order, memory_scope scope);
0 commit comments