aboutsummaryrefslogtreecommitdiffstats
path: root/core/module-run.h
diff options
context:
space:
mode:
authoreunhhu <[email protected]>2026-10-05 12:25:27 +0100
committereunhhu <[email protected]>2026-10-05 12:25:27 +0100
commit89f45e11fc5d6a8c6f5a556195dc2f363239568f (patch)
treeb6db59631e6fcfffdaae4e6d05dde686602330e7 /core/module-run.h
parent2c0dc0ed32ab0d88f985aadbb6541591bdef5461 (diff)
downloadpure-89f45e11fc5d6a8c6f5a556195dc2f363239568f.tar.gz
pure-89f45e11fc5d6a8c6f5a556195dc2f363239568f.zip
Compile each nest of loops twice, the second with whole numbers as integers (narrow columns, counts, their arithmetic within 2^53), giving up to the executor for the rest of a round when that fails: BFS core 14.9 to 13.4 ms (022)
Diffstat (limited to 'core/module-run.h')
-rw-r--r--core/module-run.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/core/module-run.h b/core/module-run.h
index c56e7b1..eb7a29c 100644
--- a/core/module-run.h
+++ b/core/module-run.h
@@ -93,6 +93,13 @@ int pure_run_iterate(Frame *);
/* ITEM_GET at pc whose list is a tree its kept run does not hold: the
* item's run kept, then the step. */
int pure_run_item(Frame *, uint32_t pc);
+/* The rest of the innermost loop's round from pc, as the executor runs it
+ * (the compiled code assumed what no longer holds, docs/design/022): the
+ * frame as the code left it (the stack in its slots, the walks' places
+ * written back). STEP_NEXT at the round's end (the loop's iteration next),
+ * STEP_SKIP when it left the loop (BREAK: past its block), else how it
+ * stopped. */
+int pure_run_rest(Frame *, uint32_t pc);
/* Where a list keeps what compiled code reads of it (module-list.c owns the
* layout and says where): its item count, its key set (the words, how many,