Как вы загружаете / сохраняете из / в массив двойников с помощью GNU C Vector Extensions?
Я использую GNU C векторные расширения, а не Intel_mm_*
intrinsics.
Я хочу сделать то же самое, что и Int_m256_loadu_pd
встроенный. Присваивание значений одно за другим происходит медленно: gcc создает код с 4 инструкциями загрузки, а не с однимvmovupd
(который_m256_loadu_pd
действительно генерирует).
typedef double vector __attribute__((vector_size(4 * sizeof(double))));
int main(int argc, char **argv) {
double a[4] = {1.0, 2.0, 3.0, 4.0};
vector v;
/* I currently do this */
v[0] = a[0];
v[1] = a[1];
v[2] = a[2];
v[3] = a[3];
}
Я хочу что-то вроде этого:
v = (vector)(a);
ил
v = *((vector*)(a));
но ни одна из них не работает Первый завершается с ошибкой «невозможно преобразовать значение в вектор», а второй - с ошибками.