From ac07e589b3e912c704c2011d543f18b16712ff15 Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Sat, 29 Dec 2018 15:27:18 -0800 Subject: 4890 - new html renderings a) Switch to a light background. b) Linkify calls in .subx files. c) Keep all colorization in the Vim colorscheme, get rid of hacky special-cases in update_html. --- html/subx/064write-buffered.subx.html | 150 +++++++++++++++++----------------- 1 file changed, 73 insertions(+), 77 deletions(-) (limited to 'html/subx/064write-buffered.subx.html') diff --git a/html/subx/064write-buffered.subx.html b/html/subx/064write-buffered.subx.html index 9351d258..2886cfb4 100644 --- a/html/subx/064write-buffered.subx.html +++ b/html/subx/064write-buffered.subx.html @@ -7,27 +7,23 @@ - + @@ -75,11 +71,11 @@ if ('onhashchange' in window) { 10 #? e8/call test-write-buffered-with-intermediate-flush/disp32 11 e8/call run-tests/disp32 # 'run-tests' is a function created automatically by SubX. It calls all functions that start with 'test-'. 12 # syscall(exit, Num-test-failures) - 13 8b/copy 0/mod/indirect 5/rm32/.disp32 . . 3/r32/EBX Num-test-failures/disp32 # copy *Num-test-failures to EBX - 14 b8/copy-to-EAX 1/imm32 + 13 8b/copy 0/mod/indirect 5/rm32/.disp32 . . 3/r32/EBX Num-test-failures/disp32 # copy *Num-test-failures to EBX + 14 b8/copy-to-EAX 1/imm32/exit 15 cd/syscall 0x80/imm8 16 - 17 write-buffered: # f : (address buffered-file), msg : (address array byte) -> <void> + 17 write-buffered: # f : (address buffered-file), msg : (address array byte) -> <void> 18 # pseudocode: 19 # in = msg->data 20 # inend = &msg->data[msg->length] @@ -101,7 +97,7 @@ if ('onhashchange' in window) { 36 # 37 # . prolog 38 55/push-EBP - 39 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . . # copy ESP to EBP + 39 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . . # copy ESP to EBP 40 # . save registers 41 50/push-EAX 42 51/push-ECX @@ -110,52 +106,52 @@ if ('onhashchange' in window) { 45 56/push-ESI 46 57/push-EDI 47 # EAX = msg - 48 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 0/r32/EAX 0xc/disp8 . # copy *(EBP+12) to EAX + 48 8b/copy 1/mod/*+disp8 5/rm32/EBP . . 0/r32/EAX 0xc/disp8 . # copy *(EBP+12) to EAX 49 # in/ESI = msg->data - 50 8d/copy-address 1/mod/*+disp8 0/rm32/EAX . . . 6/r32/ESI 4/disp8 . # copy EAX+4 to ESI + 50 8d/copy-address 1/mod/*+disp8 0/rm32/EAX . . . 6/r32/ESI 4/disp8 . # copy EAX+4 to ESI 51 # inend/ECX = &msg->data[msg->length] - 52 8b/copy 0/mod/indirect 0/rm32/EAX . . . 1/r32/ECX . . # copy *EAX to ECX - 53 8d/copy-address 0/mod/indirect 4/rm32/sib 6/base/ESI 1/index/ECX . 1/r32/ECX . . # copy ESI+ECX to ECX + 52 8b/copy 0/mod/indirect 0/rm32/EAX . . . 1/r32/ECX . . # copy *EAX to ECX + 53 8d/copy-address 0/mod/indirect 4/rm32/sib 6/base/ESI 1/index/ECX . 1/r32/ECX . . # copy ESI+ECX to ECX 54 # EDI = f - 55 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none 7/r32/EDI 8/disp8 . # copy *(EBP+8) to EDI + 55 8b/copy 1/mod/*+disp8 5/rm32/EBP . . 7/r32/EDI 8/disp8 . # copy *(EBP+8) to EDI 56 # EDX = f->length - 57 8b/copy 1/mod/*+disp8 7/rm32/EDI . . . 2/r32/EDX 0xc/disp8 . # copy *(EDI+12) to EDX + 57 8b/copy 1/mod/*+disp8 7/rm32/EDI . . . 2/r32/EDX 0xc/disp8 . # copy *(EDI+12) to EDX 58 # EBX = f->write - 59 8b/copy 1/mod/*+disp8 7/rm32/EDI . . . 3/r32/EBX 4/disp8 . # copy *(EDI+4) to EBX + 59 8b/copy 1/mod/*+disp8 7/rm32/EDI . . . 3/r32/EBX 4/disp8 . # copy *(EDI+4) to EBX 60 $write-buffered:loop: 61 # if (in >= inend) break - 62 39/compare 3/mod/direct 6/rm32/ESI . . . 1/r32/ECX . . # compare ESI with ECX + 62 39/compare 3/mod/direct 6/rm32/ESI . . . 1/r32/ECX . . # compare ESI with ECX 63 7d/jump-if-greater-or-equal $write-buffered:loop-end/disp8 64 # if (f->write >= f->length) flush and clear f's stream - 65 39/compare 3/mod/direct 3/rm32/EBX . . . 2/r32/EDX . . # compare EBX with EDX + 65 39/compare 3/mod/direct 3/rm32/EBX . . . 2/r32/EDX . . # compare EBX with EDX 66 7c/jump-if-lesser $write-buffered:to-stream/disp8 67 # . persist f->write - 68 89/copy 1/mod/*+disp8 7/rm32/EDI . . . 3/r32/EBX 4/disp8 . # copy EBX to *(EDI+4) + 68 89/copy 1/mod/*+disp8 7/rm32/EDI . . . 3/r32/EBX 4/disp8 . # copy EBX to *(EDI+4) 69 # . flush(f) 70 # . . push args 71 57/push-EDI 72 # . . call - 73 e8/call flush/disp32 + 73 e8/call flush/disp32 74 # . . discard args - 75 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32 # add to ESP + 75 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32 # add to ESP 76 # . clear-stream(stream = f+4) 77 # . . push args - 78 8d/copy-address 1/mod/*+disp8 7/rm32/EDI . . . 0/r32/EAX 4/disp8 . # copy EDI+4 to EAX + 78 8d/copy-address 1/mod/*+disp8 7/rm32/EDI . . . 0/r32/EAX 4/disp8 . # copy EDI+4 to EAX 79 50/push-EAX 80 # . . call - 81 e8/call clear-stream/disp32 + 81 e8/call clear-stream/disp32 82 # . . discard args - 83 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32 # add to ESP + 83 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32 # add to ESP 84 # . clear EBX (cached f->write) - 85 31/xor 3/mod/direct 3/rm32/EBX . . . 3/r32/EBX . . # clear EBX + 85 31/xor 3/mod/direct 3/rm32/EBX . . . 3/r32/EBX . . # clear EBX 86 $write-buffered:to-stream: 87 # write to stream 88 # f->data[f->write] = *in 89 # . AL = *in - 90 31/xor 3/mod/direct 0/rm32/EAX . . . 0/r32/EAX . . # clear EAX - 91 8a/copy-byte 0/mod/indirect 6/rm32/ESI . . . 0/r32/AL . . # copy byte at *ESI to AL + 90 31/xor 3/mod/direct 0/rm32/EAX . . . 0/r32/EAX . . # clear EAX + 91 8a/copy-byte 0/mod/indirect 6/rm32/ESI . . . 0/r32/AL . . # copy byte at *ESI to AL 92 # . f->data[f->write] = AL - 93 88/copy-byte 1/mod/*+disp8 4/rm32/sib 7/base/EDI 3/index/EBX . 0/r32/AL 0x10/disp8 . # copy AL to *(EDI+EBX+16) + 93 88/copy-byte 1/mod/*+disp8 4/rm32/sib 7/base/EDI 3/index/EBX . 0/r32/AL 0x10/disp8 . # copy AL to *(EDI+EBX+16) 94 # ++f->write 95 43/increment-EBX 96 # ++in @@ -163,7 +159,7 @@ if ('onhashchange' in window) { 98 eb/jump $write-buffered:loop/disp8 99 $write-buffered:loop-end: 100 # persist necessary variables from registers -101 89/copy 1/mod/*+disp8 7/rm32/EDI . . . 3/r32/EBX 4/disp8 . # copy EBX to *(EDI+4) +101 89/copy 1/mod/*+disp8 7/rm32/EDI . . . 3/r32/EBX 4/disp8 . # copy EBX to *(EDI+4) 102 $write-buffered:end: 103 # . restore registers 104 5f/pop-to-EDI @@ -173,112 +169,112 @@ if ('onhashchange' in window) { 108 59/pop-to-ECX 109 58/pop-to-EAX 110 # . epilog -111 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . . # copy EBP to ESP +111 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . . # copy EBP to ESP 112 5d/pop-to-EBP 113 c3/return 114 -115 test-write-buffered: +115 test-write-buffered: 116 # - check that write-buffered writes to the file 117 # setup 118 # . clear-stream(_test-stream) 119 # . . push args -120 68/push _test-stream/imm32 +120 68/push _test-stream/imm32 121 # . . call -122 e8/call clear-stream/disp32 +122 e8/call clear-stream/disp32 123 # . . discard args -124 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32 # add to ESP +124 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32 # add to ESP 125 # . clear-stream(_test-buffered-file+4) 126 # . . push args -127 b8/copy-to-EAX _test-buffered-file/imm32 +127 b8/copy-to-EAX _test-buffered-file/imm32 128 05/add-to-EAX 4/imm32 129 50/push-EAX 130 # . . call -131 e8/call clear-stream/disp32 +131 e8/call clear-stream/disp32 132 # . . discard args -133 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32 # add to ESP +133 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32 # add to ESP 134 # write-buffered(_test-buffered-file, "Abc") 135 # . . push args 136 68/push "Abc"/imm32 -137 68/push _test-buffered-file/imm32 +137 68/push _test-buffered-file/imm32 138 # . . call -139 e8/call write-buffered/disp32 +139 e8/call write-buffered/disp32 140 # . . discard args -141 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # add to ESP +141 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # add to ESP 142 # flush(_test-buffered-file) 143 # . . push args -144 68/push _test-buffered-file/imm32 +144 68/push _test-buffered-file/imm32 145 # . . call -146 e8/call flush/disp32 +146 e8/call flush/disp32 147 # . . discard args -148 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32 # add to ESP +148 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32 # add to ESP 149 # check-ints-equal(*_test-stream->data, "Abc", msg) 150 # . . push args 151 68/push "F - test-write-buffered-single"/imm32 152 68/push 0x636241/imm32 153 # . . push *_test-stream->data -154 b8/copy-to-EAX _test-stream/imm32 -155 ff 6/subop/push 1/mod/*+disp8 0/rm32/EAX . . . . 0xc/disp8 . # push *(EAX+12) +154 b8/copy-to-EAX _test-stream/imm32 +155 ff 6/subop/push 1/mod/*+disp8 0/rm32/EAX . . . . 0xc/disp8 . # push *(EAX+12) 156 # . . call -157 e8/call check-ints-equal/disp32 +157 e8/call check-ints-equal/disp32 158 # . . discard args -159 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32 # add to ESP +159 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32 # add to ESP 160 # . end 161 c3/return 162 -163 test-write-buffered-with-intermediate-flush: +163 test-write-buffered-with-intermediate-flush: 164 # - check that write-buffered flushes in the middle if its buffer fills up 165 # setup 166 # . clear-stream(_test-stream) 167 # . . push args -168 68/push _test-stream/imm32 +168 68/push _test-stream/imm32 169 # . . call -170 e8/call clear-stream/disp32 +170 e8/call clear-stream/disp32 171 # . . discard args -172 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32 # add to ESP +172 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32 # add to ESP 173 # . clear-stream(_test-buffered-file+4) 174 # . . push args -175 b8/copy-to-EAX _test-buffered-file/imm32 +175 b8/copy-to-EAX _test-buffered-file/imm32 176 05/add-to-EAX 4/imm32 177 50/push-EAX 178 # . . call -179 e8/call clear-stream/disp32 +179 e8/call clear-stream/disp32 180 # . . discard args -181 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32 # add to ESP +181 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32 # add to ESP 182 # _test-stream can hold 8 bytes, but _test-buffered-file can hold only 6. 183 # Try to write 7 bytes. 184 # . write-buffered(_test-buffered-file, "Abcdefg") 185 # . . push args 186 68/push "Abcdefg"/imm32 -187 68/push _test-buffered-file/imm32 +187 68/push _test-buffered-file/imm32 188 # . . call -189 e8/call write-buffered/disp32 +189 e8/call write-buffered/disp32 190 # . . discard args -191 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # add to ESP +191 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 8/imm32 # add to ESP 192 # don't flush 193 # 6 bytes should still have gotten to _test-stream 194 # . check-ints-equal(*_test-stream->write, 6, msg) 195 # . . push args -196 68/push "F - test-write-buffered-with-intermediate-flush: flushed data"/imm32 +196 68/push "F - test-write-buffered-with-intermediate-flush: flushed data"/imm32 197 68/push 6/imm32 198 # . . push *_test-stream->write -199 b8/copy-to-EAX _test-stream/imm32 -200 ff 6/subop/push 0/mod/indirect 0/rm32/EAX . . . . . . # push *EAX +199 b8/copy-to-EAX _test-stream/imm32 +200 ff 6/subop/push 0/mod/indirect 0/rm32/EAX . . . . . . # push *EAX 201 # . . call -202 e8/call check-ints-equal/disp32 +202 e8/call check-ints-equal/disp32 203 # . . discard args -204 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32 # add to ESP +204 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32 # add to ESP 205 # and 1 byte should still be in _test-buffered-file 206 # . check-ints-equal(*_test-buffered-file>write, 1, msg) 207 # . . push args -208 68/push "F - test-write-buffered-with-intermediate-flush: unflushed bytes"/imm32 +208 68/push "F - test-write-buffered-with-intermediate-flush: unflushed bytes"/imm32 209 68/push 1/imm32 210 # . . push *_test-buffered-file->write -211 b8/copy-to-EAX _test-buffered-file/imm32 -212 ff 6/subop/push 1/mod/*+disp8 0/rm32/EAX . . . . 4/disp8 . # push *(EAX+4) +211 b8/copy-to-EAX _test-buffered-file/imm32 +212 ff 6/subop/push 1/mod/*+disp8 0/rm32/EAX . . . . 4/disp8 . # push *(EAX+4) 213 # . . call -214 e8/call check-ints-equal/disp32 +214 e8/call check-ints-equal/disp32 215 # . . discard args -216 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32 # add to ESP +216 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0xc/imm32 # add to ESP 217 # . end 218 c3/return 219 -- cgit 1.4.1-2-gfad0