- •4. Модель прикладного программирования.
- •4.1. Стек регистров
- •4.1.1. Управление стеком регистров
- •4.1.2. Инструкции стека регистров
- •4.2. Инструкции целочисленного вычисления
- •4.2.1. Арифметические инструкции
- •4.2.2. Логические инструкции
- •4.2.4. Инструкции битовых полей и сдвигов
- •4.3. Инструкции сравнения и предикация
- •4.3.1. Предикация
- •4.3.2. Инструкции сравнения
- •4.2.5. Большие константы.
- •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 (loop counter – счетчик цикла). Если 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 |
