Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MProc / M9 / Архитектура часть 5..doc
Скачиваний:
43
Добавлен:
16.04.2013
Размер:
349 Кб
Скачать

5.4.1.1. Ошибка: Недоступный регистр с плавающей точкой

В регистре PSR, два бита – PSR.dfl и PSR.dfh (см. раздел 3.3.2 «Регистр состояния процессора (PSR) во втором томе) могут быть использованы операционной системой для разрешения или запрещения доступа к двум подмножествам регистров с плавающей точкой: от FR2 до FR31 и от FR32 до FR127 соответственно. Ошибка «Недоступный регистр с плавающей точкой» случается, когда обращение (чтение или запись) делается для FR, доступ к которому запрещен. Операционная система может использовать эту ошибку для идентификации задачи как целочисленной или с плавающей запятой и оптимизировать, заданный по умолчанию набор регистров, которые сохраняются при переключении задач. Если целочисленная задача, главным образом, способна использовать для операций целочисленного умножения и деления, только регистры от FR2 до FR31, то время переключения контекста может быть уменьшено отключением доступа к старшим регистрам с плавающей точкой.

5.4.1.2. Ошибка: Исключение с плавающей точкой

Ошибка «Исключение с плавающей точкой» вызывается, если происходит одно из следующих четырех обстоятельств:

  1. Процессор запрашивает помощь системного программного обеспечения для завершения операции через ошибку «Программная помощь».

  2. IEEE ловушка «Неверная операция» доступна и произошла.

  3. IEEE ловушка «Деление на ноль» доступна и произошла.

  4. Ловушка «Не нормализованный/Денормальзованный операнд» доступна и не нормализованный операнд (в файле регистров, денормализованные числа представляются как не нормализованные числа) встретился в арифметической инструкции с плавающей точкой.

Если вызвана только индикация ошибки «Исключение с плавающей точкой», то она отмечается в поле ISR.code. Соответствующие флаги состояния в FPSR не изменяются.

Не требуется, чтобы ошибка «Исключение: Программная помощь с плавающей точкой» когда-нибудь сигнализировала (за исключением некоторых операндов в инструкциях frcpa и frsqrta), при этом нет режима, вынуждающего это использовать. Если нет исходного операнда NaTVal, то реализация процессора может сигнализировать об ошибке «Исключение: Программная помощь с плавающей точкой» в любое время в течение операции. Чтобы гарантировать максимальную производительность с плавающей точкой, большинство реализаций не будет использовать это исключение, если нет трудных ситуаций, таких как операции, применяющие денормализованные числа.

Правила очередности ошибок «Исключения с плавающей точкой» для арифметических операций, изображено на рис. 5.11.

5.4.1.3. Ловушка «Исключение с плавающей точкой»

Ловушка «Исключение с плавающей точкой» вызывается, если происходит одно из следующих четырех обстоятельств:

  1. Процессор запрашивает помощь системного программного обеспечения для завершения операции через ловушку «Программная помощь».

  2. IEEE ловушка «Переполнение» доступна и произошло переполнение.

  3. IEEE ловушка «Антипереполнение» доступна и произошло антипереполнение.

  4. IEEE ловушка «Потеря точности» доступна и у результата произошла потеря точности.

Когда происходят переполнение, антипереполнение, потеря точности результата, то обновляются соответствующие флаги в FPSR. Если произошла разрешенная ловушка «Исключение с плавающей точкой», то индикация этой разрешенной ловушки запоминается в поле ISR.code, а бит fpa в этом поле (ISR{14}) устанавливается так, как это описано в следующем абзаце.

Если величина представленного результата больше, чем величина абсолютно точного результата, то ISR.fpa устанавливается в 1, иначе он устанавливается в 0. Величина представленного результата может быть больше, если

  • мантисса увеличена в процессе округления, либо

  • если большее предопределенное значение (например, бесконечность) заменило собой вычисленный результат (например, когда переполнение заблокировано).

Не требуется, чтобы ловушка «Исключение: Программная помощь с плавающей точкой» когда-нибудь сигнализировала, при этом нет режима, вынуждающего это использовать. Чтобы гарантировать максимальную производительность с плавающей точкой, выполнение будет редко использовать это исключение – только в трудных ситуациях, таких как операции создания денормализованных чисел. Если ловушка «Программная помощь» запрещена, но произошла, то это указывается установкой бита ловушки в поле ISR.code. При этом приемный регистр содержит ответ, допустимый для этой ловушки.

Правила очередности ловушек «Исключения с плавающей точкой» для арифметических операций, изображено на рис. 5.12.

START

NaTVal

Y

NaTVal

Response

Operand?

N

Unsupported

Y

Invalid

Y

FP.Fault

Operand?

E nabled?

ISR.v=1

N

N

Q NaN Ind

FLAGS.v=1

SNaN

Y

Invalid

Y

FP.Fault

Operand?

Enabled?

ISR.v=1

N

N

F LAGS.v=1

SNaN

Y

Reg prioritized

Operand?

NaN resp(f4,f2,f3)

N

Other Invalid

Y

I nvalid

Y

FP.Fault

Operand?

Enabled?

ISR.v=1

N

N

QNaN Ind

FLAGS.v=1

Zero

Y

Z eroDiv

Y

FP.Fault

Divide?(1)

Enabled?

ISR.z=1

N

N

SWA.Fault

Limits

IEEE Resp

ISR.swa=1

Check?(2)

FLAGS.z=1

N

F P.Fault

Y

Denomal

Y

UnNomal

ISR.d=1

Enabled?

Operand?

N

N

(1) для frcpa/fprcpa

F LAGS.d=1

COMPUTE

(2) для frcpa/frsqrta

OPERATION

Рис.5.11. Приоритетность ошибок «Исключения с плавающей точкой»

Рис.5.12. Приоритетность ловушек«Исключения с плавающей точкой»