通常我使用以下类型处理 3D 矢量:
typedef vec3_t float[3];
使用 smth. 初始化向量。像:
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};
并使用 smth 访问它们。像:
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 作为结果。其次,我无法访问此类向量的元素。我的问题是:如何访问此类向量的元素?我需要smth。比如 a[0] 访问 X 元素, a[1] 访问 Y 元素等。
PS:我使用以下代码编译此代码:
gcc -msse testgcc.c -o testgcc