summaryrefslogtreecommitdiff
path: root/riscv/riscv-probe/libfemto/std/ctz.c
blob: 098687c3daafc4bd1250b27135a56acfff6a2a2f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// See LICENSE for license details.

#include <stdint.h>

#define GLUE_HELPER(x, y) x##y
#define GLUE(x, y) GLUE_HELPER(x, y)

#define DEFINE_CTZ(T,bits)         \
int GLUE(ctz,bits)(T val)          \
{                                  \
    int n = 0;                     \
    for (n = 0; n < bits; n++) {   \
        if (val & 1) break;        \
        val >>= 1;                 \
    }                              \
    return n;                      \
}

DEFINE_CTZ(int8_t,8)
DEFINE_CTZ(int16_t,16)
DEFINE_CTZ(int32_t,32)
DEFINE_CTZ(int64_t,64)