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

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

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

Безусловный