source: git/ntl/include/NTL/mach_desc.h @ 797ff9

spielwiese
Last change on this file since 797ff9 was 797ff9, checked in by Christian Eder, 16 years ago
implementation of f5 git-svn-id: file:///usr/local/Singular/svn/trunk@10942 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 25.9 KB
Line 
1#ifndef NTL_mach_desc__H
2#define NTL_mach_desc__H
3
4
5#define NTL_BITS_PER_LONG (64)
6#define NTL_MAX_LONG (9223372036854775807L)
7#define NTL_MAX_INT (2147483647)
8#define NTL_BITS_PER_INT (32)
9#define NTL_BITS_PER_SIZE_T (64)
10#define NTL_ARITH_RIGHT_SHIFT (1)
11#define NTL_NBITS_MAX (50)
12#define NTL_DOUBLE_PRECISION (53)
13#define NTL_FDOUBLE_PRECISION (((double)(1L<<52)))
14#define NTL_QUAD_FLOAT_SPLIT ((((double)(1L<<27)))+1.0)
15#define NTL_EXT_DOUBLE (0)
16#define NTL_SINGLE_MUL_OK (0)
17#define NTL_DOUBLES_LOW_HIGH (0)
18
19
20
21
22#define NTL_BB_MUL_CODE0 \
23   _ntl_ulong hi, lo, t;\
24   _ntl_ulong A[16];\
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   A[8] = A[4] << 1;\
34   A[9] = A[8] ^ A[1];\
35   A[10] = A[5] << 1;\
36   A[11] = A[10] ^ A[1];\
37   A[12] = A[6] << 1;\
38   A[13] = A[12] ^ A[1];\
39   A[14] = A[7] << 1;\
40   A[15] = A[14] ^ A[1];\
41   lo = A[b & 15]; t = A[(b >> 4) & 15]; hi = t >> 60; lo ^= t << 4;\
42   t = A[(b >> 8) & 15]; hi ^= t >> 56; lo ^= t << 8;\
43   t = A[(b >> 12) & 15]; hi ^= t >> 52; lo ^= t << 12;\
44   t = A[(b >> 16) & 15]; hi ^= t >> 48; lo ^= t << 16;\
45   t = A[(b >> 20) & 15]; hi ^= t >> 44; lo ^= t << 20;\
46   t = A[(b >> 24) & 15]; hi ^= t >> 40; lo ^= t << 24;\
47   t = A[(b >> 28) & 15]; hi ^= t >> 36; lo ^= t << 28;\
48   t = A[(b >> 32) & 15]; hi ^= t >> 32; lo ^= t << 32;\
49   t = A[(b >> 36) & 15]; hi ^= t >> 28; lo ^= t << 36;\
50   t = A[(b >> 40) & 15]; hi ^= t >> 24; lo ^= t << 40;\
51   t = A[(b >> 44) & 15]; hi ^= t >> 20; lo ^= t << 44;\
52   t = A[(b >> 48) & 15]; hi ^= t >> 16; lo ^= t << 48;\
53   t = A[(b >> 52) & 15]; hi ^= t >> 12; lo ^= t << 52;\
54   t = A[(b >> 56) & 15]; hi ^= t >> 8; lo ^= t << 56;\
55   t = A[b >> 60]; hi ^= t >> 4; lo ^= t << 60;\
56   if (a >> 63) hi ^= ((b & 0xeeeeeeeeeeeeeeeeUL) >> 1);\
57   if ((a >> 62) & 1) hi ^= ((b & 0xccccccccccccccccUL) >> 2);\
58   if ((a >> 61) & 1) hi ^= ((b & 0x8888888888888888UL) >> 3);\
59   c[0] = lo;    c[1] = hi;\
60
61
62
63
64
65#define NTL_BB_MUL_CODE1 \
66   long i;\
67   _ntl_ulong carry = 0, b;\
68   _ntl_ulong hi, lo, t;\
69   _ntl_ulong A[16];\
70   A[0] = 0;\
71   A[1] = a;\
72   A[2] = A[1] << 1;\
73   A[3] = A[2] ^ A[1];\
74   A[4] = A[2] << 1;\
75   A[5] = A[4] ^ A[1];\
76   A[6] = A[3] << 1;\
77   A[7] = A[6] ^ A[1];\
78   A[8] = A[4] << 1;\
79   A[9] = A[8] ^ A[1];\
80   A[10] = A[5] << 1;\
81   A[11] = A[10] ^ A[1];\
82   A[12] = A[6] << 1;\
83   A[13] = A[12] ^ A[1];\
84   A[14] = A[7] << 1;\
85   A[15] = A[14] ^ A[1];\
86   for (i = 0; i < sb; i++) {\
87      b = bp[i];\
88      lo = A[b & 15]; t = A[(b >> 4) & 15]; hi = t >> 60; lo ^= t << 4;\
89      t = A[(b >> 8) & 15]; hi ^= t >> 56; lo ^= t << 8;\
90      t = A[(b >> 12) & 15]; hi ^= t >> 52; lo ^= t << 12;\
91      t = A[(b >> 16) & 15]; hi ^= t >> 48; lo ^= t << 16;\
92      t = A[(b >> 20) & 15]; hi ^= t >> 44; lo ^= t << 20;\
93      t = A[(b >> 24) & 15]; hi ^= t >> 40; lo ^= t << 24;\
94      t = A[(b >> 28) & 15]; hi ^= t >> 36; lo ^= t << 28;\
95      t = A[(b >> 32) & 15]; hi ^= t >> 32; lo ^= t << 32;\
96      t = A[(b >> 36) & 15]; hi ^= t >> 28; lo ^= t << 36;\
97      t = A[(b >> 40) & 15]; hi ^= t >> 24; lo ^= t << 40;\
98      t = A[(b >> 44) & 15]; hi ^= t >> 20; lo ^= t << 44;\
99      t = A[(b >> 48) & 15]; hi ^= t >> 16; lo ^= t << 48;\
100      t = A[(b >> 52) & 15]; hi ^= t >> 12; lo ^= t << 52;\
101      t = A[(b >> 56) & 15]; hi ^= t >> 8; lo ^= t << 56;\
102      t = A[b >> 60]; hi ^= t >> 4; lo ^= t << 60;\
103      if (a >> 63) hi ^= ((b & 0xeeeeeeeeeeeeeeeeUL) >> 1);\
104      if ((a >> 62) & 1) hi ^= ((b & 0xccccccccccccccccUL) >> 2);\
105      if ((a >> 61) & 1) hi ^= ((b & 0x8888888888888888UL) >> 3);\
106      cp[i] = carry ^ lo;    carry = hi;\
107   }\
108   cp[sb] = carry;\
109
110
111
112
113
114#define NTL_BB_MUL_CODE2 \
115   long i;\
116   _ntl_ulong carry = 0, b;\
117   _ntl_ulong hi, lo, t;\
118   _ntl_ulong A[16];\
119   A[0] = 0;\
120   A[1] = a;\
121   A[2] = A[1] << 1;\
122   A[3] = A[2] ^ A[1];\
123   A[4] = A[2] << 1;\
124   A[5] = A[4] ^ A[1];\
125   A[6] = A[3] << 1;\
126   A[7] = A[6] ^ A[1];\
127   A[8] = A[4] << 1;\
128   A[9] = A[8] ^ A[1];\
129   A[10] = A[5] << 1;\
130   A[11] = A[10] ^ A[1];\
131   A[12] = A[6] << 1;\
132   A[13] = A[12] ^ A[1];\
133   A[14] = A[7] << 1;\
134   A[15] = A[14] ^ A[1];\
135   for (i = 0; i < sb; i++) {\
136      b = bp[i];\
137      lo = A[b & 15]; t = A[(b >> 4) & 15]; hi = t >> 60; lo ^= t << 4;\
138      t = A[(b >> 8) & 15]; hi ^= t >> 56; lo ^= t << 8;\
139      t = A[(b >> 12) & 15]; hi ^= t >> 52; lo ^= t << 12;\
140      t = A[(b >> 16) & 15]; hi ^= t >> 48; lo ^= t << 16;\
141      t = A[(b >> 20) & 15]; hi ^= t >> 44; lo ^= t << 20;\
142      t = A[(b >> 24) & 15]; hi ^= t >> 40; lo ^= t << 24;\
143      t = A[(b >> 28) & 15]; hi ^= t >> 36; lo ^= t << 28;\
144      t = A[(b >> 32) & 15]; hi ^= t >> 32; lo ^= t << 32;\
145      t = A[(b >> 36) & 15]; hi ^= t >> 28; lo ^= t << 36;\
146      t = A[(b >> 40) & 15]; hi ^= t >> 24; lo ^= t << 40;\
147      t = A[(b >> 44) & 15]; hi ^= t >> 20; lo ^= t << 44;\
148      t = A[(b >> 48) & 15]; hi ^= t >> 16; lo ^= t << 48;\
149      t = A[(b >> 52) & 15]; hi ^= t >> 12; lo ^= t << 52;\
150      t = A[(b >> 56) & 15]; hi ^= t >> 8; lo ^= t << 56;\
151      t = A[b >> 60]; hi ^= t >> 4; lo ^= t << 60;\
152      if (a >> 63) hi ^= ((b & 0xeeeeeeeeeeeeeeeeUL) >> 1);\
153      if ((a >> 62) & 1) hi ^= ((b & 0xccccccccccccccccUL) >> 2);\
154      if ((a >> 61) & 1) hi ^= ((b & 0x8888888888888888UL) >> 3);\
155      cp[i] ^= (carry ^ lo);    carry = hi;\
156   }\
157   cp[sb] ^= carry;\
158
159
160
161
162
163#define NTL_SHORT_BB_MUL_CODE1 \
164   long i;\
165   _ntl_ulong carry = 0, b;\
166   _ntl_ulong hi, lo, t;\
167   _ntl_ulong A[16];\
168   A[0] = 0;\
169   A[1] = a;\
170   A[2] = A[1] << 1;\
171   A[3] = A[2] ^ A[1];\
172   A[4] = A[2] << 1;\
173   A[5] = A[4] ^ A[1];\
174   A[6] = A[3] << 1;\
175   A[7] = A[6] ^ A[1];\
176   A[8] = A[4] << 1;\
177   A[9] = A[8] ^ A[1];\
178   A[10] = A[5] << 1;\
179   A[11] = A[10] ^ A[1];\
180   A[12] = A[6] << 1;\
181   A[13] = A[12] ^ A[1];\
182   A[14] = A[7] << 1;\
183   A[15] = A[14] ^ A[1];\
184   for (i = 0; i < sb; i++) {\
185      b = bp[i];\
186      lo = A[b & 15]; t = A[(b >> 4) & 15]; hi = t >> 60; lo ^= t << 4;\
187      t = A[(b >> 8) & 15]; hi ^= t >> 56; lo ^= t << 8;\
188      t = A[(b >> 12) & 15]; hi ^= t >> 52; lo ^= t << 12;\
189      t = A[(b >> 16) & 15]; hi ^= t >> 48; lo ^= t << 16;\
190      t = A[(b >> 20) & 15]; hi ^= t >> 44; lo ^= t << 20;\
191      t = A[(b >> 24) & 15]; hi ^= t >> 40; lo ^= t << 24;\
192      t = A[(b >> 28) & 15]; hi ^= t >> 36; lo ^= t << 28;\
193      t = A[(b >> 32) & 15]; hi ^= t >> 32; lo ^= t << 32;\
194      t = A[(b >> 36) & 15]; hi ^= t >> 28; lo ^= t << 36;\
195      t = A[(b >> 40) & 15]; hi ^= t >> 24; lo ^= t << 40;\
196      t = A[(b >> 44) & 15]; hi ^= t >> 20; lo ^= t << 44;\
197      t = A[(b >> 48) & 15]; hi ^= t >> 16; lo ^= t << 48;\
198      t = A[(b >> 52) & 15]; hi ^= t >> 12; lo ^= t << 52;\
199      t = A[(b >> 56) & 15]; hi ^= t >> 8; lo ^= t << 56;\
200      t = A[b >> 60]; hi ^= t >> 4; lo ^= t << 60;\
201      cp[i] = carry ^ lo;    carry = hi;\
202   }\
203   cp[sb] = carry;\
204
205
206
207
208
209#define NTL_HALF_BB_MUL_CODE0 \
210   _ntl_ulong hi, lo, t;\
211   _ntl_ulong A[4];\
212   A[0] = 0;\
213   A[1] = a;\
214   A[2] = A[1] << 1;\
215   A[3] = A[2] ^ A[1];\
216   lo = A[b & 3]; t = A[(b >> 2) & 3]; hi = t >> 62; lo ^= t << 2;\
217   t = A[(b >> 4) & 3]; hi ^= t >> 60; lo ^= t << 4;\
218   t = A[(b >> 6) & 3]; hi ^= t >> 58; lo ^= t << 6;\
219   t = A[(b >> 8) & 3]; hi ^= t >> 56; lo ^= t << 8;\
220   t = A[(b >> 10) & 3]; hi ^= t >> 54; lo ^= t << 10;\
221   t = A[(b >> 12) & 3]; hi ^= t >> 52; lo ^= t << 12;\
222   t = A[(b >> 14) & 3]; hi ^= t >> 50; lo ^= t << 14;\
223   t = A[(b >> 16) & 3]; hi ^= t >> 48; lo ^= t << 16;\
224   t = A[(b >> 18) & 3]; hi ^= t >> 46; lo ^= t << 18;\
225   t = A[(b >> 20) & 3]; hi ^= t >> 44; lo ^= t << 20;\
226   t = A[(b >> 22) & 3]; hi ^= t >> 42; lo ^= t << 22;\
227   t = A[(b >> 24) & 3]; hi ^= t >> 40; lo ^= t << 24;\
228   t = A[(b >> 26) & 3]; hi ^= t >> 38; lo ^= t << 26;\
229   t = A[(b >> 28) & 3]; hi ^= t >> 36; lo ^= t << 28;\
230   t = A[b >> 30]; hi ^= t >> 34; lo ^= t << 30;\
231   if (a >> 63) hi ^= ((b & 0xaaaaaaaaUL) >> 1);\
232   c[0] = lo;    c[1] = hi;\
233
234
235
236
237
238#define NTL_ALT_BB_MUL_CODE0 \
239   _ntl_ulong A[16];\
240   A[0] = 0;\
241   A[1] = a;\
242   A[2] = A[1] << 1;\
243   A[3] = A[2] ^ A[1];\
244   A[4] = A[2] << 1;\
245   A[5] = A[4] ^ A[1];\
246   A[6] = A[3] << 1;\
247   A[7] = A[6] ^ A[1];\
248   A[8] = A[4] << 1;\
249   A[9] = A[8] ^ A[1];\
250   A[10] = A[5] << 1;\
251   A[11] = A[10] ^ A[1];\
252   A[12] = A[6] << 1;\
253   A[13] = A[12] ^ A[1];\
254   A[14] = A[7] << 1;\
255   A[15] = A[14] ^ A[1];\
256   const _ntl_ulong t4 = A[(b >> 4) & 15]; \
257   const _ntl_ulong t8 = A[(b >> 8) & 15]; \
258   const _ntl_ulong t12 = A[(b >> 12) & 15]; \
259   const _ntl_ulong t16 = A[(b >> 16) & 15]; \
260   const _ntl_ulong t20 = A[(b >> 20) & 15]; \
261   const _ntl_ulong t24 = A[(b >> 24) & 15]; \
262   const _ntl_ulong t28 = A[(b >> 28) & 15]; \
263   const _ntl_ulong t32 = A[(b >> 32) & 15]; \
264   const _ntl_ulong t36 = A[(b >> 36) & 15]; \
265   const _ntl_ulong t40 = A[(b >> 40) & 15]; \
266   const _ntl_ulong t44 = A[(b >> 44) & 15]; \
267   const _ntl_ulong t48 = A[(b >> 48) & 15]; \
268   const _ntl_ulong t52 = A[(b >> 52) & 15]; \
269   const _ntl_ulong t56 = A[(b >> 56) & 15]; \
270   const _ntl_ulong t60 = A[b >> 60]; \
271   const _ntl_ulong lo = A[b & 15] \
272      ^ (t4 << 4)\
273      ^ (t8 << 8)\
274      ^ (t12 << 12)\
275      ^ (t16 << 16)\
276      ^ (t20 << 20)\
277      ^ (t24 << 24)\
278      ^ (t28 << 28)\
279      ^ (t32 << 32)\
280      ^ (t36 << 36)\
281      ^ (t40 << 40)\
282      ^ (t44 << 44)\
283      ^ (t48 << 48)\
284      ^ (t52 << 52)\
285      ^ (t56 << 56)\
286      ^ (t60 << 60);\
287   const _ntl_ulong hi = (t4 >> 60)\
288      ^ (t8 >> 56)\
289      ^ (t12 >> 52)\
290      ^ (t16 >> 48)\
291      ^ (t20 >> 44)\
292      ^ (t24 >> 40)\
293      ^ (t28 >> 36)\
294      ^ (t32 >> 32)\
295      ^ (t36 >> 28)\
296      ^ (t40 >> 24)\
297      ^ (t44 >> 20)\
298      ^ (t48 >> 16)\
299      ^ (t52 >> 12)\
300      ^ (t56 >> 8)\
301      ^ (t60 >> 4)\
302      ^ (((b & 0xeeeeeeeeeeeeeeeeUL) >> 1) & (-(a >> 63)))\
303      ^ (((b & 0xccccccccccccccccUL) >> 2) & (-((a >> 62) & 1UL)))\
304      ^ (((b & 0x8888888888888888UL) >> 3) & (-((a >> 61) & 1UL)));\
305   c[0] = lo;    c[1] = hi;\
306
307
308
309
310
311#define NTL_ALT_BB_MUL_CODE1 \
312   long i;\
313   _ntl_ulong carry = 0;\
314   _ntl_ulong A[16];\
315   A[0] = 0;\
316   A[1] = a;\
317   A[2] = A[1] << 1;\
318   A[3] = A[2] ^ A[1];\
319   A[4] = A[2] << 1;\
320   A[5] = A[4] ^ A[1];\
321   A[6] = A[3] << 1;\
322   A[7] = A[6] ^ A[1];\
323   A[8] = A[4] << 1;\
324   A[9] = A[8] ^ A[1];\
325   A[10] = A[5] << 1;\
326   A[11] = A[10] ^ A[1];\
327   A[12] = A[6] << 1;\
328   A[13] = A[12] ^ A[1];\
329   A[14] = A[7] << 1;\
330   A[15] = A[14] ^ A[1];\
331   for (i = 0; i < sb; i++) {\
332      const _ntl_ulong b = bp[i];\
333      const _ntl_ulong t4 = A[(b >> 4) & 15]; \
334      const _ntl_ulong t8 = A[(b >> 8) & 15]; \
335      const _ntl_ulong t12 = A[(b >> 12) & 15]; \
336      const _ntl_ulong t16 = A[(b >> 16) & 15]; \
337      const _ntl_ulong t20 = A[(b >> 20) & 15]; \
338      const _ntl_ulong t24 = A[(b >> 24) & 15]; \
339      const _ntl_ulong t28 = A[(b >> 28) & 15]; \
340      const _ntl_ulong t32 = A[(b >> 32) & 15]; \
341      const _ntl_ulong t36 = A[(b >> 36) & 15]; \
342      const _ntl_ulong t40 = A[(b >> 40) & 15]; \
343      const _ntl_ulong t44 = A[(b >> 44) & 15]; \
344      const _ntl_ulong t48 = A[(b >> 48) & 15]; \
345      const _ntl_ulong t52 = A[(b >> 52) & 15]; \
346      const _ntl_ulong t56 = A[(b >> 56) & 15]; \
347      const _ntl_ulong t60 = A[b >> 60]; \
348      const _ntl_ulong lo = A[b & 15] \
349         ^ (t4 << 4)\
350         ^ (t8 << 8)\
351         ^ (t12 << 12)\
352         ^ (t16 << 16)\
353         ^ (t20 << 20)\
354         ^ (t24 << 24)\
355         ^ (t28 << 28)\
356         ^ (t32 << 32)\
357         ^ (t36 << 36)\
358         ^ (t40 << 40)\
359         ^ (t44 << 44)\
360         ^ (t48 << 48)\
361         ^ (t52 << 52)\
362         ^ (t56 << 56)\
363         ^ (t60 << 60);\
364      const _ntl_ulong hi = (t4 >> 60)\
365         ^ (t8 >> 56)\
366         ^ (t12 >> 52)\
367         ^ (t16 >> 48)\
368         ^ (t20 >> 44)\
369         ^ (t24 >> 40)\
370         ^ (t28 >> 36)\
371         ^ (t32 >> 32)\
372         ^ (t36 >> 28)\
373         ^ (t40 >> 24)\
374         ^ (t44 >> 20)\
375         ^ (t48 >> 16)\
376         ^ (t52 >> 12)\
377         ^ (t56 >> 8)\
378         ^ (t60 >> 4)\
379         ^ (((b & 0xeeeeeeeeeeeeeeeeUL) >> 1) & (-(a >> 63)))\
380         ^ (((b & 0xccccccccccccccccUL) >> 2) & (-((a >> 62) & 1UL)))\
381         ^ (((b & 0x8888888888888888UL) >> 3) & (-((a >> 61) & 1UL)));\
382      cp[i] = carry ^ lo;    carry = hi;\
383   }\
384   cp[sb] = carry;\
385
386
387
388
389
390#define NTL_ALT_BB_MUL_CODE2 \
391   long i;\
392   _ntl_ulong carry = 0;\
393   _ntl_ulong A[16];\
394   A[0] = 0;\
395   A[1] = a;\
396   A[2] = A[1] << 1;\
397   A[3] = A[2] ^ A[1];\
398   A[4] = A[2] << 1;\
399   A[5] = A[4] ^ A[1];\
400   A[6] = A[3] << 1;\
401   A[7] = A[6] ^ A[1];\
402   A[8] = A[4] << 1;\
403   A[9] = A[8] ^ A[1];\
404   A[10] = A[5] << 1;\
405   A[11] = A[10] ^ A[1];\
406   A[12] = A[6] << 1;\
407   A[13] = A[12] ^ A[1];\
408   A[14] = A[7] << 1;\
409   A[15] = A[14] ^ A[1];\
410   for (i = 0; i < sb; i++) {\
411      const _ntl_ulong b = bp[i];\
412      const _ntl_ulong t4 = A[(b >> 4) & 15]; \
413      const _ntl_ulong t8 = A[(b >> 8) & 15]; \
414      const _ntl_ulong t12 = A[(b >> 12) & 15]; \
415      const _ntl_ulong t16 = A[(b >> 16) & 15]; \
416      const _ntl_ulong t20 = A[(b >> 20) & 15]; \
417      const _ntl_ulong t24 = A[(b >> 24) & 15]; \
418      const _ntl_ulong t28 = A[(b >> 28) & 15]; \
419      const _ntl_ulong t32 = A[(b >> 32) & 15]; \
420      const _ntl_ulong t36 = A[(b >> 36) & 15]; \
421      const _ntl_ulong t40 = A[(b >> 40) & 15]; \
422      const _ntl_ulong t44 = A[(b >> 44) & 15]; \
423      const _ntl_ulong t48 = A[(b >> 48) & 15]; \
424      const _ntl_ulong t52 = A[(b >> 52) & 15]; \
425      const _ntl_ulong t56 = A[(b >> 56) & 15]; \
426      const _ntl_ulong t60 = A[b >> 60]; \
427      const _ntl_ulong lo = A[b & 15] \
428         ^ (t4 << 4)\
429         ^ (t8 << 8)\
430         ^ (t12 << 12)\
431         ^ (t16 << 16)\
432         ^ (t20 << 20)\
433         ^ (t24 << 24)\
434         ^ (t28 << 28)\
435         ^ (t32 << 32)\
436         ^ (t36 << 36)\
437         ^ (t40 << 40)\
438         ^ (t44 << 44)\
439         ^ (t48 << 48)\
440         ^ (t52 << 52)\
441         ^ (t56 << 56)\
442         ^ (t60 << 60);\
443      const _ntl_ulong hi = (t4 >> 60)\
444         ^ (t8 >> 56)\
445         ^ (t12 >> 52)\
446         ^ (t16 >> 48)\
447         ^ (t20 >> 44)\
448         ^ (t24 >> 40)\
449         ^ (t28 >> 36)\
450         ^ (t32 >> 32)\
451         ^ (t36 >> 28)\
452         ^ (t40 >> 24)\
453         ^ (t44 >> 20)\
454         ^ (t48 >> 16)\
455         ^ (t52 >> 12)\
456         ^ (t56 >> 8)\
457         ^ (t60 >> 4)\
458         ^ (((b & 0xeeeeeeeeeeeeeeeeUL) >> 1) & (-(a >> 63)))\
459         ^ (((b & 0xccccccccccccccccUL) >> 2) & (-((a >> 62) & 1UL)))\
460         ^ (((b & 0x8888888888888888UL) >> 3) & (-((a >> 61) & 1UL)));\
461      cp[i] ^= (carry ^ lo);    carry = hi;\
462   }\
463   cp[sb] ^= carry;\
464
465
466
467
468
469#define NTL_ALT_SHORT_BB_MUL_CODE1 \
470   long i;\
471   _ntl_ulong carry = 0;\
472   _ntl_ulong A[16];\
473   A[0] = 0;\
474   A[1] = a;\
475   A[2] = A[1] << 1;\
476   A[3] = A[2] ^ A[1];\
477   A[4] = A[2] << 1;\
478   A[5] = A[4] ^ A[1];\
479   A[6] = A[3] << 1;\
480   A[7] = A[6] ^ A[1];\
481   A[8] = A[4] << 1;\
482   A[9] = A[8] ^ A[1];\
483   A[10] = A[5] << 1;\
484   A[11] = A[10] ^ A[1];\
485   A[12] = A[6] << 1;\
486   A[13] = A[12] ^ A[1];\
487   A[14] = A[7] << 1;\
488   A[15] = A[14] ^ A[1];\
489   for (i = 0; i < sb; i++) {\
490      const _ntl_ulong b = bp[i];\
491      const _ntl_ulong t4 = A[(b >> 4) & 15]; \
492      const _ntl_ulong t8 = A[(b >> 8) & 15]; \
493      const _ntl_ulong t12 = A[(b >> 12) & 15]; \
494      const _ntl_ulong t16 = A[(b >> 16) & 15]; \
495      const _ntl_ulong t20 = A[(b >> 20) & 15]; \
496      const _ntl_ulong t24 = A[(b >> 24) & 15]; \
497      const _ntl_ulong t28 = A[(b >> 28) & 15]; \
498      const _ntl_ulong t32 = A[(b >> 32) & 15]; \
499      const _ntl_ulong t36 = A[(b >> 36) & 15]; \
500      const _ntl_ulong t40 = A[(b >> 40) & 15]; \
501      const _ntl_ulong t44 = A[(b >> 44) & 15]; \
502      const _ntl_ulong t48 = A[(b >> 48) & 15]; \
503      const _ntl_ulong t52 = A[(b >> 52) & 15]; \
504      const _ntl_ulong t56 = A[(b >> 56) & 15]; \
505      const _ntl_ulong t60 = A[b >> 60]; \
506      const _ntl_ulong lo = A[b & 15] \
507         ^ (t4 << 4)\
508         ^ (t8 << 8)\
509         ^ (t12 << 12)\
510         ^ (t16 << 16)\
511         ^ (t20 << 20)\
512         ^ (t24 << 24)\
513         ^ (t28 << 28)\
514         ^ (t32 << 32)\
515         ^ (t36 << 36)\
516         ^ (t40 << 40)\
517         ^ (t44 << 44)\
518         ^ (t48 << 48)\
519         ^ (t52 << 52)\
520         ^ (t56 << 56)\
521         ^ (t60 << 60);\
522      const _ntl_ulong hi = (t4 >> 60)\
523         ^ (t8 >> 56)\
524         ^ (t12 >> 52)\
525         ^ (t16 >> 48)\
526         ^ (t20 >> 44)\
527         ^ (t24 >> 40)\
528         ^ (t28 >> 36)\
529         ^ (t32 >> 32)\
530         ^ (t36 >> 28)\
531         ^ (t40 >> 24)\
532         ^ (t44 >> 20)\
533         ^ (t48 >> 16)\
534         ^ (t52 >> 12)\
535         ^ (t56 >> 8)\
536         ^ (t60 >> 4);\
537      cp[i] = carry ^ lo;    carry = hi;\
538   }\
539   cp[sb] = carry;\
540
541
542
543
544
545#define NTL_ALT_HALF_BB_MUL_CODE0 \
546   _ntl_ulong A[4];\
547   A[0] = 0;\
548   A[1] = a;\
549   A[2] = A[1] << 1;\
550   A[3] = A[2] ^ A[1];\
551   const _ntl_ulong t2 = A[(b >> 2) & 3]; \
552   const _ntl_ulong t4 = A[(b >> 4) & 3]; \
553   const _ntl_ulong t6 = A[(b >> 6) & 3]; \
554   const _ntl_ulong t8 = A[(b >> 8) & 3]; \
555   const _ntl_ulong t10 = A[(b >> 10) & 3]; \
556   const _ntl_ulong t12 = A[(b >> 12) & 3]; \
557   const _ntl_ulong t14 = A[(b >> 14) & 3]; \
558   const _ntl_ulong t16 = A[(b >> 16) & 3]; \
559   const _ntl_ulong t18 = A[(b >> 18) & 3]; \
560   const _ntl_ulong t20 = A[(b >> 20) & 3]; \
561   const _ntl_ulong t22 = A[(b >> 22) & 3]; \
562   const _ntl_ulong t24 = A[(b >> 24) & 3]; \
563   const _ntl_ulong t26 = A[(b >> 26) & 3]; \
564   const _ntl_ulong t28 = A[(b >> 28) & 3]; \
565   const _ntl_ulong t30 = A[b >> 30]; \
566   const _ntl_ulong lo = A[b & 3] \
567      ^ (t2 << 2)\
568      ^ (t4 << 4)\
569      ^ (t6 << 6)\
570      ^ (t8 << 8)\
571      ^ (t10 << 10)\
572      ^ (t12 << 12)\
573      ^ (t14 << 14)\
574      ^ (t16 << 16)\
575      ^ (t18 << 18)\
576      ^ (t20 << 20)\
577      ^ (t22 << 22)\
578      ^ (t24 << 24)\
579      ^ (t26 << 26)\
580      ^ (t28 << 28)\
581      ^ (t30 << 30);\
582   const _ntl_ulong hi = (t2 >> 62)\
583      ^ (t4 >> 60)\
584      ^ (t6 >> 58)\
585      ^ (t8 >> 56)\
586      ^ (t10 >> 54)\
587      ^ (t12 >> 52)\
588      ^ (t14 >> 50)\
589      ^ (t16 >> 48)\
590      ^ (t18 >> 46)\
591      ^ (t20 >> 44)\
592      ^ (t22 >> 42)\
593      ^ (t24 >> 40)\
594      ^ (t26 >> 38)\
595      ^ (t28 >> 36)\
596      ^ (t30 >> 34)\
597      ^ (((b & 0xaaaaaaaaUL) >> 1) & (-(a >> 63)));\
598   c[0] = lo;    c[1] = hi;\
599
600
601
602
603
604#define NTL_ALT1_BB_MUL_CODE0 \
605   _ntl_ulong hi, lo, t;\
606   _ntl_ulong A[16];\
607   A[0] = 0;\
608   A[1] = a;\
609   A[2] = A[1] << 1;\
610   A[3] = A[2] ^ A[1];\
611   A[4] = A[2] << 1;\
612   A[5] = A[4] ^ A[1];\
613   A[6] = A[3] << 1;\
614   A[7] = A[6] ^ A[1];\
615   A[8] = A[4] << 1;\
616   A[9] = A[8] ^ A[1];\
617   A[10] = A[5] << 1;\
618   A[11] = A[10] ^ A[1];\
619   A[12] = A[6] << 1;\
620   A[13] = A[12] ^ A[1];\
621   A[14] = A[7] << 1;\
622   A[15] = A[14] ^ A[1];\
623   lo = A[b & 15]; t = A[(b >> 4) & 15]; hi = t >> 60; lo ^= t << 4;\
624   t = A[(b >> 8) & 15]; hi ^= t >> 56; lo ^= t << 8;\
625   t = A[(b >> 12) & 15]; hi ^= t >> 52; lo ^= t << 12;\
626   t = A[(b >> 16) & 15]; hi ^= t >> 48; lo ^= t << 16;\
627   t = A[(b >> 20) & 15]; hi ^= t >> 44; lo ^= t << 20;\
628   t = A[(b >> 24) & 15]; hi ^= t >> 40; lo ^= t << 24;\
629   t = A[(b >> 28) & 15]; hi ^= t >> 36; lo ^= t << 28;\
630   t = A[(b >> 32) & 15]; hi ^= t >> 32; lo ^= t << 32;\
631   t = A[(b >> 36) & 15]; hi ^= t >> 28; lo ^= t << 36;\
632   t = A[(b >> 40) & 15]; hi ^= t >> 24; lo ^= t << 40;\
633   t = A[(b >> 44) & 15]; hi ^= t >> 20; lo ^= t << 44;\
634   t = A[(b >> 48) & 15]; hi ^= t >> 16; lo ^= t << 48;\
635   t = A[(b >> 52) & 15]; hi ^= t >> 12; lo ^= t << 52;\
636   t = A[(b >> 56) & 15]; hi ^= t >> 8; lo ^= t << 56;\
637   t = A[b >> 60]; hi ^= t >> 4; lo ^= t << 60;\
638   hi ^= (((b & 0xeeeeeeeeeeeeeeeeUL) >> 1) & (-(a >> 63)))\
639      ^ (((b & 0xccccccccccccccccUL) >> 2) & (-((a >> 62) & 1UL)))\
640      ^ (((b & 0x8888888888888888UL) >> 3) & (-((a >> 61) & 1UL)));\
641   c[0] = lo;    c[1] = hi;\
642
643
644
645
646
647#define NTL_ALT1_BB_MUL_CODE1 \
648   long i;\
649   _ntl_ulong carry = 0, b;\
650   _ntl_ulong hi, lo, t;\
651   _ntl_ulong A[16];\
652   A[0] = 0;\
653   A[1] = a;\
654   A[2] = A[1] << 1;\
655   A[3] = A[2] ^ A[1];\
656   A[4] = A[2] << 1;\
657   A[5] = A[4] ^ A[1];\
658   A[6] = A[3] << 1;\
659   A[7] = A[6] ^ A[1];\
660   A[8] = A[4] << 1;\
661   A[9] = A[8] ^ A[1];\
662   A[10] = A[5] << 1;\
663   A[11] = A[10] ^ A[1];\
664   A[12] = A[6] << 1;\
665   A[13] = A[12] ^ A[1];\
666   A[14] = A[7] << 1;\
667   A[15] = A[14] ^ A[1];\
668   for (i = 0; i < sb; i++) {\
669      b = bp[i];\
670      lo = A[b & 15]; t = A[(b >> 4) & 15]; hi = t >> 60; lo ^= t << 4;\
671      t = A[(b >> 8) & 15]; hi ^= t >> 56; lo ^= t << 8;\
672      t = A[(b >> 12) & 15]; hi ^= t >> 52; lo ^= t << 12;\
673      t = A[(b >> 16) & 15]; hi ^= t >> 48; lo ^= t << 16;\
674      t = A[(b >> 20) & 15]; hi ^= t >> 44; lo ^= t << 20;\
675      t = A[(b >> 24) & 15]; hi ^= t >> 40; lo ^= t << 24;\
676      t = A[(b >> 28) & 15]; hi ^= t >> 36; lo ^= t << 28;\
677      t = A[(b >> 32) & 15]; hi ^= t >> 32; lo ^= t << 32;\
678      t = A[(b >> 36) & 15]; hi ^= t >> 28; lo ^= t << 36;\
679      t = A[(b >> 40) & 15]; hi ^= t >> 24; lo ^= t << 40;\
680      t = A[(b >> 44) & 15]; hi ^= t >> 20; lo ^= t << 44;\
681      t = A[(b >> 48) & 15]; hi ^= t >> 16; lo ^= t << 48;\
682      t = A[(b >> 52) & 15]; hi ^= t >> 12; lo ^= t << 52;\
683      t = A[(b >> 56) & 15]; hi ^= t >> 8; lo ^= t << 56;\
684      t = A[b >> 60]; hi ^= t >> 4; lo ^= t << 60;\
685      hi ^= (((b & 0xeeeeeeeeeeeeeeeeUL) >> 1) & (-(a >> 63)))\
686         ^ (((b & 0xccccccccccccccccUL) >> 2) & (-((a >> 62) & 1UL)))\
687         ^ (((b & 0x8888888888888888UL) >> 3) & (-((a >> 61) & 1UL)));\
688      cp[i] = carry ^ lo;    carry = hi;\
689   }\
690   cp[sb] = carry;\
691
692
693
694
695
696#define NTL_ALT1_BB_MUL_CODE2 \
697   long i;\
698   _ntl_ulong carry = 0, b;\
699   _ntl_ulong hi, lo, t;\
700   _ntl_ulong A[16];\
701   A[0] = 0;\
702   A[1] = a;\
703   A[2] = A[1] << 1;\
704   A[3] = A[2] ^ A[1];\
705   A[4] = A[2] << 1;\
706   A[5] = A[4] ^ A[1];\
707   A[6] = A[3] << 1;\
708   A[7] = A[6] ^ A[1];\
709   A[8] = A[4] << 1;\
710   A[9] = A[8] ^ A[1];\
711   A[10] = A[5] << 1;\
712   A[11] = A[10] ^ A[1];\
713   A[12] = A[6] << 1;\
714   A[13] = A[12] ^ A[1];\
715   A[14] = A[7] << 1;\
716   A[15] = A[14] ^ A[1];\
717   for (i = 0; i < sb; i++) {\
718      b = bp[i];\
719      lo = A[b & 15]; t = A[(b >> 4) & 15]; hi = t >> 60; lo ^= t << 4;\
720      t = A[(b >> 8) & 15]; hi ^= t >> 56; lo ^= t << 8;\
721      t = A[(b >> 12) & 15]; hi ^= t >> 52; lo ^= t << 12;\
722      t = A[(b >> 16) & 15]; hi ^= t >> 48; lo ^= t << 16;\
723      t = A[(b >> 20) & 15]; hi ^= t >> 44; lo ^= t << 20;\
724      t = A[(b >> 24) & 15]; hi ^= t >> 40; lo ^= t << 24;\
725      t = A[(b >> 28) & 15]; hi ^= t >> 36; lo ^= t << 28;\
726      t = A[(b >> 32) & 15]; hi ^= t >> 32; lo ^= t << 32;\
727      t = A[(b >> 36) & 15]; hi ^= t >> 28; lo ^= t << 36;\
728      t = A[(b >> 40) & 15]; hi ^= t >> 24; lo ^= t << 40;\
729      t = A[(b >> 44) & 15]; hi ^= t >> 20; lo ^= t << 44;\
730      t = A[(b >> 48) & 15]; hi ^= t >> 16; lo ^= t << 48;\
731      t = A[(b >> 52) & 15]; hi ^= t >> 12; lo ^= t << 52;\
732      t = A[(b >> 56) & 15]; hi ^= t >> 8; lo ^= t << 56;\
733      t = A[b >> 60]; hi ^= t >> 4; lo ^= t << 60;\
734      hi ^= (((b & 0xeeeeeeeeeeeeeeeeUL) >> 1) & (-(a >> 63)))\
735         ^ (((b & 0xccccccccccccccccUL) >> 2) & (-((a >> 62) & 1UL)))\
736         ^ (((b & 0x8888888888888888UL) >> 3) & (-((a >> 61) & 1UL)));\
737      cp[i] ^= (carry ^ lo);    carry = hi;\
738   }\
739   cp[sb] ^= carry;\
740
741
742
743
744
745#define NTL_ALT1_SHORT_BB_MUL_CODE1 \
746   long i;\
747   _ntl_ulong carry = 0, b;\
748   _ntl_ulong hi, lo, t;\
749   _ntl_ulong A[16];\
750   A[0] = 0;\
751   A[1] = a;\
752   A[2] = A[1] << 1;\
753   A[3] = A[2] ^ A[1];\
754   A[4] = A[2] << 1;\
755   A[5] = A[4] ^ A[1];\
756   A[6] = A[3] << 1;\
757   A[7] = A[6] ^ A[1];\
758   A[8] = A[4] << 1;\
759   A[9] = A[8] ^ A[1];\
760   A[10] = A[5] << 1;\
761   A[11] = A[10] ^ A[1];\
762   A[12] = A[6] << 1;\
763   A[13] = A[12] ^ A[1];\
764   A[14] = A[7] << 1;\
765   A[15] = A[14] ^ A[1];\
766   for (i = 0; i < sb; i++) {\
767      b = bp[i];\
768      lo = A[b & 15]; t = A[(b >> 4) & 15]; hi = t >> 60; lo ^= t << 4;\
769      t = A[(b >> 8) & 15]; hi ^= t >> 56; lo ^= t << 8;\
770      t = A[(b >> 12) & 15]; hi ^= t >> 52; lo ^= t << 12;\
771      t = A[(b >> 16) & 15]; hi ^= t >> 48; lo ^= t << 16;\
772      t = A[(b >> 20) & 15]; hi ^= t >> 44; lo ^= t << 20;\
773      t = A[(b >> 24) & 15]; hi ^= t >> 40; lo ^= t << 24;\
774      t = A[(b >> 28) & 15]; hi ^= t >> 36; lo ^= t << 28;\
775      t = A[(b >> 32) & 15]; hi ^= t >> 32; lo ^= t << 32;\
776      t = A[(b >> 36) & 15]; hi ^= t >> 28; lo ^= t << 36;\
777      t = A[(b >> 40) & 15]; hi ^= t >> 24; lo ^= t << 40;\
778      t = A[(b >> 44) & 15]; hi ^= t >> 20; lo ^= t << 44;\
779      t = A[(b >> 48) & 15]; hi ^= t >> 16; lo ^= t << 48;\
780      t = A[(b >> 52) & 15]; hi ^= t >> 12; lo ^= t << 52;\
781      t = A[(b >> 56) & 15]; hi ^= t >> 8; lo ^= t << 56;\
782      t = A[b >> 60]; hi ^= t >> 4; lo ^= t << 60;\
783      cp[i] = carry ^ lo;    carry = hi;\
784   }\
785   cp[sb] = carry;\
786
787
788
789
790
791#define NTL_ALT1_HALF_BB_MUL_CODE0 \
792   _ntl_ulong hi, lo, t;\
793   _ntl_ulong A[4];\
794   A[0] = 0;\
795   A[1] = a;\
796   A[2] = A[1] << 1;\
797   A[3] = A[2] ^ A[1];\
798   lo = A[b & 3]; t = A[(b >> 2) & 3]; hi = t >> 62; lo ^= t << 2;\
799   t = A[(b >> 4) & 3]; hi ^= t >> 60; lo ^= t << 4;\
800   t = A[(b >> 6) & 3]; hi ^= t >> 58; lo ^= t << 6;\
801   t = A[(b >> 8) & 3]; hi ^= t >> 56; lo ^= t << 8;\
802   t = A[(b >> 10) & 3]; hi ^= t >> 54; lo ^= t << 10;\
803   t = A[(b >> 12) & 3]; hi ^= t >> 52; lo ^= t << 12;\
804   t = A[(b >> 14) & 3]; hi ^= t >> 50; lo ^= t << 14;\
805   t = A[(b >> 16) & 3]; hi ^= t >> 48; lo ^= t << 16;\
806   t = A[(b >> 18) & 3]; hi ^= t >> 46; lo ^= t << 18;\
807   t = A[(b >> 20) & 3]; hi ^= t >> 44; lo ^= t << 20;\
808   t = A[(b >> 22) & 3]; hi ^= t >> 42; lo ^= t << 22;\
809   t = A[(b >> 24) & 3]; hi ^= t >> 40; lo ^= t << 24;\
810   t = A[(b >> 26) & 3]; hi ^= t >> 38; lo ^= t << 26;\
811   t = A[(b >> 28) & 3]; hi ^= t >> 36; lo ^= t << 28;\
812   t = A[b >> 30]; hi ^= t >> 34; lo ^= t << 30;\
813   hi ^= (((b & 0xaaaaaaaaUL) >> 1) & (-(a >> 63)));\
814   c[0] = lo;    c[1] = hi;\
815
816
817
818#define NTL_BB_MUL1_BITS (4)
819
820
821
822#define NTL_BB_SQR_CODE \
823lo=sqrtab[a&255];\
824lo=lo|(sqrtab[(a>>8)&255]<<16);\
825lo=lo|(sqrtab[(a>>16)&255]<<32);\
826lo=lo|(sqrtab[(a>>24)&255]<<48);\
827hi=sqrtab[(a>>32)&255];\
828hi=hi|(sqrtab[(a>>40)&255]<<16);\
829hi=hi|(sqrtab[(a>>48)&255]<<32);\
830hi=hi|(sqrtab[(a>>56)&255]<<48);\
831
832
833
834
835#define NTL_BB_REV_CODE (revtab[(a>>0)&255]<<56)\
836|(revtab[(a>>8)&255]<<48)\
837|(revtab[(a>>16)&255]<<40)\
838|(revtab[(a>>24)&255]<<32)\
839|(revtab[(a>>32)&255]<<24)\
840|(revtab[(a>>40)&255]<<16)\
841|(revtab[(a>>48)&255]<<8)\
842|(revtab[(a>>56)&255]<<0)
843
844#define NTL_MIN_LONG (-NTL_MAX_LONG - 1L)
845#define NTL_MIN_INT  (-NTL_MAX_INT - 1)
846#endif
847
Note: See TracBrowser for help on using the repository browser.