- •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.8.4. Указатель вспомогательной памяти для сохранений памяти (bspstore – ar18)
Backing Store Pointer for Memory Stores. Является 64 битным регистром (рис.3.5). Он содержит адрес места в памяти, куда RSE будет сливать следующее значение. См. раздел 6.1. «Обзор RSE и внешней памяти» во втором томе.
63 |
3 |
2 |
0 |
Указатель |
ignore |
||
61 |
3 |
||
Рис.3.5. Формат регистра BSPSTORE.
3.1.8.5. Сборный регистр NaT для rse (rnat – ar19)
RSE NaT Collection Register. Является 64 битным регистром (рис.3.6), который используется RSE для временного хранения NaT битов, когда он освобождает основные регистры. Бит 63 всегда читается как 0 и игнорируется при записи. См. раздел 6.1. «Обзор RSE и внешней памяти» во втором томе.
63 |
0 |
ign |
RSE NaT Collection |
1 |
63 |
Рис.3.6. Формат регистра RNAT
3.1.8.6. Регистр значения сравнения и обмена (CCV – AR32)
Compare and Exchange Value Register. Является 64 битным регистром, содержащим значение сравнения, которое используется как третий исходный операнд в Itanium инструкции cmpxchg.
3.1.8.7. Сборный регистр NaT пользователя (UNAT – AR36)
User NaT Collection Register. Является 64 битным регистром, используемым для временного хранения NaT битов при сохранении и восстановлении основных регистров с помощью инструкций ld8.fill и st8.spill.
3.1.8.8. Регистр состояния с плавающей точкой (FPSR – AR40)
Floating-point Status Register. Этот регистр управляет ловушками, режимами округления, точностью, флагами и другими управляющими битами для инструкций Itanium с плавающей точкой. Регистр FPSR не управляет и не отражает состояние инструкций IA-32 с плавающей точкой. Детальнее см. раздел «Регистр состояния с плавающей точкой».
3.1.8.9. Счетчик интервала времени (ITC –AR44)
Interval Time Counter. Это 64-битный регистр, который подсчитывает количество «тиков» частоты процессора. Приложения могут прямо считывать ITC для вычислений связанных со временем и для измерения производительности. Системные программы могут закрыть не привилегированный доступ к подсчету интервала времени. В случае такого закрытия, чтение ITC с уровнем привилегий ниже, чем был у закрывшей программы, вызовет ошибку «Привилегированный регистр». Регистр ITC может быть изменен только при большем уровне привилегий. Имеющийся в IA-32 регистр TSC (Time Stamp Counter), является эквивалентом ITC. Регистр ITC может быть прямо прочитан с помощью IA-32 инструкции rdtsc (read time stamp counter). Системные программы могут закрыть ITC для непривилегированного IA-32 доступа. В этом случае, IA-32 чтение ITC с уровнем привилегий ниже, чем был у закрывшей программы, вызовет IA-32 ошибку GP (General Protection).
3.1.8.10. Предыдущее функциональное состояние (pfs – ar64)
Previous Function State. Регистр PFS содержит несколько полей: маркер предыдущего окна (previous frame marker – pfm), счетчик предыдущего эпилога (previous epilog count – pec), предыдущий уровень привилегий (previous privilege level – ppl). На рис. 3.7 представлен формат PFS, а в табл.3.5 описаны поля PFS. Для ускорения процедурного вызова, при вызове, эти значения копируются автоматически из регистра CFM, из регистра EC, а также из поля PSR.cpl (Current Privilege Level in the Processor Status Register).
Если выполняются br.call или brl.call, то CFM, EC и PSR.cpl копируются в PFS, а старое содержимое PFS пропадает. Если выполняется br.ret, то PFS копируется в CFM и EC. Значение PFS.ppl копируется в PSR.cpl только в том случае, если при этом увеличится уровень привилегий. Подробнее о PSR можно посмотреть в главе 3 «Состояние системы и модель программирования» во втором томе.
Поле PFS.pfm имеет точно такую же структуру, как у CFM (см. раздел 3.1.7), а поле PFS.pec имеет точно такую же структуру, как у EC (см. раздел 3.1.8.12).
63 |
62 |
61 |
58 |
57 |
52 |
51 |
38 |
37 |
0 |
ppl |
reserved |
pec |
reserved |
pfm |
|||||
2 |
4 |
6 |
14 |
38 |
|||||
Рис.3.7. Формат регистра PFS
Таблица 3.5. Описание полей регистра PFS
Поле |
Биты |
Описание |
pfm |
37:0 |
Маркер предыдущего окна (previous frame marker) |
|
51:38 |
Резервировано |
pec |
57:52 |
Счетчик предыдущего эпилога (previous epilog count) |
|
61:58 |
Резервировано |
ppl |
63:62 |
Предыдущий уровень привилегий (previous privilege level) |
