Команды архитектуры 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 |
Нет операции |