- •5. Модель программирования с плавающей точкой.
- •5.1. Форматы и типы данных
- •5.1.1. Типы действительных чисел
- •5.1.2. Формат регистра с плавающей точкой
- •5.1.3. Представление значений в регистрах с плавающей точкой
- •5.2. Регистр состояния с плавающей точкой
- •5.3. Инструкции с плавающей точкой
- •5.3.1. Инструкции доступа к памяти
- •5.3.3. Арифметические инструкции
- •5.3.2. Инструкции обмена между регистрами с плавающей точкой и основными регистрами
- •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.4. Неарифметические инструкции
Неарифметические инструкции с плавающей точкой всегда используют полную точность регистра с плавающей точкой (82-бита), поэтому они не имеют расширений типа .pc и спецификаторов типа .sf.
Инструкция fclass используется для классификации содержимого регистра с плавающей точкой. Инструкция fmerge используется для того, чтобы слить данные из двух регистров с плавающей точкой в один такой регистр. Инструкции fmix, fsxt, fpack и fswap используются для манипулирования параллельными FP данными в мантиссе регистра с плавающей точкой. Инструкции fand, fandcm, for и fxor используются для выполнения логических операций на мантиссе регистра с плавающей точкой. Инструкция fselect используется для условного выбора.
Псевдооперация fneg просто реверсирует знаковый бит операнда и поэтому не эквивалентна IEEE операции отрицания. Для создания IEEE операции отрицания используется fnma, где сомножителем должен быть FR1, а слагаемым – FR0.
В табл. 5.14 перечислены неарифметические инструкции с плавающей точкой, а в табл. 5.15 перечислены неарифметические псевдооперации.
Табл. 5.14. Неарифметические инструкции с плавающей точкой
Операция |
Мнемоника |
FP классификация |
fclass.fcrel.fctype |
FP слияние со знаком |
fmerge.s |
Параллельное FP слияние со знаком |
fpmerge.s |
FP слияние с отрицанием знака |
fmerge.ns |
Параллельное FP слияние с отрицанием знака |
fpmerge.ns |
Смешивание левых FP чисел |
fmix.l |
Смешивание правых FP чисел |
fmix.r |
Смешивание левых и правых FP чисел |
fmix.lr |
Знак/порядок левого FP числа |
fsxt.l |
Знак/порядок правого FP числа |
fsxt.r |
Упаковка FP чисел |
fpack |
Обмен FP чисел |
fswap |
Обмен и отрицание левого FP числа |
fswap.nl |
Обмен и отрицание правого FP числа |
fswap.nr |
Логическое И для FP |
fand |
Логическое И с дополнением для FP |
fandcm |
Логическое ИЛИ для FP |
for |
Логическое Исключающее ИЛИ для FP |
fxor |
Выбор для FP |
fselect |
Табл. 5.15. Неарифметические псевдооперации с плавающей точкой
Операция |
Мнемоника |
Что реально используется |
Абсолютное FP значение |
fabs |
fmerge.s со знаком из FR0 |
Абсолютное значение параллельного FP |
fpabs |
fpmerge.s со знаком из FR0 |
FP отрицание |
fneg |
fmerge.ns |
Параллельное FP отрицание |
fpneg |
fpmerge.ns |
FP отрицание абсолютного значения |
fnegabs |
fmerge.ns со знаком из FR0 |
Параллельное FP отрицание абсолютного знач. |
fpnegabs |
fpmerge.ns со знаком из FR0 |
