Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MProc / M9 / Архитектура часть 6..doc
Скачиваний:
18
Добавлен:
16.04.2013
Размер:
480.26 Кб
Скачать

6.4. Использование кодом ia-32, регистров Itanium

В этом разделе перечислены программные соображения для основных Itanium регистров и регистров с плавающей точкой, а также для случая, когда ALATвзаимодействует с кодомIA-32.

6.4.1. Механизм стека регистров

Программа должна гарантировать, что до начала IA-32 выполнения черезbr.iaилиrfi, все «грязные» (dirty) регистры будут сброшены во вспомогательную память, с помощью инструкцииflushrs. Любые «грязные» регистры оставшиеся в текущем или предыдущем окне стека регистров, останутся в неопределенном состоянии. Программа не может полагаться на значения этих регистров во время переключения набора инструкций.

При входе в выполнение набора инструкций IA-32,RSEнемедленно блокируется, независимо от разрешающих условий регистра управленияRSE.

После выхода из набора инструкций IA-32 с помощью инструкцииjmpeили прерывания, все стековые регистры помечаются как неверные, а количество чистых регистров устанавливается в 0.

6.4.2. Alat

Выполнение набора инструкций IA-32 оставляетALATнеопределенным. Программа не может полагаться на состояниеALATво время переключения набора инструкций. При входе в кодIA-32, существующие элементыALATигнорируются. Детали обALATописаны в разделе 4.4.5.2. «Спекуляция по данным и инструкции».

6.4.3. Влияние NaT/NaTValна инструкцииIa-32

Если код типа Itanium, перед переключением в набор инструкций IA-32 устанавливает состояниеNaTв целочисленном регистре, либо состояниеNaTValв регистре с плавающей точкой, ММХ илиSSEрегистре, то могут возникнуть следующие условия:

  • При входе в набор инструкций IA-32, значенияNaTне должны содержаться ни в одном регистре, определенном для содержания состоянияIA-32, в противном случае действия процессора будут модельно зависимыми и неопределенными. Процессоры могут генерировать аварийное завершение работы при употребленииNaTрегистра, на любойIA-32 инструкции, в любое время (включая первуюIA-32 инструкцию) для всех целочисленных, ММХ,SEEилиFPинструкций, независимо от того ссылается ли инструкция прямо или косвенно, на регистр содержащийNaT. Аварийное завершение работы при употребленииNaTрегистра встретившееся приIA-32 выполнении может оборватьIA-32 инструкции в средине выполнения с уже модифицированным архитектурным состоянием.

  • Значения с плавающей точкой NaTValне должны распространяться вIA-32 инструкциях с плавающей точкой, в противном случае действия процессора будут модельно зависимыми и неопределенными. Процессоры могут преобразовывать регистры с плавающей точкой содержащиеNaTValвSNAN(при входе в набор инструкцийIA-32 или при употребленииIA-32 инструкции с плавающей точкой). Зависимые инструкции с плавающей точкой, которые прямо или косвенно распространятNaTValрегистр, вызовут либо распространениеNaTValиндикации, либо сгенерируют ошибку – ИсключениеIA-32 «Неверная операцияFP». Как генерация процессором ошибки, так и распространениеNaTVal, являются модельно зависимыми. В любом случае, процессор не позволит региструNaTValбыть использованным без распространенияNaTVal, либо без генерации ошибки – ИсключениеIA-32 «Неверная операцияFP».

Примечание. Является невозможным дляIA-32 кода, чтениеNaTValиз памятиIA-32 инструкцией загрузки с плавающей точкой, посколькуNaTValне может быть выражен с помощью 80-битного числа с двойной расширенной точностью. Настоятельно рекомендуется, чтобы значения с плавающей точкой передавались через стек памяти в типичныхIA-32 соглашениях в вызовах, для того чтобы избежать проблем сNaTValи денормализованными значениями Itanium.

  • IA-32 инструкции SSE, которые прямо или косвенно обращаются к регистру содержащему кодNaTVal, будут игнорировать кодNaTValи интерпретировать поле мантиссы регистра как допустимое значение данных.

  • IA-32 инструкции технологии ММХ, которые прямо или косвенно обращаются к регистру содержащему кодNaTVal, будут игнорировать кодNaTValи интерпретировать поле мантиссы регистра как допустимое значение данных.

Программа не должна полагаться на поведение NaTилиNaTValв течение выполненияIA-32 инструкции, либо на распространениеNaTилиNaTValинструкциямиIA-32.