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