Прерывания и особые ситуации: Типы и средства индикации SIMD-исключений

Печать
Программирование - Архитектура и система команд микропроцессоров x86

 

Исключения SIMD генерируются процессором при выполнении SIMD-команд и имеют аналогичную исключениям FPU классификацию. Однако методика сообщения о возникновении SIMD-исключений существует одна — через внутреннюю генерацию прерывания (никаких MS-DOS режимов для SIMD-исключений не предусматривается). В то же время процессор поддерживает два режима генерации прерывания:

При выполнении SIMD-команд помимо SIMD-исключений могут генерироваться самые разнообразные особые ситуации, связанные с проблемами при обращениях к памяти (#PF, #GP#SS и т.п.). Обработчики особых ситуаций могут в этом случае функционировать точно также, как это происходит при обработке особых ситуаций, вызванных стандартными командами CPU.

Перед демаскированием SIMD-исключений пользовательские программы должны проверять — поддерживается ли операционной системой обработка этих исключений.

Существует шесть типов исключительных ситуаций SIMD:

Эти исключения полностью совпадают с исключениями FPU и генерируются при аналогичных условиях.

Механизм индикации SIMD-исключений также очень похож на механизм индикации исключений FPU. Он базируется на шести маскирующих битах и шести флагах индикации исключений, которые расположены в регистре MXCSR.

По умолчанию все SIMD-исключения замаскированы (все соответствующие биты маски в MXCSR установлены). В этом случае, при возникновении ситуации, которая приводит к генерации исключения, соответствующий флаг в регистре MXCSR устанавливается, а в качестве результата операции принимается предопределенное значение, выполнение программы продолжается. По окончании вычислений пользовательская программа может сама проанализировать флаги исключений для выявления произошедших ошибок.

Второй вариант обработки SIMD-исключений предполагает их демаскирование и, соответственно, генерацию прерывания 19 (#XM) при возникновении любого из демаскированных исключений. В этом случае реакция на возникновение исключения задается программой обработчиком особой ситуации #XM, которая определяет тип возникшего исключения по значению флагов в регистре MXCSR.