
- •Расширения x86
- •Основные различия FPU и AVX
- •Команды расширения AVX
- •Синтаксис в документации и GAS
- •Мнемоники инструкций AVX/XOP
- •Особенности архитектуры AVX
- •Обнуление всех регистров сразу
- •Пересылка данных (AVX)
- •Пересылка целиком
- •Пересылка частями на младшую позицию
- •Копирование одного числа на все позиции сразу
- •Арифметика (векторы)
- •Арифметика (части)
- •Арифметические операции (младшие части)

МИЭТ, СПИНТех, КАИ |
Расширение AVX (x=y=zmm) |
1 / 27 |
Расширение AVX (x=y=zmm)
Александра Игоревна Кононова
МИЭТ
6 декабря 2020 г. актуальную версию можно найти на https://gitlab.com/illinc/arch-cs
Команды расширения AVX Пересылка данных (AVX)
Арифметика (векторы) Арифметика (части)
Преобразования и округление
Расширения x86
Основные различия FPU и AVX Регистры AVX: x=ymm и mxcsr
Общая схема кодирования команд (AMD64, том 3)

МИЭТ, СПИНТех, КАИ |
Расширение AVX (x=y=zmm) |
2 / 27 |
Расширения x86
MMX 1997, Intel, регистры mm0 mm7 (мантиссы r0 r7 FPU), целочисленные векторы, не рекомендуется
3DNow! 1998, AMD, улучшение MMX
SSE 1999, Intel, регистры xmm0 xmm7 (64 до xmm15): 128 = 4 float
SSE2 2000, Intel, xmmi как 2 double
SSE3 2004, Intel, новые команды
SSSE3 2006, Intel, упакованные целые
SSE4 2007, Intel, новые команды, " не рекомендуется
AVX 2008, Intel, регистры ymm0 ymm15: 256 = 8 float = 4 double, трёхадресные и четырёхадресные команды; AVX2 целочисленные
AES 2008, Intel, шифрование AES
XOP 2009, AMD, расширение AVX (не поддерживается Intel)
AVX-512 2013, Intel, zmm0 zmm31: 512 = 16 float = 8 double; Xeon, Core-X
Команды расширения AVX Пересылка данных (AVX)
Арифметика (векторы) Арифметика (части)
Преобразования и округление
Расширения x86
Основные различия FPU и AVX Регистры AVX: x=ymm и mxcsr
Общая схема кодирования команд (AMD64, том 3)

|
МИЭТ, СПИНТех, КАИ |
|
Расширение AVX (x=y=zmm) |
3 / 27 |
|
||
|
Основные различия FPU и AVX |
|
|
||||
|
FPU изначально сопроцессор |
|
AVX расширение |
|
|
||
|
|
|
|||||
|
Единообразная система команд |
|
|
Семь систем именования (SSE-AVX2) |
|
||
|
Высокая точность вычислений |
|
|
Высокая скорость вычислений |
|
||
|
Регистры организованы в стек |
|
|
Регистры адресуются по именам |
|
||
|
Все числа в стеке FPU представлены |
|
В одних и тех же x=ymm-регистрах |
|
|||
|
в 10-байтовом формате расширенной |
|
могут храниться разные типы: |
||||
|
точности (преобразование при |
|
|
целочисленные (от байта и выше), |
|||
|
загрузке/выгрузке) |
|
|
float и double |
|
|
|
|
Загрузка данных только из памяти |
|
Загрузка из памяти, регистров |
|
|||
|
или стека FPU |
|
|
x=ymm и РОН |
|
|
|
|
Не обязательно выравнивание |
|
|
Выравнивание на 16 (искл. Unaligned) |
|
Команды расширения AVX Пересылка данных (AVX)
Арифметика (векторы) Арифметика (части)
Преобразования и округление
Расширения x86
Основные различия FPU и AVX Регистры AVX: x=ymm и mxcsr
Общая схема кодирования команд (AMD64, том 3)

МИЭТ, СПИНТех, КАИ |
Расширение AVX (x=y=zmm) |
4 / 27 |
Регистры AVX: x=ymm и mxcsr
Команды расширения AVX Пересылка данных (AVX)
Арифметика (векторы) Арифметика (части)
Преобразования и округление
Расширения x86
Основные различия FPU и AVX Регистры AVX: x=ymm и mxcsr
Общая схема кодирования команд (AMD64, том 3)

V EX 2 f0xC4; 0xC5g
XOP = 0x8F
Поля V EX=XOP : R REX:R (Reg) X REX:X (Index) B REX:B
(R=M или Base)
imm8 может трактоваться как третий регистр
vvvv ещё регистр
всего до 4 операндов
L длина вектора:
0; xmm=128 L = 1; ymm=256 pp понижение разрядности и REP