|
Рис. 2. Как осуществляется интерпретация и динамическая трансляция Aries.
Когда Aries начинает эмуляцию приложения PA-RISC, он вызывает интерпретатор для эмуляции команд. Интерпретатор интерпретирует по одной команде до тех пор, пока не достигнет перехода. Он вычисляет адрес перехода и возвращает его модулю времени исполнения Aries. Модуль времени исполнения ищет возвращаемый адрес перехода в таблице соответствия адресов, чтобы определить, оттранслировал Aries или нет адресуемый блок в динкод (оттранслированный код, содержащий «родные» команды IA-64). Если это так, модуль времени исполнения Aries передает управление соответствующему динкоду и непосредственно выполняет его. Если блок не был оттранслирован, модуль времени исполнения определяет, готов ли адресуемый блок к трансляции. Если он не готов, модуль времени исполнения Aries увеличивает счетчик выполнения для данного блока и возвращает управление интерпретатору. Если блок достиг порогового значения трансляции, модуль времени исполнения Aries вызывает транслятор и порождает динкод. Затем Aries сохраняет этот динкод в выделенном кэше транслированного кода для последующего его использования |
|
Рис. 4. Как оптимизатор Aries сокращает дополнение адресов (выравнивание 32-разрядных адресов до 64-разрядных адресов).
Чтобы оптимизировать последовательность подряд идущих команд доступа к памяти. Оптимизатор заменяет пару команд addp4/st4 (команды C1 и C2 в сгенерированном динкоде) на одну команду st4 (команда c1 в оптимизированном динкоде), которая одновременно модифицирует базу. Оптимизация сокращает общее время выполнения с шести циклов до пяти и уменьшает счетчик команд с 24 до 18
|
|