为何x86架构的ldmxcsr/stmxcsr指令仅支持内存操作数?
x86 MXCSR寄存器的操作限制解析
在x86架构里,操作MXCSR寄存器有个很别扭的限制:不能直接用通用寄存器来读写它,要是硬编码寄存器作为操作数,立马会触发#UD无效操作异常。
MXCSR主要用来检测浮点异常、调整浮点环境,这两类操作本来完全没必要绕内存中转,现在的设计效率确实不高。内存操作数唯一的实用场景,就是不用额外寄存器就能给MXCSR加载常量值,但允许寄存器操作数根本不会增加指令编码的复杂度,为啥不同时支持两种操作方式呢?
拿AArch64对比就很明显,它对应的浮点控制寄存器FPCR,直接用msr fpcr, x0这类指令就能从通用寄存器读取数据完成配置,灵活度高太多。
更值得一提的是,英特尔在AVX指令集里给MXCSR相关指令加了VEX编码版本,但操作数的限制依然没放宽——这显然是英特尔有意做出的设计限制,而非技术上的无奈。
内容的提问来源于stack exchange,提问作者Ovinus Real
相关产品推荐
相关产品推荐

