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_mad_hi, _i8_i8_i8, )( char a, 15 char b, 16 char c ) 17{ 18 return SPIRV_OCL_BUILTIN(s_mul_hi, _i8_i8, )(a, b) + c; 19} 20 21INLINE 22char2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _v2i8_v2i8_v2i8, )( char2 a, 23 char2 b, 24 char2 c ) 25{ 26 return SPIRV_OCL_BUILTIN(s_mul_hi, _v2i8_v2i8, )(a, b) + c; 27} 28 29INLINE 30char3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _v3i8_v3i8_v3i8, )( char3 a, 31 char3 b, 32 char3 c ) 33{ 34 return SPIRV_OCL_BUILTIN(s_mul_hi, _v3i8_v3i8, )(a, b) + c; 35} 36 37INLINE 38char4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _v4i8_v4i8_v4i8, )( char4 a, 39 char4 b, 40 char4 c ) 41{ 42 return SPIRV_OCL_BUILTIN(s_mul_hi, _v4i8_v4i8, )(a, b) + c; 43} 44 45INLINE 46char8 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _v8i8_v8i8_v8i8, )( char8 a, 47 char8 b, 48 char8 c ) 49{ 50 return SPIRV_OCL_BUILTIN(s_mul_hi, _v8i8_v8i8, )(a, b) + c; 51} 52 53INLINE 54char16 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _v16i8_v16i8_v16i8, )( char16 a, 55 char16 b, 56 char16 c ) 57{ 58 return SPIRV_OCL_BUILTIN(s_mul_hi, _v16i8_v16i8, )(a, b) + c; 59} 60 61INLINE 62uchar SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _i8_i8_i8, )( uchar a, 63 uchar b, 64 uchar c ) 65{ 66 return SPIRV_OCL_BUILTIN(u_mul_hi, _i8_i8, )(a, b) + c; 67} 68 69INLINE 70uchar2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _v2i8_v2i8_v2i8, )( uchar2 a, 71 uchar2 b, 72 uchar2 c ) 73{ 74 return SPIRV_OCL_BUILTIN(u_mul_hi, _v2i8_v2i8, )(a, b) + c; 75} 76 77INLINE 78uchar3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _v3i8_v3i8_v3i8, )( uchar3 a, 79 uchar3 b, 80 uchar3 c ) 81{ 82 return SPIRV_OCL_BUILTIN(u_mul_hi, _v3i8_v3i8, )(a, b) + c; 83} 84 85INLINE 86uchar4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _v4i8_v4i8_v4i8, )( uchar4 a, 87 uchar4 b, 88 uchar4 c ) 89{ 90 return SPIRV_OCL_BUILTIN(u_mul_hi, _v4i8_v4i8, )(a, b) + c; 91} 92 93INLINE 94uchar8 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _v8i8_v8i8_v8i8, )( uchar8 a, 95 uchar8 b, 96 uchar8 c ) 97{ 98 return SPIRV_OCL_BUILTIN(u_mul_hi, _v8i8_v8i8, )(a, b) + c; 99} 100 101INLINE 102uchar16 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _v16i8_v16i8_v16i8, )( uchar16 a, 103 uchar16 b, 104 uchar16 c ) 105{ 106 return SPIRV_OCL_BUILTIN(u_mul_hi, _v16i8_v16i8, )(a, b) + c; 107} 108 109INLINE 110short SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _i16_i16_i16, )( short a, 111 short b, 112 short c ) 113{ 114 return SPIRV_OCL_BUILTIN(s_mul_hi, _i16_i16, )(a, b) + c; 115} 116 117INLINE 118short2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _v2i16_v2i16_v2i16, )( short2 a, 119 short2 b, 120 short2 c ) 121{ 122 return SPIRV_OCL_BUILTIN(s_mul_hi, _v2i16_v2i16, )(a, b) + c; 123} 124 125INLINE 126short3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _v3i16_v3i16_v3i16, )( short3 a, 127 short3 b, 128 short3 c ) 129{ 130 return SPIRV_OCL_BUILTIN(s_mul_hi, _v3i16_v3i16, )(a, b) + c; 131} 132 133INLINE 134short4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _v4i16_v4i16_v4i16, )( short4 a, 135 short4 b, 136 short4 c ) 137{ 138 return SPIRV_OCL_BUILTIN(s_mul_hi, _v4i16_v4i16, )(a, b) + c; 139} 140 141INLINE 142short8 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _v8i16_v8i16_v8i16, )( short8 a, 143 short8 b, 144 short8 c ) 145{ 146 return SPIRV_OCL_BUILTIN(s_mul_hi, _v8i16_v8i16, )(a, b) + c; 147} 148 149INLINE 150short16 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _v16i16_v16i16_v16i16, )( short16 a, 151 short16 b, 152 short16 c ) 153{ 154 return SPIRV_OCL_BUILTIN(s_mul_hi, _v16i16_v16i16, )(a, b) + c; 155} 156 157INLINE 158ushort SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _i16_i16_i16, )( ushort a, 159 ushort b, 160 ushort c ) 161{ 162 return SPIRV_OCL_BUILTIN(u_mul_hi, _i16_i16, )(a, b) + c; 163} 164 165INLINE 166ushort2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _v2i16_v2i16_v2i16, )( ushort2 a, 167 ushort2 b, 168 ushort2 c ) 169{ 170 return SPIRV_OCL_BUILTIN(u_mul_hi, _v2i16_v2i16, )(a, b) + c; 171} 172 173INLINE 174ushort3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _v3i16_v3i16_v3i16, )( ushort3 a, 175 ushort3 b, 176 ushort3 c ) 177{ 178 return SPIRV_OCL_BUILTIN(u_mul_hi, _v3i16_v3i16, )(a, b) + c; 179} 180 181INLINE 182ushort4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _v4i16_v4i16_v4i16, )( ushort4 a, 183 ushort4 b, 184 ushort4 c ) 185{ 186 return SPIRV_OCL_BUILTIN(u_mul_hi, _v4i16_v4i16, )(a, b) + c; 187} 188 189INLINE 190ushort8 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _v8i16_v8i16_v8i16, )( ushort8 a, 191 ushort8 b, 192 ushort8 c ) 193{ 194 return SPIRV_OCL_BUILTIN(u_mul_hi, _v8i16_v8i16, )(a, b) + c; 195} 196 197INLINE 198ushort16 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _v16i16_v16i16_v16i16, )( ushort16 a, 199 ushort16 b, 200 ushort16 c ) 201{ 202 return SPIRV_OCL_BUILTIN(u_mul_hi, _v16i16_v16i16, )(a, b) + c; 203} 204 205INLINE 206int SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _i32_i32_i32, )( int a, 207 int b, 208 int c ) 209{ 210 return SPIRV_OCL_BUILTIN(s_mul_hi, _i32_i32, )(a, b) + c; 211} 212 213INLINE 214int2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _v2i32_v2i32_v2i32, )( int2 a, 215 int2 b, 216 int2 c ) 217{ 218 return SPIRV_OCL_BUILTIN(s_mul_hi, _v2i32_v2i32, )(a, b) + c; 219} 220 221INLINE 222int3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _v3i32_v3i32_v3i32, )( int3 a, 223 int3 b, 224 int3 c ) 225{ 226 return SPIRV_OCL_BUILTIN(s_mul_hi, _v3i32_v3i32, )(a, b) + c; 227} 228 229INLINE 230int4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _v4i32_v4i32_v4i32, )( int4 a, 231 int4 b, 232 int4 c ) 233{ 234 return SPIRV_OCL_BUILTIN(s_mul_hi, _v4i32_v4i32, )(a, b) + c; 235} 236 237INLINE 238int8 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _v8i32_v8i32_v8i32, )( int8 a, 239 int8 b, 240 int8 c ) 241{ 242 return SPIRV_OCL_BUILTIN(s_mul_hi, _v8i32_v8i32, )(a, b) + c; 243} 244 245INLINE 246int16 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _v16i32_v16i32_v16i32, )( int16 a, 247 int16 b, 248 int16 c ) 249{ 250 return SPIRV_OCL_BUILTIN(s_mul_hi, _v16i32_v16i32, )(a, b) + c; 251} 252 253INLINE 254uint SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _i32_i32_i32, )( uint a, 255 uint b, 256 uint c ) 257{ 258 return SPIRV_OCL_BUILTIN(u_mul_hi, _i32_i32, )(a, b) + c; 259} 260 261INLINE 262uint2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _v2i32_v2i32_v2i32, )( uint2 a, 263 uint2 b, 264 uint2 c ) 265{ 266 return SPIRV_OCL_BUILTIN(u_mul_hi, _v2i32_v2i32, )(a, b) + c; 267} 268 269INLINE 270uint3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _v3i32_v3i32_v3i32, )( uint3 a, 271 uint3 b, 272 uint3 c ) 273{ 274 return SPIRV_OCL_BUILTIN(u_mul_hi, _v3i32_v3i32, )(a, b) + c; 275} 276 277INLINE 278uint4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _v4i32_v4i32_v4i32, )( uint4 a, 279 uint4 b, 280 uint4 c ) 281{ 282 return SPIRV_OCL_BUILTIN(u_mul_hi, _v4i32_v4i32, )(a, b) + c; 283} 284 285INLINE 286uint8 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _v8i32_v8i32_v8i32, )( uint8 a, 287 uint8 b, 288 uint8 c ) 289{ 290 return SPIRV_OCL_BUILTIN(u_mul_hi, _v8i32_v8i32, )(a, b) + c; 291} 292 293INLINE 294uint16 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _v16i32_v16i32_v16i32, )( uint16 a, 295 uint16 b, 296 uint16 c ) 297{ 298 return SPIRV_OCL_BUILTIN(u_mul_hi, _v16i32_v16i32, )(a, b) + c; 299} 300 301INLINE 302long SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _i64_i64_i64, )( long a, 303 long b, 304 long c ) 305{ 306 return SPIRV_OCL_BUILTIN(s_mul_hi, _i64_i64, )(a, b) + c; 307} 308 309INLINE 310long2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _v2i64_v2i64_v2i64, )( long2 a, 311 long2 b, 312 long2 c ) 313{ 314 return SPIRV_OCL_BUILTIN(s_mul_hi, _v2i64_v2i64, )(a, b) + c; 315} 316 317INLINE 318long3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _v3i64_v3i64_v3i64, )( long3 a, 319 long3 b, 320 long3 c ) 321{ 322 return SPIRV_OCL_BUILTIN(s_mul_hi, _v3i64_v3i64, )(a, b) + c; 323} 324 325INLINE 326long4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _v4i64_v4i64_v4i64, )( long4 a, 327 long4 b, 328 long4 c ) 329{ 330 return SPIRV_OCL_BUILTIN(s_mul_hi, _v4i64_v4i64, )(a, b) + c; 331} 332 333INLINE 334long8 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _v8i64_v8i64_v8i64, )( long8 a, 335 long8 b, 336 long8 c ) 337{ 338 return SPIRV_OCL_BUILTIN(s_mul_hi, _v8i64_v8i64, )(a, b) + c; 339} 340 341INLINE 342long16 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_mad_hi, _v16i64_v16i64_v16i64, )( long16 a, 343 long16 b, 344 long16 c ) 345{ 346 return SPIRV_OCL_BUILTIN(s_mul_hi, _v16i64_v16i64, )(a, b) + c; 347} 348 349INLINE 350ulong SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _i64_i64_i64, )( ulong a, 351 ulong b, 352 ulong c ) 353{ 354 return SPIRV_OCL_BUILTIN(u_mul_hi, _i64_i64, )(a, b) + c; 355} 356 357INLINE 358ulong2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _v2i64_v2i64_v2i64, )( ulong2 a, 359 ulong2 b, 360 ulong2 c ) 361{ 362 return SPIRV_OCL_BUILTIN(u_mul_hi, _v2i64_v2i64, )(a, b) + c; 363} 364 365INLINE 366ulong3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _v3i64_v3i64_v3i64, )( ulong3 a, 367 ulong3 b, 368 ulong3 c ) 369{ 370 return SPIRV_OCL_BUILTIN(u_mul_hi, _v3i64_v3i64, )(a, b) + c; 371} 372 373INLINE 374ulong4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _v4i64_v4i64_v4i64, )( ulong4 a, 375 ulong4 b, 376 ulong4 c ) 377{ 378 return SPIRV_OCL_BUILTIN(u_mul_hi, _v4i64_v4i64, )(a, b) + c; 379} 380 381INLINE 382ulong8 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _v8i64_v8i64_v8i64, )( ulong8 a, 383 ulong8 b, 384 ulong8 c ) 385{ 386 return SPIRV_OCL_BUILTIN(u_mul_hi, _v8i64_v8i64, )(a, b) + c; 387} 388 389INLINE 390ulong16 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_mad_hi, _v16i64_v16i64_v16i64, )( ulong16 a, 391 ulong16 b, 392 ulong16 c ) 393{ 394 return SPIRV_OCL_BUILTIN(u_mul_hi, _v16i64_v16i64, )(a, b) + c; 395} 396 397