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

5.3.2. Инструкции обмена между регистрами с плавающей точкой и основными регистрами

Инструкции setf и getf (см. табл. 5.8) перемещают данные между регистрами с плавающей точкой (FR) и основными регистрами (GR). Эти инструкции транслируют значение NaT основного регистра в значение NaTVal регистра с плавающей точкой, туда и обратно, как на рис. 5.4, 5.5 и 5.7. Представление памяти читается из (или записывается в) GR. Варианты инструкций setf и getf с расширениями .exp и .sig работают с только соответствующей частью регистра с плавающей точкой либо со знаком и порядком, либо с мантиссой соответственно. Их форматы трансляции описаны в табл. 5.9 и 5.10.

Табл.5.8. Инструкции обмена с регистром с плавающей точкой

Операции

Из GR в FR

Из FR в GR

С одинарной точностью

setf.s

getf.s

С двойной точностью

setf.d

getf.d

Над знаком и порядком

setf.exp

getf.exp

Над мантиссой или целочисленным

setf.sig

getf.sig

Табл. 5.9. Передача данных (setf) из основного регистра (целое число) в регистр с плавающей точкой.

Основной регистр

FP регистр (.sig)

FP регистр (.exp)

Класс

NaT

Целое

знак

порядок

мантисса

знак

порядок

мантисса

NaT

1

игнорируется

NaTVal

NaTVal

Целое

0

от 000…00 до 111…11

0

0x1003E

целое

int{17}

int{16:0}

0x8…(15)нулей

Табл. 5.9. Передача данных (getf) из регистра с плавающей точкой в основной регистр (целое число).

Регистр с плавающей точкой

GR (.sig)

GR (.exp)

Класс

знак

порядок

мантисса

NaT

Целое

NaT

Целое

NaTVal

0

0x1FFFE

0.000…00

1

0x(16)нулей

1

0x1FFFE

Целое или FP параллельное

0

0x1003E

от 0.000…00 до 1.111…11

0

мантисса

0

0x1003E

Другое

любой

любой

любая

0

мантисса

0

((знак<<17)|порядок)

5.3.3. Арифметические инструкции

Все арифметические инструкции с плавающей точкой, за исключением fcvt.xf (которая всегда только такая) имеют спецификатор .sf. Он показывает, какое поле, из четырех полей состояния в FPSR, будет управлять выполнением и содержать состояние инструкции (см. табл. 5.11). Поле состояния задает: разрешение исключений, режим округления, ширину порядка, управление точностью, а также какой флажок поля состояния обновлять. См. выше раздел «Регистр состояния с плавающей точкой».

Табл. 5.11. Толкование спецификатора поля состояния инструкции с плавающей точкой.

Спецификатор .sf

.s0

.s1

.s2

.s3

Поле состояния

FPSR.sf0

FPSR.sf1

FPSR.sf2

FPSR.sf3

Большинство арифметических инструкций с плавающей точкой могут задавать точность и диапазон результата. Точность задается либо статически, используя расширение инструкции типа .pc (задающее точность), либо динамически, используя поле pc в поле состояния FPSR. Диапазон задается точно также, но здесь уже в поле состояния FPSR фигурирует поле wre. Нормальные (не параллельные FP) арифметические инструкции, которые не имеют расширения типа .pc, используют точность и диапазон формата регистра с плавающей точкой. Детальнее см. табл. 5.6.

В табл. 5.12 перечислены арифметические инструкции с плавающей точкой, а в табл. 5.13 перечислены арифметические псевдооперации.

Табл. 5.12. Арифметические инструкции с плавающей точкой

Операция

Нормальная FP мнемоника

Параллельная FP мнемоника

FP умножение и сложение

fma.pc.sf

fpma.pc.sf

FP умножение и вычитание

fms.pc.sf

fpms.pc.sf

FP отрицательное умножение и сложение

fnma.pc.sf

fpnma.pc.sf

FP обратное значение аппроксимации

frcpa.sf

fprcpa.sf

FP обратное значение аппроксимации квадратного корня

frsqrta.sf

fprsqrta.sf

FP сравнение

fcpm.frel.fctype.sf

fpcpm.frel.sf

FP минимум

fmin.sf

fpmin.sf

FP максимум

fmax.sf

fpmax.sf

FP абсолютный минимум

famin.sf

fpamin.sf

FP абсолютный максимум

famax.sf

fpamax.sf

Преобразовать число с плавающей точкой в целое со знаком

fcvt.fx.sf fcvt.fx.trunc.sf

fpcvt.fx.sf fpcvt.fx.trunc.sf

Преобразовать число с плавающей точкой в целое без знака

fcvt.fxu.sf fcvt.fxu.trunc.sf

fpcvt.fxu.sf fpcvt.fxu.trunc.sf

Преобразовать целое со знаком в FP число

fcvt.xf

не используется

Табл. 5.13. Арифметические псевдооперации с плавающей точкой

Операция

Мнемоника

Что реально используется

FP умножение (типа IEEE) и параллельное FP умножение

fmpy.pc.sf fpmpy.sf

fma использ. FR0 для сложения

fmpa использ. FR0 для сложения

FP отрицательное умножение (типа IEEE) и параллельное отрицательное FP умножение

fnmpy.pc.sf fnpmpy.sf

fnma использ. FR0 для сложения

fnmpa использ.FR0 для сложения

FP сложение (типа IEEE)

fadd.pc.sf

fma использ. FR1 для умножения

FP вычитание (типа IEEE)

fsub.pc.sf

fms использ. FR1 для умножения

FP нормализация (типа IEEE)

fnorm.pc.sf

fma использ. FR1 для умножения, а FR0 для сложения

Преобразовать целое без знака в FP число

fcvt.xuf.pc.sf

fma использ. FR1 для умножения, а FR0 для сложения

Не существует псевдоопераций для параллельного FP сложения, вычитания, отрицания или нормализации, поскольку FR1 не содержит упакованной пары переменных с одинарной точностью равных 1.0. Параллельное сложение может быть выполнено путем предварительного формирования в регистре пары чисел равных 1.0 (с помощью инструкции fpack), а затем используя инструкцию fmpa. Моделирование операции целочисленного сложения может быть создано путем предварительного формирования целочисленной 1 в регистре с плавающей точкой, а затем использованием инструкции xma.

Псевдооперация fmpy доставляет согласующийся с IEEE результат, с помощью округления произведения, без выполнения сложения, характерного для fma. Если в инструкции fma указать не регистр FR0, а другой, не содержащий значение +0.0, то в этом случае, согласующийся с IEEE результат умножения не получится.