From 5e4be9349120390fd7e22fbd70d3439b56aef760 Mon Sep 17 00:00:00 2001 From: Costa Vitor Date: Fri, 5 Jun 2009 12:18:10 -0500 Subject: [PATCH] able to commit 64 bits --- C/gmp_support.c | 11 +++++++++++ C/heapgc.c | 2 +- H/TermExt.h | 2 -- H/eval.h | 20 +++++++++++++++++++- 4 files changed, 31 insertions(+), 4 deletions(-) diff --git a/C/gmp_support.c b/C/gmp_support.c index fed92438a..10c35d112 100644 --- a/C/gmp_support.c +++ b/C/gmp_support.c @@ -362,6 +362,17 @@ Yap_gmp_exp_big_int(MP_INT *b, Int i) return MkBigAndClose(&new); } +Term +Yap_gmp_big_from_64bits(YAP_LONG_LONG i) +{ + char s[64]; + MP_INT new; + + sprintf(s, "%lld", (long long int)i); + mpz_init_set_str (&new, s, 10); + return MkBigAndClose(&new); +} + #endif diff --git a/C/heapgc.c b/C/heapgc.c index f0ab9e114..8a5783835 100644 --- a/C/heapgc.c +++ b/C/heapgc.c @@ -3904,7 +3904,7 @@ p_inform_gc(void) { Term tn = MkIntegerTerm(TotGcTime); Term tt = MkIntegerTerm(GcCalls); - Term ts = MkIntegerTerm((TotGcRecovered*sizeof(CELL))); + Term ts = Yap_Mk64IntegerTerm((TotGcRecovered*sizeof(CELL))); return(Yap_unify(tn, ARG2) && Yap_unify(tt, ARG1) && Yap_unify(ts, ARG3)); diff --git a/H/TermExt.h b/H/TermExt.h index 99c2a4af7..0891088f9 100644 --- a/H/TermExt.h +++ b/H/TermExt.h @@ -431,8 +431,6 @@ IsPrimitiveTerm (Term t) || (IsApplTerm (t) && IsBlobFunctor (FunctorOfTerm (t))))); } - - #ifdef TERM_EXTENSIONS diff --git a/H/eval.h b/H/eval.h index a67fb2f35..ac50bb09e 100644 --- a/H/eval.h +++ b/H/eval.h @@ -225,10 +225,28 @@ Term STD_PROTO(Yap_gmp_mod_int_big,(Int, MP_INT *)); Term STD_PROTO(Yap_gmp_exp_ints,(Int,Int)); Term STD_PROTO(Yap_gmp_exp_big_int,(MP_INT *,Int)); - +Term STD_PROTO(Yap_gmp_big_from_64bits,(YAP_LONG_LONG)); Term STD_PROTO(Yap_gmp_add_float_big,(Float, MP_INT *)); Term STD_PROTO(Yap_gmp_sub_float_big,(Float, MP_INT *)); Term STD_PROTO(Yap_gmp_sub_big_float,(MP_INT *, Float)); Term STD_PROTO(Yap_gmp_mul_float_big,(Float, MP_INT *)); #endif + +inline EXTERN Term Yap_Mk64IntegerTerm(YAP_LONG_LONG); + +inline EXTERN Term +Yap_Mk64IntegerTerm(YAP_LONG_LONG i) +{ + if (i <= Int_MAX || i >= Int_MIN) { + return MkIntegerTerm((Int)i); + } else { +#if USE_GMP + return Yap_gmp_big_from_64bits(i); +#else + return MkIntTerm(-1); +#endif + } +} + +