Команды архитектуры Itanium (IA-64)
Команды целочисленной арифметики
Имя |
Описание |
ADD |
Сложение |
SUB |
Вычитание |
ADD ,1 |
Трехоперандная (A + B + 1) |
SUB ,1 |
Трехоперандная (A - B - 1) |
ADDL |
Сложение с 22-битным целым |
SHLADD |
Сдвиг влево (на 1-4 бита) и сложение |
AND |
Логическое И |
OR |
Логическое ИЛИ |
ANDCM |
Логическое И-НЕ |
XOR |
Логическое Исключающее ИЛИ |
ADDP4 |
Прибавление 32-битного указателя |
SHLADDP4 |
Сдвиг влево и прибавление указателя |
CMP |
Сравнить GR |
CMP4 |
Сравнить
младшие 32 бита GR |
TBIT |
Проверить
бит GR |
TNAT |
Проверить бит NaT регистра GR |
SXTn |
Расширить значащим битом (n = 1, 2, 4) |
ZXTn |
Расширить нулевыми битами (n = 1, 2, 4) |
DEP |
Поместить биты в заданную позицию заданного значения |
DEP.Z |
Поместить биты в заданную позицию нулевого значения |
EXTR |
Выделить заданные биты с распространением значащего бита |
EXTR.U |
Выделить
заданные биты числа |
SHL |
Сдвиг влево |
SHR |
Знаковый сдвиг вправо |
SHR.U |
Беззнаковый сдвиг вправо |
SHRP |
Два числа собрать в 128-битное значение и сдвинуть вправо |
CZXn |
Индекс первого n-байтового нулевого значения (n = 1, 2) |
POPCNT |
Вычисление числа единичных битов |
MOVL |
Присвоить 64-битное целое |
Команды параллельной целочисленной арифметики
Имя |
Описание |
PADDn |
Сложение элементов векторов с насыщением (n = 1, 2, 4) |
PSUBn |
Вычистение элементов векторов с насыщением (n = 1, 2, 4) |
PAVGn |
Вычисление полусуммы элементов векторов (n = 1, 2) |
PAVGn.RAZ |
Вычисление полусуммы элементов векторов с округленим от нуля (n = 1, 2) |
PAVGSUBn |
Вычисление полуразности элементов векторов (n = 1, 2) |
PCMPn |
Сравнение элементов векторов |
PMPY2.L |
Умножение нечетных элементов векторов |
PMPY2.R |
Умножение четных элементов векторов |
PMPYSHR2 |
Умножение элементов векторов и сдвиг вправо |
PSAD1 |
Сумма модулей разностей элементов двух векторов |
PMIN |
Вычисление минимума элементов векторов |
PMAX |
Вычисление максимума элементов векторов |
PSHLn |
Сдвиг элементов вектора влево (n = 2, 4) |
PSHRn |
Сдвиг элементов вектора вправо (n = 2, 4) |
PSHRn.U |
Беззнаковый сдвиг элементов вектора вправо (n = 2, 4) |
PSHLADD2 |
Сдвиг элементов вектора влево и сложение |
PSHRADD2 |
Сдвиг элементов вектора вправо и сложение |
MIXn.L |
Собрать с чередованием левые элементы векторов (n = 1, 2, 4) |
MIXn.R |
Собрать с чередованием правые элементы векторов (n = 1, 2, 4) |
MUX |
Копирование с перестановкой элементов |
PACKn |
Упаковать векторы элементов большого размера в векторы элементов меньшего размера (n = 2, 4) |
UNPACKn.H |
Собрать с чередованием старшие элементы векторов (n = 1, 2, 4) |
UNPACKn.L |
Собрать с чередованием младшие элементы векторов (n = 1, 2, 4) |
Команды работы с памятью
Имя |
Описание |
LDn |
Загрузить n байт (n = 1, 2, 4, 8) |
LDFn |
Загрузить вещественное число (n = S, D, E) |
LDF8 |
Загрузить 64-битное целое в FR |
LDFPn |
Загрузить пару вещественных чисел (n = S, D) |
LD.S |
Загрузка спекулятивная по управлению |
LD.A |
Загрузка спекулятивная по данным |
LD.SA |
Загрузка спекулятивная по управлению и данным |
LD.C |
Проверка загрузки |
LD.ACQ |
Упорядоченная загрузка |
LD.BIAS |
Загрузка с намерением записи |
LD8.FILL |
Загрузить 8 байт из памяти и бит NaT из UNAT |
LDF.FILL |
Загрузить 16-байтное вещественное значение |
STn |
Записать n байт (n = 1, 2, 4, 8) |
STFn |
Записать вещественное число (n = S, D, E) |
STF8 |
Записать 64-битное целое из FR |
ST8.SPILL |
Записать 8 байт в память и бит NaT в UNAT |
STF.SPILL |
Записать 16-байтное вещественное число |
CMPXCHG |
Атомарная операция: сравнить и переставить |
FETCHADD |
Атомарная операция: загрузить значение, сумму записть обратно |
XCHGn |
Переставить значения в памяти и GR (n = 1, 2, 4, 8) |
LFETCH |
Предвыбрать кэш-строку |
LFETCH.EXCL |
Предвыбрать кэш-строку для записи |
Команды работы с регистрами
Имя |
Описание |
MOV |
Передать значение между GR и GR |
MOV FR |
Передать значение между FR и FR (FMERGE) |
MOV BR |
Передать значение между BR и GR |
MOV PR |
Передать значение между PR и GR |
MOV AR |
Передать значение между AR и GR |
MOV PSR |
Передать значение между PSR и GR |
SUM |
Установить биты user mask |
RUM |
Сбросить биты user mask |
MOV PMD |
Передать значение из PMDR в GR |
MOV CPUID |
Передать значение из CPUID в GR |
MOV IP |
Передать значение из IP в GR |
CLRRRB |
Очистить Rotation
Register Base |
GETF.EXP |
Получить экспоненту вещественного числа в GR |
GETF.SIG |
Получить мантиссу вещественного числа в GR |
GETF.n |
Получить вещественное число в GR (n = S, D) |
SETF.EXP |
Задать экспоненту вещественного числа из GR |
SETF.SIG |
Задать мантиссу вещественного числа из GR |
SETF.n |
Присвоить вещественному числу значение из GR (n = S, D) |
ALLOC |
Выделить регистровый кадр |
Команды передачи управления
Имя |
Описание |
BR |
Безусловный переход |
BRL |
Безусловный переход по указанному адресу |
BRP |
Предсказание о будущем переходе |
BR.COND |
Условный переход |
BR.CALL |
Условный вызов процедуры |
BR.RET |
Условный возврат из процедуры |
BR.IA |
Переход на процедуру IA-32 |
BR.CLOOP |
Переход в цикле со счетчиком |
BR.CTOP |
Переход на следующую итерацию программно-конвейеризованного цикла со счетчиком |
BR.CEXIT |
Выход из программно-конвейеризованного цикла со счетчиком |
BR.WTOP |
Переход на следующую итерацию программно-конвейеризованного цикла типа while |
BR.WEXIT |
Выход из программно-конвейеризованного цикла типа while |
CHK.S |
Проверить загрузку спекулятивную по управлению |
CHK.A |
Проверить загрузку спекулятивную по данным |
FCHKF |
Проверка флагов вещественной арифметики |
BREAK |
Прерывание Break Instruction Fault |
Команды вещественной арифметики
Имя |
Описание |
FMA |
Вещественное: A * B + C |
FMS |
Вещественное: A * B - C |
FNMA |
Вещественное: - A * B + C |
FMPY |
Вещественное: A * B (FMA) |
FNMPY |
Вещественное: - A * B (FNMA) |
FSUB |
Вещественное: A - B (FMS) |
FNORM |
Нормализация вещественного числа (FMA) |
FNEG |
Вещественное: - A (FMERGE) |
FABS |
Модуль вещественного числа (FMERGE) |
FNEGABS |
Минус модуль вещественного числа (FMERGE) |
FRCPA |
Приближенное вычисление: 1 / X |
FRSQRTA |
Приближенное вычисление: 1 / sqrt(X) |
FCMP |
Вещественное сравнение |
FMIN |
Вычисление минимума |
FMAX |
Вычисление максимума |
FAMIN |
Вычисление минимума по модулю |
FAMAX |
Вычисление максимума по модулю |
FCVT.FX |
Преобразовать вещественное число в знаковое целое |
FCVT.FXU |
Преобразовать вещественное число в беззнаковое целое |
FCVT.XF |
Преобразовать знаковое целое число в вещественное |
FCVT.XUF |
Преобразовать беззнаковое целое число в вещественное |
FCLASS |
Проверить класс вещественного числа |
FMERGE.S |
Соединить знак одного вещественного числа с мантиссой и экспонентой другого |
FMERGE.NS |
Соединить отрицание знака одного вещественного числа с мантиссой и экспонентой другого |
FMERGE.SE |
Соединить знак и экспоненту одного вещественного числа с мантиссой другого |
FAND |
Логическое И |
FANDCM |
Логическое И-НЕ |
FOR |
Логическое ИЛИ |
FXOR |
Логическое исключающее ИЛИ |
FCLRF |
Сбросить флаги вещественной арифметики |
FSETC |
Задать управляющие биты вещественной арифметики |
XMA.L |
Целочисленное: A * B + C (на вещественных регистрах): младшие 64 бита |
XMA.LU |
Беззнаковое целочисленное: A * B + C (на вещественных регистрах): младшие 64 бита (XMA.L) |
XMA.H |
Целочисленное: A * B + C (на вещественных регистрах): старшие 64 бита |
XMA.HU |
Беззнаковое целочисленное: A * B + C (на вещественных регистрах): старшие 64 бита |
XMPY.L |
Целочисленное: A * B (на вещественных регистрах): младшие 64 бита (XMA.L) |
XMPY.LU |
Беззнаковое целочисленное: A * B (на вещественных регистрах): младшие 64 бита (XMA.L) |
XMPY.H |
Целочисленное: A * B (на вещественных регистрах): старшие 64 бита (XMA.H) |
XMPY.HU |
Беззнаковое целочисленное: A * B (на вещественных регистрах): старшие 64 бита (XMA.HU) |
Команды параллельной вещественной арифметики
Имя |
Описание |
FPMA |
Параллельное вещественное: A * B + C |
FPMS |
Параллельное вещественное: A * B - C |
FPNMA |
Параллельное вещественное: - A * B + C |
FPMPY |
Параллельное вещественное: A * B (FPMA) |
FPNMPY |
Параллельное вещественное: - A * B (FPNMA) |
FPNEG |
Параллельное вещественное: -A (FPMERGE) |
FPABS |
Вычисление модуля двух чисел (FPMERGE) |
FPNEGABS |
Вычисление отрицания модуля двух чисел (FPMERGE) |
FPRCPA |
Параллельное приближенное вычисление: 1 / X |
FPRSQRTA |
Параллельное приближенное вычисление: 1 / sqrt(X) |
FPCMP |
Параллельное вещественное сравнение |
FPMIN |
Параллельное вычисление минимума |
FPMAX |
Параллельное вычисление максимума |
FPAMIN |
Параллельное вычисление минимума по модулю |
FPAMAX |
Параллельное вычисление максимума по модулю |
FPCVT.FX |
Параллельное преобразование вещественных чисел в signed int |
FPCVT.FXU |
Параллельное преобразование вещественных чисел в unsigned int |
FPMERGE.S |
Соединить знаки одного вектора с мантиссами и экспонентами другого |
FPMERGE.NS |
Соединить отрицание знаков одного вектора с мантиссами и экспонентами другого |
FPMERGE.SE |
Соединить знаки и экспоненты одного вектора с мантиссами другого |
FMIX.L |
Составить вектор из левых чисел двух векторов |
FMIX.R |
Составить вектор из правых чисел двух векторов |
FMIX.LR |
Составить вектор из левого числа одного вектора и правого числа другого |
FSXT.L |
Распаковать левое вещественное число вектора и расширить с учетом знака левого числа другого вектора |
FSXT.R |
Распаковать правое вещественное число вектора и расширить с учетом знака правого числа другого вектора |
FPACK |
Упаковать два вещественных числа в вектор |
FSWAP |
Составить вектор из правого числа второго вектора и левого числа первого |
FSWAP.NL |
Составить вектор из правого числа второго вектора со сменой знака и левого числа первого |
FSWAP.NR |
Составить вектор из правого числа второго вектора и левого числа первого со сменой знака |
FSELECT |
Выбор значений результирующего вектора из двух векторов |
Системные и другие команды
Имя |
Описание |
FLUSHRS |
Сохранить регистры стека |
FC |
Очистить кэш-строку |
PTC.E |
Очистить элемент TLB |
INVALA |
Очистить ALAT |
INVALA.E |
Очистить элемент ALAT |
MF |
Упорядочение предыдущих обращений к памяти относительно последующих |
SRLZ.I |
Упорядочить поток команд |
SRLZ.D |
Упорядочить поток данных |
SYNC.I |
Синхронизировать кэши команд и данных |
NOP |
Нет операции |