#define EXECUTE_INSTINIT \ print_instruction((*_PREG), ON_NATIVE); \ BLOCKADDRESS = (CELL)(*_PREG); \ register CELL d0; \ PredEntry *pt0; \ register CELL *ENV_YREG = (YREG); \ pt0 = (*_PREG)->y_u.pp.p; #ifdef LOW_LEVEL_TRACER #define EXECUTE_LOW_LEVEL_TRACER \ low_level_trace(enter_pred,pt0,XREGS+1); #endif #define EXECUTE_POST_LOW_LEVEL_TRACER \ CACHE_A1(); \ ALWAYS_LOOKAHEAD(pt0->OpcodeOfPred); \ d0 = (CELL)B; #define EXECUTE_POST_NOCHECKING \ (*_PREG) = pt0->CodeOfPred; \ save_pc(); \ ENV_YREG[E_CB] = d0; #ifdef DEPTH_LIMIT #define EXECUTE_DEPTH_MINOR \ FAILED = 0; \ if (pt0->ModuleOfPred) { \ if (DEPTH == MkIntTerm(0)) { \ YAAM_FAIL; \ } \ else { \ DEPTH = RESET_DEPTH(); \ } \ } #define EXECUTE_DEPTH_MOFPRED \ FAILED = 0; \ DEPTH -= MkIntConstant(2); #define EXECUTE_DEPTH_END \ FAILED = 0; #endif #define EXECUTE_END_END \ BLOCK = (CELL)EXECUTE_END_END; \ if (!FAILED) { \ ALWAYS_GONext(); \ } \ #define DEXECUTE_INSTINIT \ print_instruction((*_PREG), ON_NATIVE); \ BLOCKADDRESS = (CELL)(*_PREG); \ #ifdef LOW_LEVEL_TRACER #define DEXECUTE_LOW_LEVEL_TRACER \ low_level_trace(enter_pred,(*_PREG)->y_u.pp.p,XREGS+1); #endif #define DEXECUTE_POST_LOW_LEVEL_TRACER \ CACHE_Y_AS_ENV(YREG); \ PredEntry *pt0; \ CACHE_A1(); \ pt0 = (*_PREG)->y_u.pp.p; #ifdef DEPTH_LIMIT #define DEXECUTE_DEPTH_MINOR \ FAILED = 0; \ if (pt0->ModuleOfPred) { \ if (DEPTH == MkIntTerm(0)) { \ YAAM_FAIL; \ } \ else { \ DEPTH = RESET_DEPTH(); \ } \ } #define DEXECUTE_DEPTH_MOFPRED \ FAILED = 0; \ DEPTH -= MkIntConstant(2); #define DEXECUTE_DEPTH_END \ FAILED = 0; #endif #ifdef FROZEN_STACKS #ifdef YAPOR_SBA #define DEXECUTE_END_END \ BLOCK = (CELL)DEXECUTE_END_END; \ if (!FAILED) { \ (*_PREG) = pt0->CodeOfPred; \ save_pc(); \ (*_CPREG) = (yamop *) ENV_YREG[E_CP]; \ ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \ choiceptr top_b = PROTECT_FROZEN_B(B); \ if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \ ENV_YREG = (CELL *) top_b; \ } \ else { \ ENV_YREG = (CELL *)((CELL)ENV_YREG + ENV_Size((*_CPREG))); \ } \ WRITEBACK_Y_AS_ENV(); \ ENV_YREG[E_CB] = (CELL) B; \ ALWAYS_GONext(); \ } \ ENDCACHE_Y_AS_ENV(); #else /* YAPOR_SBA */ #define DEXECUTE_END_END \ BLOCK = (CELL)DEXECUTE_END_END; \ if (!FAILED) { \ (*_PREG) = pt0->CodeOfPred; \ save_pc(); \ (*_CPREG) = (yamop *) ENV_YREG[E_CP]; \ ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \ choiceptr top_b = PROTECT_FROZEN_B(B); \ if (ENV_YREG > (CELL *) top_b) { \ ENV_YREG = (CELL *) top_b; \ } \ else { \ ENV_YREG = (CELL *)((CELL)ENV_YREG + ENV_Size((*_CPREG))); \ } \ WRITEBACK_Y_AS_ENV(); \ ENV_YREG[E_CB] = (CELL) B; \ ALWAYS_GONext(); \ } \ ENDCACHE_Y_AS_ENV(); #endif /* YAPOR_SBA */ #else /* FROZEN_STACKS */ #define DEXECUTE_END_END \ BLOCK = (CELL)DEXECUTE_END_END; \ if (!FAILED) { \ (*_PREG) = pt0->CodeOfPred; \ save_pc(); \ (*_CPREG) = (yamop *) ENV_YREG[E_CP]; \ ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \ if (ENV_YREG > (CELL *)B) { \ ENV_YREG = (CELL *)B; \ } \ else { \ ENV_YREG = (CELL *) ((CELL) ENV_YREG + ENV_Size((*_CPREG))); \ } \ WRITEBACK_Y_AS_ENV(); \ ENV_YREG[E_CB] = (CELL) B; \ ALWAYS_GONext(); \ } \ ENDCACHE_Y_AS_ENV(); #endif /* FROZEN_STACKS */ #ifdef DEPTH_LIMIT #define FCALL_INST \ CACHE_Y_AS_ENV(YREG); \ ENV_YREG[E_CP] = (CELL) (*_CPREG); \ ENV_YREG[E_E] = (CELL) ENV; \ ENV_YREG[E_DEPTH] = DEPTH; \ ENDCACHE_Y_AS_ENV(); #else /* DEPTH_LIMIT */ #define FCALL_INST \ CACHE_Y_AS_ENV(YREG); \ ENV_YREG[E_CP] = (CELL) (*_CPREG); \ ENV_YREG[E_E] = (CELL) ENV; \ ENDCACHE_Y_AS_ENV(); #endif /* DEPTH_LIMIT */ #define CALL_INSTINIT \ print_instruction((*_PREG), ON_NATIVE); \ BLOCKADDRESS = (CELL)(*_PREG); \ if (Yap_op_from_opcode((*_PREG)->opc) == _fcall) { \ FCALL_INST; \ } #ifdef LOW_LEVEL_TRACER #define CALL_LOW_LEVEL_TRACER \ low_level_trace(enter_pred,(*_PREG)->y_u.Osbpp.p,XREGS+1); #endif #define CALL_POST_LOW_LEVEL_TRACER \ register CELL *ENV_YREG = (YREG); \ PredEntry *pt; \ pt = (*_PREG)->y_u.Osbpp.p; \ CACHE_A1(); #define CALL_POST_NO_CHECKING \ ENV = ENV_YREG; \ ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->y_u.Osbpp.s); \ (*_CPREG) = NEXTOP((*_PREG), Osbpp); \ (*_PREG) = pt->CodeOfPred; \ save_pc(); \ #ifdef DEPTH_LIMIT #define CALL_DEPTH_MINOR \ FAILED = 0; \ if (pt->ModuleOfPred) { \ if (DEPTH == MkIntTerm(0)){ \ YAAM_FAIL; \ } else { \ DEPTH = RESET_DEPTH(); \ } \ } #define CALL_DEPTH_MOFPRED \ FAILED = 0; \ DEPTH -= MkIntConstant(2); #define CALL_DEPTH_END \ FAILED = 0; #endif #ifdef YAPOR #ifdef FROZEN_STACKS #ifdef YAPOR_SBA #define CALL_END_END \ BLOCK = (CELL)CALL_END_END; \ if (!FAILED) { \ { \ choiceptr top_b = PROTECT_FROZEN_B(B); \ if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \ ENV_YREG = (CELL *) top_b; \ } \ } \ WRITEBACK_Y_AS_ENV(); \ ENV_YREG[E_CB] = (CELL) B; \ SCH_check_requests(); \ ALWAYS_GONext(); \ } #else /* YAPOR_SBA */ #define CALL_END_END \ BLOCK = (CELL)CALL_END_END; \ if (!FAILED) { \ { \ choiceptr top_b = PROTECT_FROZEN_B(B); \ if (ENV_YREG > (CELL *) top_b) { \ ENV_YREG = (CELL *) top_b; \ } \ } \ WRITEBACK_Y_AS_ENV(); \ ENV_YREG[E_CB] = (CELL) B; \ SCH_check_requests(); \ ALWAYS_GONext(); \ } #endif /* YAPOR_SBA */ #else /* FROZEN_STACKS */ #define CALL_END_END \ BLOCK = (CELL)CALL_END_END; \ if (!FAILED) { \ if (ENV_YREG > (CELL *) B) { \ ENV_YREG = (CELL *) B; \ } \ WRITEBACK_Y_AS_ENV(); \ ENV_YREG[E_CB] = (CELL) B; \ SCH_check_requests(); \ ALWAYS_GONext(); \ } #endif /* FROZEN_STACKS */ #else /* YAPOR */ #ifdef FROZEN_STACKS #ifdef YAPOR_SBA #define CALL_END_END \ BLOCK = (CELL)CALL_END_END; \ if (!FAILED) { \ { \ choiceptr top_b = PROTECT_FROZEN_B(B); \ if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \ ENV_YREG = (CELL *) top_b; \ } \ } \ WRITEBACK_Y_AS_ENV(); \ ENV_YREG[E_CB] = (CELL) B; \ ALWAYS_GONext(); \ } #else /* YAPOR_SBA */ #define CALL_END_END \ BLOCK = (CELL)CALL_END_END; \ if (!FAILED) { \ { \ choiceptr top_b = PROTECT_FROZEN_B(B); \ if (ENV_YREG > (CELL *) top_b) { \ ENV_YREG = (CELL *) top_b; \ } \ } \ WRITEBACK_Y_AS_ENV(); \ ENV_YREG[E_CB] = (CELL) B; \ ALWAYS_GONext(); \ } #endif /* YAPOR_SBA */ #else /* FROZEN_STACKS */ #define CALL_END_END \ BLOCK = (CELL)CALL_END_END; \ if (!FAILED) { \ if (ENV_YREG > (CELL *) B) { \ ENV_YREG = (CELL *) B; \ } \ WRITEBACK_Y_AS_ENV(); \ ENV_YREG[E_CB] = (CELL) B; \ ALWAYS_GONext(); \ } #endif /* FROZEN_STACKS */ #endif /* YAPOR */ #define PROCCEED_INSTINIT \ print_instruction((*_PREG), ON_NATIVE); \ BLOCKADDRESS = (CELL)(*_PREG); \ CACHE_Y_AS_ENV(YREG); \ (*_PREG) = (*_CPREG); \ save_pc(); \ ENV_YREG = ENV; #ifdef DEPTH_LIMIT #define PROCCEED_DEPTH \ DEPTH = ENV_YREG[E_DEPTH]; #endif #define PROCCEED_END \ BLOCK = (CELL)PROCCEED_END; \ WRITEBACK_Y_AS_ENV(); \ ENDCACHE_Y_AS_ENV(); \ ALWAYS_GONext(); #define ALLOCATE_INSTINIT \ print_instruction((*_PREG), ON_NATIVE); \ CACHE_Y_AS_ENV(YREG); \ (*_PREG) = NEXTOP((*_PREG), e); \ ENV_YREG[E_CP] = (CELL) (*_CPREG); \ ENV_YREG[E_E] = (CELL) ENV; #ifdef DEPTH_LIMIT #define ALLOCATE_DEPTH \ ENV_YREG[E_DEPTH] = DEPTH; #endif #define ALLOCATE_END \ ENV = ENV_YREG; \ ENDCACHE_Y_AS_ENV(); \ GONext(); #define DEALLOCATE_INSTINIT \ print_instruction((*_PREG), ON_NATIVE); \ #define DEALLOCATE_POST_CHECK \ CACHE_Y_AS_ENV(YREG); \ (*_PREG) = NEXTOP((*_PREG), p); \ (*_SREG) = YREG; \ (*_CPREG) = (yamop *) ENV_YREG[E_CP]; \ ENV = ENV_YREG = (CELL *) ENV_YREG[E_E]; #ifdef DEPTH_LIMIT #define DEALLOCATE_DEPTH \ DEPTH = ENV_YREG[E_DEPTH]; #endif #ifdef FROZEN_STACKS #ifdef YAPOR_SBA #define DEALLOCATE_FROZEN \ choiceptr top_b = PROTECT_FROZEN_B(B); \ if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) \ ENV_YREG = (CELL *) top_b; \ else \ ENV_YREG = (CELL *)((CELL) ENV_YREG + ENV_Size(CPREG)); #else /* YAPOR_SBA */ #define DEALLOCATE_FROZEN \ choiceptr top_b = PROTECT_FROZEN_B(B); \ if (ENV_YREG > (CELL *) top_b) \ ENV_YREG = (CELL *) top_b; \ else \ ENV_YREG = (CELL *)((CELL) ENV_YREG + ENV_Size(CPREG)); #endif /* YAPOR_SBA */ #else /* FROZEN_STACKS */ #define DEALLOCATE_FROZEN \ if (ENV_YREG > (CELL *) B) \ ENV_YREG = (CELL *) B; \ else \ ENV_YREG = (CELL *) ((CELL) ENV_YREG + ENV_Size(CPREG)); #endif /* FROZEN_STACKS */ #define DEALLOCATE_POST_FROZEN \ WRITEBACK_Y_AS_ENV(); #define DEALLOCATE_END \ ENDCACHE_Y_AS_ENV(); \ GONext();