- •4. Модель прикладного программирования.
- •4.1. Стек регистров
- •4.1.1. Управление стеком регистров
- •4.1.2. Инструкции стека регистров
- •4.2. Инструкции целочисленного вычисления
- •4.2.1. Арифметические инструкции
- •4.2.2. Логические инструкции
- •4.2.3. 32-Битные адреса и целые
- •4.2.4. Инструкции битовых полей и сдвигов
- •4.2.5. Большие константы.
- •4.3. Инструкции сравнения и предикация
- •4.3.1. Предикация
- •4.3.2. Инструкции сравнения
- •4.3.3. Типы сравнения
- •4.3.4. Передачи предикатных регистров
- •4.4. Инструкции доступа к памяти
- •4.4.1. Инструкции загрузки
- •4.4.2. Инструкции сохранения
- •4.4.3. Семафорные инструкции
- •4.4.4. Спекуляция по управлению
- •4.4.4.1. Концепции спекуляции по управлению
- •4.4.4.2. Спекуляция по управлению и инструкции
- •4.4.4.3. Спекулятивность по управлению и сравнения
- •4.4.4.4. Спекуляция по управлению без восстановления
- •4.4.4.5. Контроль операционной системы над откладыванием исключений
- •4.4.4.6. Сливание и заливание регистров
- •4.15. Инструкции, связанные со спекуляцией по управлению
- •4.4.5. Спекуляция по данным
- •4.4.5.1. Концепция спекуляции по данным
- •4.4.5.2. Спекуляция по данным и инструкции
- •4.4.5.3. Детализирование функциональности структуры alat и инструкции связанные с этим.
- •4.4.5.3.1. Выделение и проверка элементов alat
- •4.4.5.3.2. Аннулирование элементов alat.
- •4.4.5.4. Комбинирование спекуляций по управлению и по данным
- •4.4.5.5. Окончания инструкций для управления alat
- •4.4.6. Управление иерархией памяти и непротиворечивость
- •4.4.6.1 Иерархия памяти и подсказки
- •4.4.6.2. Согласованность памяти
- •4.4.7. Упорядочивание доступа к памяти
- •4.5. Инструкции переходов
- •4.5.1. Поддержка модульно планируемых циклов.
- •4.5.2. Подсказки предсказаний переходов.
- •4.5.3. Инструкции предсказания переходов
- •4.6. Инструкции мультимедиа.
- •4.6.1. Параллельная арифметика
- •4.6.2. Параллельные сдвиги
- •4.6.3. Преобразование данных
- •4.7. Пересылки регистрового файла
- •4.8. Символьные строки и подсчет совокупности
- •4.8.1. Символьные строки
- •4.8.2. Подсчет совокупности
- •4.9. Передача уровня привилегий
4.2.5. Большие константы.
Специальные инструкции предназначены для генерации больших (large) констант (см. табл. 4.7). Для расширения констант до 22-битов, может быть использована инструкцияaddили псевдооперацияmov(псевдооперация сложения сGR0, который всегда читается как 0). Для больших констант определена инструкция перемещения длинного непосредственного значения (movl), которая записывает 64-битное непосредственное значение в основной регистр. Эта инструкция занимает два слота инструкций, и является единственной такой инструкцией.
Табл. 4.7. Инструкции для генерации больших констант
Мнемоника |
Действие |
mov |
Перемещение 22-битного непосредственного значения |
movl |
Перемещение 64-битного непосредственного значения |
4.3. Инструкции сравнения и предикация
Набор инструкций сравнения обеспечивает способность проверять различные условия и влияет на динамическое выполнение инструкций. Инструкция сравнения проверяет одно заданное условие и генерирует булевой результат. Эти результаты записываются в предикатные регистры. После этого, предикатные регистры могут быть использованы для влияния на динамическое выполнение двумя путями: как условия для условных переходов или как формирование предикатов для предикации.
4.3.1. Предикация
Предикация (predication) – это условное выполнение инструкций. Выполнение большинства инструкций проходит в зависимости от предикатов. Если предикат – «истина», то выполнение инструкции проходит нормально; если предикат – «ложь», то инструкция не меняет архитектурное состояние (за исключением безусловных типов инструкций сравнения, инструкций аппроксимации с плавающей точкой и условных циклических переходов). Предикаты – это однобитные переменные, хранящиеся в предикатном регистровом файле. Нулевой предикат интерпретируется как «ложь», а единичный предикат – «истина» (предикатный регистрPR0 аппаратно содержит единицу).
Несколько инструкций не могут быть предикатными. Это следующие инструкции:
alloc (allocate stack frame) – выделение стекового окна,
brp(branchpredict) – предсказание перехода
bsw(bankswitch) – переключение банка
clrrrb (clear rrb) – очистка RRB
cover (cover stack frame) – закрыть стековое окно
epc (enter privileged code) – ввод кода привилегий
flushrs(flushregisterstack) – сброс регистрового стека во вспомогательную память
loadrs(loadregisterstack) - загрузка регистрового стека из вспомогательной памяти
br.cloop, br.ctop, br.cexit– счетные переходы
rfi (return from interruption) – возврат из прерывания
4.3.2. Инструкции сравнения
Предикатные регистры записываются следующими инструкциями:
сравнение основных регистров (cmp, cmp4),
сравнение регистров с плавающей точкой (fcmp),
тестирование битов и тестирование NaTбитов (tbit, tnat),
классификация с плавающей точкой (fclass),
обратная аппроксимация с плавающей точкой и обратная аппроксимация квадратного корня (frcpa, fprcpa, frsqrta, fprsqrta).
Большинство из этих инструкций сравнения (все кроме frcpa, fprcpa, frsqrta, fprsqrta), в результате сравнения устанавливают два предикатных регистра. Установка двух приемных регистров описана ниже в разделе 4.3.3 «Типы сравнения». Инструкции сравнения собраны в таблице 4.8.
Табл.4.8. Инструкции сравнения
Мнемоника |
Действие |
cmp, cmp4 |
Сравнение основных регистров |
tbit |
Тестирование битов в основном регистре |
tnat |
Тестирование битов в основном регистре NaT |
fcmp |
Сравнение с плавающей точкой |
fclass |
Классификация с плавающей точкой |
frcpa, fprcpa |
Обратная аппроксимация с плавающей точкой |
frsqrta, fprsqrta |
Обратная аппроксимация квадратного корня с плавающей точкой |
Инструкции сравнения (64-битная – cmpи 32-битная – cmp4) сравнивают два регистра или регистр и непосредственное значение, одним из десяти соотношений (типа >,). Инструкции сравнения устанавливают два предикатных приемника в соответствии с результатом. Инструкцияcmp4 сравнивает младшие 32 бита обоих операндов (при этом значения старших 32-битов игнорируются).
Инструкция тестирования битов (tbit) устанавливает два предикатных регистра в соответствии с состоянием одного из битов основного регистра, причем позиция бита задается непосредственным операндом. Инструкция тестированияNaTбитов (tnat) устанавливает два предикатных регистра в соответствии с состояниемNaTбита соответствующего основного регистра.
Инструкция fcmpсравнивает два регистра с плавающей точкой и устанавливает два предикатных приемника в соответствии с одним из восьми соотношений. Инструкция fclassустанавливает два предикатных приемника в соответствии с классификацией числа содержащегося в исходном регистре с плавающей точкой.
Инструкции frcpa, fprcpa, frsqrta, fprsqrtaустанавливают один предикатный приемник, если их исходные регистры с плавающей точкой являются такими, что может быть проведена правильная аппроксимация, в противном случае предикатный приемник очищается.