source: git/ntl/include/NTL/mach_desc.h @ 198a339

spielwiese
Last change on this file since 198a339 was 198a339, checked in by Martin Monerjan, 15 years ago
*** empty log message *** git-svn-id: file:///usr/local/Singular/svn/trunk@11363 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 17.0 KB
Line 
1#ifndef NTL_mach_desc__H
2#define NTL_mach_desc__H
3
4
5#define NTL_BITS_PER_LONG (32)
6#define NTL_MAX_LONG (2147483647L)
7#define NTL_MAX_INT (2147483647)
8#define NTL_BITS_PER_INT (32)
9#define NTL_BITS_PER_SIZE_T (32)
10#define NTL_ARITH_RIGHT_SHIFT (1)
11#define NTL_NBITS_MAX (30)
12#define NTL_DOUBLE_PRECISION (53)
13#define NTL_FDOUBLE_PRECISION (((double)(1L<<30))*((double)(1L<<22)))
14#define NTL_QUAD_FLOAT_SPLIT ((((double)(1L<<27)))+1.0)
15#define NTL_EXT_DOUBLE (1)
16#define NTL_SINGLE_MUL_OK (1)
17#define NTL_DOUBLES_LOW_HIGH (1)
18
19
20
21
22#define NTL_BB_MUL_CODE0 \
23   _ntl_ulong hi, lo, t;\
24   _ntl_ulong A[8];\
25   A[0] = 0;\
26   A[1] = a;\
27   A[2] = A[1] << 1;\
28   A[3] = A[2] ^ A[1];\
29   A[4] = A[2] << 1;\
30   A[5] = A[4] ^ A[1];\
31   A[6] = A[3] << 1;\
32   A[7] = A[6] ^ A[1];\
33   lo = A[b & 7]; t = A[(b >> 3) & 7]; hi = t >> 29; lo ^= t << 3;\
34   t = A[(b >> 6) & 7]; hi ^= t >> 26; lo ^= t << 6;\
35   t = A[(b >> 9) & 7]; hi ^= t >> 23; lo ^= t << 9;\
36   t = A[(b >> 12) & 7]; hi ^= t >> 20; lo ^= t << 12;\
37   t = A[(b >> 15) & 7]; hi ^= t >> 17; lo ^= t << 15;\
38   t = A[(b >> 18) & 7]; hi ^= t >> 14; lo ^= t << 18;\
39   t = A[(b >> 21) & 7]; hi ^= t >> 11; lo ^= t << 21;\
40   t = A[(b >> 24) & 7]; hi ^= t >> 8; lo ^= t << 24;\
41   t = A[(b >> 27) & 7]; hi ^= t >> 5; lo ^= t << 27;\
42   t = A[b >> 30]; hi ^= t >> 2; lo ^= t << 30;\
43   if (a >> 31) hi ^= ((b & 0xb6db6db6UL) >> 1);\
44   if ((a >> 30) & 1) hi ^= ((b & 0x24924924UL) >> 2);\
45   c[0] = lo;    c[1] = hi;\
46
47
48
49
50
51#define NTL_BB_MUL_CODE1 \
52   long i;\
53   _ntl_ulong carry = 0, b;\
54   _ntl_ulong hi, lo, t;\
55   _ntl_ulong A[16];\
56   A[0] = 0;\
57   A[1] = a;\
58   A[2] = A[1] << 1;\
59   A[3] = A[2] ^ A[1];\
60   A[4] = A[2] << 1;\
61   A[5] = A[4] ^ A[1];\
62   A[6] = A[3] << 1;\
63   A[7] = A[6] ^ A[1];\
64   A[8] = A[4] << 1;\
65   A[9] = A[8] ^ A[1];\
66   A[10] = A[5] << 1;\
67   A[11] = A[10] ^ A[1];\
68   A[12] = A[6] << 1;\
69   A[13] = A[12] ^ A[1];\
70   A[14] = A[7] << 1;\
71   A[15] = A[14] ^ A[1];\
72   for (i = 0; i < sb; i++) {\
73      b = bp[i];\
74      lo = A[b & 15]; t = A[(b >> 4) & 15]; hi = t >> 28; lo ^= t << 4;\
75      t = A[(b >> 8) & 15]; hi ^= t >> 24; lo ^= t << 8;\
76      t = A[(b >> 12) & 15]; hi ^= t >> 20; lo ^= t << 12;\
77      t = A[(b >> 16) & 15]; hi ^= t >> 16; lo ^= t << 16;\
78      t = A[(b >> 20) & 15]; hi ^= t >> 12; lo ^= t << 20;\
79      t = A[(b >> 24) & 15]; hi ^= t >> 8; lo ^= t << 24;\
80      t = A[b >> 28]; hi ^= t >> 4; lo ^= t << 28;\
81      if (a >> 31) hi ^= ((b & 0xeeeeeeeeUL) >> 1);\
82      if ((a >> 30) & 1) hi ^= ((b & 0xccccccccUL) >> 2);\
83      if ((a >> 29) & 1) hi ^= ((b & 0x88888888UL) >> 3);\
84      cp[i] = carry ^ lo;    carry = hi;\
85   }\
86   cp[sb] = carry;\
87
88
89
90
91
92#define NTL_BB_MUL_CODE2 \
93   long i;\
94   _ntl_ulong carry = 0, b;\
95   _ntl_ulong hi, lo, t;\
96   _ntl_ulong A[16];\
97   A[0] = 0;\
98   A[1] = a;\
99   A[2] = A[1] << 1;\
100   A[3] = A[2] ^ A[1];\
101   A[4] = A[2] << 1;\
102   A[5] = A[4] ^ A[1];\
103   A[6] = A[3] << 1;\
104   A[7] = A[6] ^ A[1];\
105   A[8] = A[4] << 1;\
106   A[9] = A[8] ^ A[1];\
107   A[10] = A[5] << 1;\
108   A[11] = A[10] ^ A[1];\
109   A[12] = A[6] << 1;\
110   A[13] = A[12] ^ A[1];\
111   A[14] = A[7] << 1;\
112   A[15] = A[14] ^ A[1];\
113   for (i = 0; i < sb; i++) {\
114      b = bp[i];\
115      lo = A[b & 15]; t = A[(b >> 4) & 15]; hi = t >> 28; lo ^= t << 4;\
116      t = A[(b >> 8) & 15]; hi ^= t >> 24; lo ^= t << 8;\
117      t = A[(b >> 12) & 15]; hi ^= t >> 20; lo ^= t << 12;\
118      t = A[(b >> 16) & 15]; hi ^= t >> 16; lo ^= t << 16;\
119      t = A[(b >> 20) & 15]; hi ^= t >> 12; lo ^= t << 20;\
120      t = A[(b >> 24) & 15]; hi ^= t >> 8; lo ^= t << 24;\
121      t = A[b >> 28]; hi ^= t >> 4; lo ^= t << 28;\
122      if (a >> 31) hi ^= ((b & 0xeeeeeeeeUL) >> 1);\
123      if ((a >> 30) & 1) hi ^= ((b & 0xccccccccUL) >> 2);\
124      if ((a >> 29) & 1) hi ^= ((b & 0x88888888UL) >> 3);\
125      cp[i] ^= (carry ^ lo);    carry = hi;\
126   }\
127   cp[sb] ^= carry;\
128
129
130
131
132
133#define NTL_SHORT_BB_MUL_CODE1 \
134   long i;\
135   _ntl_ulong carry = 0, b;\
136   _ntl_ulong hi, lo, t;\
137   _ntl_ulong A[16];\
138   A[0] = 0;\
139   A[1] = a;\
140   A[2] = A[1] << 1;\
141   A[3] = A[2] ^ A[1];\
142   A[4] = A[2] << 1;\
143   A[5] = A[4] ^ A[1];\
144   A[6] = A[3] << 1;\
145   A[7] = A[6] ^ A[1];\
146   A[8] = A[4] << 1;\
147   A[9] = A[8] ^ A[1];\
148   A[10] = A[5] << 1;\
149   A[11] = A[10] ^ A[1];\
150   A[12] = A[6] << 1;\
151   A[13] = A[12] ^ A[1];\
152   A[14] = A[7] << 1;\
153   A[15] = A[14] ^ A[1];\
154   for (i = 0; i < sb; i++) {\
155      b = bp[i];\
156      lo = A[b & 15]; t = A[(b >> 4) & 15]; hi = t >> 28; lo ^= t << 4;\
157      t = A[(b >> 8) & 15]; hi ^= t >> 24; lo ^= t << 8;\
158      t = A[(b >> 12) & 15]; hi ^= t >> 20; lo ^= t << 12;\
159      t = A[(b >> 16) & 15]; hi ^= t >> 16; lo ^= t << 16;\
160      t = A[(b >> 20) & 15]; hi ^= t >> 12; lo ^= t << 20;\
161      t = A[(b >> 24) & 15]; hi ^= t >> 8; lo ^= t << 24;\
162      t = A[b >> 28]; hi ^= t >> 4; lo ^= t << 28;\
163      cp[i] = carry ^ lo;    carry = hi;\
164   }\
165   cp[sb] = carry;\
166
167
168
169
170
171#define NTL_HALF_BB_MUL_CODE0 \
172   _ntl_ulong hi, lo, t;\
173   _ntl_ulong A[4];\
174   A[0] = 0;\
175   A[1] = a;\
176   A[2] = A[1] << 1;\
177   A[3] = A[2] ^ A[1];\
178   lo = A[b & 3]; t = A[(b >> 2) & 3]; hi = t >> 30; lo ^= t << 2;\
179   t = A[(b >> 4) & 3]; hi ^= t >> 28; lo ^= t << 4;\
180   t = A[(b >> 6) & 3]; hi ^= t >> 26; lo ^= t << 6;\
181   t = A[(b >> 8) & 3]; hi ^= t >> 24; lo ^= t << 8;\
182   t = A[(b >> 10) & 3]; hi ^= t >> 22; lo ^= t << 10;\
183   t = A[(b >> 12) & 3]; hi ^= t >> 20; lo ^= t << 12;\
184   t = A[b >> 14]; hi ^= t >> 18; lo ^= t << 14;\
185   if (a >> 31) hi ^= ((b & 0xaaaaUL) >> 1);\
186   c[0] = lo;    c[1] = hi;\
187
188
189
190
191
192#define NTL_ALT_BB_MUL_CODE0 \
193   _ntl_ulong A[8];\
194   A[0] = 0;\
195   A[1] = a;\
196   A[2] = A[1] << 1;\
197   A[3] = A[2] ^ A[1];\
198   A[4] = A[2] << 1;\
199   A[5] = A[4] ^ A[1];\
200   A[6] = A[3] << 1;\
201   A[7] = A[6] ^ A[1];\
202   const _ntl_ulong t3 = A[(b >> 3) & 7]; \
203   const _ntl_ulong t6 = A[(b >> 6) & 7]; \
204   const _ntl_ulong t9 = A[(b >> 9) & 7]; \
205   const _ntl_ulong t12 = A[(b >> 12) & 7]; \
206   const _ntl_ulong t15 = A[(b >> 15) & 7]; \
207   const _ntl_ulong t18 = A[(b >> 18) & 7]; \
208   const _ntl_ulong t21 = A[(b >> 21) & 7]; \
209   const _ntl_ulong t24 = A[(b >> 24) & 7]; \
210   const _ntl_ulong t27 = A[(b >> 27) & 7]; \
211   const _ntl_ulong t30 = A[b >> 30]; \
212   const _ntl_ulong lo = A[b & 7] \
213      ^ (t3 << 3)\
214      ^ (t6 << 6)\
215      ^ (t9 << 9)\
216      ^ (t12 << 12)\
217      ^ (t15 << 15)\
218      ^ (t18 << 18)\
219      ^ (t21 << 21)\
220      ^ (t24 << 24)\
221      ^ (t27 << 27)\
222      ^ (t30 << 30);\
223   const _ntl_ulong hi = (t3 >> 29)\
224      ^ (t6 >> 26)\
225      ^ (t9 >> 23)\
226      ^ (t12 >> 20)\
227      ^ (t15 >> 17)\
228      ^ (t18 >> 14)\
229      ^ (t21 >> 11)\
230      ^ (t24 >> 8)\
231      ^ (t27 >> 5)\
232      ^ (t30 >> 2)\
233      ^ (((b & 0xb6db6db6UL) >> 1) & (-(a >> 31)))\
234      ^ (((b & 0x24924924UL) >> 2) & (-((a >> 30) & 1UL)));\
235   c[0] = lo;    c[1] = hi;\
236
237
238
239
240
241#define NTL_ALT_BB_MUL_CODE1 \
242   long i;\
243   _ntl_ulong carry = 0;\
244   _ntl_ulong A[16];\
245   A[0] = 0;\
246   A[1] = a;\
247   A[2] = A[1] << 1;\
248   A[3] = A[2] ^ A[1];\
249   A[4] = A[2] << 1;\
250   A[5] = A[4] ^ A[1];\
251   A[6] = A[3] << 1;\
252   A[7] = A[6] ^ A[1];\
253   A[8] = A[4] << 1;\
254   A[9] = A[8] ^ A[1];\
255   A[10] = A[5] << 1;\
256   A[11] = A[10] ^ A[1];\
257   A[12] = A[6] << 1;\
258   A[13] = A[12] ^ A[1];\
259   A[14] = A[7] << 1;\
260   A[15] = A[14] ^ A[1];\
261   for (i = 0; i < sb; i++) {\
262      const _ntl_ulong b = bp[i];\
263      const _ntl_ulong t4 = A[(b >> 4) & 15]; \
264      const _ntl_ulong t8 = A[(b >> 8) & 15]; \
265      const _ntl_ulong t12 = A[(b >> 12) & 15]; \
266      const _ntl_ulong t16 = A[(b >> 16) & 15]; \
267      const _ntl_ulong t20 = A[(b >> 20) & 15]; \
268      const _ntl_ulong t24 = A[(b >> 24) & 15]; \
269      const _ntl_ulong t28 = A[b >> 28]; \
270      const _ntl_ulong lo = A[b & 15] \
271         ^ (t4 << 4)\
272         ^ (t8 << 8)\
273         ^ (t12 << 12)\
274         ^ (t16 << 16)\
275         ^ (t20 << 20)\
276         ^ (t24 << 24)\
277         ^ (t28 << 28);\
278      const _ntl_ulong hi = (t4 >> 28)\
279         ^ (t8 >> 24)\
280         ^ (t12 >> 20)\
281         ^ (t16 >> 16)\
282         ^ (t20 >> 12)\
283         ^ (t24 >> 8)\
284         ^ (t28 >> 4)\
285         ^ (((b & 0xeeeeeeeeUL) >> 1) & (-(a >> 31)))\
286         ^ (((b & 0xccccccccUL) >> 2) & (-((a >> 30) & 1UL)))\
287         ^ (((b & 0x88888888UL) >> 3) & (-((a >> 29) & 1UL)));\
288      cp[i] = carry ^ lo;    carry = hi;\
289   }\
290   cp[sb] = carry;\
291
292
293
294
295
296#define NTL_ALT_BB_MUL_CODE2 \
297   long i;\
298   _ntl_ulong carry = 0;\
299   _ntl_ulong A[16];\
300   A[0] = 0;\
301   A[1] = a;\
302   A[2] = A[1] << 1;\
303   A[3] = A[2] ^ A[1];\
304   A[4] = A[2] << 1;\
305   A[5] = A[4] ^ A[1];\
306   A[6] = A[3] << 1;\
307   A[7] = A[6] ^ A[1];\
308   A[8] = A[4] << 1;\
309   A[9] = A[8] ^ A[1];\
310   A[10] = A[5] << 1;\
311   A[11] = A[10] ^ A[1];\
312   A[12] = A[6] << 1;\
313   A[13] = A[12] ^ A[1];\
314   A[14] = A[7] << 1;\
315   A[15] = A[14] ^ A[1];\
316   for (i = 0; i < sb; i++) {\
317      const _ntl_ulong b = bp[i];\
318      const _ntl_ulong t4 = A[(b >> 4) & 15]; \
319      const _ntl_ulong t8 = A[(b >> 8) & 15]; \
320      const _ntl_ulong t12 = A[(b >> 12) & 15]; \
321      const _ntl_ulong t16 = A[(b >> 16) & 15]; \
322      const _ntl_ulong t20 = A[(b >> 20) & 15]; \
323      const _ntl_ulong t24 = A[(b >> 24) & 15]; \
324      const _ntl_ulong t28 = A[b >> 28]; \
325      const _ntl_ulong lo = A[b & 15] \
326         ^ (t4 << 4)\
327         ^ (t8 << 8)\
328         ^ (t12 << 12)\
329         ^ (t16 << 16)\
330         ^ (t20 << 20)\
331         ^ (t24 << 24)\
332         ^ (t28 << 28);\
333      const _ntl_ulong hi = (t4 >> 28)\
334         ^ (t8 >> 24)\
335         ^ (t12 >> 20)\
336         ^ (t16 >> 16)\
337         ^ (t20 >> 12)\
338         ^ (t24 >> 8)\
339         ^ (t28 >> 4)\
340         ^ (((b & 0xeeeeeeeeUL) >> 1) & (-(a >> 31)))\
341         ^ (((b & 0xccccccccUL) >> 2) & (-((a >> 30) & 1UL)))\
342         ^ (((b & 0x88888888UL) >> 3) & (-((a >> 29) & 1UL)));\
343      cp[i] ^= (carry ^ lo);    carry = hi;\
344   }\
345   cp[sb] ^= carry;\
346
347
348
349
350
351#define NTL_ALT_SHORT_BB_MUL_CODE1 \
352   long i;\
353   _ntl_ulong carry = 0;\
354   _ntl_ulong A[16];\
355   A[0] = 0;\
356   A[1] = a;\
357   A[2] = A[1] << 1;\
358   A[3] = A[2] ^ A[1];\
359   A[4] = A[2] << 1;\
360   A[5] = A[4] ^ A[1];\
361   A[6] = A[3] << 1;\
362   A[7] = A[6] ^ A[1];\
363   A[8] = A[4] << 1;\
364   A[9] = A[8] ^ A[1];\
365   A[10] = A[5] << 1;\
366   A[11] = A[10] ^ A[1];\
367   A[12] = A[6] << 1;\
368   A[13] = A[12] ^ A[1];\
369   A[14] = A[7] << 1;\
370   A[15] = A[14] ^ A[1];\
371   for (i = 0; i < sb; i++) {\
372      const _ntl_ulong b = bp[i];\
373      const _ntl_ulong t4 = A[(b >> 4) & 15]; \
374      const _ntl_ulong t8 = A[(b >> 8) & 15]; \
375      const _ntl_ulong t12 = A[(b >> 12) & 15]; \
376      const _ntl_ulong t16 = A[(b >> 16) & 15]; \
377      const _ntl_ulong t20 = A[(b >> 20) & 15]; \
378      const _ntl_ulong t24 = A[(b >> 24) & 15]; \
379      const _ntl_ulong t28 = A[b >> 28]; \
380      const _ntl_ulong lo = A[b & 15] \
381         ^ (t4 << 4)\
382         ^ (t8 << 8)\
383         ^ (t12 << 12)\
384         ^ (t16 << 16)\
385         ^ (t20 << 20)\
386         ^ (t24 << 24)\
387         ^ (t28 << 28);\
388      const _ntl_ulong hi = (t4 >> 28)\
389         ^ (t8 >> 24)\
390         ^ (t12 >> 20)\
391         ^ (t16 >> 16)\
392         ^ (t20 >> 12)\
393         ^ (t24 >> 8)\
394         ^ (t28 >> 4);\
395      cp[i] = carry ^ lo;    carry = hi;\
396   }\
397   cp[sb] = carry;\
398
399
400
401
402
403#define NTL_ALT_HALF_BB_MUL_CODE0 \
404   _ntl_ulong A[4];\
405   A[0] = 0;\
406   A[1] = a;\
407   A[2] = A[1] << 1;\
408   A[3] = A[2] ^ A[1];\
409   const _ntl_ulong t2 = A[(b >> 2) & 3]; \
410   const _ntl_ulong t4 = A[(b >> 4) & 3]; \
411   const _ntl_ulong t6 = A[(b >> 6) & 3]; \
412   const _ntl_ulong t8 = A[(b >> 8) & 3]; \
413   const _ntl_ulong t10 = A[(b >> 10) & 3]; \
414   const _ntl_ulong t12 = A[(b >> 12) & 3]; \
415   const _ntl_ulong t14 = A[b >> 14]; \
416   const _ntl_ulong lo = A[b & 3] \
417      ^ (t2 << 2)\
418      ^ (t4 << 4)\
419      ^ (t6 << 6)\
420      ^ (t8 << 8)\
421      ^ (t10 << 10)\
422      ^ (t12 << 12)\
423      ^ (t14 << 14);\
424   const _ntl_ulong hi = (t2 >> 30)\
425      ^ (t4 >> 28)\
426      ^ (t6 >> 26)\
427      ^ (t8 >> 24)\
428      ^ (t10 >> 22)\
429      ^ (t12 >> 20)\
430      ^ (t14 >> 18)\
431      ^ (((b & 0xaaaaUL) >> 1) & (-(a >> 31)));\
432   c[0] = lo;    c[1] = hi;\
433
434
435
436
437
438#define NTL_ALT1_BB_MUL_CODE0 \
439   _ntl_ulong hi, lo, t;\
440   _ntl_ulong A[8];\
441   A[0] = 0;\
442   A[1] = a;\
443   A[2] = A[1] << 1;\
444   A[3] = A[2] ^ A[1];\
445   A[4] = A[2] << 1;\
446   A[5] = A[4] ^ A[1];\
447   A[6] = A[3] << 1;\
448   A[7] = A[6] ^ A[1];\
449   lo = A[b & 7]; t = A[(b >> 3) & 7]; hi = t >> 29; lo ^= t << 3;\
450   t = A[(b >> 6) & 7]; hi ^= t >> 26; lo ^= t << 6;\
451   t = A[(b >> 9) & 7]; hi ^= t >> 23; lo ^= t << 9;\
452   t = A[(b >> 12) & 7]; hi ^= t >> 20; lo ^= t << 12;\
453   t = A[(b >> 15) & 7]; hi ^= t >> 17; lo ^= t << 15;\
454   t = A[(b >> 18) & 7]; hi ^= t >> 14; lo ^= t << 18;\
455   t = A[(b >> 21) & 7]; hi ^= t >> 11; lo ^= t << 21;\
456   t = A[(b >> 24) & 7]; hi ^= t >> 8; lo ^= t << 24;\
457   t = A[(b >> 27) & 7]; hi ^= t >> 5; lo ^= t << 27;\
458   t = A[b >> 30]; hi ^= t >> 2; lo ^= t << 30;\
459   hi ^= (((b & 0xb6db6db6UL) >> 1) & (-(a >> 31)))\
460      ^ (((b & 0x24924924UL) >> 2) & (-((a >> 30) & 1UL)));\
461   c[0] = lo;    c[1] = hi;\
462
463
464
465
466
467#define NTL_ALT1_BB_MUL_CODE1 \
468   long i;\
469   _ntl_ulong carry = 0, b;\
470   _ntl_ulong hi, lo, t;\
471   _ntl_ulong A[16];\
472   A[0] = 0;\
473   A[1] = a;\
474   A[2] = A[1] << 1;\
475   A[3] = A[2] ^ A[1];\
476   A[4] = A[2] << 1;\
477   A[5] = A[4] ^ A[1];\
478   A[6] = A[3] << 1;\
479   A[7] = A[6] ^ A[1];\
480   A[8] = A[4] << 1;\
481   A[9] = A[8] ^ A[1];\
482   A[10] = A[5] << 1;\
483   A[11] = A[10] ^ A[1];\
484   A[12] = A[6] << 1;\
485   A[13] = A[12] ^ A[1];\
486   A[14] = A[7] << 1;\
487   A[15] = A[14] ^ A[1];\
488   for (i = 0; i < sb; i++) {\
489      b = bp[i];\
490      lo = A[b & 15]; t = A[(b >> 4) & 15]; hi = t >> 28; lo ^= t << 4;\
491      t = A[(b >> 8) & 15]; hi ^= t >> 24; lo ^= t << 8;\
492      t = A[(b >> 12) & 15]; hi ^= t >> 20; lo ^= t << 12;\
493      t = A[(b >> 16) & 15]; hi ^= t >> 16; lo ^= t << 16;\
494      t = A[(b >> 20) & 15]; hi ^= t >> 12; lo ^= t << 20;\
495      t = A[(b >> 24) & 15]; hi ^= t >> 8; lo ^= t << 24;\
496      t = A[b >> 28]; hi ^= t >> 4; lo ^= t << 28;\
497      hi ^= (((b & 0xeeeeeeeeUL) >> 1) & (-(a >> 31)))\
498         ^ (((b & 0xccccccccUL) >> 2) & (-((a >> 30) & 1UL)))\
499         ^ (((b & 0x88888888UL) >> 3) & (-((a >> 29) & 1UL)));\
500      cp[i] = carry ^ lo;    carry = hi;\
501   }\
502   cp[sb] = carry;\
503
504
505
506
507
508#define NTL_ALT1_BB_MUL_CODE2 \
509   long i;\
510   _ntl_ulong carry = 0, b;\
511   _ntl_ulong hi, lo, t;\
512   _ntl_ulong A[16];\
513   A[0] = 0;\
514   A[1] = a;\
515   A[2] = A[1] << 1;\
516   A[3] = A[2] ^ A[1];\
517   A[4] = A[2] << 1;\
518   A[5] = A[4] ^ A[1];\
519   A[6] = A[3] << 1;\
520   A[7] = A[6] ^ A[1];\
521   A[8] = A[4] << 1;\
522   A[9] = A[8] ^ A[1];\
523   A[10] = A[5] << 1;\
524   A[11] = A[10] ^ A[1];\
525   A[12] = A[6] << 1;\
526   A[13] = A[12] ^ A[1];\
527   A[14] = A[7] << 1;\
528   A[15] = A[14] ^ A[1];\
529   for (i = 0; i < sb; i++) {\
530      b = bp[i];\
531      lo = A[b & 15]; t = A[(b >> 4) & 15]; hi = t >> 28; lo ^= t << 4;\
532      t = A[(b >> 8) & 15]; hi ^= t >> 24; lo ^= t << 8;\
533      t = A[(b >> 12) & 15]; hi ^= t >> 20; lo ^= t << 12;\
534      t = A[(b >> 16) & 15]; hi ^= t >> 16; lo ^= t << 16;\
535      t = A[(b >> 20) & 15]; hi ^= t >> 12; lo ^= t << 20;\
536      t = A[(b >> 24) & 15]; hi ^= t >> 8; lo ^= t << 24;\
537      t = A[b >> 28]; hi ^= t >> 4; lo ^= t << 28;\
538      hi ^= (((b & 0xeeeeeeeeUL) >> 1) & (-(a >> 31)))\
539         ^ (((b & 0xccccccccUL) >> 2) & (-((a >> 30) & 1UL)))\
540         ^ (((b & 0x88888888UL) >> 3) & (-((a >> 29) & 1UL)));\
541      cp[i] ^= (carry ^ lo);    carry = hi;\
542   }\
543   cp[sb] ^= carry;\
544
545
546
547
548
549#define NTL_ALT1_SHORT_BB_MUL_CODE1 \
550   long i;\
551   _ntl_ulong carry = 0, b;\
552   _ntl_ulong hi, lo, t;\
553   _ntl_ulong A[16];\
554   A[0] = 0;\
555   A[1] = a;\
556   A[2] = A[1] << 1;\
557   A[3] = A[2] ^ A[1];\
558   A[4] = A[2] << 1;\
559   A[5] = A[4] ^ A[1];\
560   A[6] = A[3] << 1;\
561   A[7] = A[6] ^ A[1];\
562   A[8] = A[4] << 1;\
563   A[9] = A[8] ^ A[1];\
564   A[10] = A[5] << 1;\
565   A[11] = A[10] ^ A[1];\
566   A[12] = A[6] << 1;\
567   A[13] = A[12] ^ A[1];\
568   A[14] = A[7] << 1;\
569   A[15] = A[14] ^ A[1];\
570   for (i = 0; i < sb; i++) {\
571      b = bp[i];\
572      lo = A[b & 15]; t = A[(b >> 4) & 15]; hi = t >> 28; lo ^= t << 4;\
573      t = A[(b >> 8) & 15]; hi ^= t >> 24; lo ^= t << 8;\
574      t = A[(b >> 12) & 15]; hi ^= t >> 20; lo ^= t << 12;\
575      t = A[(b >> 16) & 15]; hi ^= t >> 16; lo ^= t << 16;\
576      t = A[(b >> 20) & 15]; hi ^= t >> 12; lo ^= t << 20;\
577      t = A[(b >> 24) & 15]; hi ^= t >> 8; lo ^= t << 24;\
578      t = A[b >> 28]; hi ^= t >> 4; lo ^= t << 28;\
579      cp[i] = carry ^ lo;    carry = hi;\
580   }\
581   cp[sb] = carry;\
582
583
584
585
586
587#define NTL_ALT1_HALF_BB_MUL_CODE0 \
588   _ntl_ulong hi, lo, t;\
589   _ntl_ulong A[4];\
590   A[0] = 0;\
591   A[1] = a;\
592   A[2] = A[1] << 1;\
593   A[3] = A[2] ^ A[1];\
594   lo = A[b & 3]; t = A[(b >> 2) & 3]; hi = t >> 30; lo ^= t << 2;\
595   t = A[(b >> 4) & 3]; hi ^= t >> 28; lo ^= t << 4;\
596   t = A[(b >> 6) & 3]; hi ^= t >> 26; lo ^= t << 6;\
597   t = A[(b >> 8) & 3]; hi ^= t >> 24; lo ^= t << 8;\
598   t = A[(b >> 10) & 3]; hi ^= t >> 22; lo ^= t << 10;\
599   t = A[(b >> 12) & 3]; hi ^= t >> 20; lo ^= t << 12;\
600   t = A[b >> 14]; hi ^= t >> 18; lo ^= t << 14;\
601   hi ^= (((b & 0xaaaaUL) >> 1) & (-(a >> 31)));\
602   c[0] = lo;    c[1] = hi;\
603
604
605
606#define NTL_BB_MUL1_BITS (4)
607
608
609
610#define NTL_BB_SQR_CODE \
611lo=sqrtab[a&255];\
612lo=lo|(sqrtab[(a>>8)&255]<<16);\
613hi=sqrtab[(a>>16)&255];\
614hi=hi|(sqrtab[(a>>24)&255]<<16);\
615
616
617
618
619#define NTL_BB_REV_CODE (revtab[(a>>0)&255]<<24)\
620|(revtab[(a>>8)&255]<<16)\
621|(revtab[(a>>16)&255]<<8)\
622|(revtab[(a>>24)&255]<<0)
623
624#define NTL_MIN_LONG (-NTL_MAX_LONG - 1L)
625#define NTL_MIN_INT  (-NTL_MAX_INT - 1)
626#endif
627
Note: See TracBrowser for help on using the repository browser.