【发布时间】:2014-06-01 05:51:28
【问题描述】:
我正在尝试编译 Apple 的 Libm (version 2026, tarball here)。唯一无法正确编译的文件是Source/Intel/frexp.s,因为
/<path>/Libm-2026/Source/Intel/frexp.s:239:5:
error: invalid instruction mnemonic 'movsxw'
movsxw 8+(8 + (32 - 8))(%rsp), %eax
^~~~~~
/<path>/Libm-2026/Source/Intel/frexp.s:291:5:
error: invalid instruction mnemonic 'movsxw'
movsxw 8(%rsp), %eax
^~~~~~
在互联网上环顾四周,我只能找到很少的 movsxw 指令细节,但它似乎确实存在于 i386 架构中。我正在使用 Core i5 处理器运行 OS X 10.9.3。宏 __x86_64__ 是预定义的,但似乎 __i386__ 宏不是 *。
我的印象是 x86_64 指令集与 i386 集完全兼容。这是不正确的吗?我只能假设 x86_64 指令集中不存在 movsxw 指令,因此我的问题是:它是做什么的,我可以从 x86_64 指令集中用什么替换它?
*检查:clang -dM -E -x c /dev/null
【问题讨论】:
标签: macos assembly clang x86-64 att