1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
#![allow(non_camel_case_types)]

extern crate libc;

use libc::size_t;

// automatically generated by rust-bindgen
//
// Manually edited to add gmp_randstate_ptr.
// See discussion at https://github.com/netvl/gmp-sys/pull/1

pub type mp_limb_t = ::std::os::raw::c_ulong;
pub type mp_limb_signed_t = ::std::os::raw::c_long;
pub type mp_bitcnt_t = ::std::os::raw::c_ulong;
#[repr(C)]
#[derive(Copy)]
pub struct Struct_Unnamed1 {
    pub _mp_alloc: ::std::os::raw::c_int,
    pub _mp_size: ::std::os::raw::c_int,
    pub _mp_d: *mut mp_limb_t,
}
impl ::std::clone::Clone for Struct_Unnamed1 {
    fn clone(&self) -> Self { *self }
}
impl ::std::default::Default for Struct_Unnamed1 {
    fn default() -> Self { unsafe { ::std::mem::zeroed() } }
}
pub type __mpz_struct = Struct_Unnamed1;
pub type MP_INT = __mpz_struct;
pub type mpz_t = [__mpz_struct; 1usize];
pub type mp_ptr = *mut mp_limb_t;
pub type mp_srcptr = *const mp_limb_t;
pub type mp_size_t = ::std::os::raw::c_long;
pub type mp_exp_t = ::std::os::raw::c_long;
#[repr(C)]
#[derive(Copy)]
pub struct Struct_Unnamed2 {
    pub _mp_num: __mpz_struct,
    pub _mp_den: __mpz_struct,
}
impl ::std::clone::Clone for Struct_Unnamed2 {
    fn clone(&self) -> Self { *self }
}
impl ::std::default::Default for Struct_Unnamed2 {
    fn default() -> Self { unsafe { ::std::mem::zeroed() } }
}
pub type __mpq_struct = Struct_Unnamed2;
pub type MP_RAT = __mpq_struct;
pub type mpq_t = [__mpq_struct; 1usize];
#[repr(C)]
#[derive(Copy)]
pub struct Struct_Unnamed3 {
    pub _mp_prec: ::std::os::raw::c_int,
    pub _mp_size: ::std::os::raw::c_int,
    pub _mp_exp: mp_exp_t,
    pub _mp_d: *mut mp_limb_t,
}
impl ::std::clone::Clone for Struct_Unnamed3 {
    fn clone(&self) -> Self { *self }
}
impl ::std::default::Default for Struct_Unnamed3 {
    fn default() -> Self { unsafe { ::std::mem::zeroed() } }
}
pub type __mpf_struct = Struct_Unnamed3;
pub type mpf_t = [__mpf_struct; 1usize];
pub type Enum_Unnamed4 = ::libc::c_uint;
pub const GMP_RAND_ALG_DEFAULT: ::libc::c_uint = 0;
pub const GMP_RAND_ALG_LC: ::libc::c_uint = 0;
pub type gmp_randalg_t = Enum_Unnamed4;
#[repr(C)]
#[derive(Copy)]
pub struct Struct_Unnamed5 {
    pub _mp_seed: mpz_t,
    pub _mp_alg: gmp_randalg_t,
    pub _mp_algdata: Union_Unnamed6,
}
impl ::std::clone::Clone for Struct_Unnamed5 {
    fn clone(&self) -> Self { *self }
}
impl ::std::default::Default for Struct_Unnamed5 {
    fn default() -> Self { unsafe { ::std::mem::zeroed() } }
}
#[repr(C)]
#[derive(Copy)]
pub struct Union_Unnamed6 {
    pub _bindgen_data_: [u64; 1usize],
}
impl Union_Unnamed6 {
    pub unsafe fn _mp_lc(&mut self) -> *mut *mut ::std::os::raw::c_void {
        let raw: *mut u8 = ::std::mem::transmute(&self._bindgen_data_);
        ::std::mem::transmute(raw.offset(0))
    }
}
impl ::std::clone::Clone for Union_Unnamed6 {
    fn clone(&self) -> Self { *self }
}
impl ::std::default::Default for Union_Unnamed6 {
    fn default() -> Self { unsafe { ::std::mem::zeroed() } }
}
pub type __gmp_randstate_struct = Struct_Unnamed5;
pub type gmp_randstate_t = [__gmp_randstate_struct; 1usize];
pub type gmp_randstate_ptr = *mut __gmp_randstate_struct;
pub type mpz_srcptr = *const __mpz_struct;
pub type mpz_ptr = *mut __mpz_struct;
pub type mpf_srcptr = *const __mpf_struct;
pub type mpf_ptr = *mut __mpf_struct;
pub type mpq_srcptr = *const __mpq_struct;
pub type mpq_ptr = *mut __mpq_struct;
#[derive(Clone, Copy)]
#[repr(u32)]
pub enum Enum_Unnamed7 {
    GMP_ERROR_NONE = 0,
    GMP_ERROR_UNSUPPORTED_ARGUMENT = 1,
    GMP_ERROR_DIVISION_BY_ZERO = 2,
    GMP_ERROR_SQRT_OF_NEGATIVE = 4,
    GMP_ERROR_INVALID_ARGUMENT = 8,
}
extern "C" {
    pub static __gmp_bits_per_limb: ::std::os::raw::c_int;
    pub static mut __gmp_errno: ::std::os::raw::c_int;
    pub static __gmp_version: *const ::std::os::raw::c_char;
}
extern "C" {
    pub fn __gmp_set_memory_functions(arg1:
                                          ::std::option::Option<extern "C" fn(arg1:
                                                                                  size_t)
                                                                    ->
                                                                        *mut ::std::os::raw::c_void>,
                                      arg2:
                                          ::std::option::Option<unsafe extern "C" fn(arg1:
                                                                                         *mut ::std::os::raw::c_void,
                                                                                     arg2:
                                                                                         size_t,
                                                                                     arg3:
                                                                                         size_t)
                                                                    ->
                                                                        *mut ::std::os::raw::c_void>,
                                      arg3:
                                          ::std::option::Option<unsafe extern "C" fn(arg1:
                                                                                         *mut ::std::os::raw::c_void,
                                                                                     arg2:
                                                                                         size_t)>);
    pub fn __gmp_get_memory_functions(arg1:
                                          *mut ::std::option::Option<extern "C" fn(arg1:
                                                                                       size_t)
                                                                         ->
                                                                             *mut ::std::os::raw::c_void>,
                                      arg2:
                                          *mut ::std::option::Option<unsafe extern "C" fn(arg1:
                                                                                              *mut ::std::os::raw::c_void,
                                                                                          arg2:
                                                                                              size_t,
                                                                                          arg3:
                                                                                              size_t)
                                                                         ->
                                                                             *mut ::std::os::raw::c_void>,
                                      arg3:
                                          *mut ::std::option::Option<unsafe extern "C" fn(arg1:
                                                                                              *mut ::std::os::raw::c_void,
                                                                                          arg2:
                                                                                              size_t)>);
    pub fn __gmp_randinit(arg1: gmp_randstate_ptr, arg2: gmp_randalg_t, ...);
    pub fn __gmp_randinit_default(arg1: gmp_randstate_ptr);
    pub fn __gmp_randinit_lc_2exp(arg1: gmp_randstate_ptr, arg2: mpz_srcptr,
                                  arg3: ::std::os::raw::c_ulong,
                                  arg4: mp_bitcnt_t);
    pub fn __gmp_randinit_lc_2exp_size(arg1: gmp_randstate_ptr,
                                       arg2: mp_bitcnt_t)
     -> ::std::os::raw::c_int;
    pub fn __gmp_randinit_mt(arg1: gmp_randstate_ptr);
    pub fn __gmp_randinit_set(arg1: gmp_randstate_ptr,
                              arg2: *const __gmp_randstate_struct);
    pub fn __gmp_randseed(arg1: gmp_randstate_ptr, arg2: mpz_srcptr);
    pub fn __gmp_randseed_ui(arg1: gmp_randstate_ptr,
                             arg2: ::std::os::raw::c_ulong);
    pub fn __gmp_randclear(arg1: gmp_randstate_ptr);
    pub fn __gmp_urandomb_ui(arg1: gmp_randstate_ptr,
                             arg2: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_ulong;
    pub fn __gmp_urandomm_ui(arg1: gmp_randstate_ptr,
                             arg2: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_ulong;
    pub fn __gmp_asprintf(arg1: *mut *mut ::std::os::raw::c_char,
                          arg2: *const ::std::os::raw::c_char, ...)
     -> ::std::os::raw::c_int;
    pub fn __gmp_printf(arg1: *const ::std::os::raw::c_char, ...)
     -> ::std::os::raw::c_int;
    pub fn __gmp_snprintf(arg1: *mut ::std::os::raw::c_char, arg2: size_t,
                          arg3: *const ::std::os::raw::c_char, ...)
     -> ::std::os::raw::c_int;
    pub fn __gmp_sprintf(arg1: *mut ::std::os::raw::c_char,
                         arg2: *const ::std::os::raw::c_char, ...)
     -> ::std::os::raw::c_int;
    pub fn __gmp_scanf(arg1: *const ::std::os::raw::c_char, ...)
     -> ::std::os::raw::c_int;
    pub fn __gmp_sscanf(arg1: *const ::std::os::raw::c_char,
                        arg2: *const ::std::os::raw::c_char, ...)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_realloc(arg1: mpz_ptr, arg2: mp_size_t)
     -> *mut ::std::os::raw::c_void;
    pub fn __gmpz_abs(__gmp_w: mpz_ptr, __gmp_u: mpz_srcptr);
    pub fn __gmpz_add(arg1: mpz_ptr, arg2: mpz_srcptr, arg3: mpz_srcptr);
    pub fn __gmpz_add_ui(arg1: mpz_ptr, arg2: mpz_srcptr,
                         arg3: ::std::os::raw::c_ulong);
    pub fn __gmpz_addmul(arg1: mpz_ptr, arg2: mpz_srcptr, arg3: mpz_srcptr);
    pub fn __gmpz_addmul_ui(arg1: mpz_ptr, arg2: mpz_srcptr,
                            arg3: ::std::os::raw::c_ulong);
    pub fn __gmpz_and(arg1: mpz_ptr, arg2: mpz_srcptr, arg3: mpz_srcptr);
    pub fn __gmpz_array_init(arg1: mpz_ptr, arg2: mp_size_t, arg3: mp_size_t);
    pub fn __gmpz_bin_ui(arg1: mpz_ptr, arg2: mpz_srcptr,
                         arg3: ::std::os::raw::c_ulong);
    pub fn __gmpz_bin_uiui(arg1: mpz_ptr, arg2: ::std::os::raw::c_ulong,
                           arg3: ::std::os::raw::c_ulong);
    pub fn __gmpz_cdiv_q(arg1: mpz_ptr, arg2: mpz_srcptr, arg3: mpz_srcptr);
    pub fn __gmpz_cdiv_q_2exp(arg1: mpz_ptr, arg2: mpz_srcptr,
                              arg3: mp_bitcnt_t);
    pub fn __gmpz_cdiv_q_ui(arg1: mpz_ptr, arg2: mpz_srcptr,
                            arg3: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_ulong;
    pub fn __gmpz_cdiv_qr(arg1: mpz_ptr, arg2: mpz_ptr, arg3: mpz_srcptr,
                          arg4: mpz_srcptr);
    pub fn __gmpz_cdiv_qr_ui(arg1: mpz_ptr, arg2: mpz_ptr, arg3: mpz_srcptr,
                             arg4: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_ulong;
    pub fn __gmpz_cdiv_r(arg1: mpz_ptr, arg2: mpz_srcptr, arg3: mpz_srcptr);
    pub fn __gmpz_cdiv_r_2exp(arg1: mpz_ptr, arg2: mpz_srcptr,
                              arg3: mp_bitcnt_t);
    pub fn __gmpz_cdiv_r_ui(arg1: mpz_ptr, arg2: mpz_srcptr,
                            arg3: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_ulong;
    pub fn __gmpz_cdiv_ui(arg1: mpz_srcptr, arg2: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_ulong;
    pub fn __gmpz_clear(arg1: mpz_ptr);
    pub fn __gmpz_clears(arg1: mpz_ptr, ...);
    pub fn __gmpz_clrbit(arg1: mpz_ptr, arg2: mp_bitcnt_t);
    pub fn __gmpz_cmp(arg1: mpz_srcptr, arg2: mpz_srcptr)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_cmp_d(arg1: mpz_srcptr, arg2: ::std::os::raw::c_double)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_cmp_si(arg1: mpz_srcptr, arg2: ::std::os::raw::c_long)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_cmp_ui(arg1: mpz_srcptr, arg2: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_cmpabs(arg1: mpz_srcptr, arg2: mpz_srcptr)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_cmpabs_d(arg1: mpz_srcptr, arg2: ::std::os::raw::c_double)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_cmpabs_ui(arg1: mpz_srcptr, arg2: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_com(arg1: mpz_ptr, arg2: mpz_srcptr);
    pub fn __gmpz_combit(arg1: mpz_ptr, arg2: mp_bitcnt_t);
    pub fn __gmpz_congruent_p(arg1: mpz_srcptr, arg2: mpz_srcptr,
                              arg3: mpz_srcptr) -> ::std::os::raw::c_int;
    pub fn __gmpz_congruent_2exp_p(arg1: mpz_srcptr, arg2: mpz_srcptr,
                                   arg3: mp_bitcnt_t)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_congruent_ui_p(arg1: mpz_srcptr,
                                 arg2: ::std::os::raw::c_ulong,
                                 arg3: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_divexact(arg1: mpz_ptr, arg2: mpz_srcptr, arg3: mpz_srcptr);
    pub fn __gmpz_divexact_ui(arg1: mpz_ptr, arg2: mpz_srcptr,
                              arg3: ::std::os::raw::c_ulong);
    pub fn __gmpz_divisible_p(arg1: mpz_srcptr, arg2: mpz_srcptr)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_divisible_ui_p(arg1: mpz_srcptr,
                                 arg2: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_divisible_2exp_p(arg1: mpz_srcptr, arg2: mp_bitcnt_t)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_dump(arg1: mpz_srcptr);
    pub fn __gmpz_export(arg1: *mut ::std::os::raw::c_void, arg2: *mut size_t,
                         arg3: ::std::os::raw::c_int, arg4: size_t,
                         arg5: ::std::os::raw::c_int, arg6: size_t,
                         arg7: mpz_srcptr) -> *mut ::std::os::raw::c_void;
    pub fn __gmpz_fac_ui(arg1: mpz_ptr, arg2: ::std::os::raw::c_ulong);
    pub fn __gmpz_2fac_ui(arg1: mpz_ptr, arg2: ::std::os::raw::c_ulong);
    pub fn __gmpz_mfac_uiui(arg1: mpz_ptr, arg2: ::std::os::raw::c_ulong,
                            arg3: ::std::os::raw::c_ulong);
    pub fn __gmpz_primorial_ui(arg1: mpz_ptr, arg2: ::std::os::raw::c_ulong);
    pub fn __gmpz_fdiv_q(arg1: mpz_ptr, arg2: mpz_srcptr, arg3: mpz_srcptr);
    pub fn __gmpz_fdiv_q_2exp(arg1: mpz_ptr, arg2: mpz_srcptr,
                              arg3: mp_bitcnt_t);
    pub fn __gmpz_fdiv_q_ui(arg1: mpz_ptr, arg2: mpz_srcptr,
                            arg3: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_ulong;
    pub fn __gmpz_fdiv_qr(arg1: mpz_ptr, arg2: mpz_ptr, arg3: mpz_srcptr,
                          arg4: mpz_srcptr);
    pub fn __gmpz_fdiv_qr_ui(arg1: mpz_ptr, arg2: mpz_ptr, arg3: mpz_srcptr,
                             arg4: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_ulong;
    pub fn __gmpz_fdiv_r(arg1: mpz_ptr, arg2: mpz_srcptr, arg3: mpz_srcptr);
    pub fn __gmpz_fdiv_r_2exp(arg1: mpz_ptr, arg2: mpz_srcptr,
                              arg3: mp_bitcnt_t);
    pub fn __gmpz_fdiv_r_ui(arg1: mpz_ptr, arg2: mpz_srcptr,
                            arg3: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_ulong;
    pub fn __gmpz_fdiv_ui(arg1: mpz_srcptr, arg2: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_ulong;
    pub fn __gmpz_fib_ui(arg1: mpz_ptr, arg2: ::std::os::raw::c_ulong);
    pub fn __gmpz_fib2_ui(arg1: mpz_ptr, arg2: mpz_ptr,
                          arg3: ::std::os::raw::c_ulong);
    pub fn __gmpz_fits_sint_p(arg1: mpz_srcptr) -> ::std::os::raw::c_int;
    pub fn __gmpz_fits_slong_p(arg1: mpz_srcptr) -> ::std::os::raw::c_int;
    pub fn __gmpz_fits_sshort_p(arg1: mpz_srcptr) -> ::std::os::raw::c_int;
    pub fn __gmpz_fits_uint_p(__gmp_z: mpz_srcptr) -> ::std::os::raw::c_int;
    pub fn __gmpz_fits_ulong_p(__gmp_z: mpz_srcptr) -> ::std::os::raw::c_int;
    pub fn __gmpz_fits_ushort_p(__gmp_z: mpz_srcptr) -> ::std::os::raw::c_int;
    pub fn __gmpz_gcd(arg1: mpz_ptr, arg2: mpz_srcptr, arg3: mpz_srcptr);
    pub fn __gmpz_gcd_ui(arg1: mpz_ptr, arg2: mpz_srcptr,
                         arg3: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_ulong;
    pub fn __gmpz_gcdext(arg1: mpz_ptr, arg2: mpz_ptr, arg3: mpz_ptr,
                         arg4: mpz_srcptr, arg5: mpz_srcptr);
    pub fn __gmpz_get_d(arg1: mpz_srcptr) -> ::std::os::raw::c_double;
    pub fn __gmpz_get_d_2exp(arg1: *mut ::std::os::raw::c_long,
                             arg2: mpz_srcptr) -> ::std::os::raw::c_double;
    pub fn __gmpz_get_si(arg1: mpz_srcptr) -> ::std::os::raw::c_long;
    pub fn __gmpz_get_str(arg1: *mut ::std::os::raw::c_char,
                          arg2: ::std::os::raw::c_int, arg3: mpz_srcptr)
     -> *mut ::std::os::raw::c_char;
    pub fn __gmpz_get_ui(__gmp_z: mpz_srcptr) -> ::std::os::raw::c_ulong;
    pub fn __gmpz_getlimbn(__gmp_z: mpz_srcptr, __gmp_n: mp_size_t)
     -> mp_limb_t;
    pub fn __gmpz_hamdist(arg1: mpz_srcptr, arg2: mpz_srcptr) -> mp_bitcnt_t;
    pub fn __gmpz_import(arg1: mpz_ptr, arg2: size_t,
                         arg3: ::std::os::raw::c_int, arg4: size_t,
                         arg5: ::std::os::raw::c_int, arg6: size_t,
                         arg7: *const ::std::os::raw::c_void);
    pub fn __gmpz_init(arg1: mpz_ptr);
    pub fn __gmpz_init2(arg1: mpz_ptr, arg2: mp_bitcnt_t);
    pub fn __gmpz_inits(arg1: mpz_ptr, ...);
    pub fn __gmpz_init_set(arg1: mpz_ptr, arg2: mpz_srcptr);
    pub fn __gmpz_init_set_d(arg1: mpz_ptr, arg2: ::std::os::raw::c_double);
    pub fn __gmpz_init_set_si(arg1: mpz_ptr, arg2: ::std::os::raw::c_long);
    pub fn __gmpz_init_set_str(arg1: mpz_ptr,
                               arg2: *const ::std::os::raw::c_char,
                               arg3: ::std::os::raw::c_int)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_init_set_ui(arg1: mpz_ptr, arg2: ::std::os::raw::c_ulong);
    pub fn __gmpz_invert(arg1: mpz_ptr, arg2: mpz_srcptr, arg3: mpz_srcptr)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_ior(arg1: mpz_ptr, arg2: mpz_srcptr, arg3: mpz_srcptr);
    pub fn __gmpz_jacobi(arg1: mpz_srcptr, arg2: mpz_srcptr)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_kronecker_si(arg1: mpz_srcptr, arg2: ::std::os::raw::c_long)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_kronecker_ui(arg1: mpz_srcptr,
                               arg2: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_si_kronecker(arg1: ::std::os::raw::c_long, arg2: mpz_srcptr)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_ui_kronecker(arg1: ::std::os::raw::c_ulong,
                               arg2: mpz_srcptr) -> ::std::os::raw::c_int;
    pub fn __gmpz_lcm(arg1: mpz_ptr, arg2: mpz_srcptr, arg3: mpz_srcptr);
    pub fn __gmpz_lcm_ui(arg1: mpz_ptr, arg2: mpz_srcptr,
                         arg3: ::std::os::raw::c_ulong);
    pub fn __gmpz_lucnum_ui(arg1: mpz_ptr, arg2: ::std::os::raw::c_ulong);
    pub fn __gmpz_lucnum2_ui(arg1: mpz_ptr, arg2: mpz_ptr,
                             arg3: ::std::os::raw::c_ulong);
    pub fn __gmpz_millerrabin(arg1: mpz_srcptr, arg2: ::std::os::raw::c_int)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_mod(arg1: mpz_ptr, arg2: mpz_srcptr, arg3: mpz_srcptr);
    pub fn __gmpz_mul(arg1: mpz_ptr, arg2: mpz_srcptr, arg3: mpz_srcptr);
    pub fn __gmpz_mul_2exp(arg1: mpz_ptr, arg2: mpz_srcptr,
                           arg3: mp_bitcnt_t);
    pub fn __gmpz_mul_si(arg1: mpz_ptr, arg2: mpz_srcptr,
                         arg3: ::std::os::raw::c_long);
    pub fn __gmpz_mul_ui(arg1: mpz_ptr, arg2: mpz_srcptr,
                         arg3: ::std::os::raw::c_ulong);
    pub fn __gmpz_neg(__gmp_w: mpz_ptr, __gmp_u: mpz_srcptr);
    pub fn __gmpz_nextprime(arg1: mpz_ptr, arg2: mpz_srcptr);
    pub fn __gmpz_perfect_power_p(arg1: mpz_srcptr) -> ::std::os::raw::c_int;
    pub fn __gmpz_perfect_square_p(__gmp_a: mpz_srcptr)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_popcount(__gmp_u: mpz_srcptr) -> mp_bitcnt_t;
    pub fn __gmpz_pow_ui(arg1: mpz_ptr, arg2: mpz_srcptr,
                         arg3: ::std::os::raw::c_ulong);
    pub fn __gmpz_powm(arg1: mpz_ptr, arg2: mpz_srcptr, arg3: mpz_srcptr,
                       arg4: mpz_srcptr);
    pub fn __gmpz_powm_sec(arg1: mpz_ptr, arg2: mpz_srcptr, arg3: mpz_srcptr,
                           arg4: mpz_srcptr);
    pub fn __gmpz_powm_ui(arg1: mpz_ptr, arg2: mpz_srcptr,
                          arg3: ::std::os::raw::c_ulong, arg4: mpz_srcptr);
    pub fn __gmpz_probab_prime_p(arg1: mpz_srcptr,
                                 arg2: ::std::os::raw::c_int)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_random(arg1: mpz_ptr, arg2: mp_size_t);
    pub fn __gmpz_random2(arg1: mpz_ptr, arg2: mp_size_t);
    pub fn __gmpz_realloc2(arg1: mpz_ptr, arg2: mp_bitcnt_t);
    pub fn __gmpz_remove(arg1: mpz_ptr, arg2: mpz_srcptr, arg3: mpz_srcptr)
     -> mp_bitcnt_t;
    pub fn __gmpz_root(arg1: mpz_ptr, arg2: mpz_srcptr,
                       arg3: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_rootrem(arg1: mpz_ptr, arg2: mpz_ptr, arg3: mpz_srcptr,
                          arg4: ::std::os::raw::c_ulong);
    pub fn __gmpz_rrandomb(arg1: mpz_ptr, arg2: gmp_randstate_ptr,
                           arg3: mp_bitcnt_t);
    pub fn __gmpz_scan0(arg1: mpz_srcptr, arg2: mp_bitcnt_t) -> mp_bitcnt_t;
    pub fn __gmpz_scan1(arg1: mpz_srcptr, arg2: mp_bitcnt_t) -> mp_bitcnt_t;
    pub fn __gmpz_set(arg1: mpz_ptr, arg2: mpz_srcptr);
    pub fn __gmpz_set_d(arg1: mpz_ptr, arg2: ::std::os::raw::c_double);
    pub fn __gmpz_set_f(arg1: mpz_ptr, arg2: mpf_srcptr);
    pub fn __gmpz_set_q(__gmp_w: mpz_ptr, __gmp_u: mpq_srcptr);
    pub fn __gmpz_set_si(arg1: mpz_ptr, arg2: ::std::os::raw::c_long);
    pub fn __gmpz_set_str(arg1: mpz_ptr, arg2: *const ::std::os::raw::c_char,
                          arg3: ::std::os::raw::c_int)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_set_ui(arg1: mpz_ptr, arg2: ::std::os::raw::c_ulong);
    pub fn __gmpz_setbit(arg1: mpz_ptr, arg2: mp_bitcnt_t);
    pub fn __gmpz_size(__gmp_z: mpz_srcptr) -> size_t;
    pub fn __gmpz_sizeinbase(arg1: mpz_srcptr, arg2: ::std::os::raw::c_int)
     -> size_t;
    pub fn __gmpz_sqrt(arg1: mpz_ptr, arg2: mpz_srcptr);
    pub fn __gmpz_sqrtrem(arg1: mpz_ptr, arg2: mpz_ptr, arg3: mpz_srcptr);
    pub fn __gmpz_sub(arg1: mpz_ptr, arg2: mpz_srcptr, arg3: mpz_srcptr);
    pub fn __gmpz_sub_ui(arg1: mpz_ptr, arg2: mpz_srcptr,
                         arg3: ::std::os::raw::c_ulong);
    pub fn __gmpz_ui_sub(arg1: mpz_ptr, arg2: ::std::os::raw::c_ulong,
                         arg3: mpz_srcptr);
    pub fn __gmpz_submul(arg1: mpz_ptr, arg2: mpz_srcptr, arg3: mpz_srcptr);
    pub fn __gmpz_submul_ui(arg1: mpz_ptr, arg2: mpz_srcptr,
                            arg3: ::std::os::raw::c_ulong);
    pub fn __gmpz_swap(arg1: mpz_ptr, arg2: mpz_ptr);
    pub fn __gmpz_tdiv_ui(arg1: mpz_srcptr, arg2: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_ulong;
    pub fn __gmpz_tdiv_q(arg1: mpz_ptr, arg2: mpz_srcptr, arg3: mpz_srcptr);
    pub fn __gmpz_tdiv_q_2exp(arg1: mpz_ptr, arg2: mpz_srcptr,
                              arg3: mp_bitcnt_t);
    pub fn __gmpz_tdiv_q_ui(arg1: mpz_ptr, arg2: mpz_srcptr,
                            arg3: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_ulong;
    pub fn __gmpz_tdiv_qr(arg1: mpz_ptr, arg2: mpz_ptr, arg3: mpz_srcptr,
                          arg4: mpz_srcptr);
    pub fn __gmpz_tdiv_qr_ui(arg1: mpz_ptr, arg2: mpz_ptr, arg3: mpz_srcptr,
                             arg4: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_ulong;
    pub fn __gmpz_tdiv_r(arg1: mpz_ptr, arg2: mpz_srcptr, arg3: mpz_srcptr);
    pub fn __gmpz_tdiv_r_2exp(arg1: mpz_ptr, arg2: mpz_srcptr,
                              arg3: mp_bitcnt_t);
    pub fn __gmpz_tdiv_r_ui(arg1: mpz_ptr, arg2: mpz_srcptr,
                            arg3: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_ulong;
    pub fn __gmpz_tstbit(arg1: mpz_srcptr, arg2: mp_bitcnt_t)
     -> ::std::os::raw::c_int;
    pub fn __gmpz_ui_pow_ui(arg1: mpz_ptr, arg2: ::std::os::raw::c_ulong,
                            arg3: ::std::os::raw::c_ulong);
    pub fn __gmpz_urandomb(arg1: mpz_ptr, arg2: gmp_randstate_ptr,
                           arg3: mp_bitcnt_t);
    pub fn __gmpz_urandomm(arg1: mpz_ptr, arg2: gmp_randstate_ptr,
                           arg3: mpz_srcptr);
    pub fn __gmpz_xor(arg1: mpz_ptr, arg2: mpz_srcptr, arg3: mpz_srcptr);
    pub fn __gmpz_limbs_read(arg1: mpz_srcptr) -> mp_srcptr;
    pub fn __gmpz_limbs_write(arg1: mpz_ptr, arg2: mp_size_t) -> mp_ptr;
    pub fn __gmpz_limbs_modify(arg1: mpz_ptr, arg2: mp_size_t) -> mp_ptr;
    pub fn __gmpz_limbs_finish(arg1: mpz_ptr, arg2: mp_size_t);
    pub fn __gmpz_roinit_n(arg1: mpz_ptr, arg2: mp_srcptr, arg3: mp_size_t)
     -> mpz_srcptr;
    pub fn __gmpq_abs(__gmp_w: mpq_ptr, __gmp_u: mpq_srcptr);
    pub fn __gmpq_add(arg1: mpq_ptr, arg2: mpq_srcptr, arg3: mpq_srcptr);
    pub fn __gmpq_canonicalize(arg1: mpq_ptr);
    pub fn __gmpq_clear(arg1: mpq_ptr);
    pub fn __gmpq_clears(arg1: mpq_ptr, ...);
    pub fn __gmpq_cmp(arg1: mpq_srcptr, arg2: mpq_srcptr)
     -> ::std::os::raw::c_int;
    pub fn __gmpq_cmp_si(arg1: mpq_srcptr, arg2: ::std::os::raw::c_long,
                         arg3: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_int;
    pub fn __gmpq_cmp_ui(arg1: mpq_srcptr, arg2: ::std::os::raw::c_ulong,
                         arg3: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_int;
    pub fn __gmpq_cmp_z(arg1: mpq_srcptr, arg2: mpz_srcptr)
     -> ::std::os::raw::c_int;
    pub fn __gmpq_div(arg1: mpq_ptr, arg2: mpq_srcptr, arg3: mpq_srcptr);
    pub fn __gmpq_div_2exp(arg1: mpq_ptr, arg2: mpq_srcptr,
                           arg3: mp_bitcnt_t);
    pub fn __gmpq_equal(arg1: mpq_srcptr, arg2: mpq_srcptr)
     -> ::std::os::raw::c_int;
    pub fn __gmpq_get_num(arg1: mpz_ptr, arg2: mpq_srcptr);
    pub fn __gmpq_get_den(arg1: mpz_ptr, arg2: mpq_srcptr);
    pub fn __gmpq_get_d(arg1: mpq_srcptr) -> ::std::os::raw::c_double;
    pub fn __gmpq_get_str(arg1: *mut ::std::os::raw::c_char,
                          arg2: ::std::os::raw::c_int, arg3: mpq_srcptr)
     -> *mut ::std::os::raw::c_char;
    pub fn __gmpq_init(arg1: mpq_ptr);
    pub fn __gmpq_inits(arg1: mpq_ptr, ...);
    pub fn __gmpq_inv(arg1: mpq_ptr, arg2: mpq_srcptr);
    pub fn __gmpq_mul(arg1: mpq_ptr, arg2: mpq_srcptr, arg3: mpq_srcptr);
    pub fn __gmpq_mul_2exp(arg1: mpq_ptr, arg2: mpq_srcptr,
                           arg3: mp_bitcnt_t);
    pub fn __gmpq_neg(__gmp_w: mpq_ptr, __gmp_u: mpq_srcptr);
    pub fn __gmpq_set(arg1: mpq_ptr, arg2: mpq_srcptr);
    pub fn __gmpq_set_d(arg1: mpq_ptr, arg2: ::std::os::raw::c_double);
    pub fn __gmpq_set_den(arg1: mpq_ptr, arg2: mpz_srcptr);
    pub fn __gmpq_set_f(arg1: mpq_ptr, arg2: mpf_srcptr);
    pub fn __gmpq_set_num(arg1: mpq_ptr, arg2: mpz_srcptr);
    pub fn __gmpq_set_si(arg1: mpq_ptr, arg2: ::std::os::raw::c_long,
                         arg3: ::std::os::raw::c_ulong);
    pub fn __gmpq_set_str(arg1: mpq_ptr, arg2: *const ::std::os::raw::c_char,
                          arg3: ::std::os::raw::c_int)
     -> ::std::os::raw::c_int;
    pub fn __gmpq_set_ui(arg1: mpq_ptr, arg2: ::std::os::raw::c_ulong,
                         arg3: ::std::os::raw::c_ulong);
    pub fn __gmpq_set_z(arg1: mpq_ptr, arg2: mpz_srcptr);
    pub fn __gmpq_sub(arg1: mpq_ptr, arg2: mpq_srcptr, arg3: mpq_srcptr);
    pub fn __gmpq_swap(arg1: mpq_ptr, arg2: mpq_ptr);
    pub fn __gmpf_abs(arg1: mpf_ptr, arg2: mpf_srcptr);
    pub fn __gmpf_add(arg1: mpf_ptr, arg2: mpf_srcptr, arg3: mpf_srcptr);
    pub fn __gmpf_add_ui(arg1: mpf_ptr, arg2: mpf_srcptr,
                         arg3: ::std::os::raw::c_ulong);
    pub fn __gmpf_ceil(arg1: mpf_ptr, arg2: mpf_srcptr);
    pub fn __gmpf_clear(arg1: mpf_ptr);
    pub fn __gmpf_clears(arg1: mpf_ptr, ...);
    pub fn __gmpf_cmp(arg1: mpf_srcptr, arg2: mpf_srcptr)
     -> ::std::os::raw::c_int;
    pub fn __gmpf_cmp_z(arg1: mpf_srcptr, arg2: mpz_srcptr)
     -> ::std::os::raw::c_int;
    pub fn __gmpf_cmp_d(arg1: mpf_srcptr, arg2: ::std::os::raw::c_double)
     -> ::std::os::raw::c_int;
    pub fn __gmpf_cmp_si(arg1: mpf_srcptr, arg2: ::std::os::raw::c_long)
     -> ::std::os::raw::c_int;
    pub fn __gmpf_cmp_ui(arg1: mpf_srcptr, arg2: ::std::os::raw::c_ulong)
     -> ::std::os::raw::c_int;
    pub fn __gmpf_div(arg1: mpf_ptr, arg2: mpf_srcptr, arg3: mpf_srcptr);
    pub fn __gmpf_div_2exp(arg1: mpf_ptr, arg2: mpf_srcptr,
                           arg3: mp_bitcnt_t);
    pub fn __gmpf_div_ui(arg1: mpf_ptr, arg2: mpf_srcptr,
                         arg3: ::std::os::raw::c_ulong);
    pub fn __gmpf_dump(arg1: mpf_srcptr);
    pub fn __gmpf_eq(arg1: mpf_srcptr, arg2: mpf_srcptr, arg3: mp_bitcnt_t)
     -> ::std::os::raw::c_int;
    pub fn __gmpf_fits_sint_p(arg1: mpf_srcptr) -> ::std::os::raw::c_int;
    pub fn __gmpf_fits_slong_p(arg1: mpf_srcptr) -> ::std::os::raw::c_int;
    pub fn __gmpf_fits_sshort_p(arg1: mpf_srcptr) -> ::std::os::raw::c_int;
    pub fn __gmpf_fits_uint_p(arg1: mpf_srcptr) -> ::std::os::raw::c_int;
    pub fn __gmpf_fits_ulong_p(arg1: mpf_srcptr) -> ::std::os::raw::c_int;
    pub fn __gmpf_fits_ushort_p(arg1: mpf_srcptr) -> ::std::os::raw::c_int;
    pub fn __gmpf_floor(arg1: mpf_ptr, arg2: mpf_srcptr);
    pub fn __gmpf_get_d(arg1: mpf_srcptr) -> ::std::os::raw::c_double;
    pub fn __gmpf_get_d_2exp(arg1: *mut ::std::os::raw::c_long,
                             arg2: mpf_srcptr) -> ::std::os::raw::c_double;
    pub fn __gmpf_get_default_prec() -> mp_bitcnt_t;
    pub fn __gmpf_get_prec(arg1: mpf_srcptr) -> mp_bitcnt_t;
    pub fn __gmpf_get_si(arg1: mpf_srcptr) -> ::std::os::raw::c_long;
    pub fn __gmpf_get_str(arg1: *mut ::std::os::raw::c_char,
                          arg2: *mut mp_exp_t, arg3: ::std::os::raw::c_int,
                          arg4: size_t, arg5: mpf_srcptr)
     -> *mut ::std::os::raw::c_char;
    pub fn __gmpf_get_ui(arg1: mpf_srcptr) -> ::std::os::raw::c_ulong;
    pub fn __gmpf_init(arg1: mpf_ptr);
    pub fn __gmpf_init2(arg1: mpf_ptr, arg2: mp_bitcnt_t);
    pub fn __gmpf_inits(arg1: mpf_ptr, ...);
    pub fn __gmpf_init_set(arg1: mpf_ptr, arg2: mpf_srcptr);
    pub fn __gmpf_init_set_d(arg1: mpf_ptr, arg2: ::std::os::raw::c_double);
    pub fn __gmpf_init_set_si(arg1: mpf_ptr, arg2: ::std::os::raw::c_long);
    pub fn __gmpf_init_set_str(arg1: mpf_ptr,
                               arg2: *const ::std::os::raw::c_char,
                               arg3: ::std::os::raw::c_int)
     -> ::std::os::raw::c_int;
    pub fn __gmpf_init_set_ui(arg1: mpf_ptr, arg2: ::std::os::raw::c_ulong);
    pub fn __gmpf_integer_p(arg1: mpf_srcptr) -> ::std::os::raw::c_int;
    pub fn __gmpf_mul(arg1: mpf_ptr, arg2: mpf_srcptr, arg3: mpf_srcptr);
    pub fn __gmpf_mul_2exp(arg1: mpf_ptr, arg2: mpf_srcptr,
                           arg3: mp_bitcnt_t);
    pub fn __gmpf_mul_ui(arg1: mpf_ptr, arg2: mpf_srcptr,
                         arg3: ::std::os::raw::c_ulong);
    pub fn __gmpf_neg(arg1: mpf_ptr, arg2: mpf_srcptr);
    pub fn __gmpf_pow_ui(arg1: mpf_ptr, arg2: mpf_srcptr,
                         arg3: ::std::os::raw::c_ulong);
    pub fn __gmpf_random2(arg1: mpf_ptr, arg2: mp_size_t, arg3: mp_exp_t);
    pub fn __gmpf_reldiff(arg1: mpf_ptr, arg2: mpf_srcptr, arg3: mpf_srcptr);
    pub fn __gmpf_set(arg1: mpf_ptr, arg2: mpf_srcptr);
    pub fn __gmpf_set_d(arg1: mpf_ptr, arg2: ::std::os::raw::c_double);
    pub fn __gmpf_set_default_prec(arg1: mp_bitcnt_t);
    pub fn __gmpf_set_prec(arg1: mpf_ptr, arg2: mp_bitcnt_t);
    pub fn __gmpf_set_prec_raw(arg1: mpf_ptr, arg2: mp_bitcnt_t);
    pub fn __gmpf_set_q(arg1: mpf_ptr, arg2: mpq_srcptr);
    pub fn __gmpf_set_si(arg1: mpf_ptr, arg2: ::std::os::raw::c_long);
    pub fn __gmpf_set_str(arg1: mpf_ptr, arg2: *const ::std::os::raw::c_char,
                          arg3: ::std::os::raw::c_int)
     -> ::std::os::raw::c_int;
    pub fn __gmpf_set_ui(arg1: mpf_ptr, arg2: ::std::os::raw::c_ulong);
    pub fn __gmpf_set_z(arg1: mpf_ptr, arg2: mpz_srcptr);
    pub fn __gmpf_size(arg1: mpf_srcptr) -> size_t;
    pub fn __gmpf_sqrt(arg1: mpf_ptr, arg2: mpf_srcptr);
    pub fn __gmpf_sqrt_ui(arg1: mpf_ptr, arg2: ::std::os::raw::c_ulong);
    pub fn __gmpf_sub(arg1: mpf_ptr, arg2: mpf_srcptr, arg3: mpf_srcptr);
    pub fn __gmpf_sub_ui(arg1: mpf_ptr, arg2: mpf_srcptr,
                         arg3: ::std::os::raw::c_ulong);
    pub fn __gmpf_swap(arg1: mpf_ptr, arg2: mpf_ptr);
    pub fn __gmpf_trunc(arg1: mpf_ptr, arg2: mpf_srcptr);
    pub fn __gmpf_ui_div(arg1: mpf_ptr, arg2: ::std::os::raw::c_ulong,
                         arg3: mpf_srcptr);
    pub fn __gmpf_ui_sub(arg1: mpf_ptr, arg2: ::std::os::raw::c_ulong,
                         arg3: mpf_srcptr);
    pub fn __gmpf_urandomb(arg1: mpf_t, arg2: gmp_randstate_ptr,
                           arg3: mp_bitcnt_t);
    pub fn __gmpn_add(__gmp_wp: mp_ptr, __gmp_xp: mp_srcptr,
                      __gmp_xsize: mp_size_t, __gmp_yp: mp_srcptr,
                      __gmp_ysize: mp_size_t) -> mp_limb_t;
    pub fn __gmpn_add_1(__gmp_dst: mp_ptr, __gmp_src: mp_srcptr,
                        __gmp_size: mp_size_t, __gmp_n: mp_limb_t)
     -> mp_limb_t;
    pub fn __gmpn_add_n(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_srcptr,
                        arg4: mp_size_t) -> mp_limb_t;
    pub fn __gmpn_addmul_1(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_size_t,
                           arg4: mp_limb_t) -> mp_limb_t;
    pub fn __gmpn_cmp(__gmp_xp: mp_srcptr, __gmp_yp: mp_srcptr,
                      __gmp_size: mp_size_t) -> ::std::os::raw::c_int;
    pub fn __gmpn_zero_p(__gmp_p: mp_srcptr, __gmp_n: mp_size_t)
     -> ::std::os::raw::c_int;
    pub fn __gmpn_divexact_1(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_size_t,
                             arg4: mp_limb_t);
    pub fn __gmpn_divexact_by3c(arg1: mp_ptr, arg2: mp_srcptr,
                                arg3: mp_size_t, arg4: mp_limb_t)
     -> mp_limb_t;
    pub fn __gmpn_divrem(arg1: mp_ptr, arg2: mp_size_t, arg3: mp_ptr,
                         arg4: mp_size_t, arg5: mp_srcptr, arg6: mp_size_t)
     -> mp_limb_t;
    pub fn __gmpn_divrem_1(arg1: mp_ptr, arg2: mp_size_t, arg3: mp_srcptr,
                           arg4: mp_size_t, arg5: mp_limb_t) -> mp_limb_t;
    pub fn __gmpn_divrem_2(arg1: mp_ptr, arg2: mp_size_t, arg3: mp_ptr,
                           arg4: mp_size_t, arg5: mp_srcptr) -> mp_limb_t;
    pub fn __gmpn_div_qr_1(arg1: mp_ptr, arg2: *mut mp_limb_t,
                           arg3: mp_srcptr, arg4: mp_size_t, arg5: mp_limb_t)
     -> mp_limb_t;
    pub fn __gmpn_div_qr_2(arg1: mp_ptr, arg2: mp_ptr, arg3: mp_srcptr,
                           arg4: mp_size_t, arg5: mp_srcptr) -> mp_limb_t;
    pub fn __gmpn_gcd(arg1: mp_ptr, arg2: mp_ptr, arg3: mp_size_t,
                      arg4: mp_ptr, arg5: mp_size_t) -> mp_size_t;
    pub fn __gmpn_gcd_1(arg1: mp_srcptr, arg2: mp_size_t, arg3: mp_limb_t)
     -> mp_limb_t;
    pub fn __gmpn_gcdext_1(arg1: *mut mp_limb_signed_t,
                           arg2: *mut mp_limb_signed_t, arg3: mp_limb_t,
                           arg4: mp_limb_t) -> mp_limb_t;
    pub fn __gmpn_gcdext(arg1: mp_ptr, arg2: mp_ptr, arg3: *mut mp_size_t,
                         arg4: mp_ptr, arg5: mp_size_t, arg6: mp_ptr,
                         arg7: mp_size_t) -> mp_size_t;
    pub fn __gmpn_get_str(arg1: *mut ::std::os::raw::c_uchar,
                          arg2: ::std::os::raw::c_int, arg3: mp_ptr,
                          arg4: mp_size_t) -> size_t;
    pub fn __gmpn_hamdist(arg1: mp_srcptr, arg2: mp_srcptr, arg3: mp_size_t)
     -> mp_bitcnt_t;
    pub fn __gmpn_lshift(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_size_t,
                         arg4: ::std::os::raw::c_uint) -> mp_limb_t;
    pub fn __gmpn_mod_1(arg1: mp_srcptr, arg2: mp_size_t, arg3: mp_limb_t)
     -> mp_limb_t;
    pub fn __gmpn_mul(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_size_t,
                      arg4: mp_srcptr, arg5: mp_size_t) -> mp_limb_t;
    pub fn __gmpn_mul_1(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_size_t,
                        arg4: mp_limb_t) -> mp_limb_t;
    pub fn __gmpn_mul_n(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_srcptr,
                        arg4: mp_size_t);
    pub fn __gmpn_sqr(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_size_t);
    pub fn __gmpn_neg(__gmp_rp: mp_ptr, __gmp_up: mp_srcptr,
                      __gmp_n: mp_size_t) -> mp_limb_t;
    pub fn __gmpn_com(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_size_t);
    pub fn __gmpn_perfect_square_p(arg1: mp_srcptr, arg2: mp_size_t)
     -> ::std::os::raw::c_int;
    pub fn __gmpn_perfect_power_p(arg1: mp_srcptr, arg2: mp_size_t)
     -> ::std::os::raw::c_int;
    pub fn __gmpn_popcount(arg1: mp_srcptr, arg2: mp_size_t) -> mp_bitcnt_t;
    pub fn __gmpn_pow_1(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_size_t,
                        arg4: mp_limb_t, arg5: mp_ptr) -> mp_size_t;
    pub fn __gmpn_preinv_mod_1(arg1: mp_srcptr, arg2: mp_size_t,
                               arg3: mp_limb_t, arg4: mp_limb_t) -> mp_limb_t;
    pub fn __gmpn_random(arg1: mp_ptr, arg2: mp_size_t);
    pub fn __gmpn_random2(arg1: mp_ptr, arg2: mp_size_t);
    pub fn __gmpn_rshift(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_size_t,
                         arg4: ::std::os::raw::c_uint) -> mp_limb_t;
    pub fn __gmpn_scan0(arg1: mp_srcptr, arg2: mp_bitcnt_t) -> mp_bitcnt_t;
    pub fn __gmpn_scan1(arg1: mp_srcptr, arg2: mp_bitcnt_t) -> mp_bitcnt_t;
    pub fn __gmpn_set_str(arg1: mp_ptr, arg2: *const ::std::os::raw::c_uchar,
                          arg3: size_t, arg4: ::std::os::raw::c_int)
     -> mp_size_t;
    pub fn __gmpn_sizeinbase(arg1: mp_srcptr, arg2: mp_size_t,
                             arg3: ::std::os::raw::c_int) -> size_t;
    pub fn __gmpn_sqrtrem(arg1: mp_ptr, arg2: mp_ptr, arg3: mp_srcptr,
                          arg4: mp_size_t) -> mp_size_t;
    pub fn __gmpn_sub(__gmp_wp: mp_ptr, __gmp_xp: mp_srcptr,
                      __gmp_xsize: mp_size_t, __gmp_yp: mp_srcptr,
                      __gmp_ysize: mp_size_t) -> mp_limb_t;
    pub fn __gmpn_sub_1(__gmp_dst: mp_ptr, __gmp_src: mp_srcptr,
                        __gmp_size: mp_size_t, __gmp_n: mp_limb_t)
     -> mp_limb_t;
    pub fn __gmpn_sub_n(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_srcptr,
                        arg4: mp_size_t) -> mp_limb_t;
    pub fn __gmpn_submul_1(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_size_t,
                           arg4: mp_limb_t) -> mp_limb_t;
    pub fn __gmpn_tdiv_qr(arg1: mp_ptr, arg2: mp_ptr, arg3: mp_size_t,
                          arg4: mp_srcptr, arg5: mp_size_t, arg6: mp_srcptr,
                          arg7: mp_size_t);
    pub fn __gmpn_and_n(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_srcptr,
                        arg4: mp_size_t);
    pub fn __gmpn_andn_n(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_srcptr,
                         arg4: mp_size_t);
    pub fn __gmpn_nand_n(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_srcptr,
                         arg4: mp_size_t);
    pub fn __gmpn_ior_n(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_srcptr,
                        arg4: mp_size_t);
    pub fn __gmpn_iorn_n(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_srcptr,
                         arg4: mp_size_t);
    pub fn __gmpn_nior_n(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_srcptr,
                         arg4: mp_size_t);
    pub fn __gmpn_xor_n(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_srcptr,
                        arg4: mp_size_t);
    pub fn __gmpn_xnor_n(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_srcptr,
                         arg4: mp_size_t);
    pub fn __gmpn_copyi(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_size_t);
    pub fn __gmpn_copyd(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_size_t);
    pub fn __gmpn_zero(arg1: mp_ptr, arg2: mp_size_t);
    pub fn __gmpn_cnd_add_n(arg1: mp_limb_t, arg2: mp_ptr, arg3: mp_srcptr,
                            arg4: mp_srcptr, arg5: mp_size_t) -> mp_limb_t;
    pub fn __gmpn_cnd_sub_n(arg1: mp_limb_t, arg2: mp_ptr, arg3: mp_srcptr,
                            arg4: mp_srcptr, arg5: mp_size_t) -> mp_limb_t;
    pub fn __gmpn_sec_add_1(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_size_t,
                            arg4: mp_limb_t, arg5: mp_ptr) -> mp_limb_t;
    pub fn __gmpn_sec_add_1_itch(arg1: mp_size_t) -> mp_size_t;
    pub fn __gmpn_sec_sub_1(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_size_t,
                            arg4: mp_limb_t, arg5: mp_ptr) -> mp_limb_t;
    pub fn __gmpn_sec_sub_1_itch(arg1: mp_size_t) -> mp_size_t;
    pub fn __gmpn_cnd_swap(arg1: mp_limb_t, arg2: *mut mp_limb_t,
                           arg3: *mut mp_limb_t, arg4: mp_size_t);
    pub fn __gmpn_sec_mul(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_size_t,
                          arg4: mp_srcptr, arg5: mp_size_t, arg6: mp_ptr);
    pub fn __gmpn_sec_mul_itch(arg1: mp_size_t, arg2: mp_size_t) -> mp_size_t;
    pub fn __gmpn_sec_sqr(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_size_t,
                          arg4: mp_ptr);
    pub fn __gmpn_sec_sqr_itch(arg1: mp_size_t) -> mp_size_t;
    pub fn __gmpn_sec_powm(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_size_t,
                           arg4: mp_srcptr, arg5: mp_bitcnt_t,
                           arg6: mp_srcptr, arg7: mp_size_t, arg8: mp_ptr);
    pub fn __gmpn_sec_powm_itch(arg1: mp_size_t, arg2: mp_bitcnt_t,
                                arg3: mp_size_t) -> mp_size_t;
    pub fn __gmpn_sec_tabselect(arg1: *mut mp_limb_t, arg2: *const mp_limb_t,
                                arg3: mp_size_t, arg4: mp_size_t,
                                arg5: mp_size_t);
    pub fn __gmpn_sec_div_qr(arg1: mp_ptr, arg2: mp_ptr, arg3: mp_size_t,
                             arg4: mp_srcptr, arg5: mp_size_t, arg6: mp_ptr)
     -> mp_limb_t;
    pub fn __gmpn_sec_div_qr_itch(arg1: mp_size_t, arg2: mp_size_t)
     -> mp_size_t;
    pub fn __gmpn_sec_div_r(arg1: mp_ptr, arg2: mp_size_t, arg3: mp_srcptr,
                            arg4: mp_size_t, arg5: mp_ptr);
    pub fn __gmpn_sec_div_r_itch(arg1: mp_size_t, arg2: mp_size_t)
     -> mp_size_t;
    pub fn __gmpn_sec_invert(arg1: mp_ptr, arg2: mp_ptr, arg3: mp_srcptr,
                             arg4: mp_size_t, arg5: mp_bitcnt_t, arg6: mp_ptr)
     -> ::std::os::raw::c_int;
    pub fn __gmpn_sec_invert_itch(arg1: mp_size_t) -> mp_size_t;
}