diff options
author | Kartik Agaram <vc@akkartik.com> | 2018-12-30 01:30:56 -0800 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2018-12-30 01:30:56 -0800 |
commit | 395b3ffbebb4656fdc5096887bc1ca7df5180da3 (patch) | |
tree | e39fb0e76353cb5db67db39428d6698495878a97 /subx/test_apps | |
parent | 76590e79bb45d192ba0ed9cc82952321aec0d682 (diff) | |
download | mu-395b3ffbebb4656fdc5096887bc1ca7df5180da3.tar.gz |
4894
Done with kinda-safe pointers. In a real compiler the fast path of 'lookup' would ideally get inlined. Excluding procedure-call overhead, the current implementation consumes 2 registers besides the input, and requires 9 instructions (2 push, 2 load, compare, jump, increment, 2 pop). That's large enough that inlining may become a trade-off. Even if we somehow magically had the registers already loaded and available, we'd still need 4 instructions (1 pointer dereference, compare, jump and increment). The price of safety.
Diffstat (limited to 'subx/test_apps')
-rwxr-xr-x | subx/test_apps | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/subx/test_apps b/subx/test_apps index 4de0ce06..62df1fe4 100755 --- a/subx/test_apps +++ b/subx/test_apps @@ -126,6 +126,16 @@ CFLAGS=-g ./subx translate examples/ex12.subx -o examples/ex12 CFLAGS=-g ./subx run examples/ex12 # final byte of mmap'd address is well-nigh guaranteed to be 0 test `uname` = 'Linux' && examples/ex12 +echo handle +CFLAGS=-g ./subx translate *.subx apps/handle.subx -o apps/handle +[ "$1" != record ] && git diff --quiet apps/handle +CFLAGS=-g ./subx run apps/handle 2>&1 |grep -q 'lookup failed' +echo +test `uname` = 'Linux' && { + apps/handle test 2>&1 |grep -q 'lookup failed' + echo +} + echo factorial CFLAGS=-g ./subx translate *.subx apps/factorial.subx -o apps/factorial [ "$1" != record ] && git diff --quiet apps/factorial |