Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Целочисленное MMX расширение

Поиск

Обработка данных MMX-расширения может выполняться с использованием:

· циклической арифметики (wraparound arithmetic),

· арифметики с насыщением (saturation arithmetic).

Большинство команд технологии ММХ обрабатывают данные по правилам циклической арифметики, а некоторые команды задействуют арифметику с насыщением. Если команда задействует циклическую арифметику (другое название — арифметика с циклическим переносом) и результат операции выходит за двоичную разрядную сетку используемого типа данных, то «лишние» старшие биты результата отбрасываются.

Если команда использует арифметику с насыщением и результат операции превышает максимальное представимое значение, то в выходной операнд записывается это максимальное значение (происходит «насыщение»). Аналогично, если результат операции оказывается меньше нижней границы допустимого диапазона, то в выходной операнд записывается минимальное возможное значение.

В арифметике с насыщением ММХ-команды сложения, вычитания и упаковки данных могут обрабатывать числа со знаком или без знака. Данные со знаком и без знака имеют различный допустимый диапазон. Следовательно, если используется арифметика с насыщением, то при выходе результата операции за пределы допустимого диапазона в выходной операнд записываются различные значения, в зависимости от типа данных.

Синтаксис ММХ-команд. Большинство команд в мнемонике имеют суффикс, который определяет тип данных и используемую арифметику:

· US (Unsigned Saturation) — арифметика с насыщением, данные без знака или, по-другому, беззнаковое насыщение. Если команда использует арифметику с насыщением и результат операции превышает максимальное представимое значение, то в выходной операнд записывается это максимальное значение (происходит «насыщение»). Аналогично, если результат операции оказался меньше нижней границы допустимого диапазона, то в выходной операнд записывается минимально возможное значение.

· S или SS (Signed Saturation) — арифметика с насыщением для данных со знаком (или знаковое насыщение).

· Если в суффиксе нет ни символа S ни символов SS, то применяется циклическая арифметика (wraparound). Если в этом случае результат операции выходит за двоичную разрядную сетку используемого типа данных, то «лишние» старшие биты результата отбрасываются.

· b, w, d, q — эти буквы в конце имени указывают тип данных. Если в суффиксе есть две из этих букв, то первая соответствует входному операнду, вторая — выходному.

Синтаксис MMX команд:

· Мнемоника приемник, источник

· Мнемоника приемник, источник, маска

· Мнемоника приемник

После обзора команды будут рассмотрены подробно.

Категория Подкатегория Команды
Инициализация   EMMS
Передача данных Пересылки MOVD, MOVQ
Упаковка данных   PACKSSWB, PACKSSDW – числа со знаком PACKUSWB – числа без знака
Распаковка данных   PUNPCKHBW, PUNPCKHWD, PUNPCKHDQ – старшая половина PUNPCKLBW, PUNPCKLWD, PUNPCKLDQ – младшая половина
Арифметика Сложение Вычитание Умножение PADD, PADDS, PADDUS PSUB, PSUBS, PSUBUS PMULHW, PMULLW, PMADDWD
Логика   PAND, PANDN, POR, PXOR
Сдвиги   PSLLW, PSLLD, PSLLQ – логические влево PSRLW, PSRLD, PSRLQ – логические вправо PSRAW, PSRAD – арифметические (вправо)
Сравнения   PCMPEQB, PCMPEQW, PCMPEQD – на равенство PCMPGTB, PCMPGTW, PCMPGTD – на значение
Дополнительные Вычисления PAVGB, PAVDW - среднее значеие PSADBW – сумма разностей
Извлечения PEXTRW – извлечь слово PINSRW – вставить слово PMAXUB, PMAXSW – извлечь максимальное PMINUB, PMINSW – извлечь минимальное
Маска из знаков байтов PMOVMSKB

Инициализация.

Команда Описание
EMMS Empty MMx State Очистка стека регистров MMX. Установка всех единиц в слове тегов.

Передача данных. Данные передаются между:

· регистрами MMX,

· регистром MMX и регистром основного процессора,

· регистром MMX и памятью.

Если размер приемника меньше размера источника, то лишние разряды обнуляются.

Команда Описание
MOVD приемник, источник MOVe Double word – переместить двойное слово (32 разряда).
MOVQ приемник, источник MOVe Quarter word – переместить учетверенное слово (64 разряда).

Упаковка данных. ММХ-команды упаковки преобразуют длинные элементы данных A6- и 32-разрядные слова) в более короткие. Если исходное значение «не помещается» в коротком элементе данных, то происходит «насыщение» — результатом считается граничное значение допустимого диапазона выходного типа данных.

Мнемоника Описание
PACKSSWB PACK with Signed Saturation Words to Bytes Упаковка со знаковым насыщением слов приемника (регистра MMX) источника (память или регистр MMX) в байты, расположенные в приемнике (регистре MMX). Пример:   Слова приемника MM0 упаковываются в байты младшей части применика MM0. Слова источника MM1 упаковываются в байты старшей части применика MM0.
PACKUSWB PACK with Unigned Saturation Words to Bytes Упаковка с беззнаковым насыщением знаковых слов приемника (регистра MMX) источника (память или регистр MMX) в байты без знака, расположенные в приемнике (регистре MMX). Отрицательные числа преобразуются в нули.
PACKSSDW PACK with Signed Saturation Double words to Words Упаковка со знаковым насыщением двойных слов приемника (регистра MMX) и источника (память или регистр MMX) в слова, расположенные в приемнике (регистре MMX). Пример:   Двойные слова приемника MM1 упаковываются в байты младшей части применика MM1. Двойные слова источника MM2 упаковываются в байты старшей части применика MM1.

Распаковка данных. MMX-команды распаковки попарно объединяют элементы данных из обоих операндов в более длинные элементы выходного операнда. Этими командами можно пользоваться для увеличения числа значащих разрядов при вычислениях.

Мнемоника Описание
PUNPCKHBW P UNPaCK High packed Byfes to Words Распаковывает старшие части приемника и источника в приемник. Происходит чередование в регистре назначения байт старшей половины источника с байтами старшей половины приемника. Байты старшей половины приемника MM0 распаковываются в нечетные байты приемника MM1. Байты старшей половины источника MM1 распаковываются в четные байты приемника MM0.
PUNPCKLBW P UNPaCK Low packed Byfes to Words Распаковывает младшие части приемника и источника в приемник. Происходит чередование в регистре назначения байт младшей половины источника с байтами младшей половины приемника. Пример:
PUNPCKHWD P UNPaCK High packed Words to Double words Распаковывает старшие части приемника и источника в приемник. Происходит чередование в регистре назначения слов старшей половины источника со словами старшей половины приемника.
PUNPCKLWD P UNPaCK Low packed Words to Double words Распаковывает младшие части приемника и источника в приемник. Происходит чередование в регистре назначения слов младшей половины источника со словами младшей половины приемника. Пример:
PUNPCKHDQ P UNPaCK High packed Double words to Quad words. Распаковывает старшие части приемника и источника в приемник. Происходит чередование в регистре назначения слов старшей половины источника со словами старшей половины приемника. .
PUNPCKLDQ P UNPaCK Low packed Double words to Quad words. Распаковывает младшие части приемника и источника в приемник. Происходит чередование в регистре назначения двойных слов младшей половины источника с двойными словами младшей половины приемника. Пример:

Cложение и вычитание. ММХ-команды сложения и вычитания работают с упакованными байтами и словами со знаком и без знака, а также с упакованными двойными словами со знаком. Они могут использовать как циклическую арифметику, так и арифметику с насыщением.

Входной операнд – регистр MMX или память.

Выходной операнд – регистр MMX.

Мнемоника Описание
PADDB Packed ADDition Bytes Сложение упакованных байт. без насыщения (с циклическим переполнением)
PADDW Packed ADDition Words Сложение упакованных слов. без насыщения (с циклическим переполнением).
PADDD Packed ADDition Double words Сложение упакованных двойных слов без насыщения (с циклическим переполнением).
PADDSB Packed ADDition with sighed Saturation Bytes Сложение упакованных байт со знаковым насыщением.
PADDSW Packed ADDition with sighed Saturation Words Сложение упакованных слов со знаковым насыщением.
PADDUSB Packed ADDition with Unsighed Saturation Bytes Сложение упакованных байт с беззнаковым насыщением.
PADDUSW Packed ADDition with Unsighed Saturation Words Сложение упакованных слов с беззнаковым насыщением. Пример; Серым цветом выделено слово результата, в котором произошло насыщение.
PSUBB Packed SUBtraction Bytes Вычитание упакованных байт без насыщения (с циклическим антипереполнением).
PSUBW Packed SUBtraction Words Вычитание упакованных слов без насыщения (с циклическим антипереполнением).
SUBD Packed SUBtraction Double words Вычитание упакованных двойных слов без насыщения (с циклическим антипереполнением).
PSUBSB Packed SUBtraction with signed Saturanion Bytes Вычитание упакованных знаковых байт с насыщением.
PSUBSW Packed SUBtraction with signed Saturanion Words Вычитание упакованных знаковых слов с насыщением.
PSUBUSB Packed SUBtraction with Unsigned Saturanion Bytes Вычитание упакованных беззнаковых байт с насыщением.
PSUBUSW Packed SUBtraction with Unsigned Saturanion Bytes Вычитание упакованных беззнаковых слов с насыщением.

Умножение. ММХ-команды умножения попарно перемножают 16-разрядные слова операндов, что дает четыре 32-разрядных произведения. Все команды формируют результат по принципу циклической арифметики:

Мнемоника Описание
PMULHW Packed Multiplay and return High Words Попарное умножение 4 знаковых слов источника (регистр MMX или память) на 4 знаковых слова приемника (регистр MMX). Результатом операции являются 4 32-разрядных произведения, при этом старшие разряды произведений сохраняются в 16-разрядных словах приемника, а младшие разряды произведений теряются. Пример:
PMULLW Packed Multiplay and return Low Words Попарное умножение 4 знаковых слов источника (регистр MMX или память) на 4 знаковых слова приемника (регистр MMX). Результатом операции являются 4 32-разрядных произведения, при этом младшие разряды произведений сохраняются в 16-разрядных словах приемника, а старшие разряды произведений теряются.
PMADDWD Packed Multiplay and ADD Word to Double word Попарное умножение 4 знаковых слов источника (регистр MMX или память) на 4 знаковых слова приемника (регистр MMX). Два двойных слова результатов умножения младших слов суммируются и записываются в младшее двойное слово операнда назначения. Два двойных слова результатов умножения старших слов суммируются и записываются в старшее двойное слово операнда назначения. Пример:

Логика. Логические ММХ-команды выполняют поразрядные логические операции над всеми 64 битами своих операндов. Они реализуют логические операции И, ИЛИ, И-НЕ, исключающего ИЛИ:

Мнемоника Описание
PAND Packed logical AND Логическое "И".
PANDN Packed logical AND and Not Логическое "И-НЕ".
POR Packed logical OR Исключающее "ИЛИ".
PXOR Packed logical eXclusive OR Исключающее "ИЛИ".

Сдвиги. ММХ-команды сдвига выполняют сдвиг каждого элемента данных (16-, 32- или 64-разрядного слова) в приемнике на величину, задаваемую источником. Среди команд сдвига выделяют команды арифметического и логического сдвига. При выполнении команд арифметического сдвига освобождающиеся разряды элементов заполняются знаком числа (старший бит) и могут принимать значение как 0, так и 1, в то время как при выполнении команд логического сдвига освободившиеся разряды заполняются нулями.

Мнемоника Описание
PSLLW Packed Shift Left Logical Words Логический сдвиг влево упакованных слов приемника на количество бит, указанных в источнике, с заполнением младших бит нулями.
PSLLD Packed Shift Left Logical Double words Логический сдвиг влево упакованных двойных слов приемника на количество бит, указанных в источнике, с заполнением младших бит нулями.
PSLLQ Packed Shift Left Logical Quarter words Логический сдвиг влево упакованного учетвернного слова приемника на количество бит, указанных в источнике, с заполнением младших бит нулями.
PSRLW Packed Shift Right Logical Words Логический сдвиг вправо упакованных слов приемника на количество бит, указанных в источнике, с заполнением старших бит нулями.
PSRLD Packed Shift Right Logical Double words Логический сдвиг вправо упакованных двойных слов приемника на количество бит, указанных в источнике, с заполнением старших бит нулями.
PSRLQ Packed Shift Right Logical Quarter words Логический сдвиг вправо упакованного учетверенного слова приемника на количество бит, указанных в источнике, с заполнением старших бит нулями.
PSRAW Packed Shift Right Arithmetic Words Арифметический сдвиг вправо упакованных знаковых слов приемника на количество бит, указанных в источнике, с заполнением освобождаюшихся бит битами знаковых разрядов.
PSRAD Packed Shift Right Arithmetic Double words Арифметический сдвиг вправо упакованных двойных знаковых слов премника на количество бит, указанных в источнике, с заполнением освобождаюшихся бит битами знаковых разрядов.

Сравнения. ММХ-команды сравнения попарно сравнивают элементы данных (байты, 16- или 32-разрядные слова) входного и выходного операндов. В зависимости от результата сравнения соответствующий элемент данных выходного операнда заполняется нулями либо единицами. Эти команды, как и все остальные ММХ-команды, не устанавливают флагов (признаков). В свою очередь, они делятся на две группы: команды обычного сравнения (равно или не равно) и команды сравнения по величине (больше или меньше). Операции сравнения проводятся для упакованных байтов, слов и двойных слов.

Мнемоника Описание
PCMPEQB Packed CoMParE for Equal Byte Попарное сравнение (на равенство) упакованных байт. Все биты элемента результата будут единичными (true) при совпадении соответствующих элементов операндов и нулевыми (false) - при несовпадении.
PCMPEQW Packed CoMParE for Equal Word Попарное сравнение (на равенство) упакованных слов. Все биты элемента результата будут единичными (true) при совпадении соответствующих элементов операндов и нулевыми (false) - при несовпадении.
PCMPEQD Packed CoMParE for Equal Double word Попарное сравнение (на равенство) упакованных двойных слов. Все биты элемента результата будут единичными (true) при совпадении соответствующих элементов операндов и нулевыми (false) - при несовпадении.
PCMPGTB Packed CoMParE for Greater Than Byte Попарное сравнение (по величине) упакованных знаковых байт. Все биты элемента результата будут единичными (true), если соответствующий элемент приемника больше элемента источника, и нулевыми (false) в противном случае.
PCMPGTW Packed CoMParE for Greater Than Word Попарное сравнение (по величине) упакованных знаковых слов. Все биты элемента результата будут единичными (true), если соответствующий элемент приемника больше элемента источника, и нулевыми (false) в противном случае.
PCMPGTD Packed CoMParE for Greater Than Double word Попарное сравнение (по величине) упакованных знаковых двойных слов. Все биты элемента результата будут единичными (true), если соответствующий элемент приемника больше элемента источника, и нулевыми (false) в противном случае.

Дополнительные команды. Сейчас мы рассмотрим еще одну группу команд, которые трудно отнести к какому-либо определенному типу, но которые являются весьма полезными при разработке программ.

Мнемоника Описание
PAVGB Packed AveraGe Bytes Попарно вычисляет средние значения упакованных чисел, представленных байтами. Значения операндов интерпретируются как беззнаковые целые числа. В качестве источника могут выступать ММХ-регистр или 64-разрядная ячейка памяти, приемником служит один из ММХ-регистров.
PAVGW Packed AveraGe Words Попарно вычисляет средние значение упакованных чисел, представленных словами. Значения операндов интерпретируются как беззнаковые целые числа. В качестве источника могут выступать ММХ-регистр или 64-разрядная ячейка памяти, приемником служит один из ММХ-регистров.
PEXTRW Packed EXTRact Word Извлекает одно из 4 упакованных слов входного операнда. Команда имеет три аргумента: источние, приемник и маска. Младшие два бита маски задают в источнике номер упакованного слова, подлежащего извлечению. Извлеченное слово сохраняется в младшем слове приемника. Приемником этой команды может выступать один из 32-разрядных регистров общего назначения. Старшее слово приемника обнуляется.
PINSRW Packed INSeRt Word Вставляет слово в одно из 4 упакованных слов приемника. Приемником является один из ММХ-регистров, а источником может выступать один из 32-разрядных регистров общего назначения, младшее слово которого будет вставлено в приемник. Номер позиции, куда помещается операнд, определяется младшими двумя битами маски и может принимать значения от 0 до 3;
PMAXUB Packed MAXimum Unsigned integer Byte Извлекает максимальное значение из каждой пары упакованных элементов в приемнике и источнике. Операция выполняется над беззнаковыми байтами. В качестве приемника может выступать ММХ-регистр, а в качестве источника — ММХ-регистр или 64-разрядная ячейка памяти.
PMAXSW Packed MAXimum Signed integer Word Извлекает максимальное значение из каждой пары упакованных элементов в приемнике и источнике. Операция выполняется над знековыми словами. В качестве приемника может выступать ММХ-регистр, а в качестве источника — ММХ-регистр или 64-разрядная ячейка памяти.
PMINUB Packed MINimum Unsigned integer Byte Извлекает минимальное значение из каждой пары упакованных элементов в приемнике и источнике. Операция выполняется над беззнаковыми байтами. В качестве приемника может выступать ММХ-регистр, а в качестве источника — ММХ-регистр или 64-разрядная ячейка памяти.
PMINSW Packed MINmum Signed integer Word Извлекает минимальное значение из каждой пары упакованных элементов в приемнике и источнике. Операция выполняется над знековыми словами. В качестве приемника может выступать ММХ-регистр, а в качестве источника — ММХ-регистр или 64-разрядная ячейка памяти.
PMOVMSKB Packed MOVe MaSK Byte to integer Формирует байтовую маску, содержащий знаковые биты 8 байтов, содержащихся в источнике, в качестве которого может выступать один из ММХ-регистров. Примником является 32-разрядный регистр общего назначения, младший байт которого будет содержать результат. Эта команда очень удобна для формирования условных ветвлений в программах.
PSADBV Packed Sum of Absolute Differences Вычисляет сумму абсолютных значений разностей значений беззнаковых байтов источника и приемника. Источником могут выступать ММХ-регистр или 64-разрядная ячейка памяти, а приемником — один из ММХ-регистров.


Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 423; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.59.129.141 (0.013 с.)