Provo a creare un'applicazione che utilizza pthreads e __m128 SSE type. Secondo il manuale GCC, l'allineamento di stack predefinito è 16 byte. Per utilizzare __m128, il requisito è l'allineamento a 16 byte.GCC - Come riallineare lo stack?
La mia CPU di destinazione supporta SSE. Uso un compilatore GCC che non supporta il riallineamento dello stack di runtime (ad esempio -mstackrealign). Non posso usare nessuna altra versione del compilatore GCC.
La mia applicazione di test si presenta come:
#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'applicazione genera un'eccezione ed esce. Dopo un semplice debug (printf "% p", & y), ho trovato che la variabile y non è allineata a 16 byte.
La mia domanda è: come posso riallineare correttamente lo stack (16 byte) senza utilizzare alcun flag GCC e attributi (non aiutano)? Dovrei usare GCC inline Assembler all'interno di questa funzione thread f()?
Se è necessario utilizzare una particolare versione di gcc, si prega di includere la versione di gcc (ad esempio, gcc 4.3.2 i386), e host/SO di destinazione (es. Debian 5.0 (lenny) Linux 2.6.26 i686). Sapere se suggerire le opzioni di gcc 4.3 rispetto a 3.4 può fare la differenza. – mctylr