我想将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"
);'
感谢大家的帮助!