arm内联汇编代码和编译器优化选项

时间:2012-07-15 11:28:38

标签: gcc assembly

我正在尝试使用内联汇编代码。

我的功能是

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

感谢的 艾蒂安

0 个答案:

没有答案
相关问题