11#include <clc/internal/clc.h>
22
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+
313#define __CLC_UPSAMPLE_IMPL (BGENTYPE , GENTYPE , UGENTYPE , GENSIZE ) \
414 _CLC_OVERLOAD _CLC_DEF BGENTYPE __clc_upsample(GENTYPE hi, UGENTYPE lo) { \
515 return ((BGENTYPE)hi << GENSIZE) | lo; \
616 } \
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)
3322
3423#define __CLC_UPSAMPLE_TYPES () \
3524 __CLC_UPSAMPLE_IMPL(short, char, uchar, 8) \
@@ -43,3 +32,4 @@ __CLC_UPSAMPLE_TYPES()
4332
4433#undef __CLC_UPSAMPLE_TYPES
4534#undef __CLC_UPSAMPLE_IMPL
35+ #undef __CLC_CONVERT_TY
0 commit comments