Vitis HLS では、次の C/C++ ビルトイン関数がサポートされます。
-
__builtin_clz(unsigned int x)
: x の最上位ビットから数えた先行ゼロのビット数を返します。x が 0 の場合は、結果は未定義になります。 -
__builtin_ctz(unsigned int x)
: x の再開ビットから数えた後置ゼロのビット数を返します。x が 0 の場合は、結果は未定義になります。
次に、これらの関数の使用例を示します。この例は、in0 の先行ゼロの数と in1 の後置ゼロの数 0 の数の合計を返します。
int foo (int in0, int in1) {
int ldz0 = __builtin_clz(in0);
int ldz1 = __builtin_ctz(in1);
return (ldz0 + ldz1);
}