我有以下ARM汇编代码来区分两个图像:
void diff(unsigned char *a, unsigned char *b, unsigned char *c, int length) {
asm volatile(
"1: \n"
"vld4.u8 {d0,d1,d2,d3}, [%0]! \n" // load
"vld4.u8 {d4,d5,d6,d7}, [%1]! \n" // load
"vabd.u8 d0, d0, d4 \n"
"vabd.u8 d1, d1, d5 \n"
"vabd.u8 d2, d2, d6 \n"
"vabd.u8 d3, d3, d7 \n"
"vst4.u8 {d0,d1,d2,d3}, [%2]! \n" // store back 0, 1, 2 and 3
"subs %3, %3, #16 \n" // 16 processed per loop
"bgt 1b \n" // Loop back if not done
:"+r"(a), // %0
"+r"(b), // %1
"+r"(c), // %2
"+r"(length) // %3 // output registers
: // input registers
: "memory", "cc", "q0", "q1", "q2", "q3" // Clobber List
);
}
它是段错误的。我认为我在clobber列表中有问题。有谁可以指出这个问题?
答案 0 :(得分:0)
错误是代码中的其他地方,我对组装问题很着迷。遗憾...