Skip to content

Commit 151b6c8

Browse files
committed
optimize upsample
1 parent 229616d commit 151b6c8

File tree

1 file changed

+16
-26
lines changed

1 file changed

+16
-26
lines changed
Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,24 @@
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

Comments
 (0)