- •4. Модель прикладного программирования.
- •4.1. Стек регистров
- •4.1.1. Управление стеком регистров
- •4.1.2. Инструкции стека регистров
- •4.2. Инструкции целочисленного вычисления
- •4.2.1. Арифметические инструкции
- •4.2.2. Логические инструкции
- •4.2.3. 32-Битные адреса и целые
- •4.2.4. Инструкции битовых полей и сдвигов
- •4.2.5. Большие константы.
- •4.3. Инструкции сравнения и предикация
- •4.3.1. Предикация
- •4.3.2. Инструкции сравнения
- •4.3.3. Типы сравнения
- •4.3.4. Передачи предикатных регистров
- •4.4. Инструкции доступа к памяти
- •4.4.1. Инструкции загрузки
- •4.4.2. Инструкции сохранения
- •4.4.3. Семафорные инструкции
- •4.4.4. Спекуляция по управлению
- •4.4.4.1. Концепции спекуляции по управлению
- •4.4.4.2. Спекуляция по управлению и инструкции
- •4.4.4.3. Спекулятивность по управлению и сравнения
- •4.4.4.4. Спекуляция по управлению без восстановления
- •4.4.4.5. Контроль операционной системы над откладыванием исключений
- •4.4.4.6. Сливание и заливание регистров
- •4.15. Инструкции, связанные со спекуляцией по управлению
- •4.4.5. Спекуляция по данным
- •4.4.5.1. Концепция спекуляции по данным
- •4.4.5.2. Спекуляция по данным и инструкции
- •4.4.5.3. Детализирование функциональности структуры alat и инструкции связанные с этим.
- •4.4.5.3.1. Выделение и проверка элементов alat
- •4.4.5.3.2. Аннулирование элементов alat.
- •4.4.5.4. Комбинирование спекуляций по управлению и по данным
- •4.4.5.5. Окончания инструкций для управления alat
- •4.4.6. Управление иерархией памяти и непротиворечивость
- •4.4.6.1 Иерархия памяти и подсказки
- •4.4.6.2. Согласованность памяти
- •4.4.7. Упорядочивание доступа к памяти
- •4.5. Инструкции переходов
- •4.5.1. Поддержка модульно планируемых циклов.
- •4.5.2. Подсказки предсказаний переходов.
- •4.5.3. Инструкции предсказания переходов
- •4.6. Инструкции мультимедиа.
- •4.6.1. Параллельная арифметика
- •4.6.2. Параллельные сдвиги
- •4.6.3. Преобразование данных
- •4.7. Пересылки регистрового файла
- •4.8. Символьные строки и подсчет совокупности
- •4.8.1. Символьные строки
- •4.8.2. Подсчет совокупности
- •4.9. Передача уровня привилегий
4.5. Инструкции переходов
Инструкции перехода производят переключение потока управления на новый адрес. Места переходов выровнены на границы связки, т.е. управление всегда передается на слот с первой инструкцией связки (слот 0). Не требуется, чтобы инструкция перехода была последней инструкцией в группе инструкций. Фактически группа инструкций может содержать произвольно много переходов (при условии, что встречаются нормальные требования зависимостей RAWиWAW). Если переход принят, то будут выполнены инструкции только до принятого перехода. После принятого перехода, следующая выполняемая инструкция будет там, куда делается переход.
Есть три категории переходов: переходы относительно IP, длинные переходы и косвенные переходы. При переходе относительноIPзадается 21-битное знаковое смещение, которое добавляется кIPсвязки содержащей переход для получения результирующего адреса перехода. Смещение позволяет делать переходы на 16М байт вперед или назад. При длинном переходе задается 60-битовое смещение, позволяющее указать адрес перехода в любом месте 64-битного адресного пространства. Из-за длинного непосредственного значения, длинный переход занимает два слота инструкций. При косвенном переходе, для указания адреса перехода используются регистры перехода.
Как показано в табл.4.22, есть несколько типов переходов. Условный переход br.condилиbr– это переход, который принимается, если вычисленное значение предиката есть 1, и не принимается в противном случае. Условный вызовbr.callделает то же самое, но, кроме того, записывает адрес связи (link) в указанный регистр перехода и подстраивает (adjust) стек основных регистров (см. раздел 4.1 «Стек регистров»). Условный возврат br.retделает то же самое, что и косвенный условный переход, плюс подстраивает стек основных регистров. Безусловные переходы, вызовы и возвраты делаются путем указания в инструкции перехода в качестве предикатаPR0 (который всегда 1). Длинные переходыbrl.cond илиbrl, иbrl.callявляются идентичными соответственно сbr.cond илиbr, иbr.callсоответственно, за исключением своих длинных смещений.
Табл.4.22. Типы переходов
Мнемоника |
Функция |
Условие перехода |
Адресация |
br.cond или br |
Условный переход |
Задаётся предикатом |
относит.или косв. |
br.call |
Условный вызов процедуры |
Задаётся предикатом |
относит.или косв. |
br.ret |
Условный возврат из процедуры |
Задаётся предикатом |
косвенная |
br.ia |
Вызов набора инструкций IA-32 |
Нет условия |
косвенная |
br.cloop |
Переход счетного цикла |
Счетчик цикла |
относительная |
br.ctop, br.cexit |
Модульно- планируемый счетный цикл |
Счетчик цикла и подсчет эпилогов |
относительная |
br.wtop, br.wexit |
Модульно- планируемый цикл типа while |
Задаётся предикатом и подсчетом эпилогов |
относительная |
brl.cond или brl |
Длинный условный переход |
Задаётся предикатом |
относительная |
brl.call |
Длинный условный вызов процедуры |
Задаётся предикатом |
относительная |
Перехода типа счетного цикла (br.cloop) использует прикладной регистрLC(loopcounter– счетчик цикла). ЕслиLCотличен от 0, то из него вычитается 1, и переход принимается. ЕслиLCравен 0, то переход отвергается. Переходы для модульно планируемых циклов (br.ctop, br.cexit, br.wtop, br.wexit) описаны ниже в разделе 4.5.1 «Поддержка модульно планируемых циклов». Циклические переходы (br.cloop, br.ctop, br.cexit, br.wtop, br.wexit) могут располагаться только в слоте 2 связки. Выполнение циклического перехода в слоте 0 или 1 вызовет ошибку «Нелегальная операция».
Для перемещения данных между регистрами перехода и основными регистрами используются инструкции перемещения (mov =br, mov br=). В табл. 4.23 и табл. 4.24 собраны состояния и инструкции связанные с переходами.
Табл.4.23. Состояния, связанные с переходами
Регистр |
Функция |
BR |
Регистры переходов |
PR |
Предикатные регистры |
CFM |
Маркер текущего окна |
PFS |
Прикладной регистр предыдущего функционального состояния |
LC |
Прикладной регистр – счетчик цикла |
EC |
Прикладной регистр – счетчик эпилогов |
Табл.4.24. Инструкции, связанные с переходами
Мнемоника |
Действие |
br |
Переход |
brl |
Длинный переход |
brp |
Обеспечение предварительной подсказки о будущем переходе |
mov =br |
Перемещение из GRвBR |
mov br= |
Перемещение из BRвGR |