2016-12-28 4 views
0

ffsl functionはglibcの一部です。 GCCでは、__builtin_ffslでも利用できます。最長有効ビットのインデックスをlongに返します。C++で `ffsl`を呼び出す標準的な方法は?

標準準拠のC++コードでこの機能にアクセスする方法はありますか?私は高性能のためにアセンブリで書かれているので、これらのバージョン(利用可能な場合)を入手したいと思います。

+1

標準に準拠していません。どのように標準準拠のコードでそれにアクセスできますか? – skypjack

+1

それを行う方法[提案されました](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3864.html) – harold

+0

@skypjack私は、同じことが、標準的なヘッダーのどこかに存在します。その実装はおそらくアーキテクチャやOSなどに応じて "正しいこと"をします。 –

答えて

1

これを実現する標準的な関数はなく、各コンパイラは通常、ffsを計算するための固有の関数を提供します(比較的完全なリストについては、例えばWikipediaを参照してください)。だから、あなたの最高のテイクはまた、これらは、より良いコンパイラによって最適化される傾向があるとして、(私は一方で、固有のコンパイラを使用したい__builtin_ffsffs(3)が非同等のコードを生成する可能性があることに注意ラッパーに

#ifdef __GNUC__ 
# define ffs(x) __builtin_ffs(x) 
#elif __INTEL_COMPILER 
# define ffs(x) _bit_scan_forward(x) 
... 

を行うことであろうGCC組み込み関数が常に最適化されているとは限りません)。

関連する問題