質問
しているのか教えてくださいを使用するコードgcc intrinsics.私のコードが含まれており、本質が欠けています。する方法を教えてください。
#ifdef __builtin_ctzll
は動作しません。
解決
Clangの最近のバージョンでは、組み込みの内在が存在するかどうかを確認することができます。 __has_builtin()
マクロEG
int popcount(int x)
{
#if __has_builtin(__builtin_popcount)
return __builtin_popcount(x);
#else
int count = 0;
for (; x != 0; x &= x - 1)
count++;
return count;
#endif
}
GCCもサポートすることを願っています __has_builtin()
将来。
他のヒント
このスケジュールを作るべきであるのに、gcc版ことを期待していて全てのアーキテクチャ.
これは保証されませんが、私はしており、最近では、同様の問題がないとの組み込み機能が __thread
スレッドのスカルストレージこのメソッドの実装では、一部のアーキテクチャ(linux対象)がないその他(OS Xでは、bsd?) はありませんから教えてもらうことをクリックします。
場合はgnu makeできないようなものの存在を検出の特定の機能Makefile:
__THREAD := $(shell echo '__thread int i;' | ${CC} ${CFLAGS} -xc -c -o /dev/null - 2> /dev/null || echo "NO")
ifeq (${__THREAD},NO)
${warning thread local storage (TLS) with '__thread' is not supported, switching to pthread_getkey}
CFLAGS += -D__GNUC_NO_TLS__
endif
これを使用複雑な設定できます。
#ifdef
ディレクティブがチェックするかどうか __builtin_ctzll
aとして定義されます 大きい 名前、a __builtin_ctzll
働き 存在します。
私はこれ以上のあなたを助けるためにGCCビルトインに十分に精通していません。本質的なものはどのように行方不明になるのでしょうか?
所属していません StackOverflow