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.

所以它是有效的。