Сравнения

Материал из Compilers Wiki
Версия от 16:55, 16 марта 2018; Admin (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Команды сравнения возвращают целочисленное значение типа w (word) или l (long) и сравнивают значения произвольных типов. Возвращаемое значение равно 1, если два операнда удовлетворяют соотношению сравнения, или 0 в противном случае. Названия сравнений соответствуют стандартной схеме именования в трех частях.

Comparison instructions return an integer value (either a word or a long), and compare values of arbitrary types. The returned value is 1 if the two operands satisfy the comparison relation, or 0 otherwise. The names of comparisons respect a standard naming scheme in three parts.

Все сравнения должны начинаться с буквы "c"

Затем указывается тип сравнения. Приведенные ниже типы сравнений могут использоваться для целых чисел:
eq for equality # Сравнение на равенство
ne for inequality # Сравнение на неравенство
sle for signed lower or equal # Сравнение знаковых чисел на "меньше или равно"
slt for signed lower # Сравнение знаковых чисел на "меньше"
sge for signed greater or equal # Сравнение знаковых чисел на "больше или равно"
sgt for signed greater # Сравнение знаковых чисел на "больше"
ule for unsigned lower or equal # Сравнение беззнаковых чисел на "меньше или равно"
ult for unsigned lower # Сравнение беззнаковых чисел на "меньше"
uge for unsigned greater or equal # Сравнение беззнаковых чисел на "больше или равно"
ugt for unsigned greater # Сравнение беззнаковых чисел на "больше"
Для сравнения чисел с плавающей точкой используются следующие типы сравнений:
eq for equality # Сравнение на равенство
ne for inequality # Сравнение на неравенство
le for lower or equal # Сравнение на "меньше или равно"
lt for lower # Сравнение на "меньше"
ge for greater or equal # Сравнение на "больше или равно"
gt for greater # Сравнение на "больше"
o for ordered (no operand is a NaN) # Сравнение для упорядоченных
uo for unordered (at least one operand is a NaN) # Сравнение для неупорядоченных

Поскольку типы с плавающей запятой всегда имеют знаковый бит, все доступные сравнения также знаковые.

Имя команды заканчивается суффиксом, выраженным базовым типом, который обозначает тип сравниваемых операндов. Например, cod (I (dd, dd)) сравнивает два числа с плавающей точкой с двойной точностью и возвращает 1, если две плавающие точки не являются NaN, или 0 в противном случае. Команда csltw (I (ww, ww)) сравнивает два слова, представляющие знаковые числа, и возвращает 1, когда первый аргумент меньше второго (иначе - 0).

Finally, the instruction name is terminated with a basic type suffix precising the type of the operands to be compared.
For example, cod (I(dd,dd)) compares two double-precision floating point numbers and returns 1 if the two floating points are not NaNs, or 0 otherwise. The csltw (I(ww,ww)) instruction compares two words representing signed numbers and returns 1 when the first argument is smaller than the second one.



Источник: c9x.me