質問

しているのか教えてくださいを使用するコード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ビルトインに十分に精通していません。本質的なものはどのように行方不明になるのでしょうか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top