18 BOp(p_execute_tail, Osbmp);
20 FETCH_Y_FROM_ENV(YREG);
24 d0 = ENV_YREG[-EnvSizeInCells-1];
26 pen = RepPredProp(AddressOfTerm(ENV_YREG[-EnvSizeInCells-2]));
28 mod = ENV_YREG[-EnvSizeInCells-3];
31 ENV_YREG = (CELL *) (((
char *) YREG) + PREG->y_u.Osbmp.s);
36 if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) ENV_YREG = (CELL *) top_b;
38 if (ENV_YREG > (CELL *) top_b) ENV_YREG = (CELL *) top_b;
42 if (ENV_YREG > (CELL *) B) {
43 ENV_YREG = (CELL *) B;
48 f = pen->FunctorOfPred;
63 BOp(p_execute2, Osbpp);
66 deref_head(mod, execute2_unk0);
68 if (!IsAtomTerm(mod)) {
70 Yap_Error(TYPE_ERROR_ATOM, mod,
"call/2");
76 deref_body(mod, pt1, execute2_unk0, execute2_nvar0);
78 Yap_Error(INSTANTIATION_ERROR, mod,
"call/2");
85 BOp(p_execute, Osbmp);
88 check_stack(NoStackPExecute, HR);
90 mod = PREG->y_u.Osbmp.p0->ModuleOfPred;
96 ENV_YREG = (CELL *) (((
char *) YREG) + PREG->y_u.Osbmp.s);
101 if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) ENV_YREG = (CELL *) top_b;
103 if (ENV_YREG > (CELL *) top_b) ENV_YREG = (CELL *) top_b;
107 if (ENV_YREG > (CELL *) B) {
108 ENV_YREG = (CELL *) B;
112 d0 = Yap_YapStripModule(d0,&mod);
114 deref_head(d0, execute_unk);
116 if (IsApplTerm(d0)) {
117 f = FunctorOfTerm(d0);
118 if (IsExtensionFunctor(f)) {
119 goto execute_metacall;
121 pen = RepPredProp(PredPropByFunc(f, mod));
124 if (f == FunctorComma) {
132 deref_head(d1, execute_comma_unk);
134 if (IsAtomTerm(d1)) {
136 ENV_YREG[-EnvSizeInCells-2] = MkIntegerTerm((Int)PredPropByAtom(AtomOfTerm(d1),nmod));
137 }
else if (IsApplTerm(d1)) {
139 d1 = Yap_YapStripModule(d1, &nmod);
140 Functor f1 = FunctorOfTerm(d1);
141 ENV_YREG[-EnvSizeInCells-2] = MkIntegerTerm((Int)PredPropByFunc(f1,nmod));
143 ENV_YREG[-EnvSizeInCells-3] = mod;
146 ENV_YREG[E_CP] = (CELL)NEXTOP(PREG,Osbmp);
147 ENV_YREG[E_CB] = (CELL)b_ptr;
148 ENV_YREG[E_E] = (CELL)ENV;
150 ENV_YREG[E_DEPTH] = DEPTH;
152 ENV_YREG[-EnvSizeInCells-1] = d1;
154 ENV_YREG -= EnvSizeInCells+3;
155 CPREG = NEXTOP(PREG, Osbmp);
160 goto restart_execute;
163 deref_body(d1, pt1, execute_comma_unk, execute_comma_nvar);
164 goto execute_metacall;
167 }
else if (mod != CurrentModule) {
168 goto execute_metacall;
176 for (d2 = ArityOfFunctor(f); d2; d2--) {
180 XREGS[d2] = (CELL)(pt1+d2);
192 }
else if (IsAtomTerm(d0)) {
193 pen = RepPredProp(PredPropByAtom(AtomOfTerm(d0), mod));
196 if (pen->FunctorOfPred == (
Functor)AtomCut) {
199 prune(b_ptr PASS_REGS);
204 goto execute_metacall;
211 execute_stack_checked:
212 CPREG = NEXTOP(PREG, Osbmp);
213 ALWAYS_LOOKAHEAD(pen->OpcodeOfPred);
214 PREG = pen->CodeOfPred;
218 if (DEPTH <= MkIntTerm(1)) {
219 if (pen->ModuleOfPred) {
220 if (DEPTH == MkIntTerm(0)) {
223 DEPTH = RESET_DEPTH();
226 }
else if (pen->ModuleOfPred)
227 DEPTH -= MkIntConstant(2);
229#ifdef LOW_LEVEL_TRACER
230 if (Yap_do_low_level_trace)
231 low_level_trace(enter_pred,pen,XREGS+1);
233 WRITEBACK_Y_AS_ENV();
235 ENV_YREG[E_CB] = (CELL) B;
237 SCH_check_requests();
241 ALWAYS_END_PREFETCH();
245 deref_body(d0, pt1, execute_unk, execute_nvar);
249 ARG2 = Yap_cp_as_integer(b_ptr);
259 WRITEBACK_Y_AS_ENV();
263 saveregs_and_ycache();
264 d0 = interrupt_pexecute( PASS_REGS1 );
265 setregs_and_ycache();
270 if (d0 == 2)
goto execute_stack_checked;