- •4. Модель прикладного программирования.
- •4.1. Стек регистров
- •4.1.1. Управление стеком регистров
- •4.1.2. Инструкции стека регистров
- •4.2. Инструкции целочисленного вычисления
- •4.2.1. Арифметические инструкции
- •4.2.2. Логические инструкции
- •4.2.4. Инструкции битовых полей и сдвигов
- •4.3. Инструкции сравнения и предикация
- •4.3.1. Предикация
- •4.3.2. Инструкции сравнения
- •4.2.5. Большие константы.
- •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.3.3. Типы сравнения
Инструкции сравнения могут иметь целых пять типов сравнения: Нормальный, Безусловный, И, ИЛИ, Де Моргана. Тип определяет то, как инструкция записывает свой приемный предикатный регистр в результате сравнения и формирования предиката. Описание этих типов содержится в табл.4.9. В таблице “qp” – это ссылка на значение предиката полученного от сравнения, а “result” – это ссылка на результат сравниваемого соотношения (один – если сравниваемое соотношение есть «истина» и ноль – если сравниваемое соотношение есть «ложь»).
Табл.4.9. Функционирование типов сравнения
Тип сравнения |
Уточнение |
Действие |
|
Первый предикатный приемник |
Второй предикатный приемник |
||
Нормальный |
нет |
if (qp) {target = result) |
if (qp) {target != result) |
Безусловный |
unc |
if (qp) {target = result) else {target=0} |
if (qp) {target != result) else {target=0} |
И |
and |
if (qp && !result) {target=0} |
if (qp && !result) {target=0} |
andcm |
if (qp && result) {target=0} |
if (qp && result) {target=0} |
|
ИЛИ |
or |
if (qp && result) {target=1} |
if (qp && result) {target=1} |
orcm |
if (qp && !result) {target=1} |
if (qp && !result) {target=1} |
|
Де-Морган |
or.andcm |
if (qp && result) {target=1} |
if (qp && result) {target=0} |
and.orcm |
if (qp && !result) {target=0} |
if (qp && !result) {target=1} |
|
Сравнение нормального типа просто записывает результат сравнения в первый предикатный приемник, а дополнение к результату во второй предикатный приемник.
Сравнение безусловного типа ведет себя аналогично нормальному типу, за исключением того, что если вычисленный предикат есть 0, то в оба предикатных приемника пишется 0. Здесь можно считать, что инициализация предикатных приемников объединена с нормальным сравнением. Заметим, что инструкции сравнения безусловного типа модифицируют архитектурное состояние, если их вычисленный предикат есть «ложь».
Типы И, ИЛИ и Де-Морган называются параллельными типами поскольку они всегда делают множество отдельных сравнений (одного типа) для получения одного значения предикатного регистра. Это обеспечивает доступность для вычисления в одном цикле логического уравнения, такого как p5 = (r4==0) || (r5==r6) (предполагается, что р5 в предыдущем цикле было инициализировано 0). Сравнение типа Де-Морган – это просто комбинация типа ИЛИ для одного предикатного приемника и типа И для другого предикатного приемника. Множество сравнений типа ИЛИ (включая ИЛИ части от типов Де-Морган) могут иметь один и тот же предикатный приемник в одной и той же группе инструкций. Множество сравнений типа И (включая И части от типов Де-Морган) тоже могут иметь один и тот же предикатный приемник в одной и той же группе инструкций.
Для всех инструкций сравнения (за исключением tnat и fclass), если один или оба исходных регистров содержат маркер отложенного исключения (NaT или NaTVal см. раздел 4.4.4 «Спекулятивное управление»), то результат сравнения будет разным. Оба предикатных приемника обрабатываются одинаково и либо прописываются нулями, либо остаются неизменными. В комбинации со спекуляцией это позволяет предикатному коду выключаться в присутствии задержанного исключения. (fclass ведет себя так, как если бы NaTVal не проверялся бы на принадлежность к одному из классов.) Табл.4.10 описывает поведение.
Табл.4.10. Результат сравнение для исходных данных типа NaT
Тип сравнения |
Действие |
Нормальный |
if (qp) {target = 0} |
Безусловный |
target = 0 |
И |
if (qp) {target = 0} |
ИЛИ |
(не записывается) |
Де Морган |
(не записывается) |
Для некоторых инструкций сравнения поддерживается только часть типов сравнения. Табл.4.11 содержит список типов сравнения, которые доступны для каждой инструкции.
Табл.4.11. Инструкции и обеспечение типов сравнения
Инструкции |
Соотношения |
Обеспечиваемые типы |
cmp, cmp4 |
a == b, a != b, a > 0, a >= 0, a < 0, a <= 0, 0 > a, 0 >= a, 0 <a, 0 <= a |
Нормальный, Безусловный, И, ИЛИ, Де Морган |
Все другие соотношения |
Нормальный, Безусловный |
|
tbit, tnat |
Все |
Нормальный, Безусловный, И, ИЛИ, Де Морган |
fcmp, fclass |
Все |
Нормальный, Безусловный |
frcpa, fprcpa, frsqrta, fprsqrta |
Не применяются |
Безусловный |
