Gcc 从使用MOVAPS的x86编译错误

Gcc 从使用MOVAPS的x86编译错误,gcc,x86,sse,simd,mmx,Gcc,X86,Sse,Simd,Mmx,我得到了一个编译错误error:“movaps”的操作数类型不匹配,谷歌搜索还没有找到解决方案movups和addps也会给出相同的错误 以下是相关摘录: # load address into %eax movaps %eax, %mm0 为完整起见,我正在使用-m32编译.s文件,第一个参数缺少一个间接级别,第二个参数需要是XMM寄存器(即128位SSE),而不是MM寄存器(旧的64位MMX): 如果你可以在C或C++中使用本质,而不是编写原始ASM,那么你可以更容易地做这类事情,例如 _

我得到了一个编译错误
error:“movaps”的操作数类型不匹配
,谷歌搜索还没有找到解决方案
movups
addps
也会给出相同的错误

以下是相关摘录:

# load address into %eax
movaps %eax, %mm0

为完整起见,我正在使用
-m32
编译
.s
文件,第一个参数缺少一个间接级别,第二个参数需要是XMM寄存器(即128位SSE),而不是MM寄存器(旧的64位MMX):

如果你可以在C或C++中使用本质,而不是编写原始ASM,那么你可以更容易地做这类事情,例如

__m128 v = _mm_load_ps(ptr);

我认为没有64位(MMX)版本的
movaps
,所以它可能需要
movaps%eax,%xmm0
?@KerrekSB我不知道这一点。(gcc不认可movapsd)。我现在正在浏览Oracle的x86参考手册@PaulR添加
x
似乎没有帮助。您是在尝试使用旧的MMX(64位)向量,还是应该是SSE(128位)?还有,为什么asm,为什么不使用Intrinsic?作业中是否明确说明不能使用Intrinsic?FWIW我查看了一些gcc生成的asm,我看到了
movaps
形式的指令
movaps(%ecx,%eax,4),%xmm0
-我不熟悉语法,但我猜您可能在第一个参数上缺少了一个间接级别。@al92:没关系,这只是一个错误的猜测;我应该检查一下手册。删除。谢谢!我也错过了第()页。
__m128 v = _mm_load_ps(ptr);