- •5. Модель программирования с плавающей точкой.
- •5.1. Форматы и типы данных
- •5.1.1. Типы действительных чисел
- •5.1.2. Формат регистра с плавающей точкой
- •5.1.3. Представление значений в регистрах с плавающей точкой
- •5.2. Регистр состояния с плавающей точкой
- •5.3. Инструкции с плавающей точкой
- •5.3.1. Инструкции доступа к памяти
- •5.3.2. Инструкции обмена между регистрами с плавающей точкой и основными регистрами
- •5.3.3. Арифметические инструкции
- •5.3.4. Неарифметические инструкции
- •5.3.5. Инструкции поля состояния для регистра состояния с плавающей точкой (fpsr)
- •5.3.6. Инструкции целочисленного умножения и сложения
- •5.4. Дополнительные обсуждения в связи с ieee
- •5.4.1. Прерывания с плавающей точкой
- •5.4.1.1. Ошибка: Недоступный регистр с плавающей точкой
- •5.4.1.2. Ошибка: Исключение с плавающей точкой
- •5.4.1.3. Ловушка «Исключение с плавающей точкой»
- •5.4.2. Определение Переполнения
- •5.4.3. Определение Крошечности, Неточности и Антипереполнения.
- •5.4.4. Целочисленные неверные операции
- •5.4.5. Определение целочисленных операций
- •5.4.6. Определение и распространение значений.
- •5.4.7. Операции, предписанные стандартом ieee, отложенные программно
- •5.4.8. Дополнения сверх стандарта ieee
5.3.6. Инструкции целочисленного умножения и сложения
Целочисленное (с фиксированной точкой) умножение выполняется в устройстве с плавающей точкой, при использовании инструкции xmaс тремя операндами. Операнды и результат этих инструкций являются регистрами с плавающей точкой. Инструкцииxmaигнорируют поля знака и порядка в регистре с плавающей точкой, за исключением проверки значенияNaTVal. Произведение двух 64-битных мантисс складывается с третьей 64-битной мантиссой (расширенной нулями) для получения 128 битного результата. Старшая (high) и младшая (low) версии инструкции, выбирают соответственно младшие или старшие 64-бита из 128-битного результата и записывают полученное значение в приемный регистр, как обычное целое. Версии инструкции со знаком или без знака оперируют с 64-битными целыми сомножителями, как со знаковыми или беззнаковыми, соответственно.
Табл. 5.17. Инструкции целочисленного умножения и сложения
Целочисленное сложение и умножение |
Младшее |
Старшее |
Со знаком |
xma.l |
xma.h |
Без знака |
xma.lu (псевдооперация) |
xma.hu |
5.4. Дополнительные обсуждения в связи с ieee
Этот раздел описывает поддержку стандартов IEEEв областях, где определенные детали оставлены открытыми.
5.4.1. Прерывания с плавающей точкой
Прерывания с плавающей точкой являются точными. Сообщение и обработка исключения происходят на инструкции, которая вызвала прерывание. Имеется три прерывания с плавающей точкой: ошибка «Недоступный регистр с плавающей точкой», ошибка «Исключение с плавающей точкой», ловушка «Исключение с плавающей точкой» (детальнее, см. главу 5 «Прерывания» во втором томе).
Исключения обрабатываются согласно предопределенному правилу очередности. Правило очередности обработки исключений состоит в том, что исключение с более высоким приоритетном отмечается флагом в первую очередь, и результаты вырабатываются согласно требованиям этого исключения. Исключение с более низким приоритетом не отмечается флагом, даже если оно происходит. Например, деление SNaNна ноль вызовет исключение «Неверная операция» (из-заSNaN), а не исключение «Деление на ноль». Результатом запрета исключения будет неопределенностьQNaN, а не бесконечность. Однако,IEEEисключение-ловушка «Потеря точности с плавающей точкой» может сопровождать исключения-ловушки «Переполнение или Антипереполнение с плавающей точкой».
Для инструкций, которые обращаются к файлу регистров с плавающей точкой, наивысший приоритет имеет ошибка «Недоступный регистр с плавающей точкой».
5.4.1.1. Ошибка: Недоступный регистр с плавающей точкой
В регистре PSR, два бита –PSR.dflиPSR.dfh(см. раздел 3.3.2 «Регистр состояния процессора (PSR) во втором томе) могут быть использованы операционной системой для разрешения или запрещения доступа к двум подмножествам регистров с плавающей точкой: отFR2 доFR31 и отFR32 доFR127 соответственно. Ошибка «Недоступный регистр с плавающей точкой» случается, когда обращение (чтение или запись) делается дляFR, доступ к которому запрещен. Операционная система может использовать эту ошибку для идентификации задачи как целочисленной или с плавающей запятой и оптимизировать, заданный по умолчанию набор регистров, которые сохраняются при переключении задач. Если целочисленная задача, главным образом, способна использовать для операций целочисленного умножения и деления, только регистры отFR2 доFR31, то время переключения контекста может быть уменьшено отключением доступа к старшим регистрам с плавающей точкой.