Include new instruction execute_cpred to perform tail optimisation for
builtins. Required changes: - be careful about creeping in deallocate: it may be followed by something that is not a cut nor a proceed. - include new instruction in absmi.c: it is a merge of execute and call_cpred. - change compiler to generate execute even for C builtins. - be careful with dexecute: it may not be done if execute_op is a C builtin. - if we are in execute_cpred, the garbage collector cannot trust P: instead it must look at CP to find out the size of the current environment. The macro gc_P receives that information. - We don't need to change CP if we do a meta-call from within execute_cpred (and we in fact cannot). Check places where we do meta-calls: exec, clause in cdmgr, and lu_recorded.
This commit is contained in:
@@ -944,6 +944,7 @@ has_cut(yamop *pc)
|
||||
break;
|
||||
case _execute:
|
||||
case _dexecute:
|
||||
case _p_execute_cpred:
|
||||
pc = NEXTOP(pc,pp);
|
||||
break;
|
||||
/* instructions type l */
|
||||
@@ -2467,6 +2468,7 @@ add_info(ClauseDef *clause, UInt regno)
|
||||
case _retry_profiled:
|
||||
case _count_retry:
|
||||
case _execute:
|
||||
case _execute_cpred:
|
||||
case _dexecute:
|
||||
case _jump:
|
||||
case _move_back:
|
||||
|
||||
Reference in New Issue
Block a user