Встроенные функции Intel имеют 3 векторных типа (и соответствующие 128- и 512-разрядные версии):
__m256
: вектор float
, используется с _mm..._ps
встроенными __m256d
: вектор double
, используется с _mm..._pd
intrinsics __m256i
: целочисленный вектор, неопределенная ширина элемента.(Программист может смешивать и сопоставлять различные операции ширины элемента полезными способами.) Используется с _mm..._epi8/16/32/64
(упакованное целое число с элементами) или _mm..._si256
(без значимых границ элементов, например, xor
)
Таким образом, для целочисленных векторов есть только один тип, но для векторов FP есть 2 разных типа.В asm они используют одни и те же регистры, но, как и для скалярных типов, существуют разные типы для разных интерпретаций.
Как только вы это поймете, сообщение об ошибке самоочевидно:
error: incompatible types when assigning to type ‘__m256 {aka __vector(8) float}’ from type ‘__m256d {aka __vector(4) double}’
Правая часть задания дала вам вектор __m256d
, но вы пытаетесь присвоить его переменной __m256
.
Предположительно, вы хотите __m256d avx_sreg = blah blah_pd
, поэтому у вас есть64-битные double
элементы, соответствующие вашим 64-битным целым числам.