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

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результат умножения не получится.