Обычно я работаю с 3D-векторами, используя следующие типы:
typedef vec3_t float[3];
инициализация векторов с помощью чего-л. как:
vec3_t x_basis = {1.0, 0.0, 0.0};
vec3_t y_basis = {0.0, 1.0, 0.0};
vec3_t z_basis = {0.0, 0.0, 1.0};
и доступ к ним с помощью чего-л. как:
x_basis[X] * y_basis[X] + ...
Теперь мне нужна векторная арифметика с использованием инструкций SSE. У меня есть следующий код:
typedef float v4sf __attribute__ ((mode(V4SF)))
int main(void)
{
v4sf a,b,c;
a = (v4sf){0.1f,0.2f,0.3f,0.4f};
b = (v4sf){0.1f,0.2f,0.3f,0.4f};
c = (v4sf){0.1f,0.2f,0.3f,0.4f};
a = b + c;
printf("a=%f \n", a);
return 0;
}
GCC поддерживает такой способ. Но... Во-первых, в результате я получаю 0,00000. Во-вторых, я не могу получить доступ к элементам таких векторов. Мой вопрос: как я могу получить доступ к элементам таких векторов? мне нужно что-л. например, a[0] для доступа к элементу X, a[1] для доступа к элементу Y и т. д.
PS: я компилирую этот код, используя:
gcc -msse testgcc.c -o testgcc