- •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.1. Специальные случаи зависимости raw
Есть четыре разрешенных специальных случая зависимости RAWпо регистрам в пределах группы инструкций. Это такие специальные случаи: инструкцияalloc, инструкции проверки загрузки, инструкции затрагивающие ветвления и инструкцииid8.fillиst8.spill.
Инструкция allocнеявно записывает маркер текущего окна (CFM), который неявно читается всеми инструкциями обращающимися к стековому подмножеству файла основных регистров. Инструкции, которые обращающимися к стековому подмножеству файла основных регистров могут появляться в той же самой группе инструкций, что иallocи будут видеть стековое окно, заданное с помощьюalloc.
Примечание. Некоторые инструкции имеютRAWилиWAWзависимости от ресурсов не похожие на то какallocвлияет наCFM, и таким образом, не позволеные в той же самой группе инструкций послеalloc:flusrs, loadrs, пересылки изAR[BSPSTORE], пересылки изAR[RNAT],br.cexit, br.ctop, br.wtop, br.call, brl.call, br.ia, br.ret, clrrrb, cover, rfi.См. главу 5 «Ресурсы и семантики зависимости» в третьем томе. Также заметим, чтоallocтребуется для первой инструкции в группе инструкций.
Инструкция проверки загрузки может, либо не может выполнить загрузку, поскольку это зависит от передачи ей предварительной загрузки. Если проверка загрузки промахнется в ALAT, то это вызовет загрузку из памяти. Проверка загрузки и последующая инструкция, которая читает приемник проверки загрузки, могут существовать в той же самой группе инструкций. Зависимая инструкция загрузит новое значение, загруженное проверкой загрузки.
Переход может читать регистры переходов и может неявно читать предикатные регистры, прикладные регистры LC,ECиPFS, а такжеCFM. Кроме регистровLC,ECи предикатных регистров, запись в любой из этих регистров с помощью инструкции не являющейся переходом, будет видна для последующего перехода в той же самой группе инструкций. Запись в предикатные регистры с помощью любой инструкции, не являющейся инструкцией с плавающей точкой, будет видна для последующего перехода в той же самой группе инструкций. Регистровая зависимостьRAWне разрешена в той же самой группе инструкций дляLCиEC. ДинамическиеRAWзависимости, где предикат пишется инструкцией с плавающей точкой, а читается переходом, тоже не разрешены в той же самой группе инструкций. С точки зрения регистровой зависимости, переходыbr.cond, br.call, brl.cond, brl.call, br.retи br.iaработают как другие инструкции, то есть, если их квалификационный предикат есть 0, то они не рассматриваются считывателями или записывателями других ресурсов. Переходыbr.cloop, br.cexit, br.ctop, br.wexit иbr.wtopявляются исключениями из этого правила - они всегда читают и пишут свои ресурсы не зависимо от значения своего квалификационного предиката. Косвенный переходbrpсчитается считывателем указанного регистраBR.
Инструкции id8.fillиst8.spill неявно обращаются к прикладному региструUNAT(коллекцииNaTпользователя). Для этих инструкций ограничение на динамические регистровые зависимости типаRAWпо отношению кUNATприменяется на уровне битов. Эти инструкции могут появляться в той же самой группе инструкций, если они не обращаются к одному и тому же битуUNAT. ЗависимостиUNATтипаRAWмежду инструкциямиid8.fillилиst8.spillи инструкциямиmov ar= илиmov =arобращающимися кUNATне должны происходить в пределах одной и той же группы инструкций.
Для целей ресурсных зависимостей CFMобрабатывается как отдельный ресурс.
