From 7c57ab99f2b1dd6448976ef49c27a2a77351bea7 Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Sat, 1 Oct 2011 12:59:45 -0700 Subject: [PATCH 01/12] add debugging aids. --- C/heapgc.c | 46 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/C/heapgc.c b/C/heapgc.c index 0dff8c688..9a0e81cd6 100644 --- a/C/heapgc.c +++ b/C/heapgc.c @@ -28,6 +28,10 @@ static char SccsId[] = "%W% %G%"; #endif /* !TABLING */ #define HYBRID_SCHEME 1 +#define DEBUG_printf0(A,B) +#define DEBUG_printf1(A,B,C) +#define DEBUG_printf20(A,B) +#define DEBUG_printf21(A,B,C) /* global variables for garbage collection */ @@ -1124,6 +1128,8 @@ mark_variable(CELL_PTR current USES_REGS) LOCAL_total_marked++; if (current < LOCAL_HGEN) { LOCAL_total_oldies++; + } else { + DEBUG_printf0("%p 1\n", current); } } PUSH_POINTER(current PASS_REGS); @@ -1137,6 +1143,8 @@ mark_variable(CELL_PTR current USES_REGS) LOCAL_total_marked++; if (next-1 < LOCAL_HGEN) { LOCAL_total_oldies++; + } else { + DEBUG_printf0("%p 1\n", next-1); } PUSH_POINTER(next-1 PASS_REGS); } @@ -1177,6 +1185,8 @@ mark_variable(CELL_PTR current USES_REGS) LOCAL_total_marked--; if (current < LOCAL_HGEN) { LOCAL_total_oldies--; + } else { + DEBUG_printf0("%p-1\n", next-1); } } POP_POINTER( PASS_REGS1 ); @@ -1199,6 +1209,8 @@ mark_variable(CELL_PTR current USES_REGS) LOCAL_total_marked--; if (current < LOCAL_HGEN) { LOCAL_total_oldies--; + } else { + DEBUG_printf0("%p-1\n", next-1); } } POP_POINTER( PASS_REGS1 ); @@ -1244,6 +1256,8 @@ mark_variable(CELL_PTR current USES_REGS) LOCAL_total_marked++; if (next < LOCAL_HGEN) { LOCAL_total_oldies++; + } else { + DEBUG_printf0("%p 1\n", next); } PUSH_POINTER(next PASS_REGS); } @@ -1294,6 +1308,9 @@ mark_variable(CELL_PTR current USES_REGS) MARK(next+2); if (next < LOCAL_HGEN) { LOCAL_total_oldies+=3; + } else { + DEBUG_printf0("%p 1\n", next); + DEBUG_printf0("%p 3\n", next); } LOCAL_total_marked += 3; PUSH_POINTER(next PASS_REGS); @@ -1306,6 +1323,9 @@ mark_variable(CELL_PTR current USES_REGS) UInt sz = 1+SIZEOF_DOUBLE/SIZEOF_LONG_INT; if (next < LOCAL_HGEN) { LOCAL_total_oldies+= 1+sz; + } else { + DEBUG_printf0("%p 1\n", next); + DEBUG_printf1("%p %ld\n", next, (long int)(sz+1)); } LOCAL_total_marked += 1+sz; PUSH_POINTER(next+sz PASS_REGS); @@ -1318,8 +1338,12 @@ mark_variable(CELL_PTR current USES_REGS) ((MP_INT *)(next+2))->_mp_alloc*sizeof(mp_limb_t))/CellSize; MARK(next); /* size is given by functor + friends */ - if (next < LOCAL_HGEN) + if (next < LOCAL_HGEN) { LOCAL_total_oldies += 2+sz; + } else { + DEBUG_printf0("%p 1\n", next); + DEBUG_printf1("%p %ld\n", next, (long int)(sz+2)); + } LOCAL_total_marked += 2+sz; PUSH_POINTER(next PASS_REGS); sz++; @@ -1328,7 +1352,7 @@ mark_variable(CELL_PTR current USES_REGS) fprintf(stderr,"[ Error: could not find EndSpecials at blob %p type " UInt_FORMAT " ]\n", next, next[1]); } #endif - MARK(next+sz); + MARK(next+sz); PUSH_POINTER(next+sz PASS_REGS); } default: @@ -1344,6 +1368,8 @@ mark_variable(CELL_PTR current USES_REGS) ++LOCAL_total_marked; if (next < LOCAL_HGEN) { ++LOCAL_total_oldies; + } else { + DEBUG_printf0("%p 1\n", next); } PUSH_POINTER(next PASS_REGS); next++; @@ -1353,6 +1379,8 @@ mark_variable(CELL_PTR current USES_REGS) LOCAL_total_marked++; if (next < LOCAL_HGEN) { LOCAL_total_oldies++; + } else { + DEBUG_printf0("%p 1\n", next); } PUSH_POINTER(next PASS_REGS); } @@ -1625,6 +1653,8 @@ mark_trail(tr_fr_ptr trail_ptr, tr_fr_ptr trail_base, CELL *gc_H, choiceptr gc_B PUSH_POINTER(hp-1 PASS_REGS); if (hp-1 < LOCAL_HGEN) { LOCAL_total_oldies++; + } else { + DEBUG_printf0("%p 1\n", hp-1); } mark_variable(hp+1 PASS_REGS); mark_variable(hp+2 PASS_REGS); @@ -2728,7 +2758,6 @@ sweep_environments(CELL_PTR gc_ENV, OPREG size, CELL *pvbmap USES_REGS) bmap = (Int)(((CELL)bmap) << currv); } for (saved_var = gc_ENV - size; saved_var < gc_ENV - EnvSizeInCells; saved_var++) { - if (currv == sizeof(CELL)*8) { if (pvbmap != NULL) { pvbmap--; @@ -3239,6 +3268,7 @@ compact_heap( USES_REGS1 ) #endif /* TABLING */ ); for (current = H - 1; current >= start_from; current--) { + if (MARKED_PTR(current)) { CELL ccell = UNMARK_CELL(*current); @@ -3261,7 +3291,9 @@ compact_heap( USES_REGS1 ) CELL *ptr = current-1; UInt nofcells; - while (!MARKED_PTR(ptr)) ptr--; + while (!MARKED_PTR(ptr)) { + ptr--; + } nofcells = current-ptr; ptr++; MARK(ptr); @@ -3273,8 +3305,11 @@ compact_heap( USES_REGS1 ) ptr[0] = EndSpecials; dest -= nofcells; current = ptr; - continue; /* process the functor on a separate cycle */ + DEBUG_printf21("%p %ld\n", current-1, (long int)(nofcells+1)); + continue; + } else { + DEBUG_printf20("%p 1\n", current); } #ifdef DEBUG found_marked++; @@ -3720,6 +3755,7 @@ do_gc(Int predarity, CELL *current_env, yamop *nextop USES_REGS) effectiveness = 0; gc_trace = FALSE; LOCAL_GcCalls++; + if (LOCAL_GcCalls == 89) jmp_deb(1); #ifdef INSTRUMENT_GC { int i; From 29866562fbb34a9baae2ed9f0b921fba790315b5 Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Sat, 1 Oct 2011 13:00:00 -0700 Subject: [PATCH 02/12] fix gc calling from C-code. --- C/c_interface.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/C/c_interface.c b/C/c_interface.c index 0cbff73e0..ce94a975e 100644 --- a/C/c_interface.c +++ b/C/c_interface.c @@ -545,17 +545,19 @@ X_API Term STD_PROTO(YAP_NewOpaqueObject,(int, size_t)); X_API void *STD_PROTO(YAP_OpaqueObjectFromTerm,(Term)); static int -dogc(void) +dogc( USES_REGS1 ) { - CACHE_REGS UInt arity; + yamop *nextpc; if (P && PREVOP(P,Osbpp)->opc == Yap_opcode(_call_usercpred)) { arity = PREVOP(P,Osbpp)->u.Osbpp.p->ArityOfPE; + nextpc = P; } else { arity = 0; + nextpc = CP; } - if (!Yap_gc(arity, ENV, CP)) { + if (!Yap_gc(arity, ENV, nextpc)) { return FALSE; } return TRUE; @@ -943,10 +945,11 @@ YAP_MkPairTerm(Term t1, Term t2) if (H > ASP-1024) { Int sl1 = Yap_InitSlot(t1 PASS_REGS); Int sl2 = Yap_InitSlot(t2 PASS_REGS); - if (!dogc()) { - RECOVER_H(); + RECOVER_H(); + if (!dogc( PASS_REGS1 )) { return TermNil; } + BACKUP_H(); t1 = Yap_GetFromSlot(sl1 PASS_REGS); t2 = Yap_GetFromSlot(sl2 PASS_REGS); Yap_RecoverSlots(2 PASS_REGS); @@ -1942,7 +1945,7 @@ YAP_ReadBuffer(char *s, Term *tp) while ((t = Yap_StringToTerm(s,tp)) == 0L) { if (LOCAL_ErrorMessage) { if (!strcmp(LOCAL_ErrorMessage,"Stack Overflow")) { - if (!dogc()) { + if (!dogc( PASS_REGS1 )) { *tp = MkAtomTerm(Yap_LookupAtom(LOCAL_ErrorMessage)); LOCAL_ErrorMessage = NULL; RECOVER_H(); @@ -3462,7 +3465,7 @@ YAP_OpenList(int n) BACKUP_H(); if (H+2*n > ASP-1024) { - if (!dogc()) { + if (!dogc( PASS_REGS1 )) { RECOVER_H(); return FALSE; } From bab27a5761561ebcb9899f414c72582965dc9429 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Sun, 2 Oct 2011 16:17:30 -0300 Subject: [PATCH 03/12] fix warning. --- C/heapgc.c | 1 - 1 file changed, 1 deletion(-) diff --git a/C/heapgc.c b/C/heapgc.c index 9a0e81cd6..0907ca87f 100644 --- a/C/heapgc.c +++ b/C/heapgc.c @@ -3755,7 +3755,6 @@ do_gc(Int predarity, CELL *current_env, yamop *nextop USES_REGS) effectiveness = 0; gc_trace = FALSE; LOCAL_GcCalls++; - if (LOCAL_GcCalls == 89) jmp_deb(1); #ifdef INSTRUMENT_GC { int i; From 36d20477fb89ce1d439b7dee87304dad0ac2ebba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Sun, 2 Oct 2011 16:18:09 -0300 Subject: [PATCH 04/12] small fixes to avoid using global reg. --- C/absmi.c | 6 +++--- C/exec.c | 1 + C/grow.c | 2 ++ H/Regs.h | 2 ++ H/absmi.h | 6 +++--- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/C/absmi.c b/C/absmi.c index 232d161df..807f55968 100644 --- a/C/absmi.c +++ b/C/absmi.c @@ -902,9 +902,9 @@ Yap_absmi(int inp) #ifdef YAPOR SCH_set_load(B_YREG); #endif /* YAPOR */ + PREG = NEXTOP(PREG, Otapl); SET_BB(B_YREG); ENDCACHE_Y(); - PREG = NEXTOP(PREG, Otapl); GONext(); ENDOp(); @@ -2023,7 +2023,7 @@ Yap_absmi(int inp) #endif /* LOW_LEVEL_TRACER */ #ifdef FROZEN_STACKS #ifdef YAPOR_SBA - if (pt0 < TR_FZ || pt0 > (tr_fr_ptr)LOCAL_TrailTop) + if (pt0 < TR_FZ || pt0 > CurrentTrailTop) #else if (pt0 < TR_FZ) #endif /* YAPOR_SBA */ @@ -2073,7 +2073,7 @@ Yap_absmi(int inp) #ifdef YAPOR_SBA (ADDR) pt1 >= HeapTop #else - IN_BETWEEN(LOCAL_TrailBase, pt1, LOCAL_TrailTop) + IN_BETWEEN(LOCAL_TrailBase, pt1, CurrentTrailTop) #endif /* YAPOR_SBA */ ) { diff --git a/C/exec.c b/C/exec.c index 89e9dfb13..9c0b37695 100644 --- a/C/exec.c +++ b/C/exec.c @@ -1630,6 +1630,7 @@ Yap_InitYaamRegs(void) H = H0 = ((CELL *) LOCAL_GlobalBase)+ Yap_AttsSize/sizeof(CELL); RESET_VARIABLE(H0-1); LCL0 = ASP = (CELL *) LOCAL_LocalBase; + CurrentTrailTop = (tr_fr_ptr)LOCAL_TrailTop; /* notice that an initial choice-point and environment *must* be created since for the garbage collector to work */ B = NULL; diff --git a/C/grow.c b/C/grow.c index 8e8c9e75f..71ebb5c45 100644 --- a/C/grow.c +++ b/C/grow.c @@ -125,6 +125,7 @@ SetHeapRegs(int copying_threads USES_REGS) /* Adjust stack addresses */ LOCAL_TrailBase = TrailAddrAdjust(LOCAL_TrailBase); LOCAL_TrailTop = TrailAddrAdjust(LOCAL_TrailTop); + CurrentTrailTop = (tr_fr_ptr)LOCAL_TrailTop; if (LOCAL_GDiff) { /* make sure we are not just expanding the delay stack */ LOCAL_GlobalBase = BaseAddrAdjust(LOCAL_GlobalBase); @@ -1850,6 +1851,7 @@ Yap_CopyThreadStacks(int worker_q, int worker_p, int incremental) LOCAL_LocalBase = REMOTE_LocalBase(worker_p); LOCAL_TrailBase = REMOTE_TrailBase(worker_p); LOCAL_TrailTop = REMOTE_TrailTop(worker_p); + CurrentTrailTop = (tr_fr_ptr)LOCAL_TrailTop; size = REMOTE_ThreadHandle(worker_q).stack_address-REMOTE_ThreadHandle(worker_p).stack_address; LOCAL_TrDiff = LOCAL_LDiff = LOCAL_GDiff = LOCAL_GDiff0 = LOCAL_DelayDiff = LOCAL_BaseDiff = size; LOCAL_XDiff = LOCAL_HDiff = 0; diff --git a/H/Regs.h b/H/Regs.h index ee9ccb7ed..849f01512 100644 --- a/H/Regs.h +++ b/H/Regs.h @@ -113,6 +113,7 @@ typedef struct regstore_t CELL *ENV_; /* 1 current environment */ CELL *ASP_; /* 8 top of local stack */ CELL *LCL0_; /* 3 local stack base */ + tr_fr_ptr CurrentTrailTop_; /* 10 Auxiliary stack top */ ADDR AuxBase_; /* 9 Auxiliary base pointer */ CELL *AuxSp_; /* 9 Auxiliary stack pointer */ ADDR AuxTop_; /* 10 Auxiliary stack top */ @@ -630,6 +631,7 @@ EXTERN inline void restore_B(void) { #define AuxBase Yap_REGS.AuxBase_ #define AuxSp Yap_REGS.AuxSp_ #define AuxTop Yap_REGS.AuxTop_ +#define CurrentTrailTop Yap_REGS.CurrentTrailTop_ #define EX Yap_REGS.EX_ #define DEPTH Yap_REGS.DEPTH_ #if defined(YAPOR_SBA) || defined(TABLING) diff --git a/H/absmi.h b/H/absmi.h index 26dfb08ee..9ac2b4163 100644 --- a/H/absmi.h +++ b/H/absmi.h @@ -682,10 +682,10 @@ Macros to check the limits of stacks #else -#define check_trail(x) if (Unsigned(LOCAL_TrailTop) - Unsigned(x) < MinTrailGap) \ +#define check_trail(x) if (Unsigned(CurrentTrailTop) - Unsigned(x) < MinTrailGap) \ goto notrailleft -#define check_trail_in_indexing(x) if (Unsigned(LOCAL_TrailTop) - Unsigned(x) < MinTrailGap) \ +#define check_trail_in_indexing(x) if (Unsigned(CurrentTrailTop) - Unsigned(x) < MinTrailGap) \ goto notrailleft_from_index #endif @@ -733,7 +733,7 @@ Macros to check the limits of stacks while ( pt0 > XREGS ); \ ENDP(pt0) -#if LOW_LEVEL_TRACER +#if LOW_LEVEL_TRACER && 0 #define COUNT_CPS() LOCAL_total_choicepoints++ #else #define COUNT_CPS() From 5e0c4b923d988a09abd45c24ae758da4a6a0a599 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Sun, 2 Oct 2011 19:54:20 -0300 Subject: [PATCH 05/12] improve support for R --- configure | 61 ++++++++++++++-------------------------------------- configure.in | 24 +++++++++++++++------ 2 files changed, 33 insertions(+), 52 deletions(-) diff --git a/configure b/configure index 018950ad1..55e3e52f1 100755 --- a/configure +++ b/configure @@ -1481,7 +1481,7 @@ Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gmp=DIR use GNU Multiple Precision in DIR - --with-yapr=DIR use GNU Multiple Precision in DIR + --with-yapr=DIR interface to R language, R installed in DIR --enable-minisat use minisat interface --with-cudd=DIR use CUDD package in DIR --with-java=JAVA_HOME use Java instalation in JAVA_HOME @@ -4432,7 +4432,6 @@ if test "${with_yapr+set}" = set; then : yap_cv_yapr=no else yap_cv_yapr=$with_yapr - YAPR_INCLUDES="-I${yap_cv_yapr}/share/R/include" fi else yap_cv_yapr=no @@ -4931,9 +4930,9 @@ then ENABLE_YAPR="@# " elif test -e "$srcdir"/packages/YapR/Makefile.in then - ENABLE_YAPR="@# " -else ENABLE_YAPR="" +else + ENABLE_YAPR="@# " fi if test "$yap_cv_clpbn_bp" = no @@ -6276,7 +6275,18 @@ fi if test "$yap_cv_yapr" != "no" then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lR" >&5 + if test "$yap_cv_yapr" = "yes" + then + case "$target_os" in + *darwin*) + YAPR_INCLUDES="-I/Library/Frameworks/R.framework/Headers" + EXTRA_LIBS_FOR_DLLS="$EXTRA_LIBS_FOR_DLLS -framework R -L /Library/Frameworks/R.framework/Libraries" + ;; + **) + YAPR_INCLUDES="-I/usr/include/R -I/usr/share/R/include" + esac + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lR" >&5 $as_echo_n "checking for main in -lR... " >&6; } if ${ac_cv_lib_R_main+:} false; then : $as_echo_n "(cached) " >&6 @@ -6313,45 +6323,6 @@ _ACEOF LIBS="-lR $LIBS" -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lRmath" >&5 -$as_echo_n "checking for main in -lRmath... " >&6; } -if ${ac_cv_lib_Rmath_main+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lRmath $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_Rmath_main=yes -else - ac_cv_lib_Rmath_main=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Rmath_main" >&5 -$as_echo "$ac_cv_lib_Rmath_main" >&6; } -if test "x$ac_cv_lib_Rmath_main" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBRMATH 1 -_ACEOF - - LIBS="-lRmath $LIBS" - fi fi @@ -6432,7 +6403,7 @@ $as_echo "$yap_cv_odbc" >&6; } then YAP_EXTRAS="$YAP_EXTRAS -DMYDDAS_ODBC" case "$target_os" in - *darwin9*) + *darwin*) LIBS="$LIBS -lodbc -framework CoreFoundation" ;; **) diff --git a/configure.in b/configure.in index 64858c402..d02bde7ae 100644 --- a/configure.in +++ b/configure.in @@ -187,7 +187,7 @@ AC_ARG_WITH(gmp, [yap_cv_gmp=yes]) AC_ARG_WITH(yapr, - [ --with-yapr[=DIR] use GNU Multiple Precision in DIR], + [ --with-yapr[=DIR] interface to R language, R installed in DIR], if test "$withval" = yes; then YAPR_INCLUDES="-I/usr/share/R/include" yap_cv_yapr=yes @@ -195,7 +195,6 @@ AC_ARG_WITH(yapr, yap_cv_yapr=no else yap_cv_yapr=$with_yapr - YAPR_INCLUDES="-I${yap_cv_yapr}/share/R/include" fi, [yap_cv_yapr=no]) @@ -466,9 +465,9 @@ then ENABLE_YAPR="@# " elif test -e "$srcdir"/packages/YapR/Makefile.in then - ENABLE_YAPR="@# " -else ENABLE_YAPR="" +else + ENABLE_YAPR="@# " fi if test "$yap_cv_clpbn_bp" = no @@ -693,8 +692,19 @@ fi if test "$yap_cv_yapr" != "no" then - AC_CHECK_LIB(R,main) - AC_CHECK_LIB(Rmath,main) + if test "$yap_cv_yapr" = "yes" + then + case "$target_os" in + *darwin*) + YAPR_INCLUDES="-I/Library/Frameworks/R.framework/Headers" + EXTRA_LIBS_FOR_DLLS="$EXTRA_LIBS_FOR_DLLS -framework R -L /Library/Frameworks/R.framework/Libraries" + ;; + **) +dnl one of the two may work (Fedora vs Ubuntu) + YAPR_INCLUDES="-I/usr/include/R -I/usr/share/R/include" + esac + fi + AC_CHECK_LIB(R,main) fi dnl if test "$yap_cv_cudd" != "no" @@ -739,7 +749,7 @@ then then YAP_EXTRAS="$YAP_EXTRAS -DMYDDAS_ODBC" case "$target_os" in - *darwin9*) + *darwin*) LIBS="$LIBS -lodbc -framework CoreFoundation" ;; **) From c8061d46d61443c1cf2b4659904c8f14149ad7b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Sun, 2 Oct 2011 19:55:12 -0300 Subject: [PATCH 06/12] fix length/2. --- pl/sort.yap | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/pl/sort.yap b/pl/sort.yap index 50638b6db..0d5491bd0 100644 --- a/pl/sort.yap +++ b/pl/sort.yap @@ -24,15 +24,14 @@ % length of a list. -length(L,M) :- var(M), !, '$$_length1'(L,0,M). -length(L,M) :- '$$_length2'(M,L). +length(L,M) :- ( var(M) -> '$$_length1'(L,M,0) ; '$$_length2'(L, M) ). '$$_length1'([], M, M). -'$$_length1'([_|L], N, O) :- +'$$_length1'([_|L], O, N) :- M is N + 1, - '$$_length1'(L, M, O). + '$$_length1'(L, O, M). -'$$_length2'(N, L) :- +'$$_length2'(L, N) :- ( N =:= 0 -> L = [] @@ -40,7 +39,7 @@ length(L,M) :- '$$_length2'(M,L). N > 0, N1 is N - 1, L = [_|L1], - '$$_length2'(N1, L1) + '$$_length2'(L1, N1) ). From 66ae65fe0916f9641fd4e62e1e1e414301fd539a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Sun, 2 Oct 2011 19:55:22 -0300 Subject: [PATCH 07/12] small look at compilation. --- C/absmi.c | 16 ++++++++-------- C/exec.c | 2 +- C/grow.c | 4 ++-- H/Regs.h | 2 +- H/absmi.h | 13 ++++++------- 5 files changed, 18 insertions(+), 19 deletions(-) diff --git a/C/absmi.c b/C/absmi.c index 807f55968..5033081ee 100644 --- a/C/absmi.c +++ b/C/absmi.c @@ -1544,7 +1544,7 @@ Yap_absmi(int inp) } #endif PREG = NEXTOP(PREG, L); - GONext(); + JMPNext(); ENDBOp(); /* copy database term */ @@ -1618,7 +1618,7 @@ Yap_absmi(int inp) #ifdef DEPTH_LIMIT DEPTH = YREG[E_DEPTH]; #endif - GONext(); + JMPNext(); ENDBOp(); @@ -1670,7 +1670,7 @@ Yap_absmi(int inp) #ifdef DEPTH_LIMIT DEPTH = YREG[E_DEPTH]; #endif - GONext(); + JMPNext(); ENDBOp(); @@ -2023,7 +2023,7 @@ Yap_absmi(int inp) #endif /* LOW_LEVEL_TRACER */ #ifdef FROZEN_STACKS #ifdef YAPOR_SBA - if (pt0 < TR_FZ || pt0 > CurrentTrailTop) + if (pt0 < TR_FZ || pt0 > CurrentTrailTop+MinTrailGap) #else if (pt0 < TR_FZ) #endif /* YAPOR_SBA */ @@ -2073,7 +2073,7 @@ Yap_absmi(int inp) #ifdef YAPOR_SBA (ADDR) pt1 >= HeapTop #else - IN_BETWEEN(LOCAL_TrailBase, pt1, CurrentTrailTop) + IN_BETWEEN(LOCAL_TrailBase, pt1, CurrentTrailTop+MinTrailGap) #endif /* YAPOR_SBA */ ) { @@ -2646,7 +2646,7 @@ Yap_absmi(int inp) !(LOCAL_ActiveSignals & ~YAP_CREEP_SIGNAL)) || (PREG->opc != Yap_opcode(_procceed) && PREG->opc != Yap_opcode(_cut_e))) { - GONext(); + JMPNext(); } PP = PREVOP(PREG,p)->u.p.p; ASP = YREG+E_CB; @@ -7902,7 +7902,7 @@ Yap_absmi(int inp) } #endif } - GONext(); + JMPNext(); ENDBOp(); BOp(try_logical, OtaLl); @@ -8559,7 +8559,7 @@ Yap_absmi(int inp) } PREG = NEXTOP(PREG, aFlp); - GONext(); + JMPNext(); ENDBOp(); diff --git a/C/exec.c b/C/exec.c index 9c0b37695..8b4d3ddc5 100644 --- a/C/exec.c +++ b/C/exec.c @@ -1630,7 +1630,7 @@ Yap_InitYaamRegs(void) H = H0 = ((CELL *) LOCAL_GlobalBase)+ Yap_AttsSize/sizeof(CELL); RESET_VARIABLE(H0-1); LCL0 = ASP = (CELL *) LOCAL_LocalBase; - CurrentTrailTop = (tr_fr_ptr)LOCAL_TrailTop; + CurrentTrailTop = (tr_fr_ptr)(LOCAL_TrailTop-MinTrailGap); /* notice that an initial choice-point and environment *must* be created since for the garbage collector to work */ B = NULL; diff --git a/C/grow.c b/C/grow.c index 71ebb5c45..72642470c 100644 --- a/C/grow.c +++ b/C/grow.c @@ -125,7 +125,7 @@ SetHeapRegs(int copying_threads USES_REGS) /* Adjust stack addresses */ LOCAL_TrailBase = TrailAddrAdjust(LOCAL_TrailBase); LOCAL_TrailTop = TrailAddrAdjust(LOCAL_TrailTop); - CurrentTrailTop = (tr_fr_ptr)LOCAL_TrailTop; + CurrentTrailTop = (tr_fr_ptr)(LOCAL_TrailTop-MinTrailGap); if (LOCAL_GDiff) { /* make sure we are not just expanding the delay stack */ LOCAL_GlobalBase = BaseAddrAdjust(LOCAL_GlobalBase); @@ -1851,7 +1851,7 @@ Yap_CopyThreadStacks(int worker_q, int worker_p, int incremental) LOCAL_LocalBase = REMOTE_LocalBase(worker_p); LOCAL_TrailBase = REMOTE_TrailBase(worker_p); LOCAL_TrailTop = REMOTE_TrailTop(worker_p); - CurrentTrailTop = (tr_fr_ptr)LOCAL_TrailTop; + CurrentTrailTop = (tr_fr_ptr)(LOCAL_TrailTop-MinTrailGap); size = REMOTE_ThreadHandle(worker_q).stack_address-REMOTE_ThreadHandle(worker_p).stack_address; LOCAL_TrDiff = LOCAL_LDiff = LOCAL_GDiff = LOCAL_GDiff0 = LOCAL_DelayDiff = LOCAL_BaseDiff = size; LOCAL_XDiff = LOCAL_HDiff = 0; diff --git a/H/Regs.h b/H/Regs.h index 849f01512..782cde3d3 100644 --- a/H/Regs.h +++ b/H/Regs.h @@ -37,7 +37,7 @@ #endif #ifdef __x86_64__ -#undef PUSH_REGS +#define PUSH_REGS 1 #undef PUSH_X #endif diff --git a/H/absmi.h b/H/absmi.h index 9ac2b4163..0bf239e22 100644 --- a/H/absmi.h +++ b/H/absmi.h @@ -96,13 +96,12 @@ register struct yami* P1REG asm ("bp"); /* can't use yamop before Yap.h */ #ifdef BP_FREE #undef BP_FREE #endif -#define SHADOW_REGS 1 #define SHADOW_S 1 //#define SHADOW_Y 1 #define S_IN_MEM 1 #define Y_IN_MEM 1 #define TR_IN_MEM 1 -#define USE_PREFETCH 1 +#define LIMITED_PREFETCH 1 #endif /* __x86_64__ */ #else /* other compilers */ @@ -361,7 +360,7 @@ restore_absmi_regs(REGSTORE * old_regs) #define DO_PREFETCH_W(TYPE) to_go = (void *)(NEXTOP(PREG,TYPE)->u.o.opcw) -#if LIMITED_PREFETCH +#if LIMITED_PREFETCH||USE_PREFETCH #define ALWAYS_START_PREFETCH(TYPE) \ { register void *to_go; DO_PREFETCH(TYPE) @@ -448,7 +447,7 @@ restore_absmi_regs(REGSTORE * old_regs) #define JMPNextW() \ JMP((void *)(PREG->u.o.opcw)) -#if USE_THREADED_CODE && LIMITED_PREFETCH +#if USE_THREADED_CODE && (LIMITED_PREFETCH || USE_PREFETCH) #define ALWAYS_GONext() JMP(to_go) @@ -682,10 +681,10 @@ Macros to check the limits of stacks #else -#define check_trail(x) if (Unsigned(CurrentTrailTop) - Unsigned(x) < MinTrailGap) \ +#define check_trail(x) if (Unsigned(CurrentTrailTop) > Unsigned(x)) \ goto notrailleft -#define check_trail_in_indexing(x) if (Unsigned(CurrentTrailTop) - Unsigned(x) < MinTrailGap) \ +#define check_trail_in_indexing(x) if (Unsigned(CurrentTrailTop) < Unsigned(x)) \ goto notrailleft_from_index #endif @@ -725,7 +724,7 @@ Macros to check the limits of stacks #define store_at_least_one_arg(arity) \ BEGP(pt0); \ pt0 = XREGS+(arity); \ - do { register CELL x = pt0[0]; \ + do { CELL x = pt0[0]; \ S_YREG = (S_YREG)-1; \ --pt0; \ (S_YREG)[0] = x; \ From 43c07f5051d0c231990f136adf25bcc612a4c5bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Sun, 2 Oct 2011 21:01:14 -0300 Subject: [PATCH 08/12] more speed stuff. --- C/absmi.c | 198 +++++++++++++++++++++++++-------------------------- C/errors.c | 14 ++++ H/Regs.h | 10 +-- H/Yapproto.h | 1 + H/absmi.h | 8 +-- 5 files changed, 123 insertions(+), 108 deletions(-) diff --git a/C/absmi.c b/C/absmi.c index 5033081ee..2a3d0f5c7 100644 --- a/C/absmi.c +++ b/C/absmi.c @@ -806,7 +806,7 @@ Yap_absmi(int inp) saveregs(); /* do a garbage collection first to check if we can recover memory */ if (!Yap_growheap(FALSE, 0, NULL)) { - Yap_Error(OUT_OF_HEAP_ERROR, TermNil, "YAP failed to grow heap: %s", LOCAL_ErrorMessage); + Yap_NilError(OUT_OF_HEAP_ERROR, "YAP failed to grow heap: %s", LOCAL_ErrorMessage); setregs(); FAIL(); } @@ -838,7 +838,7 @@ Yap_absmi(int inp) cut_b = LCL0-(CELL *)(ASP[E_CB]); saveregs(); if(!Yap_growtrail (0, FALSE)) { - Yap_Error(OUT_OF_TRAIL_ERROR,TermNil,"YAP failed to reserve %ld bytes in growtrail",sizeof(CELL) * K16); + Yap_NilError(OUT_OF_TRAIL_ERROR,"YAP failed to reserve %ld bytes in growtrail",sizeof(CELL) * K16); setregs(); FAIL(); } @@ -1189,14 +1189,14 @@ Yap_absmi(int inp) LOCAL_ReductionsCounter--; if (LOCAL_ReductionsCounter == 0 && LOCAL_ReductionsCounterOn) { saveregs(); - Yap_Error(CALL_COUNTER_UNDERFLOW,TermNil,""); + Yap_NilError(CALL_COUNTER_UNDERFLOW,""); setregs(); JMPNext(); } LOCAL_PredEntriesCounter--; if (LOCAL_PredEntriesCounter == 0 && LOCAL_PredEntriesCounterOn) { saveregs(); - Yap_Error(PRED_ENTRY_COUNTER_UNDERFLOW,TermNil,""); + Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); setregs(); JMPNext(); } @@ -1214,7 +1214,7 @@ Yap_absmi(int inp) /* act as if we had backtracked */ ENV = B->cp_env; saveregs(); - Yap_Error(RETRY_COUNTER_UNDERFLOW,TermNil,""); + Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); setregs(); JMPNext(); } @@ -1222,7 +1222,7 @@ Yap_absmi(int inp) if (LOCAL_PredEntriesCounter == 0 && LOCAL_PredEntriesCounterOn) { ENV = B->cp_env; saveregs(); - Yap_Error(PRED_ENTRY_COUNTER_UNDERFLOW,TermNil,""); + Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); setregs(); JMPNext(); } @@ -1251,14 +1251,14 @@ Yap_absmi(int inp) LOCAL_RetriesCounter--; if (LOCAL_RetriesCounter == 0 && LOCAL_RetriesCounterOn) { saveregs(); - Yap_Error(RETRY_COUNTER_UNDERFLOW,TermNil,""); + Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); setregs(); JMPNext(); } LOCAL_PredEntriesCounter--; if (LOCAL_PredEntriesCounter == 0 && LOCAL_PredEntriesCounterOn) { saveregs(); - Yap_Error(PRED_ENTRY_COUNTER_UNDERFLOW,TermNil,""); + Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); setregs(); JMPNext(); } @@ -1295,14 +1295,14 @@ Yap_absmi(int inp) LOCAL_RetriesCounter--; if (LOCAL_RetriesCounter == 0) { saveregs(); - Yap_Error(RETRY_COUNTER_UNDERFLOW,TermNil,""); + Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); setregs(); JMPNext(); } LOCAL_PredEntriesCounter--; if (LOCAL_PredEntriesCounter == 0) { saveregs(); - Yap_Error(PRED_ENTRY_COUNTER_UNDERFLOW,TermNil,""); + Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); setregs(); JMPNext(); } @@ -1330,14 +1330,14 @@ Yap_absmi(int inp) LOCAL_RetriesCounter--; if (LOCAL_RetriesCounter == 0) { saveregs(); - Yap_Error(RETRY_COUNTER_UNDERFLOW,TermNil,""); + Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); setregs(); JMPNext(); } LOCAL_PredEntriesCounter--; if (LOCAL_PredEntriesCounter == 0) { saveregs(); - Yap_Error(PRED_ENTRY_COUNTER_UNDERFLOW,TermNil,""); + Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); setregs(); JMPNext(); } @@ -1375,14 +1375,14 @@ Yap_absmi(int inp) LOCAL_RetriesCounter--; if (LOCAL_RetriesCounter == 0) { saveregs(); - Yap_Error(RETRY_COUNTER_UNDERFLOW,TermNil,""); + Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); setregs(); JMPNext(); } LOCAL_PredEntriesCounter--; if (LOCAL_PredEntriesCounter == 0) { saveregs(); - Yap_Error(PRED_ENTRY_COUNTER_UNDERFLOW,TermNil,""); + Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); setregs(); JMPNext(); } @@ -1563,7 +1563,7 @@ Yap_absmi(int inp) #if defined(YAPOR) || defined(THREADS) PP = NULL; #endif - Yap_Error(OUT_OF_ATTVARS_ERROR, TermNil, LOCAL_ErrorMessage); + Yap_NilError(OUT_OF_ATTVARS_ERROR, LOCAL_ErrorMessage); FAIL(); } } else { @@ -1573,7 +1573,7 @@ Yap_absmi(int inp) #if defined(YAPOR) || defined(THREADS) PP = NULL; #endif - Yap_Error(OUT_OF_STACK_ERROR, TermNil, LOCAL_ErrorMessage); + Yap_NilError(OUT_OF_STACK_ERROR, LOCAL_ErrorMessage); FAIL(); } } @@ -1693,7 +1693,7 @@ Yap_absmi(int inp) PREG = NEXTOP(PREG,Osbpa); saveregs(); if (!Yap_gcl(sz, arity, YENV, PREG)) { - Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); + Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage); setregs(); FAIL(); } else { @@ -1783,14 +1783,14 @@ Yap_absmi(int inp) LOCAL_RetriesCounter--; if (LOCAL_RetriesCounter == 0) { saveregs(); - Yap_Error(RETRY_COUNTER_UNDERFLOW,TermNil,""); + Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); setregs(); JMPNext(); } LOCAL_PredEntriesCounter--; if (LOCAL_PredEntriesCounter == 0) { saveregs(); - Yap_Error(PRED_ENTRY_COUNTER_UNDERFLOW,TermNil,""); + Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); setregs(); JMPNext(); } @@ -2023,7 +2023,7 @@ Yap_absmi(int inp) #endif /* LOW_LEVEL_TRACER */ #ifdef FROZEN_STACKS #ifdef YAPOR_SBA - if (pt0 < TR_FZ || pt0 > CurrentTrailTop+MinTrailGap) + if (pt0 < TR_FZ || pt0 > (ADDR)CurrentTrailTop+MinTrailGap) #else if (pt0 < TR_FZ) #endif /* YAPOR_SBA */ @@ -2073,7 +2073,7 @@ Yap_absmi(int inp) #ifdef YAPOR_SBA (ADDR) pt1 >= HeapTop #else - IN_BETWEEN(LOCAL_TrailBase, pt1, CurrentTrailTop+MinTrailGap) + IN_BETWEEN(LOCAL_TrailBase, pt1, (ADDR)CurrentTrailTop+MinTrailGap) #endif /* YAPOR_SBA */ ) { @@ -2617,7 +2617,7 @@ Yap_absmi(int inp) SET_ASP(YREG, PREG->u.Osbpp.s); saveregs(); if (!Yap_gc(((PredEntry *)SREG)->ArityOfPE, YREG, NEXTOP(PREG, Osbpp))) { - Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); + Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage); } setregs(); @@ -2671,7 +2671,7 @@ Yap_absmi(int inp) } saveregs(); if (!Yap_gc(0, ENV, CPREG)) { - Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); + Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage); } setregs(); SREG = ASP; @@ -2850,7 +2850,7 @@ Yap_absmi(int inp) ASP = (CELL *)PROTECT_FROZEN_B(B); saveregs(); if (!Yap_gc(0, YREG, NEXTOP(PREG, Osbpp))) { - Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); + Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage); } setregs(); JMPNext(); @@ -2975,7 +2975,7 @@ Yap_absmi(int inp) ASP = (CELL *)PROTECT_FROZEN_B(B); saveregs(); if (!Yap_gc(((PredEntry *)(SREG))->ArityOfPE, (CELL *)YREG[E_E], (yamop *)YREG[E_CP])) { - Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); + Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage); } setregs(); /* hopefully, gc will succeeded, and we will retry @@ -2997,7 +2997,7 @@ Yap_absmi(int inp) ASP = (CELL *)PROTECT_FROZEN_B(B); saveregs(); if (!Yap_gc(((PredEntry *)(SREG))->ArityOfPE, ENV, CPREG)) { - Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); + Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage); } setregs(); /* hopefully, gc will succeeded, and we will retry @@ -3122,7 +3122,7 @@ Yap_absmi(int inp) ARG2 = Yap_ListOfWokenGoals(); SREG = (CELL *) (WakeUpCode); /* no more goals to wake up */ - Yap_UpdateTimedVar(LOCAL_WokenGoals, TermNil); + Yap_UpdateTimedVar(LOCAL_WokenGoals,TermNil); } else #endif { @@ -7570,7 +7570,7 @@ Yap_absmi(int inp) if (LOCAL_ReductionsCounter == 0 && LOCAL_ReductionsCounterOn) { UNLOCKPE(20,pe); saveregs(); - Yap_Error(CALL_COUNTER_UNDERFLOW,TermNil,""); + Yap_NilError(CALL_COUNTER_UNDERFLOW,""); setregs(); JMPNext(); } @@ -7578,7 +7578,7 @@ Yap_absmi(int inp) if (LOCAL_PredEntriesCounter == 0 && LOCAL_PredEntriesCounterOn) { UNLOCKPE(21,pe); saveregs(); - Yap_Error(PRED_ENTRY_COUNTER_UNDERFLOW,TermNil,""); + Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); setregs(); JMPNext(); } @@ -9117,7 +9117,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, plus_vv_unk, plus_vv_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is _+B"); + Yap_NilError(INSTANTIATION_ERROR, "X is _+B"); setregs(); FAIL(); ENDP(pt0); @@ -9125,7 +9125,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d1, pt0, plus_vv_nvar_unk, plus_vv_nvar_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A+B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A+B"); setregs(); FAIL(); ENDP(pt0); @@ -9163,7 +9163,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, plus_vc_unk, plus_vc_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A+ " Int_FORMAT, PREG->u.xxn.c); + Yap_NilError(INSTANTIATION_ERROR, "X is A+ " Int_FORMAT, PREG->u.xxn.c); setregs(); FAIL(); ENDP(pt0); @@ -9206,7 +9206,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, plus_y_vv_unk, plus_y_vv_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A+B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A+B"); setregs(); FAIL(); ENDP(pt0); @@ -9214,7 +9214,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d1, pt0, plus_y_vv_nvar_unk, plus_y_vv_nvar_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A+B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A+B"); setregs(); FAIL(); ENDP(pt0); @@ -9255,7 +9255,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, plus_y_vc_unk, plus_y_vc_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A+ " Int_FORMAT, PREG->u.yxn.c); + Yap_NilError(INSTANTIATION_ERROR, "X is A+ " Int_FORMAT, PREG->u.yxn.c); setregs(); FAIL(); ENDP(pt0); @@ -9295,7 +9295,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, minus_vv_unk, minus_vv_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A-B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A-B"); setregs(); FAIL(); ENDP(pt0); @@ -9303,7 +9303,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d1, pt0, minus_vv_nvar_unk, minus_vv_nvar_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A-B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A-B"); setregs(); FAIL(); ENDP(pt0); @@ -9341,7 +9341,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, minus_cv_unk, minus_cv_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is " Int_FORMAT "-A", PREG->u.xxn.c); + Yap_NilError(INSTANTIATION_ERROR, "X is " Int_FORMAT "-A", PREG->u.xxn.c); setregs(); FAIL(); ENDP(pt0); @@ -9384,7 +9384,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, minus_y_vv_unk, minus_y_vv_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A-B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A-B"); setregs(); FAIL(); ENDP(pt0); @@ -9392,7 +9392,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d1, pt0, minus_y_vv_nvar_unk, minus_y_vv_nvar_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A-B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A-B"); setregs(); FAIL(); ENDP(pt0); @@ -9433,7 +9433,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, minus_y_cv_unk, minus_y_cv_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is " Int_FORMAT "-A", PREG->u.yxn.c); + Yap_NilError(INSTANTIATION_ERROR, "X is " Int_FORMAT "-A", PREG->u.yxn.c); setregs(); FAIL(); ENDP(pt0); @@ -9473,7 +9473,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, times_vv_unk, times_vv_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A*B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A*B"); setregs(); FAIL(); ENDP(pt0); @@ -9481,7 +9481,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d1, pt0, times_vv_nvar_unk, times_vv_nvar_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A*B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A*B"); setregs(); FAIL(); ENDP(pt0); @@ -9519,7 +9519,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, times_vc_unk, times_vc_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A* " Int_FORMAT, PREG->u.xxn.c); + Yap_NilError(INSTANTIATION_ERROR, "X is A* " Int_FORMAT, PREG->u.xxn.c); setregs(); FAIL(); ENDP(pt0); @@ -9562,7 +9562,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, times_y_vv_unk, times_y_vv_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A*B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A*B"); setregs(); FAIL(); ENDP(pt0); @@ -9570,7 +9570,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d1, pt0, times_y_vv_nvar_unk, times_y_vv_nvar_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A*B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A*B"); setregs(); FAIL(); ENDP(pt0); @@ -9611,7 +9611,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, times_y_vc_unk, times_y_vc_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A* " Int_FORMAT, PREG->u.yxn.c); + Yap_NilError(INSTANTIATION_ERROR, "X is A* " Int_FORMAT, PREG->u.yxn.c); setregs(); FAIL(); ENDP(pt0); @@ -9634,7 +9634,7 @@ Yap_absmi(int inp) Int div = IntOfTerm(d1); if (div == 0) { saveregs(); - Yap_Error(EVALUATION_ERROR_ZERO_DIVISOR,TermNil,"// /2"); + Yap_NilError(EVALUATION_ERROR_ZERO_DIVISOR,"// /2"); setregs(); FAIL(); } @@ -9658,7 +9658,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, div_vv_unk, div_vv_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A//B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A//B"); setregs(); FAIL(); ENDP(pt0); @@ -9666,7 +9666,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d1, pt0, div_vv_nvar_unk, div_vv_nvar_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A//B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A//B"); setregs(); FAIL(); ENDP(pt0); @@ -9704,7 +9704,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, div_vc_unk, div_vc_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A//B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A//B"); setregs(); FAIL(); ENDP(pt0); @@ -9723,7 +9723,7 @@ Yap_absmi(int inp) Int div = IntOfTerm(d0); if (div == 0){ saveregs(); - Yap_Error(EVALUATION_ERROR_ZERO_DIVISOR,TermNil,"// /2"); + Yap_NilError(EVALUATION_ERROR_ZERO_DIVISOR,"// /2"); setregs(); FAIL(); } @@ -9747,7 +9747,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, div_cv_unk, div_cv_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is " Int_FORMAT "// A", PREG->u.xxn.c); + Yap_NilError(INSTANTIATION_ERROR, "X is " Int_FORMAT "// A", PREG->u.xxn.c); setregs(); FAIL(); ENDP(pt0); @@ -9770,7 +9770,7 @@ Yap_absmi(int inp) Int div = IntOfTerm(d1); if (div == 0) { saveregs(); - Yap_Error(EVALUATION_ERROR_ZERO_DIVISOR,TermNil,"// /2"); + Yap_NilError(EVALUATION_ERROR_ZERO_DIVISOR,"// /2"); setregs(); FAIL(); } @@ -9797,7 +9797,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, div_y_vv_unk, div_y_vv_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A//B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A//B"); setregs(); FAIL(); ENDP(pt0); @@ -9805,7 +9805,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d1, pt0, div_y_vv_nvar_unk, div_y_vv_nvar_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A//B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A//B"); setregs(); FAIL(); ENDP(pt0); @@ -9846,7 +9846,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, div_y_vc_unk, div_y_vc_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A//B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A//B"); setregs(); FAIL(); ENDP(pt0); @@ -9865,7 +9865,7 @@ Yap_absmi(int inp) Int div = IntOfTerm(d0); if (div == 0) { saveregs(); - Yap_Error(EVALUATION_ERROR_ZERO_DIVISOR,TermNil,"// /2"); + Yap_NilError(EVALUATION_ERROR_ZERO_DIVISOR,"// /2"); setregs(); FAIL(); } @@ -9893,7 +9893,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, div_y_cv_unk, div_y_cv_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is " Int_FORMAT "// A", PREG->u.yxn.c); + Yap_NilError(INSTANTIATION_ERROR, "X is " Int_FORMAT "// A", PREG->u.yxn.c); setregs(); FAIL(); ENDP(pt0); @@ -9934,7 +9934,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, and_vv_unk, and_vv_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A/\\B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A/\\B"); setregs(); FAIL(); ENDP(pt0); @@ -9942,7 +9942,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d1, pt0, and_vv_nvar_unk, and_vv_nvar_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A/\\B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A/\\B"); setregs(); FAIL(); ENDP(pt0); @@ -9980,7 +9980,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, and_vc_unk, and_vc_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A /\\ " Int_FORMAT , PREG->u.xxn.c); + Yap_NilError(INSTANTIATION_ERROR, "X is A /\\ " Int_FORMAT , PREG->u.xxn.c); setregs(); FAIL(); ENDP(pt0); @@ -10023,7 +10023,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, and_y_vv_unk, and_y_vv_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A/\\B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A/\\B"); setregs(); FAIL(); ENDP(pt0); @@ -10031,7 +10031,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d1, pt0, and_y_vv_nvar_unk, and_y_vv_nvar_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A/\\B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A/\\B"); setregs(); FAIL(); ENDP(pt0); @@ -10072,7 +10072,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, and_y_vc_unk, and_y_vc_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A /\\ " Int_FORMAT , PREG->u.yxn.c); + Yap_NilError(INSTANTIATION_ERROR, "X is A /\\ " Int_FORMAT , PREG->u.yxn.c); setregs(); FAIL(); ENDP(pt0); @@ -10113,7 +10113,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, or_vv_unk, or_vv_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A\\/B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A\\/B"); setregs(); FAIL(); ENDP(pt0); @@ -10121,7 +10121,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d1, pt0, or_vv_nvar_unk, or_vv_nvar_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A\\/B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A\\/B"); setregs(); FAIL(); ENDP(pt0); @@ -10158,7 +10158,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, or_vc_unk, or_vc_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A \\/ " Int_FORMAT , PREG->u.xxn.c); + Yap_NilError(INSTANTIATION_ERROR, "X is A \\/ " Int_FORMAT , PREG->u.xxn.c); setregs(); FAIL(); ENDP(pt0); @@ -10201,7 +10201,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, or_y_vv_unk, or_y_vv_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A\\/B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A\\/B"); setregs(); FAIL(); ENDP(pt0); @@ -10209,7 +10209,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d1, pt0, or_y_vv_nvar_unk, or_y_vv_nvar_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A\\/B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A\\/B"); setregs(); FAIL(); ENDP(pt0); @@ -10250,7 +10250,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, or_y_vc_unk, or_y_vc_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A \\/ " Int_FORMAT , PREG->u.yxn.c); + Yap_NilError(INSTANTIATION_ERROR, "X is A \\/ " Int_FORMAT , PREG->u.yxn.c); setregs(); FAIL(); ENDP(pt0); @@ -10294,7 +10294,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, sll_vv_unk, sll_vv_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A<>B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A>>B"); setregs(); FAIL(); ENDP(pt0); @@ -10574,7 +10574,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d1, pt0, slr_vv_nvar_unk, slr_vv_nvar_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A>>B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A>>B"); setregs(); FAIL(); ENDP(pt0); @@ -10612,7 +10612,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, slr_vc_unk, slr_vc_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A>>B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A>>B"); setregs(); FAIL(); ENDP(pt0); @@ -10653,7 +10653,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, slr_cv_unk, slr_cv_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A>>B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A>>B"); setregs(); FAIL(); ENDP(pt0); @@ -10700,7 +10700,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, slr_y_vv_unk, slr_y_vv_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A>>B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A>>B"); setregs(); FAIL(); ENDP(pt0); @@ -10708,7 +10708,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d1, pt0, slr_y_vv_nvar_unk, slr_y_vv_nvar_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A>>B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A>>B"); setregs(); FAIL(); ENDP(pt0); @@ -10749,7 +10749,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, slr_y_vc_unk, slr_y_vc_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A>>B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A>>B"); setregs(); ENDP(pt0); ENDD(d0); @@ -10792,7 +10792,7 @@ Yap_absmi(int inp) BEGP(pt0); deref_body(d0, pt0, slr_y_cv_unk, slr_y_cv_nvar); saveregs(); - Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A>>B"); + Yap_NilError(INSTANTIATION_ERROR, "X is A>>B"); setregs(); FAIL(); ENDP(pt0); @@ -11856,7 +11856,7 @@ Yap_absmi(int inp) /* make sure we have something to show for our trouble */ saveregs(); if (!Yap_gcl((1+d1)*sizeof(CELL), 0, YREG, NEXTOP(NEXTOP(PREG,xxx),Osbpp))) { - Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); + Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage); setregs(); JMPNext(); } else { @@ -11973,7 +11973,7 @@ Yap_absmi(int inp) /* make sure we have something to show for our trouble */ saveregs(); if (!Yap_gcl((1+d1)*sizeof(CELL), 0, YREG, NEXTOP(NEXTOP(PREG,xxc),Osbpp))) { - Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); + Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage); setregs(); JMPNext(); } else { @@ -12083,7 +12083,7 @@ Yap_absmi(int inp) /* make sure we have something to show for our trouble */ saveregs(); if (!Yap_gc(0, YREG, NEXTOP(NEXTOP(PREG,xxn),Osbpp))) { - Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); + Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage); setregs(); JMPNext(); } else { @@ -12190,7 +12190,7 @@ Yap_absmi(int inp) /* make sure we have something to show for our trouble */ saveregs(); if (!Yap_gcl((1+d1)*sizeof(CELL), 0, YREG, NEXTOP(NEXTOP(PREG,yxx),Osbpp))) { - Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); + Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage); setregs(); JMPNext(); } else { @@ -12317,7 +12317,7 @@ Yap_absmi(int inp) /* make sure we have something to show for our trouble */ saveregs(); if (!Yap_gcl((1+d1)*sizeof(CELL), 0, YREG, NEXTOP(NEXTOP(PREG,yxn),Osbpp))) { - Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); + Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage); setregs(); JMPNext(); } else { @@ -12445,7 +12445,7 @@ Yap_absmi(int inp) /* make sure we have something to show for our trouble */ saveregs(); if (!Yap_gcl((1+d1)*sizeof(CELL), 0, YREG, NEXTOP(NEXTOP(PREG,yxn),Osbpp))) { - Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); + Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage); setregs(); JMPNext(); } else { @@ -12821,7 +12821,7 @@ Yap_absmi(int inp) /* make sure we have something to show for our trouble */ saveregs(); if (!Yap_gcl((1+d1)*sizeof(CELL), 3, YREG, NEXTOP(NEXTOP(PREG,e),Osbmp))) { - Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); + Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage); setregs(); JMPNext(); } else { @@ -13066,7 +13066,7 @@ Yap_absmi(int inp) } saveregs_and_ycache(); if (!Yap_gc(((PredEntry *)SREG)->ArityOfPE, ENV, NEXTOP(PREG, Osbpp))) { - Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); + Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage); } setregs_and_ycache(); goto execute2_end; @@ -13271,7 +13271,7 @@ Yap_absmi(int inp) } saveregs_and_ycache(); if (!Yap_gc(((PredEntry *)SREG)->ArityOfPE, ENV, NEXTOP(PREG, Osbmp))) { - Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); + Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage); } setregs_and_ycache(); goto execute_end; @@ -13501,7 +13501,7 @@ Yap_absmi(int inp) UNLOCK(LOCAL_SignalLock); saveregs_and_ycache(); if (!Yap_growheap(FALSE, 0, NULL)) { - Yap_Error(OUT_OF_HEAP_ERROR, TermNil, "YAP failed to grow heap: %s", LOCAL_ErrorMessage); + Yap_NilError(OUT_OF_HEAP_ERROR, "YAP failed to grow heap: %s", LOCAL_ErrorMessage); setregs_and_ycache(); FAIL(); } @@ -13521,7 +13521,7 @@ Yap_absmi(int inp) #endif saveregs_and_ycache(); if(!Yap_growtrail (0, FALSE)) { - Yap_Error(OUT_OF_TRAIL_ERROR,TermNil,"YAP failed to reserve %ld bytes in growtrail",sizeof(CELL) * K16); + Yap_NilError(OUT_OF_TRAIL_ERROR,"YAP failed to reserve %ld bytes in growtrail",sizeof(CELL) * K16); setregs_and_ycache(); FAIL(); } @@ -13545,7 +13545,7 @@ Yap_absmi(int inp) UNLOCK(LOCAL_SignalLock); saveregs_and_ycache(); if (!Yap_gc(((PredEntry *)SREG)->ArityOfPE, ENV, NEXTOP(PREG, Osbpp))) { - Yap_Error(OUT_OF_STACK_ERROR,TermNil,LOCAL_ErrorMessage); + Yap_NilError(OUT_OF_STACK_ERROR,LOCAL_ErrorMessage); } setregs_and_ycache(); goto execute_after_comma; diff --git a/C/errors.c b/C/errors.c index 135ca68ac..8506ead58 100644 --- a/C/errors.c +++ b/C/errors.c @@ -380,6 +380,20 @@ Yap_bug_location(yamop *pc) static char tmpbuf[YAP_BUF_SIZE]; +yamop * +Yap_NilError(yap_error_number type, char *format,...) +{ + va_list ap; + yamop *res; + + va_start (ap, format); + /* now build the error string */ + res = Yap_Error(type, TermNil, format, ap); + va_end (ap); + + return res; +} + yamop * Yap_Error(yap_error_number type, Term where, char *format,...) { diff --git a/H/Regs.h b/H/Regs.h index 782cde3d3..61cb5376b 100644 --- a/H/Regs.h +++ b/H/Regs.h @@ -97,20 +97,20 @@ typedef struct regstore_t tr_fr_ptr TR_; /* 24 top of trail */ CELL *H_; /* 25 top of heap (global) stack */ choiceptr B_; /* 26 latest choice point */ +#ifdef DEPTH_LIMIT + CELL DEPTH_; /* 27 */ +#endif /* DEPTH_LIMIT */ + yamop *CP_; /* 28 continuation program counter */ + CELL *ENV_; /* 1 current environment */ #ifdef CUT_C cut_c_str_ptr CUT_C_TOP; #endif #if defined CUT_C && (defined MYDDAS_ODBC || defined MYDDAS_MYSQL) MYDDAS_GLOBAL MYDDAS_GLOBAL_POINTER; #endif -#ifdef DEPTH_LIMIT - CELL DEPTH_; /* 27 */ -#endif /* DEPTH_LIMIT */ - yamop *CP_; /* 28 continuation program counter */ yamop *P_; /* 7 prolog machine program counter */ CELL *YENV_; /* 5 current environment (may differ from ENV)*/ CELL *S_; /* 6 structure pointer */ - CELL *ENV_; /* 1 current environment */ CELL *ASP_; /* 8 top of local stack */ CELL *LCL0_; /* 3 local stack base */ tr_fr_ptr CurrentTrailTop_; /* 10 Auxiliary stack top */ diff --git a/H/Yapproto.h b/H/Yapproto.h index 0b713443e..d75d3ca97 100644 --- a/H/Yapproto.h +++ b/H/Yapproto.h @@ -165,6 +165,7 @@ void STD_PROTO(Yap_InitDBPreds,(void)); /* errors.c */ void STD_PROTO(Yap_exit,(int)); yamop *STD_PROTO(Yap_Error,(yap_error_number,Term,char *msg, ...)); +yamop *STD_PROTO(Yap_NilError,(yap_error_number,char *msg, ...)); /* eval.c */ void STD_PROTO(Yap_InitEval,(void)); diff --git a/H/absmi.h b/H/absmi.h index 0bf239e22..ba5926a6c 100644 --- a/H/absmi.h +++ b/H/absmi.h @@ -681,20 +681,20 @@ Macros to check the limits of stacks #else -#define check_trail(x) if (Unsigned(CurrentTrailTop) > Unsigned(x)) \ +#define check_trail(x) if (__builtin_expect((Unsigned(CurrentTrailTop) < Unsigned(x)),0)) \ goto notrailleft -#define check_trail_in_indexing(x) if (Unsigned(CurrentTrailTop) < Unsigned(x)) \ +#define check_trail_in_indexing(x) if (__builtin_expect((Unsigned(CurrentTrailTop) < Unsigned(x)),0)) \ goto notrailleft_from_index #endif #if (defined(YAPOR_SBA) && defined(YAPOR)) || defined(TABLING) #define check_stack(Label, GLOB) \ - if ( (Int)(Unsigned(YOUNGEST_CP((choiceptr)ENV_YREG,B_FZ)) - Unsigned(YOUNGEST_H(H_FZ,GLOB))) < CreepFlag ) goto Label + if (__builtin_expect( ((Int)(Unsigned(YOUNGEST_CP((choiceptr)ENV_YREG,B_FZ)) - Unsigned(YOUNGEST_H(H_FZ,GLOB))) < CreepFlag), 0) ) goto Label #else #define check_stack(Label, GLOB) \ - if ( (Int)(Unsigned(ENV_YREG) - Unsigned(GLOB)) < CreepFlag ) goto Label + if (__builtin_expect(((Int)(Unsigned(ENV_YREG) - Unsigned(GLOB)) < CreepFlag ), 0) ) goto Label #endif /* YAPOR_SBA && YAPOR */ /*************************************************************** From 139f64a459007a6a4b07618d05dd80493a5496aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Mon, 3 Oct 2011 15:29:36 -0300 Subject: [PATCH 09/12] fix compilation for OSX --- configure | 4 ---- configure.in | 4 ---- 2 files changed, 8 deletions(-) diff --git a/configure b/configure index 55e3e52f1..af1a526c9 100755 --- a/configure +++ b/configure @@ -5017,10 +5017,6 @@ then CFLAGS="-march=i486 $CFLAGS" CXXFLAGS="-march=i486 $CXXFLAGS" ;; - i386*) - CFLAGS="-march=i386 $CFLAGS" - CXXFLAGS="-march=i386 $CXXFLAGS" - ;; esac fi fi diff --git a/configure.in b/configure.in index d02bde7ae..49252c1dd 100644 --- a/configure.in +++ b/configure.in @@ -556,10 +556,6 @@ then CFLAGS="-march=i486 $CFLAGS" CXXFLAGS="-march=i486 $CXXFLAGS" ;; - i386*) - CFLAGS="-march=i386 $CFLAGS" - CXXFLAGS="-march=i386 $CXXFLAGS" - ;; esac fi fi From ff67abc9370963f9f591c7234357de9fa26a7777 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Mon, 3 Oct 2011 15:29:57 -0300 Subject: [PATCH 10/12] fix prefetching --- C/absmi.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/C/absmi.c b/C/absmi.c index 2a3d0f5c7..e4767d5e3 100644 --- a/C/absmi.c +++ b/C/absmi.c @@ -5445,9 +5445,11 @@ Yap_absmi(int inp) ENDOp(); Op(unify_void, o); - SREG++; + START_PREFETCH(o); PREG = NEXTOP(PREG, o); + SREG++; GONext(); + END_PREFETCH(); ENDOp(); OpW(unify_void_write, o); From a08d31a1619cd727350ad5cd32910dedac994405 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Mon, 3 Oct 2011 15:30:08 -0300 Subject: [PATCH 11/12] ytell compiler about some test outcomes. --- H/amiops.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/H/amiops.h b/H/amiops.h index 0df524333..d8abe7460 100644 --- a/H/amiops.h +++ b/H/amiops.h @@ -282,8 +282,8 @@ Binding Macros for Multiple Assignment Variables. extern void Yap_WakeUp(CELL *v); #define Bind_Local(A,D) { TRAIL_LOCAL(A,D); *(A) = (D); } -#define Bind_Global(A,D) { *(A) = (D); if (GlobalIsAttVar(A)) Yap_WakeUp(A); else TRAIL_GLOBAL(A,D); } -#define Bind(A,D) { *(A) = (D); if (A < H) { if (GlobalIsAttVar(A)) Yap_WakeUp(A); else TRAIL_GLOBAL(A,D); } else { TRAIL_LOCAL(A,D); } } +#define Bind_Global(A,D) { *(A) = (D); if (__builtin_expect(GlobalIsAttVar(A),0)) Yap_WakeUp(A); else TRAIL_GLOBAL(A,D); } +#define Bind(A,D) { *(A) = (D); if (A < H) { if (__builtin_expect(GlobalIsAttVar(A),0)) Yap_WakeUp(A); else TRAIL_GLOBAL(A,D); } else { TRAIL_LOCAL(A,D); } } #define Bind_NonAtt(A,D) { *(A) = (D); TRAIL(A,D); } #define Bind_Global_NonAtt(A,D) { *(A) = (D); TRAIL_GLOBAL(A,D); } #define Bind_and_Trail(A,D) { *(A) = (D); DO_TRAIL(A, D); } From df6c0b59e95aed4ab153fd40eab56e3993a5daac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Tue, 4 Oct 2011 06:42:01 -0300 Subject: [PATCH 12/12] jump guessing --- C/absmi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/C/absmi.c b/C/absmi.c index e4767d5e3..25031d196 100644 --- a/C/absmi.c +++ b/C/absmi.c @@ -8166,7 +8166,7 @@ Yap_absmi(int inp) deref_head(d0, swlnl_unk_p); /* non variable */ swlnl_nvar_p: - if (IsPairTerm(d0)) { + if (__builtin_expect(IsPairTerm(d0),1)) { /* pair */ #endif copy_jmp_address(PREG->u.ollll.l1);