Команды Enhanced 3DNow! ( начиная с Athlon )
Инструкции технологии Enhanced 3DNow! предназначены для ускорения обработки 3D в приложениях и являются расширенным набором инструкций технологии 3DNow! . Каждая инструкция технологии Enhanced 3DNow! работает с упакованными данными (два 32-битных элемента 64-битных данных). Все инструкции технологии Enhanced 3DNow! работают с теми же регистрами, что и инструкции технологии MMX и 3DNow! . Команды Enhanced 3DNow! имеют следующий синтаксис:
instruction [dest, src]
Здесь instruction - имя команды, dest обозначает выходной операнд, src - входной операнд. Система команд технологии Enhanced 3DNow! содержит 24 дополнительные инструкции (обозначения: mm - MMX-регистр; m8, m64 - память объема 8 и 64 бит соответственно; ir32 - целочисленный регистр ; imm - непосредственный операнд):
PF2IW mm, mm/m64 | команда преобразования с насыщением входного упакованного операнда с плавающей запятой в выходной упакованный операнд с 16-разрядными знаковыми целыми числами. При этом запись осуществляется в младшие 16 бит 32-разрядных элементов выходного операнда. |
PFNACC mm, mm/m64 | команда денакопления данных с плавающей запятой. Данное денакопление выражается следующими формулами: |
mm(dest)[31:0] = mm(dest)[31:0] - mm(dest)[63:32] | |
mm(dest)[63:32] = mm/m64(src)[31:0] - mm/m64(src)[63:32] | |
PFPNACC mmreg1, mmreg2 | команда накопления/денакопления данных с плавающей запятой. Данное накопление/денакопление выражается следующими формулами: |
mm(dest)[31:0] = mm(dest)[31:0] - mm(dest)[63:32] | |
mm(dest)[63:32] = mm/m64(src)[31:0] + mm/m64(src)[63:32] | |
PI2FW mm, mm/m64 | команда преобразования входного упакованного операнда с 16-разрядными знаковыми целыми числами в выходной упакованный операнд с плавающей запятой. При этом считывание осуществляется из младших 16 бит 32-разрядных элементов входного операнда. |
PSWAPD mm, mm/m64 | команда перестановки младшего и старшего элементов входного операнда местами и записи результата в выходной операнд. |
MASKMOVQ mm, mm | команда сохранения выбранных с помощью маски, заданной в старших битах слов второго MMX-регистра, байтов из первого MMX-регистра в памяти по адресу [EDI]. |
MOVNTQ m64, mm | команда прямой записи в память содержимого MMX-регистра без кэширования. |
PAVGB mm, mm/m64 | команда усреднения упакованных беззнаковых 8-битных данных. Сначала вычисляется побайтовая сумма входящего и выходящего операндов (результат 9-битный, поэтому переполнения не происходит), а потом результат увеличивается на единицу и делится пополам. Полученные значения заносятся в выходной операнд. Команда идентична команде PAVGUSB mm, mm/m64 . |
PAVGW mm, mm/m64 | команда усреднения упакованных беззнаковых 16-битных данных. Сначала вычисляется побайтовая сумма входящего и выходящего операндов (результат 17-битный, поэтому переполнения не происходит), а потом результат увеличивается на единицу и делится пополам. Полученные значения заносятся в выходной операнд. |
PEXTRW ir32, mm, imm | команда извлечения слова из MMX-регистра, определенного непосредственным операндом, в целочисленный регистр. |
PINSRW mm, ir32, imm | команда вставки слова из целочисленного регистра в одно из четырех слов MMX-регистра, определенного непосредственным операндом. |
PMAXSW mm, mm/m64 | команда нахождения максимумов из пар соответствующих знаковых слов входного и выходного операндов с упакованными данными. |
PMAXUB mm, mm/m64 | команда нахождения максимумов из пар соответствующих беззнаковых байт входного и выходного операндов с упакованными данными. |
PMINSW mm, mm/m64 | команда нахождения минимумов из пар соответствующих знаковых слов входного и выходного операндов с упакованными данными. |
PMINUB mm, mm/m64 | команда нахождения минимумов из пар соответствующих беззнаковых байт входного и выходного операндов с упакованными данными. |
PMOVMSKB ir32, mm | команда копирования маски, составленной из знаков упакованных байтовых чисел MMX-регистра, в целочисленный регистр с заполнением старших 24 бит нулями. |
PMULHUW mm, mm/m64 | команда попарно перемножает 16-разрядные слова без знака входного и выходного операндов, что дает четыре 32-разрядных произведения. Старшие разряды произведений записываются в 16-разрядные слова выходного операнда. Младшие разряды произведений теряются. |
hrefETCHNTA m8 | команда копирования данных в процессор с минимальным заполнением уровней L1 и L2 кэша (NTA). m8 задает адрес данных в памяти. |
hrefETCHT0 m8 | команда копирования данных в процессор с заполнением всех уровней кэша (T0). m8 задает адрес данных в памяти. |
hrefETCHT1 m8 | команда копирования данных в процессор с заполнением всех уровней кэша за исключением 0-го уровня (T1). m8 задает адрес данных в памяти. |
hrefETCHT2 m8 | команда копирования данных в процессор с заполнением всех уровней кэша за исключением 0-го и 1-го уровней (T2). m8 задает адрес данных в памяти. |
PSADBW mm, mm/m64 | команда вычисления абсолютной суммы отклонения между упакованными словами входного и выходного операндов. Старшие 3 слова выходного операнда заполняются нулями, а младшее слово вычисляется по следующей формуле: |
mm(dest)[15:0] = abs(mm(dest)[7:0] - mm/m64(src)[7:0]) + abs(mm(dest)[15:8] - mm/m64(src)[15:8]) + abs(mm(dest)[23:16] - mm/m64(src)[23:16]) + abs(mm(dest)[31:24] - mm/m64(src)[31:24]) + abs(mm(dest)[39:32] - mm/m64(src)[39:32]) + abs(mm(dest)[47:40] - mm/m64(src)[47:40]) + abs(mm(dest)[55:48] - mm/m64(src)[55:48]) + abs(mm(dest)[63:56] - mm/m64(src)[63:56]) | |
PSHUFW mm, mm/m64, imm8 | команда перестановки слов, заданных во входном операнде. Перестановка осуществляется с помощью задаваемой маски (непосредственный операнд). Всего возможны 24 перестановки. Результат записывается в выходной операнд. |
SFENCE | команда принудительного сохранения данных. |