File indexing completed on 2026-11-07 10:15:21
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #ifndef GMP_COMPAT_H
0013 #define GMP_COMPAT_H
0014
0015 #include <gmp.h>
0016 #include "longlong.h"
0017
0018 static inline
0019 void flint_mpz_add_uiui(mpz_ptr a, mpz_srcptr b, ulong c1, ulong c0)
0020 {
0021 ulong d[2];
0022 mpz_t c;
0023 d[0] = c0;
0024 d[1] = c1;
0025 c->_mp_d = d;
0026 c->_mp_alloc = 2;
0027 c->_mp_size = d[1] != 0 ? 2 : d[0] != 0;
0028 mpz_add(a, b, c);
0029 }
0030
0031 static inline
0032 void flint_mpz_add_signed_uiui(mpz_ptr a, mpz_srcptr b, ulong c1, ulong c0)
0033 {
0034 ulong d[2];
0035 ulong c2 = FLINT_SIGN_EXT(c1);
0036 mpz_t c;
0037 sub_ddmmss(d[1], d[0], c2^c1, c2^c0, c2, c2);
0038 c->_mp_d = d;
0039 c->_mp_alloc = 2;
0040 c->_mp_size = d[1] != 0 ? 2 : d[0] != 0;
0041 if (c2 != 0)
0042 c->_mp_size = -c->_mp_size;
0043 mpz_add(a, b, c);
0044 }
0045
0046 static inline
0047 void flint_mpz_add_uiuiui(mpz_ptr a, mpz_srcptr b, ulong c2, ulong c1, ulong c0)
0048 {
0049 ulong d[3];
0050 mpz_t c;
0051 d[0] = c0;
0052 d[1] = c1;
0053 d[2] = c2;
0054 c->_mp_d = d;
0055 c->_mp_alloc = 3;
0056 c->_mp_size = d[2] != 0 ? 3 : d[1] != 0 ? 2 : d[0] != 0;
0057 mpz_add(a, b, c);
0058 }
0059
0060 static inline
0061 void flint_mpz_add_signed_uiuiui(mpz_ptr a, mpz_srcptr b,
0062 ulong c2, ulong c1, ulong c0)
0063 {
0064 ulong cs, d[3];
0065 mpz_t c;
0066 c->_mp_d = d;
0067 c->_mp_alloc = 3;
0068 cs = FLINT_SIGN_EXT(c2);
0069 sub_dddmmmsss(d[2], d[1], d[0], cs^c2, cs^c1, cs^c0, cs, cs, cs);
0070 c->_mp_size = d[2] != 0 ? 3 :
0071 d[1] != 0 ? 2 :
0072 d[0] != 0;
0073 if (cs != 0)
0074 c->_mp_size = -c->_mp_size;
0075 mpz_add(a, b, c);
0076 }
0077
0078 #define flint_mpz_get_si mpz_get_si
0079 #define flint_mpz_get_ui mpz_get_ui
0080 #define flint_mpz_set_si mpz_set_si
0081 #define flint_mpz_set_ui mpz_set_ui
0082 #define flint_mpz_init_set_si mpz_init_set_si
0083 #define flint_mpz_init_set_ui mpz_init_set_ui
0084 #define flint_mpz_add_ui mpz_add_ui
0085 #define flint_mpz_sub_ui mpz_sub_ui
0086 #define flint_mpz_mul_si mpz_mul_si
0087 #define flint_mpz_mul_ui mpz_mul_ui
0088 #define flint_mpz_addmul_ui mpz_addmul_ui
0089 #define flint_mpz_submul_ui mpz_submul_ui
0090 #define flint_mpz_ui_sub mpz_ui_sub
0091 #define flint_mpz_ui_pow_ui mpz_ui_pow_ui
0092 #define flint_mpz_cdiv_q_ui mpz_cdiv_q_ui
0093 #define flint_mpz_cdiv_r_ui mpz_cdiv_r_ui
0094 #define flint_mpz_cdiv_qr_ui mpz_cdiv_qr_ui
0095 #define flint_mpz_cdiv_ui mpz_cdiv_ui
0096 #define flint_mpz_fdiv_q_ui mpz_fdiv_q_ui
0097 #define flint_mpz_fdiv_r_ui mpz_fdiv_r_ui
0098 #define flint_mpz_fdiv_qr_ui mpz_fdiv_qr_ui
0099 #define flint_mpz_fdiv_ui mpz_fdiv_ui
0100 #define flint_mpz_tdiv_q_ui mpz_tdiv_q_ui
0101 #define flint_mpz_tdiv_r_ui mpz_tdiv_r_ui
0102 #define flint_mpz_tdiv_qr_ui mpz_tdiv_qr_ui
0103 #define flint_mpz_tdiv_ui mpz_tdiv_ui
0104 #define flint_mpz_mod_ui mpz_mod_ui
0105 #define flint_mpz_divexact_ui mpz_divexact_ui
0106 #define flint_mpz_divisible_ui_p mpz_divisible_ui_p
0107 #define flint_mpz_congruent_ui_p mpz_congruent_ui_p
0108 #define flint_mpz_powm_ui mpz_powm_ui
0109 #define flint_mpz_pow_ui mpz_pow_ui
0110 #define flint_mpz_fac_ui mpz_fac_ui
0111 #define flint_mpz_bin_uiui mpz_bin_uiui
0112 #define flint_mpz_fib_ui mpz_fib_ui
0113 #define flint_mpz_cmp_si mpz_cmp_si
0114 #define flint_mpz_cmp_ui mpz_cmp_ui
0115 #define flint_mpq_cmp_si mpq_cmp_si
0116 #define flint_mpq_cmp_ui mpq_cmp_ui
0117 #define flint_mpq_set_si mpq_set_si
0118 #define flint_mpq_set_ui mpq_set_ui
0119
0120 #define flint_mpf_set_si mpf_set_si
0121 #define flint_mpf_set_ui mpf_set_ui
0122 #define flint_mpf_get_si mpf_get_si
0123 #define flint_mpf_cmp_ui mpf_cmp_ui
0124 #define flint_mpf_fits_slong_p mpf_fits_slong_p
0125 #define flint_mpf_get_d_2exp mpf_get_d_2exp
0126
0127 #endif