编写内联汇编时,有没有办法强制使用 rex.W 前缀?
所以而不是
"psllq $12, %%xmm1\n"
生成66 0f 73 f1 0c
,我想要66 48 0f 73 f1 0c
,带有额外的 0x48 rex.W 前缀。
编辑:我在最初的标题上犯了一个错误,问题出在 clang 而不是 GCC。
insn_sse2.c:11794:11: error: unexpected token in argument list
"rex.W psllq $12, %%xmm1\n"
^
<inline asm>:7:13: note: instantiated into assembly here
rex.W psllq $12, %xmm1
您只需添加
rex.W
前缀即可:这正是 GNU binutils 反汇编您给出的操作码字节的方式。来自包含内容的文件 psllq.s
我们可以运行
as psllq.s -o psllq.o && objdump -d psllq.o
得到: