Как получить данные из регистров AVX?

Используя MSVC 2013 и AVX 1, у меня есть 8 поплавков в регистре:

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

Теперь я хочу позвонитьinline void print(float) {...} на все 8 поплавков. Похоже,Intel AVX intrisics сделает это довольно сложным:

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

но MSVC даже не имеет ни одной из этих двух встроенных функций. Конечно, я мог записать значения обратно в память и загрузить оттуда, но я подозреваю, что на уровне сборки нет необходимости разливать регистр.

Бонус Q: я бы конечно хотел написать

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

но MSVC не понимает, что много внутреннихтребовать развернуть петлю. Как мне написать цикл над 8x32 плавает в__m256 foo?

Ответы на вопрос(0)

Ваш ответ на вопрос