atom: Consolidate cl_khr_{local,global}_int32_{base,extended}_atomics implementation

These are just atomic_* wrappers.
Switch inc, dec to use atomic_* wrappers as well.

Reviewed-By: Aaron Watry <awatry@gmail.com>
Tested-By: Aaron Watry <awatry@gmail.com>
Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu>
llvm-svn: 335279
This commit is contained in:
Jan Vesely 2018-06-21 19:27:33 +00:00
parent f965b46c8e
commit 65e3541b78
21 changed files with 66 additions and 148 deletions

View File

@ -0,0 +1,14 @@
#include <clc/clc.h>
#include "utils.h"
#define __CLC_ATOM_IMPL(AS, TYPE) \
_CLC_OVERLOAD _CLC_DEF TYPE __CLC_XCONCAT(atom_, __CLC_ATOMIC_OP) (AS TYPE *p, TYPE val) { \
return __CLC_XCONCAT(atomic_, __CLC_ATOMIC_OP) (p, val); \
}
__CLC_ATOM_IMPL(__CLC_ATOMIC_ADDRESS_SPACE, int)
__CLC_ATOM_IMPL(__CLC_ATOMIC_ADDRESS_SPACE, uint)
#undef __CLC_ATOM_IMPL
#undef __CLC_ATOMIC_OP
#undef __CLC_ATOMIC_ADDRESS_SPACE

View File

@ -1,9 +1,3 @@
#include <clc/clc.h>
#define IMPL(TYPE) \
_CLC_OVERLOAD _CLC_DEF TYPE atom_add(global TYPE *p, TYPE val) { \
return atomic_add(p, val); \
}
IMPL(int)
IMPL(unsigned int)
#define __CLC_ATOMIC_OP add
#define __CLC_ATOMIC_ADDRESS_SPACE global
#include "../atom_int32_binary.inc"

View File

@ -2,7 +2,7 @@
#define IMPL(TYPE) \
_CLC_OVERLOAD _CLC_DEF TYPE atom_dec(global TYPE *p) { \
return atom_sub(p, (TYPE)1); \
return atomic_dec(p); \
}
IMPL(int)

View File

@ -2,7 +2,7 @@
#define IMPL(TYPE) \
_CLC_OVERLOAD _CLC_DEF TYPE atom_inc(global TYPE *p) { \
return atom_add(p, (TYPE)1); \
return atomic_inc(p); \
}
IMPL(int)

View File

@ -1,9 +1,3 @@
#include <clc/clc.h>
#define IMPL(TYPE) \
_CLC_OVERLOAD _CLC_DEF TYPE atom_sub(global TYPE *p, TYPE val) { \
return atomic_sub(p, val); \
}
IMPL(int)
IMPL(unsigned int)
#define __CLC_ATOMIC_OP sub
#define __CLC_ATOMIC_ADDRESS_SPACE global
#include "../atom_int32_binary.inc"

View File

@ -1,9 +1,3 @@
#include <clc/clc.h>
#define IMPL(TYPE) \
_CLC_OVERLOAD _CLC_DEF TYPE atom_xchg(global TYPE *p, TYPE val) { \
return atomic_xchg(p, val); \
}
IMPL(int)
IMPL(unsigned int)
#define __CLC_ATOMIC_OP xchg
#define __CLC_ATOMIC_ADDRESS_SPACE global
#include "../atom_int32_binary.inc"

View File

@ -1,9 +1,3 @@
#include <clc/clc.h>
#define IMPL(TYPE) \
_CLC_OVERLOAD _CLC_DEF TYPE atom_and(global TYPE *p, TYPE val) { \
return atomic_and(p, val); \
}
IMPL(int)
IMPL(unsigned int)
#define __CLC_ATOMIC_OP and
#define __CLC_ATOMIC_ADDRESS_SPACE global
#include "../atom_int32_binary.inc"

View File

@ -1,9 +1,3 @@
#include <clc/clc.h>
#define IMPL(TYPE) \
_CLC_OVERLOAD _CLC_DEF TYPE atom_max(global TYPE *p, TYPE val) { \
return atomic_max(p, val); \
}
IMPL(int)
IMPL(unsigned int)
#define __CLC_ATOMIC_OP max
#define __CLC_ATOMIC_ADDRESS_SPACE global
#include "../atom_int32_binary.inc"

View File

@ -1,9 +1,3 @@
#include <clc/clc.h>
#define IMPL(TYPE) \
_CLC_OVERLOAD _CLC_DEF TYPE atom_min(global TYPE *p, TYPE val) { \
return atomic_min(p, val); \
}
IMPL(int)
IMPL(unsigned int)
#define __CLC_ATOMIC_OP min
#define __CLC_ATOMIC_ADDRESS_SPACE global
#include "../atom_int32_binary.inc"

View File

@ -1,9 +1,3 @@
#include <clc/clc.h>
#define IMPL(TYPE) \
_CLC_OVERLOAD _CLC_DEF TYPE atom_or(global TYPE *p, TYPE val) { \
return atomic_or(p, val); \
}
IMPL(int)
IMPL(unsigned int)
#define __CLC_ATOMIC_OP or
#define __CLC_ATOMIC_ADDRESS_SPACE global
#include "../atom_int32_binary.inc"

View File

@ -1,9 +1,3 @@
#include <clc/clc.h>
#define IMPL(TYPE) \
_CLC_OVERLOAD _CLC_DEF TYPE atom_xor(global TYPE *p, TYPE val) { \
return atomic_xor(p, val); \
}
IMPL(int)
IMPL(unsigned int)
#define __CLC_ATOMIC_OP xor
#define __CLC_ATOMIC_ADDRESS_SPACE global
#include "../atom_int32_binary.inc"

View File

@ -1,9 +1,3 @@
#include <clc/clc.h>
#define IMPL(TYPE) \
_CLC_OVERLOAD _CLC_DEF TYPE atom_add(local TYPE *p, TYPE val) { \
return atomic_add(p, val); \
}
IMPL(int)
IMPL(unsigned int)
#define __CLC_ATOMIC_OP add
#define __CLC_ATOMIC_ADDRESS_SPACE local
#include "../atom_int32_binary.inc"

View File

@ -2,7 +2,7 @@
#define IMPL(TYPE) \
_CLC_OVERLOAD _CLC_DEF TYPE atom_dec(local TYPE *p) { \
return atom_sub(p, (TYPE)1); \
return atomic_dec(p); \
}
IMPL(int)

View File

@ -2,7 +2,7 @@
#define IMPL(TYPE) \
_CLC_OVERLOAD _CLC_DEF TYPE atom_inc(local TYPE *p) { \
return atom_add(p, (TYPE)1); \
return atomic_inc(p); \
}
IMPL(int)

View File

@ -1,9 +1,3 @@
#include <clc/clc.h>
#define IMPL(TYPE) \
_CLC_OVERLOAD _CLC_DEF TYPE atom_sub(local TYPE *p, TYPE val) { \
return atomic_sub(p, val); \
}
IMPL(int)
IMPL(unsigned int)
#define __CLC_ATOMIC_OP sub
#define __CLC_ATOMIC_ADDRESS_SPACE local
#include "../atom_int32_binary.inc"

View File

@ -1,9 +1,3 @@
#include <clc/clc.h>
#define IMPL(TYPE) \
_CLC_OVERLOAD _CLC_DEF TYPE atom_xchg(local TYPE *p, TYPE val) { \
return atomic_xchg(p, val); \
}
IMPL(int)
IMPL(unsigned int)
#define __CLC_ATOMIC_OP xchg
#define __CLC_ATOMIC_ADDRESS_SPACE local
#include "../atom_int32_binary.inc"

View File

@ -1,9 +1,3 @@
#include <clc/clc.h>
#define IMPL(TYPE) \
_CLC_OVERLOAD _CLC_DEF TYPE atom_and(local TYPE *p, TYPE val) { \
return atomic_and(p, val); \
}
IMPL(int)
IMPL(unsigned int)
#define __CLC_ATOMIC_OP and
#define __CLC_ATOMIC_ADDRESS_SPACE local
#include "../atom_int32_binary.inc"

View File

@ -1,9 +1,3 @@
#include <clc/clc.h>
#define IMPL(TYPE) \
_CLC_OVERLOAD _CLC_DEF TYPE atom_max(local TYPE *p, TYPE val) { \
return atomic_max(p, val); \
}
IMPL(int)
IMPL(unsigned int)
#define __CLC_ATOMIC_OP max
#define __CLC_ATOMIC_ADDRESS_SPACE local
#include "../atom_int32_binary.inc"

View File

@ -1,9 +1,3 @@
#include <clc/clc.h>
#define IMPL(TYPE) \
_CLC_OVERLOAD _CLC_DEF TYPE atom_min(local TYPE *p, TYPE val) { \
return atomic_min(p, val); \
}
IMPL(int)
IMPL(unsigned int)
#define __CLC_ATOMIC_OP min
#define __CLC_ATOMIC_ADDRESS_SPACE local
#include "../atom_int32_binary.inc"

View File

@ -1,9 +1,3 @@
#include <clc/clc.h>
#define IMPL(TYPE) \
_CLC_OVERLOAD _CLC_DEF TYPE atom_or(local TYPE *p, TYPE val) { \
return atomic_or(p, val); \
}
IMPL(int)
IMPL(unsigned int)
#define __CLC_ATOMIC_OP or
#define __CLC_ATOMIC_ADDRESS_SPACE local
#include "../atom_int32_binary.inc"

View File

@ -1,9 +1,3 @@
#include <clc/clc.h>
#define IMPL(TYPE) \
_CLC_OVERLOAD _CLC_DEF TYPE atom_xor(local TYPE *p, TYPE val) { \
return atomic_xor(p, val); \
}
IMPL(int)
IMPL(unsigned int)
#define __CLC_ATOMIC_OP xor
#define __CLC_ATOMIC_ADDRESS_SPACE local
#include "../atom_int32_binary.inc"