
- •3. Исполнительная среда.
- •3.1. Состав прикладных регистров
- •3.1.1 Резервируемые и игнорируемые регистры и поля
- •3.1.2. Основные регистры.
- •3.1.3. Регистры с плавающей точкой
- •3.1.4. Предикатные регистры
- •3.1.5. Регистры переходов
- •3.1.6. Указатель инструкций.
- •3.1.7. Маркер текущего окна
- •3.1.8. Прикладные регистры
- •3.1.8.1. Регистры ядра (kr0-7 –ar0-7)
- •3.1.8.2. Регистр конфигурации стека регистров (rsc–ar16)
- •3.1.8.3. Указатель вспомогательной памяти rse(bsp–ar17)
- •3.1.8.10. Предыдущее функциональное состояние (pfs–ar64)
- •3.1.8.11. Регистр счетчика цикла (lc–ar65)
- •3.1.8.12. Регистр счетчика эпилога (ec–ar66)
- •3.1.9. Регистры данных мониторинга производительности (pmd)
- •3.1.10 Маска пользователя (um)
- •3.1.11. Регистры идентификации процессора
- •3.2. Память
- •3.2.1. Модель адресации прикладной памяти
- •3.2.2. Адресация блоков и выравнивание
- •3.2.3. Упорядочивание байтов
- •3.3. Обзор кодирования инструкций
- •3.4. Рассмотрение последовательности инструкций
- •3.4.1. Специальные случаи зависимости raw
- •3.4.2. Специальные случаи зависимости waw
- •3.4.3. Специальные случаи зависимости war
- •3.4.4. Поведение процессора при нарушениях зависимости
- •3.5. Неопределенное поведение
3.2. Память
В этом разделе описывается, как прикладные Itaniumпрограммы просматривают память. Это включает в себя то, как обращаются к памяти и 32-битные, и 64-битные приложения. Вместе с размером и выравниванием адресуемых блоков памяти дается также описание, как байты упорядочены в пакете.
Система просмотра памяти и управление виртуальной памятью даны в части 4 «Адресация и защита» второго тома. Инструкции IA-32 устанавливающие просмотр памяти и управление виртуальной памятью даны в разделе 10.6 во втором томе.
3.2.1. Модель адресации прикладной памяти
Память адресуется байтами и доступна через 64-битовые указатели. Модель 32-битного указателя без аппаратного режима поддерживается архитектурно. Указатель, который имеет 32 бита, загружается и помещается в 64-битный регистр. Перед использованием, программа должна явно преобразовать 32-битовый указатель в 64-битовый. Детальнее о 32-битовой адресации см. раздел 4.1.9 «32-битовая виртуальная адресация» во втором томе.
3.2.2. Адресация блоков и выравнивание
Память может быть доступна в виде блоков в 1, 2, 4, 8, 10 16 байтов.
Рекомендуется, чтобы все адресуемые блоки выравнивались по своим естественным границам. Аппаратура и/или программное обеспечение операционной системы могут поддерживать и не выровненные блоки, но при этом возможна некоторая потеря производительности. Значения 10-байтных чисел с плавающей точкой должны запоминаться с выравниванием по 16-байтным границам.
Биты в больших блоках всегда нумеруются от 0 и начиная с младших значащих битов. Процесс загрузки из памяти в основные регистры проходит так, что заполняются сначала младшие значащие части регистров (загружаемые значения помещаются в целевой основной регистр прижатыми вправо).
Связки инструкций (по 3 инструкции в связке) являются 16-байтовыми блоками, которые всегда выровнены по 16-байтовым границам.
3.2.3. Упорядочивание байтов
Бит UM.beв маске пользователя управляет тем, в каком порядке байтыItaniumкода будут загружаться и сохраняться – по возрастанию (big-endian) или по убыванию (little-endian). Если битUM.beравен 0, то загрузка и сохранение нескольких байтов выполняется по убыванию (байты с младшими адресами памяти соответствуют младшим байтам регистра). Если битUM.beравен 1, то загрузка и сохранение нескольких байтов выполняется по возрастанию (байты с младшими адресами памяти соответствуют более старшим байтам регистра). Загрузка и сохранение только одного байта не связана с битомUM.be. БитUM.beне связан с выборкой инструкций, обращениямиIA-32 или сRSE. Инструкции всегда доступны процессору в виде элементов выстроенных по убыванию. Когда к инструкциям обращаются как к данным, выстроенным по возрастанию, инструкции будут казаться зарезервированными в регистре.
На рис. 3.13 показана загрузка переменных в формате по убыванию. На рис. 3.14 показана загрузка переменных в формате по возрастанию. Восстановление не показано, но проводится аналогично.
-
память
адрес
7
0
0
A
1
B
2
C
3
D
4
E
5
F
6
G
7
H
Регистры
63
0
LD1[1] =>
0
0
0
0
0
0
0
B
63
0
LD2[2] =>
0
0
0
0
0
0
D
C
63
0
LD4[4] =>
0
0
0
0
H
G
F
E
63
0
LD8[0] =>
H
G
F
E
D
C
B
A
Рис.3.13. Выполнение загрузок по убыванию.
-
память
адрес
7
0
0
A
1
B
2
C
3
D
4
E
5
F
6
G
7
H
Регистры
63
0
LD1[1] =>
0
0
0
0
0
0
0
B
63
0
LD2[2] =>
0
0
0
0
0
0
C
D
63
0
LD4[4] =>
0
0
0
0
E
F
G
H
63
0
LD8[0] =>
A
B
C
D
E
F
G
H
Рис.3.14. Выполнение загрузок по возрастанию.