
- •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.4.2. Специальные случаи зависимости waw
Есть три разрешенных специальных случая зависимости WAWпо регистрам в пределах группы инструкций. Это такие специальные случаи: инструкции типа сравнения, инструкции с плавающей точкой и инструкцияst8.spill.
Набор инструкций типа сравнения включает: cmp, cmp4, tbit, tnat, fcmp, frsqrta, frcpaи fclass. Инструкции типа сравнения в одной группе инструкций, могут иметь адресатом один и тот же предикатный регистр:
Инструкциями типа сравнения являются и все сравнения типа И, и все сравнения типа ИЛИ (сравнения типа И связаны с окончаниями .and и .andcm; сравнения типа ИЛИ связаны с окончаниями .or и .orcm), либо это
Все инструкции типа сравнения указывают на PR0. Все зависимости типа WAW разрешены для PR0; сравнения могут быть некоторого типа, и могут быть различных типов.
Все другие зависимости типа WAWв группах инструкций запрещены, включая регистровыеWAWзависимости с инструкциями переноса вPR, которые обращаются к тем же самым предикатным регистрам, что и другие записыватели.
Примечание. Инструкции переноса вPRзаписывают только теPR, которые указаны в их (инструкций) маске, но инструкциями переноса изPRвсегда читают все регистры.
Инструкции с плавающей точкой неявно записывают регистр состояния с плавающей точкой (FPSR) и регистр состояния процессора (PSR). В той же самой группе инструкций могут появляться несколько инструкций с плавающей точкой, поскольку ограничение на регистровую зависимость типаWAWв отношенииFPSRиPSRне применяется. После выполнения группы инструкций, состояниемFPSRиPSRбудет являться логическое ИЛИ от всех записей.
Инструкция st8.spill неявно записывает регистрUNAT. Для этой инструкции ограничение на регистровую зависимость типаWAWотносительноUNAT, применяется на уровне битов. В той же самой группе инструкций могут появляться несколько инструкцийst8.spillесли они не записывают один и тот же битUNAT. Регистровые зависимости типаWAWмежду инструкциямиst8.spillи инструкцийmov ar=нацеленные наUNATне должны встречаться в пределах одной и той же группы инструкций.
3.4.3. Специальные случаи зависимости war
Зависимость типа WARмежду чтением 63-х предикатных регистров с помощью любой инструкции типаBи частичной записью 63-х предикатных регистров с помощью перехода типа модульно планируемого цикла (br.ctop, br.cexit, br.wtop, br.wexit) без вмешательства остановок, является запрещенной. Иные зависимости типаWAR, разрешены в группе инструкций.
3.4.4. Поведение процессора при нарушениях зависимости
Если программа нарушает правила ресурсных зависимостей типа RAW,WAWилиWARвнутри группы инструкций, то поведение процессора не предсказуемо. Ограничивающие условия неопределенного поведения описаны в разделе 3.5 «Неопределенное поведение».
Для помощи в отладке кода, который нарушает правила зависимости архитектурных ресурсов, некоторыми процессорами обеспечиваются аппаратные средства обнаружения нарушений зависимости при выполнении. Это может явиться причиной того, что группа инструкций, которая содержит нелегальную зависимость, вызовет ошибку «Нелегальная зависимость» (описанную в главе 5 «Прерывания» во втором томе). Однако, даже в реализациях, которые обеспечивают такую проверку, программное обеспечение не может надеяться, что процессор перехватит все нарушения зависимости или даже перехватит то же самое нарушение каждый раз, когда оно будет происходить.
Однако все модели процессора, которые обеспечивают аппаратные средства обнаружения нарушения зависимости, требуются для удовлетворения следующих сообщенных ограничений нарушения зависимости:
Все обнаруженные нарушения зависимости должны быть сообщены как ошибки типа «Нелегальная зависимость» (описанные в главе 5 «Прерывания» во втором томе). Когда вызвана ошибка «Нелегальная зависимость», значение субъекта для нарушения зависимости – не определено. Необнаруженные нарушения зависимости являются причиной неопределенного поведения программы, как это описано в разделе 3.5 «Неопределенное поведение».
Все обнаруженные нарушения зависимости типа RAW и WAW должны быть переданы как ошибки типа «Нелегальная зависимость» на вторую операцию, т.е. в случае RAW – на чтение, а в случае WAW – на запись второго ресурса.
Все обнаруженные нарушения зависимости типа WAR (в 63-х предикатных регистрах) должны быть переданы как ошибки типа «Нелегальная зависимость» на вторую операцию – запись предиката.
Ошибки типа «Нелегальная зависимость» передаются строго в программном порядке. Если прерывание, переход или спекулятивная проверка сделаны между первой и второй операциями нарушения зависимости, то ошибка типа «Нелегальная зависимость» не делается.
Примечание. Если группа инструкций начинается в заданной точке входа (на стопе или на адресате переключения потока управления), то инструкции предшествующие точке входа не рассматриваются как часть группы инструкций и не должны принимать участие в проверке нарушения любой зависимости. Например, еслиrfiсделана на слот 1 связки, то инструкция в слоте 0 и инструкции с меньшими адресами памяти не являются частью новой группы инструкций и не должны принимать участие в проверке нарушения любой зависимости.