diff options
Diffstat (limited to 'apps')
-rwxr-xr-x | apps/assort | bin | 41753 -> 42953 bytes | |||
-rwxr-xr-x | apps/braces | bin | 43032 -> 42998 bytes | |||
-rw-r--r-- | apps/braces.subx | 274 | ||||
-rwxr-xr-x | apps/calls | bin | 46491 -> 47691 bytes | |||
-rwxr-xr-x | apps/crenshaw2-1 | bin | 41164 -> 42364 bytes | |||
-rwxr-xr-x | apps/crenshaw2-1b | bin | 41723 -> 42923 bytes | |||
-rwxr-xr-x | apps/dquotes | bin | 45445 -> 46645 bytes | |||
-rwxr-xr-x | apps/factorial | bin | 40176 -> 41376 bytes | |||
-rwxr-xr-x | apps/handle | bin | 41069 -> 42269 bytes | |||
-rwxr-xr-x | apps/hex | bin | 44119 -> 45319 bytes | |||
-rwxr-xr-x | apps/pack | bin | 54414 -> 55614 bytes | |||
-rwxr-xr-x | apps/sigils | bin | 54454 -> 55654 bytes | |||
-rwxr-xr-x | apps/survey | bin | 51010 -> 52210 bytes | |||
-rwxr-xr-x | apps/tests | bin | 40538 -> 41738 bytes |
14 files changed, 0 insertions, 274 deletions
diff --git a/apps/assort b/apps/assort index 2fc33f34..e60a40a8 100755 --- a/apps/assort +++ b/apps/assort Binary files differdiff --git a/apps/braces b/apps/braces index 06ffb9fe..40164153 100755 --- a/apps/braces +++ b/apps/braces Binary files differdiff --git a/apps/braces.subx b/apps/braces.subx index 0b70c7a0..32042539 100644 --- a/apps/braces.subx +++ b/apps/braces.subx @@ -376,277 +376,3 @@ test-subx-braces-2: 89/<- %esp 5/r32/ebp 5d/pop-to-ebp c3/return - -# let's just put stack primitives here for now -# we need to think about how to maintain layers of the library at different levels of syntax sugar - -# A stack looks like this: -# top: int -# data: (array byte) # prefixed by length as usual - -clear-stack: # s : (address stack) - # . prolog - 55/push-ebp - 89/<- %ebp 4/r32/esp - # . save registers - 50/push-eax - 51/push-ecx - # eax = s - 8b/-> *(ebp+8) 0/r32/eax - # ecx = s->length - 8b/-> *(eax+4) 1/r32/ecx - # ecx = &s->data[s->length] - 8d/copy-address *(eax+ecx+8) 1/r32/ecx - # s->top = 0 - c7/copy 0/subop/copy *eax 0/imm32 - # eax = s->data - 81 0/subop/add %eax 8/imm32 -$clear-stack:loop: - # if (eax >= ecx) break - 39/compare %eax 1/r32/ecx - 73/jump-if-greater-or-equal-unsigned $clear-stack:end/disp8 - # *eax = 0 - c6 0/subop/copy-byte *eax 0/imm8 - # ++eax - 40/increment-eax - eb/jump $clear-stack:loop/disp8 -$clear-stack:end: - # . restore registers - 59/pop-to-ecx - 58/pop-to-eax - # . epilog - 89/<- %esp 5/r32/ebp - 5d/pop-to-ebp - c3/return - -test-clear-stack: - # var ecx : (address stack) = stack of size 8 with random data in it - 68/push 34/imm32 - 68/push 35/imm32 - 68/push 8/imm32/length - 68/push 14/imm32/top - 89/<- %ecx 4/r32/esp - # clear - (clear-stack %ecx) - # top should be 0 - 58/pop-to-eax - (check-ints-equal %eax 0 "F - test-clear-stack: top") - # length should remain 8 - 58/pop-to-eax - (check-ints-equal %eax 8 "F - test-clear-stack: length") - # first word is 0 - 58/pop-to-eax - (check-ints-equal %eax 0 "F - test-clear-stack: data[0..3]") - # second word is 0 - 58/pop-to-eax - (check-ints-equal %eax 0 "F - test-clear-stack: data[4..7]") - c3/return - -push: # s : (address stack), n : int - # . prolog - 55/push-ebp - 89/<- %ebp 4/r32/esp - # . save registers - 50/push-eax - 51/push-ecx - 56/push-esi - # esi = s - 8b/-> *(ebp+8) 6/r32/esi - # ecx = s->top - 8b/-> *esi 1/r32/ecx - # if (s->top >= s->length) abort - 39/compare *(esi+4) 1/r32/ecx - 7e/jump-if-lesser-or-equal $push:abort/disp8 - # s->data[s->top] = n - 8b/-> *(ebp+0xc) 0/r32/eax - 89/<- *(esi+ecx+8) 0/r32/eax - # s->top += 4 - 81 0/subop/add *esi 4/imm32 -$push:end: - # . restore registers - 5e/pop-to-esi - 59/pop-to-ecx - 58/pop-to-eax - # . epilog - 89/<- %esp 5/r32/ebp - 5d/pop-to-ebp - c3/return - -$push:abort: - # print(stderr, "error: push: no space left") - # . write-buffered(Stderr, "error: push: no space left") - # . . push args - 68/push "error: push: no space left"/imm32 - 68/push Stderr/imm32 - # . . call - e8/call write-buffered/disp32 - # . . discard args - 81 0/subop/add %esp 8/imm32 - # . flush(Stderr) - # . . push args - 68/push Stderr/imm32 - # . . call - e8/call flush/disp32 - # . . discard args - 81 0/subop/add %esp 4/imm32 - # . syscall(exit, 1) - bb/copy-to-ebx 1/imm32 - b8/copy-to-eax 1/imm32/exit - cd/syscall 0x80/imm8 - # never gets here - -test-push: - # var ecx : (address stack) = empty stack of size 8 - 68/push 0/imm32 - 68/push 0/imm32 - 68/push 8/imm32/length - 68/push 0/imm32/top - 89/<- %ecx 4/r32/esp - # - (push %ecx 42) - # top - 58/pop-to-eax - (check-ints-equal %eax 4 "F - test-push: top") - # length - 58/pop-to-eax - (check-ints-equal %eax 8 "F - test-push: length") - # first word is 42 - 58/pop-to-eax - (check-ints-equal %eax 42 "F - test-push: data[0..3]") - # second word is 0 - 58/pop-to-eax - (check-ints-equal %eax 0 "F - test-push: data[4..7]") - c3/return - -pop: # s : (address stack) -> n/eax : int - # . prolog - 55/push-ebp - 89/<- %ebp 4/r32/esp - # . save registers - 51/push-ecx - 56/push-esi - # esi = s - 8b/-> *(ebp+8) 6/r32/esi - # if (s->top <= 0) abort - 81 7/subop/compare *esi 0/imm32 - 7e/jump-if-lesser-or-equal $pop:abort/disp8 - # s->top -= 4 - 81 5/subop/subtract *esi 4/imm32 - # eax = s->data[s->top] - 8b/-> *esi 1/r32/ecx/top - 8b/-> *(esi+ecx+8) 0/r32/eax -$pop:end: - # . restore registers - 5e/pop-to-esi - 59/pop-to-ecx - # . epilog - 89/<- %esp 5/r32/ebp - 5d/pop-to-ebp - c3/return - -$pop:abort: - # print(stderr, "error: pop: nothing left in stack") - # . write-buffered(Stderr, "error: pop: nothing left in stack") - # . . push args - 68/push "error: pop: nothing left in stack"/imm32 - 68/push Stderr/imm32 - # . . call - e8/call write-buffered/disp32 - # . . discard args - 81 0/subop/add %esp 8/imm32 - # . flush(Stderr) - # . . push args - 68/push Stderr/imm32 - # . . call - e8/call flush/disp32 - # . . discard args - 81 0/subop/add %esp 4/imm32 - # . syscall(exit, 1) - bb/copy-to-ebx 1/imm32 - b8/copy-to-eax 1/imm32/exit - cd/syscall 0x80/imm8 - # never gets here - -test-pop: - # var ecx : (address stack) = stack of size 8 containing just 42 - 68/push 0/imm32 - 68/push 42/imm32 - 68/push 8/imm32/length - 68/push 4/imm32/top - 89/<- %ecx 4/r32/esp - # - (pop %ecx) # => eax - # result - (check-ints-equal %eax 42 "F - test-pop: result") - # top - 58/pop-to-eax - (check-ints-equal %eax 0 "F - test-pop: top") - # length - 58/pop-to-eax - (check-ints-equal %eax 8 "F - test-pop: length") - # clean up - 81 0/subop/add %esp 8/imm32 - c3/return - -top: # s : (address stack) -> n/eax : int - # . prolog - 55/push-ebp - 89/<- %ebp 4/r32/esp - # . save registers - 51/push-ecx - 56/push-esi - # esi = s - 8b/-> *(ebp+8) 6/r32/esi - # if (s->top <= 0) abort - 81 7/subop/compare *esi 0/imm32 - 7e/jump-if-lesser-or-equal $top:abort/disp8 - # eax = s->data[s->top - 4] - 8b/-> *esi 1/r32/ecx/top - 81 5/subop/subtract %ecx 4/imm32 - 8b/-> *(esi+ecx+8) 0/r32/eax -$top:end: - # . restore registers - 5e/pop-to-esi - 59/pop-to-ecx - # . epilog - 89/<- %esp 5/r32/ebp - 5d/pop-to-ebp - c3/return - -$top:abort: - # print(stderr, "error: top: nothing left in stack") - # . write-buffered(Stderr, "error: top: nothing left in stack") - # . . push args - 68/push "error: top: nothing left in stack"/imm32 - 68/push Stderr/imm32 - # . . call - e8/call write-buffered/disp32 - # . . discard args - 81 0/subop/add %esp 8/imm32 - # . flush(Stderr) - # . . push args - 68/push Stderr/imm32 - # . . call - e8/call flush/disp32 - # . . discard args - 81 0/subop/add %esp 4/imm32 - # . syscall(exit, 1) - bb/copy-to-ebx 1/imm32 - b8/copy-to-eax 1/imm32/exit - cd/syscall 0x80/imm8 - # never gets here - -test-top: - # var ecx : (address stack) = stack of size 8 containing just 42 - 68/push 0/imm32 - 68/push 42/imm32 - 68/push 8/imm32/length - 68/push 4/imm32/top - 89/<- %ecx 4/r32/esp - # - (top %ecx) # => eax - # result - (check-ints-equal %eax 42 "F - test-top: result") - # clean up - 81 0/subop/add %esp 0x10/imm32 - c3/return diff --git a/apps/calls b/apps/calls index dbe3c0ae..7cabc825 100755 --- a/apps/calls +++ b/apps/calls Binary files differdiff --git a/apps/crenshaw2-1 b/apps/crenshaw2-1 index 096d5342..ca629e9c 100755 --- a/apps/crenshaw2-1 +++ b/apps/crenshaw2-1 Binary files differdiff --git a/apps/crenshaw2-1b b/apps/crenshaw2-1b index af0e221a..dd1292ed 100755 --- a/apps/crenshaw2-1b +++ b/apps/crenshaw2-1b Binary files differdiff --git a/apps/dquotes b/apps/dquotes index cfe72703..351742e6 100755 --- a/apps/dquotes +++ b/apps/dquotes Binary files differdiff --git a/apps/factorial b/apps/factorial index f104624c..e3e02af5 100755 --- a/apps/factorial +++ b/apps/factorial Binary files differdiff --git a/apps/handle b/apps/handle index 14441a0c..c0f4a4fb 100755 --- a/apps/handle +++ b/apps/handle Binary files differdiff --git a/apps/hex b/apps/hex index 172bf918..eade5fa7 100755 --- a/apps/hex +++ b/apps/hex Binary files differdiff --git a/apps/pack b/apps/pack index cbab4e72..a2cd9595 100755 --- a/apps/pack +++ b/apps/pack Binary files differdiff --git a/apps/sigils b/apps/sigils index f2d07269..d8cdaf55 100755 --- a/apps/sigils +++ b/apps/sigils Binary files differdiff --git a/apps/survey b/apps/survey index 14843f57..6595e7cf 100755 --- a/apps/survey +++ b/apps/survey Binary files differdiff --git a/apps/tests b/apps/tests index 426650be..0dd18754 100755 --- a/apps/tests +++ b/apps/tests Binary files differ |