Скачиваний:
62
Добавлен:
16.04.2013
Размер:
430.08 Кб
Скачать

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битов пользователя

Соседние файлы в папке M9