Donc, je suis en train d'ajouter deux vecteurs en utilisant un code d'assemblage, mais je problème avec:Passant struct à fonctionner dans c
sse_vector4_add(set_vector(2,2,2,2),set_vector(4,2,4,2));
Je ne sais pas comment passer ces vecteurs à cette fonction.
typedef struct vector4 {
float x, y, z, w;
} vector4;
// Set values to a vector4
vector4 set_vector(float x, float y, float z, float w) {
vector4 ret_vector = { x, y, z, w };
return ret_vector;
}
// Use sse to add the elements of two vectors a + b
vector4 sse_vector4_add(vector4 *op_a,vector4 *op_b) {
vector4 ret_vector;
asm(
"mov %%eax,op_a \n" // Load pointers into CPU regs
"mov %%ebx,op_b \n"
"movups %%XMM0,(%%EAX) \n" // Move the vectors to SSE regs
"movups %%XMM1,(%%EBX) \n"
"addps %%XMM0,%%XMM1 \n" // Add elements
"movups (ret_vector),%%XMM0 \n" // Save the return vector
:
);
return ret_vector;
}
void main() {
// Add two vectors
sse_vector4_add(set_vector (2,2,2,2),set_vector(4,2,4,2));
getchar();
}
Fonction sse_vector4_add
a été faite à partir d'une fonction similaire, mais en C++.
Sauf si vous êtes dans un environnement autonome, 'main' renvoie' int'. – jxh
peut-être une option est de modifier la fonction d'ajout de vecteur pour prendre des arguments par valeur –