jueves, 8 de enero de 2009

Programación del sistema para extensiones del conjunto de instrucciones y del procesador

Para usar las extensiones SSE/SSE2/SSE3/SSSE3/SSE4, el sistema operativo tiene que proporcionar un soporte de inicialización del procesador para usarlas, para administrar las instrucciones de guardar estado FXSAVE y FXRSTOR, y para administrar las excepciones en punto flotante SIMD.
Para soportar las extensiones el sistema operativo debe realizar estas operaciones:
- Comprobar que el procesador las soporta (con CPUID).
- Comprobar que el procesador soporta las instrucciones FXSAVE y FXRSTOR (con CPUID).
- Proporcionar una inicialización para los estados de las extensiones.
- Proporcionar el soporte para las instrucciones FXSAVE y FXRSTOR.
- Proporcionar soporte, si es necesario, en administradores de excepciones no numéricas para las generadas por las instrucciones de las extensiones.
- Proporcionar un administrador de excepciones para la excepción SIMD en punto flotante.
Las arquitecturas IA-32 y Intel 64 no soportan la emulación de las instrucciones SSE/SSE2/SSE3/SSSE3/SSE4, como soportan a las instrucciones de FPU x87. La bandera EM del registro de control CR0 no se puede usar para invocar la emulación de las instrucciones de las extensiones. Si una instrucción de las extensiones se ejecuta cuando CR0.EM=1, se produce una excepción de opcode inválido.
Los estados de las extensiones consisten en el estado de los registros XMM y MXCSR. El método recomendado para guardar y recuperar estos estados es el siguiente:
- Ejecutar una instrucción FXSAVE para guardar el estado de los registros XMM y MXCSR en memoria.
- Ejecutar una instrucción FXRSTOR para recuperar el estado de los registros desde la imagen guardada en memoria por la instrucción FXSAVE.
Las características asociadas al manejo de estados de extensiones del procesador incluyen:
- Una distribución de datos extensible para las extensiones del estado del procesador existentes y futuras. La distribución del área XSAVE/XRSTOR se extiende desde el byte 512 para provocar compatibilidad y recorrido de migración desde el área FXSAVE/FXRSTOR.
- Una mejora del CPUID.
- Una mejora en el registro de control y en los registros dedicados para activar cada estado de extensión de cada procesador.
- Instrucciones para administrar el registro XFEATURE_ENABLED_MASK (XCR0) y el área de XSAVE/XRSTOR.

No hay comentarios: