summaryrefslogtreecommitdiffstats
path: root/vec_pseudo.h
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@gmail.com>2013-09-09 16:37:48 -0400
committerErik Schnetter <schnetter@gmail.com>2013-09-09 16:37:48 -0400
commit05b92eee2c5f5792d148b671e67fc92392e99eee (patch)
tree55cf94b912fd3571ba54b6ade992c20dd21955c4 /vec_pseudo.h
parent01d740e8bba1385cc995c7f96ff1e4668adc08df (diff)
downloadvecmathlib-05b92eee2c5f5792d148b671e67fc92392e99eee.zip
vecmathlib-05b92eee2c5f5792d148b671e67fc92392e99eee.tar.gz
Use __builtin_clzs if available
Diffstat (limited to 'vec_pseudo.h')
-rw-r--r--vec_pseudo.h6
1 files changed, 4 insertions, 2 deletions
diff --git a/vec_pseudo.h b/vec_pseudo.h
index c553fa3..ec3bcb2 100644
--- a/vec_pseudo.h
+++ b/vec_pseudo.h
@@ -368,10 +368,12 @@ namespace vecmathlib {
for (int d=0; d<size; ++d) res.v[d] = __builtin_clzll(v[d]);
} else if (sizeof(int_t) == sizeof(long)) {
for (int d=0; d<size; ++d) res.v[d] = __builtin_clzl(v[d]);
- } else if (sizeof(int_t) <= sizeof(int)) {
+ } else if (sizeof(int_t) == sizeof(int)) {
+ for (int d=0; d<size; ++d) res.v[d] = __builtin_clz(v[d]);
+ } else if (sizeof(int_t) <= sizeof(short)) {
for (int d=0; d<size; ++d)
res.v[d] =
- CHAR_BIT * (sizeof(int) - sizeof(int_t)) + __builtin_clz(v[d]);
+ CHAR_BIT * (sizeof(short) - sizeof(int_t)) + __builtin_clzs(v[d]);
} else {
__builtin_unreachable();
}
OpenPOWER on IntegriCloud