1
1
#include <clc/internal/clc.h>
2
2
3
+ // TODO: Replace with __clc_convert_<type> when available
4
+ #define __CLC_CONVERT_TY (X , TY ) __builtin_convertvector(X, TY)
5
+
6
+ #define __CLC_UPSAMPLE_VEC_IMPL (BGENTYPE , GENTYPE , UGENTYPE , GENSIZE ) \
7
+ _CLC_OVERLOAD _CLC_DEF BGENTYPE __clc_upsample(GENTYPE hi, UGENTYPE lo) { \
8
+ BGENTYPE large_hi = __CLC_CONVERT_TY(hi, BGENTYPE); \
9
+ BGENTYPE large_lo = __CLC_CONVERT_TY(lo, BGENTYPE); \
10
+ return (large_hi << (BGENTYPE)GENSIZE) | large_lo; \
11
+ }
12
+
3
13
#define __CLC_UPSAMPLE_IMPL (BGENTYPE , GENTYPE , UGENTYPE , GENSIZE ) \
4
14
_CLC_OVERLOAD _CLC_DEF BGENTYPE __clc_upsample(GENTYPE hi, UGENTYPE lo) { \
5
15
return ((BGENTYPE)hi << GENSIZE) | lo; \
6
16
} \
7
- _CLC_OVERLOAD _CLC_DEF BGENTYPE##2 __clc_upsample(GENTYPE##2 hi, \
8
- UGENTYPE##2 lo) { \
9
- return (BGENTYPE##2){__clc_upsample(hi.s0, lo.s0), \
10
- __clc_upsample(hi.s1, lo.s1)}; \
11
- } \
12
- _CLC_OVERLOAD _CLC_DEF BGENTYPE##3 __clc_upsample(GENTYPE##3 hi, \
13
- UGENTYPE##3 lo) { \
14
- return (BGENTYPE##3){__clc_upsample(hi.s0, lo.s0), \
15
- __clc_upsample(hi.s1, lo.s1), \
16
- __clc_upsample(hi.s2, lo.s2)}; \
17
- } \
18
- _CLC_OVERLOAD _CLC_DEF BGENTYPE##4 __clc_upsample(GENTYPE##4 hi, \
19
- UGENTYPE##4 lo) { \
20
- return (BGENTYPE##4){__clc_upsample(hi.lo, lo.lo), \
21
- __clc_upsample(hi.hi, lo.hi)}; \
22
- } \
23
- _CLC_OVERLOAD _CLC_DEF BGENTYPE##8 __clc_upsample(GENTYPE##8 hi, \
24
- UGENTYPE##8 lo) { \
25
- return (BGENTYPE##8){__clc_upsample(hi.lo, lo.lo), \
26
- __clc_upsample(hi.hi, lo.hi)}; \
27
- } \
28
- _CLC_OVERLOAD _CLC_DEF BGENTYPE##16 __clc_upsample(GENTYPE##16 hi, \
29
- UGENTYPE##16 lo) { \
30
- return (BGENTYPE##16){__clc_upsample(hi.lo, lo.lo), \
31
- __clc_upsample(hi.hi, lo.hi)}; \
32
- }
17
+ __CLC_UPSAMPLE_VEC_IMPL(BGENTYPE##2, GENTYPE##2, UGENTYPE##2, GENSIZE) \
18
+ __CLC_UPSAMPLE_VEC_IMPL(BGENTYPE##3, GENTYPE##3, UGENTYPE##3, GENSIZE) \
19
+ __CLC_UPSAMPLE_VEC_IMPL(BGENTYPE##4, GENTYPE##4, UGENTYPE##4, GENSIZE) \
20
+ __CLC_UPSAMPLE_VEC_IMPL(BGENTYPE##8, GENTYPE##8, UGENTYPE##8, GENSIZE) \
21
+ __CLC_UPSAMPLE_VEC_IMPL(BGENTYPE##16, GENTYPE##16, UGENTYPE##16, GENSIZE)
33
22
34
23
#define __CLC_UPSAMPLE_TYPES () \
35
24
__CLC_UPSAMPLE_IMPL(short, char, uchar, 8) \
@@ -43,3 +32,4 @@ __CLC_UPSAMPLE_TYPES()
43
32
44
33
#undef __CLC_UPSAMPLE_TYPES
45
34
#undef __CLC_UPSAMPLE_IMPL
35
+ #undef __CLC_CONVERT_TY
0 commit comments