[mw_shl_code=c,true]#define ABSDIFF(frame1, frame2) \
({ \
int result = 0; \
asm volatile( \
"mov %[result], #0\n" /* accumulator */ \
\
"ldr r4, [%[src], #0]\n" /* read data from address + offset*/ \
"ldr r5, [%[dst], #0]\n" \
"usada8 %[result], r4, r5, %[result]\n" /* difference */ \
"ldr r4, [%[src], #4]\n" /* read data from address + offset */ \
"ldr r5, [%[dst], #4]\n" \
"usada8 %[result], r4, r5, %[result]\n" /* difference */ \
\
"ldr r4, [%[src], #(64 * 1)]\n" /* read data from address + offset*/ \
"ldr r5, [%[dst], #(64 * 1)]\n" \
"usada8 %[result], r4, r5, %[result]\n" /* difference */ \
"ldr r4, [%[src], #(64 * 1 + 4)]\n" /* read data from address + offset */ \
"ldr r5, [%[dst], #(64 * 1 + 4)]\n" \
"usada8 %[result], r4, r5, %[result]\n" /* difference */ \
\
"ldr r4, [%[src], #(64 * 2)]\n" /* read data from address + offset*/ \
"ldr r5, [%[dst], #(64 * 2)]\n" \
"usada8 %[result], r4, r5, %[result]\n" /* difference */ \
"ldr r4, [%[src], #(64 * 2 + 4)]\n" /* read data from address + offset */ \
"ldr r5, [%[dst], #(64 * 2 + 4)]\n" \
"usada8 %[result], r4, r5, %[result]\n" /* difference */ \
\
"ldr r4, [%[src], #(64 * 3)]\n" /* read data from address + offset*/ \
"ldr r5, [%[dst], #(64 * 3)]\n" \
"usada8 %[result], r4, r5, %[result]\n" /* difference */ \
"ldr r4, [%[src], #(64 * 3 + 4)]\n" /* read data from address + offset */ \
"ldr r5, [%[dst], #(64 * 3 + 4)]\n" \
"usada8 %[result], r4, r5, %[result]\n" /* difference */ \
\
"ldr r4, [%[src], #(64 * 4)]\n" /* read data from address + offset*/ \
"ldr r5, [%[dst], #(64 * 4)]\n" \
"usada8 %[result], r4, r5, %[result]\n" /* difference */ \
"ldr r4, [%[src], #(64 * 4 + 4)]\n" /* read data from address + offset */ \
"ldr r5, [%[dst], #(64 * 4 + 4)]\n" \
"usada8 %[result], r4, r5, %[result]\n" /* difference */ \
\
"ldr r4, [%[src], #(64 * 5)]\n" /* read data from address + offset*/ \
"ldr r5, [%[dst], #(64 * 5)]\n" \
"usada8 %[result], r4, r5, %[result]\n" /* difference */ \
"ldr r4, [%[src], #(64 * 5 + 4)]\n" /* read data from address + offset */ \
"ldr r5, [%[dst], #(64 * 5 + 4)]\n" \
"usada8 %[result], r4, r5, %[result]\n" /* difference */ \
\
"ldr r4, [%[src], #(64 * 6)]\n" /* read data from address + offset*/ \
"ldr r5, [%[dst], #(64 * 6)]\n" \
"usada8 %[result], r4, r5, %[result]\n" /* difference */ \
"ldr r4, [%[src], #(64 * 6 + 4)]\n" /* read data from address + offset */ \
"ldr r5, [%[dst], #(64 * 6 + 4)]\n" \
"usada8 %[result], r4, r5, %[result]\n" /* difference */ \
\
"ldr r4, [%[src], #(64 * 7)]\n" /* read data from address + offset*/ \
"ldr r5, [%[dst], #(64 * 7)]\n" \
"usada8 %[result], r4, r5, %[result]\n" /* difference */ \
"ldr r4, [%[src], #(64 * 7 + 4)]\n" /* read data from address + offset */ \
"ldr r5, [%[dst], #(64 * 7 + 4)]\n" \
"usada8 %[result], r4, r5, %[result]\n" /* difference */ \
\
: [result] "+r" (result) \
: [src] "r" (frame1), [dst] "r" (frame2) \
: "r4", "r5" \
); \
\
result; \
})[/mw_shl_code]
然后在后边调用:uint32_t temp_dist = ABSDIFF(base1, base2+ii);
出错: error: #29: expected an expression.
temp_dist = ABSDIFF(base1, base2+ii);
请教大神怎么解决
|