它们是互补的。
每个新的指令集扩展都会添加新指令并最终添加新的编程模型(例如新寄存器)。
没有一个被弃用,出于兼容性原因,弃用指令几乎是不可能的。然而,一些可选扩展可能不存在或从较新的型号(如 AMD 的 FMA4)中删除,如果不是很广泛。
但是有些是退化的,例如可以使用 FPU 和 MMX 完成的所有事情都可以使用 SSE+ 更有效地完成。
从某种意义上说,它们不是相互排斥的,您可以使用其中一种或另一种,毕竟它们是指令而不是操作模式(例如真实模式与保护模式)。
唯一可能的“冲突”是在 MMX 和 FPU 之间,因为它们共享同一组寄存器的下部,但具有不同的编程模型。
新的向量寄存器已经从 128 位增长到 256 位和 512 位,每次以前的寄存器都变成了新寄存器的低位部分。
您可以一起使用它们,它们提供特定的硬件支持来实现简单的操作。
它们就像乐高积木,你只受你的想象力(或设计师的想象力)的限制。
这里是这个指令集扩展的简单列表。
仅列出了部分特性,完整参考请参见Intel Manual Vol1第 9 至 14 章。
另请参阅https://hjlebbink.github.io/x86doc/以获取英特尔第 2 卷(指令集参考)手册的目录,其中包含在该手册条目中添加说明的扩展列表。
MMX
引入了 8 个 64 位寄存器 (MM0-MM7) 和指令来处理 8 个有符号/无符号字节、4 个有符号/无符号字、2 个有符号/无符号 dword。
3D现在!
向 MMX 添加对单精度浮点操作数的支持。支持的操作很少,例如加法、减法、乘法。
SSE
引入了 8 个/16 个 128 位寄存器 (XMM0-XMM7/15) 和指令来处理四个单精度浮点操作数。也在 MMX 寄存器上添加整数操作。(SSE 的 MMX 整数部分有时称为 MMXEXT,并在一些没有 xmm 寄存器和 SSE 浮点部分的非 Intel CPU 上实现。)
SSE2
引入指令以使用 2 个双精度浮点操作数,以及 128 位 xmm 寄存器中的压缩字节/字/双字/qword 整数。
SSE3
添加了一些不同的指令(主要是浮点),包括一种lddqu
在 Pentium 4 上更好的特殊类型的非对齐加载()、同步指令、水平加/减。
SSSE3
同样是一组不同的指令,主要是整数。第一个从寄存器而不是硬编码 ( pshufb
) 中获取其控制操作数的 shuffle。更多的水平处理、shuffle、打包/解包、mul+add on bytes,以及一些专门的整数 add/mul 东西。
SSE4 (SSE4.1, SSE4.2)
增加很多指令:通过为所有整数数据类型(尤其是32位整数一直缺乏)提供min和max等操作来填补很多空白,以前整数min 仅适用于无符号字节和有符号 16 位。还有缩放、FP 舍入、混合、线性代数运算、文本处理、比较。也是读取视频内存或将其复制回主内存的非临时负载。(以前只有 NT 商店可用。)
AESNI
添加对加速 AES 对称加密/解密的支持。
AVX
添加八个/十六个 256 位寄存器 (YMM0-YMM7/15)。
支持所有以前的浮点数据类型。三操作数指令。
FMA
Add Fused Multiply Add 和相关指令。
AVX2
添加对整数数据类型的支持。
AVX512F
增加 8 个/32 个 512 位寄存器 (ZMM0-ZMM7/31) 和 8 个 64 位掩码寄存器 (k0-k7)。将大多数先前的指令提升到 512 位宽。AVX512 的可选部分添加了指数和倒数指令 (AVX512ER)、分散/聚集预取 (AVX512PF)、分散冲突检测 (AVX512CD)、压缩、扩展。
IMCI(英特尔至强
融核)
AVX512 的早期开发,用于第一代英特尔至强融核(Knight's Corner)协处理器。