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