constexpr T _pdep(T src, T mask) { 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 = _pdep_u32(src, mask); } else if (digits <= std::numeric_limits<unsigned long long int>::digits) { dest = _pdep_u64(src, mask); } else { dest = _pdep(src, mask, std::ignore); } return dest; }
unsigned int test_pdep_u32(unsigned int __X, unsigned int __Y) { // CHECK: @llvm.x86.bmi.pdep.32 return _pdep_u32(__X, __Y); }