p_MemAdd.h
Go to the documentation of this file.
1 /****************************************
2 * Computer Algebra System SINGULAR *
3 ****************************************/
4 /***************************************************************
5  * File: p_MemAdd.h
6  * Purpose: macros for memory addition
7  * Author: obachman (Olaf Bachmann)
8  * Created: 8/00
9  *******************************************************************/
10 #ifndef P_MEM_ADD_H
11 #define P_MEM_ADD_H
12 
13 /***************************************************************
14  *
15  * MemSum
16  *
17  ***************************************************************/
18 
19 #define _p_MemSum(i, r, s1, s2) r[i] = s1[i] + s2[i]
20 
21 #define _p_MemSum_LengthOne(r, s1, s2) _p_MemSum(0, r, s1, s2)
22 #define _p_MemSum_LengthTwo(r, s1, s2) do{_p_MemSum_LengthOne(r, s1, s2); _p_MemSum(1, r, s1, s2);} while(0)
23 #define _p_MemSum_LengthThree(r, s1, s2) do{_p_MemSum_LengthTwo(r, s1, s2); _p_MemSum(2, r, s1, s2);} while(0)
24 #define _p_MemSum_LengthFour(r, s1, s2) do{_p_MemSum_LengthThree(r, s1, s2); _p_MemSum(3, r, s1, s2);} while(0)
25 #define _p_MemSum_LengthFive(r, s1, s2) do{_p_MemSum_LengthFour(r, s1, s2); _p_MemSum(4, r, s1, s2);} while(0)
26 #define _p_MemSum_LengthSix(r, s1, s2) do{_p_MemSum_LengthFive(r, s1, s2); _p_MemSum(5, r, s1, s2);} while(0)
27 #define _p_MemSum_LengthSeven(r, s1, s2) do{_p_MemSum_LengthSix(r, s1, s2); _p_MemSum(6, r, s1, s2);} while(0)
28 #define _p_MemSum_LengthEight(r, s1, s2) do{_p_MemSum_LengthSeven(r, s1, s2); _p_MemSum(7, r, s1, s2);} while(0)
29 
30 #define _p_MemSum_Declare(r, s1, s2) \
31  const unsigned long* _s1 = ((unsigned long*) s1); \
32  const unsigned long* _s2 = ((unsigned long*) s2); \
33  unsigned long* _r = ((unsigned long*) r)
34 
35 #define p_MemSum_LengthOne(r, s1, s2, length) _p_MemSum_LengthOne(r, s1, s2)
36 #define p_MemSum_LengthTwo(r, s1, s2, length) \
37 do \
38 { \
39  _p_MemSum_Declare(r,s1,s2); \
40  _p_MemSum_LengthTwo(_r, _s1, _s2); \
41 } \
42 while (0)
43 #define p_MemSum_LengthThree(r, s1, s2, length) \
44 do \
45 { \
46  _p_MemSum_Declare(r,s1,s2); \
47  _p_MemSum_LengthThree(_r, _s1, _s2); \
48 } \
49 while (0)
50 #define p_MemSum_LengthFour(r, s1, s2, length) \
51 do \
52 { \
53  _p_MemSum_Declare(r,s1,s2); \
54  _p_MemSum_LengthFour(_r, _s1, _s2); \
55 } \
56 while (0)
57 #define p_MemSum_LengthFive(r, s1, s2, length) \
58 do \
59 { \
60  _p_MemSum_Declare(r,s1,s2); \
61  _p_MemSum_LengthFive(_r, _s1, _s2); \
62 } \
63 while (0)
64 #define p_MemSum_LengthSix(r, s1, s2, length) \
65 do \
66 { \
67  _p_MemSum_Declare(r,s1,s2); \
68  _p_MemSum_LengthSix(_r, _s1, _s2); \
69 } \
70 while (0)
71 #define p_MemSum_LengthSeven(r, s1, s2, length) \
72 do \
73 { \
74  _p_MemSum_Declare(r,s1,s2); \
75  _p_MemSum_LengthSeven(_r, _s1, _s2); \
76 } \
77 while (0)
78 #define p_MemSum_LengthEight(r, s1, s2, length) \
79 do \
80 { \
81  _p_MemSum_Declare(r,s1,s2); \
82  _p_MemSum_LengthEight(_r, _s1, _s2); \
83 } \
84 while (0)
85 
86 #define p_MemSum_LengthGeneral(r, s1, s2, length) \
87 do \
88 { \
89  _p_MemSum_Declare(r,s1,s2); \
90  const unsigned long _l = (unsigned long) length; \
91  unsigned long _i = 0; \
92  \
93  do \
94  { \
95  _r[_i] = _s1[_i] + _s2[_i]; \
96  _i++; \
97  } \
98  while (_i != _l); \
99 } \
100 while (0)
101 
102 /***************************************************************
103  *
104  * MemAdd
105  *
106  ***************************************************************/
107 #define _p_MemAdd(i, r, s) r[i] += s[i]
108 
109 #define _p_MemAdd_LengthOne(r, s) _p_MemAdd(0, r, s)
110 #define _p_MemAdd_LengthTwo(r, s) do{_p_MemAdd_LengthOne(r, s); _p_MemAdd(1, r, s);} while(0)
111 #define _p_MemAdd_LengthThree(r, s) do{_p_MemAdd_LengthTwo(r, s); _p_MemAdd(2, r, s);} while(0)
112 #define _p_MemAdd_LengthFour(r, s) do{_p_MemAdd_LengthThree(r, s); _p_MemAdd(3, r, s);} while(0)
113 #define _p_MemAdd_LengthFive(r, s) do{_p_MemAdd_LengthFour(r, s); _p_MemAdd(4, r, s);} while(0)
114 #define _p_MemAdd_LengthSix(r, s) do{_p_MemAdd_LengthFive(r, s); _p_MemAdd(5, r, s);} while(0)
115 #define _p_MemAdd_LengthSeven(r, s) do{_p_MemAdd_LengthSix(r, s); _p_MemAdd(6, r, s);} while(0)
116 #define _p_MemAdd_LengthEight(r, s) do{_p_MemAdd_LengthSeven(r, s); _p_MemAdd(7, r, s);} while(0)
117 
118 #define _p_MemAdd_Declare(r, s) \
119  const unsigned long* _s = ((unsigned long*) s); \
120  unsigned long* _r = ((unsigned long*) r)
121 
122 #define p_MemAdd_LengthOne(r, s, length) _p_MemAdd_LengthOne(r, s)
123 #define p_MemAdd_LengthTwo(r, s, length) \
124 do \
125 { \
126  _p_MemAdd_Declare(r,s); \
127  _p_MemAdd_LengthTwo(_r, _s); \
128 } \
129 while (0)
130 #define p_MemAdd_LengthThree(r, s, length) \
131 do \
132 { \
133  _p_MemAdd_Declare(r,s); \
134  _p_MemAdd_LengthThree(_r, _s); \
135 } \
136 while (0)
137 #define p_MemAdd_LengthFour(r, s, length) \
138 do \
139 { \
140  _p_MemAdd_Declare(r,s); \
141  _p_MemAdd_LengthFour(_r, _s); \
142 } \
143 while (0)
144 #define p_MemAdd_LengthFive(r, s, length) \
145 do \
146 { \
147  _p_MemAdd_Declare(r,s); \
148  _p_MemAdd_LengthFive(_r, _s); \
149 } \
150 while (0)
151 #define p_MemAdd_LengthSix(r, s, length) \
152 do \
153 { \
154  _p_MemAdd_Declare(r,s); \
155  _p_MemAdd_LengthSix(_r, _s); \
156 } \
157 while (0)
158 #define p_MemAdd_LengthSeven(r, s, length) \
159 do \
160 { \
161  _p_MemAdd_Declare(r,s); \
162  _p_MemAdd_LengthSeven(_r, _s); \
163 } \
164 while (0)
165 #define p_MemAdd_LengthEight(r, s, length) \
166 do \
167 { \
168  _p_MemAdd_Declare(r,s); \
169  _p_MemAdd_LengthEight(_r, _s); \
170 } \
171 while (0)
172 
173 #define p_MemAdd_LengthGeneral(r, s, length) \
174 do \
175 { \
176  _p_MemAdd_Declare(r,s); \
177  const unsigned long _l = (unsigned long) length; \
178  unsigned long _i = 0; \
179  \
180  do \
181  { \
182  _r[_i] += _s[_i]; \
183  _i++; \
184  } \
185  while (_i != _l); \
186 } \
187 while (0)
188 
189 
190 /***************************************************************
191  *
192  * MemDiff
193  *
194  ***************************************************************/
195 #define _p_MemDiff(i, r, s1, s2) r[i] = s1[i] - s2[i]
196 
197 #define _p_MemDiff_LengthOne(r, s1, s2) _p_MemDiff(0, r, s1, s2)
198 #define _p_MemDiff_LengthTwo(r, s1, s2) do{_p_MemDiff_LengthOne(r, s1, s2); _p_MemDiff(1, r, s1, s2);} while(0)
199 #define _p_MemDiff_LengthThree(r, s1, s2) do{_p_MemDiff_LengthTwo(r, s1, s2); _p_MemDiff(2, r, s1, s2);} while(0)
200 #define _p_MemDiff_LengthFour(r, s1, s2) do{_p_MemDiff_LengthThree(r, s1, s2); _p_MemDiff(3, r, s1, s2);} while(0)
201 #define _p_MemDiff_LengthFive(r, s1, s2) do{_p_MemDiff_LengthFour(r, s1, s2); _p_MemDiff(4, r, s1, s2);} while(0)
202 #define _p_MemDiff_LengthSix(r, s1, s2) do{_p_MemDiff_LengthFive(r, s1, s2); _p_MemDiff(5, r, s1, s2);} while(0)
203 #define _p_MemDiff_LengthSeven(r, s1, s2) do{_p_MemDiff_LengthSix(r, s1, s2); _p_MemDiff(6, r, s1, s2);} while(0)
204 #define _p_MemDiff_LengthEight(r, s1, s2) do{_p_MemDiff_LengthSeven(r, s1, s2); _p_MemDiff(7, r, s1, s2);} while(0)
205 
206 #define _p_MemDiff_Declare(r, s1, s2) \
207  const unsigned long* _s1 = ((unsigned long*) s1); \
208  const unsigned long* _s2 = ((unsigned long*) s2); \
209  unsigned long* _r = ((unsigned long*) r)
210 
211 #define p_MemDiff_LengthOne(r, s1, s2, length) _p_MemDiff_LengthOne(r, s1, s2)
212 #define p_MemDiff_LengthTwo(r, s1, s2, length) \
213 do \
214 { \
215  _p_MemDiff_Declare(r,s1,s2); \
216  _p_MemDiff_LengthTwo(_r, _s1, _s2); \
217 } \
218 while (0)
219 #define p_MemDiff_LengthThree(r, s1, s2, length) \
220 do \
221 { \
222  _p_MemDiff_Declare(r,s1,s2); \
223  _p_MemDiff_LengthThree(_r, _s1, _s2); \
224 } \
225 while (0)
226 #define p_MemDiff_LengthFour(r, s1, s2, length) \
227 do \
228 { \
229  _p_MemDiff_Declare(r,s1,s2); \
230  _p_MemDiff_LengthFour(_r, _s1, _s2); \
231 } \
232 while (0)
233 #define p_MemDiff_LengthFive(r, s1, s2, length) \
234 do \
235 { \
236  _p_MemDiff_Declare(r,s1,s2); \
237  _p_MemDiff_LengthFive(_r, _s1, _s2); \
238 } \
239 while (0)
240 #define p_MemDiff_LengthSix(r, s1, s2, length) \
241 do \
242 { \
243  _p_MemDiff_Declare(r,s1,s2); \
244  _p_MemDiff_LengthSix(_r, _s1, _s2); \
245 } \
246 while (0)
247 #define p_MemDiff_LengthSeven(r, s1, s2, length) \
248 do \
249 { \
250  _p_MemDiff_Declare(r,s1,s2); \
251  _p_MemDiff_LengthSeven(_r, _s1, _s2); \
252 } \
253 while (0)
254 #define p_MemDiff_LengthEight(r, s1, s2, length) \
255 do \
256 { \
257  _p_MemDiff_Declare(r,s1,s2); \
258  _p_MemDiff_LengthEight(_r, _s1, _s2); \
259 } \
260 while (0)
261 
262 #define p_MemDiff_LengthGeneral(r, s1, s2, length) \
263 do \
264 { \
265  _p_MemDiff_Declare(r,s1,s2); \
266  const unsigned long _l = (unsigned long) length; \
267  unsigned long _i = 0; \
268  \
269  do \
270  { \
271  _r[_i] = _s1[_i] - _s2[_i]; \
272  _i++; \
273  } \
274  while (_i != _l); \
275 } \
276 while (0)
277 
278 
279 /***************************************************************
280  *
281  * MemSub
282  *
283  ***************************************************************/
284 
285 #define _p_MemSub(i, r, s) r[i] -= s[i]
286 
287 #define _p_MemSub_LengthOne(r, s) _p_MemSub(0, r, s)
288 #define _p_MemSub_LengthTwo(r, s) do{_p_MemSub_LengthOne(r, s); _p_MemSub(1, r, s);} while(0)
289 #define _p_MemSub_LengthThree(r, s) do{_p_MemSub_LengthTwo(r, s); _p_MemSub(2, r, s);} while(0)
290 #define _p_MemSub_LengthFour(r, s) do{_p_MemSub_LengthThree(r, s); _p_MemSub(3, r, s);} while(0)
291 #define _p_MemSub_LengthFive(r, s) do{_p_MemSub_LengthFour(r, s); _p_MemSub(4, r, s);} while(0)
292 #define _p_MemSub_LengthSix(r, s) do{_p_MemSub_LengthFive(r, s); _p_MemSub(5, r, s);} while(0)
293 #define _p_MemSub_LengthSeven(r, s) do{_p_MemSub_LengthSix(r, s); _p_MemSub(6, r, s);} while(0)
294 #define _p_MemSub_LengthEight(r, s) do{_p_MemSub_LengthSeven(r, s); _p_MemSub(7, r, s);} while(0)
295 
296 #define _p_MemSub_Declare(r, s) \
297  const unsigned long* _s = ((unsigned long*) s); \
298  unsigned long* _r = ((unsigned long*) r)
299 
300 #define p_MemSub_LengthOne(r, s, length) _p_MemSub_LengthOne(r, s)
301 #define p_MemSub_LengthTwo(r, s, length) \
302 do \
303 { \
304  _p_MemSub_Declare(r,s); \
305  _p_MemSub_LengthTwo(_r, _s); \
306 } \
307 while (0)
308 #define p_MemSub_LengthThree(r, s, length) \
309 do \
310 { \
311  _p_MemSub_Declare(r,s); \
312  _p_MemSub_LengthThree(_r, _s); \
313 } \
314 while (0)
315 #define p_MemSub_LengthFour(r, s, length) \
316 do \
317 { \
318  _p_MemSub_Declare(r,s); \
319  _p_MemSub_LengthFour(_r, _s); \
320 } \
321 while (0)
322 #define p_MemSub_LengthFive(r, s, length) \
323 do \
324 { \
325  _p_MemSub_Declare(r,s); \
326  _p_MemSub_LengthFive(_r, _s); \
327 } \
328 while (0)
329 #define p_MemSub_LengthSix(r, s, length) \
330 do \
331 { \
332  _p_MemSub_Declare(r,s); \
333  _p_MemSub_LengthSix(_r, _s); \
334 } \
335 while (0)
336 #define p_MemSub_LengthSeven(r, s, length) \
337 do \
338 { \
339  _p_MemSub_Declare(r,s); \
340  _p_MemSub_LengthSeven(_r, _s); \
341 } \
342 while (0)
343 #define p_MemSub_LengthEight(r, s, length) \
344 do \
345 { \
346  _p_MemSub_Declare(r,s); \
347  _p_MemSub_LengthEight(_r, _s); \
348 } \
349 while (0)
350 
351 #define p_MemSub_LengthGeneral(r, s, length) \
352 do \
353 { \
354  _p_MemSub_Declare(r,s); \
355  const unsigned long _l = (unsigned long) length; \
356  unsigned long _i = 0; \
357  \
358  do \
359  { \
360  _r[_i] -= _s[_i]; \
361  _i++; \
362  } \
363  while (_i != _l); \
364 } \
365 while (0)
366 
367 #define _p_MemAddSub_Declare(r, s, t) \
368  const unsigned long* _s = ((unsigned long*) s); \
369  const unsigned long* _t = ((unsigned long*) t); \
370  unsigned long* _r = ((unsigned long*) r)
371 
372 #define p_MemAddSub_LengthGeneral(r, s, t, length) \
373 do \
374 { \
375  _p_MemAddSub_Declare(r,s, t); \
376  const unsigned long _l = (unsigned long) length; \
377  unsigned long _i = 0; \
378  \
379  do \
380  { \
381  _r[_i] += _s[_i] - _t[_i]; \
382  _i++; \
383  } \
384  while (_i != _l); \
385 } \
386 while (0)
387 
388 #endif /* P_MEM_ADD_H */