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

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

Регистр состояния с плавающей точкой (FPSR) содержит информацию состояния и динамического управления для операций с плавающей точкой. Здесь имеется один главный набор информации состояния и управления (FPSR.sf0) и три дополнительных набора (FPSR.sf1, FPSR.sf2, FPSR.sf3). Компоновка FPSR показана на рис.5.2, а его поля описаны в табл. 5.3. Компоновка поля состояния регистра FPSR показана на рис.5.3, а входящие в него поля описаны в табл. 5.4.

63

58

57

45

44

32

31

19

18

6

5

0

reserved

sf3

sf2

sf1

sf0

traps

6

13

13

13

13

6

Рис. 5.2. Формат регистра состояния с плавающей точкой

Табл.5.3. Описание полей регистра состояния с плавающей точкой

Поле

Биты

Описание

traps.vd

0

Если этот бит установлен, то запрещен вызов исключения «Недопустимая операция с плавающей точкой» (ловушка IEEE-trap)

traps.dd

1

Если этот бит установлен, то запрещен вызов исключения «Не нормализованный/денормализованный операнд с плавающей точкой»

traps.zd

2

Если этот бит установлен, то запрещен вызов исключения «Деление на ноль с плавающей точкой» (ловушка IEEE-trap)

traps.od

3

Если этот бит установлен, то запрещен вызов исключения «Переполнение с плавающей точкой» (ловушка IEEE-trap)

traps.ud

4

Если этот бит установлен, то запрещен вызов исключения «Антипереполнение с плавающей точкой» (ловушка IEEE-trap)

traps.id

5

Если этот бит установлен, то запрещен вызов исключения «Потеря значимости с плавающей точкой» (ловушка IEEE-trap)

sf0

18:6

Основное поле состояния

sf1

31:19

1-е дополнительное поле состояния

sf2

44:32

2-е дополнительное поле состояния

sf3

57:45

3-е дополнительное поле состояния

reserved

63:58

Резервировано

12

11

10

9

8

7

6

5

4

3

2

1

0

FPSR.sfx

флаги

управление

i

u

o

z

d

v

td

rc

pc

wre

ftz

6

7

Рис.5.3. Формат поля состояния с плавающей точкой

Табл. 5.4. Описание состава полей, входящих в поле состояния с плавающей точкой

Поле

Биты

Описание

ftz

0

Режим flush-to-zero (стремления к нулю)

wre

1

Максимальный диапазон порядка (см. табл.5.6)

pc

3:2

Управление точностью (см. табл.5.6)

rc

4:5

Управление округлением (см. табл.5.5)

td

6

Ловушки запрещены а

v

7

Недействительная операция (IEEE флаг)

d

8

Денормализованный/Не нормализованный операнд

z

9

Деление на ноль (IEEE флаг)

o

10

Переполнение (IEEE флаг)

u

11

Антипереполнение (IEEE флаг)

i

12

Потеря значимости (IEEE флаг)

а. Бит td является зарезервированным для основного поля состояния FPSR.sf0.

Флаг состояния «Денормализованный/Не нормализованный операнд» является промежуточным флагом типа IEEE, он устанавливается, если значение используется в арифметической инструкции или в арифметическом вычислении, а например, «ненорм.»*NaN не установит этот флаг. Как указано выше, в табл. 5.2, все денормализованные форматы являются подмножеством не нормализованных чисел.

Примечание. Ошибка/ловушка «Исключение с плавающей точкой» происходит только, если исключение с плавающей точкой случилось в течение обработки инструкции. Следовательно, установка в 1 флажка в поле состояния в программе не вызовет исключения. Флаги поля статуса просто показывают происшествия исключений с плавающей точкой.

Режим FTZ (Flush-to-Zero) создает результаты, которые были усечены к корректному знаковому нолю, при возникновении «крошечности» (tininess) (см. ниже раздел 5.4.3 «Определение крошечности, потери точности и антипереполнения). Режим FTZ может быть разрешен, только если запрещено антипереполнение. Если антипереполнение разрешено, то он более приоритетен и режим FTZ игнорируется. Заметим, что программный обработчик исключения может проверить бит FTZ режима и если разрешено, то эмулировать FTZ операцию.

Округление результата с плавающей точкой основывается на окончании инструкции управляющем точностью и на управляющих полях wre, pc, rc, входящих в поле состояния. Точность мантиссы и диапазон порядка результата задаются так, как это описано в табл.5.6. Если результат не точен, то способ округления задается полем FPSR.sfx.rc (см. табл.5.5).

Табл. 5.5. Определение управления округлением с плавающей точкой

К ближайшему (или четному)

К минус бесконечности

К плюс бесконечности

К нулю (отсечением)

FPSR.sfx.rc

00

01

10

11

Табл. 5.6. Определение управления моделью вычислений с плавающей точкой

Поля, управляющие моделью вычислений

Выбранная модель вычислений

Окончание инструкции управляющее точностью

Динамическое поле FPSR.sfx.pc

Динамическое поле FPSR.sfx.wre

Точность мантиссы (бит)

Диапазон порядка (бит)

Стиль вычислений

.s

игнорир.

0

24

8

Одинарное вещественное IEEE

.d

игнорир.

0

53

11

Двойное вещественное IEEE

.s

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

1

24

17

Диапазон формата регистра при одинарной точности

.d

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

1

53

17

Диапазон формата регистра при двойной точности

нет

00

0

24

15

Стек IA-32 для одинарных

нет

01

0

нет

10

0

53

15

Стек IA-32 для двойных

нет

11

0

64

15

Стек IA-32 для расширенных

нет

00

1

24

17

Диапазон формата регистра при одинарной точности

нет

01

1

нет

10

1

53

17

Диапазон формата регистра при двойной точности

нет

11

1

64

17

Диапазон формата регистра при двойной расширенной точности

не приме­няетсяa

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

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

24

8

Пара одинарных вещественных IEEE

не приме­няетсяb

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

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

64

17

Диапазон формата регистра при двойной расширенной точности

a. Для параллельных FP инструкций, которые не имеют окончаний управляющих точностью (например, fpma).

b. Для не параллельных FP инструкций, которые не имеют окончаний управляющих точностью (например, frcpa).

Установка управляющего бита (sfx.td), позволяет легко запретить локальные ловушки исключения IEEE в среде выполнения. Если бит FPSR.sfx.td сброшен (есть разрешение), то используются биты FPSR.traps. Если бит FPSR.sfx.td установлен, то биты FPSR.traps обрабатываются так, как будто они все установлены (нет разрешения). Заметим, что поле FPSR.sf0.td является зарезервированным и при чтении всегда возвращает ноль.