Самый быстрый способ создать маску из n единиц, начиная с позиции i

Какой самый быстрый способ (с точки зрения циклов ЦП в общей современной архитектуре) - создать маску с битами len, установленными в 1, начиная с позиции pos:

template 
constexpr T make_mask(std::size_t pos, std::size_t len)
{
    // Body of the function
}

// Call of the function
auto mask = make_mask(4, 10);
// mask = 00000000 00000000 00111111 11110000 
// (in binary with MSB on the left and LSB on the right)

Plus, Есть ли какие-нибудь встроенные функции компилятора или BMI , которые могут помочь?

9
задан Frank C. 5 September 2016 в 09:46
поделиться