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

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

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

Как показано на рис.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-32 MXCSR (управление)

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

IA-32 FTW{15:0}

IA-32 FSW{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-32 MXCSR (состояние)

Рис.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 устанавливают все цифровые теги в единицу (что означает – регистр пуст).

6.2.5.4. IA-32 среда с плавающей точкой

Для поддержки модели отложенного числового исключения Intel 8087, регистры FSR, FDR и FIR содержат отложенную информация связанную с числовым исключением. Регистр FDR содержит эффективный адрес и селектор сегмента операнда. Регистр FIR содержит эффективный адрес, селектор кодового сегмента и биты кода операции числовой инструкции. Регистр FSR указывает на тип числового исключения совокупностью битов IE, DE, ZE, OE, UE, PE, SF и ES. Бит ES итожит IA-32 состояние исключения с плавающей точкой, следующим образом:

  • Если FSR.es читается кодом типа Itanium, то возвращаемое значение является итогом любых немаскируемых отложенных исключений содержащихся в битах IE, DE, ZE, OE, UE и PE регистра FSR.

Примечание. Чтение бита ES не обязательно возвращает последнее записанное значение, если бит ES противоречит другим битам отложенных исключений в FSR.

  • Если FSR.es установлен в 1 кодом типа Itanium, то задержанные числовые IA-32 исключения генерируются на следующей IA-32 инструкции с плавающей точкой, независимо от информации числового исключения, записанной в FSR битах IE, DE, ZE, OE, UE и PE.

  • Если FSR.es записан в противоречии с FSR битами (IE, DE, ZE, OE, UE и PE), то последующие числовые исключения могут сообщить противоречивые биты состояний с плавающей точкой.

Когда программа типа Itanium загружает эти прикладные регистры (AR29, AR30), тогда, если не нулевое значение будет записано в битах, перечисленных как резервированные, то будет вызвана ошибка «Зарезервированный регистр/поле». При записи этих регистров никакие значения кодов полей не проверяются. Регистры FSR, FDR и FIR должны быть сохранены, не смотря на переключение контекста, чтобы генерировать и точно сообщать числовые исключения.

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

Смещение операнда (fea)

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)

Селектор операнда (fds)

Рис. 6.10. Регистр данных с плавающей точкой (FDR)

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

Смещение кода (fip)

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

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

Код операции {10:0} (fop)

Селектор кода (fcs)

Рис. 6.11. Регистр инструкций с плавающей точкой (FIR)

6.2.6. IA-32 регистры ММХ технологии

Восемь IA-32 регистров ММХ технологии отображаются в восьми Itanium регистрах с плавающей точкой FR8-FR15, причем ММ0 отображается в FR8, а ММ7 отображается в FR15. Отображение регистра ММХ технологии для представления IA-32 стека с плавающей точкой, зависит от значения указателя вершины IA-32 стека с плавающей точкой

81

80

64

63

0

1

единицы

ММ0…ММ7{31:0}

FR8-FR15

Рис. 6.12. IA-32 регистры ММХ технологии (от ММ0 до ММ7)

  • Когда значение, записанное в регистр ММХ технологии, используется IA-32 инструкцией ММХ технологии:

    • В поле порядка соответствующего регистра с плавающей точкой (биты 80-64) и в знаковом бите (бит 81), все биты устанавливаются в единицы.

    • Мантисса (биты 63-0) устанавливается в значение данных технологии ММХ.

  • Когда из регистра ММХ технологии считывается значение с помощью IA-32 инструкции ММХ технологии:

    • Поле порядка соответствующего регистра с плавающей точкой (биты 80-64) и знаковый бит (бит 81) игнорируются, включая любые коды NaTVal.

В результате этого отображения мантисса значения с плавающей точкой, записанного либо IA-32, либо Itanium инструкциями, проявится в IA-32 регистре ММХ технологии. Также, IA-32 регистр технологии ММХ проявится в поле мантиссы одного из восьми отображаемых регистров с плавающей точкой.

Чтобы избежать деградации эффективности, программистам настоятельно советуется не смешивать IA-32 инструкции с плавающей точкой и ММХ технологии. Детальнее рекомендации по программированию ММХ технологии см. в Intel Architecture Software Developer's Manual.

6.2.7. IA-32 регистры SSE

Восемь 128-битных регистров SSE (ХММ0-7) отображаются в шестнадцати физических регистрах Itanium с плавающей точкой FR16-FR31, попарно. Младшие 64 бита ХХМ0 отображаются на FR16{63:0}, а старшие 64 бита ХХМ0 отображаются на FR17{63:0}.

81

80

64

63

0

0

0x1003E

XММ0-7{127:64}

FR17-FR31, нечетные

81

80

64

63

0

0

0x1003E

XММ0-7{63:0}

FR17-FR31, четные

Рис. 6.13. SSE регистры (XMМ0 до XММ7)

  • Когда значение записывается в SSE регистр с помощью IA-32 инструкций SSE:

    • Поле порядка соответствующего регистрах Itanium с плавающей точкой (биты 80-64) устанавливается в 0x1003E, а бит знака устанавливается в 0.

    • Мантисса (биты 63-0) устанавливается в значение ХММ данных, в биты {63:0} для четных регистров и в биты {127:64} для нечетных регистров.

  • Когда SSE регистр читается с помощью IA-32 инструкций SSE:

    • Поле порядка соответствующего Itanium регистра с плавающей точкой (биты 80-64) и знаковый бит (бит 81) игнорируются, включая любые коды NaTVal.