私はアセンブリ言語が初めてです。gcc には MSVC のように intrin.h に _bittestandset 関数がないようなので、新たに実装しました。これは Linux では問題なく動作しますが、winVista マシンの mingw では問題が発生します。コードは次のとおりです。
inline unsigned char _bittestandset(unsigned long * a, unsigned long b)
{
__asm__ ( "bts %1, %[b]"
: "=g"(*a)
: [b]"Ir"(b), "g"(*a) );
return 0;
}