existe uma instrução inversa à instrução movemask no intel avx

As instruções movemask usam um __m256i e retornam um int32 em que cada bit (os primeiros 4, 8 ou todos os 32 bits, dependendo do tipo de elemento do vetor de entrada) é o bit mais significativo do elemento vetorial correspondent

Gostaria de fazer o inverso: pegue um 32 (onde apenas os 4, 8 ou 32 bits menos significativos são significativos) e obtenha um __m256i em que o bit mais significativo de cada bloco de tamanho int8, int32 ou int64 está definido como bit original.

Basicamente, quero passar de uma máscara de bits compactada para uma que possa ser usada como máscara por outras instruções do AVX2 (como maskstore, maskload, mask_gather

Não consegui encontrar rapidamente uma instrução que faça isso, então estou perguntando aqui. Se não houver uma instrução com essa funcionalidade, existe um truque inteligente em que você consegue isso em poucas instruções?

Meu método atual é usar uma tabela de pesquisa de 256 elementos. Eu quero usar esta operação dentro de um loop onde não está acontecendo muita coisa, para acelerar. Observe que não estou muito interessado em longas sequências de múltiplas instruções ou em pequenos loops que implementam esta operaçã

questionAnswers(1)

yourAnswerToTheQuestion