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