装配参数错误
Assembly argument error
我有以下 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 列表中有问题。谁能指出问题所在?
错误出在代码的其他地方,我一直在纠结于汇编问题。抱歉...
我有以下 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 列表中有问题。谁能指出问题所在?
错误出在代码的其他地方,我一直在纠结于汇编问题。抱歉...