don't inline == and \= for now.
This commit is contained in:
parent
f3e8b8b3da
commit
4103aa6e83
@ -628,7 +628,7 @@ static int interrupt_deallocate(USES_REGS1) {
|
||||
/*
|
||||
don't do a creep here; also, if our instruction is followed by
|
||||
a execute_c, just wait a bit more */
|
||||
if (Yap_only_has_signal(YAP_CREEP_SIGNAL) ||
|
||||
if (Yap_only_has_signals(YAP_CREEP_SIGNAL, YAP_WAKEUP_SIGNAL) ||
|
||||
/* keep on going if there is something else */
|
||||
(P->opc != Yap_opcode(_procceed) && P->opc != Yap_opcode(_cut_e))) {
|
||||
execute_dealloc(PASS_REGS1);
|
||||
@ -655,7 +655,10 @@ static int interrupt_deallocate(USES_REGS1) {
|
||||
} else {
|
||||
pe = RepPredProp(Yap_GetPredPropByAtom(AtomTrue, 0));
|
||||
}
|
||||
return interrupt_handler(pe PASS_REGS);
|
||||
// deallocate moves P one step forward.
|
||||
bool rc = interrupt_handler(pe PASS_REGS);
|
||||
P = NEXTOP(P,p);
|
||||
return rc;
|
||||
}
|
||||
if (!Yap_locked_gc(0, ENV, YESCODE)) {
|
||||
Yap_NilError(RESOURCE_ERROR_STACK, LOCAL_ErrorMessage);
|
||||
|
@ -1418,15 +1418,17 @@ a_p(op_numbers opcode, clause_info *clinfo, yamop *code_p, int pass_no, struct i
|
||||
case _equal:
|
||||
op = _p_equal;
|
||||
break;
|
||||
#if INLINE_BIG_COMPARISONS
|
||||
case _dif:
|
||||
op = _p_dif;
|
||||
is_test = TRUE;
|
||||
is_test = true;
|
||||
break;
|
||||
case _eq:
|
||||
op = _p_eq;
|
||||
is_test = TRUE;
|
||||
is_test = true;
|
||||
break;
|
||||
case _functor:
|
||||
#endif
|
||||
case _functor:
|
||||
code_p = check_alloc(clinfo, code_p, pass_no, cip);
|
||||
op = _p_functor;
|
||||
break;
|
||||
|
2
C/exec.c
2
C/exec.c
@ -1982,7 +1982,7 @@ bool is_cleanup_cp(choiceptr cp_b) {
|
||||
|
||||
static Int JumpToEnv() {
|
||||
choiceptr handler = B, oh = NULL;
|
||||
/* just keep the throwm object away, we don't need to care about it
|
||||
/* just keep the thrown object away, we don't need to care about it
|
||||
*/
|
||||
/* careful, previous step may have caused a stack shift,
|
||||
so get pointers here */
|
||||
|
@ -1120,8 +1120,13 @@ Yap_InitInlines(void)
|
||||
Yap_InitAsmPred("compound", 1, _compound, p_compound, SafePredFlag);
|
||||
Yap_InitAsmPred("float", 1, _float, p_float, SafePredFlag);
|
||||
Yap_InitAsmPred("=", 2, _equal, p_equal, SafePredFlag);
|
||||
Yap_InitAsmPred("\\=", 2, _dif, p_dif, SafePredFlag);
|
||||
Yap_InitAsmPred("==", 2, _eq, p_eq, SafePredFlag);
|
||||
#if INLINE_BIG_COMPARISONS
|
||||
Yap_InitAsmPred("\\=", 2, _dif, p_dif, SafePredFlag|TestPredFlag);
|
||||
Yap_InitAsmPred("==", 2, _eq, p_eq, SafePredFlag|TestPredFlag);
|
||||
#else
|
||||
Yap_InitCPred("\\=", 2, p_dif, SafePredFlag);
|
||||
Yap_InitCPred("==", 2, p_eq, SafePredFlag);
|
||||
#endif
|
||||
Yap_InitAsmPred("arg", 3, _arg, p_arg, SafePredFlag);
|
||||
Yap_InitAsmPred("functor", 3, _functor, p_functor, 0);
|
||||
Yap_InitAsmPred("$label_ctl", 2, _p_label_ctl, p_erroneous_call, SafePredFlag);
|
||||
|
@ -2045,6 +2045,7 @@
|
||||
GONext();
|
||||
ENDOp();
|
||||
|
||||
#if INLINE_BIG_COMPARISONS
|
||||
Op(p_dif, l);
|
||||
#ifdef LOW_LEVEL_TRACER
|
||||
if (Yap_do_low_level_trace)
|
||||
@ -2168,6 +2169,12 @@
|
||||
ENDOp();
|
||||
|
||||
Op(p_eq, l);
|
||||
#ifdef COROUTINING
|
||||
CACHE_Y_AS_ENV(YREG);
|
||||
check_stack(NoStackEq, HR);
|
||||
ENDCACHE_Y_AS_ENV();
|
||||
do_eq:
|
||||
#endif
|
||||
#ifdef LOW_LEVEL_TRACER
|
||||
if (Yap_do_low_level_trace)
|
||||
low_level_trace(enter_pred,RepPredProp(Yap_GetPredPropByFunc(FunctorSame,0)),XREGS+1);
|
||||
@ -2334,7 +2341,15 @@
|
||||
ENDP(pt0);
|
||||
|
||||
ENDD(d0);
|
||||
#ifdef COROUTINING
|
||||
/* Problem: have I got an environment or not? */
|
||||
NoStackEq:
|
||||
PROCESS_INT(interrupt_eq, do_eq);
|
||||
#endif
|
||||
|
||||
ENDOp();
|
||||
#endif /* INLINE_BIG_COMPARISONS */
|
||||
|
||||
|
||||
Op(p_arg_vv, xxx);
|
||||
#ifdef LOW_LEVEL_TRACER
|
||||
|
Reference in New Issue
Block a user