Wie lade / speichere ich mit GNU C Vector Extensions von / zu einem Array von Doubles?

Ich benutze GNU C Vector Extensions, nicht Intels_mm_* intrinsics.

Ich möchte das Gleiche tun wie Intels_m256_loadu_pd intrinsic. Das Zuweisen der Werte nacheinander ist langsam: gcc erzeugt Code mit 4 Ladeanweisungen anstelle eines einzelnenvmovupd (welche_m256_loadu_pd erzeugt).

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];
}

Ich möchte so etwas:

v = (vector)(a);

ode

v = *((vector*)(a));

aber auch nicht arbeiten. Der erste Fehler schlägt mit "Wert kann nicht in einen Vektor konvertiert werden" fehl, während der zweite Fehler zu Segfaults führt.