- •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.4. Указатель вспомогательной памяти для сохранений памяти (bspstore – ar18)
- •3.1.8.5. Сборный регистр NaT для rse (rnat – ar19)
- •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.1.2. Основные регистры.
Набор из 128 (64-битных) регистров обеспечивает главный ресурс для всех целочисленных и мультимедиа- целочисленных вычислений. Они пронумерованы от GR0 до GR127 и доступны для всех программ на всех уровнях привилегий. Каждый основной регистр имеет 64 бита для хранения нормальных данных плюс дополнительный бит NaT (Not a Thing), который используется для отслеживания отложенных спекулятивных исключений.
Основные регистры разделены на два подмножества. Регистры от 0 до 31 называются статическими основными регистрами. Причем, GR0 сделан так, что если он является исходным операндом, то всегда читается как ноль, а попытка записи в GR0 вызовет ошибку «Запрещенная операция». Основные регистры с 32 по 127 называются стековыми основными регистрами. Стековые регистры делаются доступными для программ при выделении окна регистрового стека содержащего программируемое количество локальных и выходных регистров. Это описано в разделе 4.1 «Стек регистров». Части регистрового стека могут быть программно переименованы для ускорения циклов. См. раздел 4.5.1 «Поддержка модульно планируемых циклов».
Основные регистры от 8 до 32 содержат регистры IA-32 – целочисленные, селекторы и дескрипторы сегментов. Подробнее см. раздел 6.2.1 «Размещение общих регистров IA-32».
3.1.3. Регистры с плавающей точкой
Набор из 128 (82-битных) регистров с плавающей точкой используется для всех вычислений с плавающей точкой. Они пронумерованы от FR0 до FR127 и доступны для всех программ на всех уровнях привилегий. Регистры с плавающей точкой разделены на два подмножества. Регистры от 0 до 31 называются статические регистры с плавающей точкой. Причем, FR0 и FR1 являются специальными. При использовании в качестве исходного операнда, FR0 всегда читается как +0.0, а FR1 всегда читается как +1.0. Если любой из них использовать в качестве приемника, то вызывается ошибка. Отложенные спекулятивные исключения записываются в виде специального регистрового значения, которое называется NaTVal (Not a Thing Value).
Регистры с плавающей точкой от 32 до 127 называются ротируемыми регистрами с плавающей точкой. Эти регистры могут быть программно переименованы для ускорения циклов. См. раздел 4.5.1 «Поддержка модульно планируемых циклов».
Регистры с плавающей точкой от 8 до 32 содержат регистры IA-32 – с плавающей точкой и мультимедиа. Подробнее см. раздел 6.2.5 «Регистры с плавающей точкой IA-32».
3.1.4. Предикатные регистры
Набор из 64 (1-битных) предикатных регистров используется для хранения результатов инструкций сравнения. Эти регистры пронумерованы от PR0 до PR63 и доступны для всех программ на всех уровнях привилегий. Эти регистры используются для условного выполнения инструкций.
Предикатные регистры разделены на два подмножества. Предикатные регистры от 0 до 15 называются статические предикатные регистры. Причем, при использовании в качестве исходного операнда PR0 всегда читается как 1, а при использовании в качестве приемника результат игнорируется. Статические предикатные регистры также используются в условном ветвлении. См. раздел 4.3.1 «Предикация».
Предикатные регистры с 16 по 63 называются ротируемые предикатные регистры. Эти регистры могут быть программно переименованы для ускорения циклов. См. раздел 6.2.5 «Поддержка модульно планируемых циклов».
