如何在ARM上的GCC内联ASM中分配由地址引用的变量

时间:2015-04-10 16:46:46

标签: gcc assembly arm raspberry-pi

我想将4个8位变量从内存地址复制到ARM寄存器,以便能够使用 usad8 指令。所以我的代码就像:

__asm__ __volatile__(
    "eor %0, %0, %0;"       

    "eor %%r2, %%r2, %%r2;"
    "ldrd %%r2, %1;"

    "eor %%r4, %%r4, %%r4;"
    "ldrd  %%r4, %2;"

    "usad8 %0, %%r2, %%r4"
    :"=r" (acc)
    :"m" (add_b), "m" (add_s)
    );

但它给了我奇怪的结果。 add_b add_s 是存储内存地址的指针。我发现 ldrd 只将地址复制到 r2 r4 。我在Raspberry Pi上用gcc(Debian 4.6.3-14 + rpi1)4.6.3编译。有什么想法吗?

编辑: 这个版本的代码有效:

__asm__ __volatile__(
    "ldr %%r1, [%1];"
    "ldr %%r2, [%2];"

    "usad8 %0, %%r1, %%r2"
    :"=r" (acc)
    :"r" (add_b), "r" (add_s)
    :"r1", "r2"
    );'

感谢大家的帮助!

0 个答案:

没有答案
相关问题