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

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.