9 |
object normalize_big(object); |
object normalize_big(object); |
10 |
|
|
11 |
object |
object |
12 |
log_op(op,mp_op) |
log_op(int (*op) (/* ??? */), void (*mp_op) (/* ??? */)) |
|
int (*op)(); |
|
|
void (*mp_op)(); |
|
13 |
{ |
{ |
14 |
object x; |
object x; |
15 |
int narg, i, j; |
int narg, i, j; |
46 |
|
|
47 |
|
|
48 |
void |
void |
49 |
mp_and_op(u, i, j) |
mp_and_op(__mpz_struct *u, __mpz_struct *i, __mpz_struct *j) |
|
mpz_t u, i, j; |
|
50 |
{ |
{ |
51 |
mpz_and(u,i,j); |
mpz_and(u,i,j); |
52 |
/* (i & j); */ |
/* (i & j); */ |
53 |
} |
} |
54 |
|
|
55 |
void |
void |
56 |
mp_eqv_op(u, i, j) |
mp_eqv_op(__mpz_struct *u, __mpz_struct *i, __mpz_struct *j) |
|
mpz_t u, i, j; |
|
57 |
{ |
{ |
58 |
mpz_xor(u,i,j); |
mpz_xor(u,i,j); |
59 |
mpz_com(u,u); |
mpz_com(u,u); |
62 |
} |
} |
63 |
|
|
64 |
void |
void |
65 |
mp_nand_op(u, i, j) |
mp_nand_op(__mpz_struct *u, __mpz_struct *i, __mpz_struct *j) |
|
mpz_t u, i, j; |
|
66 |
{ |
{ |
67 |
mpz_and(u,i,j); |
mpz_and(u,i,j); |
68 |
mpz_com(u,u); |
mpz_com(u,u); |
70 |
} |
} |
71 |
|
|
72 |
void |
void |
73 |
mp_nor_op(u, i, j) |
mp_nor_op(__mpz_struct *u, __mpz_struct *i, __mpz_struct *j) |
|
mpz_t u, i, j; |
|
74 |
{ |
{ |
75 |
mpz_ior(u,u,j); |
mpz_ior(u,u,j); |
76 |
mpz_com(u,i); |
mpz_com(u,i); |
78 |
} |
} |
79 |
|
|
80 |
void |
void |
81 |
mp_andc1_op(u,i, j) |
mp_andc1_op(__mpz_struct *u, __mpz_struct *i, __mpz_struct *j) |
|
mpz_t u, i, j; |
|
82 |
{ |
{ |
83 |
mpz_com(u,i); |
mpz_com(u,i); |
84 |
mpz_and(u,u,j); |
mpz_and(u,u,j); |
86 |
} |
} |
87 |
|
|
88 |
void |
void |
89 |
mp_andc2_op(u,i, j) |
mp_andc2_op(__mpz_struct *u, __mpz_struct *i, __mpz_struct *j) |
|
mpz_t u, i, j; |
|
90 |
{ |
{ |
91 |
mpz_com(u,j); |
mpz_com(u,j); |
92 |
mpz_and(u,u,i); |
mpz_and(u,u,i); |
94 |
} |
} |
95 |
|
|
96 |
void |
void |
97 |
mp_orc1_op(u, i, j) |
mp_orc1_op(__mpz_struct *u, __mpz_struct *i, __mpz_struct *j) |
|
mpz_t u, i, j; |
|
98 |
{ |
{ |
99 |
mpz_com(u,i); |
mpz_com(u,i); |
100 |
mpz_ior(u,u,j); |
mpz_ior(u,u,j); |
102 |
} |
} |
103 |
|
|
104 |
void |
void |
105 |
mp_orc2_op(u,i, j) |
mp_orc2_op(__mpz_struct *u, __mpz_struct *i, __mpz_struct *j) |
|
mpz_t u, i, j; |
|
106 |
{ |
{ |
107 |
mpz_com(u,j); |
mpz_com(u,j); |
108 |
mpz_ior(u,u,i); |
mpz_ior(u,u,i); |
110 |
} |
} |
111 |
|
|
112 |
void |
void |
113 |
mp_b_clr_op(u,i, j) |
mp_b_clr_op(__mpz_struct *u, __mpz_struct *i, __mpz_struct *j) |
|
mpz_t u, i, j; |
|
114 |
{ |
{ |
115 |
mpz_set_si(u,0); |
mpz_set_si(u,0); |
116 |
/* (0); */ |
/* (0); */ |
117 |
} |
} |
118 |
|
|
119 |
void |
void |
120 |
mp_b_set_op(u,i, j) |
mp_b_set_op(__mpz_struct *u, __mpz_struct *i, __mpz_struct *j) |
|
mpz_t u, i, j; |
|
121 |
{ |
{ |
122 |
mpz_set_si(u,-1); |
mpz_set_si(u,-1); |
123 |
/* (-1); */ |
/* (-1); */ |
124 |
} |
} |
125 |
|
|
126 |
void |
void |
127 |
mp_b_1_op(u, i, j) |
mp_b_1_op(__mpz_struct *u, __mpz_struct *i, __mpz_struct *j) |
|
mpz_t u, i, j; |
|
128 |
{ |
{ |
129 |
mpz_set(u,i); |
mpz_set(u,i); |
130 |
/* (i); */ |
/* (i); */ |
131 |
} |
} |
132 |
|
|
133 |
void |
void |
134 |
mp_b_2_op(u, i, j) |
mp_b_2_op(__mpz_struct *u, __mpz_struct *i, __mpz_struct *j) |
|
mpz_t u, i, j; |
|
135 |
{ |
{ |
136 |
mpz_set(u,j); |
mpz_set(u,j); |
137 |
/* (j); */ |
/* (j); */ |
138 |
} |
} |
139 |
|
|
140 |
void |
void |
141 |
mp_b_c1_op(u, i, j) |
mp_b_c1_op(__mpz_struct *u, __mpz_struct *i, __mpz_struct *j) |
|
mpz_t u, i, j; |
|
142 |
{ |
{ |
143 |
mpz_com(u,i); |
mpz_com(u,i); |
144 |
/* (~i); */ |
/* (~i); */ |
145 |
} |
} |
146 |
|
|
147 |
void |
void |
148 |
mp_b_c2_op(u, i, j) |
mp_b_c2_op(__mpz_struct *u, __mpz_struct *i, __mpz_struct *j) |
|
mpz_t u, i, j; |
|
149 |
{ |
{ |
150 |
mpz_com(u,j); |
mpz_com(u,j); |
151 |
/* (~j); */ |
/* (~j); */ |
155 |
|
|
156 |
|
|
157 |
int |
int |
158 |
big_bitp(x, p) |
big_bitp(object x, int p) |
|
object x; |
|
|
int p; |
|
159 |
{ |
{ |
160 |
return mpz_tstbit(MP(x),p); |
return mpz_tstbit(MP(x),p); |
161 |
} |
} |
165 |
|
|
166 |
|
|
167 |
void |
void |
168 |
mp_ior_op(u, i, j) |
mp_ior_op(__mpz_struct *u, __mpz_struct *i, __mpz_struct *j) |
|
mpz_t u, i, j; |
|
169 |
{ |
{ |
170 |
mpz_ior(u,i,j); |
mpz_ior(u,i,j); |
171 |
/* (i | j); */ |
/* (i | j); */ |
172 |
} |
} |
173 |
|
|
174 |
void |
void |
175 |
mp_xor_op(u, i, j) |
mp_xor_op(__mpz_struct *u, __mpz_struct *i, __mpz_struct *j) |
|
mpz_t u, i, j; |
|
176 |
{ |
{ |
177 |
mpz_xor(u,i,j); |
mpz_xor(u,i,j); |
178 |
/* (i ^ j); */ |
/* (i ^ j); */ |
179 |
} |
} |
180 |
|
|
181 |
int |
int |
182 |
mpz_bitcount(x) |
mpz_bitcount(__mpz_struct *x) |
|
mpz_t x; |
|
|
|
|
183 |
{ |
{ |
184 |
if (mpz_sgn(x) >= 0) { |
if (mpz_sgn(x) >= 0) { |
185 |
return mpz_popcount(x); |
return mpz_popcount(x); |
192 |
|
|
193 |
|
|
194 |
int |
int |
195 |
mpz_bitlength(x) |
mpz_bitlength(__mpz_struct *x) |
|
mpz_t x; |
|
|
|
|
196 |
{ |
{ |
197 |
if (mpz_sgn(x) >= 0) { |
if (mpz_sgn(x) >= 0) { |
198 |
return mpz_sizeinbase(x,2); |
return mpz_sizeinbase(x,2); |