2010-09-20 45 views
4

Je rencontre des problèmes pour utiliser les intrinsèques SSE4.1 sur le matériel qui (je pense) le supporte. Quelqu'un peut-il me dire si j'ai raté quelque chose?Erreur de compilation intrinsèque de SSE4.1 sur Mac

Construire le code suivant sur un MacBookPro5,4 (Penryn):

>g++ -msse sse4.cpp -S -o sse4.asm 

#include <stdio.h> 
#include <smmintrin.h> 

int main() 
{ 
    __m128 a, b; 
    const int mask = 0x55; 

    a.m128_f32[0] = 1.5; 
    a.m128_f32[1] = 10.25; 
    a.m128_f32[2] = -11.0625; 
    a.m128_f32[3] = 81.0; 
    b.m128_f32[0] = -1.5; 
    b.m128_f32[1] = 3.125; 
    b.m128_f32[2] = -50.5; 
    b.m128_f32[3] = 100.0; 

    __m128 res = _mm_dp_ps(a, b, mask); 

    printf_s("Original a: %f\t%f\t%f\t%f\nOriginal b: %f\t%f\t%f\t%f\n", 
       a.m128_f32[0], a.m128_f32[1], a.m128_f32[2], a.m128_f32[3], 
       b.m128_f32[0], b.m128_f32[1], b.m128_f32[2], b.m128_f32[3]); 
    printf_s("Result res: %f\t%f\t%f\t%f\n", 
       res.m128_f32[0], res.m128_f32[1], res.m128_f32[2], res.m128_f32[3]); 

    return 0; 
} 

génère l'erreur suivante:

/usr/lib/gcc/i686-apple-darwin10/4.2.1/include/smmintrin.h:35:3: error: #error "SSE4.1 instruction set not enabled" 
+2

Si votre matériel prend en charge SSE4.1, il est sans importance. Même si ce n'est pas le cas, le compilateur devrait toujours être capable de générer du code pour cela. Ou si le compilateur ne peut pas générer de code, le fait que vous ayez à nouveau le matériel ne vous aide pas. –

Répondre

11

Change:

g++ -msse sse4.cpp -S -o sse4.asm

à:

g++ -msse4.1 sse4.cpp -S -o sse4.asm

+1

Yup. Notez qu'il y avait d'autres erreurs en utilisant l'accesseur m128_f32 [] qui semble être spécifique à Microsoft. – Justicle

+2

@Justicle: Oui - utilisez simplement les macros '_mm_set_XXX' pour initialiser les types de données SIMD. –

2

Avez-vous essayé g++ -msse4.1?