- •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.1.2. Инструкции стека регистров
Инструкция allocиспользуется для изменения размеров текущего окна регистрового стека. Инструкцияallocдолжна быть первой инструкцией в группе инструкций, в противном случае результат не определен. Инструкцияallocвлияет на окно стека регистров видимое всеми инструкциями в группе инструкций, включая саму инструкциюalloc. Инструкцияallocне может быть предикатной. Инструкцияallocне влияет на значения распределяемых регистров или ихNaT-биты. При расширении окна регистрового стека, вновь распределенные регистры могут иметь установленные битыNaT.
Кроме того, имеются три инструкции, обеспечивающие явное управление состоянием регистрового стека. Эти инструкции используются в цепочечных и контекстных переключениях, которые требуют соответствующего переключения вспомогательной памяти для регистрового стека. Подробнее о явном управлении RSEсм. часть 6 «Механизм стека регистров» во втором томе.
Инструкция flushrs используется для того, чтобы вынудить все предыдущие стековые окна выйти во вспомогательную память. Она приостанавливает выполнение инструкций до тех пор, пока в стеке физических регистров, все активные окна до текущего окна (но, не включая его) будут слиты во вспомогательную память с помощью механизмаRSE. Инструкцияflushrs должна быть первой инструкцией в группе инструкций, в противном случае результат не определен. Инструкцияflushrs не может быть предикатной.
Инструкция cover создает новое окно нулевого размера (sof=sol=0). Новое окно создается выше существующего окна (без наложения). Локальная и выходная области предыдущего окна автоматически сохраняются. Инструкцияcover должна быть последней инструкцией в группе инструкций, в противном случае вызывается ошибка «Нелегальная операция». Инструкцияcover не может быть предикатной.
Инструкция loadrs гарантирует то, что заданная часть регистрового стека присутствует в физических регистрах. Она приостанавливает выполнение инструкций до тех пор, пока количество байт указанных в полеloadrsприкладного регистраRSC, не будут заполнены из вспомогательной памяти с помощью механизмаRSE(начиная с текущегоBSP). Если для поляRSC.loadrsзадать нулевое значение, то инструкцияloadrs может быть использована для того, чтобы указать, что все стековые регистры вне текущего окна должны быть загружены из вспомогательной памяти перед использованием. Кроме того, стековые регистры вне текущего окна (которые не были слиты при помощиRSE) не будут запоминаться во вспомогательной памяти. Инструкцияloadrs должна быть первой инструкцией в группе инструкций, в противном случае результат не определен. Инструкцияloadrs не может быть предикатной.
Табл.4.1. содержит архитектурно видимый состав, связанный с регистровым стеком. В табл.4.2. собраны инструкции управления стеком регистров. Переходы типа вызовов и возвращений, которые затрагивают стек, описаны в разделе «Инструкции переходов».
Табл.4.1. Состав архитектурной видимости связанный с регистровым стеком.
Регистр |
Описание |
AR[PFS].pfm |
Поле маркера предыдущего окна |
AR[RSC] |
Прикладной регистр конфигурации регистрового стека |
AR[BSP] |
Прикладной регистр указателя вспомогательной памяти |
AR[BSPSTORE] |
Прикладной регистр указателя вспомогательной памяти для сохранений памяти |
AR[RNAT] |
Прикладной регистр RSEдля набораNaT |
Табл.4.2. Инструкции управления стеком регистров
Мнемоника |
Действие |
alloc |
Распределяет окно регистрового стека |
flushrs |
Сбрасывает регистровый стек во вспомогательную память |
loadrs |
Загружает регистровый стек из вспомогательной памяти |
cover |
Прикрывает текущее стековое окно (и образует новое) |