Команды 3DNow! ( начиная с K6-2 ).
Инструкции технологии 3DNow! предназначены для ускорения обработки 3D в приложениях. Процессор может выполнять по две инструкции технологии 3DNow! за такт. Так как каждая инструкция технологии 3DNow! работает с упакованными данными (два 32-битных элемента 64-битных данных), то за такт вычисляются четыре операции с плавающей запятой. Все инструкции технологии 3DNow! работают с теми же регистрами, что и инструкции технологии MMX. Команды 3DNow! имеют следующий синтаксис:
instruction [dest, src]
Здесь instruction - имя команды, dest обозначает выходной операнд, src - входной операнд. Система команд технологии 3DNow! содержит 21 инструкцию (обозначения: mm - MMX-регистр; m8, m64 - память объема 8 и 64 бит соответственно):
FEMMS | команда входа/выхода в/из режима MMX или 3DNow! . |
PAVGUSB mm, mm/m64 | команда усреднения упакованных беззнаковых 8-битных данных. Сначала вычисляется побайтовая сумма входящего и выходящего операндов (результат 9-битный, поэтому переполнения не происходит), а потом результат увеличивается на единицу и делится пополам. Полученные значения заносятся в выходной операнд. |
PF2ID mm, mm/m64 | команда преобразования входного упакованного операнда с плавающей запятой в выходной упакованный операнд с 32-разрядными целыми числами. |
PFACC 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] | |
PFADD mm, mm/m64 | команда сложения упакованных данных с плавающей запятой. |
PFCMPEQ mm, mm/m64 | команда сравнения РАВНО упакованных данных с плавающей запятой. В случае успеха все биты выходного операнда заполняются единицами, а в случае неудачи - нулями. |
PFCMPGE mm, mm/m64 | команда сравнения БОЛЬШЕ ИЛИ РАВНО упакованных данных с плавающей запятой. В случае успеха все биты выходного операнда заполняются единицами, а в случае неудачи - нулями. |
PFCMPGT mm, mm/m64 | команда сравнения БОЛЬШЕ упакованных данных с плавающей запятой. В случае успеха все биты выходного операнда заполняются единицами, а в случае неудачи - нулями. |
PFMAX mm, mm/m64 | команда нахождения максимума упакованных данных с плавающей запятой. При этом максимальное значение заносится в младший элемент выходного операнда, а минимальное значение - в старший элемент выходного операнда. |
PFMIN mm, mm/m64 | команда нахождения минимума упакованных данных с плавающей запятой. При этом минимальное значение заносится в младший элемент выходного операнда, а максимальное значение - в старший элемент выходного операнда. |
PFMUL mm, mm/m64 | команда умножения упакованных данных с плавающей запятой. |
PFRCP mm, mm/m64 | команда приближенного вычисления обратного значения данных с плавающей запятой. В младший и старший элементы выходного операнда заносится приближенное обратное значение (14 бит точности вместо 24 бит) младшего элемента входного операнда. |
PFRCPIT1 mm, mm/m64 | команда уточнения упакованных данных с плавающей запятой. Вычисляется первый промежуточный шаг итерации Ньютона. |
PFRCPIT2 mm, mm/m64 | команда уточнения упакованных данных с плавающей запятой. Вычисляется второй и последний промежуточный шаг итерации Ньютона. Операции PFRCPIT1(PFRSQIT1) и PFRCPIT2 используются после команд PFRCP(PFSQRT) для получения более точных результатов (24 бит точности). |
PFRSQIT1 mm, mm/m64 | команда уточнения значения квадратного корня упакованных данных с плавающей запятой (1 итерационный шаг). Последний итерационный шаг - PFRCPIT2 . |
PFRSQRT mm, mm/m64 | команда вычисления приближенного значения квадратного корня данных с плавающей запятой. В младший и старший элементы выходного операнда заносится приближенное значение (15 бит точности вместо 24 бит) корня квадратного из младшего элемента входного операнда. |
PFSUB mm, mm/m64 | команда вычитания упакованных данных с плавающей запятой. |
PFSUBR mm, mm/m64 | команда обратного вычитания упакованных данных с плавающей запятой: |
mm(dest)[31:0] = mm/m64(src)[31:0] - mm(dest)[31:0] | |
mm(dest)[63:32] = mm/m64(src)[63:32] - mm(dest)[63:32] | |
PI2FD mm, mm/m64 | команда преобразования входного упакованного операнда с 32-разрядными целыми числами в выходной упакованный операнд с плавающей запятой. |
PMULHRW mm, mm/m64 | команда умножения упакованных данных с 16-битными знаковыми целыми числами с последующим округлением и сохранением старших 16 бит произведений. |
hrefETCH(W) m8 | выборка с упреждением в кэш данных 1-го уровня. |