私はいくつかのインライン アセンブリ コードを実行しようとしています。
私の機能は
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 に指示するにはどうすればよいでしょうか。
ありがとうエティエンヌ