0

我正在尝试一些内联汇编代码。

我的功能是

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 不要尝试优化我的内联代码!

谢谢艾蒂安

4

0 回答 0