#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 */