- •Лекция 26
- •Классификация вычислительный систем по
- •SIMD расширения в IA-32
- •Программное окружение технологии MMX
- •MMX-регистры
- •Форматы данных MMX
- •SIMD модель исполнения
- •Виды целочисленной SIMD
- •Виды целочисленной SIMD
- •Формат мнемоники команд
- •Виды MMX-команд
- •Команды передачи данных
- •Команды сложения и
- •Команды умножения
- •Команды умножения
- •Команды сравнения
- •Логические команды
- •Команды сдвига
- •Команды упаковки
- •Команды распаковки
- •Команды распаковки
- •Дополнительные MMX-
- •Дополнительные MMX- команды
- •Технология SSE
- •Программное окружение SSE
- •Регистр
- •Система команд SSE
- •Система команд SSE
- •Система команд SSE
- •Команды передачи данных SSE
- •Команды передачи данных SSE
- •Арифметические команды SSE
- •Арифметические команды SSE
- •Команды сравнения
- •Логические команды
- •Команды преобразования
Команды передачи данных SSE
MOVHLPS – пересылка не выровненных 64 бит. Оба операнда – XMM-регистры. Старшие 64 бита источника в младшие 64 бита назначения.
MOVLHPS – пересылка не выровненных 64 бит. Оба операнда – XMM-регистры. Младшие 64 бита источника в старшие 64 бита назначения.
MOVMSKPS – пересылка знакового бита каждого из четырех упакованных чисел входного операнда в младшие четыре бита выходного операнда. Входной операнд – XMM-регистр, выходной операнд – РОН.
MOVSS – пересылка 32 младших разрядов из источника в приемник. При этом один операнд – XMM-регистр, а второй – ячейка памяти.
|
|
Арифметические команды |
|
|
|
||||
|
|
SSE |
||
|
|
ADDPS – параллельное сложение 128-разрядных операндов. Входной |
||
|
|
операнд – XMM-регистр или ячейка памяти. Выходной операнд – XMM- |
||
|
|
регистр. |
||
|
|
ADDSS – скалярное сложение операндов. Входной операнд – XMM-регистр |
||
|
|
или 32-разрядная ячейка памяти. Выходной операнд – XMM-регистр. |
||
|
|
SUBPS – параллельное вычитание 128-разрядных операндов. Входной |
||
|
|
операнд – XMM-регистр или ячейка памяти. Выходной операнд – XMM- |
||
|
|
регистр. |
||
|
|
SUBSS – скалярное вычитание операндов. Входной операнд – XMM- |
||
|
|
регистр или 32-разрядная ячейка памяти. Выходной операнд – XMM- |
||
|
|
регистр. |
||
|
|
MULPS – параллельное умножение 128-разрядных операндов. Входной |
||
|
|
операнд – XMM-регистр или ячейка памяти. Выходной операнд – XMM- |
||
|
|
регистр. |
||
|
|
MULSS – скалярное умножение операндов. Входной операнд – XMM- |
||
|
|
регистр или 32-разрядная ячейка памяти. Выходной операнд – XMM- |
||
|
|
регистр. |
||
DIVPS – параллельное деление 128-разрядных операндов. Входной |
||||
|
|
операнд – XMM-регистр или ячейка памяти. Выходной операнд – XMM- |
||
|
|
регистр. |
||
|
|
DIVSS – скалярное деление операндов. Входной операнд – XMM-регистр |
||
|
|
или 32-разрядная ячейка памяти. Выходной операнд – XMM-регистр. |
||
|
|
|
|
|
Арифметические команды SSE
SQRTPS – параллельное вычисление квадратного корня 128- разрядных операндов. Входной операнд – XMM-регистр или ячейка памяти. Выходной операнд – XMM-регистр.
SQRTSS – скалярное вычисление квадратного корня операнда. Входной операнд – XMM-регистр или 32-разрядная ячейка памяти. Выходной операнд – XMM-регистр.
MAXPS – параллельное получение максимального значения 128- разрядных операндов. Входной операнд – XMM-регистр или ячейка памяти. Выходной операнд – XMM-регистр.
MAXSS – скалярное получение максимального значения операнда. Входной операнд – XMM-регистр или 32-разрядная ячейка памяти. Выходной операнд – XMM-регистр.
MINPS – параллельное получение минимального значения 128- разрядных операндов. Входной операнд – XMM-регистр или ячейка памяти. Выходной операнд – XMM-регистр.
MINSS – скалярное получение минимального значения операнда. Входной операнд – XMM-регистр или 32-разрядная ячейка памяти. Выходной операнд – XMM-регистр.
Арифметические команды SSE
RCPPS – параллельное вычисление обратных значений 128- разрядных операндов. Входной операнд – XMM-регистр или ячейка памяти. Выходной операнд – XMM-регистр.
RCPSS – скалярное вычисление обратного значения операнда. Входной операнд – XMM-регистр или 32-разрядная ячейка памяти. Выходной операнд – XMM-регистр.
RSQRTPS – параллельное вычисление обратных значений корней 128-разрядных операндов. Входной операнд – XMM-регистр или ячейка памяти. Выходной операнд – XMM-регистр.
RSQRTSS – скалярное вычисление обратного значения корня операнда. Входной операнд – XMM-регистр или 32-разрядная ячейка памяти. Выходной операнд – XMM-регистр.
Команды сравнения
Команды сравнения выполняют попарное сравнение упакованных операндов во входном и выходном операндах и устанавливают биты выходного операнда в 1, если сравнение истинно. В противном случае – биты устанавливаются в ноль. Входной операнд – XMM-регистр, 128- или 32-разрядная ячейка памяти. Выходной операнд – XMM-регистр.
CMPEQPS, CMPEQSS – сравнение на «равно».
CMPLTPS, CMPLTSS – сравнение на «меньше». CMPLEPS, CMPLESS – сравнение на «меньше или равно». CMPNEQPS, CMPNEQSS – сравнение на «не равно». CMPNLTPS, CMPNLTSS – сравнение на «не меньше».
CMPNLEPS, CMPNLESS – сравнение на «не меньше или равно».
Команды COMISS и UCOMISS выполняются сравнение младших 32-разрядов операндов, но не изменяют их, а влияют на флаги ZF, PF и CF регистра EFLAGS.
Логические команды
ANDPS – вычисление побитового И над 128-разрядными операндами.
ANDNPS – вычисление побитового И-НЕ над 128-разрядными операндами.
ORPS – вычисление побитового ИЛИ над 128-разрядными операндами.
XORPS – вычисление побитового исключающего ИЛИ над 128- разрядными операндами.
Команды преобразования
CVTPPS2PI – параллельное преобразование двух младших вещественных значений в целочисленные значения. Входной операнд – XMM-регистр или память, выходной операнд – MMX- регистр.
CVTPSS2SI – скалярное преобразование младшего вещественного значений в целочисленные значения. Входной операнд – XMM- регистр или память, выходной операнд – РОН.
CVTTPS2PI – параллельное преобразование двух младших вещественных значений в целочисленные значения. Входной операнд – XMM-регистр или память, выходной операнд – MMX- регистр.
CVTTSS2SI – скалярное преобразование младшего вещественного значений в целочисленные значения. Входной операнд – XMM- регистр или память, выходной операнд – РОН.
CVTPPI2PS – параллельное преобразование двух 32-разрядных целых чисел в вещественные значения. Входной операнд – MMX- регистр или память, выходной операнд – XMM-регистр.
CVTSI2SS – скалярное преобразование 32-разрядных целого числа в вещественное значение. Входной операнд – РОН или память, выходной операнд – XMM-регистр.