diff options
author | Erik Schnetter <schnetter@gmail.com> | 2013-09-09 16:37:48 -0400 |
---|---|---|
committer | Erik Schnetter <schnetter@gmail.com> | 2013-09-09 16:37:48 -0400 |
commit | 05b92eee2c5f5792d148b671e67fc92392e99eee (patch) | |
tree | 55cf94b912fd3571ba54b6ade992c20dd21955c4 /vec_pseudo.h | |
parent | 01d740e8bba1385cc995c7f96ff1e4668adc08df (diff) | |
download | vecmathlib-05b92eee2c5f5792d148b671e67fc92392e99eee.zip vecmathlib-05b92eee2c5f5792d148b671e67fc92392e99eee.tar.gz |
Use __builtin_clzs if available
Diffstat (limited to 'vec_pseudo.h')
-rw-r--r-- | vec_pseudo.h | 6 |
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(); } |