Ошибка компиляции при выполнении SSE в C ++ - PullRequest
0 голосов
/ 26 августа 2011

Мой код очень прост для понимания SSE. Мой код:

#include <iostream>
#include <iomanip>
#include <xmmintrin.h>
using namespace std;
struct cVector  {
float x,y,z; };
int main()
{
cVector vec1;
vec1.x=0.5;
vec1.y=1.5;
vec1.z=-3.141;
__asm 
{
movups xmm1, vec1
mulps xmm1, xmm1
movups vec1, xmm1
}
cout << vec1.x << " " << vec1.y << " " << vec1.z << '\n';
return 0;
} 

Я использую Ubuntu 10.04. для компиляции я использовал следующую команду:

$ gcc -o program -msse -mmmx -msse2 sse.cpp

Найдена следующая ошибка:

sse.cpp: In function ‘int main()’:
sse.cpp:20: error: expected ‘(’ before ‘{’ token
sse.cpp:21: error: ‘movups’ was not declared in this scope
sse.cpp:21: error: expected ‘;’ before ‘xmm1’

Может кто-нибудь, пожалуйста, помогите мне, как я могу удалить эту ошибку?

1 Ответ

3 голосов
/ 26 августа 2011

Не пытайтесь делать это с помощью встроенного asm - используйте предоставленные встроенные функции, например,

// ...

#include <xmmintrin.h>

// ...

int main()
{
    cVector vec1;

    vec1.x = 0.5f;
    vec1.y = 1.5f;
    vec1.z = -3.141f;

    __m128 v = _mm_loadu_ps(&vec1.x); // load unaligned floats to SSE vector
    v = _mm_mul_ps(v, v);             // square
    _mm_storeu_ps(&vec1.x, v);        // store SSE vector back to unaligned floats

    cout << vec1.x << " " << vec1.y << " " << vec1.z << endl;

    return 0;
}
...