Набор инструкций XOP

редактировать

Набор инструкций XOP (расширенные операции) , объявленный AMD 1 мая 2009 г., является расширением 128-битных инструкций ядра SSE в наборе инструкций x86 и AMD64 для Bulldozer ядро ​​процессора, выпущенное 12 октября 2011 года. Wever AMD удалила поддержку XOP из Zen (микроархитектура) и далее.

Набор инструкций XOP содержит несколько различных типов векторных инструкций, поскольку изначально задумывался как серьезное обновление до SSE.. Большинство инструкций являются целочисленными инструкциями, но они также содержат инструкции перестановки с плавающей запятой и извлечения дроби с плавающей запятой. См. Указатель для списка типов инструкций.

Содержание
  • 1 История
  • 2 Инструкции умножения-накопления целочисленного вектора
  • 3 Горизонтальное сложение целочисленного вектора
  • 4 Сравнение целочисленного вектора
  • 5 Условное перемещение вектора
  • 6 Сдвиг и поворот целочисленного вектора инструкции
  • 7 Перестановка векторов
  • 8 Извлечение дроби с плавающей запятой
  • 9 ЦП с XOP
  • 10 См. также
  • 11 Ссылки
История

XOP - это пересмотренное подмножество то, что изначально задумывалось как SSE5. Он был изменен, чтобы быть похожим, но не перекрывающимся с AVX, части, которые перекрывались с AVX, были удалены или перемещены в отдельные стандарты, такие как FMA4 (вектор с плавающей запятой умножить-накопить ) и CVT16 (Преобразование с плавающей запятой половинной точности, реализованное как F16C компанией Intel ).

Все инструкции SSE5, которые были эквивалентны или похожи на инструкции в Наборы инструкций AVX и FMA4, объявленные Intel, были изменены для использования кодировки, предложенной Intel. Инструкции Integer без эквивалентов в AVX были классифицированы как расширение XOP. Инструкции XOP имеют байт кода операции 8F (шестнадцатеричный ), но в остальном почти идентична схеме кодирования, как AVX с 3-байтовым префиксом VEX.

Комментаторы видели это как свидетельство того, что Intel не разрешила AMD использовать какую-либо часть большого пространства кодирования VEX. AMD была вынуждена использовать разные коды, чтобы избежать использования любой комбинации кода, которую Intel могла бы используя в своем конвейере разработки для чего-то еще. Схема кодирования XOP максимально приближена к схеме VEX, насколько это технически возможно, без риска перекрытия кодов AMD с будущими кодами Intel. Этот вывод является спекулятивным, поскольку публичной информации о переговорах между двумя компаниями по этому вопросу нет.

Использование байта 8F требует, чтобы m-биты (см. схему кодирования VEX ) имели значение больше или равное 8, чтобы избежать перекрытия с существующими инструкциями. Байт C4, используемый в схеме VEX, не имеет такого ограничения. Это может предотвратить использование m-битов для других целей в будущем в схеме XOP, но не в схеме VEX. Другая возможная проблема заключается в том, что биты pp имеют значение 00 в схеме XOP, в то время как они имеют значение 01 в схеме VEX для инструкций, не имеющих аналогов в устаревших версиях. Это может усложнить использование битов pp для других целей в будущем.

Аналогичная проблема совместимости заключается в различии наборов инструкций FMA3 и FMA4. Первоначально Intel предложила FMA4 в спецификации AVX / FMA версии 3, чтобы заменить FMA с 3 операндами, предложенную AMD в SSE5. После того, как AMD приняла FMA4, Intel отменила поддержку FMA4 и вернулась к FMA3 в спецификации AVX / FMA версии 5 (см. История FMA ).

В марте 2015 года AMD явно указала в описании патча для пакета GNU Binutils, что Zen, его архитектура x86-64 третьего поколения в первой итерации (znver1 - Zen, версия 1), не будет поддерживать инструкции TBM, FMA4, XOP и LWP, разработанные специально для семейства микроконтроллеров Bulldozer. -архитектуры.

Инструкции умножения-накопления целочисленных векторов

Это целочисленная версия набора команд FMA. Это все четыре команды операнда, аналогичные FMA4, и все они работают с целыми числами со знаком.

ИнструкцияОписаниеОперация
VPMACSWW

VPMACSSWW

Умножение накопления (с насыщением) слова на слово2x8 слов (a0-a7, b0-b7) + 8 слов (c0-c7) → 8 слов (r0-r7)

r0 = a0 * b0 + c0, r1 = a1 * b1 + c1,..

VPMACSWD

VPMACSSWD

Умножение накопления (с насыщением) младшего слова на двойное слово2x8 слов (a0-a7, b0-b7) + 4 двойных слова (c0-c3) → 4 двойных слова ( r0-r3)

r0 = a0 * b0 + c0, r1 = a2 * b2 + c1,.

VPMACSDD

VPMACSSDD

Умножение накопления (с насыщением) Двойное слово в двойное слово2x4 двойных слова (a0-a3, b0-b3) + 4 двойных слова (c0-c3) → 4 двойных слова (r0-r3)

r0 = a0 * b0 + c0, r1 = a1 * b1 + c1,..

VPMACSDQL

VPMACSSDQL

Умножить Накопление (с насыщенностью) Младшее двойное слово в четырехслово2x4 двойных слова (a0-a3, b0-b3) + 2 четверных слова (c0-c1) → 2 четверных слова (r0-r3)

r0 = a0 * b0 + c0, r1 = a2 * b2 + c1

VPMACSDQH

VPMACSSDQH

Умножение, накопление (с насыщенностью), двойное слово с высоким значением в четырехсловоДвойное слово 2x4 (a0- a3, b0-b3) + 2 четверных слова (c0-c1) → 2 четверных слова (r0-r3)

r0 = a1 * b1 + c0, r1 = a3 * b3 + c1

VPMADCSWD

VPMADCSSWD

Умножение Добавить слово накопления (с насыщенностью) к двойному слову2x8 слов (a0-a7, b0-b7) + 4 двойных слова (c0-c3) → 4 двойных слова (r0-r3)

r0 = a0 * b0 + a1 * b1 + c0, r1 = a2 * b2 + a3 * b3 + c1,..

Целочисленное векторное сложение по горизонтали

Команды горизонтального сложения добавляют друг к другу соседние значения во входном векторе. Размер вывода в приведенных ниже инструкциях описывает ширину выполняемого горизонтального сложения. Например, горизонтальный байт к слову добавляет два байта за раз и возвращает результат как вектор слов, но байт к четверному слову складывает вместе восемь байтов за раз и возвращает результат как вектор четверных слов. Шесть дополнительных команд горизонтального сложения и вычитания можно найти в SSSE3, но они работают с двумя входными векторами и выполняют только две и две операции.

ИнструкцияОписаниеОперация
VPHADDBW

VPHADDUBW

По горизонтали добавить два байта со знаком / без знака в слово16 байтов (a0-a15) → 8 слов (r0-r7)

r0 = a0 + a1, r1 = a2 + a3, r2 = a4 + a5,...

VPHADDBD

VPHADDUBD

По горизонтали добавить четыре байта со знаком / без знака к двойному слову16 байтов (a0-a15) → 4 двойных слова (r0-r3)

r0 = a0 + a1 + a2 + a3, r1 = a4 + a5 + a6 + a7,...

VPHADDBQ

VPHADDUBQ

По горизонтали добавить восемь подписанных / беззнаковых байтов к четверному слову16 байтов (a0-a15) → 2 четверных слова (r0-r1)

r0 = a0 + a1 + a2 + a3 + a4 + a5 + a6 + a7,...

VPHADDWD

VPHADDUWD

По горизонтали добавить два слова со знаком / без знака в двойное слово8 слов (a0-a7) → 4 двойных слова (r0-r3)

r0 = a0 + a1, r1 = a2 + a3, r2 = a4 + a5,...

VPHADDWQ

VPHADDUWQ

По горизонтали добавить четыре слова со знаком / без знака в четверное слово8 слов (a0-a7) → 2 четверных слова (r0-r1)

r0 = a0 + a1 + a2 + a3, r1 = a4 + a5 + a6 + a7

VPHADDDQ

VPHADDUDQ

По горизонтали добавить два знаковых / беззнаковых двойных слова к четверному слову4 двойных слова (a0-a3) → 2 четверных слова (r0 -r1)

r0 = a0 + a1, r1 = a2 + a3

VPHSUBBWГоризонтальное вычитание двух байтов со знаком до слова16 байтов (a0 -a15) → 8 слов (r0-r7)

r0 = a0-a1, r1 = a2-a3, r2 = a4-a5,...

VPHSUBWDГоризонтальное вычитание двух слов со знаком в двойное слово8 слов (a0-a7) → 4 двойных слова (r0-r3)

r0 = a0-a1, r1 = a2-a3, r2 = a4-a5,...

VPHSUBDQГоризонтальное вычитание двух двойных слов со знаком до четверного слова4 двойных слова (a0-a3) → 2 четверных слова (r0-r1)

r0 = a0-a1, r1 = a2-a3

Целочисленное сравнение векторов

Этот набор инструкций векторного сравнения все принимают немедленный аргумент как дополнительный аргумент. Непосредственно контролирует, какое сравнение выполняется. Для каждой инструкции возможно восемь сравнений. Векторы сравниваются, и все сравнения, которые оцениваются как истинные, устанавливают все соответствующие биты в месте назначения на 1, а ложные сравнения устанавливают все те же биты на 0. Этот результат можно использовать непосредственно в инструкции VPCMOV для векторизованного условного перемещения.

ИнструкцияОписаниеНемедленноеСравнение
VPCOMBСравнить векторные подписанные байты000Меньше
VPCOMWСравнить векторные подписанные слова001Меньше или равно
VPCOMDСравнить векторные подписанные двойные слова010Больше чем
VPCOMQСравнить Четырехзначные слова со знаком011Больше или равно
VPCOMUBСравнить векторные байты без знака100Равно
VPCOMUWСравнить векторные слова без знака101Не равно
VPCOMUDСравнить векторные беззнаковые двойные слова110Ложь
VPCOMUQСравнить векторные четырехзначные беззнаковые слова111True
Векторное условное перемещение

VPCMOV работает как bitwis Вариант инструкций по смешиванию в SSE4. Для каждого бита в селекторе 1 выбирает один и тот же бит в первом источнике, а 0 выбирает такой же во втором источнике. При использовании вместе с приведенными выше инструкциями по сравнению векторов XOP это можно использовать для реализации векторизованного троичного перемещения или, если второй вход совпадает с пунктом назначения, условным перемещением (CMOV).

ИнструкцияОписание
VPCMOVВекторное условное перемещение
Инструкции сдвига и поворота целочисленного вектора

Команды сдвига здесь отличаются от команд в SSE2 в том, что они могут сдвигать каждую единицу на разную величину, используя векторный регистр, интерпретируемый как упакованные целые числа со знаком. Знак указывает направление сдвига или поворота, при этом положительные значения вызывают сдвиг влево, а отрицательный сдвиг вправо Intel указала другой несовместимый набор инструкций сдвига вектора переменной в AVX2.

ИнструкцияОписание
VPROTBУпакованные байты поворота
VPROTWУпакованные слова поворота
VPROTDУпакованные двойные слова поворота
VPROTQУпакованные четырехслови поворота
VPSHABАрифметические байты упакованного сдвига
VPSHAWАрифметические слова с упакованным сдвигом
VPSHADДвойные арифметические слова с упакованным сдвигом
VPSHAQКвадратные арифметические слова с упакованным сдвигом
VPSHLBЛогические байты с упакованным сдвигом
VPSHLWПакетный сдвиг Логические слова
VPSHLDЛогические двойные слова с упакованным сдвигом
VPSHLQЛогические четырехслова с упакованным сдвигом
Перестановка вектора

VPPERM - это отдельная инструкция, которая объединяет SSSE3 инструкция PALIGNR и PSHUFB и добавляет больше к обоим. Некоторые сравнивают это с инструкцией Altivec VPERM. В качестве входных данных он принимает три регистра, первые два - это регистры источника, а третий - регистр выбора. Каждый байт в селекторе выбирает один из байтов в одном из двух входных регистров для вывода. Селектор также может применять эффекты к выбранным байтам, такие как установка его на 0, изменение порядка следования битов и повторение самого значащего бита. Кроме того, все эффекты или вход можно инвертировать.

Инструкции VPERMIL2PD и VPERMIL2PS представляют собой две исходные версии инструкций VPERMILPD и VPERMILPS в AVX, что означает, что, как и VPPERM, они могут выбирать вывод из любого поля в двух входах.

ИнструкцияОписание
VPPERMУпакованный перестановочный байт
VPERMIL2PDПерестановка двух источников с плавающей запятой двойной точности
VPERMIL2PSПерестановка двух источников одиночных -Precision Floating-Point
Извлечение дроби с плавающей запятой

Эти инструкции извлекают дробную часть с плавающей запятой, то есть часть, которая будет потеряна при преобразовании в целое число.

ИнструкцияОписание
VFRCZPDИзвлечь фракцию, упакованную с плавающей запятой двойной точности
VFRCZPSИзвлечь фракцию, упакованную с плавающей запятой одинарной точности
VFRCZSDСкалярная дробная часть с плавающей запятой с двойной точностью
VFRCZSSИзвлечение дробной скалярной числа с плавающей запятой одинарной точности
ЦП с XOP
См. Также
Ссылки
Последняя правка сделана 2021-06-22 06:42:30
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте