Annotation of OpenXM_contrib2/windows/pari2/win32/parigen.h, Revision 1.2
1.1 noro 1: /* $Id: parigen.h,v 1.11 2002/02/27 22:26:00 karim Exp $
2:
3: Copyright (C) 2000 The PARI group.
4:
5: This file is part of the PARI/GP package.
6:
7: PARI/GP is free software; you can redistribute it and/or modify it under the
8: terms of the GNU General Public License as published by the Free Software
9: Foundation. It is distributed in the hope that it will be useful, but WITHOUT
10: ANY WARRANTY WHATSOEVER.
11:
12: Check the License for details. You should have received a copy of it, along
13: with the package; see the file 'COPYING'. If not, write to the Free Software
14: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
15:
16: /* This file defines the parameters of the GEN type */
17:
18: typedef long *GEN;
19: typedef int (*QSCOMP)(const void *, const void *);
20:
21: #ifdef ULONG_NOT_DEFINED
22: typedef unsigned long ulong;
23: #endif
24:
25: #ifdef __M68K__
26: # define OLD_CODES
27: #endif
28:
1.2 ! ohara 29: #if defined(LONG_IS_64BIT)
1.1 noro 30: # define TWOPOTBYTES_IN_LONG 3
31: #else
32: # define TWOPOTBYTES_IN_LONG 2
33: #endif
34:
35: #define DEFAULTPREC 2 + (8>>TWOPOTBYTES_IN_LONG)
36: #define MEDDEFAULTPREC 2 + (16>>TWOPOTBYTES_IN_LONG)
37: #define BIGDEFAULTPREC 2 + (24>>TWOPOTBYTES_IN_LONG)
38: #define TWOPOTBITS_IN_LONG (TWOPOTBYTES_IN_LONG+3)
39: #define BYTES_IN_LONG (1UL<<TWOPOTBYTES_IN_LONG)
40: #define BITS_IN_LONG (1UL<<TWOPOTBITS_IN_LONG)
41: #define HIGHBIT (1UL << (BITS_IN_LONG-1))
42: #define BITS_IN_HALFULONG (BITS_IN_LONG>>1)
43: #define MAXULONG (~0x0UL)
44: #define MAXHALFULONG ((1UL<<BITS_IN_HALFULONG) - 1)
45: #define LOWMASK (MAXHALFULONG)
46: #define HIGHMASK (~LOWMASK)
47: #define SMALL_MASK (HIGHBIT>>1)
48: /* You may want to change the following 32 to BITS_IN_LONG */
49: #define BITS_IN_RANDOM 32
50:
51: /* Order of bits in codewords:
52: * x[0] TYPBITS, CLONEBIT, LGBITS
53: * x[1].real SIGNBITS, EXPOBITS
54: * int SIGNBITS, LGEFINTBITS
55: * ser,pol SIGNBITS, VARNBITS ,LGEFBITS
56: * padic VALPBITS, PRECPBITS
57: * Length of bitfields are independant and satisfy:
58: * TYPnumBITS + LGnumBITS + 1 <= BITS_IN_LONG (optimally =)
59: * SIGNnumBITS + EXPOnumBITS <= BITS_IN_LONG
60: * SIGNnumBITS + LGnumBITS <= BITS_IN_LONG
61: * SIGNnumBITS + LGEFnumBITS + 2 <= BITS_IN_LONG
62: * VALPnumbits + 1 <= BITS_IN_LONG */
63: #ifdef OLD_CODES
64: # define TYPnumBITS 8 /* obsolete (for hard-coded assembler in mp.s) */
65: # define SIGNnumBITS 8
66: #else
67: # define TYPnumBITS 7
68: # define SIGNnumBITS 2
69: #endif
70:
1.2 ! ohara 71: #if defined(LONG_IS_64BIT)
1.1 noro 72: # define LGnumBITS 32
73: # define EXPOnumBITS 48
74: # define LGEFnumBITS 46 /* otherwise MAXVARN too large */
75: # define VALPnumBITS 32
76: #else
77: # ifdef OLD_CODES
78: # define LGnumBITS 16 /* obsolete */
79: # else
80: # define LGnumBITS 24
81: # endif
82: # define EXPOnumBITS 24
83: # define LGEFnumBITS 16
84: # define VALPnumBITS 16
85: #endif
86:
87: /* no user serviceable parts below :-) */
88: #define VARNnumBITS (BITS_IN_LONG - SIGNnumBITS - LGEFnumBITS)
89: #define PRECPSHIFT VALPnumBITS
90: #define VARNSHIFT LGEFnumBITS
91: #define TYPSHIFT (BITS_IN_LONG - TYPnumBITS)
92: #define SIGNSHIFT (LGEFnumBITS+VARNnumBITS)
93:
94: #define EXPOBITS ((1UL<<EXPOnumBITS)-1)
95: #define SIGNBITS (0xffffUL << SIGNSHIFT)
96: #define TYPBITS (0xffffUL << TYPSHIFT)
97: #define PRECPBITS (~VALPBITS)
98: #define LGBITS ((1UL<<LGnumBITS)-1)
99: #define LGEFINTBITS LGBITS
100: #define LGEFBITS ((1UL<<LGEFnumBITS)-1)
101: #define VALPBITS ((1UL<<VALPnumBITS)-1)
102: #define VARNBITS (MAXVARN<<VARNSHIFT)
103: #define MAXVARN ((1UL<<VARNnumBITS)-1)
104: #define HIGHEXPOBIT (1UL<<(EXPOnumBITS-1))
105: #define HIGHVALPBIT (1UL<<(VALPnumBITS-1))
106: #define CLONEBIT (1UL<<LGnumBITS)
107:
108: #define evaltyp(x) (((ulong)(x)) << TYPSHIFT)
109: #define evalvarn(x) (((ulong)(x)) << VARNSHIFT)
110: #define evalsigne(x) (((long)(x)) << SIGNSHIFT)
111: #define evalprecp(x) (((long)(x)) << PRECPSHIFT)
112: #define _evalexpo(x) (HIGHEXPOBIT + (x))
113: #define _evalvalp(x) (HIGHVALPBIT + (x))
114: #define evallgefint(x) (x)
115: #define _evallg(x) (x)
116: #define _evallgef(x) (x)
117:
118: #define typ(x) ((((ulong)(x))&1)? (long)t_SMALL: (long)(((ulong) ((GEN) (x))[0]) >> TYPSHIFT))
119: #define settyp(x,s) (((GEN)(x))[0]=\
120: (((GEN)(x))[0]&(~TYPBITS)) | evaltyp(s))
121: #define smalltos(x) (((long)(x))>>1)
122:
123: #define isclone(x) (((GEN) (x))[0] & CLONEBIT)
124: #define setisclone(x) (((GEN) (x))[0] |= CLONEBIT)
125: #define unsetisclone(x) (((GEN) (x))[0] &= (~CLONEBIT))
126:
127: #define lg(x) ((((ulong)(x))&1)?1L: ((long) (((GEN) (x))[0] & LGBITS)))
128: #define setlg(x,s) (((GEN)(x))[0]=\
129: (((GEN)(x))[0]&(~LGBITS)) | evallg(s))
130:
131: #define signe(x) (((long) ((GEN) (x))[1]) >> SIGNSHIFT)
132: #define setsigne(x,s) (((GEN)(x))[1]=\
133: (((GEN)(x))[1]&(~SIGNBITS)) | evalsigne(s))
134:
135: #define lgef(x) (((GEN) (x))[1] & LGEFBITS)
136: #define setlgef(x,s) (((GEN)(x))[1]=\
137: (((GEN)(x))[1]&(~LGEFBITS)) | evallgef(s))
138:
139: #define lgefint(x) (((GEN) (x))[1] & LGEFINTBITS)
140: #define setlgefint(x,s) (((GEN)(x))[1]=\
141: (((GEN)(x))[1]&(~LGEFINTBITS)) | evallgefint(s))
142:
143: #define expo(x) ((long) ((((GEN) (x))[1] & EXPOBITS) - HIGHEXPOBIT))
144: #define setexpo(x,s) (((GEN)(x))[1]=\
145: (((GEN)(x))[1]&(~EXPOBITS)) | evalexpo(s))
146:
147: #define valp(x) ((long) ((((GEN)(x))[1] & VALPBITS) - HIGHVALPBIT))
148: #define setvalp(x,s) (((GEN)(x))[1]=\
149: (((GEN)(x))[1]&(~VALPBITS)) | evalvalp(s))
150:
151: #define precp(x) ((long) (((ulong) ((GEN) (x))[1]) >> PRECPSHIFT))
152: #define setprecp(x,s) (((GEN)(x))[1]=\
153: (((GEN)(x))[1]&(~PRECPBITS)) | evalprecp(s))
154:
155: #define varn(x) ((((GEN) (x))[1]&VARNBITS) >> VARNSHIFT)
156: #define setvarn(x,s) (((GEN)(x))[1]=\
157: (((GEN)(x))[1]&(~VARNBITS)) | evalvarn(s))
158:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>