diff options
| author | eunhhu <[email protected]> | 2026-10-05 12:25:27 +0100 |
|---|---|---|
| committer | eunhhu <[email protected]> | 2026-10-05 12:25:27 +0100 |
| commit | 89f45e11fc5d6a8c6f5a556195dc2f363239568f (patch) | |
| tree | b6db59631e6fcfffdaae4e6d05dde686602330e7 /core/module-run.h | |
| parent | 2c0dc0ed32ab0d88f985aadbb6541591bdef5461 (diff) | |
| download | pure-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.h | 7 |
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, |
