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