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