¿Alternativa eficiente portátil a PDEP sin usar BMI2?

La documentación para elinstrucción de depósito paralelo (PDEP) en el Conjunto de instrucciones de manipulación de bits de Intel 2 (BMI2) describe la siguiente implementación en serie para la instrucción (pseudocódigo tipo C):

U64 _pdep_u64(U64 val, U64 mask) {
  U64 res = 0;
  for (U64 bb = 1; mask; bb += bb) {
    if (val & bb)
      res |= mask & -mask;
    mask &= mask - 1;
  }
  return res;
}

Ver también Intel'spdep entrada manual ref..

Este algoritmo es O (n), donde n es el número de bits establecidos enmask, que obviamente tiene un peor caso de O (k) donde k es el número total de bits enmask.

¿Es posible un algoritmo de peor caso más eficiente?

¿Es posible hacer una versión más rápida que asuma queval tiene como máximo un conjunto de bits, es decir, es igual a 0 o igual1<<r por algún valor der de 0 a 63?

Respuestas a la pregunta(1)

Su respuesta a la pregunta