19 store_at_least_one_arg(PREG->y_u.Otapl.s);
21 store_yaam_regs(PREG->y_u.Otapl.d, 0);
31 PREG = NEXTOP(PREG, Otapl);
42 restore_yaam_regs(PREG->y_u.Otapl.d);
43 restore_at_least_one_arg(PREG->y_u.Otapl.s);
45 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
46 set_cut(S_YREG, B->cp_b);
48 set_cut(S_YREG, B_YREG->cp_b);
52 PREG = NEXTOP(PREG, Otapl);
60 if (SCH_top_shared_cp(B)) {
61 SCH_last_alternative(PREG, B_YREG);
62 restore_at_least_one_arg(PREG->y_u.Otapl.s);
64 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
66 set_cut(S_YREG, B->cp_b);
71 pop_at_least_one_arg(PREG->y_u.Otapl.s);
75 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
79 PREG = NEXTOP(PREG, Otapl);
93 pt = Yap_ExoLookup(PredFromDefCode(PREG) PASS_REGS);
115 (CELL)LINK_TO_ADDRESS(i, i->links[EXO_ADDRESS_TO_OFFSET(i, SREG)]);
119 store_at_least_one_arg(PREG->y_u.lp.p->ArityOfPE);
121 store_yaam_regs(NEXTOP(PREG, lp), 0);
129 SCH_set_load(B_YREG);
131 PREG = NEXTOP(NEXTOP(PREG, lp), lp);
148 store_at_least_one_arg(PREG->y_u.lp.p->ArityOfPE);
150 store_yaam_regs(NEXTOP(PREG, lp), 0);
158 SCH_set_load(B_YREG);
160 PREG = NEXTOP(NEXTOP(PREG, lp), lp);
174 { S_YREG[-1] = (CELL)SREG; }
177 store_at_least_one_arg(PREG->y_u.lp.p->ArityOfPE);
179 store_yaam_regs(NEXTOP(PREG, lp), 0);
187 SCH_set_load(B_YREG);
189 PREG = NEXTOP(NEXTOP(PREG, lp), lp);
207 S_YREG[-2] = (CELL)(SREG + i->arity);
208 S_YREG[-1] = (CELL)(SREG + i->arity * i->nels);
212 store_at_least_one_arg(PREG->y_u.lp.p->ArityOfPE);
214 store_yaam_regs(NEXTOP(PREG, lp), 0);
222 SCH_set_load(B_YREG);
224 PREG = NEXTOP(NEXTOP(PREG, lp), lp);
237 ADDRESS_TO_LINK(it, (BITS32 *)((CELL *)(B + 1))[it->arity]);
238 d0 = it->links[offset];
239 ((CELL *)(B + 1))[it->arity] = (CELL)LINK_TO_ADDRESS(it, d0);
240 SREG = EXO_OFFSET_TO_ADDRESS(it, offset);
245 restore_yaam_regs(PREG);
246 restore_at_least_one_arg(PREG->y_u.lp.p->ArityOfPE);
248 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
249 set_cut(S_YREG, B->cp_b);
251 set_cut(S_YREG, B_YREG->cp_b);
256 if (SCH_top_shared_cp(B)) {
257 SCH_last_alternative(PREG, B_YREG);
258 restore_at_least_one_arg(PREG->y_u.lp.p->ArityOfPE);
260 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
262 set_cut(S_YREG, B->cp_b);
267 pop_at_least_one_arg(PREG->y_u.lp.p->ArityOfPE);
271 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
276 PREG = NEXTOP(PREG, lp);
283 Op(retry_exo_udi, lp);
289 d0 = ((CRetryExoIndex)it->udi_next)(it PASS_REGS);
298 restore_yaam_regs(PREG);
299 restore_at_least_one_arg(PREG->y_u.lp.p->ArityOfPE);
301 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
302 set_cut(S_YREG, B->cp_b);
304 set_cut(S_YREG, B_YREG->cp_b);
309 if (SCH_top_shared_cp(B)) {
310 SCH_last_alternative(PREG, B_YREG);
311 restore_at_least_one_arg(PREG->y_u.lp.p->ArityOfPE);
313 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
315 set_cut(S_YREG, B->cp_b);
320 pop_at_least_one_arg(PREG->y_u.lp.p->ArityOfPE);
324 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
329 PREG = NEXTOP(PREG, lp);
354 restore_yaam_regs(PREG);
355 restore_at_least_one_arg(PREG->y_u.lp.p->ArityOfPE);
357 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
358 set_cut(S_YREG, B->cp_b);
360 set_cut(S_YREG, B_YREG->cp_b);
365 if (SCH_top_shared_cp(B)) {
366 SCH_last_alternative(PREG, B_YREG);
367 restore_at_least_one_arg(PREG->y_u.lp.p->ArityOfPE);
369 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
371 set_cut(S_YREG, B->cp_b);
376 pop_at_least_one_arg(PREG->y_u.lp.p->ArityOfPE);
380 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
385 PREG = (
yamop *)SREG;
392 Op(retry_all_exo, lp);
396 UInt arity = ((
struct index_t *)PREG->y_u.lp.l)->arity;
397 CELL *extras = (CELL *)(B + 1);
398 SREG = (CELL *)extras[arity];
399 d0 = (SREG + arity != (CELL *)extras[arity + 1]);
401 extras[arity] = (CELL)(SREG + arity);
404 restore_yaam_regs(PREG);
405 restore_at_least_one_arg(arity);
407 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
408 set_cut(S_YREG, B->cp_b);
410 set_cut(S_YREG, B_YREG->cp_b);
415 if (SCH_top_shared_cp(B)) {
416 SCH_last_alternative(PREG, B_YREG);
417 restore_at_least_one_arg(arity);
419 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
421 set_cut(S_YREG, B->cp_b);
426 pop_at_least_one_arg(arity);
430 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
436 PREG = NEXTOP(PREG, lp);
447 Op(enter_profiling, p);
448 LOCK(PREG->y_u.p.p->StatisticsForPred->lock);
449 PREG->y_u.p.p->StatisticsForPred->NOfEntries++;
450 UNLOCK(PREG->y_u.p.p->StatisticsForPred->lock);
451 PREG = NEXTOP(PREG, p);
456 Op(retry_profiled, p);
457 LOCK(PREG->y_u.p.p->StatisticsForPred->lock);
458 PREG->y_u.p.p->StatisticsForPred->NOfRetries++;
459 UNLOCK(PREG->y_u.p.p->StatisticsForPred->lock);
460 PREG = NEXTOP(PREG, p);
465 Op(profiled_retry_me, Otapl);
469 LOCK(PREG->y_u.Otapl.p->StatisticsForPred->lock);
470 PREG->y_u.Otapl.p->StatisticsForPred->NOfRetries++;
471 UNLOCK(PREG->y_u.Otapl.p->StatisticsForPred->lock);
472 restore_yaam_regs(PREG->y_u.Otapl.d);
473 restore_args(PREG->y_u.Otapl.s);
475 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
476 set_cut(S_YREG, B->cp_b);
478 set_cut(S_YREG, B_YREG->cp_b);
482 PREG = NEXTOP(PREG, Otapl);
487 Op(profiled_trust_me, Otapl);
490 if (SCH_top_shared_cp(B)) {
491 SCH_last_alternative(PREG, B_YREG);
492 restore_args(PREG->y_u.Otapl.s);
494 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
496 set_cut(S_YREG, B->cp_b);
501 pop_args(PREG->y_u.Otapl.s);
505 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
511 LOCK(PREG->y_u.Otapl.p->StatisticsForPred->lock);
512 PREG->y_u.Otapl.p->StatisticsForPred->NOfRetries++;
513 UNLOCK(PREG->y_u.Otapl.p->StatisticsForPred->lock);
514 PREG = NEXTOP(PREG, Otapl);
524 LOCK(PREG->y_u.p.p->StatisticsForPred->lock);
525 PREG->y_u.p.p->StatisticsForPred->NOfEntries++;
526 UNLOCK(PREG->y_u.p.p->StatisticsForPred->lock);
527 LOCAL_ReductionsCounter--;
528 if (LOCAL_ReductionsCounter == 0 && LOCAL_ReductionsCounterOn) {
530 Yap_NilError(CALL_COUNTER_UNDERFLOW_EVENT,
"");
534 LOCAL_PredEntriesCounter--;
535 if (LOCAL_PredEntriesCounter == 0 && LOCAL_PredEntriesCounterOn) {
537 Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW_EVENT,
"");
541 PREG = NEXTOP(PREG, p);
547 LOCK(PREG->y_u.p.p->StatisticsForPred->lock);
548 PREG->y_u.p.p->StatisticsForPred->NOfRetries++;
549 UNLOCK(PREG->y_u.p.p->StatisticsForPred->lock);
550 LOCAL_RetriesCounter--;
551 if (LOCAL_RetriesCounter == 0 && LOCAL_RetriesCounterOn) {
555 Yap_NilError(RETRY_COUNTER_UNDERFLOW_EVENT,
"");
559 LOCAL_PredEntriesCounter--;
560 if (LOCAL_PredEntriesCounter == 0 && LOCAL_PredEntriesCounterOn) {
563 Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW_EVENT,
"");
567 PREG = NEXTOP(PREG, p);
572 Op(count_retry_me, Otapl);
574 restore_yaam_regs(PREG->y_u.Otapl.d);
575 restore_args(PREG->y_u.Otapl.s);
579 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
580 set_cut(S_YREG, B->cp_b);
582 set_cut(S_YREG, B_YREG->cp_b);
586 LOCK(((
PredEntry *)(PREG->y_u.Otapl.p))->StatisticsForPred->lock);
587 ((
PredEntry *)(PREG->y_u.Otapl.p))->StatisticsForPred->NOfRetries++;
588 UNLOCK(((
PredEntry *)(PREG->y_u.Otapl.p))->StatisticsForPred->lock);
589 LOCAL_RetriesCounter--;
590 if (LOCAL_RetriesCounter == 0 && LOCAL_RetriesCounterOn) {
592 Yap_NilError(RETRY_COUNTER_UNDERFLOW_EVENT,
"");
596 LOCAL_PredEntriesCounter--;
597 if (LOCAL_PredEntriesCounter == 0 && LOCAL_PredEntriesCounterOn) {
599 Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW_EVENT,
"");
603 PREG = NEXTOP(PREG, Otapl);
608 Op(count_trust_me, Otapl);
611 if (SCH_top_shared_cp(B)) {
612 SCH_last_alternative(PREG, B_YREG);
613 restore_args(PREG->y_u.Otapl.s);
615 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
617 set_cut(S_YREG, B->cp_b);
622 pop_args(PREG->y_u.Otapl.s);
626 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
632 LOCAL_RetriesCounter--;
633 if (LOCAL_RetriesCounter == 0) {
635 Yap_NilError(RETRY_COUNTER_UNDERFLOW_EVENT,
"");
639 LOCAL_PredEntriesCounter--;
640 if (LOCAL_PredEntriesCounter == 0) {
642 Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW_EVENT,
"");
646 LOCK(((
PredEntry *)(PREG->y_u.Otapl.p))->StatisticsForPred->lock);
647 ((
PredEntry *)(PREG->y_u.Otapl.p))->StatisticsForPred->NOfRetries++;
648 UNLOCK(((
PredEntry *)(PREG->y_u.Otapl.p))->StatisticsForPred->lock);
649 PREG = NEXTOP(PREG, Otapl);
658 BOp(ensure_space, Osbpa);
660 Int sz = PREG->y_u.Osbpa.i;
662 if (Unsigned(HR) + sz > Unsigned(YREG) - StackGap(PASS_REGS1)) {
663 YENV[E_CP] = (CELL)CPREG;
664 YENV[E_E] = (CELL)ENV;
666 YENV[E_DEPTH] = DEPTH;
668 SET_ASP(YREG, AS_CELLS(PREG->y_u.Osbpa.s));
669 PREG = NEXTOP(PREG, Osbpa);
671 if (!Yap_dogcl(sz PASS_REGS1 )) {
672 Yap_NilError(RESOURCE_ERROR_STACK, LOCAL_ErrorMessage);
679 PREG = NEXTOP(PREG, Osbpa);
690 BOp(spy_or_trymark, Otapl);
691 PELOCK(5, ((
PredEntry *)(PREG->y_u.Otapl.p)));
692 PREG = (
yamop *)(&(((
PredEntry *)(PREG->y_u.Otapl.p))->OpcodeOfPred));
693 UNLOCKPE(11, (
PredEntry *)(PREG->y_u.Otapl.p));
695 spy_goal(PASS_REGS1);
700 BOp(try_and_mark, Otapl);
702#if defined(YAPOR) || defined(THREADS)
707 if (PREG->y_u.Otapl.p->PredFlags & LogUpdatePredFlag) {
708 PELOCK(6, PREG->y_u.Otapl.p);
709 PP = PREG->y_u.Otapl.p;
711 if (PREG->y_u.Otapl.p->CodeOfPred != PREG) {
716 PREG = PREG->y_u.Otapl.p->CodeOfPred;
717 UNLOCKPE(12, PREG->y_u.Otapl.p);
724 PREG = PREG->y_u.Otapl.d;
729 LOCK(DynamicLock(PREG));
731 UNLOCKPE(13, ((
PredEntry *)(PREG->y_u.Otapl.p)));
733 d1 = PREG->y_u.Otapl.s;
735 store_yaam_regs(PREG, 0);
740 SCH_set_load(B_YREG);
745 INC_CLREF_COUNT(ClauseCodeToDynamicClause(PREG));
746 UNLOCK(DynamicLock(PREG));
747 TRAIL_CLREF(ClauseCodeToDynamicClause(PREG));
749 if (FlagOff(InUseMask, DynamicFlags(PREG))) {
751 SetFlag(InUseMask, DynamicFlags(PREG));
752 TRAIL_CLREF(ClauseCodeToDynamicClause(PREG));
755 PREG = NEXTOP(PREG, Otapl);
760 BOp(count_retry_and_mark, Otapl);
761 LOCAL_RetriesCounter--;
762 if (LOCAL_RetriesCounter == 0) {
764 Yap_NilError(RETRY_COUNTER_UNDERFLOW_EVENT,
"");
768 LOCAL_PredEntriesCounter--;
769 if (LOCAL_PredEntriesCounter == 0) {
771 Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW_EVENT,
"");
778 BOp(profiled_retry_and_mark, Otapl);
779 LOCK(((
PredEntry *)(PREG->y_u.Otapl.p))->StatisticsForPred->lock);
780 ((
PredEntry *)(PREG->y_u.Otapl.p))->StatisticsForPred->NOfRetries++;
781 UNLOCK(((
PredEntry *)(PREG->y_u.Otapl.p))->StatisticsForPred->lock);
786 BOp(retry_and_mark, Otapl);
791 PELOCK(7, PREG->y_u.Otapl.p);
793 PREG = PREG->y_u.Otapl.d;
794 LOCK(DynamicLock(PREG));
795 UNLOCK(PREG->y_u.Otapl.p->PELock);
796 restore_yaam_regs(PREG);
797 restore_args(PREG->y_u.Otapl.s);
799 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
800 set_cut(S_YREG, B->cp_b);
802 set_cut(S_YREG, B_YREG->cp_b);
807 INC_CLREF_COUNT(ClauseCodeToDynamicClause(PREG));
808 TRAIL_CLREF(ClauseCodeToDynamicClause(PREG));
809 UNLOCK(DynamicLock(PREG));
811 if (FlagOff(InUseMask, DynamicFlags(PREG))) {
813 SetFlag(InUseMask, DynamicFlags(PREG));
814 TRAIL_CLREF(ClauseCodeToDynamicClause(PREG));
817 PREG = NEXTOP(PREG, Otapl);
826 BOp(try_clause, Otapl);
830 store_at_least_one_arg(PREG->y_u.Otapl.s);
831 store_yaam_regs(NEXTOP(PREG, Otapl), 0);
832 PREG = PREG->y_u.Otapl.d;
836 SCH_set_load(B_YREG);
848 register CELL x2 = ARG2;
849 register CELL x1 = ARG1;
851 store_yaam_regs(NEXTOP(PREG, l), 2);
855 PREG = PREG->y_u.l.l;
859 SCH_set_load(B_YREG);
871 store_yaam_regs(NEXTOP(PREG, l), 3);
872 B_YREG->cp_a1 = ARG1;
873 B_YREG->cp_a2 = ARG2;
874 B_YREG->cp_a3 = ARG3;
876 PREG = PREG->y_u.l.l;
880 SCH_set_load(B_YREG);
892 store_yaam_regs(NEXTOP(PREG, l), 4);
893 B_YREG->cp_a1 = ARG1;
894 B_YREG->cp_a2 = ARG2;
895 B_YREG->cp_a3 = ARG3;
896 B_YREG->cp_a4 = ARG4;
898 PREG = PREG->y_u.l.l;
902 SCH_set_load(B_YREG);
911 restore_yaam_regs(NEXTOP(PREG, Otapl));
912 restore_at_least_one_arg(PREG->y_u.Otapl.s);
914 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
915 set_cut(S_YREG, B->cp_b);
917 set_cut(S_YREG, B_YREG->cp_b);
921 PREG = PREG->y_u.Otapl.d;
927 restore_yaam_regs(NEXTOP(PREG, l));
928 PREG = PREG->y_u.l.l;
929 ARG1 = B_YREG->cp_a1;
930 ARG2 = B_YREG->cp_a2;
932 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
933 set_cut(S_YREG, B->cp_b);
935 set_cut(S_YREG, B_YREG->cp_b);
944 restore_yaam_regs(NEXTOP(PREG, l));
945 PREG = PREG->y_u.l.l;
946 ARG1 = B_YREG->cp_a1;
947 ARG2 = B_YREG->cp_a2;
948 ARG3 = B_YREG->cp_a3;
950 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
951 set_cut(S_YREG, B->cp_b);
953 set_cut(S_YREG, B_YREG->cp_b);
962 restore_yaam_regs(NEXTOP(PREG, l));
963 PREG = PREG->y_u.l.l;
964 ARG1 = B_YREG->cp_a1;
965 ARG2 = B_YREG->cp_a2;
966 ARG3 = B_YREG->cp_a3;
967 ARG4 = B_YREG->cp_a4;
969 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
970 set_cut(S_YREG, B->cp_b);
972 set_cut(S_YREG, B_YREG->cp_b);
982 if (SCH_top_shared_cp(B)) {
983 SCH_last_alternative(PREG, B_YREG);
984 restore_at_least_one_arg(PREG->y_u.Otapl.s);
986 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
988 set_cut(S_YREG, B->cp_b);
993 pop_at_least_one_arg(PREG->y_u.Otapl.s);
995 S_YREG = (CELL *)PROTECT_FROZEN_B(B_YREG);
1001 PREG = PREG->y_u.Otapl.d;
1006 B->cp_ap = NEXTOP(PREG, l);
1007 PREG = PREG->y_u.l.l;