- •6. Модель прикладного выполнения в системной среде Intel®Itanium™
- •6.1. Режимы набора инструкций
- •6.1.1. Выполнение набора инструкций в среде IntelItanium.
- •6.1.2. Выполнение набора инструкций ia-32
- •6.1.3. Переключения наборов инструкций
- •6.1.3.1. Инструкция jmpe
- •6.1.3.2. Инструкция перехода к ia
- •6.1.4. Переключения режимов работы ia-32
- •6.2. Модель состояния прикладных регистров ia-32
- •6.2.1. Регистры общего назначения ia-32
- •6.2.2. Указатель инструкций ia-32
- •6.2.3. Сегментные регистры ia-32
- •6.2.3.1. Сегменты данных и кода
- •6.2.3.2. Сегментный дескриптор и целостность среды
- •6.2.3.2.1. Защищенный режим.
- •6.2.3.2.2 Режим vm86
- •6.2.3.2.2 Реальный режим
- •6.2.3.3. Проверки целостности среды ia-32 во время выполнения
- •6.2.4. Прикладной ia-32 регистрEflag
- •6.2.5. Ia-32 регистры с плавающей точкой
- •6.2.5.1. Ia-32 стек регистров с плавающей точкой
- •6.2.5.2. Специальные случаи
- •6.2.5.3. Регистры управления с плавающей точкой ia-32.
- •6.2.5.4. Ia-32 среда с плавающей точкой
- •6.2.6. Ia-32 регистры ммх технологии
- •6.2.7. Ia-32 регистрыSse
- •6.3. Обзор моделей памяти
- •6.3.1. Упорядочивание памяти
- •6.3.2. Сегментация ia-32
- •6.3.3. Самомодифицирующийся код
- •6.3.4. Взаимодействия упорядочивания памяти.
- •6.4. Использование кодом ia-32, регистров Itanium
- •6.4.1. Механизм стека регистров
- •6.4.2. Alat
- •6.4.3. Влияние NaT/NaTValна инструкцииIa-32
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.