- •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.4.4.4. Спекуляция по управлению без восстановления
Не спекулятивные инструкции, которые читают регистры, содержащие маркер отложенного исключения, вызовут ошибку «Употребление регистрового NaT». Такие инструкции можно считать выполняющими не восстанавливаемые операции проверки спекуляции. В некоторых средах компиляции может быть истинно, что задержанные исключения являются только фатальными ошибками. В такой программе, если результат спекулятивного вычисления проверен и найден маркер отложенного исключения, то выполнение программы прекращается. Для такой программы, результаты спекулятивных вычислений могут быть проверены просто путем использования не спекулятивных инструкций.
4.4.4.5. Контроль операционной системы над откладыванием исключений
Существует дополнительный механизм, который позволяет операционной системе управлять поведением спекулятивных загрузок. Операционная система имеет опцию для выбора: какие исключения будут отложены автоматически аппаратными средствами, а какие исключения будут обработаны (и возможно отложены) программно. См. раздел 5.5.5 «Откладывание ошибок спекулятивной загрузки» во втором томе.
4.4.4.6. Сливание и заливание регистров
Имеются специальные инструкции сохранения и загрузки для сливания (spill) регистра в память с запоминанием маркера отложенного исключения и для восстановления (заливания -fill) слитого регистра.
Инструкции st8.spillиld8.fillпредназначены для сохранения и восстановления основного регистра вместе с соответствующимNaTбитом.
Инструкция st8.spillзаписываетNaTбит в прикладной регистрUNAT, а еслиNaTбит равен 0, то записывает 64-битовый блок данных в память. ЕслиNaTбит равен 1, тоUNATобновляется, а обновление памяти происходит специфически и должно следовать одному из трех видов поведения:
st8.spillможет не обновлять память 64-битовыми блоками данных из регистра, либо
st8.spillможет записать нули в указанное место памяти, либо
st8.spillможет записать в память 64-битовый блок данных из регистра, но только если это выполнение возвращает ноль в приемный регистр всех спекулятивных загрузокNaT, и если выполнение также гарантирует, что все инструкции распространенияNaTвыполняют все вычисления так, как определено страницами инструкций.
Биты 8:3 адреса памяти задают, какой бит будет записан в регистр UNAT.
Инструкция ld8.fillзагружает основной регистр из памяти, формируя соответствующийNaTбит из регистраUNAT, причем для адресации бита используются биты 8:3 адреса памяти. РегистрUNATдолжен сохраняться и восстанавливаться программно. Программное обеспечение отвечает за то, что при выполнении инструкцийst8.spillиld8.fillсодержимое регистраUNATбудет корректно.
Инструкции stf.spillиld.fillпредназначены для сохранения и восстановления регистра с плавающей точкой (хранимого как 16-байтовое) без вызова исключения, даже еслиFRсодержитNaTVal(эти инструкции не затрагивают регистр UNAT).
Инструкции сливания и восстановления регистров позволяют сливать и восстанавливать регистры, которые являются приемниками спекулятивных инструкций и поэтому могут содержать маркер отложенного исключения. Заметим также, что передачи между основными регистрами и регистрами с плавающей точкой вызовут преобразование между двумя форматами маркера отложенного исключения.
В таблице 4.14 перечислены состояния связанные со спекуляцией по управлению. В табл.4.15 собраны инструкции связанные со спекуляцией по управлению.
Табл.4.14. Состояния, связанные со спекуляцией по управлению
Регистр |
Описание |
NaT биты |
65-бит для каждого основного регистра, признак задержанного исключения |
NaTVal |
Псевдонулевой код для FR, является признаком задержанного исключения |
UNAT |
Прикладной регистр с набором NaTбитов пользователя |