Estoy en la siguiente situación:retorno registro SSE con SSE discapacitados
- Estoy escribiendo código para un kernel que no permite las instrucciones SSE
- tengo que hacer aritmética de punto flotante
- I 'm compilación de una plataforma x86_64
Aquí es un ejemplo de código que ilustra el problema:
int
main(int argc, char** argv)
{
double d = 0.0, dbase;
uint64_t base_value = 300;
d = (2200.0 - 1000.0)/(1000.0);
dbase = d * base_value;
printf("d = %f, dbase = %f\n", d, dbase);
base_value = dbase;
printf("base_value = %llu\n", (long long unsigned)base_value);
return 0;
}
Y aquí es la línea relevante del makefile:
CFLAGS += -mcmodel=kernel -mno-red-zone -mfpmath=387 -mno-sse -mno-sse2 -mno-mmx -mno-3dnow \
-msoft-float -fno-asynchronous-unwind-tables -fno-omit-frame-pointer
Cuando ejecuto una acumulación consigo este error:
SSE register return with SSE disabled
(Los puntos de error en la línea que multiplica dy base_value)
¿Alguna idea de qué puedo hacer para solucionar esto? La eliminación de -mno-sse no es una opción, pero parece que el compilador debería ser capaz de generar código no sse para hacer la multiplicación.
Gracias Nathan
Es posible que gcc no pueda manejar este caso porque asume que todos los procesadores x86-64 tienen SSE. – Amok
¿Significa esto que nadie multiplica algo dentro del núcleo de FreeBSD en compilaciones de 64 bits? – Nathan
Cualquier kernel en el que he trabajado tiende a evitar el punto flotante tanto como sea posible. –