1/*========================== begin_copyright_notice ============================ 2 3Copyright (C) 2017-2021 Intel Corporation 4 5SPDX-License-Identifier: MIT 6 7============================= end_copyright_notice ===========================*/ 8 9#include "../include/BiF_Definitions.cl" 10#include "../../Headers/spirv.h" 11 12 13INLINE 14char2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_sub_sat, _v2i8_v2i8, )( char2 x, 15 char2 y ) 16{ 17 char2 temp; 18 temp.s0 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s0, y.s0); 19 temp.s1 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s1, y.s1); 20 return temp; 21} 22 23INLINE 24char3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_sub_sat, _v3i8_v3i8, )( char3 x, 25 char3 y ) 26{ 27 char3 temp; 28 temp.s0 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s0, y.s0); 29 temp.s1 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s1, y.s1); 30 temp.s2 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s2, y.s2); 31 return temp; 32} 33 34INLINE 35char4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_sub_sat, _v4i8_v4i8, )( char4 x, 36 char4 y ) 37{ 38 char4 temp; 39 temp.s0 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s0, y.s0); 40 temp.s1 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s1, y.s1); 41 temp.s2 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s2, y.s2); 42 temp.s3 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s3, y.s3); 43 return temp; 44} 45 46INLINE 47char8 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_sub_sat, _v8i8_v8i8, )( char8 x, 48 char8 y ) 49{ 50 char8 temp; 51 temp.s0 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s0, y.s0); 52 temp.s1 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s1, y.s1); 53 temp.s2 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s2, y.s2); 54 temp.s3 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s3, y.s3); 55 temp.s4 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s4, y.s4); 56 temp.s5 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s5, y.s5); 57 temp.s6 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s6, y.s6); 58 temp.s7 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s7, y.s7); 59 return temp; 60} 61 62INLINE 63char16 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_sub_sat, _v16i8_v16i8, )( char16 x, 64 char16 y ) 65{ 66 char16 temp; 67 temp.s0 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s0, y.s0); 68 temp.s1 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s1, y.s1); 69 temp.s2 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s2, y.s2); 70 temp.s3 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s3, y.s3); 71 temp.s4 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s4, y.s4); 72 temp.s5 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s5, y.s5); 73 temp.s6 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s6, y.s6); 74 temp.s7 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s7, y.s7); 75 temp.s8 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s8, y.s8); 76 temp.s9 = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.s9, y.s9); 77 temp.sa = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.sa, y.sa); 78 temp.sb = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.sb, y.sb); 79 temp.sc = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.sc, y.sc); 80 temp.sd = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.sd, y.sd); 81 temp.se = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.se, y.se); 82 temp.sf = SPIRV_OCL_BUILTIN(s_sub_sat, _i8_i8, )(x.sf, y.sf); 83 return temp; 84} 85 86 87 88INLINE 89uchar2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_sub_sat, _v2i8_v2i8, )( uchar2 x, 90 uchar2 y ) 91{ 92 uchar2 temp; 93 temp.s0 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s0, y.s0); 94 temp.s1 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s1, y.s1); 95 return temp; 96} 97 98INLINE 99uchar3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_sub_sat, _v3i8_v3i8, )( uchar3 x, 100 uchar3 y ) 101{ 102 uchar3 temp; 103 temp.s0 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s0, y.s0); 104 temp.s1 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s1, y.s1); 105 temp.s2 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s2, y.s2); 106 return temp; 107} 108 109INLINE 110uchar4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_sub_sat, _v4i8_v4i8, )( uchar4 x, 111 uchar4 y ) 112{ 113 uchar4 temp; 114 temp.s0 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s0, y.s0); 115 temp.s1 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s1, y.s1); 116 temp.s2 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s2, y.s2); 117 temp.s3 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s3, y.s3); 118 return temp; 119} 120 121INLINE 122uchar8 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_sub_sat, _v8i8_v8i8, )( uchar8 x, 123 uchar8 y ) 124{ 125 uchar8 temp; 126 temp.s0 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s0, y.s0); 127 temp.s1 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s1, y.s1); 128 temp.s2 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s2, y.s2); 129 temp.s3 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s3, y.s3); 130 temp.s4 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s4, y.s4); 131 temp.s5 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s5, y.s5); 132 temp.s6 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s6, y.s6); 133 temp.s7 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s7, y.s7); 134 return temp; 135} 136 137INLINE 138uchar16 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_sub_sat, _v16i8_v16i8, )( uchar16 x, 139 uchar16 y ) 140{ 141 uchar16 temp; 142 temp.s0 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s0, y.s0); 143 temp.s1 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s1, y.s1); 144 temp.s2 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s2, y.s2); 145 temp.s3 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s3, y.s3); 146 temp.s4 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s4, y.s4); 147 temp.s5 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s5, y.s5); 148 temp.s6 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s6, y.s6); 149 temp.s7 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s7, y.s7); 150 temp.s8 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s8, y.s8); 151 temp.s9 = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.s9, y.s9); 152 temp.sa = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.sa, y.sa); 153 temp.sb = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.sb, y.sb); 154 temp.sc = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.sc, y.sc); 155 temp.sd = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.sd, y.sd); 156 temp.se = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.se, y.se); 157 temp.sf = SPIRV_OCL_BUILTIN(u_sub_sat, _i8_i8, )(x.sf, y.sf); 158 return temp; 159} 160 161 162 163INLINE 164short2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_sub_sat, _v2i16_v2i16, )( short2 x, 165 short2 y ) 166{ 167 short2 temp; 168 temp.s0 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s0, y.s0); 169 temp.s1 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s1, y.s1); 170 return temp; 171} 172 173INLINE 174short3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_sub_sat, _v3i16_v3i16, )( short3 x, 175 short3 y ) 176{ 177 short3 temp; 178 temp.s0 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s0, y.s0); 179 temp.s1 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s1, y.s1); 180 temp.s2 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s2, y.s2); 181 return temp; 182} 183 184INLINE 185short4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_sub_sat, _v4i16_v4i16, )( short4 x, 186 short4 y ) 187{ 188 short4 temp; 189 temp.s0 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s0, y.s0); 190 temp.s1 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s1, y.s1); 191 temp.s2 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s2, y.s2); 192 temp.s3 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s3, y.s3); 193 return temp; 194} 195 196INLINE 197short8 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_sub_sat, _v8i16_v8i16, )( short8 x, 198 short8 y ) 199{ 200 short8 temp; 201 temp.s0 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s0, y.s0); 202 temp.s1 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s1, y.s1); 203 temp.s2 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s2, y.s2); 204 temp.s3 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s3, y.s3); 205 temp.s4 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s4, y.s4); 206 temp.s5 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s5, y.s5); 207 temp.s6 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s6, y.s6); 208 temp.s7 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s7, y.s7); 209 return temp; 210} 211 212INLINE 213short16 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_sub_sat, _v16i16_v16i16, )( short16 x, 214 short16 y ) 215{ 216 short16 temp; 217 temp.s0 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s0, y.s0); 218 temp.s1 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s1, y.s1); 219 temp.s2 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s2, y.s2); 220 temp.s3 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s3, y.s3); 221 temp.s4 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s4, y.s4); 222 temp.s5 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s5, y.s5); 223 temp.s6 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s6, y.s6); 224 temp.s7 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s7, y.s7); 225 temp.s8 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s8, y.s8); 226 temp.s9 = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.s9, y.s9); 227 temp.sa = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.sa, y.sa); 228 temp.sb = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.sb, y.sb); 229 temp.sc = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.sc, y.sc); 230 temp.sd = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.sd, y.sd); 231 temp.se = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.se, y.se); 232 temp.sf = SPIRV_OCL_BUILTIN(s_sub_sat, _i16_i16, )(x.sf, y.sf); 233 return temp; 234} 235 236 237INLINE 238ushort2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_sub_sat, _v2i16_v2i16, )( ushort2 x, 239 ushort2 y ) 240{ 241 ushort2 temp; 242 temp.s0 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s0, y.s0); 243 temp.s1 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s1, y.s1); 244 return temp; 245} 246 247INLINE 248ushort3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_sub_sat, _v3i16_v3i16, )( ushort3 x, 249 ushort3 y ) 250{ 251 ushort3 temp; 252 temp.s0 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s0, y.s0); 253 temp.s1 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s1, y.s1); 254 temp.s2 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s2, y.s2); 255 return temp; 256} 257 258INLINE 259ushort4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_sub_sat, _v4i16_v4i16, )( ushort4 x, 260 ushort4 y ) 261{ 262 ushort4 temp; 263 temp.s0 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s0, y.s0); 264 temp.s1 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s1, y.s1); 265 temp.s2 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s2, y.s2); 266 temp.s3 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s3, y.s3); 267 return temp; 268} 269 270INLINE 271ushort8 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_sub_sat, _v8i16_v8i16, )( ushort8 x, 272 ushort8 y ) 273{ 274 ushort8 temp; 275 temp.s0 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s0, y.s0); 276 temp.s1 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s1, y.s1); 277 temp.s2 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s2, y.s2); 278 temp.s3 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s3, y.s3); 279 temp.s4 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s4, y.s4); 280 temp.s5 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s5, y.s5); 281 temp.s6 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s6, y.s6); 282 temp.s7 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s7, y.s7); 283 return temp; 284} 285 286INLINE 287ushort16 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_sub_sat, _v16i16_v16i16, )( ushort16 x, 288 ushort16 y ) 289{ 290 ushort16 temp; 291 temp.s0 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s0, y.s0); 292 temp.s1 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s1, y.s1); 293 temp.s2 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s2, y.s2); 294 temp.s3 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s3, y.s3); 295 temp.s4 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s4, y.s4); 296 temp.s5 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s5, y.s5); 297 temp.s6 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s6, y.s6); 298 temp.s7 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s7, y.s7); 299 temp.s8 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s8, y.s8); 300 temp.s9 = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.s9, y.s9); 301 temp.sa = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.sa, y.sa); 302 temp.sb = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.sb, y.sb); 303 temp.sc = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.sc, y.sc); 304 temp.sd = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.sd, y.sd); 305 temp.se = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.se, y.se); 306 temp.sf = SPIRV_OCL_BUILTIN(u_sub_sat, _i16_i16, )(x.sf, y.sf); 307 return temp; 308} 309 310 311 312INLINE 313int2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_sub_sat, _v2i32_v2i32, )( int2 x, 314 int2 y ) 315{ 316 int2 temp; 317 temp.s0 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s0, y.s0); 318 temp.s1 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s1, y.s1); 319 return temp; 320} 321 322INLINE 323int3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_sub_sat, _v3i32_v3i32, )( int3 x, 324 int3 y ) 325{ 326 int3 temp; 327 temp.s0 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s0, y.s0); 328 temp.s1 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s1, y.s1); 329 temp.s2 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s2, y.s2); 330 return temp; 331} 332 333INLINE 334int4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_sub_sat, _v4i32_v4i32, )( int4 x, 335 int4 y ) 336{ 337 int4 temp; 338 temp.s0 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s0, y.s0); 339 temp.s1 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s1, y.s1); 340 temp.s2 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s2, y.s2); 341 temp.s3 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s3, y.s3); 342 return temp; 343} 344 345INLINE 346int8 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_sub_sat, _v8i32_v8i32, )( int8 x, 347 int8 y ) 348{ 349 int8 temp; 350 temp.s0 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s0, y.s0); 351 temp.s1 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s1, y.s1); 352 temp.s2 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s2, y.s2); 353 temp.s3 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s3, y.s3); 354 temp.s4 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s4, y.s4); 355 temp.s5 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s5, y.s5); 356 temp.s6 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s6, y.s6); 357 temp.s7 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s7, y.s7); 358 return temp; 359} 360 361INLINE 362int16 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_sub_sat, _v16i32_v16i32, )( int16 x, 363 int16 y ) 364{ 365 int16 temp; 366 temp.s0 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s0, y.s0); 367 temp.s1 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s1, y.s1); 368 temp.s2 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s2, y.s2); 369 temp.s3 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s3, y.s3); 370 temp.s4 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s4, y.s4); 371 temp.s5 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s5, y.s5); 372 temp.s6 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s6, y.s6); 373 temp.s7 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s7, y.s7); 374 temp.s8 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s8, y.s8); 375 temp.s9 = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.s9, y.s9); 376 temp.sa = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.sa, y.sa); 377 temp.sb = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.sb, y.sb); 378 temp.sc = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.sc, y.sc); 379 temp.sd = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.sd, y.sd); 380 temp.se = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.se, y.se); 381 temp.sf = SPIRV_OCL_BUILTIN(s_sub_sat, _i32_i32, )(x.sf, y.sf); 382 return temp; 383} 384 385 386 387INLINE 388uint2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_sub_sat, _v2i32_v2i32, )( uint2 x, 389 uint2 y ) 390{ 391 uint2 temp; 392 temp.s0 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s0, y.s0); 393 temp.s1 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s1, y.s1); 394 return temp; 395} 396 397INLINE 398uint3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_sub_sat, _v3i32_v3i32, )( uint3 x, 399 uint3 y ) 400{ 401 uint3 temp; 402 temp.s0 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s0, y.s0); 403 temp.s1 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s1, y.s1); 404 temp.s2 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s2, y.s2); 405 return temp; 406} 407 408INLINE 409uint4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_sub_sat, _v4i32_v4i32, )( uint4 x, 410 uint4 y ) 411{ 412 uint4 temp; 413 temp.s0 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s0, y.s0); 414 temp.s1 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s1, y.s1); 415 temp.s2 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s2, y.s2); 416 temp.s3 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s3, y.s3); 417 return temp; 418} 419 420INLINE 421uint8 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_sub_sat, _v8i32_v8i32, )( uint8 x, 422 uint8 y ) 423{ 424 uint8 temp; 425 temp.s0 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s0, y.s0); 426 temp.s1 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s1, y.s1); 427 temp.s2 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s2, y.s2); 428 temp.s3 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s3, y.s3); 429 temp.s4 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s4, y.s4); 430 temp.s5 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s5, y.s5); 431 temp.s6 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s6, y.s6); 432 temp.s7 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s7, y.s7); 433 return temp; 434} 435 436INLINE 437uint16 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_sub_sat, _v16i32_v16i32, )( uint16 x, 438 uint16 y ) 439{ 440 uint16 temp; 441 temp.s0 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s0, y.s0); 442 temp.s1 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s1, y.s1); 443 temp.s2 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s2, y.s2); 444 temp.s3 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s3, y.s3); 445 temp.s4 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s4, y.s4); 446 temp.s5 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s5, y.s5); 447 temp.s6 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s6, y.s6); 448 temp.s7 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s7, y.s7); 449 temp.s8 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s8, y.s8); 450 temp.s9 = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.s9, y.s9); 451 temp.sa = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.sa, y.sa); 452 temp.sb = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.sb, y.sb); 453 temp.sc = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.sc, y.sc); 454 temp.sd = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.sd, y.sd); 455 temp.se = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.se, y.se); 456 temp.sf = SPIRV_OCL_BUILTIN(u_sub_sat, _i32_i32, )(x.sf, y.sf); 457 return temp; 458} 459 460INLINE 461long SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )( long x, 462 long y ) 463{ 464 long temp = x - y; 465 return ((x ^ ~y | ~(x ^ temp)) >> 63) ? temp : 466 (temp > 0) ? LONG_MIN : 467 LONG_MAX ; 468} 469 470INLINE 471long2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_sub_sat, _v2i64_v2i64, )( long2 x, 472 long2 y ) 473{ 474 long2 temp; 475 temp.s0 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s0, y.s0); 476 temp.s1 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s1, y.s1); 477 return temp; 478} 479 480INLINE 481long3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_sub_sat, _v3i64_v3i64, )( long3 x, 482 long3 y ) 483{ 484 long3 temp; 485 temp.s0 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s0, y.s0); 486 temp.s1 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s1, y.s1); 487 temp.s2 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s2, y.s2); 488 return temp; 489} 490 491INLINE 492long4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_sub_sat, _v4i64_v4i64, )( long4 x, 493 long4 y ) 494{ 495 long4 temp; 496 temp.s0 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s0, y.s0); 497 temp.s1 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s1, y.s1); 498 temp.s2 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s2, y.s2); 499 temp.s3 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s3, y.s3); 500 return temp; 501} 502 503INLINE 504long8 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_sub_sat, _v8i64_v8i64, )( long8 x, 505 long8 y ) 506{ 507 long8 temp; 508 temp.s0 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s0, y.s0); 509 temp.s1 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s1, y.s1); 510 temp.s2 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s2, y.s2); 511 temp.s3 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s3, y.s3); 512 temp.s4 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s4, y.s4); 513 temp.s5 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s5, y.s5); 514 temp.s6 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s6, y.s6); 515 temp.s7 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s7, y.s7); 516 return temp; 517} 518 519INLINE 520long16 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_sub_sat, _v16i64_v16i64, )( long16 x, 521 long16 y ) 522{ 523 long16 temp; 524 temp.s0 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s0, y.s0); 525 temp.s1 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s1, y.s1); 526 temp.s2 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s2, y.s2); 527 temp.s3 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s3, y.s3); 528 temp.s4 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s4, y.s4); 529 temp.s5 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s5, y.s5); 530 temp.s6 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s6, y.s6); 531 temp.s7 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s7, y.s7); 532 temp.s8 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s8, y.s8); 533 temp.s9 = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.s9, y.s9); 534 temp.sa = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.sa, y.sa); 535 temp.sb = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.sb, y.sb); 536 temp.sc = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.sc, y.sc); 537 temp.sd = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.sd, y.sd); 538 temp.se = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.se, y.se); 539 temp.sf = SPIRV_OCL_BUILTIN(s_sub_sat, _i64_i64, )(x.sf, y.sf); 540 return temp; 541} 542 543INLINE 544ulong SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )( ulong x, 545 ulong y ) 546{ 547 ulong temp = x - y; 548 return ((temp <= x)) ? temp : 0; 549} 550 551INLINE 552ulong2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_sub_sat, _v2i64_v2i64, )( ulong2 x, 553 ulong2 y ) 554{ 555 ulong2 temp; 556 temp.s0 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s0, y.s0); 557 temp.s1 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s1, y.s1); 558 return temp; 559} 560 561INLINE 562ulong3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_sub_sat, _v3i64_v3i64, )( ulong3 x, 563 ulong3 y ) 564{ 565 ulong3 temp; 566 temp.s0 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s0, y.s0); 567 temp.s1 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s1, y.s1); 568 temp.s2 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s2, y.s2); 569 return temp; 570} 571 572INLINE 573ulong4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_sub_sat, _v4i64_v4i64, )( ulong4 x, 574 ulong4 y ) 575{ 576 ulong4 temp; 577 temp.s0 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s0, y.s0); 578 temp.s1 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s1, y.s1); 579 temp.s2 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s2, y.s2); 580 temp.s3 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s3, y.s3); 581 return temp; 582} 583 584INLINE 585ulong8 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_sub_sat, _v8i64_v8i64, )( ulong8 x, 586 ulong8 y ) 587{ 588 ulong8 temp; 589 temp.s0 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s0, y.s0); 590 temp.s1 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s1, y.s1); 591 temp.s2 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s2, y.s2); 592 temp.s3 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s3, y.s3); 593 temp.s4 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s4, y.s4); 594 temp.s5 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s5, y.s5); 595 temp.s6 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s6, y.s6); 596 temp.s7 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s7, y.s7); 597 return temp; 598} 599 600INLINE 601ulong16 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_sub_sat, _v16i64_v16i64, )( ulong16 x, 602 ulong16 y ) 603{ 604 ulong16 temp; 605 temp.s0 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s0, y.s0); 606 temp.s1 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s1, y.s1); 607 temp.s2 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s2, y.s2); 608 temp.s3 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s3, y.s3); 609 temp.s4 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s4, y.s4); 610 temp.s5 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s5, y.s5); 611 temp.s6 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s6, y.s6); 612 temp.s7 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s7, y.s7); 613 temp.s8 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s8, y.s8); 614 temp.s9 = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.s9, y.s9); 615 temp.sa = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.sa, y.sa); 616 temp.sb = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.sb, y.sb); 617 temp.sc = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.sc, y.sc); 618 temp.sd = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.sd, y.sd); 619 temp.se = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.se, y.se); 620 temp.sf = SPIRV_OCL_BUILTIN(u_sub_sat, _i64_i64, )(x.sf, y.sf); 621 return temp; 622} 623 624