我正在尝试使用内联汇编代码。
我的功能是
void pixemcpy(unsigned char *im_src, unsigned char *im_dest, int npix)
{
int i;
for(i=0;i<npix;i++) *im_dest++=*im_src++;
}
我的程序集内联函数是
void inline_pixelcpy(unsigned char *im_src, unsigned char *im_dest, int npix){
__asm__ volatile(
"0: \n"
"ldrb r3, [%[src]], #1 \n"
"strb r3, [%[dst]], #1 \n"
"subs %[iter], %[iter], #1\n"
"bgt 0b\n"
:
: [src] "r" (im_src), [dst] "r" (im_dest), [iter] "r" (npix)
: "cc", "r3"
);
}
这两个函数都在同一个c文件中! 当我编译我的c文件,这是工作的!两个功能都做同样的事情没有问题。
如果我使用-O2或-O3 gcc选项,返回(不调用)我的汇编函数时会出现分段错误!
如果我的2函数分成单独的文件,则不会出现此问题!
我的内联代码有问题!如何告诉gcc不要尝试优化我的内联代码!
感谢的 艾蒂安