diff options
Diffstat (limited to 'transfer_interp_template.c')
-rw-r--r-- | transfer_interp_template.c | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/transfer_interp_template.c b/transfer_interp_template.c index e7ff14a..7bfc89e 100644 --- a/transfer_interp_template.c +++ b/transfer_interp_template.c @@ -27,9 +27,9 @@ #define FUNC(name) FUNC2(name, 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 +FUNC(interp2d_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 !CONTIGUOUS , ptrdiff_t dst_stride0, ptrdiff_t src_stride0 # define SSTRIDE1 src_stride0 @@ -56,6 +56,26 @@ FUNC(interp_transfer_line)(double *dst, ptrdiff_t dst_len, } } +static void +FUNC(interp1d_transfer_line)(double *dst, ptrdiff_t dst_len, + const double *src, const ptrdiff_t *idx_x, const double *fact_x +#if !CONTIGUOUS + , ptrdiff_t dst_stride0, ptrdiff_t src_stride0 +#endif + ) +{ + for (size_t x = 0; x < dst_len; x++) { + const double *src_data = src + SSTRIDE1 * idx_x[x]; + + double val = 0.0; + + for (ptrdiff_t idx = 0; idx < STENCIL; idx++) + val += src_data[idx * SSTRIDE1] * fact_x[STENCIL * x + idx]; + + dst[x * DSTRIDE1] = val; + } +} + #undef SSTRIDE1 #undef DSTRIDE1 #undef CONT |