- •6. Модель прикладного выполнения в системной среде Intel® Itanium™
- •6.1. Режимы набора инструкций
- •6.1.1. Выполнение набора инструкций в среде Intel Itanium.
- •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.2. Специальные случаи
- •6.2.5.3. Регистры управления с плавающей точкой ia-32.
- •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.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 (fully fenced - полное заграждение)
Переключения наборов инструкций не делают автоматический забор (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).
