annotate libgfortran/m4/iforeach-s2.m4 @ 138:fc828634a951

merge
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 08 Nov 2018 14:17:14 +0900
parents 84e7813d76e9
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 dnl Support macro file for intrinsic functions.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 dnl Contains the generic sections of the array functions.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 dnl This file is part of the GNU Fortran Runtime Library (libgfortran)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 dnl Distributed under the GNU GPL with exception. See COPYING for details.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 define(START_FOREACH_FUNCTION,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 `static inline int
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 compare_fcn (const atype_name *a, const atype_name *b, gfc_charlen_type n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 if (sizeof ('atype_name`) == 1)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 return memcmp (a, b, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 else
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 return memcmp_char4 (a, b, n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 #define INITVAL 'initval`
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 extern void 'name`'rtype_qual`_'atype_code (atype_name * restrict,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 gfc_charlen_type,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 atype * const restrict array, gfc_charlen_type);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 export_proto(name`'rtype_qual`_'atype_code);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 name`'rtype_qual`_'atype_code` ('atype_name` * restrict ret,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 gfc_charlen_type xlen,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 'atype` * const restrict array, gfc_charlen_type len)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 index_type count[GFC_MAX_DIMENSIONS];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 index_type extent[GFC_MAX_DIMENSIONS];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 index_type sstride[GFC_MAX_DIMENSIONS];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 const 'atype_name` *base;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 index_type rank;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 index_type n;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 rank = GFC_DESCRIPTOR_RANK (array);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 if (rank <= 0)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 runtime_error ("Rank of array needs to be > 0");
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 assert (xlen == len);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 /* Initialize return value. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 memset (ret, INITVAL, sizeof(*ret) * len);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 for (n = 0; n < rank; n++)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n) * len;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 count[n] = 0;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 if (extent[n] <= 0)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 return;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53 base = array->base_addr;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 ')dnl
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 define(START_FOREACH_BLOCK,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58 ` while (base)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 do
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62 /* Implementation start. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 ')dnl
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 define(FINISH_FOREACH_FUNCTION,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 ` /* Implementation end. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 /* Advance to the next element. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 base += sstride[0];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69 while (++count[0] != extent[0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70 n = 0;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71 do
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73 /* When we get to the end of a dimension, reset it and increment
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74 the next dimension. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75 count[n] = 0;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76 /* We could precalculate these products, but this is a less
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77 frequently used path so probably not worth it. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78 base -= sstride[n] * extent[n];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79 n++;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80 if (n >= rank)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 /* Break out of the loop. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83 base = NULL;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 break;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86 else
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88 count[n]++;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 base += sstride[n];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92 while (count[n] == extent[n]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
94 memcpy (ret, retval, len * sizeof (*ret));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
95 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
96 }')dnl
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
97 define(START_MASKED_FOREACH_FUNCTION,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
98 `
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
99 extern void `m'name`'rtype_qual`_'atype_code (atype_name * restrict,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
100 gfc_charlen_type, atype * const restrict array,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
101 gfc_array_l1 * const restrict mask, gfc_charlen_type len);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
102 export_proto(`m'name`'rtype_qual`_'atype_code);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
103
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
104 void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
105 `m'name`'rtype_qual`_'atype_code (atype_name * const restrict ret,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
106 gfc_charlen_type xlen, atype * const restrict array,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
107 gfc_array_l1 * const restrict mask, gfc_charlen_type len)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
108 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
109 index_type count[GFC_MAX_DIMENSIONS];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
110 index_type extent[GFC_MAX_DIMENSIONS];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
111 index_type sstride[GFC_MAX_DIMENSIONS];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
112 index_type mstride[GFC_MAX_DIMENSIONS];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
113 const atype_name *base;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
114 GFC_LOGICAL_1 *mbase;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
115 int rank;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
116 index_type n;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
117 int mask_kind;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
118
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
119 rank = GFC_DESCRIPTOR_RANK (array);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
120 if (rank <= 0)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
121 runtime_error ("Rank of array needs to be > 0");
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
122
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
123 assert (xlen == len);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
124
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
125 /* Initialize return value. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
126 memset (ret, INITVAL, sizeof(*ret) * len);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
127
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
128 mask_kind = GFC_DESCRIPTOR_SIZE (mask);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
129
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
130 mbase = mask->base_addr;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
132 if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
133 #ifdef HAVE_GFC_LOGICAL_16
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
134 || mask_kind == 16
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
135 #endif
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
136 )
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
137 mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
138 else
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
139 runtime_error ("Funny sized logical array");
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
140
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
141 for (n = 0; n < rank; n++)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
142 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
143 sstride[n] = GFC_DESCRIPTOR_STRIDE(array,n) * len;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
144 mstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(mask,n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
145 extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
146 count[n] = 0;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
147 if (extent[n] <= 0)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
148 return;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
149 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
150
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
151 base = array->base_addr;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
152 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
153 ')dnl
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
154 define(START_MASKED_FOREACH_BLOCK, `START_FOREACH_BLOCK')dnl
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
155 define(FINISH_MASKED_FOREACH_FUNCTION,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
156 ` /* Implementation end. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
157 /* Advance to the next element. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
158 base += sstride[0];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
159 mbase += mstride[0];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
160 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
161 while (++count[0] != extent[0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
162 n = 0;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
163 do
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
164 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
165 /* When we get to the end of a dimension, reset it and increment
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
166 the next dimension. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
167 count[n] = 0;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
168 /* We could precalculate these products, but this is a less
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
169 frequently used path so probably not worth it. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
170 base -= sstride[n] * extent[n];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
171 mbase -= mstride[n] * extent[n];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
172 n++;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
173 if (n >= rank)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
174 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
175 /* Break out of the loop. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
176 base = NULL;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
177 break;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
178 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
179 else
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
180 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
181 count[n]++;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
182 base += sstride[n];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
183 mbase += mstride[n];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
184 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
185 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
186 while (count[n] == extent[n]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
187 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
188 memcpy (ret, retval, len * sizeof (*ret));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
189 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
190 }')dnl
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
191 define(FOREACH_FUNCTION,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
192 `START_FOREACH_FUNCTION
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
193 $1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
194 START_FOREACH_BLOCK
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
195 $2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
196 FINISH_FOREACH_FUNCTION')dnl
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
197 define(MASKED_FOREACH_FUNCTION,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
198 `START_MASKED_FOREACH_FUNCTION
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
199 $1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
200 START_MASKED_FOREACH_BLOCK
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
201 $2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
202 FINISH_MASKED_FOREACH_FUNCTION')dnl
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
203 define(SCALAR_FOREACH_FUNCTION,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
204 `
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
205 extern void `s'name`'rtype_qual`_'atype_code (atype_name * restrict,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
206 gfc_charlen_type,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
207 atype * const restrict array, GFC_LOGICAL_4 *, gfc_charlen_type);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
208 export_proto(`s'name`'rtype_qual`_'atype_code);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
209
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
210 void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
211 `s'name`'rtype_qual`_'atype_code (atype_name * restrict ret,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
212 gfc_charlen_type xlen, atype * const restrict array,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
213 GFC_LOGICAL_4 *mask, gfc_charlen_type len)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
214
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
215 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
216 if (*mask)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
217 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
218 name`'rtype_qual`_'atype_code (ret, xlen, array, len);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
219 return;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
220 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
221 memset (ret, INITVAL, sizeof (*ret) * len);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
222 }')dnl