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

6.2.5.3. Регистры управления с плавающей точкой ia-32.

Регистр FPSRуправляет Itanium инструкциями с плавающей точкой, с помощью битов состояния и управления. РегистрFPSRне управляетIA-32 инструкциями с плавающей точкой и не отражает состояниеIA-32 инструкций с плавающей точкой. ИнструкцииIA-32 с плавающей точкой иSSEимеют отдельные регистры управления и состояния, называемыеFCR(floatingpointcontrolregister– регистр управления с плавающей точкой) иFSR(floatingpointstatusregister– регистр состояния с плавающей точкой).

Как показано на рис.6.8., FCRсодержитIA-32 битыFCWи все биты управленияSSE.

Как показано на рис.6.9., FSRсодержитIA-32 флаги состояния с плавающей точкойFSW,FTWи поля состоянияSSE. Поля тегов показывают – являются ли соответствующие логическиеIA-32 регистры с плавающей точкой пустыми. Не поддерживаются коды тегов для нуля и специальных условий, таких какNaN, бесконечность или денормализованность каждого логическогоIA-32 регистра с плавающей точкой. Однако, набор инструкцийIA-32 читаяFTW, вычисляет дополнительные специальные условия для каждогоIA-32 регистра с плавающей точкой. Код типа Itanium может использовать операцию классификации с плавающей точкой для того, чтобы определить диспозицию каждогоIA-32 регистра с плавающей точкой.

Вместе, FCRиFSRсодержат всюIA-32 информацию о тегах, состоянии и управлении с плавающей точкой. ИнструкцииIA-32, которые изменяются и управляютсяMXSCR,FCW,FSWиFTAG, на самом деле изменяютFSRи управляютсяFCR. ПриIA-32 чтении или записи регистровMXSCR,FCW,FSWиFTW, возвращается та же самая информация, как при чтении или записиFSRиFCRс помощью Itanium инструкций.

Перед входом в набор инструкций IA-32, программа должна гарантировать, чтоFCRиFSRзагружены должным образом для числового выполнения. Когда программа типа Itanium загружает эти прикладные регистры (AR21 иAR28), тогда, если в зарезервированном бите окажется не нулевое значение, то будет вызвана ошибка «Зарезервированный регистр/поле». При записи в эти регистры, никакие значения кодов полей не проверяются.

IA-32 FCW{12:0}

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

Резервировано (установлено в 0)

IC

R

C

P

C

0

1

PM

UM

OM

ZM

DM

IM

63

62

61

60

59

58

57

56

55

54

53

52

51

50

49

48

47

46

45

44

43

42

41

40

39

38

37

36

35

34

33

32

Резервировано (установлено в 0)

FZ

R

C

PM

UM

OM

ZM

DM

IM

rv

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

IA-32MXCSR(управление)

Рис.6.8. IA-32 регистр управления с плавающей точкой (FCR).

IA-32FTW{15:0}

IA-32FSW{15:0}

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

0

tg7

0

tg6

0

tg5

0

tg4

0

tg3

0

tg2

0

tg1

0

tg0

B

C3

TOP

C2

C1

C0

ES

SF

PE

UE

OE

ZE

DE

IE

63

62

61

60

59

58

57

56

55

54

53

52

51

50

49

48

47

46

45

44

43

42

41

40

39

38

37

36

35

34

33

32

Резервировано (установлено в 0)

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

rv

PE

UE

OE

ZE

DE

IE

IA-32MXCSR(состояние)

Рис.6.9. IA-32 регистр состояния с плавающей точкой (FSR).

Табл. 6.7. Размещение IA-32 регистров состояния с плавающей точкой (FSR)

Управляющее поле IA-32

Управляющее поле Itanium

Биты

Использование IA-32

Использование в Itanium

FSW.ie

FSR.ie

0

Исключение: неверная операция

Эти биты не отражают состояние выполнения с плавающей точкой Itanium.

Подробности о цифровых флагах IA-32 см. в Intel Architecture Software Developer's Manual

FSW.de

FSR.de

1

Исключение: операнд денормализован

FSW.ze

FSR.ze

2

Исключение: деление на ноль

FSW.oe

FSR.oe

3

Исключение: переполнение

FSW.ue

FSR.ue

4

Исключение: антипереполнение

FSW.pe

FSR.pe

5

Исключение по точности

FSW.sf

FSR.sf

6

Ошибка стека

FSW.es

FSR.esA

7

Ошибка Summury

FSW.c3:0

FSR.c3:0

8:10, 14

Коды числовых условий

FSW.top

FSR.top

11:13

Верхушка числового стека

FSW.b

FSR.b

15

FTW

FSR.tg {7:0}B

16,18,20,22, 24,26,28,30

Теги чисел: 0 – не пуст,

1 – пуст C

Нули

17, 19, 21, 23, 25, 27, 29,31,39:47

Игнорируются – Запись игнорируется, чтение возвращает 0

MXCSR.ie

FSR.ie

32

Исключение: неверная операция при SSE

Не отражают состояние выполнения с плавающей точкой Itanium.

Подробности см. в Intel Architecture Software Developer's Manual

MXCSR.de

FSR.de

33

Исключение: операнд SSEденормализован

MXCSR.ze

FSR.ze

34

Исключение: деление на ноль при SSE

MXCSR.oe

FSR.oe

35

Исключение: переполнение при SSE

MXCSR.ue

FSR.ue

36

Исключение: антипереполнение при SSE

MXCSR.pe

FSR.pe

37

Исключение по точности при SSE

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

38, 48:63

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

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

39:47

Игнорируются – Запись игнорируется, чтение возвращает 0

  1. Детальнее о бите исключения Summuryсм. в разделе 6.2.5.4

  2. Коды тегов показывающие содержится ли в числовом регистре 0, NaN, бесконечность или денормализованное значение, не поддерживаются при чтенииFSRинструкциями типа Itanium. Набор инструкцийIA-32, читая полеFTW, классифицирует возвращаемое значение как ноль,NaN, бесконечность или денормализованное.

  3. Все инструкции технологии ММХ, устанавливают все цифровые теги в ноль (что означает – регистр не пуст). Однако, ММХ инструкция EMMSустанавливают все цифровые теги в единицу (что означает – регистр пуст).