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