Como obter dados dos registros AVX?

Usando o MSVC 2013 e o AVX 1, tenho 8 carros alegóricos em um registro:

__m256 foo = mm256_fmadd_ps(a,b,c);

Agora eu quero ligarinline void print(float) {...} para todos os 8 carros alegóricos. Parece que oIntel A intricada AVX tornaria isso bastante complicado:

print(_castu32_f32(_mm256_extract_epi32(foo, 0)));
print(_castu32_f32(_mm256_extract_epi32(foo, 1)));
print(_castu32_f32(_mm256_extract_epi32(foo, 2)));
// ...

mas o MSVC nem sequer tem uma dessas duas intrínsecas. Claro, eu poderia escrever de volta os valores para a memória e carregar a partir daí, mas suspeito que no nível da montagem não seja necessário derramar um registro.

Bônus P: É claro que eu gostaria de escrever

for(int i = 0; i !=8; ++i) 
    print(_castu32_f32(_mm256_extract_epi32(foo, i)))

mas o MSVC não entende que muitos intrínsecosexigir loop desenrolando. Como eu escrevo um loop sobre os flutuadores 8x32 no__m256 foo?

questionAnswers(4)

yourAnswerToTheQuestion