Скачиваний:
57
Добавлен:
16.04.2013
Размер:
480.26 Кб
Скачать

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).