Скачиваний:
57
Добавлен:
16.04.2013
Размер:
349.18 Кб
Скачать

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является зарезервированным и при чтении всегда возвращает ноль.