diff options
Diffstat (limited to 'subx/069slice.subx')
-rw-r--r-- | subx/069slice.subx | 140 |
1 files changed, 0 insertions, 140 deletions
diff --git a/subx/069slice.subx b/subx/069slice.subx index dda19ad8..ef45e508 100644 --- a/subx/069slice.subx +++ b/subx/069slice.subx @@ -6,123 +6,6 @@ # . op subop mod rm32 base index scale r32 # . 1-3 bytes 3 bits 2 bits 3 bits 3 bits 3 bits 2 bits 2 bits 0/1/2/4 bytes 0/1/2/4 bytes -#? e8/call test-write-byte-multiple-flushes/disp32 -#? #? e8/call test-foo/disp32 -#? #? e8/call test-slice-equal/disp32 -#? bb/copy-to-EBX 0/imm32 -#? b8/copy-to-EAX 1/imm32/exit -#? cd/syscall 0x80/imm8 - -#? # stop directly - seems fine -#? # error-byte - writing out of bounds -#? # drop stop - writing out of bounds -#? -#? test-foo: -#? # This test uses exit-descriptors. Use EBP for setting up local variables. -#? 55/push-EBP -#? 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . . # copy ESP to EBP -#? # initialize '_test-stream' to "a" -#? # . write(_test-stream, "a") -#? # . . push args -#? 68/push "a"/imm32 -#? 68/push _test-stream/imm32 -#? # . . call -#? e8/call write/disp32 -#? # . . discard args -#? 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # add to ESP -#? # initialize exit-descriptor 'ed' for the call to 'convert-next-octet' below -#? # . var ed/ECX : exit-descriptor -#? 81 5/subop/subtract 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # subtract from ESP -#? 89/copy 3/mod/direct 1/rm32/ECX . . . 4/r32/ESP . . # copy ESP to ECX -#? # . tailor-exit-descriptor(ed, 12) -#? # . . push args -#? 68/push 0xc/imm32/nbytes-of-args-for-convert-next-octet -#? 51/push-ECX/ed -#? # . . call -#? e8/call tailor-exit-descriptor/disp32 -#? # . . discard args -#? 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # add to ESP -#? # EAX = foo(_test-buffered-file, _test-error-buffered-file, ed) -#? # . . push args -#? 51/push-ECX/ed -#? 68/push _test-foo-error-buffered-file/imm32 -#? 68/push _test-buffered-file/imm32 -#? # . . call -#? e8/call foo/disp32 -#? # registers except ESP may be clobbered at this point -#? # pop args to convert-next-octet -#? # . . discard first 2 args -#? 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # add to ESP -#? # . . restore ed -#? 59/pop-to-ECX -#? # . epilog -#? # don't restore ESP from EBP; manually reclaim locals -#? 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # add to ESP -#? 5d/pop-to-EBP -#? c3/return -#? -#? foo: # in : (address buffered-file), err : (address buffered-file), ed : (address exit-descriptor) -> byte-or-eof/EAX -#? # . prolog -#? 55/push-EBP -#? 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . . # copy ESP to EBP -#? # . foo-error-byte(ed, err, msg, '.') -#? # . . push args -#? 68/push 0x2e/imm32/period/dummy -#? 68/push "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"/imm32 -#? ff 6/subop/push 1/mod/*+disp8 5/rm32/EBP . . . . 0xc/disp8 . # push *(EBP+12) -#? ff 6/subop/push 1/mod/*+disp8 5/rm32/EBP . . . . 0x10/disp8 . # push *(EBP+16) -#? # . . call -#? e8/call foo-error-byte/disp32 # never returns -#? # . . discard args -#? 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0x10/imm32 # add to ESP -#? # . epilog -#? 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . . # copy EBP to ESP -#? 5d/pop-to-EBP -#? c3/return -#? -#? # write(out, "Error: "+msg+": "+byte) then stop(ed, 1) -#? foo-error-byte: # ed : (address exit-descriptor), out : (address buffered-file), msg : (address array byte), n : byte -> <void> -#? # . prolog -#? 55/push-EBP -#? 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . . # copy ESP to EBP -#? # write-buffered(out, "Error: ") -#? # . . push args -#? 68/push "Error: "/imm32 -#? ff 6/subop/push 1/mod/*+disp8 5/rm32/EBP . . . . 0xc/disp8 . # push *(EBP+12) -#? # . . call -#? e8/call write-buffered/disp32 -#? # . . discard args -#? 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # add to ESP -#? # write-buffered(out, msg) -#? # . . push args -#? ff 6/subop/push 1/mod/*+disp8 5/rm32/EBP . . . . 0x10/disp8 . # push *(EBP+16) -#? ff 6/subop/push 1/mod/*+disp8 5/rm32/EBP . . . . 0xc/disp8 . # push *(EBP+12) -#? # . . call -#? e8/call write-buffered/disp32 -#? # . . discard args -#? 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # add to ESP -#? # write-buffered(out, ": ") -#? # . . push args -#? 68/push ": "/imm32 -#? ff 6/subop/push 1/mod/*+disp8 5/rm32/EBP . . . . 0xc/disp8 . # push *(EBP+12) -#? # . . call -#? e8/call write-buffered/disp32 -#? # . . discard args -#? 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # add to ESP -#? # print-byte(out, byte) -#? # . . push args -#? ff 6/subop/push 1/mod/*+disp8 5/rm32/EBP . . . . 0x14/disp8 . # push *(EBP+20) -#? ff 6/subop/push 1/mod/*+disp8 5/rm32/EBP . . . . 0xc/disp8 . # push *(EBP+12) -#? # . . call -#? e8/call print-byte/disp32 -#? # . . discard args -#? 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # add to ESP -#? $foo-error-byte:dead-end: -#? # . epilog -#? 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . . # copy EBP to ESP -#? 5d/pop-to-EBP -#? c3/return - # main: e8/call run-tests/disp32 # 'run-tests' is a function created automatically by SubX. It calls all functions that start with 'test-'. # syscall(exit, Num-test-failures) @@ -490,29 +373,6 @@ test-slice-equal-empty-with-empty: == data -#? _test-foo-error-stream: -#? # current write index -#? 00 00 00 00 -#? # current read index -#? 00 00 00 00 -#? # length (= 8) -#? 08 00 00 00 -#? # data -#? 00 00 00 00 00 00 00 00 # 8 bytes -#? -#? # a test buffered file for _test-stream -#? _test-foo-error-buffered-file: -#? # file descriptor or (address stream) -#? _test-foo-error-stream/imm32 -#? # current write index -#? 00 00 00 00 -#? # current read index -#? 00 00 00 00 -#? # length (6) -#? 06 00 00 00 -#? # data -#? 00 00 00 00 00 00 # 6 bytes - _test-slice-data-0: 41/A _test-slice-data-1: |