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