/src/fftw3/kernel/cpy2d-pair.c
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Copyright (c) 2003, 2007-14 Matteo Frigo |
3 | | * Copyright (c) 2003, 2007-14 Massachusetts Institute of Technology |
4 | | * |
5 | | * This program is free software; you can redistribute it and/or modify |
6 | | * it under the terms of the GNU General Public License as published by |
7 | | * the Free Software Foundation; either version 2 of the License, or |
8 | | * (at your option) any later version. |
9 | | * |
10 | | * This program is distributed in the hope that it will be useful, |
11 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | | * GNU General Public License for more details. |
14 | | * |
15 | | * You should have received a copy of the GNU General Public License |
16 | | * along with this program; if not, write to the Free Software |
17 | | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
18 | | * |
19 | | */ |
20 | | |
21 | | /* out of place copy routines for pairs of isomorphic 2D arrays */ |
22 | | #include "kernel/ifftw.h" |
23 | | |
24 | | void X(cpy2d_pair)(R *I0, R *I1, R *O0, R *O1, |
25 | | INT n0, INT is0, INT os0, |
26 | | INT n1, INT is1, INT os1) |
27 | 39 | { |
28 | 39 | INT i0, i1; |
29 | | |
30 | 448 | for (i1 = 0; i1 < n1; ++i1) |
31 | 4.45k | for (i0 = 0; i0 < n0; ++i0) { |
32 | 4.04k | R x0 = I0[i0 * is0 + i1 * is1]; |
33 | 4.04k | R x1 = I1[i0 * is0 + i1 * is1]; |
34 | 4.04k | O0[i0 * os0 + i1 * os1] = x0; |
35 | 4.04k | O1[i0 * os0 + i1 * os1] = x1; |
36 | 4.04k | } |
37 | 39 | } |
38 | | |
39 | | void X(zero1d_pair)(R *O0, R *O1, INT n0, INT os0) |
40 | 0 | { |
41 | 0 | INT i0; |
42 | 0 | for (i0 = 0; i0 < n0; ++i0) { |
43 | 0 | O0[i0 * os0] = 0; |
44 | 0 | O1[i0 * os0] = 0; |
45 | 0 | } |
46 | 0 | } |
47 | | |
48 | | /* like cpy2d_pair, but read input contiguously if possible */ |
49 | | void X(cpy2d_pair_ci)(R *I0, R *I1, R *O0, R *O1, |
50 | | INT n0, INT is0, INT os0, |
51 | | INT n1, INT is1, INT os1) |
52 | 39 | { |
53 | 39 | if (IABS(is0) < IABS(is1)) /* inner loop is for n0 */ |
54 | 0 | X(cpy2d_pair) (I0, I1, O0, O1, n0, is0, os0, n1, is1, os1); |
55 | 39 | else |
56 | 39 | X(cpy2d_pair) (I0, I1, O0, O1, n1, is1, os1, n0, is0, os0); |
57 | 39 | } |
58 | | |
59 | | /* like cpy2d_pair, but write output contiguously if possible */ |
60 | | void X(cpy2d_pair_co)(R *I0, R *I1, R *O0, R *O1, |
61 | | INT n0, INT is0, INT os0, |
62 | | INT n1, INT is1, INT os1) |
63 | 0 | { |
64 | 0 | if (IABS(os0) < IABS(os1)) /* inner loop is for n0 */ |
65 | 0 | X(cpy2d_pair) (I0, I1, O0, O1, n0, is0, os0, n1, is1, os1); |
66 | 0 | else |
67 | 0 | X(cpy2d_pair) (I0, I1, O0, O1, n1, is1, os1, n0, is0, os0); |
68 | 0 | } |