通常、次のタイプを使用して 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が得られます。次に、そのようなベクトルの要素にアクセスできません。私の質問は、そのようなベクトルの要素にどのようにアクセスできますか? 私はスマートが必要です。X 要素にアクセスするには a[0]、Y 要素にアクセスするには a[1] など。
PS: 次を使用してこのコードをコンパイルします。
gcc -msse testgcc.c -o testgcc