MMX
MMX 是一种早期的 x86 紧缩整数指令扩展,使用与 x87 浮点寄存器堆共享架构存储空间的 64 位寄存器。在混合代码中,该共享状态至关重要。
您需要了解的内容
MMX 是一种早期的 x86 紧缩整数指令扩展,使用与 x87 浮点寄存器堆共享架构存储空间的 64 位寄存器。在混合代码中,该共享状态至关重要。
工作原理
MMX 操作将 64 位寄存器视为紧缩整数元素。MMX 寄存器名称是对 x87 寄存器存储的别名引用,而不是提供独立的现代向量状态。EMMS 在使用 MMX 后将 x87 标记状态设为空,以便后续的 x87 代码可以正确使用浮点堆栈。
适用场景
传统多媒体软件可以使用 MMX 进行饱和字节算法。新代码通常改用 XMM 或更宽的向量设施,从而避免 MMX/x87 状态交互。即使在更新得多的处理器上,现有二进制文件仍可能包含 MMX。
如何检查支持与启用状态
CPUID.01H:EDX 第 23 位列举 MMX。调试传统代码时,应同时检查实际指令序列及其 EMMS/状态处理。功能标志无法证明例程正确遵循了调用约定。
SIMD 特性描述的是指令,而不是额外的核心。指令形式决定了元素宽度、有符号性、舍入、对齐方式以及哪些通道相互交互。软件必须保留 ABI 的寄存器状态并使用受支持的执行环境。
该特性未确立的内容
MMX 是整数 SIMD,不是 64 位通用执行或 x86-64 支持。它并不意味着支持 SSE 或更新的扩展。在混合使用 MMX 和 x87 时缺少清理会导致正确性问题,这与 CPU 是否支持这些指令无关。
实践中的兼容性与性能
SSE 系列中后来的名称具有独立的特性位。对于已部署的二进制文件,请检查完整的最低特性集,包括库和启动代码。只有在选择步骤之前未运行任何不受支持的指令时,回退方案才有用。
实用验证核对清单
- 记录所涉及的具体处理器或平台型号,以及应用程序、操作系统和运行时的版本。保留实际错误或要求的原始措辞。
- 查阅该具体型号的制造商参考资料,然后检查程序运行环境中生效的功能与启用状态。
- 逐项比对所选二进制文件或后端的每项要求。仅凭名称相似的特性、别名或宽泛的技术标签是不够的。
- 确认应用程序选择了预期的实现。在不满足要求时,使用其文档中记录的诊断工具和受支持的回退方案。
- 每次只进行一项受支持的更改并重复相同的负载测试。保留原始配置和恢复路径以便随时使用。
若特性已列出但软件无法使用
首先排查出现故障的具体组件。硬件数据库描述的是记录在案的功能;操作系统或虚拟机监控程序可能会呈现不同的生效环境。非法指令错误同样需要调查实际发生故障的指令和二进制构建版本,因为数据损坏或不相关的未受支持指令也可能产生类似症状。
安装适用于该特定平台的受支持应用程序、驱动程序或运行时版本,并在需要时使用厂商文档记录的基线或回退构建版本。软件更新无法凭空创造处理器缺失的指令。固件和安全策略的更改应遵循系统制造商的规程和恢复计划,而非通用的优化方案。
本说明的来源与适用范围
Intel 64 和 IA-32 架构软件开发人员手册 · x86-64 psABI:处理器架构和微架构级别
这些参考资料确立了架构行为和软件要求。它们并不独立验证关联硬件型号页面上的每个特性值。如需了解型号支持情况,请使用该页面的制造商证据并检查实际生效的系统配置。本文不提供基准测试、认证或独立审查日期。
来源与验证
编辑归属:Feex。未记录独立审核日期。 我们的研究方式.
- Intel 64 和 IA-32 架构软件开发人员手册 · 第 1 卷和第 2 卷描述了指定名称的指令族和 CPUID;第 3 卷描述了状态、分页、VMX 和保护控制。架构文档并不代表对某一特定型号的支持。
- x86-64 psABI:处理器架构和微架构级别 · 机器接口,处理器架构:基线和累积 v2/v3/v4 特性表、操作系统状态检查以及部署建议。
这篇文章有用吗?
回答"是"或"否"即可。如果您愿意,可以选择一个原因,或添加一段简短附言。
感谢。这有助于我们改进此页面。