3117 lines
		
	
	
		
			65 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			3117 lines
		
	
	
		
			65 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#ifdef SHADOW_S
 | 
						|
#ifdef LOW_LEVEL_TRACER
 | 
						|
#ifdef FROZEN_STACKS
 | 
						|
#ifdef YAPOR_SBA
 | 
						|
#define _call_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      if (!((*_PREG)->u.Osbpp.p->PredFlags & (SafePredFlag|HiddenPredFlag))) { \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	check_stack_on_call; \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
      } \
 | 
						|
      { \
 | 
						|
	choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
 \
 | 
						|
	if (YREG > (CELL *) top_b || YREG < HR) \
 | 
						|
	    ASP = (CELL *)top_b; \
 | 
						|
	else \
 | 
						|
	    ASP = (CELL *)(((char *)YREG) +  (*_PREG)->u.Osbpp.s); \
 | 
						|
      } \
 | 
						|
      if (Yap_do_low_level_trace) { \
 | 
						|
	low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
 | 
						|
      } \
 | 
						|
      BEGD(d0); \
 | 
						|
      CPredicate f = (*_PREG)->u.Osbpp.p->cs.f_code; \
 | 
						|
      (*_PREG) = NEXTOP((*_PREG), Osbpp); \
 | 
						|
      saveregs(); \
 | 
						|
      d0 = (f)(PASS_REGS1); \
 | 
						|
      setregs(); \
 | 
						|
      (*_SREG) = Yap_REGS.S_; \
 | 
						|
      if (!d0) { \
 | 
						|
        FAIL(); \
 | 
						|
      } \
 | 
						|
      CACHE_A1(); \
 | 
						|
      ENDD(d0); \
 | 
						|
      GONEXT();
 | 
						|
#else /* YAPOR_SBA */
 | 
						|
#define _call_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      if (!((*_PREG)->u.Osbpp.p->PredFlags & (SafePredFlag|HiddenPredFlag))) { \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	check_stack_on_call; \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
      } \
 | 
						|
      { \
 | 
						|
	choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
 \
 | 
						|
	if (YREG > (CELL *) top_b) \
 | 
						|
	    ASP = (CELL *)top_b; \
 | 
						|
	else \
 | 
						|
	    ASP = (CELL *)(((char *)YREG) +  (*_PREG)->u.Osbpp.s); \
 | 
						|
      } \
 | 
						|
      if (Yap_do_low_level_trace) { \
 | 
						|
	low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
 | 
						|
      } \
 | 
						|
      BEGD(d0); \
 | 
						|
      CPredicate f = (*_PREG)->u.Osbpp.p->cs.f_code; \
 | 
						|
      (*_PREG) = NEXTOP((*_PREG), Osbpp); \
 | 
						|
      saveregs(); \
 | 
						|
      d0 = (f)(PASS_REGS1); \
 | 
						|
      setregs(); \
 | 
						|
      (*_SREG) = Yap_REGS.S_; \
 | 
						|
      if (!d0) { \
 | 
						|
        FAIL(); \
 | 
						|
      } \
 | 
						|
      CACHE_A1(); \
 | 
						|
      ENDD(d0); \
 | 
						|
      GONEXT();
 | 
						|
#endif /* YAPOR_SBA */
 | 
						|
#else /* FROZEN_STACKS */
 | 
						|
#define _call_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      if (!((*_PREG)->u.Osbpp.p->PredFlags & (SafePredFlag|HiddenPredFlag))) { \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	check_stack_on_call; \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
      } \
 | 
						|
      SET_ASP(YREG, (*_PREG)->u.Osbpp.s); \
 | 
						|
      if (Yap_do_low_level_trace) { \
 | 
						|
	low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
 | 
						|
      } \
 | 
						|
      BEGD(d0); \
 | 
						|
      CPredicate f = (*_PREG)->u.Osbpp.p->cs.f_code; \
 | 
						|
      (*_PREG) = NEXTOP((*_PREG), Osbpp); \
 | 
						|
      saveregs(); \
 | 
						|
      d0 = (f)(PASS_REGS1); \
 | 
						|
      setregs(); \
 | 
						|
      (*_SREG) = Yap_REGS.S_; \
 | 
						|
      if (!d0) { \
 | 
						|
        FAIL(); \
 | 
						|
      } \
 | 
						|
      CACHE_A1(); \
 | 
						|
      ENDD(d0); \
 | 
						|
      GONEXT();
 | 
						|
#endif /* FROZEN_STACKS */
 | 
						|
#else /* LOW_LEVEL_TRACER */
 | 
						|
#ifdef FROZEN_STACKS
 | 
						|
#ifdef YAPOR_SBA
 | 
						|
#define _call_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      if (!((*_PREG)->u.Osbpp.p->PredFlags & (SafePredFlag|HiddenPredFlag))) { \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	check_stack_on_call; \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
      } \
 | 
						|
      { \
 | 
						|
	choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
 \
 | 
						|
	if (YREG > (CELL *) top_b || YREG < HR) \
 | 
						|
	    ASP = (CELL *)top_b; \
 | 
						|
	else \
 | 
						|
	    ASP = (CELL *)(((char *)YREG) +  (*_PREG)->u.Osbpp.s); \
 | 
						|
      } \
 | 
						|
      BEGD(d0); \
 | 
						|
      CPredicate f = (*_PREG)->u.Osbpp.p->cs.f_code; \
 | 
						|
      (*_PREG) = NEXTOP((*_PREG), Osbpp); \
 | 
						|
      saveregs(); \
 | 
						|
      d0 = (f)(PASS_REGS1); \
 | 
						|
      setregs(); \
 | 
						|
      (*_SREG) = Yap_REGS.S_; \
 | 
						|
      if (!d0) { \
 | 
						|
        FAIL(); \
 | 
						|
      } \
 | 
						|
      CACHE_A1(); \
 | 
						|
      ENDD(d0); \
 | 
						|
      GONEXT();
 | 
						|
#else /* YAPOR_SBA */
 | 
						|
#define _call_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      if (!((*_PREG)->u.Osbpp.p->PredFlags & (SafePredFlag|HiddenPredFlag))) { \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	check_stack_on_call; \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
      } \
 | 
						|
      { \
 | 
						|
	choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
 \
 | 
						|
	if (YREG > (CELL *) top_b) \
 | 
						|
	    ASP = (CELL *)top_b; \
 | 
						|
	else \
 | 
						|
	    ASP = (CELL *)(((char *)YREG) +  (*_PREG)->u.Osbpp.s); \
 | 
						|
      } \
 | 
						|
      BEGD(d0); \
 | 
						|
      CPredicate f = (*_PREG)->u.Osbpp.p->cs.f_code; \
 | 
						|
      (*_PREG) = NEXTOP((*_PREG), Osbpp); \
 | 
						|
      saveregs(); \
 | 
						|
      d0 = (f)(PASS_REGS1); \
 | 
						|
      setregs(); \
 | 
						|
      (*_SREG) = Yap_REGS.S_; \
 | 
						|
      if (!d0) { \
 | 
						|
        FAIL(); \
 | 
						|
      } \
 | 
						|
      CACHE_A1(); \
 | 
						|
      ENDD(d0); \
 | 
						|
      GONEXT();
 | 
						|
#endif /* YAPOR_SBA */
 | 
						|
#else /* FROZEN_STACKS */
 | 
						|
#define _call_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      if (!((*_PREG)->u.Osbpp.p->PredFlags & (SafePredFlag|HiddenPredFlag))) { \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	check_stack_on_call; \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
      } \
 | 
						|
      SET_ASP(YREG, (*_PREG)->u.Osbpp.s); \
 | 
						|
      BEGD(d0); \
 | 
						|
      CPredicate f = (*_PREG)->u.Osbpp.p->cs.f_code; \
 | 
						|
      (*_PREG) = NEXTOP((*_PREG), Osbpp); \
 | 
						|
      saveregs(); \
 | 
						|
      d0 = (f)(PASS_REGS1); \
 | 
						|
      setregs(); \
 | 
						|
      (*_SREG) = Yap_REGS.S_; \
 | 
						|
      if (!d0) { \
 | 
						|
        FAIL(); \
 | 
						|
      } \
 | 
						|
      CACHE_A1(); \
 | 
						|
      ENDD(d0); \
 | 
						|
      GONEXT();
 | 
						|
#endif /* FROZEN_STACKS */
 | 
						|
#endif /* LOW_LEVEL_TRACER */
 | 
						|
#else /* SHADOW_S */
 | 
						|
#ifdef LOW_LEVEL_TRACER
 | 
						|
#ifdef FROZEN_STACKS
 | 
						|
#ifdef YAPOR_SBA
 | 
						|
#define _call_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      if (!((*_PREG)->u.Osbpp.p->PredFlags & (SafePredFlag|HiddenPredFlag))) { \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	check_stack_on_call; \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
      } \
 | 
						|
      { \
 | 
						|
	choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
 \
 | 
						|
	if (YREG > (CELL *) top_b || YREG < HR) \
 | 
						|
	    ASP = (CELL *)top_b; \
 | 
						|
	else \
 | 
						|
	    ASP = (CELL *)(((char *)YREG) +  (*_PREG)->u.Osbpp.s); \
 | 
						|
      } \
 | 
						|
      if (Yap_do_low_level_trace) { \
 | 
						|
	low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
 | 
						|
      } \
 | 
						|
      BEGD(d0); \
 | 
						|
      CPredicate f = (*_PREG)->u.Osbpp.p->cs.f_code; \
 | 
						|
      (*_PREG) = NEXTOP((*_PREG), Osbpp); \
 | 
						|
      saveregs(); \
 | 
						|
      d0 = (f)(PASS_REGS1); \
 | 
						|
      setregs(); \
 | 
						|
      if (!d0) { \
 | 
						|
        FAIL(); \
 | 
						|
      } \
 | 
						|
      CACHE_A1(); \
 | 
						|
      ENDD(d0); \
 | 
						|
      GONEXT();
 | 
						|
#else /* YAPOR_SBA */
 | 
						|
#define _call_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      if (!((*_PREG)->u.Osbpp.p->PredFlags & (SafePredFlag|HiddenPredFlag))) { \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	check_stack_on_call; \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
      } \
 | 
						|
      { \
 | 
						|
	choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
 \
 | 
						|
	if (YREG > (CELL *) top_b) \
 | 
						|
	    ASP = (CELL *)top_b; \
 | 
						|
	else \
 | 
						|
	    ASP = (CELL *)(((char *)YREG) +  (*_PREG)->u.Osbpp.s); \
 | 
						|
      } \
 | 
						|
      if (Yap_do_low_level_trace) { \
 | 
						|
	low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
 | 
						|
      } \
 | 
						|
      BEGD(d0); \
 | 
						|
      CPredicate f = (*_PREG)->u.Osbpp.p->cs.f_code; \
 | 
						|
      (*_PREG) = NEXTOP((*_PREG), Osbpp); \
 | 
						|
      saveregs(); \
 | 
						|
      d0 = (f)(PASS_REGS1); \
 | 
						|
      setregs(); \
 | 
						|
      if (!d0) { \
 | 
						|
        FAIL(); \
 | 
						|
      } \
 | 
						|
      CACHE_A1(); \
 | 
						|
      ENDD(d0); \
 | 
						|
      GONEXT();
 | 
						|
#endif /* YAPOR_SBA */
 | 
						|
#else /* FROZEN_STACKS */
 | 
						|
#define _call_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      if (!((*_PREG)->u.Osbpp.p->PredFlags & (SafePredFlag|HiddenPredFlag))) { \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	check_stack_on_call; \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
      } \
 | 
						|
      SET_ASP(YREG, (*_PREG)->u.Osbpp.s); \
 | 
						|
      if (Yap_do_low_level_trace) { \
 | 
						|
	low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
 | 
						|
      } \
 | 
						|
      BEGD(d0); \
 | 
						|
      CPredicate f = (*_PREG)->u.Osbpp.p->cs.f_code; \
 | 
						|
      (*_PREG) = NEXTOP((*_PREG), Osbpp); \
 | 
						|
      saveregs(); \
 | 
						|
      d0 = (f)(PASS_REGS1); \
 | 
						|
      setregs(); \
 | 
						|
      if (!d0) { \
 | 
						|
        FAIL(); \
 | 
						|
      } \
 | 
						|
      CACHE_A1(); \
 | 
						|
      ENDD(d0); \
 | 
						|
      GONEXT();
 | 
						|
#endif /* FROZEN_STACKS */
 | 
						|
#else /* LOW_LEVEL_TRACER */
 | 
						|
#ifdef FROZEN_STACKS
 | 
						|
#ifdef YAPOR_SBA
 | 
						|
#define _call_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      if (!((*_PREG)->u.Osbpp.p->PredFlags & (SafePredFlag|HiddenPredFlag))) { \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	check_stack_on_call; \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
      } \
 | 
						|
      { \
 | 
						|
	choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
 \
 | 
						|
	if (YREG > (CELL *) top_b || YREG < HR) \
 | 
						|
	    ASP = (CELL *)top_b; \
 | 
						|
	else \
 | 
						|
	    ASP = (CELL *)(((char *)YREG) +  (*_PREG)->u.Osbpp.s); \
 | 
						|
      } \
 | 
						|
      BEGD(d0); \
 | 
						|
      CPredicate f = (*_PREG)->u.Osbpp.p->cs.f_code; \
 | 
						|
      (*_PREG) = NEXTOP((*_PREG), Osbpp); \
 | 
						|
      saveregs(); \
 | 
						|
      d0 = (f)(PASS_REGS1); \
 | 
						|
      setregs(); \
 | 
						|
      if (!d0) { \
 | 
						|
        FAIL(); \
 | 
						|
      } \
 | 
						|
      CACHE_A1(); \
 | 
						|
      ENDD(d0); \
 | 
						|
      GONEXT();
 | 
						|
#else /* YAPOR_SBA */
 | 
						|
#define _call_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      if (!((*_PREG)->u.Osbpp.p->PredFlags & (SafePredFlag|HiddenPredFlag))) { \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	check_stack_on_call; \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
      } \
 | 
						|
      { \
 | 
						|
	choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
 \
 | 
						|
	if (YREG > (CELL *) top_b) \
 | 
						|
	    ASP = (CELL *)top_b; \
 | 
						|
	else \
 | 
						|
	    ASP = (CELL *)(((char *)YREG) +  (*_PREG)->u.Osbpp.s); \
 | 
						|
      } \
 | 
						|
      BEGD(d0); \
 | 
						|
      CPredicate f = (*_PREG)->u.Osbpp.p->cs.f_code; \
 | 
						|
      (*_PREG) = NEXTOP((*_PREG), Osbpp); \
 | 
						|
      saveregs(); \
 | 
						|
      d0 = (f)(PASS_REGS1); \
 | 
						|
      setregs(); \
 | 
						|
      if (!d0) { \
 | 
						|
        FAIL(); \
 | 
						|
      } \
 | 
						|
      CACHE_A1(); \
 | 
						|
      ENDD(d0); \
 | 
						|
      GONEXT();
 | 
						|
#endif /* YAPOR_SBA */
 | 
						|
#else /* FROZEN_STACKS */
 | 
						|
#define _call_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      if (!((*_PREG)->u.Osbpp.p->PredFlags & (SafePredFlag|HiddenPredFlag))) { \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	check_stack_on_call; \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
      } \
 | 
						|
      SET_ASP(YREG, (*_PREG)->u.Osbpp.s); \
 | 
						|
      BEGD(d0); \
 | 
						|
      CPredicate f = (*_PREG)->u.Osbpp.p->cs.f_code; \
 | 
						|
      (*_PREG) = NEXTOP((*_PREG), Osbpp); \
 | 
						|
      saveregs(); \
 | 
						|
      d0 = (f)(PASS_REGS1); \
 | 
						|
      setregs(); \
 | 
						|
      if (!d0) { \
 | 
						|
        FAIL(); \
 | 
						|
      } \
 | 
						|
      CACHE_A1(); \
 | 
						|
      ENDD(d0); \
 | 
						|
      GONEXT();
 | 
						|
#endif /* FROZEN_STACKS */
 | 
						|
#endif /* LOW_LEVEL_TRACER */
 | 
						|
#endif /* SHADOW_S */
 | 
						|
 | 
						|
#ifdef LOW_LEVEL_TRACER
 | 
						|
#ifdef SHADOW_S
 | 
						|
#ifdef NO_CHECKING
 | 
						|
#ifdef DEPTH_LIMIT
 | 
						|
#ifdef FROZEN_STACKS
 | 
						|
#ifdef YAPOR_SBA
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b || YREG < HR) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#else /* YAPOR_SBA */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* YAPOR_SBA */
 | 
						|
#else /* FROZEN_STACKS */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	SET_ASP(YREG, E_CB*sizeof(CELL)); \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* FROZEN_STACKS */
 | 
						|
#else /* DEPTH_LIMIT */
 | 
						|
#ifdef FROZEN_STACKS
 | 
						|
#ifdef YAPOR_SBA
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b || YREG < HR) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#else /* YAPOR_SBA */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* YAPOR_SBA */
 | 
						|
#else /* FROZEN_STACKS */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	SET_ASP(YREG, E_CB*sizeof(CELL)); \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* FROZEN_STACKS */
 | 
						|
#endif /* DEPTH_LIMIT */
 | 
						|
#else /* NO_CHECKING */
 | 
						|
#ifdef DEPTH_LIMIT
 | 
						|
#ifdef FROZEN_STACKS
 | 
						|
#ifdef YAPOR_SBA
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b || YREG < HR) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#else /* YAPOR_SBA */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* YAPOR_SBA */
 | 
						|
#else /* FROZEN_STACKS */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	SET_ASP(YREG, E_CB*sizeof(CELL)); \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* FROZEN_STACKS */
 | 
						|
#else /* DEPTH_LIMIT */
 | 
						|
#ifdef FROZEN_STACKS
 | 
						|
#ifdef YAPOR_SBA
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b || YREG < HR) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#else /* YAPOR_SBA */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* YAPOR_SBA */
 | 
						|
#else /* FROZEN_STACKS */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	SET_ASP(YREG, E_CB*sizeof(CELL)); \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* FROZEN_STACKS */
 | 
						|
#endif /* DEPTH_LIMIT */
 | 
						|
#endif /* NO_CHECKING */
 | 
						|
#else /* SHADOW_S */
 | 
						|
#ifdef NO_CHECKING
 | 
						|
#ifdef DEPTH_LIMIT
 | 
						|
#ifdef FROZEN_STACKS
 | 
						|
#ifdef YAPOR_SBA
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b || YREG < HR) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#else /* YAPOR_SBA */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* YAPOR_SBA */
 | 
						|
#else /* FROZEN_STACKS */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	SET_ASP(YREG, E_CB*sizeof(CELL)); \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* FROZEN_STACKS */
 | 
						|
#else /* DEPTH_LIMIT */
 | 
						|
#ifdef FROZEN_STACKS
 | 
						|
#ifdef YAPOR_SBA
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b || YREG < HR) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#else /* YAPOR_SBA */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* YAPOR_SBA */
 | 
						|
#else /* FROZEN_STACKS */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	SET_ASP(YREG, E_CB*sizeof(CELL)); \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* FROZEN_STACKS */
 | 
						|
#endif /* DEPTH_LIMIT */
 | 
						|
#else /* NO_CHECKING */
 | 
						|
#ifdef DEPTH_LIMIT
 | 
						|
#ifdef FROZEN_STACKS
 | 
						|
#ifdef YAPOR_SBA
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b || YREG < HR) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#else /* YAPOR_SBA */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* YAPOR_SBA */
 | 
						|
#else /* FROZEN_STACKS */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	SET_ASP(YREG, E_CB*sizeof(CELL)); \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* FROZEN_STACKS */
 | 
						|
#else /* DEPTH_LIMIT */
 | 
						|
#ifdef FROZEN_STACKS
 | 
						|
#ifdef YAPOR_SBA
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b || YREG < HR) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#else /* YAPOR_SBA */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* YAPOR_SBA */
 | 
						|
#else /* FROZEN_STACKS */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	SET_ASP(YREG, E_CB*sizeof(CELL)); \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,pt0,XREGS+1); \
 | 
						|
	} \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* FROZEN_STACKS */
 | 
						|
#endif /* DEPTH_LIMIT */
 | 
						|
#endif /* NO_CHECKING */
 | 
						|
#endif /* SHADOW_S */
 | 
						|
#else /* LOW_LEVEL_TRACER */
 | 
						|
#ifdef SHADOW_S
 | 
						|
#ifdef NO_CHECKING
 | 
						|
#ifdef DEPTH_LIMIT
 | 
						|
#ifdef FROZEN_STACKS
 | 
						|
#ifdef YAPOR_SBA
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b || YREG < HR) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#else /* YAPOR_SBA */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* YAPOR_SBA */
 | 
						|
#else /* FROZEN_STACKS */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	SET_ASP(YREG, E_CB*sizeof(CELL)); \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* FROZEN_STACKS */
 | 
						|
#else /* DEPTH_LIMIT */
 | 
						|
#ifdef FROZEN_STACKS
 | 
						|
#ifdef YAPOR_SBA
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b || YREG < HR) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#else /* YAPOR_SBA */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* YAPOR_SBA */
 | 
						|
#else /* FROZEN_STACKS */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	SET_ASP(YREG, E_CB*sizeof(CELL)); \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* FROZEN_STACKS */
 | 
						|
#endif /* DEPTH_LIMIT */
 | 
						|
#else /* NO_CHECKING */
 | 
						|
#ifdef DEPTH_LIMIT
 | 
						|
#ifdef FROZEN_STACKS
 | 
						|
#ifdef YAPOR_SBA
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b || YREG < HR) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#else /* YAPOR_SBA */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* YAPOR_SBA */
 | 
						|
#else /* FROZEN_STACKS */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	SET_ASP(YREG, E_CB*sizeof(CELL)); \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* FROZEN_STACKS */
 | 
						|
#else /* DEPTH_LIMIT */
 | 
						|
#ifdef FROZEN_STACKS
 | 
						|
#ifdef YAPOR_SBA
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b || YREG < HR) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#else /* YAPOR_SBA */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* YAPOR_SBA */
 | 
						|
#else /* FROZEN_STACKS */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	SET_ASP(YREG, E_CB*sizeof(CELL)); \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  (*_SREG) = Yap_REGS.S_; \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* FROZEN_STACKS */
 | 
						|
#endif /* DEPTH_LIMIT */
 | 
						|
#endif /* NO_CHECKING */
 | 
						|
#else /* SHADOW_S */
 | 
						|
#ifdef NO_CHECKING
 | 
						|
#ifdef DEPTH_LIMIT
 | 
						|
#ifdef FROZEN_STACKS
 | 
						|
#ifdef YAPOR_SBA
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b || YREG < HR) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#else /* YAPOR_SBA */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* YAPOR_SBA */
 | 
						|
#else /* FROZEN_STACKS */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	SET_ASP(YREG, E_CB*sizeof(CELL)); \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* FROZEN_STACKS */
 | 
						|
#else /* DEPTH_LIMIT */
 | 
						|
#ifdef FROZEN_STACKS
 | 
						|
#ifdef YAPOR_SBA
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b || YREG < HR) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#else /* YAPOR_SBA */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* YAPOR_SBA */
 | 
						|
#else /* FROZEN_STACKS */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	SET_ASP(YREG, E_CB*sizeof(CELL)); \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* FROZEN_STACKS */
 | 
						|
#endif /* DEPTH_LIMIT */
 | 
						|
#else /* NO_CHECKING */
 | 
						|
#ifdef DEPTH_LIMIT
 | 
						|
#ifdef FROZEN_STACKS
 | 
						|
#ifdef YAPOR_SBA
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b || YREG < HR) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#else /* YAPOR_SBA */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* YAPOR_SBA */
 | 
						|
#else /* FROZEN_STACKS */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	SET_ASP(YREG, E_CB*sizeof(CELL)); \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	if (DEPTH <= MkIntTerm(1)) { \
 | 
						|
	  if (pt0->ModuleOfPred) { \
 | 
						|
	    if (DEPTH == MkIntTerm(0)) { \
 | 
						|
	      FAIL(); \
 | 
						|
		} \
 | 
						|
	    else { \
 | 
						|
          DEPTH = RESET_DEPTH(); \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} else if (pt0->ModuleOfPred) { \
 | 
						|
	  DEPTH -= MkIntConstant(2); \
 | 
						|
	} \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    DEPTH = ENV_YREG[E_DEPTH]; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* FROZEN_STACKS */
 | 
						|
#else /* DEPTH_LIMIT */
 | 
						|
#ifdef FROZEN_STACKS
 | 
						|
#ifdef YAPOR_SBA
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b || YREG < HR) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#else /* YAPOR_SBA */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	{ \
 | 
						|
	  choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	  if (YREG > (CELL *) top_b) { \
 | 
						|
	      ASP = (CELL *)top_b; \
 | 
						|
	  } \
 | 
						|
	  else { \
 | 
						|
        ASP = YREG+E_CB; \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* YAPOR_SBA */
 | 
						|
#else /* FROZEN_STACKS */
 | 
						|
#define _execute_cpred_instinit \
 | 
						|
      check_trail(TR); \
 | 
						|
      { \
 | 
						|
	PredEntry *pt0; \
 | 
						|
	BEGD(d0); \
 | 
						|
	CACHE_Y_AS_ENV(YREG); \
 | 
						|
	SET_ASP(YREG, E_CB*sizeof(CELL)); \
 | 
						|
	pt0 = (*_PREG)->u.pp.p; \
 | 
						|
	CACHE_A1(); \
 | 
						|
	BEGD(d0); \
 | 
						|
	d0 = (CELL)B; \
 | 
						|
	check_stack_on_execute; \
 | 
						|
	save_pc(); \
 | 
						|
	ENV_YREG[E_CB] = d0; \
 | 
						|
	ENDD(d0); \
 | 
						|
	{ \
 | 
						|
	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \
 | 
						|
	  yamop *oldPREG = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  d0 = (f)(PASS_REGS1); \
 | 
						|
	  setregs(); \
 | 
						|
	  if (!d0) { \
 | 
						|
	    FAIL(); \
 | 
						|
	  } \
 | 
						|
	  if (oldPREG == (*_PREG)) { \
 | 
						|
	    (*_PREG) = (*_CPREG); \
 | 
						|
	    ENV_YREG = ENV; \
 | 
						|
	    WRITEBACK_Y_AS_ENV(); \
 | 
						|
	  } else { \
 | 
						|
	    CACHE_A1(); \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
	GONEXT(); \
 | 
						|
	ENDCACHE_Y_AS_ENV(); \
 | 
						|
	ENDD(d0); \
 | 
						|
      }
 | 
						|
#endif /* FROZEN_STACKS */
 | 
						|
#endif /* DEPTH_LIMIT */
 | 
						|
#endif /* NO_CHECKING */
 | 
						|
#endif /* SHADOW_S */
 | 
						|
#endif /* LOW_LEVEL_TRACER */
 | 
						|
 | 
						|
#ifdef LOW_LEVEL_TRACER
 | 
						|
#ifdef FROZEN_STACKS
 | 
						|
#ifdef YAPOR_SBA
 | 
						|
#define _call_usercpred_instinit \
 | 
						|
      CACHE_Y_AS_ENV(YREG); \
 | 
						|
      check_stack_on_call; \
 | 
						|
      ENDCACHE_Y_AS_ENV(); \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
 | 
						|
	} \
 | 
						|
      { \
 | 
						|
	choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	if (YREG > (CELL *) top_b || YREG < HR) \
 | 
						|
	  ASP = (CELL *) top_b; \
 | 
						|
	else \
 | 
						|
      ASP = (CELL *)(((char *)YREG) +  (*_PREG)->u.Osbpp.s); \
 | 
						|
      } \
 | 
						|
      { \
 | 
						|
	yamop *savedP; \
 | 
						|
	Yap_StartSlots( PASS_REGS1 ); \
 | 
						|
	LOCAL_PrologMode = UserCCallMode; \
 | 
						|
	{ \
 | 
						|
	  PredEntry *p = (*_PREG)->u.Osbpp.p; \
 | 
						|
	  (*_PREG) = NEXTOP((*_PREG), Osbpp); \
 | 
						|
	  savedP = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  save_machine_regs(); \
 | 
						|
	  (*_SREG) = (CELL *) YAP_Execute(p, p->cs.f_code); \
 | 
						|
	} \
 | 
						|
	Yap_CloseSlots( PASS_REGS1 ); \
 | 
						|
	setregs(); \
 | 
						|
	LOCAL_PrologMode = UserMode; \
 | 
						|
	restore_machine_regs(); \
 | 
						|
	(*_PREG) = savedP; \
 | 
						|
      } \
 | 
						|
      if (EX) { \
 | 
						|
	struct DB_TERM *exp = EX; \
 | 
						|
	EX = NULL; \
 | 
						|
	Yap_JumpToEnv(Yap_PopTermFromDB(exp)); \
 | 
						|
      } \
 | 
						|
      if (!(*_SREG)) { \
 | 
						|
	FAIL(); \
 | 
						|
      } \
 | 
						|
      YENV = ENV; \
 | 
						|
      YREG = ENV; \
 | 
						|
      GONEXT();
 | 
						|
#else /* YAPOR_SBA */
 | 
						|
#define _call_usercpred_instinit \
 | 
						|
      CACHE_Y_AS_ENV(YREG); \
 | 
						|
      check_stack_on_call; \
 | 
						|
      ENDCACHE_Y_AS_ENV(); \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
 | 
						|
	} \
 | 
						|
      { \
 | 
						|
	choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	if (YREG > (CELL *) top_b) \
 | 
						|
      ASP = (CELL *) top_b; \
 | 
						|
	else \
 | 
						|
      ASP = (CELL *)(((char *)YREG) +  (*_PREG)->u.Osbpp.s); \
 | 
						|
      } \
 | 
						|
      { \
 | 
						|
	yamop *savedP; \
 | 
						|
	Yap_StartSlots( PASS_REGS1 ); \
 | 
						|
	LOCAL_PrologMode = UserCCallMode; \
 | 
						|
	{ \
 | 
						|
	  PredEntry *p = (*_PREG)->u.Osbpp.p; \
 | 
						|
	  (*_PREG) = NEXTOP((*_PREG), Osbpp); \
 | 
						|
	  savedP = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  save_machine_regs(); \
 | 
						|
	  (*_SREG) = (CELL *) YAP_Execute(p, p->cs.f_code); \
 | 
						|
	} \
 | 
						|
	Yap_CloseSlots( PASS_REGS1 ); \
 | 
						|
	setregs(); \
 | 
						|
	LOCAL_PrologMode = UserMode; \
 | 
						|
	restore_machine_regs(); \
 | 
						|
	(*_PREG) = savedP; \
 | 
						|
      } \
 | 
						|
      if (EX) { \
 | 
						|
	struct DB_TERM *exp = EX; \
 | 
						|
	EX = NULL; \
 | 
						|
	Yap_JumpToEnv(Yap_PopTermFromDB(exp)); \
 | 
						|
      } \
 | 
						|
      if (!(*_SREG)) { \
 | 
						|
	FAIL(); \
 | 
						|
      } \
 | 
						|
      YENV = ENV; \
 | 
						|
      YREG = ENV; \
 | 
						|
      GONEXT();
 | 
						|
#endif /* YAPOR_SBA */
 | 
						|
#else /* FROZEN_STACKS */
 | 
						|
#define _call_usercpred_instinit \
 | 
						|
      CACHE_Y_AS_ENV(YREG); \
 | 
						|
      check_stack_on_call; \
 | 
						|
      ENDCACHE_Y_AS_ENV(); \
 | 
						|
	if (Yap_do_low_level_trace) { \
 | 
						|
	  low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
 | 
						|
	} \
 | 
						|
      SET_ASP(YREG, (*_PREG)->u.Osbpp.s); \
 | 
						|
      { \
 | 
						|
	yamop *savedP; \
 | 
						|
	Yap_StartSlots( PASS_REGS1 ); \
 | 
						|
	LOCAL_PrologMode = UserCCallMode; \
 | 
						|
	{ \
 | 
						|
	  PredEntry *p = (*_PREG)->u.Osbpp.p; \
 | 
						|
	  (*_PREG) = NEXTOP((*_PREG), Osbpp); \
 | 
						|
	  savedP = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  save_machine_regs(); \
 | 
						|
	  (*_SREG) = (CELL *) YAP_Execute(p, p->cs.f_code); \
 | 
						|
	} \
 | 
						|
	Yap_CloseSlots( PASS_REGS1 ); \
 | 
						|
	setregs(); \
 | 
						|
	LOCAL_PrologMode = UserMode; \
 | 
						|
	restore_machine_regs(); \
 | 
						|
	(*_PREG) = savedP; \
 | 
						|
      } \
 | 
						|
      if (EX) { \
 | 
						|
	struct DB_TERM *exp = EX; \
 | 
						|
	EX = NULL; \
 | 
						|
	Yap_JumpToEnv(Yap_PopTermFromDB(exp)); \
 | 
						|
      } \
 | 
						|
      if (!(*_SREG)) { \
 | 
						|
	FAIL(); \
 | 
						|
      } \
 | 
						|
      YENV = ENV; \
 | 
						|
      YREG = ENV; \
 | 
						|
      GONEXT();
 | 
						|
#endif /* FROZEN_STACKS */
 | 
						|
#else /* LOW_LEVEL_TRACER */
 | 
						|
#ifdef FROZEN_STACKS
 | 
						|
#ifdef YAPOR_SBA
 | 
						|
#define _call_usercpred_instinit \
 | 
						|
      CACHE_Y_AS_ENV(YREG); \
 | 
						|
      check_stack_on_call; \
 | 
						|
      ENDCACHE_Y_AS_ENV(); \
 | 
						|
      { \
 | 
						|
	choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	if (YREG > (CELL *) top_b || YREG < HR) \
 | 
						|
	  ASP = (CELL *) top_b; \
 | 
						|
	else \
 | 
						|
      ASP = (CELL *)(((char *)YREG) +  (*_PREG)->u.Osbpp.s); \
 | 
						|
      } \
 | 
						|
      { \
 | 
						|
	yamop *savedP; \
 | 
						|
	Yap_StartSlots( PASS_REGS1 ); \
 | 
						|
	LOCAL_PrologMode = UserCCallMode; \
 | 
						|
	{ \
 | 
						|
	  PredEntry *p = (*_PREG)->u.Osbpp.p; \
 | 
						|
	  (*_PREG) = NEXTOP((*_PREG), Osbpp); \
 | 
						|
	  savedP = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  save_machine_regs(); \
 | 
						|
	  (*_SREG) = (CELL *) YAP_Execute(p, p->cs.f_code); \
 | 
						|
	} \
 | 
						|
	Yap_CloseSlots( PASS_REGS1 ); \
 | 
						|
	setregs(); \
 | 
						|
	LOCAL_PrologMode = UserMode; \
 | 
						|
	restore_machine_regs(); \
 | 
						|
	(*_PREG) = savedP; \
 | 
						|
      } \
 | 
						|
      if (EX) { \
 | 
						|
	struct DB_TERM *exp = EX; \
 | 
						|
	EX = NULL; \
 | 
						|
	Yap_JumpToEnv(Yap_PopTermFromDB(exp)); \
 | 
						|
      } \
 | 
						|
      if (!(*_SREG)) { \
 | 
						|
	FAIL(); \
 | 
						|
      } \
 | 
						|
      YENV = ENV; \
 | 
						|
      YREG = ENV; \
 | 
						|
      GONEXT();
 | 
						|
#else /* YAPOR_SBA */
 | 
						|
#define _call_usercpred_instinit \
 | 
						|
      CACHE_Y_AS_ENV(YREG); \
 | 
						|
      check_stack_on_call; \
 | 
						|
      ENDCACHE_Y_AS_ENV(); \
 | 
						|
      { \
 | 
						|
	choiceptr top_b = PROTECT_FROZEN_B(B); \
 | 
						|
	if (YREG > (CELL *) top_b) \
 | 
						|
      ASP = (CELL *) top_b; \
 | 
						|
	else \
 | 
						|
      ASP = (CELL *)(((char *)YREG) +  (*_PREG)->u.Osbpp.s); \
 | 
						|
      } \
 | 
						|
      { \
 | 
						|
	yamop *savedP; \
 | 
						|
	Yap_StartSlots( PASS_REGS1 ); \
 | 
						|
	LOCAL_PrologMode = UserCCallMode; \
 | 
						|
	{ \
 | 
						|
	  PredEntry *p = (*_PREG)->u.Osbpp.p; \
 | 
						|
	  (*_PREG) = NEXTOP((*_PREG), Osbpp); \
 | 
						|
	  savedP = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  save_machine_regs(); \
 | 
						|
	  (*_SREG) = (CELL *) YAP_Execute(p, p->cs.f_code); \
 | 
						|
	} \
 | 
						|
	Yap_CloseSlots( PASS_REGS1 ); \
 | 
						|
	setregs(); \
 | 
						|
	LOCAL_PrologMode = UserMode; \
 | 
						|
	restore_machine_regs(); \
 | 
						|
	(*_PREG) = savedP; \
 | 
						|
      } \
 | 
						|
      if (EX) { \
 | 
						|
	struct DB_TERM *exp = EX; \
 | 
						|
	EX = NULL; \
 | 
						|
	Yap_JumpToEnv(Yap_PopTermFromDB(exp)); \
 | 
						|
      } \
 | 
						|
      if (!(*_SREG)) { \
 | 
						|
	FAIL(); \
 | 
						|
      } \
 | 
						|
      YENV = ENV; \
 | 
						|
      YREG = ENV; \
 | 
						|
      GONEXT();
 | 
						|
#endif /* YAPOR_SBA */
 | 
						|
#else /* FROZEN_STACKS */
 | 
						|
#define _call_usercpred_instinit \
 | 
						|
      CACHE_Y_AS_ENV(YREG); \
 | 
						|
      check_stack_on_call; \
 | 
						|
      ENDCACHE_Y_AS_ENV(); \
 | 
						|
      SET_ASP(YREG, (*_PREG)->u.Osbpp.s); \
 | 
						|
      { \
 | 
						|
	yamop *savedP; \
 | 
						|
	Yap_StartSlots( PASS_REGS1 ); \
 | 
						|
	LOCAL_PrologMode = UserCCallMode; \
 | 
						|
	{ \
 | 
						|
	  PredEntry *p = (*_PREG)->u.Osbpp.p; \
 | 
						|
	  (*_PREG) = NEXTOP((*_PREG), Osbpp); \
 | 
						|
	  savedP = (*_PREG); \
 | 
						|
	  saveregs(); \
 | 
						|
	  save_machine_regs(); \
 | 
						|
	  (*_SREG) = (CELL *) YAP_Execute(p, p->cs.f_code); \
 | 
						|
	} \
 | 
						|
	Yap_CloseSlots( PASS_REGS1 ); \
 | 
						|
	setregs(); \
 | 
						|
	LOCAL_PrologMode = UserMode; \
 | 
						|
	restore_machine_regs(); \
 | 
						|
	(*_PREG) = savedP; \
 | 
						|
      } \
 | 
						|
      if (EX) { \
 | 
						|
	struct DB_TERM *exp = EX; \
 | 
						|
	EX = NULL; \
 | 
						|
	Yap_JumpToEnv(Yap_PopTermFromDB(exp)); \
 | 
						|
      } \
 | 
						|
      if (!(*_SREG)) { \
 | 
						|
	FAIL(); \
 | 
						|
      } \
 | 
						|
      YENV = ENV; \
 | 
						|
      YREG = ENV; \
 | 
						|
      GONEXT();
 | 
						|
#endif /* FROZEN_STACKS */
 | 
						|
#endif /* LOW_LEVEL_TRACER */
 |