Free Pascal 接受 MOVQ xmm, r
Free Pascal accepting MOVQ xmm, r
根据 this page,MOVQ 可以接受以下内容:
MOVQ mm, mm/m64
Move quadword from mm/m64 to mm.
MOVQ mm/m64, mm
Move quadword from mm to mm/m64.
MOVQ xmm1, xmm2/m64
Move quadword from xmm2/mem64 to xmm1.
MOVQ xmm2/m64, xmm1
Move quadword from xmm1 to xmm2/mem64.
但是,我的 Free Pascal 编译器正在接受这个:
MOVQ xmm1, rcx
这是寄存器的移动,支持我的MOVD,不支持MOVQ。
Agner Fog 的 instruction tables 同意上述定义。
为什么编译器接受这个(并且它正在工作)?
如有疑问,请始终查阅官方参考资料,而不是一些晦涩的网页。
这就是 Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 2 (2A, 2B & 2C): Instruction Set Reference, A-Z
说:
66 REX.W 0F 6E /r MOVQ xmm, r/m64 SSE2 Move quadword from r/m64 to
xmm.
所以它是有效的。
根据 this page,MOVQ 可以接受以下内容:
MOVQ mm, mm/m64
Move quadword from mm/m64 to mm.
MOVQ mm/m64, mm
Move quadword from mm to mm/m64.
MOVQ xmm1, xmm2/m64
Move quadword from xmm2/mem64 to xmm1.
MOVQ xmm2/m64, xmm1
Move quadword from xmm1 to xmm2/mem64.
但是,我的 Free Pascal 编译器正在接受这个:
MOVQ xmm1, rcx
这是寄存器的移动,支持我的MOVD,不支持MOVQ。
Agner Fog 的 instruction tables 同意上述定义。
为什么编译器接受这个(并且它正在工作)?
如有疑问,请始终查阅官方参考资料,而不是一些晦涩的网页。 这就是 Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 2 (2A, 2B & 2C): Instruction Set Reference, A-Z 说:
66 REX.W 0F 6E /r MOVQ xmm, r/m64 SSE2 Move quadword from r/m64 to xmm.
所以它是有效的。