diff options
-rw-r--r-- | vec_mask.h | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -43,8 +43,15 @@ namespace vecmathlib { // Construct a mask for a loop starting at imin, aligned down mask_t(std::ptrdiff_t imin_, std::ptrdiff_t imax_, std::ptrdiff_t ioff): - mask_t(imin_ - (ioff + imin_) % size, imin_, imax_, ioff) + imin(imin_), imax(imax_), i(imin_ - (ioff + imin_) % size) { + all_m = i-imin >= 0 && i+size-1-imax < 0; + if (__builtin_expect(all_m, true)) { + m = true; + } else { + m = (! signbit(intvec_t(i - imin) + intvec_t::iota()) && + signbit(intvec_t(i + size-1 - imax) + intvec_t::iota())); + } } // Get current index |