I just did an experiment, and test_apps is spending over half its time
(95 seconds that could be 40) redundantly clearing every stream before
every test. And some of those streams are _large_; the translators for
SubX and Mu use streams sizes pessimistically for the largest possible
program they can handle (1MB per segment).

A single test (the one in assort.subx) spends 24 seconds initializing 2
1MB-segments before processing a dozen lines of text in the blink of an
eye.

I'm not going to speed this up. But good to know.
This commit is contained in:
Kartik Agaram 2020-02-29 22:18:26 -08:00
parent 7ae5b71368
commit 3ac95f6a40
2 changed files with 3 additions and 1 deletions

View File

@ -31,6 +31,8 @@ clear-stream: # f: (addr stream byte)
c7 0/subop/copy 0/mod/direct 0/rm32/eax . . . . . 0/imm32 # copy to *eax
# f->read = 0
c7 0/subop/copy 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 0/imm32 # copy to *(eax+4)
# - clear all stream data
# - this isn't strictly necessary, and it can slow things down *a lot*, but better safe than sorry.
# var curr/eax: (addr byte) = f->data
81 0/subop/add 3/mod/direct 0/rm32/eax . . . . . 0xc/imm32 # add to eax
$clear-stream:loop:

View File

@ -9,7 +9,7 @@ Entry:
# Heap = new-segment(64KB)
# . . push args
68/push Heap/imm32
68/push 0x10000/imm32/64KB
ff 6/subop/push 0/mod/indirect 5/rm32/.disp32 . . . Heap-size/disp32 # push *Heap-size
# . . call
e8/call new-segment/disp32
# . . discard args