• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#include <clc/clc.h>
2#include "../clcmacro.h"
3
4_CLC_OVERLOAD _CLC_DEF char clz(char x) {
5  return clz((ushort)(uchar)x) - 8;
6}
7
8_CLC_OVERLOAD _CLC_DEF uchar clz(uchar x) {
9  return clz((ushort)x) - 8;
10}
11
12_CLC_OVERLOAD _CLC_DEF short clz(short x) {
13  return x ? __builtin_clzs(x) : 16;
14}
15
16_CLC_OVERLOAD _CLC_DEF ushort clz(ushort x) {
17  return x ? __builtin_clzs(x) : 16;
18}
19
20_CLC_OVERLOAD _CLC_DEF int clz(int x) {
21  return x ? __builtin_clz(x) : 32;
22}
23
24_CLC_OVERLOAD _CLC_DEF uint clz(uint x) {
25  return x ? __builtin_clz(x) : 32;
26}
27
28_CLC_OVERLOAD _CLC_DEF long clz(long x) {
29  return x ? __builtin_clzl(x) : 64;
30}
31
32_CLC_OVERLOAD _CLC_DEF ulong clz(ulong x) {
33  return x ? __builtin_clzl(x) : 64;
34}
35
36_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, char, clz, char)
37_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, uchar, clz, uchar)
38_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, short, clz, short)
39_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, ushort, clz, ushort)
40_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, int, clz, int)
41_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, uint, clz, uint)
42_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, long, clz, long)
43_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, ulong, clz, ulong)
44