0
我想使用使用SSE指令的memcpy函数。我在网上找到了这个文件(ftp://ftp.acer.at/gpl/AS9100/GPL_AS9100/xine-lib/src/xine-utils/memcpy.c)。这是我有这个问题的部分代码:使用SSE指令的Memcpy
__asm__ __volatile__ (
"prefetchnta 320(%0)\n"
"prefetchnta 352(%0)\n"
"movups (%0), %%xmm0\n"
"movups 16(%0), %%xmm1\n"
"movups 32(%0), %%xmm2\n"
"movups 48(%0), %%xmm3\n"
"movntps %%xmm0, (%1)\n"
"movntps %%xmm1, 16(%1)\n"
"movntps %%xmm2, 32(%1)\n"
"movntps %%xmm3, 48(%1)\n"
:: "r" (from), "r" (to) : "memory");
((const unsigned char *)from)+=64;
((unsigned char *)to)+=64;
从和对void *指针和在最后两行,我必须继续这样的错误:
error: lvalue required as left operand of assignment
如果可能的话,请帮助我。
感谢
顺便说一句,你是从C源代码复制,但你在C或C++模式编译? –
非临时存储仅适用于复制大内存大小。经验法则是使用它们的内存大小超过最后一级缓存的一半(通常是L3)。 [但自从常春藤桥你应该使用'REP MOVS'而不是非临时商店](http://stackoverflow.com/a/26256216/2542702)。在任何情况下,编写自己的通用优化memcpy函数都很复杂。 –