我正在尝试使用SSE指令使用memcpy函数。我在互联网上找到了这个文件(ftp://ftp.acer.at/gpl/AS9100/GPL_AS9100/xine-lib/src/xine-utils/memcpy.c)。这是代码中我遇到问题的一部分:
__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;
from和to to void *指针在最后两行,我发现了这个错误:
error: lvalue required as left operand of assignment
如果有可能,请帮助我。
由于
答案 0 :(得分:3)
(*(const unsigned char **)&from)
是您正在寻找的左值。
但是编写
可能对优化程序更友好from = ((const unsigned char *)from) + 64;
避免了需要内存溢出的address-of运算符。
另一个选择是将参数转换为在函数入口时使用正确类型的局部变量,而不再触摸函数参数。