Macos x86_64中的i386 movsxw指令

Macos x86_64中的i386 movsxw指令,macos,assembly,clang,x86-64,att,Macos,Assembly,Clang,X86 64,Att,我正在尝试编译苹果的Libm()。唯一无法正确编译的文件是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:

我正在尝试编译苹果的Libm()。唯一无法正确编译的文件是
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
    ^~~~~~
//Libm-2026/Source/Intel/frexp.s:239:5:
错误:指令助记符“movsxw”无效
movsxw 8+(8+(32-8))(%rsp),%eax
^~~~~~
//Libm-2026/Source/Intel/frexp.s:291:5:
错误:指令助记符“movsxw”无效
movsxw 8(%rsp),%eax
^~~~~~
环顾互联网,我只能找到movsxw指令的非常少的细节,但它似乎确实存在于i386架构中。我正在运行OSX10.9.3和核心i5处理器。宏
\uuuuuux86\u64\uuuuuuu
是预定义的,但是
\uuuuuui386\uuuuuuuuuu
宏似乎不是*

我的印象是x86_64指令集与i386指令集完全兼容。这是不对的吗?我只能假设x86_64指令集中不存在
movsxw
指令,因此我的问题是:它做什么,我可以用x86_64指令集中的什么替换它

*选中:
clang-dM-E-xc/dev/null

movsxb : Sign-extend a byte into the second operand
movsxw : Sign-extend a word (16 bits) into the second operand
movsxl : Sign-extend a long (32 bits) into the second operand

movsxw
使用gcc/as(4.8.1/2.24)在64位模式下对我来说非常适合。我没有在此计算机上安装clang for x86,但您可以尝试指定第二个操作数的大小(即将
movsxw
更改为
movsxwl
,这将是“将字扩展为长符号”)

标准的at&t语法是
movsxw
movswl
,尽管至少有些汇编程序版本似乎也接受前者。

因此,请确认,它们是相同的指令,但由于不接受英特尔语法,我应该用
movswl
替换所有
movsxw
实例?
movsx
是英特尔语法(适用于所有大小),
movswl
是标准的at&t语法(从字到长),而
movsxw
是这两者的奇怪组合,我从未听说过,但我的汇编程序接受了它并创建了相同的指令。啊,我同意你的看法。非常感谢你!