From df3e62f3c3d0948aeefb37461dded1521f285aa0 Mon Sep 17 00:00:00 2001 From: Fraser Cormack Date: Thu, 5 Jun 2025 10:04:51 +0100 Subject: [PATCH 1/2] Revert "[libspirv] Define schar overloads via remangling; not source (#18626)" This reverts commit 23584c1991587815e63d95404337eb2f1faeea29. --- clang/lib/Sema/SPIRVBuiltins.td | 19 +- clang/lib/Sema/SemaLookup.cpp | 5 - .../spirv-builtin-lookup-group.cl | 4 +- libclc/clc/include/clc/clc_as_type.h | 7 + libclc/clc/include/clc/clc_convert.h | 2 + libclc/clc/include/clc/clctypes.h | 7 + libclc/clc/include/clc/integer/gentype.inc | 198 +++++++++++++++++- libclc/clc/include/clc/math/gentype.inc | 4 + libclc/clc/lib/generic/integer/clc_ctz.cl | 5 + libclc/clc/lib/generic/integer/clc_mad_sat.cl | 1 + libclc/clc/lib/generic/integer/clc_mul_hi.cl | 1 + libclc/clc/lib/generic/misc/clc_shuffle.cl | 1 + libclc/clc/lib/generic/misc/clc_shuffle2.cl | 1 + .../include/libspirv/async/gentype.inc | 40 ++++ libclc/libspirv/include/libspirv/lp64_types.h | 12 +- .../libspirv/ptx-nvidiacl/async/gentype.inc | 23 ++ libclc/libspirv/lib/generic/gen_convert.py | 6 + .../lib/generic/gen_convert_common.py | 11 +- .../lib/generic/geometric/normalize.cl | 7 +- .../libspirv/lib/generic/integer/upsample.cl | 1 + libclc/libspirv/lib/generic/math/fract.cl | 1 - libclc/libspirv/lib/generic/math/fract.inc | 15 +- libclc/libspirv/lib/generic/math/maxmag.cl | 3 +- libclc/libspirv/lib/generic/math/maxmag.inc | 25 ++- libclc/libspirv/lib/generic/math/minmag.cl | 3 +- libclc/libspirv/lib/generic/math/minmag.inc | 18 +- libclc/libspirv/lib/generic/relational/all.cl | 2 +- libclc/libspirv/lib/generic/relational/any.cl | 2 +- .../generic/relational/genbinrelational.inc | 6 +- .../lib/generic/relational/genunary.inc | 6 +- libclc/libspirv/lib/generic/shared/vload.cl | 2 +- libclc/libspirv/lib/generic/shared/vstore.cl | 2 +- .../lib/native_cpu/integer/popcount.cl | 26 +-- .../async/async_work_group_strided_copy.cl | 6 + .../lib/ptx-nvidiacl/integer/mul_hi.cl | 3 + .../lib/ptx-nvidiacl/relational/isfinite.cl | 6 +- .../lib/ptx-nvidiacl/relational/isinf.cl | 6 +- .../lib/ptx-nvidiacl/relational/isnan.cl | 6 +- libclc/opencl/include/clc/opencl/as_type.h | 6 + libclc/opencl/include/clc/opencl/clc.h | 2 + libclc/utils/gen_convert.py | 11 +- 41 files changed, 423 insertions(+), 89 deletions(-) diff --git a/clang/lib/Sema/SPIRVBuiltins.td b/clang/lib/Sema/SPIRVBuiltins.td index d5a0e52e3404e..ef3d18a682c58 100644 --- a/clang/lib/Sema/SPIRVBuiltins.td +++ b/clang/lib/Sema/SPIRVBuiltins.td @@ -322,7 +322,8 @@ class ConstOCLSPVBuiltin _Signature> : // OpenCL v1.0/1.2/2.0 s6.1.1: Built-in Scalar Data Types. def Bool : IntType<"bool", QualType<"Context.BoolTy">, 1>; def TrueChar : IntType<"_char", QualType<"Context.CharTy", 0, 1>, 8>; -def Char : IntType<"char", QualTypeFromFunction<"GetCharType", 0, 1>, 8>; +def Char : IntType<"char", QualType<"Context.SignedCharTy", 0, 1>, 8>; +def SChar : IntType<"schar", QualType<"Context.SignedCharTy", 0, 1>, 8>; def UChar : UIntType<"uchar", QualType<"Context.UnsignedCharTy">, 8>; def Short : IntType<"short", QualType<"Context.ShortTy", 0, 1>, 16>; def UShort : UIntType<"ushort", QualType<"Context.UnsignedShortTy">, 16>; @@ -411,7 +412,7 @@ def IntLongFloatGenType1 : GenericType<"IntLongFloatGenType1", TLIntLongFloats // GenType definitions for every single base type (e.g. fp32 only). // Names are like: GenTypeFloatVecAndScalar. -foreach Type = [Char, UChar, Short, UShort, +foreach Type = [Char, UChar, SChar, Short, UShort, Int, UInt, Long, ULong, Float, Double, Half] in { foreach VecSizes = [VecAndScalar, VecNoScalar] in { @@ -871,16 +872,16 @@ foreach name = ["Dot"] in { } foreach name = ["Any", "All"] in { - def : SPVBuiltin; + def : SPVBuiltin; } foreach name = ["IsNan", "IsInf", "IsFinite", "IsNormal", "SignBitSet"] in { def : SPVBuiltin; def : SPVBuiltin; def : SPVBuiltin; - def : SPVBuiltin; - def : SPVBuiltin; - def : SPVBuiltin; + def : SPVBuiltin; + def : SPVBuiltin; + def : SPVBuiltin; } foreach name = ["LessOrGreater", @@ -894,9 +895,9 @@ foreach name = ["LessOrGreater", def : SPVBuiltin; def : SPVBuiltin; def : SPVBuiltin; - def : SPVBuiltin; - def : SPVBuiltin; - def : SPVBuiltin; + def : SPVBuiltin; + def : SPVBuiltin; + def : SPVBuiltin; } foreach name = ["BitCount"] in { diff --git a/clang/lib/Sema/SemaLookup.cpp b/clang/lib/Sema/SemaLookup.cpp index b6a7f8ce8f0a6..e4fcb86c31b4e 100644 --- a/clang/lib/Sema/SemaLookup.cpp +++ b/clang/lib/Sema/SemaLookup.cpp @@ -51,7 +51,6 @@ #include #include -static inline clang::QualType GetCharType(clang::ASTContext &Context); static inline clang::QualType GetFloat16Type(clang::ASTContext &Context); #include "OpenCLBuiltins.inc" @@ -702,10 +701,6 @@ LLVM_DUMP_METHOD void LookupResult::dump() { D->dump(); } -static inline QualType GetCharType(clang::ASTContext &Context) { - return Context.getLangOpts().OpenCL ? Context.CharTy : Context.SignedCharTy; -} - static inline QualType GetFloat16Type(clang::ASTContext &Context) { return Context.getLangOpts().OpenCL ? Context.HalfTy : Context.Float16Ty; } diff --git a/clang/test/CodeGenSPIRV/spirv-builtin-lookup-group.cl b/clang/test/CodeGenSPIRV/spirv-builtin-lookup-group.cl index 689d059efa5de..52872bf7ac3b9 100644 --- a/clang/test/CodeGenSPIRV/spirv-builtin-lookup-group.cl +++ b/clang/test/CodeGenSPIRV/spirv-builtin-lookup-group.cl @@ -27,7 +27,7 @@ bool group_any(bool predicate) { char group_broad_cast(char a) { // CHECK-LABEL: @group_broad_cast( - // CHECK: call spir_func signext i8 @_Z22__spirv_GroupBroadcasticj( + // CHECK: call spir_func i32 @_Z22__spirv_GroupBroadcastiij( return __spirv_GroupBroadcast(2, a, 0u); } @@ -87,7 +87,7 @@ unsigned long group_umax(unsigned long a) { char group_smin(char a) { // CHECK-LABEL: @group_smin( - // CHECK: call spir_func signext i8 @_Z17__spirv_GroupSMiniic( + // CHECK: call spir_func i32 @_Z17__spirv_GroupSMiniii( return __spirv_GroupSMin(2, 0, a); } diff --git a/libclc/clc/include/clc/clc_as_type.h b/libclc/clc/include/clc/clc_as_type.h index 62fee71da8b02..2040f84285f97 100644 --- a/libclc/clc/include/clc/clc_as_type.h +++ b/libclc/clc/include/clc/clc_as_type.h @@ -10,6 +10,7 @@ #define __CLC_CLC_AS_TYPE_H__ #define __clc_as_char(x) __builtin_astype(x, char) +#define __clc_as_schar(x) __builtin_astype(x, schar) #define __clc_as_uchar(x) __builtin_astype(x, uchar) #define __clc_as_short(x) __builtin_astype(x, short) #define __clc_as_ushort(x) __builtin_astype(x, ushort) @@ -20,6 +21,7 @@ #define __clc_as_float(x) __builtin_astype(x, float) #define __clc_as_char2(x) __builtin_astype(x, char2) +#define __clc_as_schar2(x) __builtin_astype(x, schar2) #define __clc_as_uchar2(x) __builtin_astype(x, uchar2) #define __clc_as_short2(x) __builtin_astype(x, short2) #define __clc_as_ushort2(x) __builtin_astype(x, ushort2) @@ -30,6 +32,7 @@ #define __clc_as_float2(x) __builtin_astype(x, float2) #define __clc_as_char3(x) __builtin_astype(x, char3) +#define __clc_as_schar3(x) __builtin_astype(x, schar3) #define __clc_as_uchar3(x) __builtin_astype(x, uchar3) #define __clc_as_short3(x) __builtin_astype(x, short3) #define __clc_as_ushort3(x) __builtin_astype(x, ushort3) @@ -40,6 +43,7 @@ #define __clc_as_float3(x) __builtin_astype(x, float3) #define __clc_as_char4(x) __builtin_astype(x, char4) +#define __clc_as_schar4(x) __builtin_astype(x, schar4) #define __clc_as_uchar4(x) __builtin_astype(x, uchar4) #define __clc_as_short4(x) __builtin_astype(x, short4) #define __clc_as_ushort4(x) __builtin_astype(x, ushort4) @@ -50,7 +54,9 @@ #define __clc_as_float4(x) __builtin_astype(x, float4) #define __clc_as_char8(x) __builtin_astype(x, char8) +#define __clc_as_schar8(x) __builtin_astype(x, schar8) #define __clc_as_uchar8(x) __builtin_astype(x, uchar8) +#define __clc_as_schar8(x) __builtin_astype(x, schar8) #define __clc_as_short8(x) __builtin_astype(x, short8) #define __clc_as_ushort8(x) __builtin_astype(x, ushort8) #define __clc_as_int8(x) __builtin_astype(x, int8) @@ -60,6 +66,7 @@ #define __clc_as_float8(x) __builtin_astype(x, float8) #define __clc_as_char16(x) __builtin_astype(x, char16) +#define __clc_as_schar16(x) __builtin_astype(x, schar16) #define __clc_as_uchar16(x) __builtin_astype(x, uchar16) #define __clc_as_short16(x) __builtin_astype(x, short16) #define __clc_as_ushort16(x) __builtin_astype(x, ushort16) diff --git a/libclc/clc/include/clc/clc_convert.h b/libclc/clc/include/clc/clc_convert.h index ab41e5abb9d6c..3ca53e944280a 100644 --- a/libclc/clc/include/clc/clc_convert.h +++ b/libclc/clc/include/clc/clc_convert.h @@ -24,6 +24,7 @@ #define _CLC_VECTOR_CONVERT_FROM1(FROM_TYPE, SUFFIX) \ _CLC_VECTOR_CONVERT_DECL(FROM_TYPE, char, SUFFIX) \ + _CLC_VECTOR_CONVERT_DECL(FROM_TYPE, schar, SUFFIX) \ _CLC_VECTOR_CONVERT_DECL(FROM_TYPE, uchar, SUFFIX) \ _CLC_VECTOR_CONVERT_DECL(FROM_TYPE, int, SUFFIX) \ _CLC_VECTOR_CONVERT_DECL(FROM_TYPE, uint, SUFFIX) \ @@ -57,6 +58,7 @@ #define _CLC_VECTOR_CONVERT_TO1(SUFFIX) \ _CLC_VECTOR_CONVERT_FROM(char, SUFFIX) \ + _CLC_VECTOR_CONVERT_FROM(schar, SUFFIX) \ _CLC_VECTOR_CONVERT_FROM(uchar, SUFFIX) \ _CLC_VECTOR_CONVERT_FROM(int, SUFFIX) \ _CLC_VECTOR_CONVERT_FROM(uint, SUFFIX) \ diff --git a/libclc/clc/include/clc/clctypes.h b/libclc/clc/include/clc/clctypes.h index 2187c2535963b..98294e27a5993 100644 --- a/libclc/clc/include/clc/clctypes.h +++ b/libclc/clc/include/clc/clctypes.h @@ -11,6 +11,7 @@ /* 6.1.1 Built-in Scalar Data Types */ +typedef signed char schar; typedef unsigned char uchar; typedef unsigned short ushort; typedef unsigned int uint; @@ -39,6 +40,12 @@ typedef __attribute__((ext_vector_type(4))) char char4; typedef __attribute__((ext_vector_type(8))) char char8; typedef __attribute__((ext_vector_type(16))) char char16; +typedef __attribute__((ext_vector_type(2))) schar schar2; +typedef __attribute__((ext_vector_type(3))) schar schar3; +typedef __attribute__((ext_vector_type(4))) schar schar4; +typedef __attribute__((ext_vector_type(8))) schar schar8; +typedef __attribute__((ext_vector_type(16))) schar schar16; + typedef __attribute__((ext_vector_type(2))) uchar uchar2; typedef __attribute__((ext_vector_type(3))) uchar uchar3; typedef __attribute__((ext_vector_type(4))) uchar uchar4; diff --git a/libclc/clc/include/clc/integer/gentype.inc b/libclc/clc/include/clc/integer/gentype.inc index acca8632de32a..f6a5f83967ccc 100644 --- a/libclc/clc/include/clc/integer/gentype.inc +++ b/libclc/clc/include/clc/integer/gentype.inc @@ -5,7 +5,6 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// - #include #include #include @@ -21,11 +20,13 @@ // These 2 defines only change when switching between data sizes or base types // to keep this file manageable. + #define __CLC_GENSIZE 8 #define __CLC_SCALAR_GENTYPE char #define __CLC_GEN_S #define __CLC_GENTYPE char +#define __CLC_SPIRV_INTERFACE_GENTYPE schar #define __CLC_U_GENTYPE uchar #define __CLC_S_GENTYPE char #define __CLC_SCALAR @@ -38,10 +39,12 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_VECSIZE_OR_1 __CLC_VECSIZE #define __CLC_GENTYPE char2 +#define __CLC_SPIRV_INTERFACE_GENTYPE schar2 #define __CLC_U_GENTYPE uchar2 #define __CLC_S_GENTYPE char2 #define __CLC_VECSIZE 2 @@ -50,8 +53,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE char3 +#define __CLC_SPIRV_INTERFACE_GENTYPE schar3 #define __CLC_U_GENTYPE uchar3 #define __CLC_S_GENTYPE char3 #define __CLC_VECSIZE 3 @@ -60,8 +65,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE char4 +#define __CLC_SPIRV_INTERFACE_GENTYPE schar4 #define __CLC_U_GENTYPE uchar4 #define __CLC_S_GENTYPE char4 #define __CLC_VECSIZE 4 @@ -70,8 +77,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE char8 +#define __CLC_SPIRV_INTERFACE_GENTYPE schar8 #define __CLC_U_GENTYPE uchar8 #define __CLC_S_GENTYPE char8 #define __CLC_VECSIZE 8 @@ -80,8 +89,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE char16 +#define __CLC_SPIRV_INTERFACE_GENTYPE schar16 #define __CLC_U_GENTYPE uchar16 #define __CLC_S_GENTYPE char16 #define __CLC_VECSIZE 16 @@ -91,6 +102,94 @@ #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE #undef __CLC_VECSIZE_OR_1 +#undef __CLC_SPIRV_INTERFACE_GENTYPE + +#ifndef __CLC_NO_SCHAR +#undef __CLC_GEN_S +#undef __CLC_SCALAR_GENTYPE +#define __CLC_SCALAR_GENTYPE schar +#define __CLC_GEN_S + +#define __CLC_GENTYPE schar +#define __CLC_SPIRV_INTERFACE_GENTYPE schar +#define __CLC_U_GENTYPE uchar +#define __CLC_S_GENTYPE schar +#define __CLC_SCALAR +#define __CLC_VECSIZE +#define __CLC_VECSIZE_OR_1 1 +#include __CLC_BODY +#undef __CLC_VECSIZE_OR_1 +#undef __CLC_VECSIZE +#undef __CLC_SCALAR +#undef __CLC_GENTYPE +#undef __CLC_U_GENTYPE +#undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE + +#define __CLC_VECSIZE_OR_1 __CLC_VECSIZE + +#define __CLC_GENTYPE schar2 +#define __CLC_SPIRV_INTERFACE_GENTYPE schar2 +#define __CLC_U_GENTYPE uchar2 +#define __CLC_S_GENTYPE schar2 +#define __CLC_VECSIZE 2 +#include __CLC_BODY +#undef __CLC_VECSIZE +#undef __CLC_GENTYPE +#undef __CLC_U_GENTYPE +#undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE + +#define __CLC_GENTYPE schar3 +#define __CLC_SPIRV_INTERFACE_GENTYPE schar3 +#define __CLC_U_GENTYPE uchar3 +#define __CLC_S_GENTYPE schar3 +#define __CLC_VECSIZE 3 +#include __CLC_BODY +#undef __CLC_VECSIZE +#undef __CLC_GENTYPE +#undef __CLC_U_GENTYPE +#undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE + +#define __CLC_GENTYPE schar4 +#define __CLC_SPIRV_INTERFACE_GENTYPE schar4 +#define __CLC_U_GENTYPE uchar4 +#define __CLC_S_GENTYPE schar4 +#define __CLC_VECSIZE 4 +#include __CLC_BODY +#undef __CLC_VECSIZE +#undef __CLC_GENTYPE +#undef __CLC_U_GENTYPE +#undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE + +#define __CLC_GENTYPE schar8 +#define __CLC_SPIRV_INTERFACE_GENTYPE schar8 +#define __CLC_U_GENTYPE uchar8 +#define __CLC_S_GENTYPE schar8 +#define __CLC_VECSIZE 8 +#include __CLC_BODY +#undef __CLC_VECSIZE +#undef __CLC_GENTYPE +#undef __CLC_U_GENTYPE +#undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE + +#define __CLC_GENTYPE schar16 +#define __CLC_SPIRV_INTERFACE_GENTYPE schar16 +#define __CLC_U_GENTYPE uchar16 +#define __CLC_S_GENTYPE schar16 +#define __CLC_VECSIZE 16 +#include __CLC_BODY +#undef __CLC_VECSIZE +#undef __CLC_GENTYPE +#undef __CLC_U_GENTYPE +#undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE +#undef __CLC_VECSIZE_OR_1 + +#endif // __CLC_NO_SCHAR #undef __CLC_SCALAR_GENTYPE #define __CLC_SCALAR_GENTYPE uchar @@ -98,8 +197,9 @@ #define __CLC_GEN_U #define __CLC_GENTYPE uchar +#define __CLC_SPIRV_INTERFACE_GENTYPE uchar #define __CLC_U_GENTYPE uchar -#define __CLC_S_GENTYPE char +#define __CLC_S_GENTYPE schar #define __CLC_SCALAR #define __CLC_VECSIZE #define __CLC_VECSIZE_OR_1 1 @@ -110,58 +210,69 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_VECSIZE_OR_1 __CLC_VECSIZE #define __CLC_GENTYPE uchar2 +#define __CLC_SPIRV_INTERFACE_GENTYPE uchar2 #define __CLC_U_GENTYPE uchar2 -#define __CLC_S_GENTYPE char2 +#define __CLC_S_GENTYPE schar2 #define __CLC_VECSIZE 2 #include __CLC_BODY #undef __CLC_VECSIZE #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE uchar3 +#define __CLC_SPIRV_INTERFACE_GENTYPE uchar3 #define __CLC_U_GENTYPE uchar3 -#define __CLC_S_GENTYPE char3 +#define __CLC_S_GENTYPE schar3 #define __CLC_VECSIZE 3 #include __CLC_BODY #undef __CLC_VECSIZE #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE uchar4 +#define __CLC_SPIRV_INTERFACE_GENTYPE uchar4 #define __CLC_U_GENTYPE uchar4 -#define __CLC_S_GENTYPE char4 +#define __CLC_S_GENTYPE schar4 #define __CLC_VECSIZE 4 #include __CLC_BODY #undef __CLC_VECSIZE #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE uchar8 +#define __CLC_SPIRV_INTERFACE_GENTYPE uchar8 #define __CLC_U_GENTYPE uchar8 -#define __CLC_S_GENTYPE char8 +#define __CLC_S_GENTYPE schar8 #define __CLC_VECSIZE 8 #include __CLC_BODY #undef __CLC_VECSIZE #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE uchar16 +#define __CLC_SPIRV_INTERFACE_GENTYPE uchar16 #define __CLC_U_GENTYPE uchar16 -#define __CLC_S_GENTYPE char16 +#define __CLC_S_GENTYPE schar16 #define __CLC_VECSIZE 16 #include __CLC_BODY #undef __CLC_VECSIZE #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #undef __CLC_VECSIZE_OR_1 #undef __CLC_GENSIZE @@ -172,6 +283,7 @@ #define __CLC_GEN_S #define __CLC_GENTYPE short +#define __CLC_SPIRV_INTERFACE_GENTYPE short #define __CLC_U_GENTYPE ushort #define __CLC_S_GENTYPE short #define __CLC_SCALAR @@ -184,10 +296,12 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_VECSIZE_OR_1 __CLC_VECSIZE #define __CLC_GENTYPE short2 +#define __CLC_SPIRV_INTERFACE_GENTYPE short2 #define __CLC_U_GENTYPE ushort2 #define __CLC_S_GENTYPE short2 #define __CLC_VECSIZE 2 @@ -196,8 +310,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE short3 +#define __CLC_SPIRV_INTERFACE_GENTYPE short3 #define __CLC_U_GENTYPE ushort3 #define __CLC_S_GENTYPE short3 #define __CLC_VECSIZE 3 @@ -206,8 +322,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE short4 +#define __CLC_SPIRV_INTERFACE_GENTYPE short4 #define __CLC_U_GENTYPE ushort4 #define __CLC_S_GENTYPE short4 #define __CLC_VECSIZE 4 @@ -216,8 +334,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE short8 +#define __CLC_SPIRV_INTERFACE_GENTYPE short8 #define __CLC_U_GENTYPE ushort8 #define __CLC_S_GENTYPE short8 #define __CLC_VECSIZE 8 @@ -226,8 +346,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE short16 +#define __CLC_SPIRV_INTERFACE_GENTYPE short16 #define __CLC_U_GENTYPE ushort16 #define __CLC_S_GENTYPE short16 #define __CLC_VECSIZE 16 @@ -236,6 +358,7 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #undef __CLC_VECSIZE_OR_1 #undef __CLC_SCALAR_GENTYPE @@ -244,6 +367,7 @@ #define __CLC_GEN_U #define __CLC_GENTYPE ushort +#define __CLC_SPIRV_INTERFACE_GENTYPE ushort #define __CLC_U_GENTYPE ushort #define __CLC_S_GENTYPE short #define __CLC_SCALAR @@ -256,10 +380,12 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_VECSIZE_OR_1 __CLC_VECSIZE #define __CLC_GENTYPE ushort2 +#define __CLC_SPIRV_INTERFACE_GENTYPE ushort2 #define __CLC_U_GENTYPE ushort2 #define __CLC_S_GENTYPE short2 #define __CLC_VECSIZE 2 @@ -268,8 +394,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE ushort3 +#define __CLC_SPIRV_INTERFACE_GENTYPE ushort3 #define __CLC_U_GENTYPE ushort3 #define __CLC_S_GENTYPE short3 #define __CLC_VECSIZE 3 @@ -278,8 +406,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE ushort4 +#define __CLC_SPIRV_INTERFACE_GENTYPE ushort4 #define __CLC_U_GENTYPE ushort4 #define __CLC_S_GENTYPE short4 #define __CLC_VECSIZE 4 @@ -288,8 +418,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE ushort8 +#define __CLC_SPIRV_INTERFACE_GENTYPE ushort8 #define __CLC_U_GENTYPE ushort8 #define __CLC_S_GENTYPE short8 #define __CLC_VECSIZE 8 @@ -298,8 +430,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE ushort16 +#define __CLC_SPIRV_INTERFACE_GENTYPE ushort16 #define __CLC_U_GENTYPE ushort16 #define __CLC_S_GENTYPE short16 #define __CLC_VECSIZE 16 @@ -308,6 +442,7 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #undef __CLC_VECSIZE_OR_1 #undef __CLC_GENSIZE @@ -318,6 +453,7 @@ #define __CLC_GEN_S #define __CLC_GENTYPE int +#define __CLC_SPIRV_INTERFACE_GENTYPE int #define __CLC_U_GENTYPE uint #define __CLC_S_GENTYPE int #define __CLC_SCALAR @@ -330,10 +466,12 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_VECSIZE_OR_1 __CLC_VECSIZE #define __CLC_GENTYPE int2 +#define __CLC_SPIRV_INTERFACE_GENTYPE int2 #define __CLC_U_GENTYPE uint2 #define __CLC_S_GENTYPE int2 #define __CLC_VECSIZE 2 @@ -342,8 +480,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE int3 +#define __CLC_SPIRV_INTERFACE_GENTYPE int3 #define __CLC_U_GENTYPE uint3 #define __CLC_S_GENTYPE int3 #define __CLC_VECSIZE 3 @@ -352,8 +492,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE int4 +#define __CLC_SPIRV_INTERFACE_GENTYPE int4 #define __CLC_U_GENTYPE uint4 #define __CLC_S_GENTYPE int4 #define __CLC_VECSIZE 4 @@ -362,8 +504,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE int8 +#define __CLC_SPIRV_INTERFACE_GENTYPE int8 #define __CLC_U_GENTYPE uint8 #define __CLC_S_GENTYPE int8 #define __CLC_VECSIZE 8 @@ -372,8 +516,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE int16 +#define __CLC_SPIRV_INTERFACE_GENTYPE int16 #define __CLC_U_GENTYPE uint16 #define __CLC_S_GENTYPE int16 #define __CLC_VECSIZE 16 @@ -382,6 +528,7 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #undef __CLC_VECSIZE_OR_1 #undef __CLC_SCALAR_GENTYPE @@ -390,6 +537,7 @@ #define __CLC_GEN_U #define __CLC_GENTYPE uint +#define __CLC_SPIRV_INTERFACE_GENTYPE uint #define __CLC_U_GENTYPE uint #define __CLC_S_GENTYPE int #define __CLC_SCALAR @@ -402,10 +550,12 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_VECSIZE_OR_1 __CLC_VECSIZE #define __CLC_GENTYPE uint2 +#define __CLC_SPIRV_INTERFACE_GENTYPE uint2 #define __CLC_U_GENTYPE uint2 #define __CLC_S_GENTYPE int2 #define __CLC_VECSIZE 2 @@ -414,8 +564,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE uint3 +#define __CLC_SPIRV_INTERFACE_GENTYPE uint3 #define __CLC_U_GENTYPE uint3 #define __CLC_S_GENTYPE int3 #define __CLC_VECSIZE 3 @@ -424,8 +576,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE uint4 +#define __CLC_SPIRV_INTERFACE_GENTYPE uint4 #define __CLC_U_GENTYPE uint4 #define __CLC_S_GENTYPE int4 #define __CLC_VECSIZE 4 @@ -434,8 +588,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE uint8 +#define __CLC_SPIRV_INTERFACE_GENTYPE uint8 #define __CLC_U_GENTYPE uint8 #define __CLC_S_GENTYPE int8 #define __CLC_VECSIZE 8 @@ -444,8 +600,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE uint16 +#define __CLC_SPIRV_INTERFACE_GENTYPE uint16 #define __CLC_U_GENTYPE uint16 #define __CLC_S_GENTYPE int16 #define __CLC_VECSIZE 16 @@ -454,6 +612,7 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #undef __CLC_VECSIZE_OR_1 #undef __CLC_GENSIZE @@ -464,6 +623,7 @@ #define __CLC_GEN_S #define __CLC_GENTYPE long +#define __CLC_SPIRV_INTERFACE_GENTYPE long #define __CLC_U_GENTYPE ulong #define __CLC_S_GENTYPE long #define __CLC_SCALAR @@ -476,10 +636,12 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_VECSIZE_OR_1 __CLC_VECSIZE #define __CLC_GENTYPE long2 +#define __CLC_SPIRV_INTERFACE_GENTYPE long2 #define __CLC_U_GENTYPE ulong2 #define __CLC_S_GENTYPE long2 #define __CLC_VECSIZE 2 @@ -488,8 +650,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE long3 +#define __CLC_SPIRV_INTERFACE_GENTYPE long3 #define __CLC_U_GENTYPE ulong3 #define __CLC_S_GENTYPE long3 #define __CLC_VECSIZE 3 @@ -498,8 +662,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE long4 +#define __CLC_SPIRV_INTERFACE_GENTYPE long4 #define __CLC_U_GENTYPE ulong4 #define __CLC_S_GENTYPE long4 #define __CLC_VECSIZE 4 @@ -508,8 +674,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE long8 +#define __CLC_SPIRV_INTERFACE_GENTYPE long8 #define __CLC_U_GENTYPE ulong8 #define __CLC_S_GENTYPE long8 #define __CLC_VECSIZE 8 @@ -518,8 +686,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE long16 +#define __CLC_SPIRV_INTERFACE_GENTYPE long16 #define __CLC_U_GENTYPE ulong16 #define __CLC_S_GENTYPE long16 #define __CLC_VECSIZE 16 @@ -528,6 +698,7 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #undef __CLC_VECSIZE_OR_1 #undef __CLC_SCALAR_GENTYPE @@ -536,6 +707,7 @@ #define __CLC_GEN_U #define __CLC_GENTYPE ulong +#define __CLC_SPIRV_INTERFACE_GENTYPE ulong #define __CLC_U_GENTYPE ulong #define __CLC_S_GENTYPE long #define __CLC_SCALAR @@ -549,10 +721,12 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_VECSIZE_OR_1 __CLC_VECSIZE #define __CLC_GENTYPE ulong2 +#define __CLC_SPIRV_INTERFACE_GENTYPE ulong2 #define __CLC_U_GENTYPE ulong2 #define __CLC_S_GENTYPE long2 #define __CLC_VECSIZE 2 @@ -561,8 +735,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE ulong3 +#define __CLC_SPIRV_INTERFACE_GENTYPE ulong3 #define __CLC_U_GENTYPE ulong3 #define __CLC_S_GENTYPE long3 #define __CLC_VECSIZE 3 @@ -571,8 +747,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE ulong4 +#define __CLC_SPIRV_INTERFACE_GENTYPE ulong4 #define __CLC_U_GENTYPE ulong4 #define __CLC_S_GENTYPE long4 #define __CLC_VECSIZE 4 @@ -581,8 +759,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE ulong8 +#define __CLC_SPIRV_INTERFACE_GENTYPE ulong8 #define __CLC_U_GENTYPE ulong8 #define __CLC_S_GENTYPE long8 #define __CLC_VECSIZE 8 @@ -591,8 +771,10 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE ulong16 +#define __CLC_SPIRV_INTERFACE_GENTYPE ulong16 #define __CLC_U_GENTYPE ulong16 #define __CLC_S_GENTYPE long16 #define __CLC_VECSIZE 16 @@ -601,10 +783,12 @@ #undef __CLC_GENTYPE #undef __CLC_U_GENTYPE #undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE #undef __CLC_VECSIZE_OR_1 #undef __CLC_GEN_U +#undef __CLC_CHAR #undef __CLC_GENSIZE #undef __CLC_SCALAR_GENTYPE #undef __CLC_BODY diff --git a/libclc/clc/include/clc/math/gentype.inc b/libclc/clc/include/clc/math/gentype.inc index a8d8317a9cacb..6cc4354f2358d 100644 --- a/libclc/clc/include/clc/math/gentype.inc +++ b/libclc/clc/include/clc/math/gentype.inc @@ -20,6 +20,7 @@ #define __CLC_DOUBLEN __CLC_XCONCAT(double, __CLC_VECSIZE) #define __CLC_CHARN __CLC_XCONCAT(char, __CLC_VECSIZE) +#define __CLC_SCHARN __CLC_XCONCAT(schar, __CLC_VECSIZE) #define __CLC_SHORTN __CLC_XCONCAT(short, __CLC_VECSIZE) #define __CLC_INTN __CLC_XCONCAT(int, __CLC_VECSIZE) #define __CLC_LONGN __CLC_XCONCAT(long, __CLC_VECSIZE) @@ -34,6 +35,7 @@ #define __CLC_AS_DOUBLEN __CLC_XCONCAT(__clc_as_, __CLC_DOUBLEN) #define __CLC_AS_CHARN __CLC_XCONCAT(__clc_as_, __CLC_CHARN) +#define __CLC_AS_SCHARN __CLC_XCONCAT(__clc_as_, __CLC_SCHARN) #define __CLC_AS_SHORTN __CLC_XCONCAT(__clc_as_, __CLC_SHORTN) #define __CLC_AS_INTN __CLC_XCONCAT(__clc_as_, __CLC_INTN) #define __CLC_AS_LONGN __CLC_XCONCAT(__clc_as_, __CLC_LONGN) @@ -48,6 +50,7 @@ #define __CLC_CONVERT_DOUBLEN __CLC_XCONCAT(__clc_convert_double, __CLC_VECSIZE) #define __CLC_CONVERT_CHARN __CLC_XCONCAT(__clc_convert_, __CLC_CHARN) +#define __CLC_CONVERT_SCHARN __CLC_XCONCAT(__clc_convert_, __CLC_SCHARN) #define __CLC_CONVERT_SHORTN __CLC_XCONCAT(__clc_convert_, __CLC_SHORTN) #define __CLC_CONVERT_INTN __CLC_XCONCAT(__clc_convert_, __CLC_INTN) #define __CLC_CONVERT_LONGN __CLC_XCONCAT(__clc_convert_, __CLC_LONGN) @@ -341,6 +344,7 @@ #undef __CLC_LONGN #undef __CLC_INTN #undef __CLC_SHORTN +#undef __CLC_SCHARN #undef __CLC_CHARN #undef __CLC_DOUBLEN diff --git a/libclc/clc/lib/generic/integer/clc_ctz.cl b/libclc/clc/lib/generic/integer/clc_ctz.cl index 50fda4a214b24..71c3d9ea6dd3b 100644 --- a/libclc/clc/lib/generic/integer/clc_ctz.cl +++ b/libclc/clc/lib/generic/integer/clc_ctz.cl @@ -14,6 +14,10 @@ _CLC_OVERLOAD _CLC_DEF char __clc_ctz(char x) { return __clc_ctz(__clc_as_uchar(x)); } +_CLC_OVERLOAD _CLC_DEF schar __clc_ctz(schar x) { + return __clc_ctz(__clc_as_uchar(x)); +} + _CLC_OVERLOAD _CLC_DEF uchar __clc_ctz(uchar x) { return __builtin_ctzg(x, 8); } _CLC_OVERLOAD _CLC_DEF short __clc_ctz(short x) { @@ -39,6 +43,7 @@ _CLC_OVERLOAD _CLC_DEF ulong __clc_ctz(ulong x) { } _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, char, __clc_ctz, char) +_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, schar, __clc_ctz, schar) _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, uchar, __clc_ctz, uchar) _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, short, __clc_ctz, short) _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, ushort, __clc_ctz, ushort) diff --git a/libclc/clc/lib/generic/integer/clc_mad_sat.cl b/libclc/clc/lib/generic/integer/clc_mad_sat.cl index 7c6aaffe6c5c7..cb9d085d7cebc 100644 --- a/libclc/clc/lib/generic/integer/clc_mad_sat.cl +++ b/libclc/clc/lib/generic/integer/clc_mad_sat.cl @@ -36,6 +36,7 @@ __CLC_DEFINE_SIMPLE_MAD_SAT(TYPE##16, UP_TYPE##16, LIT_PREFIX) __CLC_DEFINE_SIMPLE_MAD_SAT_ALL_TYS(char, int, CHAR) +__CLC_DEFINE_SIMPLE_MAD_SAT_ALL_TYS(schar, int, SCHAR) __CLC_DEFINE_SIMPLE_MAD_SAT_ALL_TYS(uchar, uint, UCHAR) __CLC_DEFINE_SIMPLE_MAD_SAT_ALL_TYS(short, int, SHRT) __CLC_DEFINE_SIMPLE_MAD_SAT_ALL_TYS(ushort, uint, USHRT) diff --git a/libclc/clc/lib/generic/integer/clc_mul_hi.cl b/libclc/clc/lib/generic/integer/clc_mul_hi.cl index 117d8471fb8a3..2cd95b299711f 100644 --- a/libclc/clc/lib/generic/integer/clc_mul_hi.cl +++ b/libclc/clc/lib/generic/integer/clc_mul_hi.cl @@ -114,6 +114,7 @@ _CLC_OVERLOAD _CLC_DEF ulong __clc_mul_hi(ulong x, ulong y) { #define __CLC_MUL_HI_TYPES() \ __CLC_MUL_HI_DEC_IMPL(short, char, 8) \ + __CLC_MUL_HI_DEC_IMPL(short, schar, 8) \ __CLC_MUL_HI_DEC_IMPL(ushort, uchar, 8) \ __CLC_MUL_HI_DEC_IMPL(int, short, 16) \ __CLC_MUL_HI_DEC_IMPL(uint, ushort, 16) \ diff --git a/libclc/clc/lib/generic/misc/clc_shuffle.cl b/libclc/clc/lib/generic/misc/clc_shuffle.cl index f02e7aec9a0b8..83ea39f35191d 100644 --- a/libclc/clc/lib/generic/misc/clc_shuffle.cl +++ b/libclc/clc/lib/generic/misc/clc_shuffle.cl @@ -138,6 +138,7 @@ _CLC_VECTOR_SHUFFLE_MASKSIZE(TYPE, 16, MASKTYPE) _CLC_VECTOR_SHUFFLE_INSIZE(char, uchar) +_CLC_VECTOR_SHUFFLE_INSIZE(schar, uchar) _CLC_VECTOR_SHUFFLE_INSIZE(short, ushort) _CLC_VECTOR_SHUFFLE_INSIZE(int, uint) _CLC_VECTOR_SHUFFLE_INSIZE(long, ulong) diff --git a/libclc/clc/lib/generic/misc/clc_shuffle2.cl b/libclc/clc/lib/generic/misc/clc_shuffle2.cl index db97f7c5cf960..74dfe04c77f31 100644 --- a/libclc/clc/lib/generic/misc/clc_shuffle2.cl +++ b/libclc/clc/lib/generic/misc/clc_shuffle2.cl @@ -139,6 +139,7 @@ _CLC_VECTOR_SHUFFLE_MASKSIZE(TYPE, 16, MASKTYPE) _CLC_VECTOR_SHUFFLE_INSIZE(char, uchar) +_CLC_VECTOR_SHUFFLE_INSIZE(schar, uchar) _CLC_VECTOR_SHUFFLE_INSIZE(short, ushort) _CLC_VECTOR_SHUFFLE_INSIZE(int, uint) _CLC_VECTOR_SHUFFLE_INSIZE(long, ulong) diff --git a/libclc/libspirv/include/libspirv/async/gentype.inc b/libclc/libspirv/include/libspirv/async/gentype.inc index 1b678f8a4ad00..d759642bd4784 100644 --- a/libclc/libspirv/include/libspirv/async/gentype.inc +++ b/libclc/libspirv/include/libspirv/async/gentype.inc @@ -46,6 +46,46 @@ #undef __CLC_GENTYPE_MANGLED #undef __CLC_GENTYPE +#ifndef __CLC_NO_SCHAR +#define __CLC_GENTYPE schar +#define __CLC_GENTYPE_MANGLED a +#include __CLC_BODY +#undef __CLC_GENTYPE_MANGLED +#undef __CLC_GENTYPE + +#define __CLC_GENTYPE schar2 +#define __CLC_GENTYPE_MANGLED Dv2_a +#include __CLC_BODY +#undef __CLC_GENTYPE_MANGLED +#undef __CLC_GENTYPE + +#ifdef __CLC_GEN_VEC3 +#define __CLC_GENTYPE schar3 +#define __CLC_GENTYPE_MANGLED Dv3_a +#include __CLC_BODY +#undef __CLC_GENTYPE_MANGLED +#undef __CLC_GENTYPE +#endif + +#define __CLC_GENTYPE schar4 +#define __CLC_GENTYPE_MANGLED Dv4_a +#include __CLC_BODY +#undef __CLC_GENTYPE_MANGLED +#undef __CLC_GENTYPE + +#define __CLC_GENTYPE schar8 +#define __CLC_GENTYPE_MANGLED Dv8_a +#include __CLC_BODY +#undef __CLC_GENTYPE_MANGLED +#undef __CLC_GENTYPE + +#define __CLC_GENTYPE schar16 +#define __CLC_GENTYPE_MANGLED Dv16_a +#include __CLC_BODY +#undef __CLC_GENTYPE_MANGLED +#undef __CLC_GENTYPE +#endif + #define __CLC_GENTYPE uchar #define __CLC_GENTYPE_MANGLED h #include __CLC_BODY diff --git a/libclc/libspirv/include/libspirv/lp64_types.h b/libclc/libspirv/include/libspirv/lp64_types.h index aa8e9ad85be63..2cf6a948a5d4b 100644 --- a/libclc/libspirv/include/libspirv/lp64_types.h +++ b/libclc/libspirv/include/libspirv/lp64_types.h @@ -22,12 +22,12 @@ typedef char __clc_vec4_char_t __attribute__((ext_vector_type(4))); typedef char __clc_vec8_char_t __attribute__((ext_vector_type(8))); typedef char __clc_vec16_char_t __attribute__((ext_vector_type(16))); -typedef char __clc_int8_t; -typedef char __clc_vec2_int8_t __attribute__((ext_vector_type(2))); -typedef char __clc_vec3_int8_t __attribute__((ext_vector_type(3))); -typedef char __clc_vec4_int8_t __attribute__((ext_vector_type(4))); -typedef char __clc_vec8_int8_t __attribute__((ext_vector_type(8))); -typedef char __clc_vec16_int8_t __attribute__((ext_vector_type(16))); +typedef signed char __clc_int8_t; +typedef signed char __clc_vec2_int8_t __attribute__((ext_vector_type(2))); +typedef signed char __clc_vec3_int8_t __attribute__((ext_vector_type(3))); +typedef signed char __clc_vec4_int8_t __attribute__((ext_vector_type(4))); +typedef signed char __clc_vec8_int8_t __attribute__((ext_vector_type(8))); +typedef signed char __clc_vec16_int8_t __attribute__((ext_vector_type(16))); typedef unsigned char __clc_uint8_t; typedef unsigned char __clc_vec2_uint8_t __attribute__((ext_vector_type(2))); diff --git a/libclc/libspirv/include/libspirv/ptx-nvidiacl/async/gentype.inc b/libclc/libspirv/include/libspirv/ptx-nvidiacl/async/gentype.inc index 3ca00675abfdd..2d65ac9216adf 100644 --- a/libclc/libspirv/include/libspirv/ptx-nvidiacl/async/gentype.inc +++ b/libclc/libspirv/include/libspirv/ptx-nvidiacl/async/gentype.inc @@ -28,6 +28,29 @@ #undef __CLC_GENTYPE #endif +#ifndef __CLC_NO_SCHAR +#define __CLC_GENTYPE schar +#define __CLC_GENTYPE_MANGLED a +#include __CLC_BODY +#undef __CLC_GENTYPE_MANGLED +#undef __CLC_GENTYPE + +#define __CLC_GENTYPE schar2 +#define __CLC_GENTYPE_MANGLED Dv2_a +#include __CLC_BODY +#undef __CLC_GENTYPE_MANGLED +#undef __CLC_GENTYPE + +#ifdef __CLC_GEN_VEC3 +#define __CLC_GENTYPE schar3 +#define __CLC_GENTYPE_MANGLED Dv3_a +#include __CLC_BODY +#undef __CLC_GENTYPE_MANGLED +#undef __CLC_GENTYPE +#endif + +#endif + #define __CLC_GENTYPE uchar #define __CLC_GENTYPE_MANGLED h #include __CLC_BODY diff --git a/libclc/libspirv/lib/generic/gen_convert.py b/libclc/libspirv/lib/generic/gen_convert.py index 899476cd4e82a..52daf3f1dbfee 100755 --- a/libclc/libspirv/lib/generic/gen_convert.py +++ b/libclc/libspirv/lib/generic/gen_convert.py @@ -42,6 +42,9 @@ clc_core_fn_name, ) +types.remove("char") +int_types.remove("char") +signed_types.remove("char") rounding_modes = [""] + rounding_modes print( @@ -110,6 +113,9 @@ def spirv_fn_name(src, dst, size="", mode="", sat="", force_sat_decoration=False is_dst_signed = dst in signed_types use_sat_insn = sat != "" and not force_sat_decoration + if dst == "schar": + dst = "char" + if is_src_unsigned and is_dst_signed and use_sat_insn: return "__spirv_SatConvertUToS_R{DST}{N}".format(DST=dst, N=size) elif is_src_signed and is_dst_unsigned and use_sat_insn: diff --git a/libclc/libspirv/lib/generic/gen_convert_common.py b/libclc/libspirv/lib/generic/gen_convert_common.py index 53c8bf1290bf4..136f505d59b4e 100644 --- a/libclc/libspirv/lib/generic/gen_convert_common.py +++ b/libclc/libspirv/lib/generic/gen_convert_common.py @@ -3,6 +3,7 @@ types = [ "char", + "schar", "uchar", "short", "ushort", @@ -16,6 +17,7 @@ ] int_types = [ "char", + "schar", "uchar", "short", "ushort", @@ -25,7 +27,7 @@ "ulong", ] unsigned_types = ["uchar", "ushort", "uint", "ulong"] -signed_types = ["char", "short", "int", "long"] +signed_types = ["char", "schar", "short", "int", "long"] float_types = ["half", "float", "double"] int64_types = ["long", "ulong"] float64_types = ["double"] @@ -40,7 +42,8 @@ bool_type = { "char": "char", - "uchar": "char", + "schar": "schar", + "uchar": "schar", "short": "short", "ushort": "short", "int": "int", @@ -54,6 +57,7 @@ unsigned_type = { "char": "uchar", + "schar": "uchar", "uchar": "uchar", "short": "ushort", "ushort": "ushort", @@ -65,6 +69,7 @@ sizeof_type = { "char": 1, + "schar": 1, "uchar": 1, "short": 2, "ushort": 2, @@ -79,6 +84,7 @@ limit_max = { "char": "CHAR_MAX", + "schar": "CHAR_MAX", "uchar": "UCHAR_MAX", "short": "SHRT_MAX", "ushort": "USHRT_MAX", @@ -91,6 +97,7 @@ limit_min = { "char": "CHAR_MIN", + "schar": "CHAR_MIN", "uchar": "0", "short": "SHRT_MIN", "ushort": "0", diff --git a/libclc/libspirv/lib/generic/geometric/normalize.cl b/libclc/libspirv/lib/generic/geometric/normalize.cl index bf706bd6d3398..d6f9d7f1c9cdf 100644 --- a/libclc/libspirv/lib/generic/geometric/normalize.cl +++ b/libclc/libspirv/lib/generic/geometric/normalize.cl @@ -6,8 +6,6 @@ // //===----------------------------------------------------------------------===// -#include -#include #include #define HALF_MAX_SQRT 0x1.0p+8h @@ -17,7 +15,8 @@ MAX_SQRT, MIN_SQRT) \ _CLC_OVERLOAD _CLC_DEF FP_TYPE##VLEN __spirv_ocl_normalize( \ FP_TYPE##VLEN p) { \ - if (__clc_all(p == (FP_TYPE##VLEN)0.0##FLOAT_MARK)) \ + if (__spirv_All(__spirv_SConvert_Rchar##VLEN( \ + p == (FP_TYPE##VLEN)0.0##FLOAT_MARK))) \ return p; \ FP_TYPE l2 = __spirv_Dot(p, p); \ if (l2 < FLT_MIN) { \ @@ -31,7 +30,7 @@ __spirv_ocl_select( \ (FP_TYPE##VLEN)0.0##FLOAT_MARK, \ (FP_TYPE##VLEN)1.0##FLOAT_MARK, \ - __clc_convert_##INT_TYPE##VLEN(__spirv_IsInf(p))), \ + __spirv_SConvert_R##INT_TYPE##VLEN(__spirv_IsInf(p))), \ p); \ l2 = __spirv_Dot(p, p); \ } \ diff --git a/libclc/libspirv/lib/generic/integer/upsample.cl b/libclc/libspirv/lib/generic/integer/upsample.cl index 3114c9ffdf702..c8987a7e581ea 100644 --- a/libclc/libspirv/lib/generic/integer/upsample.cl +++ b/libclc/libspirv/lib/generic/integer/upsample.cl @@ -37,6 +37,7 @@ #define __CLC_UPSAMPLE_TYPES() \ __CLC_UPSAMPLE_IMPL(s, short, char, uchar, char) \ + __CLC_UPSAMPLE_IMPL(s, short, schar, uchar, char) \ __CLC_UPSAMPLE_IMPL(u, ushort, uchar, uchar, uchar) \ __CLC_UPSAMPLE_IMPL(s, int, short, ushort, short) \ __CLC_UPSAMPLE_IMPL(u, uint, ushort, ushort, ushort) \ diff --git a/libclc/libspirv/lib/generic/math/fract.cl b/libclc/libspirv/lib/generic/math/fract.cl index cc2da2c00189a..ce768090bd73c 100644 --- a/libclc/libspirv/lib/generic/math/fract.cl +++ b/libclc/libspirv/lib/generic/math/fract.cl @@ -6,7 +6,6 @@ // //===----------------------------------------------------------------------===// -#include #include #include diff --git a/libclc/libspirv/lib/generic/math/fract.inc b/libclc/libspirv/lib/generic/math/fract.inc index 01e61c6b975f4..24a559238368d 100644 --- a/libclc/libspirv/lib/generic/math/fract.inc +++ b/libclc/libspirv/lib/generic/math/fract.inc @@ -9,20 +9,29 @@ #if __CLC_FPSIZE == 64 #define MIN_CONSTANT 0x1.fffffffffffffp-1 #define ZERO (__CLC_GENTYPE)0.0 +#define __CLC_BOOLN __CLC_XCONCAT(long, __CLC_VECSIZE) #elif __CLC_FPSIZE == 32 #define MIN_CONSTANT 0x1.fffffep-1f #define ZERO (__CLC_GENTYPE)0.0f +#define __CLC_BOOLN __CLC_XCONCAT(int, __CLC_VECSIZE) #elif __CLC_FPSIZE == 16 #define MIN_CONSTANT 0x1.ffcp-1h #define ZERO (__CLC_GENTYPE)0.0h +#define __CLC_BOOLN __CLC_XCONCAT(short, __CLC_VECSIZE) +#endif + +#ifdef __CLC_SCALAR +#define __CLC_CONVERT +#else +#define __CLC_CONVERT __CLC_XCONCAT(__spirv_SConvert_R, __CLC_BOOLN) #endif _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __spirv_ocl_fract(__CLC_GENTYPE x, __private __CLC_GENTYPE *iptr) { *iptr = __spirv_ocl_floor(x); __CLC_GENTYPE r = __spirv_ocl_fmin(x - *iptr, MIN_CONSTANT); - r = __CLC_CONVERT_BIT_INTN(__spirv_IsInf(x)) ? ZERO : r; - r = __CLC_CONVERT_BIT_INTN(__spirv_IsNan(x)) ? x : r; + r = __CLC_CONVERT(__spirv_IsInf(x)) ? ZERO : r; + r = __CLC_CONVERT(__spirv_IsNan(x)) ? x : r; return r; } @@ -43,3 +52,5 @@ FRACT_DEF(generic); #undef MIN_CONSTANT #undef ZERO +#undef __CLC_CONVERT +#undef __CLC_BOOLN diff --git a/libclc/libspirv/lib/generic/math/maxmag.cl b/libclc/libspirv/lib/generic/math/maxmag.cl index 5714c61ca7ab9..6117489141fb7 100644 --- a/libclc/libspirv/lib/generic/math/maxmag.cl +++ b/libclc/libspirv/lib/generic/math/maxmag.cl @@ -6,9 +6,8 @@ // //===----------------------------------------------------------------------===// -#include -#include #include +#include #define __CLC_BODY #include diff --git a/libclc/libspirv/lib/generic/math/maxmag.inc b/libclc/libspirv/lib/generic/math/maxmag.inc index 44cf21cfda992..9fa4702f0b6ad 100644 --- a/libclc/libspirv/lib/generic/math/maxmag.inc +++ b/libclc/libspirv/lib/generic/math/maxmag.inc @@ -6,15 +6,26 @@ // //===----------------------------------------------------------------------===// +#if __CLC_FPSIZE == 64 +#define __CLC_CONVERT_NATN __CLC_XCONCAT(__spirv_SConvert_Rlong, __CLC_VECSIZE) +#elif __CLC_FPSIZE == 32 +#define __CLC_CONVERT_NATN __CLC_XCONCAT(__spirv_SConvert_Rint, __CLC_VECSIZE) +#elif __CLC_FPSIZE == 16 +#define __CLC_CONVERT_NATN __CLC_XCONCAT(__spirv_SConvert_Rshort, __CLC_VECSIZE) +#endif + _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __spirv_ocl_maxmag(__CLC_GENTYPE x, __CLC_GENTYPE y) { - const __CLC_GENTYPE res = - __spirv_ocl_select(y, x, - __CLC_CONVERT_BIT_INTN(__spirv_FOrdGreaterThan( - __spirv_ocl_fabs(x), __spirv_ocl_fabs(y)))); + const __CLC_GENTYPE res = __spirv_ocl_select( + y, x, + __CLC_CONVERT_NATN((__CLC_SCHARN)__spirv_FOrdGreaterThan( + __spirv_ocl_fabs(x), __spirv_ocl_fabs(y)))); return __spirv_ocl_select( res, __spirv_ocl_fmax(x, y), - __CLC_CONVERT_BIT_INTN( - (__spirv_IsNan(x) | __spirv_IsNan(y) | - __spirv_FOrdEqual(__spirv_ocl_fabs(x), __spirv_ocl_fabs(y))))); + __CLC_CONVERT_NATN( + (__CLC_SCHARN)(__spirv_IsNan(x) | __spirv_IsNan(y) | + __spirv_FOrdEqual(__spirv_ocl_fabs(x), + __spirv_ocl_fabs(y))))); } + +#undef __CLC_CONVERT_NATN diff --git a/libclc/libspirv/lib/generic/math/minmag.cl b/libclc/libspirv/lib/generic/math/minmag.cl index 7fb773c6fdf9a..fb6392b76eb63 100644 --- a/libclc/libspirv/lib/generic/math/minmag.cl +++ b/libclc/libspirv/lib/generic/math/minmag.cl @@ -6,9 +6,8 @@ // //===----------------------------------------------------------------------===// -#include -#include #include +#include #define __CLC_BODY #include diff --git a/libclc/libspirv/lib/generic/math/minmag.inc b/libclc/libspirv/lib/generic/math/minmag.inc index 9be181f718bff..5548f9dd226dc 100644 --- a/libclc/libspirv/lib/generic/math/minmag.inc +++ b/libclc/libspirv/lib/generic/math/minmag.inc @@ -6,15 +6,25 @@ // //===----------------------------------------------------------------------===// +#if __CLC_FPSIZE == 64 +#define __CLC_CONVERT_NATN __CLC_XCONCAT(__spirv_SConvert_Rlong, __CLC_VECSIZE) +#elif __CLC_FPSIZE == 32 +#define __CLC_CONVERT_NATN __CLC_XCONCAT(__spirv_SConvert_Rint, __CLC_VECSIZE) +#elif __CLC_FPSIZE == 16 +#define __CLC_CONVERT_NATN __CLC_XCONCAT(__spirv_SConvert_Rshort, __CLC_VECSIZE) +#endif + _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __spirv_ocl_minmag(__CLC_GENTYPE x, __CLC_GENTYPE y) { const __CLC_GENTYPE res = __spirv_ocl_select(y, x, - __CLC_CONVERT_BIT_INTN(__spirv_FOrdLessThan( + __CLC_CONVERT_NATN((__CLC_SCHARN)__spirv_FOrdLessThan( __spirv_ocl_fabs(x), __spirv_ocl_fabs(y)))); return __spirv_ocl_select( res, __spirv_ocl_fmin(x, y), - __CLC_CONVERT_BIT_INTN( - (__spirv_IsNan(x) | __spirv_IsNan(y) | - __spirv_FOrdEqual(__spirv_ocl_fabs(x), __spirv_ocl_fabs(y))))); + __CLC_CONVERT_NATN( (__CLC_SCHARN)(__spirv_IsNan(x) | __spirv_IsNan(y) | + __spirv_FOrdEqual(__spirv_ocl_fabs(x), + __spirv_ocl_fabs(y))))); } + +#undef __CLC_CONVERT_NATN diff --git a/libclc/libspirv/lib/generic/relational/all.cl b/libclc/libspirv/lib/generic/relational/all.cl index 5f97bbe99b181..9301125e8a587 100644 --- a/libclc/libspirv/lib/generic/relational/all.cl +++ b/libclc/libspirv/lib/generic/relational/all.cl @@ -29,4 +29,4 @@ ALL_ID(TYPE##8) { return _CLC_ALL8(v); } \ ALL_ID(TYPE##16) { return _CLC_ALL16(v); } -ALL_VECTORIZE(char) +ALL_VECTORIZE(schar) diff --git a/libclc/libspirv/lib/generic/relational/any.cl b/libclc/libspirv/lib/generic/relational/any.cl index 18801274fd706..601abf0e6fb51 100644 --- a/libclc/libspirv/lib/generic/relational/any.cl +++ b/libclc/libspirv/lib/generic/relational/any.cl @@ -29,4 +29,4 @@ ANY_ID(TYPE##8) { return _CLC_ANY8(v); } \ ANY_ID(TYPE##16) { return _CLC_ANY16(v); } -ANY_VECTORIZE(char) +ANY_VECTORIZE(schar) diff --git a/libclc/libspirv/lib/generic/relational/genbinrelational.inc b/libclc/libspirv/lib/generic/relational/genbinrelational.inc index 364b781a89c04..14a41401839ac 100644 --- a/libclc/libspirv/lib/generic/relational/genbinrelational.inc +++ b/libclc/libspirv/lib/generic/relational/genbinrelational.inc @@ -8,7 +8,7 @@ _CLC_DEFINE_RELATIONAL_BINARY_SCALAR(bool, _CLC_SPIRV_BUILTIN, _CLC_BUILTIN_IMPL, float, float) -_CLC_DEFINE_RELATIONAL_BINARY_VEC_ALL(char, _CLC_SPIRV_BUILTIN, float, float) +_CLC_DEFINE_RELATIONAL_BINARY_VEC_ALL(schar, _CLC_SPIRV_BUILTIN, float, float) #ifdef cl_khr_fp64 @@ -16,7 +16,7 @@ _CLC_DEFINE_RELATIONAL_BINARY_VEC_ALL(char, _CLC_SPIRV_BUILTIN, float, float) _CLC_DEFINE_RELATIONAL_BINARY_SCALAR(bool, _CLC_SPIRV_BUILTIN, _CLC_BUILTIN_IMPL, double, double) -_CLC_DEFINE_RELATIONAL_BINARY_VEC_ALL(char, _CLC_SPIRV_BUILTIN, double, double) +_CLC_DEFINE_RELATIONAL_BINARY_VEC_ALL(schar, _CLC_SPIRV_BUILTIN, double, double) #endif @@ -26,6 +26,6 @@ _CLC_DEFINE_RELATIONAL_BINARY_VEC_ALL(char, _CLC_SPIRV_BUILTIN, double, double) _CLC_DEFINE_RELATIONAL_BINARY_SCALAR(bool, _CLC_SPIRV_BUILTIN, _CLC_BUILTIN_IMPL, half, half) -_CLC_DEFINE_RELATIONAL_BINARY_VEC_ALL(char, _CLC_SPIRV_BUILTIN, half, half) +_CLC_DEFINE_RELATIONAL_BINARY_VEC_ALL(schar, _CLC_SPIRV_BUILTIN, half, half) #endif diff --git a/libclc/libspirv/lib/generic/relational/genunary.inc b/libclc/libspirv/lib/generic/relational/genunary.inc index 7f373d0a27618..80137ca3bc629 100644 --- a/libclc/libspirv/lib/generic/relational/genunary.inc +++ b/libclc/libspirv/lib/generic/relational/genunary.inc @@ -8,7 +8,7 @@ _CLC_DEFINE_RELATIONAL_UNARY_SCALAR(bool, _CLC_SPIRV_BUILTIN, _CLC_BUILTIN_IMPL, float) -_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(char, _CLC_SPIRV_BUILTIN, float) +_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(schar, _CLC_SPIRV_BUILTIN, float) #ifdef cl_khr_fp64 @@ -16,7 +16,7 @@ _CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(char, _CLC_SPIRV_BUILTIN, float) _CLC_DEFINE_RELATIONAL_UNARY_SCALAR(bool, _CLC_SPIRV_BUILTIN, _CLC_BUILTIN_IMPL, double) -_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(char, _CLC_SPIRV_BUILTIN, double) +_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(schar, _CLC_SPIRV_BUILTIN, double) #endif #ifdef cl_khr_fp16 @@ -25,6 +25,6 @@ _CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(char, _CLC_SPIRV_BUILTIN, double) _CLC_DEFINE_RELATIONAL_UNARY_SCALAR(bool, _CLC_SPIRV_BUILTIN, _CLC_BUILTIN_IMPL, half) -_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(char, _CLC_SPIRV_BUILTIN, half) +_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(schar, _CLC_SPIRV_BUILTIN, half) #endif diff --git a/libclc/libspirv/lib/generic/shared/vload.cl b/libclc/libspirv/lib/generic/shared/vload.cl index 4d7d61813abdc..d3c8163e9b2a8 100644 --- a/libclc/libspirv/lib/generic/shared/vload.cl +++ b/libclc/libspirv/lib/generic/shared/vload.cl @@ -76,7 +76,7 @@ #define VLOAD_ADDR_SPACES(__CLC_SCALAR_GENTYPE) \ VLOAD_ADDR_SPACES_IMPL(__CLC_SCALAR_GENTYPE, __CLC_SCALAR_GENTYPE) -VLOAD_ADDR_SPACES_IMPL(char, char) +VLOAD_ADDR_SPACES_IMPL(char, schar) #define VLOAD_TYPES() \ VLOAD_ADDR_SPACES(uchar) \ diff --git a/libclc/libspirv/lib/generic/shared/vstore.cl b/libclc/libspirv/lib/generic/shared/vstore.cl index 74bd35c3032d2..cf0e5fd0f706b 100644 --- a/libclc/libspirv/lib/generic/shared/vstore.cl +++ b/libclc/libspirv/lib/generic/shared/vstore.cl @@ -71,7 +71,7 @@ VSTORE_VECTORIZE(__CLC_SCALAR___CLC_GENTYPE, __global) \ VSTORE_VECTORIZE_GENERIC(__CLC_SCALAR___CLC_GENTYPE, __generic) -VSTORE_ADDR_SPACES(char) +VSTORE_ADDR_SPACES(schar) VSTORE_ADDR_SPACES(uchar) VSTORE_ADDR_SPACES(short) VSTORE_ADDR_SPACES(ushort) diff --git a/libclc/libspirv/lib/native_cpu/integer/popcount.cl b/libclc/libspirv/lib/native_cpu/integer/popcount.cl index 028b5a36379ce..d6a90d8950b16 100644 --- a/libclc/libspirv/lib/native_cpu/integer/popcount.cl +++ b/libclc/libspirv/lib/native_cpu/integer/popcount.cl @@ -13,21 +13,15 @@ _CLC_OVERLOAD TYPE __popcount_helper(TYPE c) { \ } DEF_POPCOUNT_HELPER(char, unsigned char) +DEF_POPCOUNT_HELPER(schar, unsigned char) DEF_POPCOUNT_HELPER(short, unsigned short) -_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(int, __spirv_ocl_popcount, - __builtin_popcount, int) -_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(uint, __spirv_ocl_popcount, - __builtin_popcount, uint) -_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(short, __spirv_ocl_popcount, - __popcount_helper, short) -_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(ushort, __spirv_ocl_popcount, - __builtin_popcountg, ushort) -_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(long, __spirv_ocl_popcount, - __builtin_popcountl, long) -_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(ulong, __spirv_ocl_popcount, - __builtin_popcountl, ulong) -_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(char, __spirv_ocl_popcount, - __popcount_helper, char) -_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(uchar, __spirv_ocl_popcount, - __builtin_popcountg, uchar) +_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(int, __spirv_ocl_popcount, __builtin_popcount, int) +_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(uint, __spirv_ocl_popcount, __builtin_popcount, uint) +_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(short, __spirv_ocl_popcount, __popcount_helper, short) +_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(ushort, __spirv_ocl_popcount, __builtin_popcountg, ushort) +_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(long, __spirv_ocl_popcount, __builtin_popcountl, long) +_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(ulong, __spirv_ocl_popcount, __builtin_popcountl, ulong) +_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(char, __spirv_ocl_popcount, __popcount_helper, char) +_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(uchar, __spirv_ocl_popcount, __builtin_popcountg, uchar) +_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(schar, __spirv_ocl_popcount, __popcount_helper, schar) diff --git a/libclc/libspirv/lib/ptx-nvidiacl/async/async_work_group_strided_copy.cl b/libclc/libspirv/lib/ptx-nvidiacl/async/async_work_group_strided_copy.cl index 49008ad57dc36..3c3a7dbc50312 100644 --- a/libclc/libspirv/lib/ptx-nvidiacl/async/async_work_group_strided_copy.cl +++ b/libclc/libspirv/lib/ptx-nvidiacl/async/async_work_group_strided_copy.cl @@ -53,6 +53,9 @@ __CLC_GROUP_CP_ASYNC_DST_GLOBAL(ushort8); __CLC_GROUP_CP_ASYNC_DST_GLOBAL(char4); __CLC_GROUP_CP_ASYNC_DST_GLOBAL(char8); __CLC_GROUP_CP_ASYNC_DST_GLOBAL(char16); +__CLC_GROUP_CP_ASYNC_DST_GLOBAL(schar4); +__CLC_GROUP_CP_ASYNC_DST_GLOBAL(schar8); +__CLC_GROUP_CP_ASYNC_DST_GLOBAL(schar16); __CLC_GROUP_CP_ASYNC_DST_GLOBAL(uchar4); __CLC_GROUP_CP_ASYNC_DST_GLOBAL(uchar8); __CLC_GROUP_CP_ASYNC_DST_GLOBAL(uchar16); @@ -85,6 +88,7 @@ __CLC_GROUP_CP_ASYNC_4(short2); __CLC_GROUP_CP_ASYNC_4(ushort2); __CLC_GROUP_CP_ASYNC_4(half2); __CLC_GROUP_CP_ASYNC_4(char4); +__CLC_GROUP_CP_ASYNC_4(schar4); __CLC_GROUP_CP_ASYNC_4(uchar4); #undef __CLC_GROUP_CP_ASYNC_4 @@ -118,6 +122,7 @@ __CLC_GROUP_CP_ASYNC_8(int2); __CLC_GROUP_CP_ASYNC_8(uint2); __CLC_GROUP_CP_ASYNC_8(float2); __CLC_GROUP_CP_ASYNC_8(char8); +__CLC_GROUP_CP_ASYNC_8(schar8); __CLC_GROUP_CP_ASYNC_8(uchar8); #undef __CLC_GROUP_CP_ASYNC_8 @@ -152,5 +157,6 @@ __CLC_GROUP_CP_ASYNC_8(uchar8); __CLC_GROUP_CP_ASYNC_16(half8); __CLC_GROUP_CP_ASYNC_16(char16); __CLC_GROUP_CP_ASYNC_16(uchar16); + __CLC_GROUP_CP_ASYNC_16(schar16); #undef __CLC_GROUP_CP_ASYNC_16 diff --git a/libclc/libspirv/lib/ptx-nvidiacl/integer/mul_hi.cl b/libclc/libspirv/lib/ptx-nvidiacl/integer/mul_hi.cl index 7844544982e4a..56593bbcb0c31 100644 --- a/libclc/libspirv/lib/ptx-nvidiacl/integer/mul_hi.cl +++ b/libclc/libspirv/lib/ptx-nvidiacl/integer/mul_hi.cl @@ -33,12 +33,15 @@ _CLC_OVERLOAD _CLC_DEF ulong __spirv_ocl_u_mul_hi(ulong x, ulong y) { } __CLC_MUL_HI_IMPL(short, __spirv_ocl_s_mul_hi, char, 8) +__CLC_MUL_HI_IMPL(short, __spirv_ocl_s_mul_hi, schar, 8) __CLC_MUL_HI_IMPL(ushort, __spirv_ocl_u_mul_hi, uchar, 8) __CLC_MUL_HI_IMPL(int, __spirv_ocl_s_mul_hi, short, 16) __CLC_MUL_HI_IMPL(uint, __spirv_ocl_u_mul_hi, ushort, 16) _CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, char, __spirv_ocl_s_mul_hi, char, char) +_CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, schar, __spirv_ocl_s_mul_hi, + schar, schar) _CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, short, __spirv_ocl_s_mul_hi, short, short) _CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, int, __spirv_ocl_s_mul_hi, int, diff --git a/libclc/libspirv/lib/ptx-nvidiacl/relational/isfinite.cl b/libclc/libspirv/lib/ptx-nvidiacl/relational/isfinite.cl index 05fbd70e6195c..35eac192d2e62 100644 --- a/libclc/libspirv/lib/ptx-nvidiacl/relational/isfinite.cl +++ b/libclc/libspirv/lib/ptx-nvidiacl/relational/isfinite.cl @@ -19,7 +19,7 @@ _CLC_DEF _CLC_OVERLOAD bool __spirv_IsFinite(double x) { return __nv_isfinited(x); } -_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(char, __spirv_IsFinite, double) +_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(schar, __spirv_IsFinite, double) #endif @@ -27,7 +27,7 @@ _CLC_DEF _CLC_OVERLOAD bool __spirv_IsFinite(float x) { return __nv_isfinited(x); } -_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(char, __spirv_IsFinite, float) +_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(schar, __spirv_IsFinite, float) #ifdef cl_khr_fp16 @@ -37,6 +37,6 @@ _CLC_DEF _CLC_OVERLOAD bool __spirv_IsFinite(half x) { return __nv_isfinited(x); } -_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(char, __spirv_IsFinite, half) +_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(schar, __spirv_IsFinite, half) #endif diff --git a/libclc/libspirv/lib/ptx-nvidiacl/relational/isinf.cl b/libclc/libspirv/lib/ptx-nvidiacl/relational/isinf.cl index a0d6dfd89aebe..bec7872b834b2 100644 --- a/libclc/libspirv/lib/ptx-nvidiacl/relational/isinf.cl +++ b/libclc/libspirv/lib/ptx-nvidiacl/relational/isinf.cl @@ -13,7 +13,7 @@ _CLC_DEF _CLC_OVERLOAD bool __spirv_IsInf(float x) { return __nv_isinff(x); } -_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(char, __spirv_IsInf, float) +_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(schar, __spirv_IsInf, float) #ifdef cl_khr_fp64 @@ -21,7 +21,7 @@ _CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(char, __spirv_IsInf, float) _CLC_DEF _CLC_OVERLOAD bool __spirv_IsInf(double x) { return __nv_isinfd(x); } -_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(char, __spirv_IsInf, double) +_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(schar, __spirv_IsInf, double) #endif #ifdef cl_khr_fp16 @@ -33,5 +33,5 @@ _CLC_DEF _CLC_OVERLOAD bool __spirv_IsInf(half x) { return __spirv_IsInf(f); } -_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(char, __spirv_IsInf, half) +_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(schar, __spirv_IsInf, half) #endif diff --git a/libclc/libspirv/lib/ptx-nvidiacl/relational/isnan.cl b/libclc/libspirv/lib/ptx-nvidiacl/relational/isnan.cl index 1a391fbfdcf2e..cba65a524f36a 100644 --- a/libclc/libspirv/lib/ptx-nvidiacl/relational/isnan.cl +++ b/libclc/libspirv/lib/ptx-nvidiacl/relational/isnan.cl @@ -13,7 +13,7 @@ _CLC_DEF _CLC_OVERLOAD bool __spirv_IsNan(float x) { return __nv_isnanf(x); } -_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(char, __spirv_IsNan, float) +_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(schar, __spirv_IsNan, float) #ifdef cl_khr_fp64 @@ -21,7 +21,7 @@ _CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(char, __spirv_IsNan, float) _CLC_DEF _CLC_OVERLOAD bool __spirv_IsNan(double x) { return __nv_isnand(x); } -_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(char, __spirv_IsNan, double) +_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(schar, __spirv_IsNan, double) #endif #ifdef cl_khr_fp16 @@ -33,5 +33,5 @@ _CLC_DEF _CLC_OVERLOAD bool __spirv_IsNan(half x) { return __spirv_IsNan(f); } -_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(char, __spirv_IsNan, half) +_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(schar, __spirv_IsNan, half) #endif diff --git a/libclc/opencl/include/clc/opencl/as_type.h b/libclc/opencl/include/clc/opencl/as_type.h index b122614de1d74..d661ff3fd89a9 100644 --- a/libclc/opencl/include/clc/opencl/as_type.h +++ b/libclc/opencl/include/clc/opencl/as_type.h @@ -9,6 +9,7 @@ //===----------------------------------------------------------------------===// #define as_char(x) __builtin_astype(x, char) +#define as_schar(x) __builtin_astype(x, schar) #define as_uchar(x) __builtin_astype(x, uchar) #define as_short(x) __builtin_astype(x, short) #define as_ushort(x) __builtin_astype(x, ushort) @@ -19,6 +20,7 @@ #define as_float(x) __builtin_astype(x, float) #define as_char2(x) __builtin_astype(x, char2) +#define as_schar2(x) __builtin_astype(x, schar2) #define as_uchar2(x) __builtin_astype(x, uchar2) #define as_short2(x) __builtin_astype(x, short2) #define as_ushort2(x) __builtin_astype(x, ushort2) @@ -29,6 +31,7 @@ #define as_float2(x) __builtin_astype(x, float2) #define as_char3(x) __builtin_astype(x, char3) +#define as_schar3(x) __builtin_astype(x, schar3) #define as_uchar3(x) __builtin_astype(x, uchar3) #define as_short3(x) __builtin_astype(x, short3) #define as_ushort3(x) __builtin_astype(x, ushort3) @@ -39,6 +42,7 @@ #define as_float3(x) __builtin_astype(x, float3) #define as_char4(x) __builtin_astype(x, char4) +#define as_schar4(x) __builtin_astype(x, schar4) #define as_uchar4(x) __builtin_astype(x, uchar4) #define as_short4(x) __builtin_astype(x, short4) #define as_ushort4(x) __builtin_astype(x, ushort4) @@ -49,6 +53,7 @@ #define as_float4(x) __builtin_astype(x, float4) #define as_char8(x) __builtin_astype(x, char8) +#define as_schar8(x) __builtin_astype(x, schar8) #define as_uchar8(x) __builtin_astype(x, uchar8) #define as_short8(x) __builtin_astype(x, short8) #define as_ushort8(x) __builtin_astype(x, ushort8) @@ -59,6 +64,7 @@ #define as_float8(x) __builtin_astype(x, float8) #define as_char16(x) __builtin_astype(x, char16) +#define as_schar16(x) __builtin_astype(x, schar16) #define as_uchar16(x) __builtin_astype(x, uchar16) #define as_short16(x) __builtin_astype(x, short16) #define as_ushort16(x) __builtin_astype(x, ushort16) diff --git a/libclc/opencl/include/clc/opencl/clc.h b/libclc/opencl/include/clc/opencl/clc.h index 5859a00c3158b..0513349863be1 100644 --- a/libclc/opencl/include/clc/opencl/clc.h +++ b/libclc/opencl/include/clc/opencl/clc.h @@ -23,6 +23,8 @@ #pragma OPENCL EXTENSION cl_khr_fp16 : enable #endif +#define __CLC_NO_SCHAR + /* Function Attributes */ #include diff --git a/libclc/utils/gen_convert.py b/libclc/utils/gen_convert.py index 02893dbad6a37..0cd7fd97625c3 100644 --- a/libclc/utils/gen_convert.py +++ b/libclc/utils/gen_convert.py @@ -68,9 +68,14 @@ saturation = ["", "_sat"] rounding_modes = ["_rtz", "_rte", "_rtp", "_rtn"] +if clc: + types.insert(1, "schar") + int_types.insert(1, "schar") + bool_type = { "char": "char", - "uchar": "char", + "schar": "schar", + "uchar": "schar" if clc else "char", "short": "short", "ushort": "short", "int": "int", @@ -84,6 +89,7 @@ unsigned_type = { "char": "uchar", + "schar": "uchar", "uchar": "uchar", "short": "ushort", "ushort": "ushort", @@ -95,6 +101,7 @@ sizeof_type = { "char": 1, + "schar": 1, "uchar": 1, "short": 2, "ushort": 2, @@ -109,6 +116,7 @@ limit_max = { "char": "CHAR_MAX", + "schar": "CHAR_MAX", "uchar": "UCHAR_MAX", "short": "SHRT_MAX", "ushort": "USHRT_MAX", @@ -121,6 +129,7 @@ limit_min = { "char": "CHAR_MIN", + "schar": "CHAR_MIN", "uchar": "0", "short": "SHRT_MIN", "ushort": "0", From f5a38f23a11f7eee6f3874376549bdebffad8c26 Mon Sep 17 00:00:00 2001 From: Fraser Cormack Date: Thu, 5 Jun 2025 10:48:22 +0100 Subject: [PATCH 2/2] fix clz and formatting --- libclc/clc/lib/generic/integer/clc_clz.cl | 5 +++ libclc/libspirv/lib/generic/math/maxmag.cl | 2 +- libclc/libspirv/lib/generic/math/minmag.cl | 2 +- libclc/libspirv/lib/generic/math/minmag.inc | 9 ++--- .../lib/native_cpu/integer/popcount.cl | 35 ++++++++++++------- 5 files changed, 34 insertions(+), 19 deletions(-) diff --git a/libclc/clc/lib/generic/integer/clc_clz.cl b/libclc/clc/lib/generic/integer/clc_clz.cl index 74f662375af6b..251ee92f2221f 100644 --- a/libclc/clc/lib/generic/integer/clc_clz.cl +++ b/libclc/clc/lib/generic/integer/clc_clz.cl @@ -14,6 +14,10 @@ _CLC_OVERLOAD _CLC_DEF char __clc_clz(char x) { return __clc_clz((ushort)(uchar)x) - 8; } +_CLC_OVERLOAD _CLC_DEF schar __clc_clz(schar x) { + return __clc_clz((ushort)(uchar)x) - 8; +} + _CLC_OVERLOAD _CLC_DEF uchar __clc_clz(uchar x) { return __clc_clz((ushort)x) - 8; } @@ -43,6 +47,7 @@ _CLC_OVERLOAD _CLC_DEF ulong __clc_clz(ulong x) { } _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, char, __clc_clz, char) +_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, schar, __clc_clz, schar) _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, uchar, __clc_clz, uchar) _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, short, __clc_clz, short) _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, ushort, __clc_clz, ushort) diff --git a/libclc/libspirv/lib/generic/math/maxmag.cl b/libclc/libspirv/lib/generic/math/maxmag.cl index 6117489141fb7..b30d094e76fdc 100644 --- a/libclc/libspirv/lib/generic/math/maxmag.cl +++ b/libclc/libspirv/lib/generic/math/maxmag.cl @@ -6,8 +6,8 @@ // //===----------------------------------------------------------------------===// -#include #include +#include #define __CLC_BODY #include diff --git a/libclc/libspirv/lib/generic/math/minmag.cl b/libclc/libspirv/lib/generic/math/minmag.cl index fb6392b76eb63..7a2e00fca9d2f 100644 --- a/libclc/libspirv/lib/generic/math/minmag.cl +++ b/libclc/libspirv/lib/generic/math/minmag.cl @@ -6,8 +6,8 @@ // //===----------------------------------------------------------------------===// -#include #include +#include #define __CLC_BODY #include diff --git a/libclc/libspirv/lib/generic/math/minmag.inc b/libclc/libspirv/lib/generic/math/minmag.inc index 5548f9dd226dc..5a7d93134f2a3 100644 --- a/libclc/libspirv/lib/generic/math/minmag.inc +++ b/libclc/libspirv/lib/generic/math/minmag.inc @@ -18,13 +18,14 @@ _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __spirv_ocl_minmag(__CLC_GENTYPE x, __CLC_GENTYPE y) { const __CLC_GENTYPE res = __spirv_ocl_select(y, x, - __CLC_CONVERT_NATN((__CLC_SCHARN)__spirv_FOrdLessThan( + __CLC_CONVERT_NATN((__CLC_SCHARN)__spirv_FOrdLessThan( __spirv_ocl_fabs(x), __spirv_ocl_fabs(y)))); return __spirv_ocl_select( res, __spirv_ocl_fmin(x, y), - __CLC_CONVERT_NATN( (__CLC_SCHARN)(__spirv_IsNan(x) | __spirv_IsNan(y) | - __spirv_FOrdEqual(__spirv_ocl_fabs(x), - __spirv_ocl_fabs(y))))); + __CLC_CONVERT_NATN( + (__CLC_SCHARN)(__spirv_IsNan(x) | __spirv_IsNan(y) | + __spirv_FOrdEqual(__spirv_ocl_fabs(x), + __spirv_ocl_fabs(y))))); } #undef __CLC_CONVERT_NATN diff --git a/libclc/libspirv/lib/native_cpu/integer/popcount.cl b/libclc/libspirv/lib/native_cpu/integer/popcount.cl index d6a90d8950b16..9756ee7c18e42 100644 --- a/libclc/libspirv/lib/native_cpu/integer/popcount.cl +++ b/libclc/libspirv/lib/native_cpu/integer/popcount.cl @@ -7,21 +7,30 @@ // to int doesn't work due to sign extension, so we use type punning to // preserve the bit pattern and avoid sign extension. -#define DEF_POPCOUNT_HELPER(TYPE, UTYPE) \ -_CLC_OVERLOAD TYPE __popcount_helper(TYPE c) { \ - return __builtin_popcountg(*(UTYPE*)&c); \ -} +#define DEF_POPCOUNT_HELPER(TYPE, UTYPE) \ + _CLC_OVERLOAD TYPE __popcount_helper(TYPE c) { \ + return __builtin_popcountg(*(UTYPE *)&c); \ + } DEF_POPCOUNT_HELPER(char, unsigned char) DEF_POPCOUNT_HELPER(schar, unsigned char) DEF_POPCOUNT_HELPER(short, unsigned short) -_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(int, __spirv_ocl_popcount, __builtin_popcount, int) -_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(uint, __spirv_ocl_popcount, __builtin_popcount, uint) -_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(short, __spirv_ocl_popcount, __popcount_helper, short) -_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(ushort, __spirv_ocl_popcount, __builtin_popcountg, ushort) -_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(long, __spirv_ocl_popcount, __builtin_popcountl, long) -_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(ulong, __spirv_ocl_popcount, __builtin_popcountl, ulong) -_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(char, __spirv_ocl_popcount, __popcount_helper, char) -_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(uchar, __spirv_ocl_popcount, __builtin_popcountg, uchar) -_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(schar, __spirv_ocl_popcount, __popcount_helper, schar) +_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(int, __spirv_ocl_popcount, + __builtin_popcount, int) +_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(uint, __spirv_ocl_popcount, + __builtin_popcount, uint) +_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(short, __spirv_ocl_popcount, + __popcount_helper, short) +_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(ushort, __spirv_ocl_popcount, + __builtin_popcountg, ushort) +_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(long, __spirv_ocl_popcount, + __builtin_popcountl, long) +_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(ulong, __spirv_ocl_popcount, + __builtin_popcountl, ulong) +_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(char, __spirv_ocl_popcount, + __popcount_helper, char) +_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(uchar, __spirv_ocl_popcount, + __builtin_popcountg, uchar) +_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(schar, __spirv_ocl_popcount, + __popcount_helper, schar)