- •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.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 |
Не применяются |
Безусловный |