diff --git a/clang/lib/Sema/SPIRVBuiltins.td b/clang/lib/Sema/SPIRVBuiltins.td index 8e4c2175d3aa0..2c3410c984e86 100644 --- a/clang/lib/Sema/SPIRVBuiltins.td +++ b/clang/lib/Sema/SPIRVBuiltins.td @@ -321,8 +321,9 @@ 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 Char : IntType<"char", QualType<"Context.CharTy", 0, 1>, 8>; -def SChar : IntType<"schar", QualType<"Context.SignedCharTy", 0, 1>, 8>; +def TrueChar : IntType<"_char", QualType<"Context.CharTy", 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>; @@ -355,13 +356,15 @@ def Vec16 : IntList<"Vec16", [16]>; def Vec1234 : IntList<"Vec1234", [1, 2, 3, 4]>; // Type lists. -def TLAll : TypeList<[Char, UChar, Short, UShort, Int, UInt, Long, ULong, Float, Double, Half]>; +def TLAll : TypeList<[Char, UChar, Short, UShort, Int, UInt, Long, ULong, Float, Double, Half]>; def TLAllUnsigned : TypeList<[UChar, UChar, UShort, UShort, UInt, UInt, ULong, ULong, UInt, ULong, UShort]>; def TLFloat : TypeList<[Float, Double, Half]>; +// FIXME: handle properly char (signed or unsigned depending on host) def TLSignedInts : TypeList<[Char, Short, Int, Long]>; def TLUnsignedInts : TypeList<[UChar, UShort, UInt, ULong]>; // Signed to Unsigned conversion +// FIXME: handle properly char (signed or unsigned depending on host) def TLSToUSignedInts : TypeList<[Char, Short, Int, Long]>; def TLSToUUnsignedInts : TypeList<[UChar, UShort, UInt, ULong]>; @@ -372,7 +375,7 @@ def TLIntLongFloats : TypeList<[Int, UInt, Long, ULong, Float, Double, Half]>; // uchar abs(uchar). def TLAllUIntsTwice : TypeList<[UChar, UChar, UChar, UShort, UShort, UInt, UInt, ULong, ULong]>; -def TLAllInts : TypeList<[Char, SChar, UChar, Short, UShort, Int, UInt, Long, ULong]>; +def TLAllInts : TypeList<[Char, UChar, Short, UShort, Int, UInt, Long, ULong]>; // GenType definitions for multiple base types (e.g. all floating point types, // or all integer types). @@ -399,7 +402,7 @@ def IntLongFloatGenType1 : GenericType<"IntLongFloatGenType1", TLIntLongFloats // GenType definitions for every single base type (e.g. fp32 only). // Names are like: GenTypeFloatVecAndScalar. -foreach Type = [Char, SChar, UChar, Short, UShort, +foreach Type = [Char, UChar, SChar, Short, UShort, Int, UInt, Long, ULong, Float, Double, Half] in { foreach VecSizes = [VecAndScalar, VecNoScalar] in { @@ -554,7 +557,6 @@ foreach name = ["s_clamp", "s_mad_hi", "s_mad_sat"] in { foreach name = ["s_upsample"] in { def : ConstOCLSPVBuiltin; - def : ConstOCLSPVBuiltin; def : ConstOCLSPVBuiltin; def : ConstOCLSPVBuiltin; } @@ -722,7 +724,7 @@ foreach VSize1 = [Vec2, Vec4, Vec8, Vec16] in { let IsVariadic = 1 in { foreach name = ["printf"] in { - def : OCLSPVBuiltin, ConstantAS>]>; + def : OCLSPVBuiltin, ConstantAS>]>; } } diff --git a/libclc/generic/gen_convert_common.py b/libclc/generic/gen_convert_common.py index e44795d34a941..d4399adda10d9 100644 --- a/libclc/generic/gen_convert_common.py +++ b/libclc/generic/gen_convert_common.py @@ -1,10 +1,10 @@ # This file contains common variables and helper functions used by the # `gen_convert.py` in both the libclc and libspirv libraries. -types = ['char', 'uchar', 'short', 'ushort', 'int', 'uint', 'long', 'ulong', 'half', 'float', 'double'] -int_types = ['char', 'uchar', 'short', 'ushort', 'int', 'uint', 'long', 'ulong'] +types = ['char', 'schar', 'uchar', 'short', 'ushort', 'int', 'uint', 'long', 'ulong', 'half', 'float', 'double'] +int_types = ['char', 'schar', 'uchar', 'short', 'ushort', 'int', 'uint', 'long', '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'] @@ -18,7 +18,8 @@ float_suffix = {'float':'f', 'double':''} bool_type = {'char' : 'char', - 'uchar' : 'char', + 'schar' : 'schar', + 'uchar' : 'schar', 'short' : 'short', 'ushort' : 'short', 'int' : 'int', @@ -30,6 +31,7 @@ 'double' : 'long'} unsigned_type = {'char' : 'uchar', + 'schar' : 'uchar', 'uchar' : 'uchar', 'short' : 'ushort', 'ushort': 'ushort', @@ -38,7 +40,7 @@ 'long' : 'ulong', 'ulong' : 'ulong'} -sizeof_type = {'char' : 1, 'uchar' : 1, +sizeof_type = {'char' : 1, 'schar' : 1, 'uchar' : 1, 'short' : 2, 'ushort' : 2, 'int' : 4, 'uint' : 4, 'long' : 8, 'ulong' : 8, @@ -46,6 +48,7 @@ 'double': 8} limit_max = {'char' : 'CHAR_MAX', + 'schar' : 'CHAR_MAX', 'uchar' : 'UCHAR_MAX', 'short' : 'SHRT_MAX', 'ushort': 'USHRT_MAX', @@ -55,6 +58,7 @@ 'ulong' : 'ULONG_MAX'} limit_min = {'char' : 'CHAR_MIN', + 'schar' : 'CHAR_MIN', 'uchar' : '0', 'short' : 'SHRT_MIN', 'ushort': '0', diff --git a/libclc/generic/include/as_type.h b/libclc/generic/include/as_type.h index 557e6fd22f2aa..51f347b4b5cbe 100644 --- a/libclc/generic/include/as_type.h +++ b/libclc/generic/include/as_type.h @@ -2,6 +2,7 @@ #define CLC_AS_TYPE #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) @@ -12,6 +13,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) @@ -22,6 +24,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) @@ -32,6 +35,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) @@ -42,6 +46,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) @@ -52,6 +57,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/generic/include/clc/async/gentype.inc b/libclc/generic/include/clc/async/gentype.inc index df3f75c7aa119..2af91bfb9641f 100644 --- a/libclc/generic/include/clc/async/gentype.inc +++ b/libclc/generic/include/clc/async/gentype.inc @@ -39,6 +39,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/generic/include/clc/clc.h b/libclc/generic/include/clc/clc.h index d0db030e6a93d..8ff94f8c89ea8 100644 --- a/libclc/generic/include/clc/clc.h +++ b/libclc/generic/include/clc/clc.h @@ -12,6 +12,8 @@ #pragma OPENCL EXTENSION cl_khr_fp16 : enable #endif +#define __CLC_NO_SCHAR + /* Function Attributes */ #include diff --git a/libclc/generic/include/clc/integer/gentype.inc b/libclc/generic/include/clc/integer/gentype.inc index 80f5b131cf236..032bdc0cadbaf 100644 --- a/libclc/generic/include/clc/integer/gentype.inc +++ b/libclc/generic/include/clc/integer/gentype.inc @@ -14,7 +14,7 @@ #define __CLC_GEN_S #define __CLC_GENTYPE char -#define __CLC_SPIRV_INTERFACE_GENTYPE char +#define __CLC_SPIRV_INTERFACE_GENTYPE schar #define __CLC_U_GENTYPE uchar #define __CLC_S_GENTYPE char #define __CLC_SCALAR 1 @@ -28,7 +28,7 @@ #undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE char2 -#define __CLC_SPIRV_INTERFACE_GENTYPE char2 +#define __CLC_SPIRV_INTERFACE_GENTYPE schar2 #define __CLC_U_GENTYPE uchar2 #define __CLC_S_GENTYPE char2 #define __CLC_VECSIZE 2 @@ -40,7 +40,7 @@ #undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE char3 -#define __CLC_SPIRV_INTERFACE_GENTYPE char3 +#define __CLC_SPIRV_INTERFACE_GENTYPE schar3 #define __CLC_U_GENTYPE uchar3 #define __CLC_S_GENTYPE char3 #define __CLC_VECSIZE 3 @@ -52,7 +52,7 @@ #undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE char4 -#define __CLC_SPIRV_INTERFACE_GENTYPE char4 +#define __CLC_SPIRV_INTERFACE_GENTYPE schar4 #define __CLC_U_GENTYPE uchar4 #define __CLC_S_GENTYPE char4 #define __CLC_VECSIZE 4 @@ -64,7 +64,7 @@ #undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE char8 -#define __CLC_SPIRV_INTERFACE_GENTYPE char8 +#define __CLC_SPIRV_INTERFACE_GENTYPE schar8 #define __CLC_U_GENTYPE uchar8 #define __CLC_S_GENTYPE char8 #define __CLC_VECSIZE 8 @@ -76,7 +76,7 @@ #undef __CLC_SPIRV_INTERFACE_GENTYPE #define __CLC_GENTYPE char16 -#define __CLC_SPIRV_INTERFACE_GENTYPE char16 +#define __CLC_SPIRV_INTERFACE_GENTYPE schar16 #define __CLC_U_GENTYPE uchar16 #define __CLC_S_GENTYPE char16 #define __CLC_VECSIZE 16 @@ -87,6 +87,88 @@ #undef __CLC_S_GENTYPE #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 1 +#define __CLC_VECSIZE +#include __CLC_BODY +#undef __CLC_VECSIZE +#undef __CLC_SCALAR +#undef __CLC_GENTYPE +#undef __CLC_U_GENTYPE +#undef __CLC_S_GENTYPE +#undef __CLC_SPIRV_INTERFACE_GENTYPE + +#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 + +#endif // __CLC_NO_SCHAR + #undef __CLC_SCALAR_GENTYPE #define __CLC_SCALAR_GENTYPE uchar #undef __CLC_GEN_S @@ -95,7 +177,7 @@ #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 1 #define __CLC_VECSIZE #include __CLC_BODY @@ -109,7 +191,7 @@ #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 @@ -121,7 +203,7 @@ #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 @@ -133,7 +215,7 @@ #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 @@ -145,7 +227,7 @@ #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 @@ -157,7 +239,7 @@ #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 diff --git a/libclc/generic/include/core/convert.h b/libclc/generic/include/core/convert.h index 299550a922df9..e3f19010b404d 100644 --- a/libclc/generic/include/core/convert.h +++ b/libclc/generic/include/core/convert.h @@ -22,6 +22,7 @@ #define _CLC_VECTOR_CORE_CONVERT_FROM1(FROM_TYPE, SUFFIX) \ _CLC_VECTOR_CORE_CONVERT_DECL(FROM_TYPE, char, SUFFIX) \ + _CLC_VECTOR_CORE_CONVERT_DECL(FROM_TYPE, schar, SUFFIX) \ _CLC_VECTOR_CORE_CONVERT_DECL(FROM_TYPE, uchar, SUFFIX) \ _CLC_VECTOR_CORE_CONVERT_DECL(FROM_TYPE, int, SUFFIX) \ _CLC_VECTOR_CORE_CONVERT_DECL(FROM_TYPE, uint, SUFFIX) \ @@ -50,6 +51,7 @@ #define _CLC_VECTOR_CORE_CONVERT_TO1(SUFFIX) \ _CLC_VECTOR_CORE_CONVERT_FROM(char, SUFFIX) \ + _CLC_VECTOR_CORE_CONVERT_FROM(schar, SUFFIX) \ _CLC_VECTOR_CORE_CONVERT_FROM(uchar, SUFFIX) \ _CLC_VECTOR_CORE_CONVERT_FROM(int, SUFFIX) \ _CLC_VECTOR_CORE_CONVERT_FROM(uint, SUFFIX) \ diff --git a/libclc/generic/include/core/integer/clc_upsample.h b/libclc/generic/include/core/integer/clc_upsample.h index aaa756bb4758e..468ec7719ac4d 100644 --- a/libclc/generic/include/core/integer/clc_upsample.h +++ b/libclc/generic/include/core/integer/clc_upsample.h @@ -19,6 +19,7 @@ #define __CLC_UPSAMPLE_TYPES() \ __CLC_UPSAMPLE_VEC(short, char, uchar) \ + __CLC_UPSAMPLE_VEC(short, schar, uchar) \ __CLC_UPSAMPLE_VEC(ushort, uchar, uchar) \ __CLC_UPSAMPLE_VEC(int, short, ushort) \ __CLC_UPSAMPLE_VEC(uint, ushort, ushort) \ diff --git a/libclc/generic/include/integer/unary_intrin.inc b/libclc/generic/include/integer/unary_intrin.inc index ee9862a4c5b3a..fda21e3074166 100644 --- a/libclc/generic/include/integer/unary_intrin.inc +++ b/libclc/generic/include/integer/unary_intrin.inc @@ -7,6 +7,7 @@ _CLC_OVERLOAD SCALAR_TYPE##8 __CLC_FUNCTION(SCALAR_TYPE##8 x) __asm(__CLC_INTRIN _CLC_OVERLOAD SCALAR_TYPE##16 __CLC_FUNCTION(SCALAR_TYPE##16 x) __asm(__CLC_INTRINSIC ".v16i" BIT_SIZE); __CLC_INTRINSIC_DEF(char, "8") +__CLC_INTRINSIC_DEF(schar, "8") __CLC_INTRINSIC_DEF(uchar, "8") __CLC_INTRINSIC_DEF(short, "16") __CLC_INTRINSIC_DEF(ushort, "16") diff --git a/libclc/generic/include/lp64_types.h b/libclc/generic/include/lp64_types.h index 6a568ca617c3b..f5609d4d3c047 100644 --- a/libclc/generic/include/lp64_types.h +++ b/libclc/generic/include/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/generic/include/types.h b/libclc/generic/include/types.h index 9d5564ea4e80a..ba435f9c8c729 100644 --- a/libclc/generic/include/types.h +++ b/libclc/generic/include/types.h @@ -3,6 +3,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; @@ -31,6 +32,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/generic/lib/gen_convert.py b/libclc/generic/lib/gen_convert.py index 6ec9aea4aa3a3..760816b49b202 100644 --- a/libclc/generic/lib/gen_convert.py +++ b/libclc/generic/lib/gen_convert.py @@ -9,6 +9,9 @@ conditional_guard, close_conditional_guard, clc_core_fn_name) +# remove extra, non-opencl type +types.remove('schar') + # OpenCL built-in library: type conversion functions # # Copyright (c) 2013 Victor Oliveira diff --git a/libclc/generic/libspirv/core/integer/clc_add_sat.cl b/libclc/generic/libspirv/core/integer/clc_add_sat.cl index c158b1cdaaad1..39db47557dcfb 100644 --- a/libclc/generic/libspirv/core/integer/clc_add_sat.cl +++ b/libclc/generic/libspirv/core/integer/clc_add_sat.cl @@ -14,6 +14,11 @@ _CLC_OVERLOAD _CLC_DEF char __clc_add_sat(char x, char y) { return __clc_convert_char_sat(r); } +_CLC_OVERLOAD _CLC_DEF schar __clc_add_sat(schar x, schar y) { + short r = x + y; + return __clc_convert_schar_sat(r); +} + _CLC_OVERLOAD _CLC_DEF uchar __clc_add_sat(uchar x, uchar y) { ushort r = x + y; return __clc_convert_uchar_sat(r); @@ -62,6 +67,8 @@ _CLC_OVERLOAD _CLC_DEF ulong __clc_add_sat(ulong x, ulong y) { } _CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, char, __clc_add_sat, char, char) +_CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, schar, __clc_add_sat, schar, + schar) _CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, uchar, __clc_add_sat, uchar, uchar) _CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, short, __clc_add_sat, short, diff --git a/libclc/generic/libspirv/core/integer/clc_mad_sat.cl b/libclc/generic/libspirv/core/integer/clc_mad_sat.cl index b8de9385392d0..92fcceab37046 100644 --- a/libclc/generic/libspirv/core/integer/clc_mad_sat.cl +++ b/libclc/generic/libspirv/core/integer/clc_mad_sat.cl @@ -53,6 +53,11 @@ _CLC_OVERLOAD _CLC_DEF char __clc_mad_sat(char x, char y, char z) { (short)CHAR_MIN, (short)CHAR_MAX); } +_CLC_OVERLOAD _CLC_DEF schar __clc_mad_sat(schar x, schar y, schar z) { + return __clc_clamp((short)__clc_mad24((short)x, (short)y, (short)z), + (short)CHAR_MIN, (short)CHAR_MAX); +} + _CLC_OVERLOAD _CLC_DEF ulong __clc_mad_sat(ulong x, ulong y, ulong z) { if (__clc_mul_hi(x, y) != 0) return ULONG_MAX; @@ -83,6 +88,8 @@ _CLC_TERNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, short, __clc_mad_sat, short, short, short) _CLC_TERNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, char, __clc_mad_sat, char, char, char) +_CLC_TERNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, schar, __clc_mad_sat, schar, + schar, schar) _CLC_TERNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, uchar, __clc_mad_sat, uchar, uchar, uchar) _CLC_TERNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, ushort, __clc_mad_sat, ushort, diff --git a/libclc/generic/libspirv/core/integer/clc_mul_hi.cl b/libclc/generic/libspirv/core/integer/clc_mul_hi.cl index 2efca84260021..19676f1a57972 100644 --- a/libclc/generic/libspirv/core/integer/clc_mul_hi.cl +++ b/libclc/generic/libspirv/core/integer/clc_mul_hi.cl @@ -102,6 +102,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/generic/libspirv/core/integer/clc_sub_sat.cl b/libclc/generic/libspirv/core/integer/clc_sub_sat.cl index 2a6d7ece12e7b..cc128e64ffbe7 100644 --- a/libclc/generic/libspirv/core/integer/clc_sub_sat.cl +++ b/libclc/generic/libspirv/core/integer/clc_sub_sat.cl @@ -14,6 +14,11 @@ _CLC_OVERLOAD _CLC_DEF char __clc_sub_sat(char x, char y) { return __clc_convert_char_sat(r); } +_CLC_OVERLOAD _CLC_DEF schar __clc_sub_sat(schar x, schar y) { + short r = x - y; + return __clc_convert_schar_sat(r); +} + _CLC_OVERLOAD _CLC_DEF uchar __clc_sub_sat(uchar x, uchar y) { short r = x - y; return __clc_convert_uchar_sat(r); @@ -60,6 +65,8 @@ _CLC_OVERLOAD _CLC_DEF ulong __clc_sub_sat(ulong x, ulong y) { } _CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, char, __clc_sub_sat, char, char) +_CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, schar, __clc_sub_sat, schar, + schar) _CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, uchar, __clc_sub_sat, uchar, uchar) _CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, short, __clc_sub_sat, short, diff --git a/libclc/generic/libspirv/core/integer/clc_upsample.cl b/libclc/generic/libspirv/core/integer/clc_upsample.cl index d6f4f90f83b15..b6c8eb1c819e2 100644 --- a/libclc/generic/libspirv/core/integer/clc_upsample.cl +++ b/libclc/generic/libspirv/core/integer/clc_upsample.cl @@ -41,6 +41,7 @@ #define __CLC_UPSAMPLE_TYPES() \ __CLC_UPSAMPLE_IMPL(short, char, uchar, 8) \ + __CLC_UPSAMPLE_IMPL(short, schar, uchar, 8) \ __CLC_UPSAMPLE_IMPL(ushort, uchar, uchar, 8) \ __CLC_UPSAMPLE_IMPL(int, short, ushort, 16) \ __CLC_UPSAMPLE_IMPL(uint, ushort, ushort, 16) \ diff --git a/libclc/generic/libspirv/gen_convert.py b/libclc/generic/libspirv/gen_convert.py index ac5023a8b935a..9e3f46b7ef5d1 100755 --- a/libclc/generic/libspirv/gen_convert.py +++ b/libclc/generic/libspirv/gen_convert.py @@ -25,6 +25,9 @@ unsigned_type, sizeof_type, limit_max, limit_min, conditional_guard, close_conditional_guard, clc_core_fn_name) +types.remove('char') +int_types.remove('char') +signed_types.remove('char') rounding_modes = [''] + rounding_modes print("""/* !!!! AUTOGENERATED FILE generated by convert_type.py !!!!! @@ -80,6 +83,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/generic/libspirv/integer/clz.cl b/libclc/generic/libspirv/integer/clz.cl index 75870625407c5..bf59932620d84 100644 --- a/libclc/generic/libspirv/integer/clz.cl +++ b/libclc/generic/libspirv/integer/clz.cl @@ -13,6 +13,10 @@ _CLC_OVERLOAD _CLC_DEF char __spirv_ocl_clz(char x) { return __spirv_ocl_clz((ushort)(uchar)x) - 8; } +_CLC_OVERLOAD _CLC_DEF schar __spirv_ocl_clz(schar x) { + return __spirv_ocl_clz((ushort)(uchar)x) - 8; +} + _CLC_OVERLOAD _CLC_DEF uchar __spirv_ocl_clz(uchar x) { return __spirv_ocl_clz((ushort)x) - 8; } @@ -42,6 +46,7 @@ _CLC_OVERLOAD _CLC_DEF ulong __spirv_ocl_clz(ulong x) { } _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, char, __spirv_ocl_clz, char) +_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, schar, __spirv_ocl_clz, schar) _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, uchar, __spirv_ocl_clz, uchar) _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, short, __spirv_ocl_clz, short) _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, ushort, __spirv_ocl_clz, ushort) diff --git a/libclc/generic/libspirv/integer/ctz.cl b/libclc/generic/libspirv/integer/ctz.cl index 5356652e3aabf..43e6879c04867 100644 --- a/libclc/generic/libspirv/integer/ctz.cl +++ b/libclc/generic/libspirv/integer/ctz.cl @@ -37,11 +37,16 @@ _CLC_OVERLOAD _CLC_DEF char __spirv_ocl_ctz(char x) { return __spirv_ocl_ctz((ushort)(uchar)x) - 8; } +_CLC_OVERLOAD _CLC_DEF schar __spirv_ocl_ctz(schar x) { + return __spirv_ocl_ctz((ushort)(uchar)x) - 8; +} + _CLC_OVERLOAD _CLC_DEF uchar __spirv_ocl_ctz(uchar x) { return __spirv_ocl_ctz((ushort)x) - 8; } _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, char, __spirv_ocl_ctz, char) +_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, schar, __spirv_ocl_ctz, schar) _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, uchar, __spirv_ocl_ctz, uchar) _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, short, __spirv_ocl_ctz, short) _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, ushort, __spirv_ocl_ctz, ushort) diff --git a/libclc/generic/libspirv/integer/upsample.cl b/libclc/generic/libspirv/integer/upsample.cl index 7ed788c68af4b..b7a80748081af 100644 --- a/libclc/generic/libspirv/integer/upsample.cl +++ b/libclc/generic/libspirv/integer/upsample.cl @@ -37,6 +37,7 @@ #define __CLC_UPSAMPLE_TYPES() \ __CLC_UPSAMPLE_IMPL(s, short, char, uchar) \ + __CLC_UPSAMPLE_IMPL(s, short, schar, uchar) \ __CLC_UPSAMPLE_IMPL(u, ushort, uchar, uchar) \ __CLC_UPSAMPLE_IMPL(s, int, short, ushort) \ __CLC_UPSAMPLE_IMPL(u, uint, ushort, ushort) \ diff --git a/libclc/generic/libspirv/math/maxmag.inc b/libclc/generic/libspirv/math/maxmag.inc index 828b77bb6dcea..e74e75d16268f 100644 --- a/libclc/generic/libspirv/math/maxmag.inc +++ b/libclc/generic/libspirv/math/maxmag.inc @@ -10,7 +10,7 @@ #define __CLC_VECSIZE #endif -#define __CLC_CHARN __CLC_XCONCAT(char, __CLC_VECSIZE) +#define __CLC_CHARN __CLC_XCONCAT(schar, __CLC_VECSIZE) #if __CLC_FPSIZE == 64 #define __CLC_CONVERT_NATN __CLC_XCONCAT(__spirv_SConvert_Rlong, __CLC_VECSIZE) diff --git a/libclc/generic/libspirv/math/minmag.inc b/libclc/generic/libspirv/math/minmag.inc index 3611596a55e0b..56178269a17e5 100644 --- a/libclc/generic/libspirv/math/minmag.inc +++ b/libclc/generic/libspirv/math/minmag.inc @@ -10,7 +10,7 @@ #define __CLC_VECSIZE #endif -#define __CLC_CHARN __CLC_XCONCAT(char, __CLC_VECSIZE) +#define __CLC_CHARN __CLC_XCONCAT(schar, __CLC_VECSIZE) #if __CLC_FPSIZE == 64 #define __CLC_CONVERT_NATN __CLC_XCONCAT(__spirv_SConvert_Rlong, __CLC_VECSIZE) diff --git a/libclc/generic/libspirv/misc/shuffle.cl b/libclc/generic/libspirv/misc/shuffle.cl index 62c05d1b93067..bdb413e1ae77f 100644 --- a/libclc/generic/libspirv/misc/shuffle.cl +++ b/libclc/generic/libspirv/misc/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/generic/libspirv/misc/shuffle2.cl b/libclc/generic/libspirv/misc/shuffle2.cl index 9f3cdbc230945..5a37373612345 100644 --- a/libclc/generic/libspirv/misc/shuffle2.cl +++ b/libclc/generic/libspirv/misc/shuffle2.cl @@ -140,6 +140,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/generic/libspirv/relational/all.cl b/libclc/generic/libspirv/relational/all.cl index c4e18ac039e4a..f611c59b8e216 100644 --- a/libclc/generic/libspirv/relational/all.cl +++ b/libclc/generic/libspirv/relational/all.cl @@ -31,4 +31,4 @@ bool __spirv_All(bool v) { return v; } 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/generic/libspirv/relational/any.cl b/libclc/generic/libspirv/relational/any.cl index 7802bcca9e394..5885f48361533 100644 --- a/libclc/generic/libspirv/relational/any.cl +++ b/libclc/generic/libspirv/relational/any.cl @@ -31,4 +31,4 @@ bool __spirv_Any(bool v) { return v; } 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/generic/libspirv/relational/genbinrelational.inc b/libclc/generic/libspirv/relational/genbinrelational.inc index 364b781a89c04..14a41401839ac 100644 --- a/libclc/generic/libspirv/relational/genbinrelational.inc +++ b/libclc/generic/libspirv/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/generic/libspirv/relational/genunary.inc b/libclc/generic/libspirv/relational/genunary.inc index 7f373d0a27618..80137ca3bc629 100644 --- a/libclc/generic/libspirv/relational/genunary.inc +++ b/libclc/generic/libspirv/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/generic/libspirv/shared/vload.cl b/libclc/generic/libspirv/shared/vload.cl index e5579e01cf7c6..54beef922055c 100644 --- a/libclc/generic/libspirv/shared/vload.cl +++ b/libclc/generic/libspirv/shared/vload.cl @@ -68,8 +68,9 @@ #define VLOAD_ADDR_SPACES(__CLC_SCALAR_GENTYPE) \ VLOAD_ADDR_SPACES_IMPL(__CLC_SCALAR_GENTYPE, __CLC_SCALAR_GENTYPE) +VLOAD_ADDR_SPACES_IMPL(char, schar) + #define VLOAD_TYPES() \ - VLOAD_ADDR_SPACES(char) \ VLOAD_ADDR_SPACES(uchar) \ VLOAD_ADDR_SPACES(short) \ VLOAD_ADDR_SPACES(ushort) \ diff --git a/libclc/generic/libspirv/shared/vstore.cl b/libclc/generic/libspirv/shared/vstore.cl index 739b5b5c6fc43..18363d1594844 100644 --- a/libclc/generic/libspirv/shared/vstore.cl +++ b/libclc/generic/libspirv/shared/vstore.cl @@ -63,7 +63,7 @@ VSTORE_VECTORIZE(__CLC_SCALAR___CLC_GENTYPE, __local) \ VSTORE_VECTORIZE(__CLC_SCALAR___CLC_GENTYPE, __global) -VSTORE_ADDR_SPACES(char) +VSTORE_ADDR_SPACES(schar) VSTORE_ADDR_SPACES(uchar) VSTORE_ADDR_SPACES(short) VSTORE_ADDR_SPACES(ushort) diff --git a/libclc/ptx-nvidiacl/libspirv/integer/mul_hi.cl b/libclc/ptx-nvidiacl/libspirv/integer/mul_hi.cl index 9a186b2cdde4a..e68f5c715a969 100644 --- a/libclc/ptx-nvidiacl/libspirv/integer/mul_hi.cl +++ b/libclc/ptx-nvidiacl/libspirv/integer/mul_hi.cl @@ -34,12 +34,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/ptx-nvidiacl/libspirv/relational/isfinite.cl b/libclc/ptx-nvidiacl/libspirv/relational/isfinite.cl index abe396d079cb1..cc51a7fa76115 100644 --- a/libclc/ptx-nvidiacl/libspirv/relational/isfinite.cl +++ b/libclc/ptx-nvidiacl/libspirv/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/ptx-nvidiacl/libspirv/relational/isinf.cl b/libclc/ptx-nvidiacl/libspirv/relational/isinf.cl index 1299d3a22a942..ceaf14bb8843f 100644 --- a/libclc/ptx-nvidiacl/libspirv/relational/isinf.cl +++ b/libclc/ptx-nvidiacl/libspirv/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/ptx-nvidiacl/libspirv/relational/isnan.cl b/libclc/ptx-nvidiacl/libspirv/relational/isnan.cl index 577b96534aa64..64b061cc2bc67 100644 --- a/libclc/ptx-nvidiacl/libspirv/relational/isnan.cl +++ b/libclc/ptx-nvidiacl/libspirv/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/sycl/include/CL/__spirv/spirv_ops.hpp b/sycl/include/CL/__spirv/spirv_ops.hpp index 074e19e532267..34829ea7892af 100644 --- a/sycl/include/CL/__spirv/spirv_ops.hpp +++ b/sycl/include/CL/__spirv/spirv_ops.hpp @@ -563,6 +563,10 @@ template extern SYCL_EXTERNAL WPipeTy __spirv_CreatePipeFromPipeStorage_write( const ConstantPipeStorage *Storage) noexcept; +extern SYCL_EXTERNAL void +__spirv_ocl_prefetch(const __attribute__((opencl_global)) char *Ptr, + size_t NumBytes) noexcept; + #else // if !__SYCL_DEVICE_ONLY__ template