|  | 
|  | 1 | +//===----------------------------------------------------------------------===// | 
|  | 2 | +// | 
|  | 3 | +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | 4 | +// See https://llvm.org/LICENSE.txt for license information. | 
|  | 5 | +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | 6 | +// | 
|  | 7 | +//===----------------------------------------------------------------------===// | 
|  | 8 | + | 
|  | 9 | +#include <clc/clcmacro.h> | 
|  | 10 | +#include <clc/integer/clc_ctz.h> | 
|  | 11 | +#include <clc/internal/clc.h> | 
|  | 12 | + | 
|  | 13 | +_CLC_OVERLOAD _CLC_DEF char __clc_ctz(char x) { | 
|  | 14 | +  return __clc_ctz(__clc_as_uchar(x)); | 
|  | 15 | +} | 
|  | 16 | + | 
|  | 17 | +_CLC_OVERLOAD _CLC_DEF uchar __clc_ctz(uchar x) { return __builtin_ctzg(x, 8); } | 
|  | 18 | + | 
|  | 19 | +_CLC_OVERLOAD _CLC_DEF short __clc_ctz(short x) { | 
|  | 20 | +  return __clc_ctz(__clc_as_ushort(x)); | 
|  | 21 | +} | 
|  | 22 | + | 
|  | 23 | +_CLC_OVERLOAD _CLC_DEF ushort __clc_ctz(ushort x) { | 
|  | 24 | +  return __builtin_ctzg(x, 16); | 
|  | 25 | +} | 
|  | 26 | + | 
|  | 27 | +_CLC_OVERLOAD _CLC_DEF int __clc_ctz(int x) { | 
|  | 28 | +  return __clc_ctz(__clc_as_uint(x)); | 
|  | 29 | +} | 
|  | 30 | + | 
|  | 31 | +_CLC_OVERLOAD _CLC_DEF uint __clc_ctz(uint x) { return __builtin_ctzg(x, 32); } | 
|  | 32 | + | 
|  | 33 | +_CLC_OVERLOAD _CLC_DEF long __clc_ctz(long x) { | 
|  | 34 | +  return __clc_ctz(__clc_as_ulong(x)); | 
|  | 35 | +} | 
|  | 36 | + | 
|  | 37 | +_CLC_OVERLOAD _CLC_DEF ulong __clc_ctz(ulong x) { | 
|  | 38 | +  return __builtin_ctzg(x, 64); | 
|  | 39 | +} | 
|  | 40 | + | 
|  | 41 | +_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, char, __clc_ctz, char) | 
|  | 42 | +_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, uchar, __clc_ctz, uchar) | 
|  | 43 | +_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, short, __clc_ctz, short) | 
|  | 44 | +_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, ushort, __clc_ctz, ushort) | 
|  | 45 | +_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, int, __clc_ctz, int) | 
|  | 46 | +_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, uint, __clc_ctz, uint) | 
|  | 47 | +_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, long, __clc_ctz, long) | 
|  | 48 | +_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, ulong, __clc_ctz, ulong) | 
0 commit comments