- •Лекция 26
- •Классификация вычислительный систем по
- •SIMD расширения в IA-32
- •Программное окружение технологии MMX
- •MMX-регистры
- •Форматы данных MMX
- •SIMD модель исполнения
- •Виды целочисленной SIMD
- •Виды целочисленной SIMD
- •Формат мнемоники команд
- •Виды MMX-команд
- •Команды передачи данных
- •Команды сложения и
- •Команды умножения
- •Команды умножения
- •Команды сравнения
- •Логические команды
- •Команды сдвига
- •Команды упаковки
- •Команды распаковки
- •Команды распаковки
- •Дополнительные MMX-
- •Дополнительные MMX- команды
- •Технология SSE
- •Программное окружение SSE
- •Регистр
- •Система команд SSE
- •Система команд SSE
- •Система команд SSE
- •Команды передачи данных SSE
- •Команды передачи данных SSE
- •Арифметические команды SSE
- •Арифметические команды SSE
- •Команды сравнения
- •Логические команды
- •Команды преобразования
Виды MMX-команд
Команды сложения и вычитания
Команды сдвига
Команды умножения
Команды сравнения
Команды упаковки и распаковки
Команды передачи данных
Команды передачи данных
MOVD – пересылка 32-разрядного значения:
из памяти или 32-разрядного РОН в MMX-регистр (старшие разряды заполняются нулями),
из одного MMX-регистра в другой (старшие разряды заполняются нулями),из младших разрядов MMX-регистра в память или в 32-разряный РОН.
MOVQ – пересылка 64-разрядного значения:из памяти в MMX-регистр,
из одного MMX-регистра в другой,из MMX-регистра в память.
Это единственные MMX-команды, у которых выходной операнд может находится в памяти или РОН.
EMMS – очистка всех MMX-регистров
Команды сложения и
вычитания
PADDB, PADDW, PADDD – сложение по принципу циклической арифметики.
PADDSB, PADDSW – сложение по принципу арифметики со знаковым насыщением.
PADDUSB, PADDUSW – сложение по принципу арифметики с незнаковым насыщением.
PSUBB, PSUBW, PSUBD – вычитание по принципу циклической арифметики.
PSUBSB, PSUBSW – вычитание по принципу арифметики со знаковым насыщением.
PSUBUSB, PSUBUSW – вычитание по принципу арифметики с незнаковым насыщением.
У этих команд два операнда: 1 операнд – назначение (MMX-регистр), 2 операнд – источник (MMX-регистр или память).
Команды умножения
PMULHW – попарное умножение 16-разрядных слов со знаком. Результатом операции являются четыре 32-разрядных числа. Старшие 16 разрядов результата сохраняются в назначении, а младшие 16 разрядов теряются.
PMULLW – попарное умножение 16-разрядных слов со знаком. Результатом операции являются четыре 32-разрядных числа. Младшие 16 разрядов результата сохраняются в назначении, а старшие 16 разрядов теряются.
Полный результат получают выполняя следующие шаги:
1.Получить старшие 16 бит произведения, используя команду pmulhw.
2.Получить младшие 16 бит произведения, используя команду pmullw.
3.Объединить частичные результаты в одно двойное слово с помощью команд punpckhwd и punpcklwd.
Команды умножения
PMADDWD – попарное умножение 16-разрядных слов со знаком, находящихся в двух операндах. После получения в результате четырех 32-разрядных произведений первое произведение складывается со вторым, а третье с четвертым. Суммы записываются в 32-разрядные слова выходного операнда.
Команды сравнения
PCMPEQB, PCMPEQW, PCMPEQD – попарное сравнение элементов данных (целочисленных значений) входного и выходного операндов. Если элемент данных выходного операнда равен соответствующему элементу входного, то такой элемент заполняется единицами. В противном случае – нулями.
PCMPGTB, PCMPGTW, PCMPGTD – попарное сравнение элементов данных (целочисленных знаковых значений) входного и выходного операндов. Если элемент данных выходного операнда больше соответствующего элемента входного, то такой элемент заполняется единицами. В противном случае – нулями.
Логические команды
Логические команды выполняются над 64-разрядными данными.
PAND – вычисляет поразрядное логическое И,PANDN – выполняет поразрядную операцию НЕ над выходным операндом, а затем поразрядную операцию И над преобразованным выходным операндом и входным операндом,
POR – вычисляет поразрядное логическое ИЛИ,PXOR – вычисляет поразрядное исключающее ИЛИ.
Команды сдвига
PSLLW, PSLLD, PSLLQ – логический сдвиг влево элементов данных, находящихся в выходном операнде, на количество бит, содержащемся во входном операнде. Младшие разряды заполняются нулями.
PSRLW, PSRLD, PSRLQ – логический сдвиг вправо элементов данных, находящихся в выходном операнде, на количество бит, содержащемся во входном операнде. Старшие разряды заполняются нулями.
PSRAW, PSRAD, PSRAQ – арифметический сдвиг вправо элементов данных, находящихся в выходном операнде, на количество бит, содержащемся во входном операнде. Старшие разряды заполняются битом знака.
Команды упаковки
Команды упаковки предназначены для преобразования длинных элементов данных в более короткие. Если исходное значение не помещается в коротком элементе данных, то происходит «насыщение» - результатом считается граничное значение допустимого диапазона выходного типа данных.
PACKSSWB, PACKSSDW – преобразование длинных целочисленных данных со знаком в более короткие.
PACKUSWB, PACKUSDW – преобразование длинных целочисленных данных без знака в более короткие.
Команды распаковки
Команды распаковки предназначены для преобразования коротких элементов данных в более длинные.
PUNPCKHBW, PUNPCKHWD, PUNPCKHDQ – попарное объединение исходных элементов данных, находившихся в старших 32 разрядах обоих операндов. Полученные в результате более длинные элементы данных записываются в выходной операнд. Исходные значения младших разрядов операндов на результат не влияют.
PUNPCKLBW, PUNPCKLWD, PUNPCKLDQ – попарное объединение исходных элементов данных, находившихся в младших 32 разрядах обоих операндов. Полученные в результате более длинные элементы данных записываются в выходной операнд. Исходные значения старших разрядов операндов на результат не влияют.