サンプルの GCC 拡張インライン アセンブリ プログラムを Netbeans 7.4 で作成しようとしました。
コンパイラオプションは
gcc -masm=intel -O2 -c -g -O2 -std=c89 -MMD -MP -MF build/Debug/Cygwin_4.x-windows/main.o.d -o build/Debug/Cygwin_4.x-Windows/main.o main.c
表示されるエラーは
main.c: In function ‘main’:
main.c:27:19: error: expected ‘)’ before ‘:’ token
: [out]"=r"( op )
^
しかし、コードはいくつかのオプションなしで正常にコンパイルされました。Cygwin (x86-x64) GCC ツールチェーンを使用しています。
コードは
int main()
{
unsigned *data = calloc ( 4 , sizeof (int ) );
unsigned sel , op;
scanf ( "%u%u%u%u" , data , data + 1 , data + 2 , data + 3 );
while ( scanf ( "%u" , &sel ) )
{
asm( "mov rcx, %[sel];"\
"and rcx, 3;"\
"mov rbx, %[data];"\
"mov %[out], [rbx+4*rcx]"
: [out]"=r"( op )
: [data]"p"( data ) , [sel]"r"( sel )
: "rcx" , "rbx"
);
}
printf ( "%u\n" , op );
return (EXIT_SUCCESS );
}
この問題を解決するアイデアはありますか?