Add count_{leading,trailing}_zeros() functions to stdlib.
(Documentation is still yet to be written.)
This commit is contained in:
107
stdlib.ispc
107
stdlib.ispc
@@ -315,6 +315,113 @@ static inline uniform int lanemask() {
|
||||
return __movmsk(__mask);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// count leading/trailing zeros
|
||||
|
||||
static inline uniform unsigned int32
|
||||
count_leading_zeros(uniform unsigned int32 v) {
|
||||
return __count_leading_zeros_i32(v);
|
||||
}
|
||||
|
||||
static inline uniform unsigned int64
|
||||
count_leading_zeros(uniform unsigned int64 v) {
|
||||
return __count_leading_zeros_i64(v);
|
||||
}
|
||||
|
||||
static inline uniform unsigned int32
|
||||
count_trailing_zeros(uniform unsigned int32 v) {
|
||||
return __count_trailing_zeros_i32(v);
|
||||
}
|
||||
|
||||
static inline uniform unsigned int64
|
||||
count_trailing_zeros(uniform unsigned int64 v) {
|
||||
return __count_trailing_zeros_i64(v);
|
||||
}
|
||||
|
||||
static inline uniform int32
|
||||
count_leading_zeros(uniform int32 v) {
|
||||
return __count_leading_zeros_i32(v);
|
||||
}
|
||||
|
||||
static inline uniform int64
|
||||
count_leading_zeros(uniform int64 v) {
|
||||
return __count_leading_zeros_i64(v);
|
||||
}
|
||||
|
||||
static inline uniform int32
|
||||
count_trailing_zeros(uniform int32 v) {
|
||||
return __count_trailing_zeros_i32(v);
|
||||
}
|
||||
|
||||
static inline uniform int64
|
||||
count_trailing_zeros(uniform int64 v) {
|
||||
return __count_trailing_zeros_i64(v);
|
||||
}
|
||||
|
||||
static inline unsigned int32
|
||||
count_leading_zeros(unsigned int32 v) {
|
||||
unsigned int32 r;
|
||||
for (uniform int i = 0; i < programCount; ++i)
|
||||
r = insert(r, i, __count_leading_zeros_i32(extract(v, i)));
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline unsigned int64
|
||||
count_leading_zeros(unsigned int64 v) {
|
||||
unsigned int64 r;
|
||||
for (uniform int i = 0; i < programCount; ++i)
|
||||
r = insert(r, i, __count_leading_zeros_i64(extract(v, i)));
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline unsigned int32
|
||||
count_trailing_zeros(unsigned int32 v) {
|
||||
unsigned int32 r;
|
||||
for (uniform int i = 0; i < programCount; ++i)
|
||||
r = insert(r, i, __count_trailing_zeros_i32(extract(v, i)));
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline unsigned int64
|
||||
count_trailing_zeros(unsigned int64 v) {
|
||||
unsigned int64 r;
|
||||
for (uniform int i = 0; i < programCount; ++i)
|
||||
r = insert(r, i, __count_trailing_zeros_i64(extract(v, i)));
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline int32
|
||||
count_leading_zeros(int32 v) {
|
||||
int32 r;
|
||||
for (uniform int i = 0; i < programCount; ++i)
|
||||
r = insert(r, i, __count_leading_zeros_i32(extract(v, i)));
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline int64
|
||||
count_leading_zeros(int64 v) {
|
||||
int64 r;
|
||||
for (uniform int i = 0; i < programCount; ++i)
|
||||
r = insert(r, i, __count_leading_zeros_i64(extract(v, i)));
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline int32
|
||||
count_trailing_zeros(int32 v) {
|
||||
int32 r;
|
||||
for (uniform int i = 0; i < programCount; ++i)
|
||||
r = insert(r, i, __count_trailing_zeros_i32(extract(v, i)));
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline int64
|
||||
count_trailing_zeros(int64 v) {
|
||||
int64 r;
|
||||
for (uniform int i = 0; i < programCount; ++i)
|
||||
r = insert(r, i, __count_trailing_zeros_i64(extract(v, i)));
|
||||
return r;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// AOS/SOA conversion
|
||||
|
||||
|
||||
Reference in New Issue
Block a user