int foo (unsigned int x, unsigned int y) { if (__builtin_ia32_bextr_u32 (x, y)) return 1; return 0; }
constexpr T _bextr(T src, T start, T len) { static_assert(binary_digits<T>::value, ""); constexpr T digits = binary_digits<T>::value; T dest = 0; if (digits <= std::numeric_limits<unsigned int>::digits) { dest = start < digits ? __builtin_ia32_bextr_u32(src, start, len) : 0; } else if (digits <= std::numeric_limits<unsigned long long int>::digits) { dest = start < digits ? __builtin_ia32_bextr_u64(src, start, len) : 0; } else { dest = _bextr(src, std::ignore); } return dest; }