source: git/Singular/polys-comp.h @ 13e3243

spielwiese
Last change on this file since 13e3243 was 556acd, checked in by Olaf Bachmann <obachman@…>, 26 years ago
* added COMP_NO_EXP_VECTOR_OPS for LITTLE ENDIAN git-svn-id: file:///usr/local/Singular/svn/trunk@1024 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 24.2 KB
Line 
1#ifndef POLYS_COMP_H
2#define POLYS_COMP_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/* $Id: polys-comp.h,v 1.3 1998-01-15 16:15:26 obachman Exp $ */
7
8/***************************************************************
9 *
10 * File:       polys-comp.h
11 * Purpose:    low-level monomial comparison routines
12 *
13 ***************************************************************/
14
15#include "polys-impl.h"
16
17#ifdef COMP_FAST
18
19 
20
21#ifdef WORDS_BIGENDIAN
22
23#ifndef COMP_NO_EXP_VECTOR_OPS
24#define _pMonCmp_1(p1, p2, d, actionD, actionE)              \
25do                                                          \
26{                                                           \
27  d = *((long*) &(p1->exp[0])) - *((long*) &(p2->exp[0]));  \
28  if (d) actionD;                                           \
29  actionE;                                                  \
30}                                                           \
31while(0)
32 
33#define _pMonCmp_1_c(p1, p2, d, actionD, actionE)            \
34do                                                          \
35{                                                           \
36  d = *((long*) &(p1->exp[0])) - *((long*) &(p2->exp[0]));  \
37  if (d)                                                    \
38  {                                                         \
39    if (((long) (pGetComp(p1) - pGetComp(p2))) == d)        \
40      d = -d;                                               \
41    actionD;                                                \
42  }                                                         \
43  actionE;                                                  \
44}                                                           \
45while(0)
46
47#define _pMonCmp_2(p1, p2, d, actionD, actionE)  \
48do                                              \
49{                                               \
50  const long* s1 = (long*) &(p1->exp[0]);             \
51  const long* s2 = (long*) &(p2->exp[0]);             \
52  d = *s1 - *s2;                                \
53  if (d) actionD;                               \
54  d = *(s1 + 1) - *(s2 + 1);                    \
55  if (d) actionD;                               \
56  actionE;                                      \
57}                                               \
58while(0)
59 
60#define _pMonCmp_2_c(p1, p2, d, actionD, actionE)        \
61do                                                      \
62{                                                       \
63  const long* s1 = (long*) &(p1->exp[0]);                     \
64  const long* s2 = (long*) &(p2->exp[0]);                     \
65  d = *s1 - *s2;                                        \
66  if (d) actionD;                                       \
67  d = *(s1 + 1) - *(s2 + 1);                            \
68  if (d)                                                \
69  {                                                     \
70    if (((long) (pGetComp(p1) - pGetComp(p2))) == d)    \
71      d = -d;                                           \
72    actionD;                                            \
73  }                                                     \
74  actionE;                                              \
75}                                                       \
76while(0)
77 
78#define _pMonCmp_2i(p1, p2, length, d, actionD, actionE) \
79do                                                      \
80{                                                       \
81  const long* s1 = (long*) &(p1->exp[0]);                     \
82  const long* s2 = (long*) &(p2->exp[0]);                     \
83  const long* const lb = s1 + length;                               \
84                                                        \
85  for (;;)                                              \
86  {                                                     \
87    d = *s1 - *s2;                                      \
88    if (d) actionD;                                     \
89    s1++;                                               \
90    s2++;                                               \
91    d = *s1 - *s2;                                      \
92    if (d) actionD;                                     \
93    s1++;                                               \
94    if (s1 == lb) actionE;                              \
95    s2++;                                               \
96  }                                                     \
97}                                                       \
98while(0)
99
100#define _pMonCmp_2i_1(p1, p2, length, d, actionD, actionE)   \
101do                                                          \
102{                                                           \
103  const long* s1 = (long*) &(p1->exp[0]);                         \
104  const long* s2 = (long*) &(p2->exp[0]);                         \
105  const long* const lb = s1 + length;                                   \
106                                                            \
107  for (;;)                                                  \
108  {                                                         \
109    d = *s1 - *s2;                                          \
110    if (d) actionD;                                         \
111    s1++;                                                   \
112    if (s1 == lb) actionE;                                  \
113    s2++;                                                   \
114    d = *s1 - *s2;                                          \
115    if (d) actionD;                                         \
116    s1++;                                                   \
117    s2++;                                                   \
118  }                                                         \
119}                                                           \
120while(0)
121 
122#define _pMonCmp_2i_c(p1, p2, length, d, actionD, actionE)  \
123do                                                          \
124{                                                           \
125  const long* s1 = (long*) &(p1->exp[0]);                   \
126  const long* s2 = (long*) &(p2->exp[0]);                   \
127  const long* const lb = s1 + length-1;                     \
128                                                            \
129  for (;;)                                                  \
130  {                                                         \
131    d = *s1 - *s2;                                          \
132    if (d) actionD;                                         \
133    s1++;                                                   \
134    if (s1 == lb) break;                                    \
135    s2++;                                                   \
136    d = *s1 - *s2;                                          \
137    if (d) actionD;                                         \
138    s1++;                                                   \
139    s2++;                                                   \
140  }                                                         \
141                                                            \
142  d = *s1 - *(s2 + 1);                                      \
143  if (d)                                                    \
144  {                                                         \
145    if (((long) (pGetComp(p1) - pGetComp(p2))) == d)        \
146      d = -d;                                               \
147    actionD;                                                \
148  }                                                         \
149  actionE;                                                  \
150}                                                           \
151while(0)
152 
153#define _pMonCmp_2i_1_c(p1, p2, length, d, actionD, actionE)    \
154do                                                              \
155{                                                               \
156  const long* s1 = (long*) &(p1->exp[0]);                       \
157  const long* s2 = (long*) &(p2->exp[0]);                       \
158  const long* const lb = s1 + length      -1;                   \
159                                                                \
160  for (;;)                                                      \
161  {                                                             \
162    d = *s1 - *s2;                                              \
163    if (d) actionD;                                             \
164    s1++;                                                       \
165    s2++;                                                       \
166    d = *s1 - *s2;                                              \
167    if (d) actionD;                                             \
168    s1++;                                                       \
169    if (s1 == lb) break;                                        \
170    s2++;                                                       \
171  }                                                             \
172                                                                \
173  d = *s1 - *(s2 + 1);                                          \
174  if (d)                                                        \
175  {                                                             \
176    if (((long) (pGetComp(p1) - pGetComp(p2))) == d)            \
177      d = -d;                                                   \
178    actionD;                                                    \
179  }                                                             \
180  actionE;                                                      \
181}                                                               \
182while(0)
183
184#else // COMP_NO_EXP_VECTOR_OPS
185
186#define _pMonCmp(p1, p2, d, actionD, actionE)   \
187do                                              \
188{                                               \
189  Exponent_pt e1 = &(p1->exp[0]);         \
190  Exponent_pt e2 = &(p2->exp[0]);         \
191  const Exponent_pt ub = e1 + pVariables; \
192                                                \
193  for (;;)                                      \
194  {                                             \
195    d = *e1 - *e2;                              \
196    if (d) actionD;                             \
197    e1++;                                       \
198    if (e1 == ub)                               \
199    {                                           \
200      d = pGetComp(p1) - pGetComp(p2);          \
201      if (d) actionD;                           \
202      actionE;                                  \
203    }                                           \
204    e2++;                                       \
205  }                                             \
206}                                               \
207while(0)
208
209#define _pMonCmp_c(p1, p2, d, actionD, actionE) \
210do                                              \
211{                                               \
212  Exponent_pt e1 = &(p1->exp[0]);         \
213  Exponent_pt e2 = &(p2->exp[0]);         \
214  const Exponent_pt ub = e1 + pVariables; \
215                                                \
216  for (;;)                                      \
217  {                                             \
218    d = *e1 - *e2;                              \
219    if (d) actionD;                             \
220    e1++;                                       \
221    if (e1 == ub)                               \
222    {                                           \
223      d = pGetComp(p2) - pGetComp(p1);          \
224      if (d) actionD;                           \
225      actionE;                                  \
226    }                                           \
227    e2++;                                       \
228  }                                             \
229}                                               \
230while(0)
231
232#define _pMonCmp_1(p1, p2, d, actionD, actionE)  \
233  _pMonCmp(p1, p2, d, actionD, actionE)
234
235#define _pMonCmp_1_c(p1, p2, d, actionD, actionE)  \
236  _pMonCmp_c(p1, p2, d, actionD, actionE)
237 
238#define _pMonCmp_2(p1, p2, d, actionD, actionE)  \
239  _pMonCmp(p1, p2, d, actionD, actionE)
240
241#define _pMonCmp_2_c(p1, p2, d, actionD, actionE)  \
242  _pMonCmp_c(p1, p2, d, actionD, actionE)
243 
244#define _pMonCmp_2i(p1, p2, length, d, actionD, actionE) \
245  _pMonCmp(p1, p2, d, actionD, actionE)
246
247#define _pMonCmp_2i_1(p1, p2, length, d, actionD, actionE) \
248  _pMonCmp(p1, p2, d, actionD, actionE)
249
250#define _pMonCmp_2i_c(p1, p2, length, d, actionD, actionE)   \
251  _pMonCmp_c(p1, p2, d, actionD, actionE)
252
253#define _pMonCmp_2i_1_c(p1, p2, length, d, actionD, actionE) \
254  _pMonCmp_c(p1, p2, d, actionD, actionE)
255
256#endif // COMP_NO_EXP_VECTOR_OPS
257
258#else //  ! WORDS_BIGENDIAN
259
260#ifndef COMP_NO_EXP_VECTOR_OPS 
261#define _pMonCmp_1(p1, p2, d, actionD, actionE)                              \
262do                                                                          \
263{                                                                           \
264  d = *(((long*) p1) + pMonomSizeW-1) - *(((long*) p2)  + pMonomSizeW-1);   \
265  if (d) actionD;                                                           \
266  actionE;                                                                  \
267}                                                                           \
268while(0)
269 
270#define _pMonCmp_1_c(p1, p2, d, actionD, actionE)                            \
271do                                                                          \
272{                                                                           \
273  d = *(((long*) p1) + pMonomSizeW-1) - *(((long*) p2)  + pMonomSizeW-1);   \
274  if (d)                                                                    \
275  {                                                                         \
276    if (((long) (pGetComp(p1) - pGetComp(p2))) == d)                        \
277      d = -d;                                                               \
278    actionD;                                                                \
279  }                                                                         \
280  actionE;                                                                  \
281}                                                                           \
282while(0)
283
284#define _pMonCmp_2(p1, p2, d, actionD, actionE)  \
285do                                              \
286{                                               \
287  const long* s1 = ((long*) p1) + pMonomSizeW-1;      \
288  const long* s2 = ((long*) p2)  + pMonomSizeW-1;      \
289  d = *s1 - *s2;                                \
290  if (d) actionD;                               \
291  d = *(s1 - 1) - *(s2 - 1);                    \
292  if (d) actionD;                               \
293  actionE;                                      \
294}                                               \
295while(0)
296 
297#define _pMonCmp_2_c(p1, p2, d, actionD, actionE)        \
298do                                                      \
299{                                                       \
300  const long* s1 = ((long*) p1) + pMonomSizeW-1;              \
301  const long* s2 = ((long*) p2)  + pMonomSizeW-1;             \
302  d = *s1 - *s2;                                        \
303  if (d) actionD;                                       \
304  d = *s1 - *s2;                                        \
305  if (d) actionD;                                       \
306  d = *(s1 -1) - *(s2 -1);                              \
307  if (d)                                                \
308  {                                                     \
309    if (((long) (pGetComp(p1) - pGetComp(p2))) == d)    \
310      d = -d;                                           \
311    actionD;                                            \
312  }                                                     \
313  actionE;                                              \
314}                                                       \
315while(0)
316 
317#define _pMonCmp_2i(p1, p2, length, d, actionD, actionE) \
318do                                                      \
319{                                                       \
320  const long* s1 = ((long*) p1) + pMonomSizeW-1;              \
321  const long* s2 = ((long*) p2)  + pMonomSizeW-1;             \
322  const long* const lb = s1 - length;                                \
323  for (;;)                                              \
324  {                                                     \
325    d = *s1 - *s2;                                      \
326    if (d) actionD;                                     \
327    s1--;                                               \
328    s2--;                                               \
329    d = *s1 - *s2;                                      \
330    if (d) actionD;                                     \
331    s1--;                                               \
332    if (s1 == lb) actionE;                              \
333    s2--;                                               \
334  }                                                     \
335}                                                       \
336while(0)
337
338#define _pMonCmp_2i_1(p1, p2, length, d, actionD, actionE)   \
339do                                                          \
340{                                                           \
341  const long* s1 = ((long*) p1) + pMonomSizeW-1;                  \
342  const long* s2 = ((long*) p2)  + pMonomSizeW-1;                 \
343  const long* const lb = s1 - length;                                    \
344                                                            \
345  for (;;)                                                  \
346  {                                                         \
347    d = *s1 - *s2;                                          \
348    if (d) actionD;                                         \
349    s1--;                                                   \
350    if (s1 == lb) actionE;                                  \
351    s2--;                                                   \
352    d = *s1 - *s2;                                          \
353    if (d) actionD;                                         \
354    s1--;                                                   \
355    s2--;                                                   \
356  }                                                         \
357}                                                           \
358while(0)
359 
360#define _pMonCmp_2i_c(p1, p2, length, d, actionD, actionE)   \
361do                                                          \
362{                                                           \
363  const long* s1 = ((long*) p1) + pMonomSizeW-1;                  \
364  const long* s2 = ((long*) p2)  + pMonomSizeW-1;                 \
365  const long* const lb = s1 - length +1;                                 \
366                                                            \
367  for (;;)                                                  \
368  {                                                         \
369    d = *s1 - *s2;                                          \
370    if (d) actionD;                                         \
371    s1--;                                                   \
372    if (s1 == lb) break;                                    \
373    s2--;                                                   \
374    d = *s1 - *s2;                                          \
375    if (d) actionD;                                         \
376    s1--;                                                   \
377    s2--;                                                   \
378  }                                                         \
379                                                            \
380  d = *s1 - *(s2 - 1);                                      \
381  if (d)                                                    \
382  {                                                         \
383    if (((long) (pGetComp(p1) - pGetComp(p2))) == d)        \
384      d = -d;                                               \
385    actionD;                                                \
386  }                                                         \
387  actionE;                                                  \
388}                                                           \
389while(0)
390 
391#define _pMonCmp_2i_1_c(p1, p2, length, d, actionD, actionE) \
392do                                                          \
393{                                                           \
394  const long* s1 = ((long*) p1) + pMonomSizeW-1;                  \
395  const long* s2 = ((long*) p2)  + pMonomSizeW-1;                 \
396  const long* const lb = s1 - length +1;                                 \
397                                                            \
398  for (;;)                                                  \
399  {                                                         \
400    d = *s1 - *s2;                                          \
401    if (d) actionD;                                         \
402    s1--;                                                   \
403    s2--;                                                   \
404    d = *s1 - *s2;                                          \
405    if (d) actionD;                                         \
406    s1--;                                                   \
407    if (s1 == lb) break;                                    \
408    s2--;                                                   \
409  }                                                         \
410                                                            \
411  d = *s1 - *(s2 - 1);                                      \
412  if (d)                                                    \
413  {                                                         \
414    if (((long) (pGetComp(p1) - pGetComp(p2))) == d)        \
415      d = -d;                                               \
416    actionD;                                                \
417  }                                                         \
418  actionE;                                                  \
419}                                                           \
420while(0)
421
422#else // COMP_NO_EXP_VECTOR_OPS
423
424#define _pMonCmp(p1, p2, d, actionD, actionE)   \
425do                                              \
426{                                               \
427  Exponent_pt e1 = &(p1->exp[pVarHighIndex]);   \
428  Exponent_pt e2 = &(p2->exp[pVarHighIndex]);   \
429  const Exponent_pt ub = e1 - pVariables;       \
430                                                \
431  for (;;)                                      \
432  {                                             \
433    d = *e1 - *e2;                              \
434    if (d) actionD;                             \
435    e1--;                                       \
436    if (e1 == ub)                               \
437    {                                           \
438      d = pGetComp(p1) - pGetComp(p2);          \
439      if (d) actionD;                           \
440      actionE;                                  \
441    }                                           \
442    e2--;                                       \
443  }                                             \
444}                                               \
445while(0)
446
447#define _pMonCmp_c(p1, p2, d, actionD, actionE) \
448do                                              \
449{                                               \
450  Exponent_pt e1 = &(p1->exp[pVarHighIndex]);   \
451  Exponent_pt e2 = &(p2->exp[pVarHighIndex]);   \
452  const Exponent_pt ub = e1 - pVariables;       \
453                                                \
454  for (;;)                                      \
455  {                                             \
456    d = *e1 - *e2;                              \
457    if (d) actionD;                             \
458    e1--;                                       \
459    if (e1 == ub)                               \
460    {                                           \
461      d = pGetComp(p2) - pGetComp(p1);          \
462      if (d) actionD;                           \
463      actionE;                                  \
464    }                                           \
465    e2--;                                       \
466  }                                             \
467}                                               \
468while(0)
469
470#define _pMonCmp_1(p1, p2, d, actionD, actionE)  \
471  _pMonCmp(p1, p2, d, actionD, actionE)
472
473#define _pMonCmp_1_c(p1, p2, d, actionD, actionE)  \
474  _pMonCmp_c(p1, p2, d, actionD, actionE)
475 
476#define _pMonCmp_2(p1, p2, d, actionD, actionE)  \
477  _pMonCmp(p1, p2, d, actionD, actionE)
478
479#define _pMonCmp_2_c(p1, p2, d, actionD, actionE)  \
480  _pMonCmp_c(p1, p2, d, actionD, actionE)
481 
482#define _pMonCmp_2i(p1, p2, length, d, actionD, actionE) \
483  _pMonCmp(p1, p2, d, actionD, actionE)
484
485#define _pMonCmp_2i_1(p1, p2, length, d, actionD, actionE) \
486  _pMonCmp(p1, p2, d, actionD, actionE)
487
488#define _pMonCmp_2i_c(p1, p2, length, d, actionD, actionE)   \
489  _pMonCmp_c(p1, p2, d, actionD, actionE)
490
491#define _pMonCmp_2i_1_c(p1, p2, length, d, actionD, actionE) \
492  _pMonCmp_c(p1, p2, d, actionD, actionE)
493 
494#endif // COMP_NO_EXP_VECTOR_OPS
495 
496#endif // WORDS_BIGENDIAN
497
498#endif // COMP_FAST
499
500#endif // POLYS_COMP_H
501
Note: See TracBrowser for help on using the repository browser.