Igual que para las excepciones de punto flotante de la FPU, el procesador escoge una de dos posibles acciones cuando de una instrucción de las extensiones Streaming SIMD surge una excepción en punto flotante:
- Si la excepción está enmascarada, es producido un resultado por defecto que es aceptable en la mayoría de las situaciones. No se emite indicación externa, pero la correspondiente bandera de excepción en el MXCSR se establece y puede ser examinada más tarde.
- Si no está enmascarada, un editor de excepciones registrado previamente por el usuario será invocado a través de la excepción vector 19 del SIMD en punto flotante.
La rutina para invocar al editor de excepciones a través de la interrupción en el vector 19 es normalmente parte del kernel del software del sistema. Una entrada en la tabla de descripción de interrupciones debe ser seleccionada previamente por este vector. Algunos compiladores usan librerías run-time para ayudar en la edición de excepciones en punto flotante. Si cualquier operación en punto flotante de la FPU va a ser ejecutada y es posible que produzca una excepción en punto flotante, entonces la rutina de edición de excepciones debe desactivar todas las excepciones en punto flotante o la debe implementar como nueva candidata. Si no es el caso, la rutina debe borrar el estado de las banderas de las excepciones FPU, o enmascarar todas las excepciones en punto flotante de la FPU. Para las excepciones en punto flotante de las extensiones Streaming SIMD, las banderas de excepciones en MXCSR no tienen por que borradas, incluso si continúan no enmascaradas. Las excepciones en este caso ocurren inmediatamente, y una bandera de estado de excepciones de las extensiones Streaming SIMD que está activada cuando la correspondiente excepción no está enmascarada, no generará una excepción. Acciones típicas ejecutadas en este bajo nivel de rutina de editor de excepciones son:
- incrementar un contador de excepciones para mostrarlas más tarde.
- mostrar información de diagnóstico.
- abortar ejecuciones posteriores, o usar punteros de excepciones para construir una instrucción que funcione sin ellas, y ejecutarla.
- guardar información sobre excepciones en una estructura de datos que pase a tener un nivel más alto en el uso de editores de excepciones.
En la mayoría de los casos habrá 3 componentes en un editor de excepciones en punto flotante de bajo nivel: un 'prólogo', un 'cuerpo', y un 'epílogo'. El prólogo ejecuta funciones que deben protegidas de posibles interrupciones por servicios de mayor prioridad. Cuando el proceso crítico se completa, el prólogo puede re-activar las interrupciones y permitir a los editores de interrupciones de mayor prioridad reemplazar al editor de excepciones. El cuerpo examina la información de diagnóstico y hace una respuesta dependiente de la aplicación. Finalmente el epílogo hace lo inverso al prólogo; restaura el estado normal del procesador para retomar la ejecución normal.
Una instrucción de las extensiones Streaming SIMD se puede ejecutar en paralelo con otras similares, con instrucciones de enteros, en punto flotante, o instrucciones MMX. La sincronización de excepciones será también necesaria, y es similar a lo que expliqué con la sincronización de los editores de excepciones de la FPU.
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario