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
?