diff options
author | Anton Khirnov <anton@khirnov.net> | 2019-04-10 14:43:16 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2019-04-10 14:43:16 +0200 |
commit | b38434e2c0e43ba0eff35a561d5642e7959a6162 (patch) | |
tree | b2fb13ded4825a9f05b3f34efaea85f1db5b1a97 /transfer_interp_template.c | |
parent | 552bcf4c906522c3ef7695654052f61e12260049 (diff) |
transfer: implement transfer_addtransfer_add
Diffstat (limited to 'transfer_interp_template.c')
-rw-r--r-- | transfer_interp_template.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/transfer_interp_template.c b/transfer_interp_template.c index 65ae98b..f97f816 100644 --- a/transfer_interp_template.c +++ b/transfer_interp_template.c @@ -22,14 +22,23 @@ # define CONT generic #endif -#define JOIN3(a, b, c) a ## _ ## b ## _ ## c -#define FUNC2(name, cont, stencil) JOIN3(name, cont, stencil) -#define FUNC(name) FUNC2(name, CONT, STENCIL) +#if ADD +# define ACT add +#else +# define ACT store +#endif + +#define JOIN4(a, b, c, d) a ## _ ## b ## _ ## c ## _ ## d +#define FUNC2(name, act, cont, stencil) JOIN4(name, act, cont, stencil) +#define FUNC(name) FUNC2(name, ACT, CONT, STENCIL) static void FUNC(interp_transfer_line)(double *dst, ptrdiff_t dst_len, const double *src, ptrdiff_t src_stride, const ptrdiff_t *idx_x, const double *fact_x, const double *fact_y +#if ADD + , double fact +#endif #if !CONTIGUOUS , ptrdiff_t dst_stride0, ptrdiff_t src_stride0 # define SSTRIDE1 src_stride0 @@ -52,13 +61,18 @@ FUNC(interp_transfer_line)(double *dst, ptrdiff_t dst_len, val += tmp * fact_y[idx0]; } +#if ADD + dst[x * DSTRIDE1] += fact * val; +#else dst[x * DSTRIDE1] = val; +#endif } } #undef SSTRIDE1 #undef DSTRIDE1 #undef CONT -#undef JOIN3 +#undef ACT +#undef JOIN4 #undef FUNC2 #undef FUNC |