Commits
Marcus Calhoun-Lopez authored and Perry E. Metzger committed c1577d43301
1 - | From 04ac00a8126a0b328e231e01ab4b257b28c5da3c Mon Sep 17 00:00:00 2001 |
2 - | From: Paolo Bonzini <bonzini@gnu.org> |
3 - | Date: Fri, 8 Jan 2010 16:00:36 +0100 |
4 - | Subject: [PATCH] hack to build with GMP 5 |
5 - | |
6 - | libgst: |
7 - | 2010-01-08 Paolo Bonzini <bonzini@gnu.org> |
8 - | |
9 - | * libgst/mpz.c: Hack to build with GMP 5. |
10 - | --- |
11 - | libgst/ChangeLog | 4 ++++ |
12 - | libgst/mpz.c | 20 ++++++++++++++++++-- |
13 - | 2 files changed, 22 insertions(+), 2 deletions(-) |
14 - | |
15 - | diff --git a/libgst/mpz.c b/libgst/mpz.c |
16 - | index eaee0e8..d8e8b6b 100644 |
17 - | --- a/libgst/mpz.c |
18 - | +++ b/libgst/mpz.c |
19 - | |
20 - | } |
21 - | } |
22 - | |
23 - | +#if __GNU_MP_VERSION >= 5 |
24 - | +extern void __gmpn_divexact (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); |
25 - | +#endif |
26 - | + |
27 - | void |
28 - | _gst_mpz_divexact (gst_mpz *quot, const gst_mpz *num, const gst_mpz *den) |
29 - | { |
30 - | - mp_ptr qp, tp; |
31 - | + mp_ptr qp; |
32 - | mp_srcptr np, dp; |
33 - | - mp_size_t nsize, dsize, qsize, d_zero_limbs; |
34 - | + mp_size_t nsize, dsize, qsize; |
35 - | +#if __GNU_MP_VERSION < 5 |
36 - | + mp_ptr tp; |
37 - | + mp_size_t d_zero_limbs; |
38 - | int d_zero_bits; |
39 - | +#endif |
40 - | |
41 - | nsize = ABS (num->size); |
42 - | dsize = ABS (den->size); |
43 - | |
44 - | return; |
45 - | } |
46 - | |
47 - | +#if __GNU_MP_VERSION < 5 |
48 - | /* Avoid quadratic behaviour, but do it conservatively. */ |
49 - | if (nsize - dsize > 1500) |
50 - | { |
51 - | |
52 - | dsize -= d_zero_limbs; |
53 - | np += d_zero_limbs; |
54 - | nsize -= d_zero_limbs; |
55 - | +#endif |
56 - | |
57 - | /* Allocate where we place the result. It must be nsize limbs big |
58 - | because it also acts as a temporary area. */ |
59 - | |
60 - | gst_mpz_realloc (quot, nsize); |
61 - | qp = quot->d; |
62 - | |
63 - | +#if __GNU_MP_VERSION < 5 |
64 - | if (d_zero_bits != 0) |
65 - | { |
66 - | tp = (mp_ptr) alloca (dsize * SIZEOF_MP_LIMB_T); |
67 - | |
68 - | } |
69 - | else |
70 - | MPN_COPY(qp, np, nsize); |
71 - | +#endif |
72 - | |
73 - | qsize = nsize - dsize + 1; |
74 - | +#if __GNU_MP_VERSION < 5 |
75 - | mpn_bdivmod (qp, qp, nsize, dp, dsize, qsize * GMP_NUMB_BITS); |
76 - | +#else |
77 - | + __gmpn_divexact (qp, np, nsize, dp, dsize); |
78 - | +#endif |
79 - | quot->size = (num->size ^ den->size) >= 0 ? qsize : -qsize; |
80 - | } |
81 - | |
82 - | -- |
83 - | 1.6.4.3 |
84 - | |