我正在尝试一些内联汇编代码。
我的功能是
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 不要尝试优化我的内联代码!
谢谢艾蒂安