- •2. Введение в программирование для архитектуры IntelItanium
- •2.1. Обзор
- •2.2. Регистры
- •2.3. Использование инструкций IntelItanium
- •2.3.1. Формат
- •2.3.2. Выраженный параллелизм
- •2.3.3. Связки и шаблоны
- •2.4. Доступ к памяти и спекуляция
- •2.4.1. Функциональные возможности.
- •2.4.2. Спекулятивность
- •2.4.3. Спекуляция по управлению
- •2.4.4. Спекуляция по данным
- •2.5. Предикация
- •2.6. Архитектурная поддержка и вызовы процедур
- •2.6.1. Стековые регистры
- •2.6.2. Механизм регистрового стека
- •2.7. Переходы и Подсказки
- •2.7.1. Инструкции перехода
- •2.7.2. Циклы и программная конвейерная обработка
- •2.7.3. Ротация регистров
- •2.8. Итоги
2. Введение в программирование для архитектуры IntelItanium
2.1. Обзор
Набор инструкций Itaniumразработан так, что он позволяет компилятору передавать процессору информацию для управления характеристиками ресурсов, такими как задержка инструкции, удаленность запуска и назначение функционального исполнительного устройства. Хотя такие ресурсы могут планироваться статически, архитектураItaniumне требует для своего функционирования, чтобы был написан код для определенного микроархитектурного выполнения.
Архитектура Itaniumвключает полный набор инструкций с новыми свойствами, предназначенными для:
Увеличения уровня параллелизма инструкций (instructionlevelparallelism–ILP).
Лучшее сокрытие управления памятью
Улучшенная обработка переходов и управление ресурсами перехода.
Уменьшение издержек на вызов процедуры.
Также архитектура допускает высокоэффективное выполнение с плавающей точкой и обеспечивает прямую поддержку для приложений мультимедиа.
Полное описание синтаксиса и семантики инструкций Itaniumможно найти в первой части тома 3 «Описание набора инструкцийIntelItanium». Хотя эта глава обеспечивает представление высокого уровня для программирования прикладного уровня, она воспринимает предшествующий опыт программирования на языке ассемблера как нечто дружественное к архитектуре приложенийItanium. Оптимизация исследуется в других главах этого руководства.
2.2. Регистры
Архитектура задает 128 регистров общего назначения, 128 регистров с плавающей точкой, 64 предикатных регистра и до 128 регистров специального назначения. Большое количество архитектурных регистров позволяет многократным вычислениям выполняться без частого сливания/заливания промежуточных данных в память.
Имеется 128, 64-битных регистров общего назначения(r0-r127), которые используются для хранения значений для целочисленных и мультимедиа вычислений. Каждый из 128 регистров имеет один дополнительный битNaT(NotaThing), который используется для указания является ли верным значение содержащееся в регистре. В результате выполнения спекулятивныхItaniumинструкций, регистровый битNaTможет быть установлен в 1. Регистрr0является только читаемым и содержит значение ноль. Попытка записи в регистрr0вызовет ошибку.
Имеется 128, 82-битных регистров с плавающей точкой(f0-f127), которые используются для вычислений с плавающей точкой. Первые два регистраf0иf1являются только читаемыми и читаются, соответственно, как +0.0 и +1.0. Инструкции, читающиеf0илиf1, вызовут ошибку.
Имеется 64 однобитных предикатных регистра(p0-p63), которые управляют условиями выполнения инструкций и условными переходами. Первый регистр –р0является только читаемым и всегда читается как истина (1). Результаты инструкции. Которая записываетр0– аннулируются.
Имеется 8, 64-битных регистров переходов(b0-b7), которые используются для формирования адресов переходов при косвенных переходах.
Предусмотрено размещение до 128 прикладных регистров(ar0-ar127), которые поддерживают произвольные функции. Многие из этих регистров являются зарезервированными для будущего использования. Некоторые прикладные регистры имеют дополнительные имена (алиасы). Например,ar66является счетчиком эпилогов (EpilogueCounter) и называетсяar.ec.
Указатель инструкций– это 64-битный регистр, который указывает на текущую выполняемую связку инструкций.