Как вы загружаете / сохраняете из / в массив двойников с помощью 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));

но ни одна из них не работает Первый завершается с ошибкой «невозможно преобразовать значение в вектор», а второй - с ошибками.

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

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