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

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

Соседние файлы в папке M9