- •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.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 |
Прикрывает текущее стековое окно (и образует новое) |
