- •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.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(CurrentPrivilegeLevelintheProcessorStatusRegister).
Если выполняются 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) |
3.1.8.11. Регистр счетчика цикла (lc–ar65)
Loop Counter Register. LC– это 64-битный регистр используемый в счетных циклах. ЗначениеLCуменьшается при переходах типа счетный цикл.
3.1.8.12. Регистр счетчика эпилога (ec–ar66)
Epilog Counter Register. EC– это 6-битный регистр используемый для подсчета финальных стадий (эпилогов) в модульно- планируемых циклах. См. раздел 4.5.1 «Поддержка модульно планируемых циклов». На рис.3.8. показана схема регистраEC.
|
63 |
6 |
5 |
0 |
|
ignore |
Счетчик эпилогов | ||
|
58 |
6 | ||
Рис.3.5. Формат регистра счетчика эпилогов.
3.1.9. Регистры данных мониторинга производительности (pmd)
Performance Monitor Data Registers. Набор регистров данных мониторинга производительности может быть конфигурирован привилегированной программой так, чтобы стать доступным на всех уровнях привилегий. Данные мониторинга производительности могут быть получены прямо внутри приложения. Операционной системе разрешается защитить созданную пользователем конфигурацию мониторинга производительности. При чтении, защищенные счетчики производительности возвращают ноль, несмотря на текущий уровень привилегий. Мониторы производительности могут быть записаны только при большем уровне привилегий. Детальнее см. часть 7 «Отладка и мониторинг производительности» во втором томе. Мониторы производительности могут использоваться для сбора информации о производительности при выполнении любого набора инструкций иItanium, иIA-32.
3.1.10 Маска пользователя (um)
User Mask. Маска пользователя – это доступное для всех прикладных программ подмножество регистра состояния процессора (ProcessorStatusRegister). Маска пользователя управляет выравниванием доступной памяти, байтовым упорядочиванием и пользовательской конфигурацией мониторов производительности. Здесь также записывается модификация состояний регистров с плавающей точкой. На рис. 3.9 показан формат маски пользователя, а в табл. 3.6 описаны поля маски пользователя. Детальнее оPSRможно посмотреть в разделе 3.3.2 «Регистр Состояния Процессора (PSR)» во втором томе.
|
5 |
4 |
3 |
2 |
1 |
0 |
|
mfh |
mfl |
ac |
up |
be |
reserv |
|
1 |
1 |
1 |
1 |
1 |
1 |
Рис.3.9. Формат маски пользователя
Табл.3.6. Описание полей маски пользователя.
|
Поле |
Бит |
Описание |
|
reserv |
0 |
Резервировано |
|
be |
1 |
Возможность доступа к памяти по возрастанию (управляет загрузкой и восстановлением, но не доступом RSE памяти) 0: обращения делается по убыванию 1: обращения делается по возрастанию Этот бит игнорируется при доступе к памяти данных типа IA-32. Ссылки данных IA-32 всегда выполняются по убыванию. |
|
up |
2 |
Доступ пользователя к мониторингу производительности (включая IA-32) 0: мониторинг производительности не доступен пользователю 1: мониторинг производительности доступен пользователю |
|
ac |
3 |
Проверка выравнивания для обращений к памяти данных (включая IA-32) 0: не выравненность обращений к памяти данных может вызвать ошибку «Ссылка на не выровненные данные» 1: все, не выровненные обращения к данным памяти, вызывают ошибку «Ссылка на не выровненные данные» |
|
mfl |
4 |
Запись младших (f2…f31) регистров с плавающей точкой. Этот бит устанавливается в 1, если завершена Itanium инструкция, которая использует регистр f2…f31 в качестве приемника. Этот бит замещается и просто очищается при явной записи маски пользователя. Об условиях, при которых этот бит устанавливается инструкциями IA-32, см. раздел 3.3.2 второго тома. |
|
mfh |
5 |
Запись старших (f32…f127) регистров с плавающей точкой. Этот бит устанавливается в 1, если Itanium инструкция, которая использует регистр f32…f127 в качестве приемника, завершена. Этот бит замещается и просто очищается при явной записи маски пользователя. Об условиях, при которых этот бит устанавливается инструкциями IA-32, см. раздел 3.3.2 второго тома. |
