Normalerweise arbeite ich mit 3D-Vektoren folgenden Typen verwenden:C - Wie Elemente des Vektors zuzugreifen Vektor mit GCC SSE Erweiterung
typedef vec3_t float[3];
Initialisierung Vektoren smth. wie:
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};
und Zugriff auf sie mit etw. wie:
x_basis[X] * y_basis[X] + ...
Jetzt brauche ich eine Vektorarithmetik mit SSE-Anweisungen. Ich habe folgenden Code:
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 unterstützt so. Aber ... Zuerst gibt es mir 0,00000 als Ergebnis. Zweitens kann ich nicht auf die Elemente solcher Vektoren zugreifen. Meine Frage ist: Wie kann ich auf Elemente solcher Vektoren zugreifen? Ich brauche etwas. wie ein [0] X-Element zuzugreifen, ein [1] Y Element zuzugreifen usw.
PS: Ich habe diesen Code kompilieren:
gcc -msse testgcc.c -o testgcc
Die Fragen waren nicht so schwer, und ich betrachte mich selbst nicht als GCC-Experte. Beim nächsten Mal verwende ich einen harmloseren Titel, ich habe die Frage fast übersprungen. – hirschhornsalz