【问题标题】:Free Pascal accepting MOVQ xmm, rFree Pascal 接受 MOVQ xmm, r
【发布时间】:2015-02-11 16:14:24
【问题描述】:

根据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-ZMOVQ上有两个部分,一个是没有r/m64的MOVQ,另一个是MOVD/MOVQ组合,有r/m64。编译器是对的。

标签: assembly cpu-registers freepascal


【解决方案1】:

如有疑问,请始终查阅官方参考资料,而不是一些晦涩难懂的网页。 这就是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 将四字从 r/m64 移动到 xmm。

所以它是有效的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多