- •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.3.3. Самомодифицирующийся код
Пока работает набор инструкций IA-32, для всехIA-32 программ поддерживается когерентность самомодифицирующегося кода и кэша инструкций (когерентность относительно кэша данных локального процессора). Обнаружение самомодифицирующегося кода прямо поддерживается на том же самом уровне соответствия, что и процессорPentium. Программа должна включатьIA-32 инструкции переходов между операцией сохранения и модификацией инструкций для изменяемых байтов инструкций, с целью распознавания.
Не определено, обнаружит ли процессор случай самомодифицирующегося кода IA-32 для следующих условий: 1)PSR.dt=0 илиPSR.it=0, либо 2) имеются виртуальные алиасы для различных физических адресов между таблицамиTLBинструкций и данных.
При переключении из набора инструкций Itanium в набор инструкций IA-32, пока выполняются инструкции Itanium, когерентность самомодифицирующегося кода и кэша инструкций не поддерживается прямо аппаратурой процессора. Но, если делается модификация инструкцийIA-32 с помощью инструкций Itanium, то код типа Itanium должен явно синхронизировать кэши инструкций с помощью последовательности кода заданной в разделе 4.4.6.2 «Непротиворечивость памяти». В противном случае модификация может наблюдаться, а может и не наблюдаться последующимиIA-32 инструкциями.
При переключении из набора инструкций IA-32 в Itanium, модификация содержимого локального кэша инструкций, с помощью инструкцийIA-32, обнаруживается аппаратными средствами процессора. Процессор гарантирует, что кэш инструкций сделан когерентным относительно модификации и все последующие выборки инструкций Itanium видят модификацию.
6.3.4. Взаимодействия упорядочивания памяти.
Инструкции IA-32 отображаются в модель упорядочивания памяти Itanium, следующим образом:
Все IA-32 сохранения имеют семантикуrelease(освобождение)
Все IA-32 загрузки имеют семантикуacquire(запрос)
Все IA-32 инструкции типа чтение-модификация-запись или защелка (lock) имеют обе семантикиreleaseиacquire(fullyfenced- полное заграждение)
Переключения наборов инструкций не делают автоматический забор (fence) обращений к памяти данных. Для гарантирования надлежащего упорядочивания программе нужно принять во внимание следующие правила упорядочивания.
При переключении из набора инструкций Itanium в набор инструкций IA-32
Все зависимости данных обрабатываются, загрузки IA-32 видят результаты всех предыдущих сохранений Itanium.
Сохранения IA-32 (семантикаrelease) не могут пропустить любые предыдущие Itanium загрузки или сохранения.
Загрузки IA-32 (семантикаacquire) могут пропустить предыдущие неупорядоченные Itanium загрузки или любые предыдущие Itanium сохранения в различающиеся адреса. Программа типа Itanium может предотвращатьIA-32 загрузки из прошедших предыдущих загрузок и Itanium сохранений, используя перед переключением набора инструкций операциюacquire (илиmf).
При переключении из набора инструкций IA-32 в набор инструкций Itanium
Все зависимости данных обрабатываются, загрузки Itanium видят результаты всех предыдущих сохранений IA-32.
Сохранения и загрузки Itanium не могут пропускать предыдущие IA-32 загрузки (семантикаacquire).
Неупорядоченные сохранения Itanium или любая Itanium загрузка может пропустить предыдущее IA-32 сохранение (семантикаrelease) в различающиеся адреса. Программа типа Itanium может предотвращать сохранения и загрузки Itanium из прошедших предыдущихIA-32 сохранений, используя после переключения набора инструкций операциюrelease(илиmf).