_mm_store_ps ne fonctionne pas avec Clang?
Closed this issue · 4 comments
J'ai utilisé l'exemple d'intrinsic que l'on avais vu en cours comme base, mais pour une certaine raison _mm_store_ps
fait crash le build et me retourne ce message d'erreur:
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
Si j'ai bien compris c'est un problème de segmentation (?) mais je n'ai aucune idée de comment corriger ça.
_mm_storeu_ps
marche, mais est plus lent de ce que j'ai lu car il n'aligne pas ses données.
Le bug n'a pas l'air d’apparaître avec GCC.
Est-ce que le pointeur que tu donnes est aligné sur 16 bytes? Si c'est pas le cas, ça crash...
Il me semble pas...
On dirait que array.data() est aligné en GCC mais pas sur Clang?
Un std::array<float, 4> out float[4] est aligné sur 4 bytes (parce que c'est l'alignment demandé par le type de base), le compilateur peut faire le choix de l'aligner sur 16 bytes ou pas. Tu peux forcer l'alignement avec alignas avant la déclaration de ton std::array (https://en.cppreference.com/w/cpp/language/alignas)
Oh! Je vois
Ca marche en ajoutant alignas(), merci!