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

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.

6.3. Обзор моделей памяти

Виртуальные адреса в наборах инструкций Itanium или IA-32 определены для адресации одних и тех же мест памяти. Инструкции Itanium прямо генерируют 64-битные виртуальные адреса. ИнструкцииIA-32 генерируют 16-ти или 32-битные эффективные адреса, которые затем преобразуются в 32-битные виртуальные адреса, с помощьюIA-32 сегментации. Далее, 32-битные виртуальные адреса преобразуются в 64-битные виртуальные адреса, путем расширения нулями до 64 бит. Расширение нулями размещает всеIA-32 обращения к памяти в младших 4G-байтах 64 битного виртуального адресного пространства, в пределах виртуального региона 0. Виртуальные адреса сгенерированные любым набором инструкций переводятся затем в физические адреса, используя механизмы управления памятью описанные в главе 4 «Адресация и защита» во втором томе.

16/32-битный эффективный адрес

32-битный виртуальный адрес

64-битный виртуальный адрес

База

Сегментация

Расширение нулями

IA-32

Индекс

+

Смещение

Архитектура

База

Intel Itanium

Рис. 6.14. Модель адресации памяти

6.3.1. Упорядочивание памяти

Целочисленные типы данных памяти и типы данных с плавающей точкой (IEEE) являются двоично-совместимыми между наборами инструкцийIA-32 и Itanium. Приложения и операционные системы типа Itanium, которые взаимодействуют с кодомIA-32, должны использовать обращения упорядоченные «по убыванию», чтобы гарантировать, что форматы данных будут теми же самыми. ВсеIA-32 данные инструкций и обращения к памяти инструкций принудительно являются упорядоченными «по убыванию».

6.3.2. Сегментация ia-32

Сегментация не используется для обращений к памяти набора инструкций Itanium. Сегментация, выполняемая при обращении к памяти набора инструкций IA-32, основывается на состоянииEFLAG.vmиCFLG.pe. Правила сегментации реального, защищенного иVM86 режимов, следуют спецификациям, заданным вIntel Architecture Software Developer's Manual:

  • Эффективный адрес 16/32-битных данных IA-32: 16- или 32-битные эффективные адреса генерируются на основании битовCSD.d,SSD.bи переопределений префиксов, с помощью сложения базового регистра, масштабированного индексного регистра и 16/32-битного значения смещения. Начало эффективного адреса (первый байт многобайтного операнда) превышающего 16 или 32 бита, усекается до 16 или 32 битов. Окончание (последний байт многобайтного операнда) 16-битного эффективного адреса может простираться за 64К-байтную границу, однако окончание 32-битного эффективного адреса усекается до 32 бит и не может простираться за 4G-байтную границу эффективного адреса. Полная детализация условий свертки дается вIntel Architecture Software Developer's Manual.

  • Эффективный адрес 16/32-битного кода IA-32: 16- или 32-битныйEIPосновывающийся наCSD.d, используется как эффективный адрес. Начальное значениеEIP(первый байт многобайтной инструкции) превышающего 16 или 32 бита, усекается до 16 или 32 битов. Окончание (последний байт многобайтной инструкции) 16-битного эффективного адреса может простираться за 64К-байтную границу, однако окончание 32-битного значенияEIPусекается до 32 бит и не может простираться за 4G-байтную границу эффективного адреса.

  • Генерация 32-битного виртуального адреса IA-32: Результирующий 16- или 32-битный эффективный адрес отображается в 32-битное виртуальное адресное пространство, путем прибавления базы сегмента. Полные проверки границы и защиты сегмента проводятся так, как это задано вIntel Architecture Software Developer's Manual, а дополнительные проверки так, как задано в этом разделе.

  • Генерация 64-битного адреса IA-32: Результирующий 32-битный виртуальный адрес преобразуется в 64-битный виртуальный адрес путем расширения нулями до 64 бит, при этом все обращения к памяти набора инструкцийIA-32 оказываются в первых 4Gбайтах 64-битного виртуального адресного пространства, внутри виртуального региона 0.

Если код IA-32 использует плоскую сегментированную модель (начала всех сегментов установлены в 0), то коды типа Itanium или типаIA-32 могут свободно обмениваться указателями, после того как указатель будет расширен нулями до 64 бит. Для сегментированного кодаIA-32, указатели эффективного адреса должны быть прежде преобразованы в виртуальный адрес до того, как они будут совместно использоваться кодом типа Itanium.