Je tente de construire une application qui utilise pthreads et __m128 type SSE. Selon le manuel de GCC, l'alignement de pile par défaut est de 16 octets. Afin d'utiliser __m128, l'exigence est l'alignement de 16 octets.GCC - Comment réaligner la pile?
Mon processeur cible prend en charge SSE. J'utilise un compilateur GCC qui ne prend pas en charge le réalignement de la pile d'exécution (par exemple, -mstackrealign). Je ne peux utiliser aucune autre version du compilateur GCC.
Mon application de test ressemble:
#include <xmmintrin.h>
#include <pthread.h>
void *f(void *x){
__m128 y;
...
}
int main(void){
pthread_t p;
pthread_create(&p, NULL, f, NULL);
}
L'application génère une exception et sort. Après un simple débogage (printf "% p", & y), j'ai trouvé que la variable y n'est pas alignée sur 16 octets.
Ma question est: comment puis-je réaligner la pile correctement (16 octets) sans utiliser de drapeaux et d'attributs GCC (ça n'aide pas)? Dois-je utiliser GCC inline Assembler dans cette fonction de thread f()?
Si vous devez utiliser une version gcc particulière, s'il vous plaît inclure la version gcc (gcc 4.3.2 i386), et l'hôte/OS cible (par exemple Debian 5.0 (lenny) Linux 2.6.26 i686). Savoir si proposer des options de gcc 4.3 par rapport à 3.4 peut faire la différence. – mctylr