|
11 | 11 | #include <clc/internal/clc.h> |
12 | 12 |
|
13 | 13 | _CLC_OVERLOAD _CLC_DEF char __clc_clz(char x) { |
14 | | - return __clc_clz((ushort)(uchar)x) - 8; |
| 14 | + return __clc_clz(__clc_as_uchar(x)); |
15 | 15 | } |
16 | 16 |
|
17 | 17 | _CLC_OVERLOAD _CLC_DEF uchar __clc_clz(uchar x) { |
18 | | - return __clc_clz((ushort)x) - 8; |
| 18 | + return __builtin_clzg(x, 8); |
19 | 19 | } |
20 | 20 |
|
21 | 21 | _CLC_OVERLOAD _CLC_DEF short __clc_clz(short x) { |
22 | | - return x ? __builtin_clzs(x) : 16; |
| 22 | + return __clc_clz(__clc_as_ushort(x)); |
23 | 23 | } |
24 | 24 |
|
25 | 25 | _CLC_OVERLOAD _CLC_DEF ushort __clc_clz(ushort x) { |
26 | | - return x ? __builtin_clzs(x) : 16; |
| 26 | + return __builtin_clzg(x, 16); |
27 | 27 | } |
28 | 28 |
|
29 | 29 | _CLC_OVERLOAD _CLC_DEF int __clc_clz(int x) { |
30 | | - return x ? __builtin_clz(x) : 32; |
| 30 | + return __clc_clz(__clc_as_uint(x)); |
31 | 31 | } |
32 | 32 |
|
33 | 33 | _CLC_OVERLOAD _CLC_DEF uint __clc_clz(uint x) { |
34 | | - return x ? __builtin_clz(x) : 32; |
| 34 | + return __builtin_clzg(x, 32); |
35 | 35 | } |
36 | 36 |
|
37 | 37 | _CLC_OVERLOAD _CLC_DEF long __clc_clz(long x) { |
38 | | - return x ? __builtin_clzl(x) : 64; |
| 38 | + return __clc_clz(__clc_as_ulong(x)); |
39 | 39 | } |
40 | 40 |
|
41 | 41 | _CLC_OVERLOAD _CLC_DEF ulong __clc_clz(ulong x) { |
42 | | - return x ? __builtin_clzl(x) : 64; |
| 42 | + return __builtin_clzg(x, 64); |
43 | 43 | } |
44 | 44 |
|
45 | 45 | _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, char, __clc_clz, char) |
|
0 commit comments