Memcpy使用SSE指令

时间:2015-10-20 00:24:33

标签: linux sse memcpy

我正在尝试使用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

如果有可能,请帮助我。

由于

1 个答案:

答案 0 :(得分:3)

(*(const unsigned char **)&from)

是您正在寻找的左值。

但是编写

可能对优化程序更友好
from = ((const unsigned char *)from) + 64;

避免了需要内存溢出的address-of运算符。

另一个选择是将参数转换为在函数入口时使用正确类型的局部变量,而不再触摸函数参数。