Скачиваний:
62
Добавлен:
16.04.2013
Размер:
430.08 Кб
Скачать

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

Не применяются

Безусловный

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