Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MProc / M9 / Архитектура часть 4..doc
Скачиваний:
42
Добавлен:
16.04.2013
Размер:
430 Кб
Скачать

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 (branch predict) – предсказание перехода

  • bsw (bank switch) – переключение банка

  • clrrrb (clear rrb) – очистка RRB

  • cover (cover stack frame) – закрыть стековое окно

  • epc (enter privileged code) – ввод кода привилегий

  • flushrs (flush register stack) – сброс регистрового стека во вспомогательную память

  • loadrs (load register stack) - загрузка регистрового стека из вспомогательной памяти

  • 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 устанавливают один предикатный приемник, если их исходные регистры с плавающей точкой являются такими, что может быть проведена правильная аппроксимация, в противном случае предикатный приемник очищается.