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
14short SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )( char  hi,
15                                        uchar lo )
16{
17    return ((short)(hi) << (short)8) | (short)(lo);
18}
19
20INLINE
21short2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_upsample, _v2i8_v2i8, )( char2  hi,
22                                             uchar2 lo )
23{
24    short2 temp;
25    temp.s0 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s0, lo.s0);
26    temp.s1 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s1, lo.s1);
27    return temp;
28}
29
30INLINE
31short3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_upsample, _v3i8_v3i8, )( char3  hi,
32                                             uchar3 lo )
33{
34    short3 temp;
35    temp.s0 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s0, lo.s0);
36    temp.s1 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s1, lo.s1);
37    temp.s2 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s2, lo.s2);
38    return temp;
39}
40
41INLINE
42short4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_upsample, _v4i8_v4i8, )( char4  hi,
43                                             uchar4 lo )
44{
45    short4 temp;
46    temp.s0 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s0, lo.s0);
47    temp.s1 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s1, lo.s1);
48    temp.s2 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s2, lo.s2);
49    temp.s3 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s3, lo.s3);
50    return temp;
51}
52
53INLINE
54short8 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_upsample, _v8i8_v8i8, )( char8  hi,
55                                             uchar8 lo )
56{
57    short8 temp;
58    temp.s0 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s0, lo.s0);
59    temp.s1 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s1, lo.s1);
60    temp.s2 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s2, lo.s2);
61    temp.s3 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s3, lo.s3);
62    temp.s4 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s4, lo.s4);
63    temp.s5 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s5, lo.s5);
64    temp.s6 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s6, lo.s6);
65    temp.s7 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s7, lo.s7);
66    return temp;
67}
68
69INLINE
70short16 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_upsample, _v16i8_v16i8, )( char16  hi,
71                                                uchar16 lo )
72{
73    short16 temp;
74    temp.s0 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s0, lo.s0);
75    temp.s1 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s1, lo.s1);
76    temp.s2 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s2, lo.s2);
77    temp.s3 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s3, lo.s3);
78    temp.s4 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s4, lo.s4);
79    temp.s5 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s5, lo.s5);
80    temp.s6 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s6, lo.s6);
81    temp.s7 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s7, lo.s7);
82    temp.s8 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s8, lo.s8);
83    temp.s9 = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.s9, lo.s9);
84    temp.sa = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.sa, lo.sa);
85    temp.sb = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.sb, lo.sb);
86    temp.sc = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.sc, lo.sc);
87    temp.sd = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.sd, lo.sd);
88    temp.se = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.se, lo.se);
89    temp.sf = SPIRV_OCL_BUILTIN(s_upsample, _i8_i8, )(hi.sf, lo.sf);
90    return temp;
91}
92
93INLINE
94ushort SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )( uchar hi,
95                                         uchar lo )
96{
97    return ((ushort)(hi) << (ushort)8) | (ushort)(lo);
98}
99
100INLINE
101ushort2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_upsample, _v2i8_v2i8, )( uchar2 hi,
102                                              uchar2 lo )
103{
104    ushort2 temp;
105    temp.s0 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s0, lo.s0);
106    temp.s1 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s1, lo.s1);
107    return temp;
108}
109
110INLINE
111ushort3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_upsample, _v3i8_v3i8, )( uchar3 hi,
112                                              uchar3 lo )
113{
114    ushort3 temp;
115    temp.s0 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s0, lo.s0);
116    temp.s1 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s1, lo.s1);
117    temp.s2 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s2, lo.s2);
118    return temp;
119}
120
121INLINE
122ushort4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_upsample, _v4i8_v4i8, )( uchar4 hi,
123                                              uchar4 lo )
124{
125    ushort4 temp;
126    temp.s0 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s0, lo.s0);
127    temp.s1 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s1, lo.s1);
128    temp.s2 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s2, lo.s2);
129    temp.s3 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s3, lo.s3);
130    return temp;
131}
132
133INLINE
134ushort8 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_upsample, _v8i8_v8i8, )( uchar8 hi,
135                                              uchar8 lo )
136{
137    ushort8 temp;
138    temp.s0 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s0, lo.s0);
139    temp.s1 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s1, lo.s1);
140    temp.s2 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s2, lo.s2);
141    temp.s3 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s3, lo.s3);
142    temp.s4 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s4, lo.s4);
143    temp.s5 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s5, lo.s5);
144    temp.s6 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s6, lo.s6);
145    temp.s7 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s7, lo.s7);
146    return temp;
147}
148
149INLINE
150ushort16 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_upsample, _v16i8_v16i8, )( uchar16 hi,
151                                                 uchar16 lo )
152{
153    ushort16 temp;
154    temp.s0 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s0, lo.s0);
155    temp.s1 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s1, lo.s1);
156    temp.s2 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s2, lo.s2);
157    temp.s3 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s3, lo.s3);
158    temp.s4 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s4, lo.s4);
159    temp.s5 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s5, lo.s5);
160    temp.s6 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s6, lo.s6);
161    temp.s7 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s7, lo.s7);
162    temp.s8 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s8, lo.s8);
163    temp.s9 = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.s9, lo.s9);
164    temp.sa = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.sa, lo.sa);
165    temp.sb = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.sb, lo.sb);
166    temp.sc = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.sc, lo.sc);
167    temp.sd = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.sd, lo.sd);
168    temp.se = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.se, lo.se);
169    temp.sf = SPIRV_OCL_BUILTIN(u_upsample, _i8_i8, )(hi.sf, lo.sf);
170    return temp;
171}
172
173INLINE
174int SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )( short  hi,
175                                        ushort lo )
176{
177    return ((int)(hi) << (int)16) | (int)(lo);
178}
179
180INLINE
181int2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_upsample, _v2i16_v2i16, )( short2  hi,
182                                             ushort2 lo )
183{
184    int2 temp;
185    temp.s0 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s0, lo.s0);
186    temp.s1 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s1, lo.s1);
187    return temp;
188}
189
190INLINE
191int3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_upsample, _v3i16_v3i16, )( short3  hi,
192                                             ushort3 lo )
193{
194    int3 temp;
195    temp.s0 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s0, lo.s0);
196    temp.s1 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s1, lo.s1);
197    temp.s2 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s2, lo.s2);
198    return temp;
199}
200
201INLINE
202int4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_upsample, _v4i16_v4i16, )( short4  hi,
203                                             ushort4 lo )
204{
205    int4 temp;
206    temp.s0 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s0, lo.s0);
207    temp.s1 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s1, lo.s1);
208    temp.s2 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s2, lo.s2);
209    temp.s3 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s3, lo.s3);
210    return temp;
211}
212
213INLINE
214int8 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_upsample, _v8i16_v8i16, )( short8  hi,
215                                             ushort8 lo )
216{
217    int8 temp;
218    temp.s0 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s0, lo.s0);
219    temp.s1 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s1, lo.s1);
220    temp.s2 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s2, lo.s2);
221    temp.s3 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s3, lo.s3);
222    temp.s4 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s4, lo.s4);
223    temp.s5 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s5, lo.s5);
224    temp.s6 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s6, lo.s6);
225    temp.s7 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s7, lo.s7);
226    return temp;
227}
228
229INLINE
230int16 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_upsample, _v16i16_v16i16, )( short16  hi,
231                                                ushort16 lo )
232{
233    int16 temp;
234    temp.s0 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s0, lo.s0);
235    temp.s1 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s1, lo.s1);
236    temp.s2 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s2, lo.s2);
237    temp.s3 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s3, lo.s3);
238    temp.s4 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s4, lo.s4);
239    temp.s5 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s5, lo.s5);
240    temp.s6 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s6, lo.s6);
241    temp.s7 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s7, lo.s7);
242    temp.s8 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s8, lo.s8);
243    temp.s9 = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.s9, lo.s9);
244    temp.sa = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.sa, lo.sa);
245    temp.sb = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.sb, lo.sb);
246    temp.sc = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.sc, lo.sc);
247    temp.sd = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.sd, lo.sd);
248    temp.se = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.se, lo.se);
249    temp.sf = SPIRV_OCL_BUILTIN(s_upsample, _i16_i16, )(hi.sf, lo.sf);
250    return temp;
251}
252
253INLINE
254uint SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )( ushort hi,
255                                         ushort lo )
256{
257    return ((uint)(hi) << (uint)16) | (uint)(lo);
258}
259
260INLINE
261uint2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_upsample, _v2i16_v2i16, )( ushort2 hi,
262                                              ushort2 lo )
263{
264    uint2 temp;
265    temp.s0 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s0, lo.s0);
266    temp.s1 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s1, lo.s1);
267    return temp;
268}
269
270INLINE
271uint3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_upsample, _v3i16_v3i16, )( ushort3 hi,
272                                              ushort3 lo )
273{
274    uint3 temp;
275    temp.s0 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s0, lo.s0);
276    temp.s1 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s1, lo.s1);
277    temp.s2 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s2, lo.s2);
278    return temp;
279}
280
281INLINE
282uint4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_upsample, _v4i16_v4i16, )( ushort4 hi,
283                                              ushort4 lo )
284{
285    uint4 temp;
286    temp.s0 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s0, lo.s0);
287    temp.s1 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s1, lo.s1);
288    temp.s2 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s2, lo.s2);
289    temp.s3 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s3, lo.s3);
290    return temp;
291}
292
293INLINE
294uint8 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_upsample, _v8i16_v8i16, )( ushort8 hi,
295                                              ushort8 lo )
296{
297    uint8 temp;
298    temp.s0 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s0, lo.s0);
299    temp.s1 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s1, lo.s1);
300    temp.s2 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s2, lo.s2);
301    temp.s3 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s3, lo.s3);
302    temp.s4 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s4, lo.s4);
303    temp.s5 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s5, lo.s5);
304    temp.s6 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s6, lo.s6);
305    temp.s7 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s7, lo.s7);
306    return temp;
307}
308
309INLINE
310uint16 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_upsample, _v16i16_v16i16, )( ushort16 hi,
311                                                 ushort16 lo )
312{
313    uint16 temp;
314    temp.s0 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s0, lo.s0);
315    temp.s1 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s1, lo.s1);
316    temp.s2 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s2, lo.s2);
317    temp.s3 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s3, lo.s3);
318    temp.s4 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s4, lo.s4);
319    temp.s5 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s5, lo.s5);
320    temp.s6 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s6, lo.s6);
321    temp.s7 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s7, lo.s7);
322    temp.s8 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s8, lo.s8);
323    temp.s9 = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.s9, lo.s9);
324    temp.sa = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.sa, lo.sa);
325    temp.sb = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.sb, lo.sb);
326    temp.sc = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.sc, lo.sc);
327    temp.sd = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.sd, lo.sd);
328    temp.se = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.se, lo.se);
329    temp.sf = SPIRV_OCL_BUILTIN(u_upsample, _i16_i16, )(hi.sf, lo.sf);
330    return temp;
331}
332
333INLINE
334long SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )( int  hi,
335                                         uint lo )
336{
337    return ((long)(hi) << (long)32) | (long)(lo);
338}
339
340INLINE
341long2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_upsample, _v2i32_v2i32, )( int2  hi,
342                                              uint2 lo )
343{
344    long2 temp;
345    temp.s0 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s0, lo.s0);
346    temp.s1 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s1, lo.s1);
347    return temp;
348}
349
350INLINE
351long3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_upsample, _v3i32_v3i32, )( int3  hi,
352                                              uint3 lo )
353{
354    long3 temp;
355    temp.s0 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s0, lo.s0);
356    temp.s1 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s1, lo.s1);
357    temp.s2 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s2, lo.s2);
358    return temp;
359}
360
361INLINE
362long4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_upsample, _v4i32_v4i32, )( int4  hi,
363                                              uint4 lo )
364{
365    long4 temp;
366    temp.s0 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s0, lo.s0);
367    temp.s1 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s1, lo.s1);
368    temp.s2 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s2, lo.s2);
369    temp.s3 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s3, lo.s3);
370    return temp;
371}
372
373INLINE
374long8 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_upsample, _v8i32_v8i32, )( int8  hi,
375                                              uint8 lo )
376{
377    long8 temp;
378    temp.s0 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s0, lo.s0);
379    temp.s1 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s1, lo.s1);
380    temp.s2 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s2, lo.s2);
381    temp.s3 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s3, lo.s3);
382    temp.s4 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s4, lo.s4);
383    temp.s5 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s5, lo.s5);
384    temp.s6 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s6, lo.s6);
385    temp.s7 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s7, lo.s7);
386    return temp;
387}
388
389INLINE
390long16 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(s_upsample, _v16i32_v16i32, )( int16  hi,
391                                                 uint16 lo )
392{
393    long16 temp;
394    temp.s0 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s0, lo.s0);
395    temp.s1 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s1, lo.s1);
396    temp.s2 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s2, lo.s2);
397    temp.s3 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s3, lo.s3);
398    temp.s4 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s4, lo.s4);
399    temp.s5 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s5, lo.s5);
400    temp.s6 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s6, lo.s6);
401    temp.s7 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s7, lo.s7);
402    temp.s8 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s8, lo.s8);
403    temp.s9 = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.s9, lo.s9);
404    temp.sa = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.sa, lo.sa);
405    temp.sb = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.sb, lo.sb);
406    temp.sc = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.sc, lo.sc);
407    temp.sd = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.sd, lo.sd);
408    temp.se = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.se, lo.se);
409    temp.sf = SPIRV_OCL_BUILTIN(s_upsample, _i32_i32, )(hi.sf, lo.sf);
410    return temp;
411}
412
413INLINE
414ulong SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )( uint hi,
415                                          uint lo )
416{
417    return ((ulong)(hi) << (ulong)32) | (ulong)(lo);
418}
419
420INLINE
421ulong2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_upsample, _v2i32_v2i32, )( uint2 hi,
422                                               uint2 lo )
423{
424    ulong2 temp;
425    temp.s0 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s0, lo.s0);
426    temp.s1 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s1, lo.s1);
427    return temp;
428}
429
430INLINE
431ulong3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_upsample, _v3i32_v3i32, )( uint3 hi,
432                                               uint3 lo )
433{
434    ulong3 temp;
435    temp.s0 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s0, lo.s0);
436    temp.s1 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s1, lo.s1);
437    temp.s2 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s2, lo.s2);
438    return temp;
439}
440
441INLINE
442ulong4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_upsample, _v4i32_v4i32, )( uint4 hi,
443                                               uint4 lo )
444{
445    ulong4 temp;
446    temp.s0 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s0, lo.s0);
447    temp.s1 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s1, lo.s1);
448    temp.s2 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s2, lo.s2);
449    temp.s3 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s3, lo.s3);
450    return temp;
451}
452
453INLINE
454ulong8 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_upsample, _v8i32_v8i32, )( uint8 hi,
455                                               uint8 lo )
456{
457    ulong8 temp;
458    temp.s0 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s0, lo.s0);
459    temp.s1 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s1, lo.s1);
460    temp.s2 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s2, lo.s2);
461    temp.s3 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s3, lo.s3);
462    temp.s4 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s4, lo.s4);
463    temp.s5 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s5, lo.s5);
464    temp.s6 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s6, lo.s6);
465    temp.s7 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s7, lo.s7);
466    return temp;
467}
468
469INLINE
470ulong16 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(u_upsample, _v16i32_v16i32, )( uint16 hi,
471                                                  uint16 lo )
472{
473    ulong16 temp;
474    temp.s0 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s0, lo.s0);
475    temp.s1 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s1, lo.s1);
476    temp.s2 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s2, lo.s2);
477    temp.s3 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s3, lo.s3);
478    temp.s4 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s4, lo.s4);
479    temp.s5 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s5, lo.s5);
480    temp.s6 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s6, lo.s6);
481    temp.s7 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s7, lo.s7);
482    temp.s8 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s8, lo.s8);
483    temp.s9 = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.s9, lo.s9);
484    temp.sa = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.sa, lo.sa);
485    temp.sb = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.sb, lo.sb);
486    temp.sc = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.sc, lo.sc);
487    temp.sd = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.sd, lo.sd);
488    temp.se = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.se, lo.se);
489    temp.sf = SPIRV_OCL_BUILTIN(u_upsample, _i32_i32, )(hi.sf, lo.sf);
490    return temp;
491}
492
493