Intento crear una aplicación que utilice pthreads y __m128 tipo de SSE. De acuerdo con el manual de GCC, la alineación predeterminada de la pila es de 16 bytes. Para usar __m128, el requisito es la alineación de 16 bytes.GCC - Cómo realinear la pila?
Mi CPU de destino admite SSE. Utilizo un compilador de GCC que no admite la realineación de la pila en tiempo de ejecución (por ejemplo, -mstackrealign). No puedo usar ninguna otra versión del compilador de GCC.
Mi aplicación de prueba se parece a:
#include <xmmintrin.h>
#include <pthread.h>
void *f(void *x){
__m128 y;
...
}
int main(void){
pthread_t p;
pthread_create(&p, NULL, f, NULL);
}
La aplicación genera una excepción y salidas. Después de una depuración simple (printf "% p", & y), encontré que la variable y no está alineada con 16 bytes.
Mi pregunta es: ¿cómo puedo realinear la pila correctamente (16 bytes) sin utilizar ninguna bandera GCC y atributos (no ayudan)? ¿Debo usar GCC en línea Ensamblador dentro de esta función de subproceso f()?
Si tiene que usar una versión de gcc en particular, por favor incluya la versión de gcc (por ejemplo gcc 4.3.2 i386), y el anfitrión/sistema operativo objetivo (por ejemplo, Debian 5.0 (lenny) Linux 2.6.26 i686). Saber si sugerir opciones gcc 4.3 versus 3.4 puede marcar la diferencia. – mctylr