1 typedef struct descriptor_dimension
2 {
3 int stride;
4 int lbound;
5 int ubound;
6 } descriptor_dimension;
7 typedef struct {
8 int *data;
9 int dtype;
10 descriptor_dimension dim[7];
11 } gfc_array_i4;
12
13 void
msum_i4(gfc_array_i4 * const retarray,gfc_array_i4 * const array,const int * const pdim)14 msum_i4 (gfc_array_i4 * const retarray,
15 gfc_array_i4 * const array,
16 const int * const pdim)
17 {
18 int count[7];
19 int extent[7];
20 int * dest;
21 const int * base;
22 int dim;
23 int n;
24 int len;
25
26 dim = (*pdim) - 1;
27 len = array->dim[dim].ubound + 1 - array->dim[dim].lbound;
28
29 for (n = 0; n < dim; n++)
30 {
31 extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound;
32 count[n] = 0;
33 }
34
35 dest = retarray->data;
36 base = array->data;
37
38 do
39 {
40 int result = 0;
41
42 for (n = 0; n < len; n++, base++)
43 result += *base;
44 *dest = result;
45
46 count[0]++;
47 dest += 1;
48 }
49 while (count[0] != extent[0]);
50 }
51
main()52 int main()
53 {
54 int rdata[3];
55 int adata[9];
56 gfc_array_i4 retarray = { rdata, 265, { { 1, 1, 3 } } };
57 gfc_array_i4 array = { adata, 266, { { 1, 1, 3 }, { 3, 1, 3 } } };
58 int dim = 2;
59 msum_i4 (&retarray, &array, &dim);
60 return 0;
61 }
62