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

Нет операции