| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | #define CALL_CPRED_INSTINIT \
 | 
					
						
							|  |  |  |       BLOCKADDRESS = (CELL)(*_PREG); \ | 
					
						
							|  |  |  |         register CELL d0; | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | #if (defined(YAPOR_SBA) && defined(YAPOR)) || defined(TABLING)
 | 
					
						
							|  |  |  | #define CALL_CPRED_TEST_STACK \
 | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  |       if (!((*_PREG)->u.Osbpp.p->PredFlags & (SafePredFlag|HiddenPredFlag))) { \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 	CACHE_Y_AS_ENV(YREG); \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	if (__builtin_expect( ((Int)(Unsigned(YOUNGEST_CP((choiceptr)ENV_YREG,B_FZ)) - Unsigned(YOUNGEST_H(H_FZ,H))) < CreepFlag), 0)  ) {  return external_labels[6]; } \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 	ENDCACHE_Y_AS_ENV(); \ | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | #define CALL_CPRED_TEST_STACK \
 | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  |       if (!((*_PREG)->u.Osbpp.p->PredFlags & (SafePredFlag|HiddenPredFlag))) { \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 	CACHE_Y_AS_ENV(YREG); \ | 
					
						
							|  |  |  | 	if  (__builtin_expect(((Int)(Unsigned(ENV_YREG) - Unsigned(HR)) < CreepFlag ), 0) ) { return external_labels[6]; } \ | 
					
						
							|  |  |  | 	ENDCACHE_Y_AS_ENV(); \ | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef FROZEN_STACKS
 | 
					
						
							|  |  |  | #define CALL_CPRED_FROZEN_INIT \
 | 
					
						
							|  |  |  | 	choiceptr top_b = PROTECT_FROZEN_B(B); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef YAPOR_SBA
 | 
					
						
							|  |  |  | #define CALL_CPRED_TOPB \
 | 
					
						
							|  |  |  | 	if (YREG > (CELL *) top_b || YREG < HR) \ | 
					
						
							|  |  |  | 	    ASP = (CELL *)top_b; \ | 
					
						
							|  |  |  | 	else \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	    ASP = (CELL *)(((char *)YREG) +  (*_PREG)->u.Osbpp.s); | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | #else /* YAPOR_SBA */
 | 
					
						
							|  |  |  | #define CALL_CPRED_TOPB \
 | 
					
						
							|  |  |  | 	if (YREG > (CELL *) top_b) \ | 
					
						
							|  |  |  | 	    ASP = (CELL *)top_b; \ | 
					
						
							|  |  |  | 	else \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	    ASP = (CELL *)(((char *)YREG) +  (*_PREG)->u.Osbpp.s); | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | #endif /* YAPOR_SBA */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | #define CALL_CPRED_NOFROZEN \
 | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  |       SET_ASP(YREG, (*_PREG)->u.Osbpp.s); | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef LOW_LEVEL_TRACER
 | 
					
						
							|  |  |  | #define CALL_CPRED_LOW_LEVEL_TRACER \
 | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define CALL_CPRED_POST_LOW_LEVEL_TRACER \
 | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  |       CPredicate f = (*_PREG)->u.Osbpp.p->cs.f_code; \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  |       (*_PREG) = NEXTOP((*_PREG), Osbpp); \ | 
					
						
							|  |  |  |       saveregs(); \ | 
					
						
							|  |  |  |       d0 = (f)(PASS_REGS1); \ | 
					
						
							|  |  |  |       setregs(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef SHADOW_S
 | 
					
						
							|  |  |  | #define CALL_CPRED_SETSREG \
 | 
					
						
							|  |  |  |       (*_SREG) = Yap_REGS.S_; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define CALL_CPRED_END \
 | 
					
						
							|  |  |  |       BLOCK = (CELL)CALL_CPRED_END; \ | 
					
						
							|  |  |  |       FAILED = 0; \ | 
					
						
							|  |  |  |       if (!d0) { \ | 
					
						
							|  |  |  |         YAAM_FAIL; \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  | 	  else { \ | 
					
						
							|  |  |  | 	    CACHE_A1(); \ | 
					
						
							|  |  |  | 	    JMPNext(); \ | 
					
						
							|  |  |  | 	  } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define EXECUTE_CPRED_INSTINIT \
 | 
					
						
							|  |  |  |       BLOCKADDRESS = (CELL)(*_PREG); \ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define EXECUTE_CPRED_POST_CHECK_TRAIL \
 | 
					
						
							|  |  |  | 	PredEntry *pt0; \ | 
					
						
							|  |  |  |         CELL d0; \ | 
					
						
							|  |  |  | 	CACHE_Y_AS_ENV(YREG); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef FROZEN_STACKS
 | 
					
						
							|  |  |  | #define EXECUTE_CPRED_FROZEN \
 | 
					
						
							|  |  |  | 	  choiceptr top_b = PROTECT_FROZEN_B(B); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef YAPOR_SBA
 | 
					
						
							|  |  |  | #define EXECUTE_CPRED_TOPB \
 | 
					
						
							|  |  |  | 	  if (YREG > (CELL *) top_b || YREG < HR) { \ | 
					
						
							|  |  |  | 	      ASP = (CELL *)top_b; \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  | 	  else { \ | 
					
						
							|  |  |  |         ASP = YREG+E_CB; \ | 
					
						
							|  |  |  | 	  } | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | #define EXECUTE_CPRED_TOPB \
 | 
					
						
							|  |  |  | 	  if (YREG > (CELL *) top_b) { \ | 
					
						
							|  |  |  | 	      ASP = (CELL *)top_b; \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  | 	  else { \ | 
					
						
							|  |  |  |         ASP = YREG+E_CB; \ | 
					
						
							|  |  |  | 	  } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | #define EXECUTE_CPRED_NOFROZEN \
 | 
					
						
							|  |  |  | 	SET_ASP(YREG, E_CB*sizeof(CELL)); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define EXECUTE_CPRED_POST_FROZEN \
 | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	pt0 = (*_PREG)->u.pp.p; | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifdef LOW_LEVEL_TRACER
 | 
					
						
							|  |  |  | #define EXECUTE_CPRED_LOW_LEVEL_TRACER \
 | 
					
						
							|  |  |  | 	  low_level_trace(enter_pred,pt0,XREGS+1); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define EXECUTE_CPRED_POST_LOW_LEVEL_TRACER \
 | 
					
						
							|  |  |  | 	CACHE_A1(); \ | 
					
						
							|  |  |  | 	register CELL d0; \ | 
					
						
							|  |  |  | 	d0 = (CELL)B; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define EXECUTE_CPRED_SAVE_PC \
 | 
					
						
							|  |  |  | 	save_pc(); \ | 
					
						
							|  |  |  | 	ENV_YREG[E_CB] = d0; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | #ifdef DEPTH_LIMIT
 | 
					
						
							|  |  |  | #define EXECUTE_CPRED_DEPTH_MINOR \
 | 
					
						
							|  |  |  |       FAILED = 0; \ | 
					
						
							|  |  |  | 	  if (pt0->ModuleOfPred) { \ | 
					
						
							|  |  |  | 	    if (DEPTH == MkIntTerm(0)) { \ | 
					
						
							|  |  |  | 	      YAAM_FAIL; \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	    else { \ | 
					
						
							|  |  |  |           DEPTH = RESET_DEPTH(); \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  | 	  } | 
					
						
							|  |  |  | 	   | 
					
						
							|  |  |  | #define EXECUTE_CPRED_DEPTH_MOFPRED \
 | 
					
						
							|  |  |  |       FAILED = 0; \ | 
					
						
							|  |  |  | 	  DEPTH -= MkIntConstant(2); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define EXECUTE_CPRED_DEPTH_END \
 | 
					
						
							|  |  |  |       FAILED = 0; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef SHADOW_S
 | 
					
						
							|  |  |  | #ifdef DEPTH_LIMIT
 | 
					
						
							|  |  |  | #define EXECUTE_CPRED_END \
 | 
					
						
							|  |  |  |       BLOCK = (CELL)EXECUTE_CPRED_END; \ | 
					
						
							|  |  |  | 	if (!FAILED) { \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 	  yamop *oldPREG = (*_PREG); \ | 
					
						
							|  |  |  | 	  saveregs(); \ | 
					
						
							|  |  |  | 	  d0 = (f)(PASS_REGS1); \ | 
					
						
							|  |  |  | 	  setregs(); \ | 
					
						
							|  |  |  | 	  (*_SREG) = Yap_REGS.S_; \ | 
					
						
							|  |  |  | 	  if (!d0) { \ | 
					
						
							|  |  |  | 	    YAAM_FAIL; \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  | 	  else { \ | 
					
						
							|  |  |  | 	    if (oldPREG == (*_PREG)) { \ | 
					
						
							|  |  |  | 	      (*_PREG) = (*_CPREG); \ | 
					
						
							|  |  |  | 	      ENV_YREG = ENV; \ | 
					
						
							|  |  |  | 	      DEPTH = ENV_YREG[E_DEPTH]; \ | 
					
						
							|  |  |  | 	      WRITEBACK_Y_AS_ENV(); \ | 
					
						
							|  |  |  | 	    } else { \ | 
					
						
							|  |  |  | 	      CACHE_A1(); \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  | 	    JMPNext(); \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  | 	} \ | 
					
						
							|  |  |  | 	ENDCACHE_Y_AS_ENV(); | 
					
						
							|  |  |  | #else /* DEPTH_LIMIT */
 | 
					
						
							|  |  |  | #define EXECUTE_CPRED_END \
 | 
					
						
							|  |  |  |       BLOCK = (CELL)EXECUTE_CPRED_END; \ | 
					
						
							|  |  |  | 	if (!FAILED) { \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 	  yamop *oldPREG = (*_PREG); \ | 
					
						
							|  |  |  | 	  saveregs(); \ | 
					
						
							|  |  |  | 	  d0 = (f)(PASS_REGS1); \ | 
					
						
							|  |  |  | 	  setregs(); \ | 
					
						
							|  |  |  | 	  (*_SREG) = Yap_REGS.S_; \ | 
					
						
							|  |  |  | 	  if (!d0) { \ | 
					
						
							|  |  |  | 	    YAAM_FAIL; \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  | 	  else { \ | 
					
						
							|  |  |  | 	    if (oldPREG == (*_PREG)) { \ | 
					
						
							|  |  |  | 	      (*_PREG) = (*_CPREG); \ | 
					
						
							|  |  |  | 	      ENV_YREG = ENV; \ | 
					
						
							|  |  |  | 	      WRITEBACK_Y_AS_ENV(); \ | 
					
						
							|  |  |  | 	    } else { \ | 
					
						
							|  |  |  | 	      CACHE_A1(); \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  | 	    JMPNext(); \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  | 	} \ | 
					
						
							|  |  |  | 	ENDCACHE_Y_AS_ENV(); | 
					
						
							|  |  |  | #endif /* DEPTH_LIMIT */
 | 
					
						
							|  |  |  | #else /* SHADOW_S */
 | 
					
						
							|  |  |  | #ifdef DEPTH_LIMIT
 | 
					
						
							|  |  |  | #define EXECUTE_CPRED_END \
 | 
					
						
							|  |  |  |       BLOCK = (CELL)EXECUTE_CPRED_END; \ | 
					
						
							|  |  |  | 	if (!FAILED) { \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 	  yamop *oldPREG = (*_PREG); \ | 
					
						
							|  |  |  | 	  saveregs(); \ | 
					
						
							|  |  |  | 	  d0 = (f)(PASS_REGS1); \ | 
					
						
							|  |  |  | 	  setregs(); \ | 
					
						
							|  |  |  | 	  if (!d0) { \ | 
					
						
							|  |  |  | 	    YAAM_FAIL; \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  | 	  else { \ | 
					
						
							|  |  |  | 	    if (oldPREG == (*_PREG)) { \ | 
					
						
							|  |  |  | 	      (*_PREG) = (*_CPREG); \ | 
					
						
							|  |  |  | 	      ENV_YREG = ENV; \ | 
					
						
							|  |  |  | 	      DEPTH = ENV_YREG[E_DEPTH]; \ | 
					
						
							|  |  |  | 	      WRITEBACK_Y_AS_ENV(); \ | 
					
						
							|  |  |  | 	    } else { \ | 
					
						
							|  |  |  | 	      CACHE_A1(); \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  | 	    JMPNext(); \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  | 	} \ | 
					
						
							|  |  |  | 	ENDCACHE_Y_AS_ENV(); | 
					
						
							|  |  |  | #else /* DEPTH_LIMIT */
 | 
					
						
							|  |  |  | #define EXECUTE_CPRED_END \
 | 
					
						
							|  |  |  |       BLOCK = (CELL)EXECUTE_CPRED_END; \ | 
					
						
							|  |  |  | 	if (!FAILED) { \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	  CPredicate f = (*_PREG)->u.pp.p->cs.f_code; \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 	  yamop *oldPREG = (*_PREG); \ | 
					
						
							|  |  |  | 	  saveregs(); \ | 
					
						
							|  |  |  | 	  d0 = (f)(PASS_REGS1); \ | 
					
						
							|  |  |  | 	  setregs(); \ | 
					
						
							|  |  |  | 	  if (!d0) { \ | 
					
						
							|  |  |  | 	    YAAM_FAIL; \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  | 	  else { \ | 
					
						
							|  |  |  | 	    if (oldPREG == (*_PREG)) { \ | 
					
						
							|  |  |  | 	      (*_PREG) = (*_CPREG); \ | 
					
						
							|  |  |  | 	      ENV_YREG = ENV; \ | 
					
						
							|  |  |  | 	      WRITEBACK_Y_AS_ENV(); \ | 
					
						
							|  |  |  | 	    } else { \ | 
					
						
							|  |  |  | 	      CACHE_A1(); \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  | 	    JMPNext(); \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  | 	} \ | 
					
						
							|  |  |  | 	ENDCACHE_Y_AS_ENV(); | 
					
						
							|  |  |  | #endif /* DEPTH_LIMIT */
 | 
					
						
							|  |  |  | #endif /* SHADOW_S */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if (defined(YAPOR_SBA) && defined(YAPOR)) || defined(TABLING)
 | 
					
						
							|  |  |  | #define CALL_USERCPRED_INSTINIT \
 | 
					
						
							|  |  |  |       BLOCKADDRESS = (CELL)(*_PREG); \ | 
					
						
							|  |  |  | 	CACHE_Y_AS_ENV(YREG); \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	if (__builtin_expect( ((Int)(Unsigned(YOUNGEST_CP((choiceptr)ENV_YREG,B_FZ)) - Unsigned(YOUNGEST_H(H_FZ,H))) < CreepFlag), 0)  ) {  return external_labels[6]; } \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 	ENDCACHE_Y_AS_ENV(); | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | #define CALL_USERCPRED_INSTINIT \
 | 
					
						
							|  |  |  |       BLOCKADDRESS = (CELL)(*_PREG); \ | 
					
						
							|  |  |  | 	CACHE_Y_AS_ENV(YREG); \ | 
					
						
							|  |  |  | 	if  (__builtin_expect(((Int)(Unsigned(ENV_YREG) - Unsigned(HR)) < CreepFlag ), 0) ) { return external_labels[6]; } \ | 
					
						
							|  |  |  | 	ENDCACHE_Y_AS_ENV(); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef LOW_LEVEL_TRACER
 | 
					
						
							|  |  |  | #define CALL_USERCPRED_LOW_LEVEL_TRACER \
 | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	  low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef FROZEN_STACKS
 | 
					
						
							|  |  |  | #ifdef YAPOR_SBA
 | 
					
						
							|  |  |  | #define CALL_USERCPRED_FROZEN \
 | 
					
						
							|  |  |  | 	choiceptr top_b = PROTECT_FROZEN_B(B); \ | 
					
						
							|  |  |  | 	if (YREG > (CELL *) top_b || YREG < HR) \ | 
					
						
							|  |  |  | 	  ASP = (CELL *) top_b; \ | 
					
						
							|  |  |  | 	else \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  |       ASP = (CELL *)(((char *)YREG) +  (*_PREG)->u.Osbpp.s); | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | #else /* YAPOR_SBA */
 | 
					
						
							|  |  |  | #define CALL_USERCPRED_FROZEN \
 | 
					
						
							|  |  |  | 	choiceptr top_b = PROTECT_FROZEN_B(B); \ | 
					
						
							|  |  |  | 	if (YREG > (CELL *) top_b) \ | 
					
						
							|  |  |  |       ASP = (CELL *) top_b; \ | 
					
						
							|  |  |  | 	else \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  |       ASP = (CELL *)(((char *)YREG) +  (*_PREG)->u.Osbpp.s); | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | #endif /* YAPOR_SBA */
 | 
					
						
							|  |  |  | #else /* FROZEN_STACKS */
 | 
					
						
							|  |  |  | #define CALL_USERCPRED_FROZEN \
 | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  |       SET_ASP(YREG, (*_PREG)->u.Osbpp.s); | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | #endif /* FROZEN_STACKS */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define CALL_USERCPRED_POST_FROZEN \
 | 
					
						
							|  |  |  | 	yamop *savedP; \ | 
					
						
							|  |  |  | 	Yap_StartSlots( PASS_REGS1 ); \ | 
					
						
							|  |  |  | 	LOCAL_PrologMode = UserCCallMode; \ | 
					
						
							|  |  |  | 	{ \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	  PredEntry *p = (*_PREG)->u.Osbpp.p; \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 	  (*_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; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define CALL_USERCPRED_END \
 | 
					
						
							|  |  |  |       BLOCK = (CELL)CALL_USERCPRED_END; \ | 
					
						
							|  |  |  |       FAILED = 0; \ | 
					
						
							|  |  |  |       if (EX) { \ | 
					
						
							|  |  |  | 	struct DB_TERM *exp = EX; \ | 
					
						
							|  |  |  | 	EX = NULL; \ | 
					
						
							|  |  |  | 	Yap_JumpToEnv(Yap_PopTermFromDB(exp)); \ | 
					
						
							|  |  |  |       } \ | 
					
						
							|  |  |  |       if (!(*_SREG)) { \ | 
					
						
							|  |  |  | 	YAAM_FAIL; \ | 
					
						
							|  |  |  |       } \ | 
					
						
							|  |  |  |       else { \ | 
					
						
							|  |  |  |     YENV = ENV; \ | 
					
						
							|  |  |  |     YREG = ENV; \ | 
					
						
							|  |  |  |     JMPNext(); \ | 
					
						
							|  |  |  |       } |