diff options
author | Kartik Agaram <vc@akkartik.com> | 2020-01-16 18:31:12 -0800 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2020-01-16 18:31:12 -0800 |
commit | 6070c23e5e1c60d3bb169e43bddfa59b1d322427 (patch) | |
tree | 9a70e378c33c15e4779cf94abda8f37c35a5d1da /html/apps | |
parent | 5a6601aba973ba1d1ef30b7b64438c25623b89c5 (diff) | |
download | mu-6070c23e5e1c60d3bb169e43bddfa59b1d322427.tar.gz |
5897 - rename comparison instructions
Signed and unsigned don't quite capture the essence of what the different combinations of x86 flags are doing for SubX. The crucial distinction is that one set of comparison operators is for integers and the second is for addresses.
Diffstat (limited to 'html/apps')
-rw-r--r-- | html/apps/assort.subx.html | 16 | ||||
-rw-r--r-- | html/apps/braces.subx.html | 18 | ||||
-rw-r--r-- | html/apps/calls.subx.html | 50 | ||||
-rw-r--r-- | html/apps/crenshaw2-1.subx.html | 12 | ||||
-rw-r--r-- | html/apps/crenshaw2-1b.subx.html | 14 | ||||
-rw-r--r-- | html/apps/dquotes.subx.html | 50 | ||||
-rw-r--r-- | html/apps/ex10.subx.html | 6 | ||||
-rw-r--r-- | html/apps/ex11.subx.html | 8 | ||||
-rw-r--r-- | html/apps/ex3.subx.html | 2 | ||||
-rw-r--r-- | html/apps/ex8.subx.html | 2 | ||||
-rw-r--r-- | html/apps/factorial.subx.html | 4 | ||||
-rw-r--r-- | html/apps/factorial2.subx.html | 4 | ||||
-rw-r--r-- | html/apps/factorial3.subx.html | 4 | ||||
-rw-r--r-- | html/apps/factorial4.subx.html | 10 | ||||
-rw-r--r-- | html/apps/handle.subx.html | 6 | ||||
-rw-r--r-- | html/apps/hex.subx.html | 44 | ||||
-rw-r--r-- | html/apps/mu.subx.html | 220 | ||||
-rw-r--r-- | html/apps/mulisp.subx.html | 8 | ||||
-rw-r--r-- | html/apps/pack.subx.html | 98 | ||||
-rw-r--r-- | html/apps/sigils.subx.html | 96 | ||||
-rw-r--r-- | html/apps/survey.subx.html | 70 | ||||
-rw-r--r-- | html/apps/tests.subx.html | 12 |
22 files changed, 377 insertions, 377 deletions
diff --git a/html/apps/assort.subx.html b/html/apps/assort.subx.html index 127ccce8..a7452e6b 100644 --- a/html/apps/assort.subx.html +++ b/html/apps/assort.subx.html @@ -102,7 +102,7 @@ if ('onhashchange' in window) { <span id="L40" class="LineNr"> 40 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run_tests()</span> <span id="L41" class="LineNr"> 41 </span> <span class="subxComment"># if (argc <= 1) goto interactive</span> <span id="L42" class="LineNr"> 42 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/disp8 1/imm32 <span class="subxComment"># compare *ebp</span> -<span id="L43" class="LineNr"> 43 </span> 7e/jump-if-lesser-or-equal $subx-assort-main:interactive/disp8 +<span id="L43" class="LineNr"> 43 </span> 7e/jump-if-<= $subx-assort-main:interactive/disp8 <span id="L44" class="LineNr"> 44 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto interactive</span> <span id="L45" class="LineNr"> 45 </span> <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], "test")</span> <span id="L46" class="LineNr"> 46 </span> <span class="subxS2Comment"># . . push args</span> @@ -114,7 +114,7 @@ if ('onhashchange' in window) { <span id="L52" class="LineNr"> 52 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L53" class="LineNr"> 53 </span> <span class="subxS1Comment"># . if (eax == false) goto interactive</span> <span id="L54" class="LineNr"> 54 </span> 3d/compare-eax-and 0/imm32/false -<span id="L55" class="LineNr"> 55 </span> 74/jump-if-equal $subx-assort-main:interactive/disp8 +<span id="L55" class="LineNr"> 55 </span> 74/jump-if-= $subx-assort-main:interactive/disp8 <span id="L56" class="LineNr"> 56 </span> <span class="subxComment"># run-tests()</span> <span id="L57" class="LineNr"> 57 </span> e8/call run-tests/disp32 <span id="L58" class="LineNr"> 58 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span> @@ -539,7 +539,7 @@ if ('onhashchange' in window) { <span id="L525" class="LineNr">525 </span><span class="Constant">$read-segments:check0</span>: <span id="L526" class="LineNr">526 </span> <span class="subxComment"># if (line->write == 0) break</span> <span id="L527" class="LineNr">527 </span> 81 7/subop/compare 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare *ecx</span> -<span id="L528" class="LineNr">528 </span> 0f 84/jump-if-equal $read-segments:<span class="Constant">break</span>/disp32 +<span id="L528" class="LineNr">528 </span> 0f 84/jump-if-= $read-segments:<span class="Constant">break</span>/disp32 <span id="L529" class="Folded">529 </span><span class="Folded">+-- 33 lines: #? # dump line -----------------------------------------------------------------------------------------------------------------------------</span> <span id="L562" class="LineNr">562 </span> <span class="subxComment"># next-word-or-string(line, word-slice)</span> <span id="L563" class="LineNr">563 </span> <span class="subxS2Comment"># . . push args</span> @@ -561,7 +561,7 @@ if ('onhashchange' in window) { <span id="L587" class="LineNr">587 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L588" class="LineNr">588 </span> <span class="subxS1Comment"># . if (eax != false) continue</span> <span id="L589" class="LineNr">589 </span> 3d/compare-eax-and 0/imm32/false -<span id="L590" class="LineNr">590 </span> 0f 85/jump-if-not-equal $read-segments:<span class="Constant">loop</span>/disp32 +<span id="L590" class="LineNr">590 </span> 0f 85/jump-if-!= $read-segments:<span class="Constant">loop</span>/disp32 <span id="L591" class="LineNr">591 </span><span class="Constant">$read-segments:check-for-comment</span>: <span id="L592" class="Folded">592 </span><span class="Folded">+-- 9 lines: #? # print("check for comment\n") ----------------------------------------------------------------------------------------------------------</span> <span id="L601" class="LineNr">601 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, "#")) continue</span> @@ -572,7 +572,7 @@ if ('onhashchange' in window) { <span id="L606" class="LineNr">606 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to AL</span> <span id="L607" class="LineNr">607 </span> <span class="subxS1Comment"># . if (c == '#') continue</span> <span id="L608" class="LineNr">608 </span> 3d/compare-eax-and 0x23/imm32/hash -<span id="L609" class="LineNr">609 </span> 0f 84/jump-if-equal $read-segments:<span class="Constant">loop</span>/disp32 +<span id="L609" class="LineNr">609 </span> 0f 84/jump-if-= $read-segments:<span class="Constant">loop</span>/disp32 <span id="L610" class="LineNr">610 </span><span class="Constant">$read-segments:check-for-segment-header</span>: <span id="L611" class="Folded">611 </span><span class="Folded">+-- 9 lines: #? # print("check for segment header\n") ---------------------------------------------------------------------------------------------------</span> <span id="L620" class="Folded">620 </span><span class="Folded">+-- 40 lines: #? # dump word-slice -----------------------------------------------------------------------------------------------------------------------</span> @@ -587,7 +587,7 @@ if ('onhashchange' in window) { <span id="L668" class="LineNr">668 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L669" class="LineNr">669 </span> <span class="subxS1Comment"># . if (eax == false) goto check3</span> <span id="L670" class="LineNr">670 </span> 3d/compare-eax-and 0/imm32/false -<span id="L671" class="LineNr">671 </span> 0f 84/jump-if-equal $read-segments:regular-line/disp32 +<span id="L671" class="LineNr">671 </span> 0f 84/jump-if-= $read-segments:regular-line/disp32 <span id="L672" class="LineNr">672 </span> <span class="subxComment"># segment-name = next-word-or-string(line)</span> <span id="L673" class="LineNr">673 </span> <span class="subxS2Comment"># . . push args</span> <span id="L674" class="LineNr">674 </span> 52/push-edx @@ -610,7 +610,7 @@ if ('onhashchange' in window) { <span id="L730" class="LineNr">730 </span> 8b/copy 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *eax to ebx</span> <span id="L731" class="LineNr">731 </span> <span class="subxComment"># if (curr-segment != 0) continue</span> <span id="L732" class="LineNr">732 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare ebx</span> -<span id="L733" class="LineNr">733 </span> 0f 85/jump-if-not-equal $read-segments:<span class="Constant">loop</span>/disp32 +<span id="L733" class="LineNr">733 </span> 0f 85/jump-if-!= $read-segments:<span class="Constant">loop</span>/disp32 <span id="L734" class="LineNr">734 </span> <span class="subxComment"># curr-segment = new-stream(Heap, Segment-size, 1)</span> <span id="L735" class="LineNr">735 </span> <span class="subxS1Comment"># . save segment-slot</span> <span id="L736" class="LineNr">736 </span> 50/push-eax @@ -695,7 +695,7 @@ if ('onhashchange' in window) { <span id="L871" class="LineNr">871 </span><span class="Constant">$write-segments:loop</span>: <span id="L872" class="LineNr">872 </span> <span class="subxComment"># if (curr >= max) break</span> <span id="L873" class="LineNr">873 </span> 39/compare 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare esi with edx</span> -<span id="L874" class="LineNr">874 </span> 73/jump-if-greater-or-equal-unsigned $write-segments:<span class="Constant">break</span>/disp8 +<span id="L874" class="LineNr">874 </span> 73/jump-if-addr>= $write-segments:<span class="Constant">break</span>/disp8 <span id="L875" class="LineNr">875 </span> <span class="subxComment"># var stream/eax : (addr stream byte) = table[i].stream</span> <span id="L876" class="LineNr">876 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to eax</span> <span id="L877" class="LineNr">877 </span> <span class="subxComment"># write-stream-data(out, stream)</span> diff --git a/html/apps/braces.subx.html b/html/apps/braces.subx.html index 038eb673..47428966 100644 --- a/html/apps/braces.subx.html +++ b/html/apps/braces.subx.html @@ -116,11 +116,11 @@ if ('onhashchange' in window) { <span id="L57" class="LineNr"> 57 </span> (<a href='../053new-segment.subx.html#L41'>new-segment</a> *<span class="SpecialChar"><a href='../069allocate.subx.html#L29'>Heap-size</a></span> <span class="SpecialChar"><a href='../069allocate.subx.html#L22'>Heap</a></span>) <span id="L58" class="LineNr"> 58 </span> <span class="subxComment"># if (argc <= 1) goto interactive</span> <span id="L59" class="LineNr"> 59 </span> 81 7/subop/compare *ebp 1/imm32 -<span id="L60" class="LineNr"> 60 </span> 7e/jump-if-lesser-or-equal $subx-braces-main:interactive/disp8 +<span id="L60" class="LineNr"> 60 </span> 7e/jump-if-<= $subx-braces-main:interactive/disp8 <span id="L61" class="LineNr"> 61 </span> <span class="subxComment"># if (argv[1] != "test")) goto interactive</span> <span id="L62" class="LineNr"> 62 </span> (<a href='../052kernel-string-equal.subx.html#L33'>kernel-string-equal?</a> *(ebp+8) <span class="Constant">"test"</span>) <span class="subxComment"># => eax</span> <span id="L63" class="LineNr"> 63 </span> 3d/compare-eax-and 0/imm32 -<span id="L64" class="LineNr"> 64 </span> 74/jump-if-equal $subx-braces-main:interactive/disp8 +<span id="L64" class="LineNr"> 64 </span> 74/jump-if-= $subx-braces-main:interactive/disp8 <span id="L65" class="LineNr"> 65 </span> <span class="subxComment">#</span> <span id="L66" class="LineNr"> 66 </span> (run-tests) <span id="L67" class="LineNr"> 67 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span> @@ -205,7 +205,7 @@ if ('onhashchange' in window) { <span id="L146" class="LineNr">146 </span><span class="Constant">$subx-braces:check0</span>: <span id="L147" class="LineNr">147 </span> <span class="subxComment"># if (line->write == 0) break</span> <span id="L148" class="LineNr">148 </span> 81 7/subop/compare *ecx 0/imm32 -<span id="L149" class="LineNr">149 </span> 0f 84/jump-if-equal $subx-braces:<span class="Constant">break</span>/disp32 +<span id="L149" class="LineNr">149 </span> 0f 84/jump-if-= $subx-braces:<span class="Constant">break</span>/disp32 <span id="L150" class="LineNr">150 </span> (<a href='../073next-token.subx.html#L464'>skip-chars-matching-whitespace</a> %ecx) <span id="L151" class="LineNr">151 </span><span class="Constant">$subx-braces:check-for-curly-open</span>: <span id="L152" class="LineNr">152 </span> <span class="subxComment"># if (line->data[line->read] != '{') goto next check</span> @@ -215,7 +215,7 @@ if ('onhashchange' in window) { <span id="L156" class="LineNr">156 </span> 81 4/subop/and %eax 0xff/imm32 <span id="L157" class="LineNr">157 </span> <span class="subxS1Comment"># . if (eax != '{') continue</span> <span id="L158" class="LineNr">158 </span> 3d/compare-eax-and 0x7b/imm32/open-curly -<span id="L159" class="LineNr">159 </span> 0f 85/jump-if-not-equal $subx-braces:check-for-curly-closed/disp32 +<span id="L159" class="LineNr">159 </span> 0f 85/jump-if-!= $subx-braces:check-for-curly-closed/disp32 <span id="L160" class="LineNr">160 </span><span class="Constant">$subx-braces:emit-curly-open</span>: <span id="L161" class="LineNr">161 </span> <span class="subxComment"># print(out, "_loop" next-label-id ":")</span> <span id="L162" class="LineNr">162 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+0xc) <span class="Constant">"_loop"</span>) @@ -230,7 +230,7 @@ if ('onhashchange' in window) { <span id="L171" class="LineNr">171 </span><span class="Constant">$subx-braces:check-for-curly-closed</span>: <span id="L172" class="LineNr">172 </span> <span class="subxComment"># if (line->data[line->read] != '}') goto next check</span> <span id="L173" class="LineNr">173 </span> 3d/compare-eax-and 0x7d/imm32/close-curly -<span id="L174" class="LineNr">174 </span> 0f 85/jump-if-equal $subx-braces:word-loop/disp32 +<span id="L174" class="LineNr">174 </span> 0f 85/jump-if-= $subx-braces:word-loop/disp32 <span id="L175" class="LineNr">175 </span><span class="Constant">$subx-braces:emit-curly-closed</span>: <span id="L176" class="LineNr">176 </span> <span class="subxComment"># eax = pop(label-stack)</span> <span id="L177" class="LineNr">177 </span> (<a href='../092stack.subx.html#L230'>pop</a> %edx) @@ -246,7 +246,7 @@ if ('onhashchange' in window) { <span id="L187" class="LineNr">187 </span> <span class="subxComment"># if (slice-empty?(word-slice)) break</span> <span id="L188" class="LineNr">188 </span> (<a href='../072slice.subx.html#L9'>slice-empty?</a> %edi) <span id="L189" class="LineNr">189 </span> 3d/compare-eax-and 0/imm32 -<span id="L190" class="LineNr">190 </span> 0f 85/jump-if-not-equal $subx-braces:next-line/disp32 +<span id="L190" class="LineNr">190 </span> 0f 85/jump-if-!= $subx-braces:next-line/disp32 <span id="L191" class="LineNr">191 </span><span class="Constant">$subx-braces:check-for-comment</span>: <span id="L192" class="LineNr">192 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, "#")) continue</span> <span id="L193" class="LineNr">193 </span> <span class="subxS1Comment"># . eax = *word-slice->start</span> @@ -255,14 +255,14 @@ if ('onhashchange' in window) { <span id="L196" class="LineNr">196 </span> 81 4/subop/and %eax 0xff/imm32 <span id="L197" class="LineNr">197 </span> <span class="subxS1Comment"># . if (eax == '#') continue</span> <span id="L198" class="LineNr">198 </span> 3d/compare-eax-and 0x23/imm32/hash -<span id="L199" class="LineNr">199 </span> 74/jump-if-equal $subx-braces:word-loop/disp8 +<span id="L199" class="LineNr">199 </span> 74/jump-if-= $subx-braces:word-loop/disp8 <span id="L200" class="LineNr">200 </span><span class="Constant">$subx-braces:check-for-break</span>: <span id="L201" class="LineNr">201 </span> <span class="subxComment"># if (!slice-starts-with?(word-slice, "break/")) goto next check</span> <span id="L202" class="LineNr">202 </span> <span class="subxS1Comment"># . eax = slice-starts-with?(word-slice, "break/")</span> <span id="L203" class="LineNr">203 </span> (<a href='../072slice.subx.html#L458'>slice-starts-with?</a> %edi <span class="Constant">"break/"</span>) <span id="L204" class="LineNr">204 </span> <span class="subxS1Comment"># . if (eax == false) goto next check</span> <span id="L205" class="LineNr">205 </span> 3d/compare-eax-and 0/imm32/false -<span id="L206" class="LineNr">206 </span> 74/jump-if-equal $subx-braces:check-for-loop/disp8 +<span id="L206" class="LineNr">206 </span> 74/jump-if-= $subx-braces:check-for-loop/disp8 <span id="L207" class="LineNr">207 </span><span class="Constant">$subx-braces:emit-break</span>: <span id="L208" class="LineNr">208 </span> (<a href='../092stack.subx.html#L334'>top</a> %edx) <span id="L209" class="LineNr">209 </span> <span class="subxComment"># print(out, "_break" eax)</span> @@ -278,7 +278,7 @@ if ('onhashchange' in window) { <span id="L219" class="LineNr">219 </span> (<a href='../072slice.subx.html#L458'>slice-starts-with?</a> %edi <span class="Constant">"loop/"</span>) <span id="L220" class="LineNr">220 </span> <span class="subxS1Comment"># . if (eax == false) goto next check</span> <span id="L221" class="LineNr">221 </span> 3d/compare-eax-and 0/imm32/false -<span id="L222" class="LineNr">222 </span> 74/jump-if-equal $subx-braces:emit-word-slice/disp8 +<span id="L222" class="LineNr">222 </span> 74/jump-if-= $subx-braces:emit-word-slice/disp8 <span id="L223" class="LineNr">223 </span><span class="Constant">$subx-braces:emit-loop</span>: <span id="L224" class="LineNr">224 </span> (<a href='../092stack.subx.html#L334'>top</a> %edx) <span id="L225" class="LineNr">225 </span> <span class="subxComment"># print(out, "_loop" eax)</span> diff --git a/html/apps/calls.subx.html b/html/apps/calls.subx.html index 2513b344..0f1f352d 100644 --- a/html/apps/calls.subx.html +++ b/html/apps/calls.subx.html @@ -102,7 +102,7 @@ if ('onhashchange' in window) { <span id="L41" class="LineNr"> 41 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run_tests()</span> <span id="L42" class="LineNr"> 42 </span> <span class="subxComment"># if (argc <= 1) goto run-main</span> <span id="L43" class="LineNr"> 43 </span> 81 7/subop/compare *ebp 1/imm32 -<span id="L44" class="LineNr"> 44 </span> 7e/jump-if-lesser-or-equal $subx-calls-main:interactive/disp8 +<span id="L44" class="LineNr"> 44 </span> 7e/jump-if-<= $subx-calls-main:interactive/disp8 <span id="L45" class="LineNr"> 45 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto run-main</span> <span id="L46" class="LineNr"> 46 </span> <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], "test")</span> <span id="L47" class="LineNr"> 47 </span> <span class="subxS2Comment"># . . push args</span> @@ -114,7 +114,7 @@ if ('onhashchange' in window) { <span id="L53" class="LineNr"> 53 </span> 81 0/subop/add %esp 8/imm32 <span id="L54" class="LineNr"> 54 </span> <span class="subxS1Comment"># . if (eax == false) goto run-main</span> <span id="L55" class="LineNr"> 55 </span> 3d/compare-eax-and 0/imm32/false -<span id="L56" class="LineNr"> 56 </span> 74/jump-if-equal $subx-calls-main:interactive/disp8 +<span id="L56" class="LineNr"> 56 </span> 74/jump-if-= $subx-calls-main:interactive/disp8 <span id="L57" class="LineNr"> 57 </span> <span class="subxComment"># run-tests()</span> <span id="L58" class="LineNr"> 58 </span> e8/call run-tests/disp32 <span id="L59" class="LineNr"> 59 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span> @@ -197,7 +197,7 @@ if ('onhashchange' in window) { <span id="L136" class="LineNr"> 136 </span><span class="Constant">$subx-calls:check0</span>: <span id="L137" class="LineNr"> 137 </span> <span class="subxComment"># if (line->write == 0) break</span> <span id="L138" class="LineNr"> 138 </span> 81 7/subop/compare *esi 0/imm32 -<span id="L139" class="LineNr"> 139 </span> 0f 84/jump-if-equal $subx-calls:<span class="Constant">break</span>/disp32 +<span id="L139" class="LineNr"> 139 </span> 0f 84/jump-if-= $subx-calls:<span class="Constant">break</span>/disp32 <span id="L140" class="LineNr"> 140 </span> <span class="subxComment"># skip-chars-matching-whitespace(line)</span> <span id="L141" class="LineNr"> 141 </span> <span class="subxS2Comment"># . . push args</span> <span id="L142" class="LineNr"> 142 </span> 56/push-esi @@ -213,7 +213,7 @@ if ('onhashchange' in window) { <span id="L152" class="LineNr"> 152 </span> 8a/copy-byte *(esi+ecx+0xc) 0/r32/AL <span id="L153" class="LineNr"> 153 </span> <span class="subxS1Comment"># . if (eax == '(') goto convert-call</span> <span id="L154" class="LineNr"> 154 </span> 3d/compare-eax-and 0x28/imm32/open-paren -<span id="L155" class="LineNr"> 155 </span> 74/jump-if-equal $subx-calls:convert-call/disp8 +<span id="L155" class="LineNr"> 155 </span> 74/jump-if-= $subx-calls:convert-call/disp8 <span id="L156" class="LineNr"> 156 </span><span class="Constant">$subx-calls:pass-through</span>: <span id="L157" class="LineNr"> 157 </span> <span class="subxComment"># write-stream-data(out, line)</span> <span id="L158" class="LineNr"> 158 </span> <span class="subxS2Comment"># . . push args</span> @@ -331,7 +331,7 @@ if ('onhashchange' in window) { <span id="L270" class="LineNr"> 270 </span> 81 0/subop/add %esp 4/imm32 <span id="L271" class="LineNr"> 271 </span> <span class="subxS1Comment"># . if (eax != false) break</span> <span id="L272" class="LineNr"> 272 </span> 3d/compare-eax-and 0/imm32/false -<span id="L273" class="LineNr"> 273 </span> 0f 85/jump-if-not-equal $parse-line:end/disp32 +<span id="L273" class="LineNr"> 273 </span> 0f 85/jump-if-!= $parse-line:end/disp32 <span id="L274" class="Folded"> 274 </span><span class="Folded">+-- 40 lines: #? # dump word-slice -----------------------------------------------------------------------------------------------------------------------</span> <span id="L314" class="LineNr"> 314 </span><span class="Constant">$parse-line:write-word</span>: <span id="L315" class="LineNr"> 315 </span> <span class="subxComment"># write-int(words, word-slice->start)</span> @@ -402,7 +402,7 @@ if ('onhashchange' in window) { <span id="L380" class="LineNr"> 380 </span> <span class="subxS1Comment"># . ecx = words->write - 8</span> <span id="L381" class="LineNr"> 381 </span> 8b/-> *esi 1/r32/ecx <span id="L382" class="LineNr"> 382 </span> 81 5/subop/subtract %ecx 8/imm32 -<span id="L383" class="LineNr"> 383 </span> 0f 8c/jump-if-lesser $emit-call:error1/disp32 +<span id="L383" class="LineNr"> 383 </span> 0f 8c/jump-if-< $emit-call:error1/disp32 <span id="L384" class="LineNr"> 384 </span> <span class="subxComment"># var curr/ecx : (addr slice) = &words->data[words->write-8]</span> <span id="L385" class="LineNr"> 385 </span> 8d/copy-address *(esi+ecx+0xc) 1/r32/ecx <span id="L386" class="LineNr"> 386 </span> <span class="subxComment"># var min/edx : (addr byte) = words->data</span> @@ -411,7 +411,7 @@ if ('onhashchange' in window) { <span id="L389" class="LineNr"> 389 </span><span class="Constant">$emit-call:push-loop</span>: <span id="L390" class="LineNr"> 390 </span> <span class="subxComment"># if (curr <= min) break</span> <span id="L391" class="LineNr"> 391 </span> 39/compare %ecx 2/r32/edx -<span id="L392" class="LineNr"> 392 </span> 0f 8e/jump-if-lesser-or-equal $emit-call:call-instruction/disp32 +<span id="L392" class="LineNr"> 392 </span> 0f 8e/jump-if-<= $emit-call:call-instruction/disp32 <span id="L393" class="LineNr"> 393 </span> <span class="subxComment"># if (*curr->start in '%' '*') goto push-rm32</span> <span id="L394" class="LineNr"> 394 </span> <span class="subxS1Comment"># . var start/eax : (addr byte) = curr->start</span> <span id="L395" class="LineNr"> 395 </span> 8b/-> *ecx 0/r32/eax @@ -420,10 +420,10 @@ if ('onhashchange' in window) { <span id="L398" class="LineNr"> 398 </span> 81 4/subop/and %eax 0xff/imm32 <span id="L399" class="LineNr"> 399 </span> <span class="subxS1Comment"># . if (c == '%') goto push-rm32</span> <span id="L400" class="LineNr"> 400 </span> 3d/compare-eax-and 0x25/imm32/percent -<span id="L401" class="LineNr"> 401 </span> 74/jump-if-equal $emit-call:push-rm32/disp8 +<span id="L401" class="LineNr"> 401 </span> 74/jump-if-= $emit-call:push-rm32/disp8 <span id="L402" class="LineNr"> 402 </span> <span class="subxS1Comment"># . if (c == '*') goto push-rm32</span> <span id="L403" class="LineNr"> 403 </span> 3d/compare-eax-and 0x2a/imm32/asterisk -<span id="L404" class="LineNr"> 404 </span> 74/jump-if-equal $emit-call:push-rm32/disp8 +<span id="L404" class="LineNr"> 404 </span> 74/jump-if-= $emit-call:push-rm32/disp8 <span id="L405" class="LineNr"> 405 </span><span class="Constant">$emit-call:push-imm32</span>: <span id="L406" class="LineNr"> 406 </span> <span class="subxComment"># write-buffered(out, "68/push ")</span> <span id="L407" class="LineNr"> 407 </span> 68/push <span class="Constant">"68/push "</span>/imm32 @@ -814,7 +814,7 @@ if ('onhashchange' in window) { <span id="L824" class="LineNr"> 824 </span> 8b/-> *(esi+4) 1/r32/ecx <span id="L825" class="LineNr"> 825 </span> <span class="subxS1Comment"># . if (ecx >= line->write) return out = {0, 0}</span> <span id="L826" class="LineNr"> 826 </span> 3b/compare 1/r32/ecx *esi -<span id="L827" class="LineNr"> 827 </span> 0f 8d/jump-if-greater-or-equal $next-word-string-or-expression-without-metadata:return-eol/disp32 +<span id="L827" class="LineNr"> 827 </span> 0f 8d/jump-if->= $next-word-string-or-expression-without-metadata:return-eol/disp32 <span id="L828" class="LineNr"> 828 </span><span class="Constant">$next-word-string-or-expression-without-metadata:check-for-comment</span>: <span id="L829" class="LineNr"> 829 </span> <span class="subxComment"># out->start = &line->data[line->read]</span> <span id="L830" class="LineNr"> 830 </span> 8d/copy-address *(esi+ecx+0xc) 0/r32/eax @@ -825,7 +825,7 @@ if ('onhashchange' in window) { <span id="L835" class="LineNr"> 835 </span> 8a/copy-byte *(esi+ecx+0xc) 0/r32/AL <span id="L836" class="LineNr"> 836 </span> <span class="subxS1Comment"># . if (eax != '#') goto next check</span> <span id="L837" class="LineNr"> 837 </span> 3d/compare-eax-and 0x23/imm32/pound -<span id="L838" class="LineNr"> 838 </span> 75/jump-if-not-equal $next-word-string-or-expression-without-metadata:check-for-string-literal/disp8 +<span id="L838" class="LineNr"> 838 </span> 75/jump-if-!= $next-word-string-or-expression-without-metadata:check-for-string-literal/disp8 <span id="L839" class="LineNr"> 839 </span><span class="Constant">$next-word-string-or-expression-without-metadata:comment</span>: <span id="L840" class="LineNr"> 840 </span> <span class="subxComment"># out->end = &line->data[line->write]</span> <span id="L841" class="LineNr"> 841 </span> 8b/-> *esi 0/r32/eax @@ -839,7 +839,7 @@ if ('onhashchange' in window) { <span id="L849" class="LineNr"> 849 </span><span class="Constant">$next-word-string-or-expression-without-metadata:check-for-string-literal</span>: <span id="L850" class="LineNr"> 850 </span> <span class="subxComment"># if (line->data[line->read] != '"') goto next check</span> <span id="L851" class="LineNr"> 851 </span> 3d/compare-eax-and 0x22/imm32/dquote -<span id="L852" class="LineNr"> 852 </span> 75/jump-if-not-equal $next-word-string-or-expression-without-metadata:check-for-expression/disp8 +<span id="L852" class="LineNr"> 852 </span> 75/jump-if-!= $next-word-string-or-expression-without-metadata:check-for-expression/disp8 <span id="L853" class="LineNr"> 853 </span><span class="Constant">$next-word-string-or-expression-without-metadata:string-literal</span>: <span id="L854" class="LineNr"> 854 </span> <span class="subxComment"># skip-string(line)</span> <span id="L855" class="LineNr"> 855 </span> <span class="subxS2Comment"># . . push args</span> @@ -857,14 +857,14 @@ if ('onhashchange' in window) { <span id="L867" class="LineNr"> 867 </span><span class="Constant">$next-word-string-or-expression-without-metadata:check-for-expression</span>: <span id="L868" class="LineNr"> 868 </span> <span class="subxComment"># if (line->data[line->read] != '*') goto next check</span> <span id="L869" class="LineNr"> 869 </span> 3d/compare-eax-and 0x2a/imm32/asterisk -<span id="L870" class="LineNr"> 870 </span> 75/jump-if-not-equal $next-word-string-or-expression-without-metadata:check-for-end-of-call/disp8 +<span id="L870" class="LineNr"> 870 </span> 75/jump-if-!= $next-word-string-or-expression-without-metadata:check-for-end-of-call/disp8 <span id="L871" class="LineNr"> 871 </span> <span class="subxComment"># if (line->data[line->read + 1] == ' ') goto error1</span> <span id="L872" class="LineNr"> 872 </span> 8a/copy-byte *(esi+ecx+0xd) 0/r32/AL <span id="L873" class="LineNr"> 873 </span> 3d/compare-eax-and 0x20/imm32/space -<span id="L874" class="LineNr"> 874 </span> 0f 84/jump-if-equal $next-word-string-or-expression-without-metadata:error1/disp32 +<span id="L874" class="LineNr"> 874 </span> 0f 84/jump-if-= $next-word-string-or-expression-without-metadata:error1/disp32 <span id="L875" class="LineNr"> 875 </span> <span class="subxComment"># if (line->data[line->read + 1] != '(') goto regular-word</span> <span id="L876" class="LineNr"> 876 </span> 3d/compare-eax-and 0x28/imm32/open-paren -<span id="L877" class="LineNr"> 877 </span> 0f 85/jump-if-not-equal $next-word-string-or-expression-without-metadata:regular-word-without-metadata/disp32 +<span id="L877" class="LineNr"> 877 </span> 0f 85/jump-if-!= $next-word-string-or-expression-without-metadata:regular-word-without-metadata/disp32 <span id="L878" class="LineNr"> 878 </span><span class="Constant">$next-word-string-or-expression-without-metadata:paren</span>: <span id="L879" class="LineNr"> 879 </span> <span class="subxComment"># skip-until-close-paren(line)</span> <span id="L880" class="LineNr"> 880 </span> <span class="subxS2Comment"># . . push args</span> @@ -879,7 +879,7 @@ if ('onhashchange' in window) { <span id="L889" class="LineNr"> 889 </span> 8a/copy-byte *(esi+ecx+0xc) 0/r32/AL <span id="L890" class="LineNr"> 890 </span> <span class="subxS1Comment"># . if (eax != ')') goto error2</span> <span id="L891" class="LineNr"> 891 </span> 3d/compare-eax-and 0x29/imm32/close-paren -<span id="L892" class="LineNr"> 892 </span> 0f 85/jump-if-not-equal $next-word-string-or-expression-without-metadata:error2/disp32 +<span id="L892" class="LineNr"> 892 </span> 0f 85/jump-if-!= $next-word-string-or-expression-without-metadata:error2/disp32 <span id="L893" class="LineNr"> 893 </span> <span class="subxComment"># ++line->read to skip ')'</span> <span id="L894" class="LineNr"> 894 </span> ff 0/subop/increment *(esi+4) <span id="L895" class="LineNr"> 895 </span> <span class="subxComment"># out->end = &line->data[line->read]</span> @@ -891,7 +891,7 @@ if ('onhashchange' in window) { <span id="L901" class="LineNr"> 901 </span><span class="Constant">$next-word-string-or-expression-without-metadata:check-for-end-of-call</span>: <span id="L902" class="LineNr"> 902 </span> <span class="subxComment"># if (line->data[line->read] != ')') goto next check</span> <span id="L903" class="LineNr"> 903 </span> 3d/compare-eax-and 0x29/imm32/close-paren -<span id="L904" class="LineNr"> 904 </span> 75/jump-if-not-equal $next-word-string-or-expression-without-metadata:regular-word-without-metadata/disp8 +<span id="L904" class="LineNr"> 904 </span> 75/jump-if-!= $next-word-string-or-expression-without-metadata:regular-word-without-metadata/disp8 <span id="L905" class="LineNr"> 905 </span> <span class="subxComment"># ++line->read to skip ')'</span> <span id="L906" class="LineNr"> 906 </span> ff 0/subop/increment *(esi+4) <span id="L907" class="LineNr"> 907 </span> <span class="subxH1Comment"># - error checking: make sure there's nothing else of importance on the line</span> @@ -900,13 +900,13 @@ if ('onhashchange' in window) { <span id="L910" class="LineNr"> 910 </span> 8b/-> *(esi+4) 1/r32/ecx <span id="L911" class="LineNr"> 911 </span> <span class="subxS1Comment"># . if (ecx >= line->write) return {0, 0}</span> <span id="L912" class="LineNr"> 912 </span> 3b/compare 1/r32/ecx *esi -<span id="L913" class="LineNr"> 913 </span> 0f 8d/jump-if-greater-or-equal $next-word-string-or-expression-without-metadata:return-eol/disp32 +<span id="L913" class="LineNr"> 913 </span> 0f 8d/jump-if->= $next-word-string-or-expression-without-metadata:return-eol/disp32 <span id="L914" class="LineNr"> 914 </span> <span class="subxComment"># if (line->data[line->read] == '/') goto error3</span> <span id="L915" class="LineNr"> 915 </span> <span class="subxS1Comment"># . eax = line->data[line->read]</span> <span id="L916" class="LineNr"> 916 </span> 8a/copy-byte *(esi+ecx+0xc) 0/r32/AL <span id="L917" class="LineNr"> 917 </span> <span class="subxS1Comment"># . if (eax == '/') goto error3</span> <span id="L918" class="LineNr"> 918 </span> 3d/compare-eax-and 0x2f/imm32/slash -<span id="L919" class="LineNr"> 919 </span> 0f 84/jump-if-equal $next-word-string-or-expression-without-metadata:error3/disp32 +<span id="L919" class="LineNr"> 919 </span> 0f 84/jump-if-= $next-word-string-or-expression-without-metadata:error3/disp32 <span id="L920" class="LineNr"> 920 </span> <span class="subxComment"># skip-chars-matching-whitespace(line)</span> <span id="L921" class="LineNr"> 921 </span> <span class="subxS2Comment"># . . push args</span> <span id="L922" class="LineNr"> 922 </span> 56/push-esi @@ -919,14 +919,14 @@ if ('onhashchange' in window) { <span id="L929" class="LineNr"> 929 </span> 8b/-> *(esi+4) 1/r32/ecx <span id="L930" class="LineNr"> 930 </span> <span class="subxS1Comment"># . if (ecx >= line->write) return {0, 0}</span> <span id="L931" class="LineNr"> 931 </span> 3b/compare 1/r32/ecx *esi -<span id="L932" class="LineNr"> 932 </span> 0f 8d/jump-if-greater-or-equal $next-word-string-or-expression-without-metadata:return-eol/disp32 +<span id="L932" class="LineNr"> 932 </span> 0f 8d/jump-if->= $next-word-string-or-expression-without-metadata:return-eol/disp32 <span id="L933" class="LineNr"> 933 </span> <span class="subxComment"># if (line->data[line->read] == '#') return out = {0, 0}</span> <span id="L934" class="LineNr"> 934 </span> <span class="subxS1Comment"># . eax = line->data[line->read]</span> <span id="L935" class="LineNr"> 935 </span> 8b/-> *(esi+4) 1/r32/ecx <span id="L936" class="LineNr"> 936 </span> 8a/copy-byte *(esi+ecx+0xc) 0/r32/AL <span id="L937" class="LineNr"> 937 </span> <span class="subxS1Comment"># . if (eax == '#') return out = {0, 0}</span> <span id="L938" class="LineNr"> 938 </span> 3d/compare-eax-and 0x23/imm32/pound -<span id="L939" class="LineNr"> 939 </span> 74/jump-if-equal $next-word-string-or-expression-without-metadata:return-eol/disp8 +<span id="L939" class="LineNr"> 939 </span> 74/jump-if-= $next-word-string-or-expression-without-metadata:return-eol/disp8 <span id="L940" class="LineNr"> 940 </span> <span class="subxComment"># otherwise goto error4</span> <span id="L941" class="LineNr"> 941 </span> e9/jump $next-word-string-or-expression-without-metadata:error4/disp32 <span id="L942" class="LineNr"> 942 </span><span class="Constant">$next-word-string-or-expression-without-metadata:regular-word-without-metadata</span>: @@ -935,20 +935,20 @@ if ('onhashchange' in window) { <span id="L945" class="LineNr"> 945 </span> 8b/-> *(esi+4) 1/r32/ecx <span id="L946" class="LineNr"> 946 </span> <span class="subxS1Comment"># . if (ecx >= line->write) break</span> <span id="L947" class="LineNr"> 947 </span> 3b/compare *esi 1/r32/ecx -<span id="L948" class="LineNr"> 948 </span> 7d/jump-if-greater-or-equal $next-word-string-or-expression-without-metadata:regular-word-break/disp8 +<span id="L948" class="LineNr"> 948 </span> 7d/jump-if->= $next-word-string-or-expression-without-metadata:regular-word-break/disp8 <span id="L949" class="LineNr"> 949 </span> <span class="subxComment"># if (line->data[line->read] == ' ') break</span> <span id="L950" class="LineNr"> 950 </span> <span class="subxS1Comment"># . eax = line->data[line->read]</span> <span id="L951" class="LineNr"> 951 </span> 8b/-> *(esi+4) 1/r32/ecx <span id="L952" class="LineNr"> 952 </span> 8a/copy-byte *(esi+ecx+0xc) 0/r32/AL <span id="L953" class="LineNr"> 953 </span> <span class="subxS1Comment"># . if (eax == ' ') break</span> <span id="L954" class="LineNr"> 954 </span> 3d/compare-eax-and 0x20/imm32/space -<span id="L955" class="LineNr"> 955 </span> 74/jump-if-equal $next-word-string-or-expression-without-metadata:regular-word-break/disp8 +<span id="L955" class="LineNr"> 955 </span> 74/jump-if-= $next-word-string-or-expression-without-metadata:regular-word-break/disp8 <span id="L956" class="LineNr"> 956 </span> <span class="subxComment"># if (line->data[line->read] == ')') break</span> <span id="L957" class="LineNr"> 957 </span> 3d/compare-eax-and 0x29/imm32/close-paren -<span id="L958" class="LineNr"> 958 </span> 0f 84/jump-if-equal $next-word-string-or-expression-without-metadata:regular-word-break/disp32 +<span id="L958" class="LineNr"> 958 </span> 0f 84/jump-if-= $next-word-string-or-expression-without-metadata:regular-word-break/disp32 <span id="L959" class="LineNr"> 959 </span> <span class="subxComment"># if (line->data[line->read] == '/') goto error5</span> <span id="L960" class="LineNr"> 960 </span> 3d/compare-eax-and 0x2f/imm32/slash -<span id="L961" class="LineNr"> 961 </span> 0f 84/jump-if-equal $next-word-string-or-expression-without-metadata:error5/disp32 +<span id="L961" class="LineNr"> 961 </span> 0f 84/jump-if-= $next-word-string-or-expression-without-metadata:error5/disp32 <span id="L962" class="LineNr"> 962 </span> <span class="subxComment"># ++line->read</span> <span id="L963" class="LineNr"> 963 </span> ff 0/subop/increment *(esi+4) <span id="L964" class="LineNr"> 964 </span> <span class="subxComment"># loop</span> diff --git a/html/apps/crenshaw2-1.subx.html b/html/apps/crenshaw2-1.subx.html index df65b7c6..e42c901c 100644 --- a/html/apps/crenshaw2-1.subx.html +++ b/html/apps/crenshaw2-1.subx.html @@ -108,7 +108,7 @@ if ('onhashchange' in window) { <span id="L47" class="LineNr"> 47 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run_tests()</span> <span id="L48" class="LineNr"> 48 </span> <span class="subxComment"># if (argc <= 1) goto run-main</span> <span id="L49" class="LineNr"> 49 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/disp8 1/imm32 <span class="subxComment"># compare *ebp</span> -<span id="L50" class="LineNr"> 50 </span> 7e/jump-if-lesser-or-equal $run-main/disp8 +<span id="L50" class="LineNr"> 50 </span> 7e/jump-if-<= $run-main/disp8 <span id="L51" class="LineNr"> 51 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto run-main</span> <span id="L52" class="LineNr"> 52 </span> <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], "test")</span> <span id="L53" class="LineNr"> 53 </span> <span class="subxS2Comment"># . . push args</span> @@ -120,7 +120,7 @@ if ('onhashchange' in window) { <span id="L59" class="LineNr"> 59 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L60" class="LineNr"> 60 </span> <span class="subxS1Comment"># . if (eax == false) goto run-main</span> <span id="L61" class="LineNr"> 61 </span> 3d/compare-eax-and 0/imm32/false -<span id="L62" class="LineNr"> 62 </span> 74/jump-if-equal $run-main/disp8 +<span id="L62" class="LineNr"> 62 </span> 74/jump-if-= $run-main/disp8 <span id="L63" class="LineNr"> 63 </span> <span class="subxComment"># run-tests()</span> <span id="L64" class="LineNr"> 64 </span> e8/call run-tests/disp32 <span id="L65" class="LineNr"> 65 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span> @@ -285,7 +285,7 @@ if ('onhashchange' in window) { <span id="L224" class="LineNr">224 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L225" class="LineNr">225 </span> <span class="subxS1Comment"># . if (eax == false)</span> <span id="L226" class="LineNr">226 </span> 3d/compare-eax-and 0/imm32/false -<span id="L227" class="LineNr">227 </span> 75/jump-if-not-equal $get-num:<a href='../mu-init-test.subx.html#L7'>main</a>/disp8 +<span id="L227" class="LineNr">227 </span> 75/jump-if-!= $get-num:<a href='../mu-init-test.subx.html#L7'>main</a>/disp8 <span id="L228" class="LineNr">228 </span> <span class="subxS1Comment"># . expected(ed, err, "integer")</span> <span id="L229" class="LineNr">229 </span> <span class="subxS2Comment"># . . push args</span> <span id="L230" class="LineNr">230 </span> 68/push <span class="Constant">"integer"</span>/imm32 @@ -316,7 +316,7 @@ if ('onhashchange' in window) { <span id="L255" class="LineNr">255 </span><span class="Constant">$get-num:loop</span>: <span id="L256" class="LineNr">256 </span> <span class="subxComment"># if (out->write >= out->length) error</span> <span id="L257" class="LineNr">257 </span> 39/compare 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edx with ecx</span> -<span id="L258" class="LineNr">258 </span> 7d/jump-if-lesser $get-num:stage2/disp8 +<span id="L258" class="LineNr">258 </span> 7d/jump-if-< $get-num:stage2/disp8 <span id="L259" class="LineNr">259 </span> <span class="subxS1Comment"># . error(ed, err, msg) # TODO: show full number</span> <span id="L260" class="LineNr">260 </span> <span class="subxS2Comment"># . . push args</span> <span id="L261" class="LineNr">261 </span> 68/push <span class="Constant">"get-num: too many digits in number"</span>/imm32 @@ -604,10 +604,10 @@ if ('onhashchange' in window) { <span id="L543" class="LineNr">543 </span> b8/copy-to-eax 0/imm32 <span id="L544" class="LineNr">544 </span> <span class="subxComment"># if (c < '0') return false</span> <span id="L545" class="LineNr">545 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 0x30/imm32 <span class="subxComment"># compare *(ebp+8)</span> -<span id="L546" class="LineNr">546 </span> 7c/jump-if-lesser $is-digit?:end/disp8 +<span id="L546" class="LineNr">546 </span> 7c/jump-if-< $is-digit?:end/disp8 <span id="L547" class="LineNr">547 </span> <span class="subxComment"># if (c > '9') return false</span> <span id="L548" class="LineNr">548 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 0x39/imm32 <span class="subxComment"># compare *(ebp+8)</span> -<span id="L549" class="LineNr">549 </span> 7f/jump-if-greater $is-digit?:end/disp8 +<span id="L549" class="LineNr">549 </span> 7f/jump-if-> $is-digit?:end/disp8 <span id="L550" class="LineNr">550 </span> <span class="subxComment"># otherwise return true</span> <span id="L551" class="LineNr">551 </span> b8/copy-to-eax 1/imm32 <span id="L552" class="LineNr">552 </span><span class="Constant">$is-digit?:end</span>: diff --git a/html/apps/crenshaw2-1b.subx.html b/html/apps/crenshaw2-1b.subx.html index 4327640b..ae74e982 100644 --- a/html/apps/crenshaw2-1b.subx.html +++ b/html/apps/crenshaw2-1b.subx.html @@ -108,7 +108,7 @@ if ('onhashchange' in window) { <span id="L47" class="LineNr"> 47 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run_tests()</span> <span id="L48" class="LineNr"> 48 </span> <span class="subxComment"># if (argc <= 1) goto run-main</span> <span id="L49" class="LineNr"> 49 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/disp8 1/imm32 <span class="subxComment"># compare *ebp</span> -<span id="L50" class="LineNr"> 50 </span> 7e/jump-if-lesser-or-equal $run-main/disp8 +<span id="L50" class="LineNr"> 50 </span> 7e/jump-if-<= $run-main/disp8 <span id="L51" class="LineNr"> 51 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto run-main</span> <span id="L52" class="LineNr"> 52 </span> <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], "test")</span> <span id="L53" class="LineNr"> 53 </span> <span class="subxS2Comment"># . . push args</span> @@ -120,7 +120,7 @@ if ('onhashchange' in window) { <span id="L59" class="LineNr"> 59 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L60" class="LineNr"> 60 </span> <span class="subxS1Comment"># . if (eax == false) goto run-main</span> <span id="L61" class="LineNr"> 61 </span> 3d/compare-eax-and 0/imm32/false -<span id="L62" class="LineNr"> 62 </span> 74/jump-if-equal $run-main/disp8 +<span id="L62" class="LineNr"> 62 </span> 74/jump-if-= $run-main/disp8 <span id="L63" class="LineNr"> 63 </span> <span class="subxComment"># run-tests()</span> <span id="L64" class="LineNr"> 64 </span> e8/call run-tests/disp32 <span id="L65" class="LineNr"> 65 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span> @@ -290,7 +290,7 @@ if ('onhashchange' in window) { <span id="L229" class="LineNr">229 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L230" class="LineNr">230 </span> <span class="subxS1Comment"># . if (eax == false)</span> <span id="L231" class="LineNr">231 </span> 3d/compare-eax-and 0/imm32/false -<span id="L232" class="LineNr">232 </span> 75/jump-if-not-equal $get-num:<a href='../mu-init-test.subx.html#L7'>main</a>/disp8 +<span id="L232" class="LineNr">232 </span> 75/jump-if-!= $get-num:<a href='../mu-init-test.subx.html#L7'>main</a>/disp8 <span id="L233" class="LineNr">233 </span> <span class="subxS1Comment"># . expected(ed, err, "integer")</span> <span id="L234" class="LineNr">234 </span> <span class="subxS2Comment"># . . push args</span> <span id="L235" class="LineNr">235 </span> 68/push <span class="Constant">"integer"</span>/imm32 @@ -321,7 +321,7 @@ if ('onhashchange' in window) { <span id="L260" class="LineNr">260 </span><span class="Constant">$get-num:loop</span>: <span id="L261" class="LineNr">261 </span> <span class="subxComment"># if (out->write >= out->length) error</span> <span id="L262" class="LineNr">262 </span> 39/compare 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edx with ecx</span> -<span id="L263" class="LineNr">263 </span> 7d/jump-if-lesser $get-num:loop-stage2/disp8 +<span id="L263" class="LineNr">263 </span> 7d/jump-if-< $get-num:loop-stage2/disp8 <span id="L264" class="LineNr">264 </span> <span class="subxS1Comment"># . error(ed, err, msg) # TODO: show full number</span> <span id="L265" class="LineNr">265 </span> <span class="subxS2Comment"># . . push args</span> <span id="L266" class="LineNr">266 </span> 68/push <span class="Constant">"get-num: too many digits in number"</span>/imm32 @@ -355,7 +355,7 @@ if ('onhashchange' in window) { <span id="L294" class="LineNr">294 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L295" class="LineNr">295 </span> <span class="subxS1Comment"># . if (eax != false) loop</span> <span id="L296" class="LineNr">296 </span> 3d/compare-eax-and 0/imm32/false -<span id="L297" class="LineNr">297 </span> 0f 85/jump-if-not-equal $get-num:<span class="Constant">loop</span>/disp32 +<span id="L297" class="LineNr">297 </span> 0f 85/jump-if-!= $get-num:<span class="Constant">loop</span>/disp32 <span id="L298" class="LineNr">298 </span><span class="Constant">$get-num:loop-end</span>: <span id="L299" class="LineNr">299 </span> <span class="subxComment"># persist necessary variables from registers</span> <span id="L300" class="LineNr">300 </span> 89/copy 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy ecx to *edi</span> @@ -798,10 +798,10 @@ if ('onhashchange' in window) { <span id="L737" class="LineNr">737 </span> b8/copy-to-eax 0/imm32 <span id="L738" class="LineNr">738 </span> <span class="subxComment"># if (c < '0') return false</span> <span id="L739" class="LineNr">739 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 0x30/imm32 <span class="subxComment"># compare *(ebp+8)</span> -<span id="L740" class="LineNr">740 </span> 7c/jump-if-lesser $is-digit?:end/disp8 +<span id="L740" class="LineNr">740 </span> 7c/jump-if-< $is-digit?:end/disp8 <span id="L741" class="LineNr">741 </span> <span class="subxComment"># if (c > '9') return false</span> <span id="L742" class="LineNr">742 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 0x39/imm32 <span class="subxComment"># compare *(ebp+8)</span> -<span id="L743" class="LineNr">743 </span> 7f/jump-if-greater $is-digit?:end/disp8 +<span id="L743" class="LineNr">743 </span> 7f/jump-if-> $is-digit?:end/disp8 <span id="L744" class="LineNr">744 </span> <span class="subxComment"># otherwise return true</span> <span id="L745" class="LineNr">745 </span> b8/copy-to-eax 1/imm32 <span id="L746" class="LineNr">746 </span><span class="Constant">$is-digit?:end</span>: diff --git a/html/apps/dquotes.subx.html b/html/apps/dquotes.subx.html index 03753533..367f650e 100644 --- a/html/apps/dquotes.subx.html +++ b/html/apps/dquotes.subx.html @@ -99,7 +99,7 @@ if ('onhashchange' in window) { <span id="L36" class="LineNr"> 36 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run-tests()</span> <span id="L37" class="LineNr"> 37 </span> <span class="subxComment"># if (argc <= 1) goto interactive</span> <span id="L38" class="LineNr"> 38 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/disp8 1/imm32 <span class="subxComment"># compare *ebp</span> -<span id="L39" class="LineNr"> 39 </span> 7e/jump-if-lesser-or-equal $subx-dquotes-main:interactive/disp8 +<span id="L39" class="LineNr"> 39 </span> 7e/jump-if-<= $subx-dquotes-main:interactive/disp8 <span id="L40" class="LineNr"> 40 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto interactive</span> <span id="L41" class="LineNr"> 41 </span> <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], "test")</span> <span id="L42" class="LineNr"> 42 </span> <span class="subxS2Comment"># . . push args</span> @@ -111,7 +111,7 @@ if ('onhashchange' in window) { <span id="L48" class="LineNr"> 48 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L49" class="LineNr"> 49 </span> <span class="subxS1Comment"># . if (eax == false) goto interactive</span> <span id="L50" class="LineNr"> 50 </span> 3d/compare-eax-and 0/imm32/false -<span id="L51" class="LineNr"> 51 </span> 74/jump-if-equal $subx-dquotes-main:interactive/disp8 +<span id="L51" class="LineNr"> 51 </span> 74/jump-if-= $subx-dquotes-main:interactive/disp8 <span id="L52" class="LineNr"> 52 </span> <span class="subxComment"># run-tests()</span> <span id="L53" class="LineNr"> 53 </span> e8/call run-tests/disp32 <span id="L54" class="LineNr"> 54 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span> @@ -237,7 +237,7 @@ if ('onhashchange' in window) { <span id="L174" class="LineNr"> 174 </span><span class="Constant">$subx-dquotes:check0</span>: <span id="L175" class="LineNr"> 175 </span> <span class="subxComment"># if (line->write == 0) break</span> <span id="L176" class="LineNr"> 176 </span> 81 7/subop/compare 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare *ecx</span> -<span id="L177" class="LineNr"> 177 </span> 0f 84/jump-if-equal $subx-dquotes:<span class="Constant">break</span>/disp32 +<span id="L177" class="LineNr"> 177 </span> 0f 84/jump-if-= $subx-dquotes:<span class="Constant">break</span>/disp32 <span id="L178" class="LineNr"> 178 </span><span class="Constant">$subx-dquotes:word-loop</span>: <span id="L179" class="LineNr"> 179 </span> <span class="subxComment"># next-word-or-string(line, word-slice)</span> <span id="L180" class="LineNr"> 180 </span> <span class="subxS2Comment"># . . push args</span> @@ -258,7 +258,7 @@ if ('onhashchange' in window) { <span id="L195" class="LineNr"> 195 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L196" class="LineNr"> 196 </span> <span class="subxS1Comment"># . if (eax != false) break</span> <span id="L197" class="LineNr"> 197 </span> 3d/compare-eax-and 0/imm32/false -<span id="L198" class="LineNr"> 198 </span> 0f 85/jump-if-not-equal $subx-dquotes:next-line/disp32 +<span id="L198" class="LineNr"> 198 </span> 0f 85/jump-if-!= $subx-dquotes:next-line/disp32 <span id="L199" class="LineNr"> 199 </span><span class="Constant">$subx-dquotes:check-for-comment</span>: <span id="L200" class="LineNr"> 200 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, "#")) continue</span> <span id="L201" class="LineNr"> 201 </span> <span class="subxS1Comment"># . var start/esi : (addr byte) = word-slice->start</span> @@ -268,11 +268,11 @@ if ('onhashchange' in window) { <span id="L205" class="LineNr"> 205 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to AL</span> <span id="L206" class="LineNr"> 206 </span> <span class="subxS1Comment"># . if (c == '#') continue</span> <span id="L207" class="LineNr"> 207 </span> 3d/compare-eax-and 0x23/imm32/hash -<span id="L208" class="LineNr"> 208 </span> 74/jump-if-equal $subx-dquotes:word-loop/disp8 +<span id="L208" class="LineNr"> 208 </span> 74/jump-if-= $subx-dquotes:word-loop/disp8 <span id="L209" class="LineNr"> 209 </span><span class="Constant">$subx-dquotes:check-for-string-literal</span>: <span id="L210" class="LineNr"> 210 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, '"')) continue</span> <span id="L211" class="LineNr"> 211 </span> 3d/compare-eax-and 0x22/imm32/dquote -<span id="L212" class="LineNr"> 212 </span> 75/jump-if-not-equal $subx-dquotes:regular-word/disp8 +<span id="L212" class="LineNr"> 212 </span> 75/jump-if-!= $subx-dquotes:regular-word/disp8 <span id="L213" class="LineNr"> 213 </span><span class="Constant">$subx-dquotes:string-literal</span>: <span id="L214" class="LineNr"> 214 </span> <span class="subxComment"># process-string-literal(word-slice, out, new-data-segment)</span> <span id="L215" class="LineNr"> 215 </span> <span class="subxS2Comment"># . . push args</span> @@ -931,25 +931,25 @@ if ('onhashchange' in window) { <span id="L925" class="LineNr"> 925 </span><span class="Constant">$emit-string-literal-data:loop</span>: <span id="L926" class="LineNr"> 926 </span> <span class="subxComment"># if (curr >= max) break</span> <span id="L927" class="LineNr"> 927 </span> 39/compare 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edx with esi</span> -<span id="L928" class="LineNr"> 928 </span> 0f 83/jump-if-greater-or-equal-unsigned $emit-string-literal-data:end/disp32 +<span id="L928" class="LineNr"> 928 </span> 0f 83/jump-if-addr>= $emit-string-literal-data:end/disp32 <span id="L929" class="LineNr"> 929 </span> <span class="subxComment"># CL = *curr</span> <span id="L930" class="LineNr"> 930 </span> 8a/copy-byte 0/mod/indirect 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/CL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edx to CL</span> <span id="L931" class="LineNr"> 931 </span> <span class="subxComment"># if (c == '"') break</span> <span id="L932" class="LineNr"> 932 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x22/imm32/dquote <span class="subxComment"># compare ecx</span> -<span id="L933" class="LineNr"> 933 </span> 0f 84/jump-if-equal $emit-string-literal-data:end/disp32 +<span id="L933" class="LineNr"> 933 </span> 0f 84/jump-if-= $emit-string-literal-data:end/disp32 <span id="L934" class="LineNr"> 934 </span> <span class="subxComment"># if (c != '\') goto emit</span> <span id="L935" class="LineNr"> 935 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x5c/imm32/backslash <span class="subxComment"># compare ecx</span> -<span id="L936" class="LineNr"> 936 </span> 75/jump-if-not-equal $emit-string-literal-data:<a href='../079emit.subx.html#L10'>emit</a>/disp8 +<span id="L936" class="LineNr"> 936 </span> 75/jump-if-!= $emit-string-literal-data:<a href='../079emit.subx.html#L10'>emit</a>/disp8 <span id="L937" class="LineNr"> 937 </span> <span class="subxComment"># ++curr</span> <span id="L938" class="LineNr"> 938 </span> 42/increment-edx <span id="L939" class="LineNr"> 939 </span> <span class="subxComment"># if (curr >= max) break</span> <span id="L940" class="LineNr"> 940 </span> 39/compare 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edx with esi</span> -<span id="L941" class="LineNr"> 941 </span> 0f 83/jump-if-greater-or-equal-unsigned $emit-string-literal-data:end/disp32 +<span id="L941" class="LineNr"> 941 </span> 0f 83/jump-if-addr>= $emit-string-literal-data:end/disp32 <span id="L942" class="LineNr"> 942 </span> <span class="subxComment"># c = *curr</span> <span id="L943" class="LineNr"> 943 </span> 8a/copy-byte 0/mod/indirect 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/CL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edx to CL</span> <span id="L944" class="LineNr"> 944 </span> <span class="subxComment"># if (c == 'n') c = newline</span> <span id="L945" class="LineNr"> 945 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x6e/imm32/n <span class="subxComment"># compare ecx</span> -<span id="L946" class="LineNr"> 946 </span> 75/jump-if-not-equal $emit-string-literal-data:<a href='../079emit.subx.html#L10'>emit</a>/disp8 +<span id="L946" class="LineNr"> 946 </span> 75/jump-if-!= $emit-string-literal-data:<a href='../079emit.subx.html#L10'>emit</a>/disp8 <span id="L947" class="LineNr"> 947 </span> b9/copy-to-ecx 0x0a/imm32/newline <span id="L948" class="LineNr"> 948 </span><span class="Constant">$emit-string-literal-data:<a href='../079emit.subx.html#L10'>emit</a></span>: <span id="L949" class="LineNr"> 949 </span> <span class="subxComment"># append-byte-hex(out, CL)</span> @@ -970,7 +970,7 @@ if ('onhashchange' in window) { <span id="L964" class="LineNr"> 964 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L965" class="LineNr"> 965 </span> <span class="subxS1Comment"># . if (eax == false) goto char-done</span> <span id="L966" class="LineNr"> 966 </span> 3d/compare-eax-and 0/imm32/false -<span id="L967" class="LineNr"> 967 </span> 74/jump-if-equal $emit-string-literal-data:char-done/disp8 +<span id="L967" class="LineNr"> 967 </span> 74/jump-if-= $emit-string-literal-data:char-done/disp8 <span id="L968" class="LineNr"> 968 </span> <span class="subxS1Comment"># . write(out, "/")</span> <span id="L969" class="LineNr"> 969 </span> <span class="subxS2Comment"># . . push args</span> <span id="L970" class="LineNr"> 970 </span> 68/push <span class="SpecialChar"><a href='../051test.subx.html#L101'>Slash</a></span>/imm32 @@ -1002,7 +1002,7 @@ if ('onhashchange' in window) { <span id="L996" class="LineNr"> 996 </span> 43/increment-ebx <span id="L997" class="LineNr"> 997 </span> <span class="subxComment"># if (idx < 0x40) continue</span> <span id="L998" class="LineNr"> 998 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x40/imm32 <span class="subxComment"># compare ebx</span> -<span id="L999" class="LineNr"> 999 </span> 7c/jump-if-lesser $emit-string-literal-data:next-char/disp8 +<span id="L999" class="LineNr"> 999 </span> 7c/jump-if-< $emit-string-literal-data:next-char/disp8 <span id="L1000" class="LineNr">1000 </span> <span class="subxComment"># idx = 0</span> <span id="L1001" class="LineNr">1001 </span> 31/xor 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear ebx</span> <span id="L1002" class="LineNr">1002 </span> <span class="subxComment"># write(out, "\n")</span> @@ -1035,22 +1035,22 @@ if ('onhashchange' in window) { <span id="L1029" class="LineNr">1029 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+8) to eax</span> <span id="L1030" class="LineNr">1030 </span> <span class="subxComment"># if (c < '0') return false</span> <span id="L1031" class="LineNr">1031 </span> 3d/compare-eax-with 0x30/imm32/0 -<span id="L1032" class="LineNr">1032 </span> 7c/jump-if-lesser $is-alphanumeric?:false/disp8 +<span id="L1032" class="LineNr">1032 </span> 7c/jump-if-< $is-alphanumeric?:false/disp8 <span id="L1033" class="LineNr">1033 </span> <span class="subxComment"># if (c <= '9') return true</span> <span id="L1034" class="LineNr">1034 </span> 3d/compare-eax-with 0x39/imm32/9 -<span id="L1035" class="LineNr">1035 </span> 7e/jump-if-lesser-or-equal $is-alphanumeric?:true/disp8 +<span id="L1035" class="LineNr">1035 </span> 7e/jump-if-<= $is-alphanumeric?:true/disp8 <span id="L1036" class="LineNr">1036 </span> <span class="subxComment"># if (c < 'A') return false</span> <span id="L1037" class="LineNr">1037 </span> 3d/compare-eax-with 0x41/imm32/A -<span id="L1038" class="LineNr">1038 </span> 7c/jump-if-lesser $is-alphanumeric?:false/disp8 +<span id="L1038" class="LineNr">1038 </span> 7c/jump-if-< $is-alphanumeric?:false/disp8 <span id="L1039" class="LineNr">1039 </span> <span class="subxComment"># if (c <= 'Z') return true</span> <span id="L1040" class="LineNr">1040 </span> 3d/compare-eax-with 0x5a/imm32/Z -<span id="L1041" class="LineNr">1041 </span> 7e/jump-if-lesser-or-equal $is-alphanumeric?:true/disp8 +<span id="L1041" class="LineNr">1041 </span> 7e/jump-if-<= $is-alphanumeric?:true/disp8 <span id="L1042" class="LineNr">1042 </span> <span class="subxComment"># if (c < 'a') return false</span> <span id="L1043" class="LineNr">1043 </span> 3d/compare-eax-with 0x61/imm32/a -<span id="L1044" class="LineNr">1044 </span> 7c/jump-if-lesser $is-alphanumeric?:false/disp8 +<span id="L1044" class="LineNr">1044 </span> 7c/jump-if-< $is-alphanumeric?:false/disp8 <span id="L1045" class="LineNr">1045 </span> <span class="subxComment"># if (c <= 'z') return true</span> <span id="L1046" class="LineNr">1046 </span> 3d/compare-eax-with 0x7a/imm32/z -<span id="L1047" class="LineNr">1047 </span> 7e/jump-if-lesser-or-equal $is-alphanumeric?:true/disp8 +<span id="L1047" class="LineNr">1047 </span> 7e/jump-if-<= $is-alphanumeric?:true/disp8 <span id="L1048" class="LineNr">1048 </span> <span class="subxComment"># return false</span> <span id="L1049" class="LineNr">1049 </span><span class="Constant">$is-alphanumeric?:false</span>: <span id="L1050" class="LineNr">1050 </span> b8/copy-to-eax 0/imm32/false @@ -1301,7 +1301,7 @@ if ('onhashchange' in window) { <span id="L1420" class="LineNr">1420 </span> <span class="subxH1Comment"># - if (*curr == '"') curr = skip-string-in-slice(curr, end)</span> <span id="L1421" class="LineNr">1421 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span> <span id="L1422" class="LineNr">1422 </span> 3d/compare-eax-and 0x22/imm32/dquote -<span id="L1423" class="LineNr">1423 </span> 75/jump-if-not-equal $emit-metadata:skip-datum-loop/disp8 +<span id="L1423" class="LineNr">1423 </span> 75/jump-if-!= $emit-metadata:skip-datum-loop/disp8 <span id="L1424" class="LineNr">1424 </span><span class="Constant">$emit-metadata:skip-string-literal</span>: <span id="L1425" class="LineNr">1425 </span> <span class="subxS1Comment"># . eax = skip-string-in-slice(curr, end)</span> <span id="L1426" class="LineNr">1426 </span> <span class="subxS2Comment"># . . push args</span> @@ -1318,11 +1318,11 @@ if ('onhashchange' in window) { <span id="L1437" class="LineNr">1437 </span> <span class="subxH1Comment"># - otherwise scan for '/'</span> <span id="L1438" class="LineNr">1438 </span> <span class="subxComment"># if (curr == end) return</span> <span id="L1439" class="LineNr">1439 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx and edx</span> -<span id="L1440" class="LineNr">1440 </span> 74/jump-if-equal $emit-metadata:end/disp8 +<span id="L1440" class="LineNr">1440 </span> 74/jump-if-= $emit-metadata:end/disp8 <span id="L1441" class="LineNr">1441 </span> <span class="subxComment"># if (*curr == '/') break</span> <span id="L1442" class="LineNr">1442 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span> <span id="L1443" class="LineNr">1443 </span> 3d/compare-eax-and 0x2f/imm32/slash -<span id="L1444" class="LineNr">1444 </span> 74/jump-if-equal $emit-metadata:<a href='../079emit.subx.html#L10'>emit</a>/disp8 +<span id="L1444" class="LineNr">1444 </span> 74/jump-if-= $emit-metadata:<a href='../079emit.subx.html#L10'>emit</a>/disp8 <span id="L1445" class="LineNr">1445 </span> <span class="subxComment"># ++curr</span> <span id="L1446" class="LineNr">1446 </span> 41/increment-ecx <span id="L1447" class="LineNr">1447 </span> eb/jump $emit-metadata:skip-datum-loop/disp8 @@ -1655,17 +1655,17 @@ if ('onhashchange' in window) { <span id="L1799" class="LineNr">1799 </span><span class="Constant">$string-length-at-start-of-slice:loop</span>: <span id="L1800" class="LineNr">1800 </span> <span class="subxComment"># if (curr >= end) return length</span> <span id="L1801" class="LineNr">1801 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span> -<span id="L1802" class="LineNr">1802 </span> 73/jump-if-greater-unsigned-or-equal $string-length-at-start-of-slice:end/disp8 +<span id="L1802" class="LineNr">1802 </span> 73/jump-if-addr>= $string-length-at-start-of-slice:end/disp8 <span id="L1803" class="LineNr">1803 </span> <span class="subxComment"># c = *curr</span> <span id="L1804" class="LineNr">1804 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to BL</span> <span id="L1805" class="LineNr">1805 </span><span class="Constant">$string-length-at-start-of-slice:dquote</span>: <span id="L1806" class="LineNr">1806 </span> <span class="subxComment"># if (c == '"') break</span> <span id="L1807" class="LineNr">1807 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x22/imm32/dquote <span class="subxComment"># compare ebx</span> -<span id="L1808" class="LineNr">1808 </span> 74/jump-if-equal $string-length-at-start-of-slice:end/disp8 +<span id="L1808" class="LineNr">1808 </span> 74/jump-if-= $string-length-at-start-of-slice:end/disp8 <span id="L1809" class="LineNr">1809 </span><span class="Constant">$string-length-at-start-of-slice:check-for-escape</span>: <span id="L1810" class="LineNr">1810 </span> <span class="subxComment"># if (c == '\') escape next char</span> <span id="L1811" class="LineNr">1811 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x5c/imm32/backslash <span class="subxComment"># compare ebx</span> -<span id="L1812" class="LineNr">1812 </span> 75/jump-if-not-equal $string-length-at-start-of-slice:continue/disp8 +<span id="L1812" class="LineNr">1812 </span> 75/jump-if-!= $string-length-at-start-of-slice:continue/disp8 <span id="L1813" class="LineNr">1813 </span><span class="Constant">$string-length-at-start-of-slice:escape</span>: <span id="L1814" class="LineNr">1814 </span> <span class="subxComment"># increment curr but not result</span> <span id="L1815" class="LineNr">1815 </span> 41/increment-ecx diff --git a/html/apps/ex10.subx.html b/html/apps/ex10.subx.html index 2671b311..79fbfc5c 100644 --- a/html/apps/ex10.subx.html +++ b/html/apps/ex10.subx.html @@ -104,10 +104,10 @@ if ('onhashchange' in window) { <span id="L45" class="LineNr">45 </span> 8a/copy-byte 0/mod/indirect 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edx to BL</span> <span id="L46" class="LineNr">46 </span> <span class="subxComment"># if (c1 == 0) break</span> <span id="L47" class="LineNr">47 </span> 3d/compare-eax-and 0/imm32 -<span id="L48" class="LineNr">48 </span> 74/jump-if-equal $argv-equal:<span class="Constant">break</span>/disp8 +<span id="L48" class="LineNr">48 </span> 74/jump-if-= $argv-equal:<span class="Constant">break</span>/disp8 <span id="L49" class="LineNr">49 </span> <span class="subxComment"># if (c1 != c2) return false</span> <span id="L50" class="LineNr">50 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and ebx</span> -<span id="L51" class="LineNr">51 </span> 75/jump-if-not-equal $argv-equal:false/disp8 +<span id="L51" class="LineNr">51 </span> 75/jump-if-!= $argv-equal:false/disp8 <span id="L52" class="LineNr">52 </span> <span class="subxComment"># ++s1, ++s2</span> <span id="L53" class="LineNr">53 </span> 41/increment-ecx <span id="L54" class="LineNr">54 </span> 42/increment-edx @@ -116,7 +116,7 @@ if ('onhashchange' in window) { <span id="L57" class="LineNr">57 </span><span class="Constant">$argv-equal:break</span>: <span id="L58" class="LineNr">58 </span> <span class="subxComment"># if (c2 == 0) return true</span> <span id="L59" class="LineNr">59 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare ebx</span> -<span id="L60" class="LineNr">60 </span> 75/jump-if-not-equal $argv-equal:false/disp8 +<span id="L60" class="LineNr">60 </span> 75/jump-if-!= $argv-equal:false/disp8 <span id="L61" class="LineNr">61 </span><span class="Constant">$argv-equal:success</span>: <span id="L62" class="LineNr">62 </span> b8/copy-to-eax 1/imm32 <span id="L63" class="LineNr">63 </span> c3/return diff --git a/html/apps/ex11.subx.html b/html/apps/ex11.subx.html index 84519e0e..d9c64f2a 100644 --- a/html/apps/ex11.subx.html +++ b/html/apps/ex11.subx.html @@ -135,17 +135,17 @@ if ('onhashchange' in window) { <span id="L73" class="LineNr"> 73 </span><span class="Constant">$kernel-string-equal?:loop</span>: <span id="L74" class="LineNr"> 74 </span> <span class="subxComment"># if (i >= n) break</span> <span id="L75" class="LineNr"> 75 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span> -<span id="L76" class="LineNr"> 76 </span> 7d/jump-if-greater-or-equal $kernel-string-equal?:<span class="Constant">break</span>/disp8 +<span id="L76" class="LineNr"> 76 </span> 7d/jump-if->= $kernel-string-equal?:<span class="Constant">break</span>/disp8 <span id="L77" class="LineNr"> 77 </span> <span class="subxComment"># c1 = *s1</span> <span id="L78" class="LineNr"> 78 </span> 8a/copy-byte 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edi to AL</span> <span id="L79" class="LineNr"> 79 </span> <span class="subxComment"># c2 = *s2</span> <span id="L80" class="LineNr"> 80 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to BL</span> <span id="L81" class="LineNr"> 81 </span> <span class="subxComment"># if (c1 == 0) return false</span> <span id="L82" class="LineNr"> 82 </span> 3d/compare-eax-and 0/imm32 -<span id="L83" class="LineNr"> 83 </span> 74/jump-if-equal $kernel-string-equal?:false/disp8 +<span id="L83" class="LineNr"> 83 </span> 74/jump-if-= $kernel-string-equal?:false/disp8 <span id="L84" class="LineNr"> 84 </span> <span class="subxComment"># if (c1 != c2) return false</span> <span id="L85" class="LineNr"> 85 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and ebx</span> -<span id="L86" class="LineNr"> 86 </span> 75/jump-if-not-equal $kernel-string-equal?:false/disp8 +<span id="L86" class="LineNr"> 86 </span> 75/jump-if-!= $kernel-string-equal?:false/disp8 <span id="L87" class="LineNr"> 87 </span> <span class="subxComment"># ++i</span> <span id="L88" class="LineNr"> 88 </span> 41/increment-ecx <span id="L89" class="LineNr"> 89 </span> <span class="subxComment"># ++s1</span> @@ -157,7 +157,7 @@ if ('onhashchange' in window) { <span id="L95" class="LineNr"> 95 </span> <span class="subxComment"># return *s1 == 0</span> <span id="L96" class="LineNr"> 96 </span> 8a/copy-byte 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edi to AL</span> <span id="L97" class="LineNr"> 97 </span> 3d/compare-eax-and 0/imm32 -<span id="L98" class="LineNr"> 98 </span> 75/jump-if-not-equal $kernel-string-equal?:false/disp8 +<span id="L98" class="LineNr"> 98 </span> 75/jump-if-!= $kernel-string-equal?:false/disp8 <span id="L99" class="LineNr"> 99 </span><span class="Constant">$kernel-string-equal?:true</span>: <span id="L100" class="LineNr">100 </span> b8/copy-to-eax 1/imm32 <span id="L101" class="LineNr">101 </span> eb/jump $kernel-string-equal?:end/disp8 diff --git a/html/apps/ex3.subx.html b/html/apps/ex3.subx.html index e5eece81..31ff11a1 100644 --- a/html/apps/ex3.subx.html +++ b/html/apps/ex3.subx.html @@ -79,7 +79,7 @@ if ('onhashchange' in window) { <span id="L21" class="LineNr">21 </span><span class="Constant">$loop</span>: <span id="L22" class="LineNr">22 </span> <span class="subxComment"># if (counter > 10) break</span> <span id="L23" class="LineNr">23 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xa/imm32 <span class="subxComment"># compare ecx</span> -<span id="L24" class="LineNr">24 </span> 7f/jump-if-greater $exit/disp8 +<span id="L24" class="LineNr">24 </span> 7f/jump-if-> $exit/disp8 <span id="L25" class="LineNr">25 </span> <span class="subxComment"># result += counter</span> <span id="L26" class="LineNr">26 </span> 01/add 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># add ecx to ebx</span> <span id="L27" class="LineNr">27 </span> <span class="subxComment"># ++counter</span> diff --git a/html/apps/ex8.subx.html b/html/apps/ex8.subx.html index 04c0e1cb..df27c764 100644 --- a/html/apps/ex8.subx.html +++ b/html/apps/ex8.subx.html @@ -103,7 +103,7 @@ if ('onhashchange' in window) { <span id="L44" class="LineNr">44 </span> 8a/copy-byte 0/mod/* 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/CL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edx to CL</span> <span id="L45" class="LineNr">45 </span> <span class="subxComment"># if (c == '\0') break</span> <span id="L46" class="LineNr">46 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare ecx</span> -<span id="L47" class="LineNr">47 </span> 74/jump-if-equal $ascii-length:end/disp8 +<span id="L47" class="LineNr">47 </span> 74/jump-if-= $ascii-length:end/disp8 <span id="L48" class="LineNr">48 </span> <span class="subxComment"># ++s</span> <span id="L49" class="LineNr">49 </span> 42/increment-edx <span id="L50" class="LineNr">50 </span> <span class="subxComment"># ++result</span> diff --git a/html/apps/factorial.subx.html b/html/apps/factorial.subx.html index 026f22e2..5aa74fc5 100644 --- a/html/apps/factorial.subx.html +++ b/html/apps/factorial.subx.html @@ -96,7 +96,7 @@ if ('onhashchange' in window) { <span id="L35" class="LineNr"> 35 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run_tests()</span> <span id="L36" class="LineNr"> 36 </span> <span class="subxComment"># if (argc <= 1) goto run-main</span> <span id="L37" class="LineNr"> 37 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/disp8 1/imm32 <span class="subxComment"># compare *ebp</span> -<span id="L38" class="LineNr"> 38 </span> 7e/jump-if-lesser-or-equal $run-main/disp8 +<span id="L38" class="LineNr"> 38 </span> 7e/jump-if-<= $run-main/disp8 <span id="L39" class="LineNr"> 39 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto run-main</span> <span id="L40" class="LineNr"> 40 </span> <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], "test")</span> <span id="L41" class="LineNr"> 41 </span> <span class="subxS2Comment"># . . push args</span> @@ -108,7 +108,7 @@ if ('onhashchange' in window) { <span id="L47" class="LineNr"> 47 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L48" class="LineNr"> 48 </span> <span class="subxS1Comment"># . if (eax == false) goto run-main</span> <span id="L49" class="LineNr"> 49 </span> 3d/compare-eax-and 0/imm32/false -<span id="L50" class="LineNr"> 50 </span> 74/jump-if-equal $run-main/disp8 +<span id="L50" class="LineNr"> 50 </span> 74/jump-if-= $run-main/disp8 <span id="L51" class="LineNr"> 51 </span> <span class="subxComment"># run-tests()</span> <span id="L52" class="LineNr"> 52 </span> e8/call run-tests/disp32 <span id="L53" class="LineNr"> 53 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span> diff --git a/html/apps/factorial2.subx.html b/html/apps/factorial2.subx.html index 4d758401..fa0eb720 100644 --- a/html/apps/factorial2.subx.html +++ b/html/apps/factorial2.subx.html @@ -95,7 +95,7 @@ if ('onhashchange' in window) { <span id="L35" class="LineNr"> 35 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run_tests()</span> <span id="L36" class="LineNr"> 36 </span> <span class="subxComment"># if (argc <= 1) goto run-main</span> <span id="L37" class="LineNr"> 37 </span> 81 7/subop/compare *ebp 1/imm32 -<span id="L38" class="LineNr"> 38 </span> 7e/jump-if-lesser-or-equal $run-main/disp8 +<span id="L38" class="LineNr"> 38 </span> 7e/jump-if-<= $run-main/disp8 <span id="L39" class="LineNr"> 39 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto run-main</span> <span id="L40" class="LineNr"> 40 </span> <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], "test")</span> <span id="L41" class="LineNr"> 41 </span> <span class="subxS2Comment"># . . push args</span> @@ -107,7 +107,7 @@ if ('onhashchange' in window) { <span id="L47" class="LineNr"> 47 </span> 81 0/subop/add %esp 8/imm32 <span id="L48" class="LineNr"> 48 </span> <span class="subxS1Comment"># . if (eax == false) goto run-main</span> <span id="L49" class="LineNr"> 49 </span> 3d/compare-eax-and 0/imm32/false -<span id="L50" class="LineNr"> 50 </span> 74/jump-if-equal $run-main/disp8 +<span id="L50" class="LineNr"> 50 </span> 74/jump-if-= $run-main/disp8 <span id="L51" class="LineNr"> 51 </span> <span class="subxComment"># run-tests()</span> <span id="L52" class="LineNr"> 52 </span> e8/call run-tests/disp32 <span id="L53" class="LineNr"> 53 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span> diff --git a/html/apps/factorial3.subx.html b/html/apps/factorial3.subx.html index 04ebfe81..7b7cefe3 100644 --- a/html/apps/factorial3.subx.html +++ b/html/apps/factorial3.subx.html @@ -88,12 +88,12 @@ if ('onhashchange' in window) { <span id="L29" class="LineNr">29 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run_tests()</span> <span id="L30" class="LineNr">30 </span> <span class="subxComment"># if (argc <= 1) goto run-main</span> <span id="L31" class="LineNr">31 </span> 81 7/subop/compare *ebp 1/imm32 -<span id="L32" class="LineNr">32 </span> 7e/jump-if-lesser-or-equal $run-main/disp8 +<span id="L32" class="LineNr">32 </span> 7e/jump-if-<= $run-main/disp8 <span id="L33" class="LineNr">33 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto run-main</span> <span id="L34" class="LineNr">34 </span> (<a href='../052kernel-string-equal.subx.html#L33'>kernel-string-equal?</a> *(ebp+8) <span class="Constant">"test"</span>) <span class="subxComment"># => eax</span> <span id="L35" class="LineNr">35 </span> <span class="subxS1Comment"># . if (eax == false) goto run-main</span> <span id="L36" class="LineNr">36 </span> 3d/compare-eax-and 0/imm32/false -<span id="L37" class="LineNr">37 </span> 74/jump-if-equal $run-main/disp8 +<span id="L37" class="LineNr">37 </span> 74/jump-if-= $run-main/disp8 <span id="L38" class="LineNr">38 </span> <span class="subxComment">#</span> <span id="L39" class="LineNr">39 </span> (run-tests) <span id="L40" class="LineNr">40 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span> diff --git a/html/apps/factorial4.subx.html b/html/apps/factorial4.subx.html index 143ecc2c..db3331d9 100644 --- a/html/apps/factorial4.subx.html +++ b/html/apps/factorial4.subx.html @@ -90,11 +90,11 @@ if ('onhashchange' in window) { <span id="L31" class="LineNr">31 </span> { <span id="L32" class="LineNr">32 </span> <span class="subxComment"># if (argc <= 1) break</span> <span id="L33" class="LineNr">33 </span> 81 7/subop/compare *ebp 1/imm32 -<span id="L34" class="LineNr">34 </span> 7e/jump-if-lesser-or-equal <span class="Constant">break</span>/disp8 +<span id="L34" class="LineNr">34 </span> 7e/jump-if-<= <span class="Constant">break</span>/disp8 <span id="L35" class="LineNr">35 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) break</span> <span id="L36" class="LineNr">36 </span> (<a href='../052kernel-string-equal.subx.html#L33'>kernel-string-equal?</a> *(ebp+8) <span class="Constant">"test"</span>) <span class="subxComment"># => eax</span> <span id="L37" class="LineNr">37 </span> 3d/compare-eax-and 0/imm32/false -<span id="L38" class="LineNr">38 </span> 74/jump-if-equal <span class="Constant">break</span>/disp8 +<span id="L38" class="LineNr">38 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L39" class="LineNr">39 </span> <span class="subxComment">#</span> <span id="L40" class="LineNr">40 </span> (run-tests) <span id="L41" class="LineNr">41 </span> <span class="subxComment"># eax = *Num-test-failures</span> @@ -104,7 +104,7 @@ if ('onhashchange' in window) { <span id="L45" class="LineNr">45 </span> { <span id="L46" class="LineNr">46 </span> <span class="subxComment"># if (argc > 1) break</span> <span id="L47" class="LineNr">47 </span> 81 7/subop/compare *ebp 1/imm32 -<span id="L48" class="LineNr">48 </span> 7f/jump-if-greater <span class="Constant">break</span>/disp8 +<span id="L48" class="LineNr">48 </span> 7f/jump-if-> <span class="Constant">break</span>/disp8 <span id="L49" class="LineNr">49 </span> <span class="subxComment"># eax = factorial(5)</span> <span id="L50" class="LineNr">50 </span> (<a href='factorial4.subx.html#L58'>factorial</a> 5) <span id="L51" class="LineNr">51 </span> <span class="subxComment"># syscall(exit, eax)</span> @@ -123,12 +123,12 @@ if ('onhashchange' in window) { <span id="L64" class="LineNr">64 </span> <span class="subxComment"># if (n <= 1) return 1</span> <span id="L65" class="LineNr">65 </span> 81 7/subop/compare *(ebp+8) 1/imm32 <span id="L66" class="LineNr">66 </span> { -<span id="L67" class="LineNr">67 </span> 7f/jump-if-greater <span class="Constant">break</span>/disp8 +<span id="L67" class="LineNr">67 </span> 7f/jump-if-> <span class="Constant">break</span>/disp8 <span id="L68" class="LineNr">68 </span> b8/copy-to-eax 1/imm32 <span id="L69" class="LineNr">69 </span> } <span id="L70" class="LineNr">70 </span> <span class="subxComment"># if (n > 1) return n * factorial(n-1)</span> <span id="L71" class="LineNr">71 </span> { -<span id="L72" class="LineNr">72 </span> 7e/jump-if-lesser-or-equal <span class="Constant">break</span>/disp8 +<span id="L72" class="LineNr">72 </span> 7e/jump-if-<= <span class="Constant">break</span>/disp8 <span id="L73" class="LineNr">73 </span> <span class="subxComment"># var ebx : int = n-1</span> <span id="L74" class="LineNr">74 </span> 8b/-> *(ebp+8) 3/r32/ebx <span id="L75" class="LineNr">75 </span> 4b/decrement-ebx diff --git a/html/apps/handle.subx.html b/html/apps/handle.subx.html index e9470f7e..a3489f99 100644 --- a/html/apps/handle.subx.html +++ b/html/apps/handle.subx.html @@ -132,7 +132,7 @@ if ('onhashchange' in window) { <span id="L69" class="LineNr"> 69 </span> 89/copy 1/mod/*+disp8 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy eax to *(edx+4)</span> <span id="L70" class="LineNr"> 70 </span> <span class="subxComment"># if (eax == 0) out->alloc_id = 0, return</span> <span id="L71" class="LineNr"> 71 </span> 3d/compare-eax-and 0/imm32 -<span id="L72" class="LineNr"> 72 </span> 75/jump-if-not-equal $new:continue/disp8 +<span id="L72" class="LineNr"> 72 </span> 75/jump-if-!= $new:continue/disp8 <span id="L73" class="LineNr"> 73 </span> c7 0/subop/copy 0/mod/indirect 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># copy to *edx</span> <span id="L74" class="LineNr"> 74 </span> eb/jump $new:end/disp8 <span id="L75" class="LineNr"> 75 </span><span class="Constant">$new:continue</span>: @@ -302,7 +302,7 @@ if ('onhashchange' in window) { <span id="L239" class="LineNr">239 </span> 8b/copy 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *eax to eax</span> <span id="L240" class="LineNr">240 </span> <span class="subxComment"># if (eax != handle->alloc_id) abort</span> <span id="L241" class="LineNr">241 </span> 39/compare 1/mod/*+disp8 4/rm32/sib 4/base/esp 4/index/none <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare *(esp+4) and eax</span> -<span id="L242" class="LineNr">242 </span> 75/jump-if-not-equal $lookup:abort/disp8 +<span id="L242" class="LineNr">242 </span> 75/jump-if-!= $lookup:abort/disp8 <span id="L243" class="LineNr">243 </span> <span class="subxComment"># eax = pop handle->address</span> <span id="L244" class="LineNr">244 </span> 58/pop-to-eax <span id="L245" class="LineNr">245 </span> <span class="subxComment"># discard handle->alloc_id</span> @@ -317,7 +317,7 @@ if ('onhashchange' in window) { <span id="L254" class="LineNr">254 </span><span class="CommentedCode">#? 8b/copy 1/mod/*+disp8 0/rm32/eax . . . 0/r32/eax 4/disp8 . # copy *(eax+4) to eax</span> <span id="L255" class="LineNr">255 </span><span class="CommentedCode">#? # if (ecx != *eax) abort</span> <span id="L256" class="LineNr">256 </span><span class="CommentedCode">#? 39/compare 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . . # compare *eax and ecx</span> -<span id="L257" class="LineNr">257 </span><span class="CommentedCode">#? 75/jump-if-not-equal $lookup:abort/disp8</span> +<span id="L257" class="LineNr">257 </span><span class="CommentedCode">#? 75/jump-if-!= $lookup:abort/disp8</span> <span id="L258" class="LineNr">258 </span><span class="CommentedCode">#? # add 4 to eax</span> <span id="L259" class="LineNr">259 </span><span class="CommentedCode">#? 05/add-to-eax 4/imm32</span> <span id="L260" class="LineNr">260 </span> <span class="subxH1Comment"># - }</span> diff --git a/html/apps/hex.subx.html b/html/apps/hex.subx.html index b52d4284..1ea0f352 100644 --- a/html/apps/hex.subx.html +++ b/html/apps/hex.subx.html @@ -95,7 +95,7 @@ if ('onhashchange' in window) { <span id="L34" class="LineNr"> 34 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run_tests()</span> <span id="L35" class="LineNr"> 35 </span> <span class="subxComment"># if (argc <= 1) goto interactive</span> <span id="L36" class="LineNr"> 36 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/disp8 1/imm32 <span class="subxComment"># compare *ebp</span> -<span id="L37" class="LineNr"> 37 </span> 7e/jump-if-lesser-or-equal $subx-hex-main:interactive/disp8 +<span id="L37" class="LineNr"> 37 </span> 7e/jump-if-<= $subx-hex-main:interactive/disp8 <span id="L38" class="LineNr"> 38 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto interactive</span> <span id="L39" class="LineNr"> 39 </span> <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], "test")</span> <span id="L40" class="LineNr"> 40 </span> <span class="subxS2Comment"># . . push args</span> @@ -107,7 +107,7 @@ if ('onhashchange' in window) { <span id="L46" class="LineNr"> 46 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L47" class="LineNr"> 47 </span> <span class="subxS1Comment"># . if (eax == false) goto interactive</span> <span id="L48" class="LineNr"> 48 </span> 3d/compare-eax-and 0/imm32/false -<span id="L49" class="LineNr"> 49 </span> 74/jump-if-equal $subx-hex-main:interactive/disp8 +<span id="L49" class="LineNr"> 49 </span> 74/jump-if-= $subx-hex-main:interactive/disp8 <span id="L50" class="LineNr"> 50 </span> <span class="subxComment"># run-tests()</span> <span id="L51" class="LineNr"> 51 </span> e8/call run-tests/disp32 <span id="L52" class="LineNr"> 52 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span> @@ -163,7 +163,7 @@ if ('onhashchange' in window) { <span id="L102" class="LineNr"> 102 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span> <span id="L103" class="LineNr"> 103 </span> <span class="subxComment"># if (eax == Eof) break</span> <span id="L104" class="LineNr"> 104 </span> 3d/compare-eax-and 0xffffffff/imm32/Eof -<span id="L105" class="LineNr"> 105 </span> 74/jump-if-equal $subx-hex:loop-end/disp8 +<span id="L105" class="LineNr"> 105 </span> 74/jump-if-= $subx-hex:loop-end/disp8 <span id="L106" class="LineNr"> 106 </span> <span class="subxComment"># write-byte-buffered(out, AL)</span> <span id="L107" class="LineNr"> 107 </span> <span class="subxS2Comment"># . . push args</span> <span id="L108" class="LineNr"> 108 </span> 50/push-eax @@ -223,7 +223,7 @@ if ('onhashchange' in window) { <span id="L162" class="LineNr"> 162 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span> <span id="L163" class="LineNr"> 163 </span> <span class="subxComment"># if (eax == Eof) return</span> <span id="L164" class="LineNr"> 164 </span> 3d/compare-eax-and 0xffffffff/imm32/Eof -<span id="L165" class="LineNr"> 165 </span> 74/jump-if-equal $convert-next-octet:end/disp8 +<span id="L165" class="LineNr"> 165 </span> 74/jump-if-= $convert-next-octet:end/disp8 <span id="L166" class="LineNr"> 166 </span> <span class="subxComment"># eax = from-hex-char(eax)</span> <span id="L167" class="LineNr"> 167 </span> e8/call <a href='../067parse-hex.subx.html#L803'>from-hex-char</a>/disp32 <span id="L168" class="LineNr"> 168 </span> <span class="subxComment"># ecx = eax</span> @@ -239,7 +239,7 @@ if ('onhashchange' in window) { <span id="L178" class="LineNr"> 178 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span> <span id="L179" class="LineNr"> 179 </span> <span class="subxComment"># if (eax == Eof) error(ed, err, "partial byte found.")</span> <span id="L180" class="LineNr"> 180 </span> 3d/compare-eax-and 0xffffffff/imm32/Eof -<span id="L181" class="LineNr"> 181 </span> 75/jump-if-not-equal $convert-next-octet:convert/disp8 +<span id="L181" class="LineNr"> 181 </span> 75/jump-if-!= $convert-next-octet:convert/disp8 <span id="L182" class="LineNr"> 182 </span> <span class="subxS1Comment"># . error-byte(ed, err, msg, '.') # reusing error-byte to avoid creating _yet_ another helper</span> <span id="L183" class="LineNr"> 183 </span> <span class="subxS2Comment"># . . push args</span> <span id="L184" class="LineNr"> 184 </span> 68/push 0x2e/imm32/period/dummy @@ -345,7 +345,7 @@ if ('onhashchange' in window) { <span id="L284" class="LineNr"> 284 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span> <span id="L285" class="LineNr"> 285 </span> <span class="subxComment"># return if abort</span> <span id="L286" class="LineNr"> 286 </span> 81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 0/imm32 <span class="subxComment"># compare *(ecx+4)</span> -<span id="L287" class="LineNr"> 287 </span> 75/jump-if-not-equal $test-convert-next-octet:end/disp8 +<span id="L287" class="LineNr"> 287 </span> 75/jump-if-!= $test-convert-next-octet:end/disp8 <span id="L288" class="LineNr"> 288 </span> <span class="subxComment"># check-ints-equal(eax, 0xab, msg)</span> <span id="L289" class="LineNr"> 289 </span> <span class="subxS2Comment"># . . push args</span> <span id="L290" class="LineNr"> 290 </span> 68/push <span class="Constant">"F - test-convert-next-octet"</span>/imm32 @@ -435,7 +435,7 @@ if ('onhashchange' in window) { <span id="L374" class="LineNr"> 374 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span> <span id="L375" class="LineNr"> 375 </span> <span class="subxComment"># return if abort</span> <span id="L376" class="LineNr"> 376 </span> 81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 0/imm32 <span class="subxComment"># compare *(ecx+4)</span> -<span id="L377" class="LineNr"> 377 </span> 75/jump-if-not-equal $test-convert-next-octet-handles-Eof:end/disp8 +<span id="L377" class="LineNr"> 377 </span> 75/jump-if-!= $test-convert-next-octet-handles-Eof:end/disp8 <span id="L378" class="LineNr"> 378 </span> <span class="subxComment"># check-ints-equal(eax, Eof, msg)</span> <span id="L379" class="LineNr"> 379 </span> <span class="subxS2Comment"># . . push args</span> <span id="L380" class="LineNr"> 380 </span> 68/push <span class="Constant">"F - test-convert-next-octet-handles-Eof"</span>/imm32 @@ -566,7 +566,7 @@ if ('onhashchange' in window) { <span id="L505" class="LineNr"> 505 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L506" class="LineNr"> 506 </span> <span class="subxComment"># if (eax == Eof) return eax</span> <span id="L507" class="LineNr"> 507 </span> 3d/compare-with-eax 0xffffffff/imm32/Eof -<span id="L508" class="LineNr"> 508 </span> 74/jump-if-equal $scan-next-byte:end/disp8 +<span id="L508" class="LineNr"> 508 </span> 74/jump-if-= $scan-next-byte:end/disp8 <span id="L509" class="LineNr"> 509 </span> <span class="subxComment"># if (is-hex-digit?(eax)) return eax</span> <span id="L510" class="LineNr"> 510 </span> <span class="subxS1Comment"># . save eax for now</span> <span id="L511" class="LineNr"> 511 </span> 50/push-eax @@ -582,21 +582,21 @@ if ('onhashchange' in window) { <span id="L521" class="LineNr"> 521 </span> <span class="subxS1Comment"># . restore eax (does not affect flags)</span> <span id="L522" class="LineNr"> 522 </span> 58/pop-to-eax <span id="L523" class="LineNr"> 523 </span> <span class="subxS1Comment"># . check whether to return</span> -<span id="L524" class="LineNr"> 524 </span> 75/jump-if-not-equal $scan-next-byte:end/disp8 +<span id="L524" class="LineNr"> 524 </span> 75/jump-if-!= $scan-next-byte:end/disp8 <span id="L525" class="LineNr"> 525 </span><span class="Constant">$scan-next-byte:check1</span>: <span id="L526" class="LineNr"> 526 </span> <span class="subxComment"># if (eax == ' ') continue</span> <span id="L527" class="LineNr"> 527 </span> 3d/compare-eax-and 0x20/imm32/space -<span id="L528" class="LineNr"> 528 </span> 74/jump-if-equal $scan-next-byte:<span class="Constant">loop</span>/disp8 +<span id="L528" class="LineNr"> 528 </span> 74/jump-if-= $scan-next-byte:<span class="Constant">loop</span>/disp8 <span id="L529" class="LineNr"> 529 </span> <span class="subxComment"># if (eax == '\t') continue</span> <span id="L530" class="LineNr"> 530 </span> 3d/compare-eax-and 9/imm32/tab -<span id="L531" class="LineNr"> 531 </span> 74/jump-if-equal $scan-next-byte:<span class="Constant">loop</span>/disp8 +<span id="L531" class="LineNr"> 531 </span> 74/jump-if-= $scan-next-byte:<span class="Constant">loop</span>/disp8 <span id="L532" class="LineNr"> 532 </span> <span class="subxComment"># if (eax == '\n') continue</span> <span id="L533" class="LineNr"> 533 </span> 3d/compare-eax-and 0xa/imm32/newline -<span id="L534" class="LineNr"> 534 </span> 74/jump-if-equal $scan-next-byte:<span class="Constant">loop</span>/disp8 +<span id="L534" class="LineNr"> 534 </span> 74/jump-if-= $scan-next-byte:<span class="Constant">loop</span>/disp8 <span id="L535" class="LineNr"> 535 </span><span class="Constant">$scan-next-byte:check2</span>: <span id="L536" class="LineNr"> 536 </span> <span class="subxComment"># if (eax == '#') skip-until-newline(in)</span> <span id="L537" class="LineNr"> 537 </span> 3d/compare-with-eax 0x23/imm32 -<span id="L538" class="LineNr"> 538 </span> 75/jump-if-not-equal $scan-next-byte:check3/disp8 +<span id="L538" class="LineNr"> 538 </span> 75/jump-if-!= $scan-next-byte:check3/disp8 <span id="L539" class="LineNr"> 539 </span> <span class="subxS1Comment"># . skip-until-newline(in)</span> <span id="L540" class="LineNr"> 540 </span> <span class="subxS2Comment"># . . push args</span> <span id="L541" class="LineNr"> 541 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+8)</span> @@ -702,7 +702,7 @@ if ('onhashchange' in window) { <span id="L641" class="LineNr"> 641 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span> <span id="L642" class="LineNr"> 642 </span> <span class="subxComment"># return if abort</span> <span id="L643" class="LineNr"> 643 </span> 81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 0/imm32 <span class="subxComment"># compare *(ecx+4)</span> -<span id="L644" class="LineNr"> 644 </span> 75/jump-if-not-equal $test-scan-next-byte:end/disp8 +<span id="L644" class="LineNr"> 644 </span> 75/jump-if-!= $test-scan-next-byte:end/disp8 <span id="L645" class="LineNr"> 645 </span> <span class="subxComment"># check-ints-equal(eax, 0x61/a, msg)</span> <span id="L646" class="LineNr"> 646 </span> <span class="subxS2Comment"># . . push args</span> <span id="L647" class="LineNr"> 647 </span> 68/push <span class="Constant">"F - test-scan-next-byte"</span>/imm32 @@ -800,7 +800,7 @@ if ('onhashchange' in window) { <span id="L739" class="LineNr"> 739 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span> <span id="L740" class="LineNr"> 740 </span> <span class="subxComment"># return if abort</span> <span id="L741" class="LineNr"> 741 </span> 81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 0/imm32 <span class="subxComment"># compare *(ecx+4)</span> -<span id="L742" class="LineNr"> 742 </span> 75/jump-if-not-equal $test-scan-next-byte-skips-whitespace:end/disp8 +<span id="L742" class="LineNr"> 742 </span> 75/jump-if-!= $test-scan-next-byte-skips-whitespace:end/disp8 <span id="L743" class="LineNr"> 743 </span> <span class="subxComment"># check-ints-equal(eax, 0x61/a, msg)</span> <span id="L744" class="LineNr"> 744 </span> <span class="subxS2Comment"># . . push args</span> <span id="L745" class="LineNr"> 745 </span> 68/push <span class="Constant">"F - test-scan-next-byte-skips-whitespace"</span>/imm32 @@ -906,7 +906,7 @@ if ('onhashchange' in window) { <span id="L845" class="LineNr"> 845 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span> <span id="L846" class="LineNr"> 846 </span> <span class="subxComment"># return if abort</span> <span id="L847" class="LineNr"> 847 </span> 81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 0/imm32 <span class="subxComment"># compare *(ecx+4)</span> -<span id="L848" class="LineNr"> 848 </span> 75/jump-if-not-equal $test-scan-next-byte-skips-comment:end/disp8 +<span id="L848" class="LineNr"> 848 </span> 75/jump-if-!= $test-scan-next-byte-skips-comment:end/disp8 <span id="L849" class="LineNr"> 849 </span> <span class="subxComment"># check-ints-equal(eax, 0x61/a, msg)</span> <span id="L850" class="LineNr"> 850 </span> <span class="subxS2Comment"># . . push args</span> <span id="L851" class="LineNr"> 851 </span> 68/push <span class="Constant">"F - test-scan-next-byte-skips-comment"</span>/imm32 @@ -1012,7 +1012,7 @@ if ('onhashchange' in window) { <span id="L951" class="LineNr"> 951 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span> <span id="L952" class="LineNr"> 952 </span> <span class="subxComment"># return if abort</span> <span id="L953" class="LineNr"> 953 </span> 81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 0/imm32 <span class="subxComment"># compare *(ecx+4)</span> -<span id="L954" class="LineNr"> 954 </span> 75/jump-if-not-equal $test-scan-next-byte-skips-comment-and-whitespace:end/disp8 +<span id="L954" class="LineNr"> 954 </span> 75/jump-if-!= $test-scan-next-byte-skips-comment-and-whitespace:end/disp8 <span id="L955" class="LineNr"> 955 </span> <span class="subxComment"># check-ints-equal(eax, 0x61/a, msg)</span> <span id="L956" class="LineNr"> 956 </span> <span class="subxS2Comment"># . . push args</span> <span id="L957" class="LineNr"> 957 </span> 68/push <span class="Constant">"F - test-scan-next-byte-skips-comment-and-whitespace"</span>/imm32 @@ -1120,7 +1120,7 @@ if ('onhashchange' in window) { <span id="L1059" class="LineNr">1059 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span> <span id="L1060" class="LineNr">1060 </span> <span class="subxComment"># return if abort</span> <span id="L1061" class="LineNr">1061 </span> 81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 0/imm32 <span class="subxComment"># compare *(ecx+4)</span> -<span id="L1062" class="LineNr">1062 </span> 75/jump-if-not-equal $test-scan-next-byte-skips-whitespace-and-comment:end/disp8 +<span id="L1062" class="LineNr">1062 </span> 75/jump-if-!= $test-scan-next-byte-skips-whitespace-and-comment:end/disp8 <span id="L1063" class="LineNr">1063 </span> <span class="subxComment"># check-ints-equal(eax, 0x61/a, msg)</span> <span id="L1064" class="LineNr">1064 </span> <span class="subxS2Comment"># . . push args</span> <span id="L1065" class="LineNr">1065 </span> 68/push <span class="Constant">"F - test-scan-next-byte-skips-whitespace-and-comment"</span>/imm32 @@ -1218,7 +1218,7 @@ if ('onhashchange' in window) { <span id="L1157" class="LineNr">1157 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span> <span id="L1158" class="LineNr">1158 </span> <span class="subxComment"># return if abort</span> <span id="L1159" class="LineNr">1159 </span> 81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 0/imm32 <span class="subxComment"># compare *(ecx+4)</span> -<span id="L1160" class="LineNr">1160 </span> 75/jump-if-not-equal $test-scan-next-byte-reads-final-byte:end/disp8 +<span id="L1160" class="LineNr">1160 </span> 75/jump-if-!= $test-scan-next-byte-reads-final-byte:end/disp8 <span id="L1161" class="LineNr">1161 </span> <span class="subxComment"># check-ints-equal(eax, 0x61/a, msg)</span> <span id="L1162" class="LineNr">1162 </span> <span class="subxS2Comment"># . . push args</span> <span id="L1163" class="LineNr">1163 </span> 68/push <span class="Constant">"F - test-scan-next-byte-reads-final-byte"</span>/imm32 @@ -1308,7 +1308,7 @@ if ('onhashchange' in window) { <span id="L1247" class="LineNr">1247 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span> <span id="L1248" class="LineNr">1248 </span> <span class="subxComment"># return if abort</span> <span id="L1249" class="LineNr">1249 </span> 81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 0/imm32 <span class="subxComment"># compare *(ecx+4)</span> -<span id="L1250" class="LineNr">1250 </span> 75/jump-if-not-equal $test-scan-next-byte-handles-Eof:end/disp8 +<span id="L1250" class="LineNr">1250 </span> 75/jump-if-!= $test-scan-next-byte-handles-Eof:end/disp8 <span id="L1251" class="LineNr">1251 </span> <span class="subxComment"># check-ints-equal(eax, Eof, msg)</span> <span id="L1252" class="LineNr">1252 </span> <span class="subxS2Comment"># . . push args</span> <span id="L1253" class="LineNr">1253 </span> 68/push <span class="Constant">"F - test-scan-next-byte-handles-Eof"</span>/imm32 @@ -1434,10 +1434,10 @@ if ('onhashchange' in window) { <span id="L1373" class="LineNr">1373 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L1374" class="LineNr">1374 </span> <span class="subxS1Comment"># . if (eax == Eof) break</span> <span id="L1375" class="LineNr">1375 </span> 3d/compare-eax-and 0xffffffff/imm32/Eof -<span id="L1376" class="LineNr">1376 </span> 74/jump-if-equal $skip-until-newline:end/disp8 +<span id="L1376" class="LineNr">1376 </span> 74/jump-if-= $skip-until-newline:end/disp8 <span id="L1377" class="LineNr">1377 </span> <span class="subxS1Comment"># . if (eax != 0xa/newline) loop</span> <span id="L1378" class="LineNr">1378 </span> 3d/compare-eax-and 0xa/imm32/newline -<span id="L1379" class="LineNr">1379 </span> 75/jump-if-not-equal $skip-until-newline:<span class="Constant">loop</span>/disp8 +<span id="L1379" class="LineNr">1379 </span> 75/jump-if-!= $skip-until-newline:<span class="Constant">loop</span>/disp8 <span id="L1380" class="LineNr">1380 </span><span class="Constant">$skip-until-newline:end</span>: <span id="L1381" class="LineNr">1381 </span> <span class="subxS1Comment"># . restore registers</span> <span id="L1382" class="LineNr">1382 </span> 58/pop-to-eax diff --git a/html/apps/mu.subx.html b/html/apps/mu.subx.html index f8e3cd69..a16e5c67 100644 --- a/html/apps/mu.subx.html +++ b/html/apps/mu.subx.html @@ -436,11 +436,11 @@ if ('onhashchange' in window) { <span id="L374" class="LineNr"> 374 </span> { <span id="L375" class="LineNr"> 375 </span> <span class="subxComment"># if (argc <= 1) break</span> <span id="L376" class="LineNr"> 376 </span> 81 7/subop/compare *ebp 1/imm32 -<span id="L377" class="LineNr"> 377 </span> 7e/jump-if-lesser-or-equal <span class="Constant">break</span>/disp8 +<span id="L377" class="LineNr"> 377 </span> 7e/jump-if-<= <span class="Constant">break</span>/disp8 <span id="L378" class="LineNr"> 378 </span> <span class="subxComment"># if (argv[1] != "test") break</span> <span id="L379" class="LineNr"> 379 </span> (<a href='../052kernel-string-equal.subx.html#L33'>kernel-string-equal?</a> *(ebp+8) <span class="Constant">"test"</span>) <span class="subxComment"># => eax</span> <span id="L380" class="LineNr"> 380 </span> 3d/compare-eax-and 0/imm32 -<span id="L381" class="LineNr"> 381 </span> 74/jump-if-equal <span class="Constant">break</span>/disp8 +<span id="L381" class="LineNr"> 381 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L382" class="LineNr"> 382 </span> <span class="subxComment">#</span> <span id="L383" class="LineNr"> 383 </span> (run-tests) <span id="L384" class="LineNr"> 384 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span> @@ -1042,13 +1042,13 @@ if ('onhashchange' in window) { <span id="L1025" class="LineNr">1025 </span> (<a href='../071read-line.subx.html#L9'>read-line-buffered</a> *(ebp+8) %ecx) <span id="L1026" class="LineNr">1026 </span> <span class="subxComment"># if (line->write == 0) break</span> <span id="L1027" class="LineNr">1027 </span> 81 7/subop/compare *ecx 0/imm32 -<span id="L1028" class="LineNr">1028 </span> 0f 84/jump-if-equal <span class="Constant">break</span>/disp32 +<span id="L1028" class="LineNr">1028 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32 <span id="L1029" class="Folded">1029 </span><span class="Folded">+-- 6 lines: #? # dump line ---------------------------------------------------------------------------------------------------------------------------</span> <span id="L1035" class="LineNr">1035 </span> (<a href='../085next-word-or-string.subx.html#L8'>next-word-or-string</a> %ecx %edx) <span id="L1036" class="LineNr">1036 </span> <span class="subxComment"># if slice-empty?(word-slice) continue</span> <span id="L1037" class="LineNr">1037 </span> (<a href='../072slice.subx.html#L9'>slice-empty?</a> %edx) <span id="L1038" class="LineNr">1038 </span> 3d/compare-eax-and 0/imm32 -<span id="L1039" class="LineNr">1039 </span> 0f 85/jump-if-not-equal <span class="Constant">loop</span>/disp32 +<span id="L1039" class="LineNr">1039 </span> 0f 85/jump-if-!= <span class="Constant">loop</span>/disp32 <span id="L1040" class="LineNr">1040 </span> <span class="subxComment"># if (*word-slice->start == "#") continue</span> <span id="L1041" class="LineNr">1041 </span> <span class="subxS1Comment"># . eax = *word-slice->start</span> <span id="L1042" class="LineNr">1042 </span> 8b/-> *edx 0/r32/eax @@ -1056,13 +1056,13 @@ if ('onhashchange' in window) { <span id="L1044" class="LineNr">1044 </span> 81 4/subop/and %eax 0xff/imm32 <span id="L1045" class="LineNr">1045 </span> <span class="subxS1Comment"># . if (eax == '#') continue</span> <span id="L1046" class="LineNr">1046 </span> 3d/compare-eax-and 0x23/imm32/hash -<span id="L1047" class="LineNr">1047 </span> 0f 84/jump-if-equal <span class="Constant">loop</span>/disp32 +<span id="L1047" class="LineNr">1047 </span> 0f 84/jump-if-= <span class="Constant">loop</span>/disp32 <span id="L1048" class="LineNr">1048 </span> <span class="subxComment"># if (slice-equal?(word-slice, "fn")) parse a function</span> <span id="L1049" class="LineNr">1049 </span> { <span id="L1050" class="LineNr">1050 </span><span class="Constant">$parse-mu:fn</span>: <span id="L1051" class="LineNr">1051 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> %edx <span class="Constant">"fn"</span>) <span id="L1052" class="LineNr">1052 </span> 3d/compare-eax-and 0/imm32 -<span id="L1053" class="LineNr">1053 </span> 0f 84/jump-if-equal <span class="Constant">break</span>/disp32 +<span id="L1053" class="LineNr">1053 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32 <span id="L1054" class="LineNr">1054 </span> <span class="subxComment"># var new-function/eax : (handle function) = populate-mu-function(in, new-function, vars)</span> <span id="L1055" class="LineNr">1055 </span> (<a href='../069allocate.subx.html#L59'>allocate</a> <span class="SpecialChar"><a href='../069allocate.subx.html#L22'>Heap</a></span> *<span class="SpecialChar"><a href='mu.subx.html#L264'>Function-size</a></span>) <span class="subxComment"># => eax</span> <span id="L1056" class="LineNr">1056 </span> (<a href='../080zero-out.subx.html#L8'>zero-out</a> %eax *<span class="SpecialChar"><a href='mu.subx.html#L264'>Function-size</a></span>) @@ -1181,15 +1181,15 @@ if ('onhashchange' in window) { <span id="L1169" class="LineNr">1169 </span> <span class="subxComment"># if (word-slice == '{') abort</span> <span id="L1170" class="LineNr">1170 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> %ecx <span class="Constant">"{"</span>) <span class="subxComment"># => eax</span> <span id="L1171" class="LineNr">1171 </span> 3d/compare-eax-and 0/imm32 -<span id="L1172" class="LineNr">1172 </span> 0f 85/jump-if-not-equal $populate-mu-function-header:error1/disp32 +<span id="L1172" class="LineNr">1172 </span> 0f 85/jump-if-!= $populate-mu-function-header:error1/disp32 <span id="L1173" class="LineNr">1173 </span> <span class="subxComment"># if (word-slice == '->') abort</span> <span id="L1174" class="LineNr">1174 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> %ecx <span class="Constant">"->"</span>) <span class="subxComment"># => eax</span> <span id="L1175" class="LineNr">1175 </span> 3d/compare-eax-and 0/imm32 -<span id="L1176" class="LineNr">1176 </span> 0f 85/jump-if-not-equal $populate-mu-function-header:error1/disp32 +<span id="L1176" class="LineNr">1176 </span> 0f 85/jump-if-!= $populate-mu-function-header:error1/disp32 <span id="L1177" class="LineNr">1177 </span> <span class="subxComment"># if (word-slice == '}') abort</span> <span id="L1178" class="LineNr">1178 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> %ecx <span class="Constant">"}"</span>) <span class="subxComment"># => eax</span> <span id="L1179" class="LineNr">1179 </span> 3d/compare-eax-and 0/imm32 -<span id="L1180" class="LineNr">1180 </span> 0f 85/jump-if-not-equal $populate-mu-function-header:error1/disp32 +<span id="L1180" class="LineNr">1180 </span> 0f 85/jump-if-!= $populate-mu-function-header:error1/disp32 <span id="L1181" class="LineNr">1181 </span> <span class="subxComment"># save function name</span> <span id="L1182" class="LineNr">1182 </span> (<a href='../072slice.subx.html#L1015'>slice-to-string</a> <span class="SpecialChar"><a href='../069allocate.subx.html#L22'>Heap</a></span> %ecx) <span class="subxComment"># => eax</span> <span id="L1183" class="LineNr">1183 </span> 89/<- *edi 0/r32/eax <span class="subxComment"># Function-name</span> @@ -1202,21 +1202,21 @@ if ('onhashchange' in window) { <span id="L1190" class="LineNr">1190 </span> <span class="subxComment"># if (word-slice == '{') goto done</span> <span id="L1191" class="LineNr">1191 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> %ecx <span class="Constant">"{"</span>) <span class="subxComment"># => eax</span> <span id="L1192" class="LineNr">1192 </span> 3d/compare-eax-and 0/imm32 -<span id="L1193" class="LineNr">1193 </span> 0f 85/jump-if-not-equal $populate-mu-function-header:done/disp32 +<span id="L1193" class="LineNr">1193 </span> 0f 85/jump-if-!= $populate-mu-function-header:done/disp32 <span id="L1194" class="LineNr">1194 </span> <span class="subxComment"># if (word-slice == '->') break</span> <span id="L1195" class="LineNr">1195 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> %ecx <span class="Constant">"->"</span>) <span class="subxComment"># => eax</span> <span id="L1196" class="LineNr">1196 </span> 3d/compare-eax-and 0/imm32 -<span id="L1197" class="LineNr">1197 </span> 0f 85/jump-if-not-equal <span class="Constant">break</span>/disp32 +<span id="L1197" class="LineNr">1197 </span> 0f 85/jump-if-!= <span class="Constant">break</span>/disp32 <span id="L1198" class="LineNr">1198 </span> <span class="subxComment"># if (word-slice == '}') abort</span> <span id="L1199" class="LineNr">1199 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> %ecx <span class="Constant">"}"</span>) <span class="subxComment"># => eax</span> <span id="L1200" class="LineNr">1200 </span> 3d/compare-eax-and 0/imm32 -<span id="L1201" class="LineNr">1201 </span> 0f 85/jump-if-not-equal $populate-mu-function-header:error1/disp32 +<span id="L1201" class="LineNr">1201 </span> 0f 85/jump-if-!= $populate-mu-function-header:error1/disp32 <span id="L1202" class="LineNr">1202 </span> <span class="subxComment"># var v/ebx : (handle var) = parse-var-with-type(word-slice, first-line)</span> <span id="L1203" class="LineNr">1203 </span> (<a href='mu.subx.html#L1464'>parse-var-with-type</a> %ecx *(ebp+8)) <span class="subxComment"># => eax</span> <span id="L1204" class="LineNr">1204 </span> 89/<- %ebx 0/r32/eax <span id="L1205" class="LineNr">1205 </span> <span class="subxComment"># assert(v->register == null)</span> <span id="L1206" class="LineNr">1206 </span> 81 7/subop/compare *(ebx+0x10) 0/imm32 <span class="subxComment"># Var-register</span> -<span id="L1207" class="LineNr">1207 </span> 0f 85/jump-if-not-equal $populate-mu-function-header:error2/disp32 +<span id="L1207" class="LineNr">1207 </span> 0f 85/jump-if-!= $populate-mu-function-header:error2/disp32 <span id="L1208" class="LineNr">1208 </span> <span class="subxComment"># v->stack-offset = next-offset</span> <span id="L1209" class="LineNr">1209 </span> 89/<- *(ebx+0xc) 2/r32/edx <span class="subxComment"># Var-stack-offset</span> <span id="L1210" class="LineNr">1210 </span> <span class="subxComment"># next-offset += size-of(v)</span> @@ -1236,21 +1236,21 @@ if ('onhashchange' in window) { <span id="L1224" class="LineNr">1224 </span> <span class="subxComment"># if (word-slice == '{') break</span> <span id="L1225" class="LineNr">1225 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> %ecx <span class="Constant">"{"</span>) <span class="subxComment"># => eax</span> <span id="L1226" class="LineNr">1226 </span> 3d/compare-eax-and 0/imm32 -<span id="L1227" class="LineNr">1227 </span> 0f 85/jump-if-not-equal <span class="Constant">break</span>/disp32 +<span id="L1227" class="LineNr">1227 </span> 0f 85/jump-if-!= <span class="Constant">break</span>/disp32 <span id="L1228" class="LineNr">1228 </span> <span class="subxComment"># if (word-slice == '->') abort</span> <span id="L1229" class="LineNr">1229 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> %ecx <span class="Constant">"->"</span>) <span class="subxComment"># => eax</span> <span id="L1230" class="LineNr">1230 </span> 3d/compare-eax-and 0/imm32 -<span id="L1231" class="LineNr">1231 </span> 0f 85/jump-if-not-equal $populate-mu-function-header:error1/disp32 +<span id="L1231" class="LineNr">1231 </span> 0f 85/jump-if-!= $populate-mu-function-header:error1/disp32 <span id="L1232" class="LineNr">1232 </span> <span class="subxComment"># if (word-slice == '}') abort</span> <span id="L1233" class="LineNr">1233 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> %ecx <span class="Constant">"}"</span>) <span class="subxComment"># => eax</span> <span id="L1234" class="LineNr">1234 </span> 3d/compare-eax-and 0/imm32 -<span id="L1235" class="LineNr">1235 </span> 0f 85/jump-if-not-equal $populate-mu-function-header:error1/disp32 +<span id="L1235" class="LineNr">1235 </span> 0f 85/jump-if-!= $populate-mu-function-header:error1/disp32 <span id="L1236" class="LineNr">1236 </span> <span class="subxComment">#</span> <span id="L1237" class="LineNr">1237 </span> (<a href='mu.subx.html#L1464'>parse-var-with-type</a> %ecx *(ebp+8)) <span class="subxComment"># => eax</span> <span id="L1238" class="LineNr">1238 </span> 89/<- %ebx 0/r32/eax <span id="L1239" class="LineNr">1239 </span> <span class="subxComment"># assert(var->register != null)</span> <span id="L1240" class="LineNr">1240 </span> 81 7/subop/compare *(ebx+0x10) 0/imm32 <span class="subxComment"># Var-register</span> -<span id="L1241" class="LineNr">1241 </span> 0f 84/jump-if-equal $populate-mu-function-header:error3/disp32 +<span id="L1241" class="LineNr">1241 </span> 0f 84/jump-if-= $populate-mu-function-header:error3/disp32 <span id="L1242" class="LineNr">1242 </span> (<a href='mu.subx.html#L3128'>append-list</a> <span class="SpecialChar"><a href='../069allocate.subx.html#L22'>Heap</a></span> %ebx *(edi+0xc)) <span class="subxComment"># Function-outputs => eax</span> <span id="L1243" class="LineNr">1243 </span> 89/<- *(edi+0xc) 0/r32/eax <span class="subxComment"># Function-outputs</span> <span id="L1244" class="LineNr">1244 </span> e9/jump <span class="Constant">loop</span>/disp32 @@ -1534,7 +1534,7 @@ if ('onhashchange' in window) { <span id="L1522" class="LineNr">1522 </span> 8a/copy-byte *eax 3/r32/BL <span id="L1523" class="LineNr">1523 </span> 81 4/subop/and %ebx 0xff/imm32 <span id="L1524" class="LineNr">1524 </span> 81 7/subop/compare %ebx 0x3a/imm32/colon -<span id="L1525" class="LineNr">1525 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L1525" class="LineNr">1525 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L1526" class="LineNr">1526 </span> 89/<- *(ecx+4) 0/r32/eax <span id="L1527" class="LineNr">1527 </span> } <span id="L1528" class="LineNr">1528 </span> <span class="subxS1Comment"># . if s ends with ',', decrement s->end</span> @@ -1544,7 +1544,7 @@ if ('onhashchange' in window) { <span id="L1532" class="LineNr">1532 </span> 8a/copy-byte *eax 3/r32/BL <span id="L1533" class="LineNr">1533 </span> 81 4/subop/and %ebx 0xff/imm32 <span id="L1534" class="LineNr">1534 </span> 81 7/subop/compare %ebx 0x2c/imm32/comma -<span id="L1535" class="LineNr">1535 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L1535" class="LineNr">1535 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L1536" class="LineNr">1536 </span> 89/<- *(ecx+4) 0/r32/eax <span id="L1537" class="LineNr">1537 </span> } <span id="L1538" class="LineNr">1538 </span><span class="Constant">$parse-var-with-type:write-name</span>: @@ -1560,7 +1560,7 @@ if ('onhashchange' in window) { <span id="L1548" class="LineNr">1548 </span> 8a/copy-byte *eax 3/r32/BL <span id="L1549" class="LineNr">1549 </span> 81 4/subop/and %ebx 0xff/imm32 <span id="L1550" class="LineNr">1550 </span> 81 7/subop/compare %ebx 0x3a/imm32/colon -<span id="L1551" class="LineNr">1551 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L1551" class="LineNr">1551 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L1552" class="LineNr">1552 </span> 89/<- *(ecx+4) 0/r32/eax <span id="L1553" class="LineNr">1553 </span> } <span id="L1554" class="LineNr">1554 </span> <span class="subxS1Comment"># . if s ends with ',', decrement s->end</span> @@ -1570,7 +1570,7 @@ if ('onhashchange' in window) { <span id="L1558" class="LineNr">1558 </span> 8a/copy-byte *eax 3/r32/BL <span id="L1559" class="LineNr">1559 </span> 81 4/subop/and %ebx 0xff/imm32 <span id="L1560" class="LineNr">1560 </span> 81 7/subop/compare %ebx 0x2c/imm32/comma -<span id="L1561" class="LineNr">1561 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L1561" class="LineNr">1561 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L1562" class="LineNr">1562 </span> 89/<- *(ecx+4) 0/r32/eax <span id="L1563" class="LineNr">1563 </span> } <span id="L1564" class="LineNr">1564 </span> <span class="subxComment"># if (!slice-empty?(s)) v->register = slice-to-string(s)</span> @@ -1580,7 +1580,7 @@ if ('onhashchange' in window) { <span id="L1568" class="LineNr">1568 </span> <span class="subxComment"># That's probably a sign we have the wrong algorithm for this function.</span> <span id="L1569" class="LineNr">1569 </span> 8b/-> *ecx 0/r32/eax <span id="L1570" class="LineNr">1570 </span> 39/compare 0/r32/eax *(ecx+4) -<span id="L1571" class="LineNr">1571 </span> 76/jump-if-lesser-or-equal <span class="Constant">break</span>/disp8 +<span id="L1571" class="LineNr">1571 </span> 76/jump-if-<= <span class="Constant">break</span>/disp8 <span id="L1572" class="LineNr">1572 </span> (<a href='../072slice.subx.html#L1015'>slice-to-string</a> <span class="SpecialChar"><a href='../069allocate.subx.html#L22'>Heap</a></span> %ecx) <span id="L1573" class="LineNr">1573 </span> 89/<- *(edi+0x10) 0/r32/eax <span class="subxComment"># Var-register</span> <span id="L1574" class="LineNr">1574 </span> } @@ -1589,33 +1589,33 @@ if ('onhashchange' in window) { <span id="L1577" class="LineNr">1577 </span> <span class="subxComment"># if (word-slice == '{') abort</span> <span id="L1578" class="LineNr">1578 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> %ecx <span class="Constant">"{"</span>) <span class="subxComment"># => eax</span> <span id="L1579" class="LineNr">1579 </span> 3d/compare-eax-and 0/imm32 -<span id="L1580" class="LineNr">1580 </span> 0f 85/jump-if-not-equal $parse-var-with-type:abort/disp32 +<span id="L1580" class="LineNr">1580 </span> 0f 85/jump-if-!= $parse-var-with-type:abort/disp32 <span id="L1581" class="LineNr">1581 </span> <span class="subxComment"># if (word-slice == '->') abort</span> <span id="L1582" class="LineNr">1582 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> %ecx <span class="Constant">"->"</span>) <span class="subxComment"># => eax</span> <span id="L1583" class="LineNr">1583 </span> 3d/compare-eax-and 0/imm32 -<span id="L1584" class="LineNr">1584 </span> 0f 85/jump-if-not-equal $parse-var-with-type:abort/disp32 +<span id="L1584" class="LineNr">1584 </span> 0f 85/jump-if-!= $parse-var-with-type:abort/disp32 <span id="L1585" class="LineNr">1585 </span> <span class="subxComment"># if (word-slice == '}') abort</span> <span id="L1586" class="LineNr">1586 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> %ecx <span class="Constant">"}"</span>) <span class="subxComment"># => eax</span> <span id="L1587" class="LineNr">1587 </span> 3d/compare-eax-and 0/imm32 -<span id="L1588" class="LineNr">1588 </span> 0f 85/jump-if-not-equal $parse-var-with-type:abort/disp32 +<span id="L1588" class="LineNr">1588 </span> 0f 85/jump-if-!= $parse-var-with-type:abort/disp32 <span id="L1589" class="LineNr">1589 </span> <span class="subxComment"># if (slice-empty?(type)) skip</span> <span id="L1590" class="LineNr">1590 </span> (<a href='../072slice.subx.html#L9'>slice-empty?</a> %ecx) <span id="L1591" class="LineNr">1591 </span> { <span id="L1592" class="LineNr">1592 </span> 3d/compare-eax-and 0/imm32 -<span id="L1593" class="LineNr">1593 </span> 0f 84/jump-if-equal <span class="Constant">break</span>/disp32 +<span id="L1593" class="LineNr">1593 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32 <span id="L1594" class="LineNr">1594 </span> (<a href='mu.subx.html#L1640'>next-mu-token</a> *(ebp+0xc) %ecx) <span id="L1595" class="LineNr">1595 </span> <span class="subxComment"># if (word-slice == '{') abort</span> <span id="L1596" class="LineNr">1596 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> %ecx <span class="Constant">"{"</span>) <span class="subxComment"># => eax</span> <span id="L1597" class="LineNr">1597 </span> 3d/compare-eax-and 0/imm32 -<span id="L1598" class="LineNr">1598 </span> 0f 85/jump-if-not-equal $parse-var-with-type:abort/disp32 +<span id="L1598" class="LineNr">1598 </span> 0f 85/jump-if-!= $parse-var-with-type:abort/disp32 <span id="L1599" class="LineNr">1599 </span> <span class="subxComment"># if (word-slice == '->') abort</span> <span id="L1600" class="LineNr">1600 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> %ecx <span class="Constant">"->"</span>) <span class="subxComment"># => eax</span> <span id="L1601" class="LineNr">1601 </span> 3d/compare-eax-and 0/imm32 -<span id="L1602" class="LineNr">1602 </span> 0f 85/jump-if-not-equal $parse-var-with-type:abort/disp32 +<span id="L1602" class="LineNr">1602 </span> 0f 85/jump-if-!= $parse-var-with-type:abort/disp32 <span id="L1603" class="LineNr">1603 </span> <span class="subxComment"># if (word-slice == '}') abort</span> <span id="L1604" class="LineNr">1604 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> %ecx <span class="Constant">"}"</span>) <span class="subxComment"># => eax</span> <span id="L1605" class="LineNr">1605 </span> 3d/compare-eax-and 0/imm32 -<span id="L1606" class="LineNr">1606 </span> 0f 85/jump-if-not-equal $parse-var-with-type:abort/disp32 +<span id="L1606" class="LineNr">1606 </span> 0f 85/jump-if-!= $parse-var-with-type:abort/disp32 <span id="L1607" class="LineNr">1607 </span> } <span id="L1608" class="LineNr">1608 </span> (<a href='mu.subx.html#L1681'>type-for</a> %ecx) <span class="subxComment"># => eax</span> <span id="L1609" class="LineNr">1609 </span> 89/<- *(edi+4) 0/r32/eax <span class="subxComment"># Var-type</span> @@ -1667,7 +1667,7 @@ if ('onhashchange' in window) { <span id="L1655" class="LineNr">1655 </span> 8a/copy-byte *eax 3/r32/BL <span id="L1656" class="LineNr">1656 </span> 81 4/subop/and %ebx 0xff/imm32 <span id="L1657" class="LineNr">1657 </span> 81 7/subop/compare %ebx 0x3a/imm32/colon -<span id="L1658" class="LineNr">1658 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L1658" class="LineNr">1658 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L1659" class="LineNr">1659 </span> 89/<- *(edi+4) 0/r32/eax <span id="L1660" class="LineNr">1660 </span> } <span id="L1661" class="LineNr">1661 </span> <span class="subxComment"># if out ends with ',', decrement out->end</span> @@ -1677,7 +1677,7 @@ if ('onhashchange' in window) { <span id="L1665" class="LineNr">1665 </span> 8a/copy-byte *eax 3/r32/BL <span id="L1666" class="LineNr">1666 </span> 81 4/subop/and %ebx 0xff/imm32 <span id="L1667" class="LineNr">1667 </span> 81 7/subop/compare %ebx 0x2c/imm32/comma -<span id="L1668" class="LineNr">1668 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L1668" class="LineNr">1668 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L1669" class="LineNr">1669 </span> 89/<- *(edi+4) 0/r32/eax <span id="L1670" class="LineNr">1670 </span> } <span id="L1671" class="LineNr">1671 </span><span class="Constant">$next-mu-token:end</span>: @@ -1734,14 +1734,14 @@ if ('onhashchange' in window) { <span id="L1722" class="LineNr">1722 </span> <span class="subxComment"># if (curr >= max) return -1</span> <span id="L1723" class="LineNr">1723 </span> 39/compare %edx 3/r32/ebx <span id="L1724" class="LineNr">1724 </span> { -<span id="L1725" class="LineNr">1725 </span> 72/jump-if-lesser-unsigned <span class="Constant">break</span>/disp8 +<span id="L1725" class="LineNr">1725 </span> 72/jump-if-addr< <span class="Constant">break</span>/disp8 <span id="L1726" class="LineNr">1726 </span> b8/copy-to-eax 1/imm32 <span id="L1727" class="LineNr">1727 </span> eb/jump $pos-slice:end/disp8 <span id="L1728" class="LineNr">1728 </span> } <span id="L1729" class="LineNr">1729 </span> <span class="subxComment"># if (slice-equal?(s, *curr)) break</span> <span id="L1730" class="LineNr">1730 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> *(ebp+0xc) *edx) <span class="subxComment"># => eax</span> <span id="L1731" class="LineNr">1731 </span> 3d/compare-eax-and 0/imm32 -<span id="L1732" class="LineNr">1732 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L1732" class="LineNr">1732 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L1733" class="LineNr">1733 </span> <span class="subxComment"># ++index</span> <span id="L1734" class="LineNr">1734 </span> 41/increment-ecx <span id="L1735" class="LineNr">1735 </span> <span class="subxComment"># curr += 4</span> @@ -1913,7 +1913,7 @@ if ('onhashchange' in window) { <span id="L1901" class="LineNr">1901 </span> <span class="subxComment"># if (slice-empty?(in)) return false</span> <span id="L1902" class="LineNr">1902 </span> (<a href='../072slice.subx.html#L9'>slice-empty?</a> *(ebp+8)) <span class="subxComment"># => eax</span> <span id="L1903" class="LineNr">1903 </span> 3d/compare-eax-and 0/imm32 -<span id="L1904" class="LineNr">1904 </span> 75/jump-if-not-equal $is-identifier?:false/disp8 +<span id="L1904" class="LineNr">1904 </span> 75/jump-if-!= $is-identifier?:false/disp8 <span id="L1905" class="LineNr">1905 </span> <span class="subxComment"># var c/eax : byte = *in->start</span> <span id="L1906" class="LineNr">1906 </span> 8b/-> *(ebp+8) 0/r32/eax <span id="L1907" class="LineNr">1907 </span> 8b/-> *eax 0/r32/eax @@ -1921,18 +1921,18 @@ if ('onhashchange' in window) { <span id="L1909" class="LineNr">1909 </span> 81 4/subop/and %eax 0xff/imm32 <span id="L1910" class="LineNr">1910 </span> <span class="subxComment"># if (c == '$') return true</span> <span id="L1911" class="LineNr">1911 </span> 3d/compare-eax-and 0x24/imm32/$ -<span id="L1912" class="LineNr">1912 </span> 74/jump-if-equal $is-identifier?:true/disp8 +<span id="L1912" class="LineNr">1912 </span> 74/jump-if-= $is-identifier?:true/disp8 <span id="L1913" class="LineNr">1913 </span> <span class="subxComment"># if (c == '_') return true</span> <span id="L1914" class="LineNr">1914 </span> 3d/compare-eax-and 0x5f/imm32/_ -<span id="L1915" class="LineNr">1915 </span> 74/jump-if-equal $is-identifier?:true/disp8 +<span id="L1915" class="LineNr">1915 </span> 74/jump-if-= $is-identifier?:true/disp8 <span id="L1916" class="LineNr">1916 </span> <span class="subxComment"># drop case</span> <span id="L1917" class="LineNr">1917 </span> 25/and-eax-with 0x5f/imm32 <span id="L1918" class="LineNr">1918 </span> <span class="subxComment"># if (c < 'A') return false</span> <span id="L1919" class="LineNr">1919 </span> 3d/compare-eax-and 0x41/imm32/A -<span id="L1920" class="LineNr">1920 </span> 7c/jump-if-lesser $is-identifier?:false/disp8 +<span id="L1920" class="LineNr">1920 </span> 7c/jump-if-< $is-identifier?:false/disp8 <span id="L1921" class="LineNr">1921 </span> <span class="subxComment"># if (c > 'Z') return false</span> <span id="L1922" class="LineNr">1922 </span> 3d/compare-eax-and 0x5a/imm32/Z -<span id="L1923" class="LineNr">1923 </span> 7f/jump-if-greater $is-identifier?:false/disp8 +<span id="L1923" class="LineNr">1923 </span> 7f/jump-if-> $is-identifier?:false/disp8 <span id="L1924" class="LineNr">1924 </span> <span class="subxComment"># otherwise return true</span> <span id="L1925" class="LineNr">1925 </span><span class="Constant">$is-identifier?:true</span>: <span id="L1926" class="LineNr">1926 </span> b8/copy-to-eax 1/imm32/true @@ -2294,7 +2294,7 @@ if ('onhashchange' in window) { <span id="L2282" class="LineNr">2282 </span><span class="CommentedCode">#? (flush Stderr)</span> <span id="L2283" class="LineNr">2283 </span> <span class="subxComment"># if (line->write == 0) break</span> <span id="L2284" class="LineNr">2284 </span> 81 7/subop/compare *ecx 0/imm32 -<span id="L2285" class="LineNr">2285 </span> 0f 84/jump-if-equal <span class="Constant">break</span>/disp32 +<span id="L2285" class="LineNr">2285 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32 <span id="L2286" class="LineNr">2286 </span> <span class="subxComment"># word-slice = next-word(line)</span> <span id="L2287" class="LineNr">2287 </span> (<a href='../076next-word.subx.html#L10'>next-word</a> %ecx %edx) <span id="L2288" class="LineNr">2288 </span><span class="CommentedCode">#? (write-buffered Stderr "word: ")</span> @@ -2304,7 +2304,7 @@ if ('onhashchange' in window) { <span id="L2292" class="LineNr">2292 </span> <span class="subxComment"># if slice-empty?(word-slice) continue</span> <span id="L2293" class="LineNr">2293 </span> (<a href='../072slice.subx.html#L9'>slice-empty?</a> %edx) <span id="L2294" class="LineNr">2294 </span> 3d/compare-eax-and 0/imm32 -<span id="L2295" class="LineNr">2295 </span> 0f 85/jump-if-not-equal <span class="Constant">loop</span>/disp32 +<span id="L2295" class="LineNr">2295 </span> 0f 85/jump-if-!= <span class="Constant">loop</span>/disp32 <span id="L2296" class="LineNr">2296 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, '#') continue</span> <span id="L2297" class="LineNr">2297 </span> <span class="subxS1Comment"># . eax = *word-slice->start</span> <span id="L2298" class="LineNr">2298 </span> 8b/-> *edx 0/r32/eax @@ -2312,13 +2312,13 @@ if ('onhashchange' in window) { <span id="L2300" class="LineNr">2300 </span> 81 4/subop/and %eax 0xff/imm32 <span id="L2301" class="LineNr">2301 </span> <span class="subxS1Comment"># . if (eax == '#') continue</span> <span id="L2302" class="LineNr">2302 </span> 3d/compare-eax-and 0x23/imm32/hash -<span id="L2303" class="LineNr">2303 </span> 0f 84/jump-if-equal <span class="Constant">loop</span>/disp32 +<span id="L2303" class="LineNr">2303 </span> 0f 84/jump-if-= <span class="Constant">loop</span>/disp32 <span id="L2304" class="LineNr">2304 </span> <span class="subxComment"># if slice-equal?(word-slice, "{")</span> <span id="L2305" class="LineNr">2305 </span> { <span id="L2306" class="LineNr">2306 </span><span class="Constant">$parse-mu-block:check-for-block</span>: <span id="L2307" class="LineNr">2307 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> %edx <span class="Constant">"{"</span>) <span id="L2308" class="LineNr">2308 </span> 3d/compare-eax-and 0/imm32 -<span id="L2309" class="LineNr">2309 </span> 74/jump-if-equal <span class="Constant">break</span>/disp8 +<span id="L2309" class="LineNr">2309 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L2310" class="LineNr">2310 </span> (<a href='mu.subx.html#L2381'>check-no-tokens-left</a> %ecx) <span id="L2311" class="LineNr">2311 </span> <span class="subxComment"># parse new block and append</span> <span id="L2312" class="LineNr">2312 </span> (<a href='mu.subx.html#L2220'>parse-mu-block</a> *(ebp+8) *(ebp+0xc) *(ebp+0x10)) <span class="subxComment"># => eax</span> @@ -2329,7 +2329,7 @@ if ('onhashchange' in window) { <span id="L2317" class="LineNr">2317 </span><span class="Constant">$parse-mu-block:check-for-end</span>: <span id="L2318" class="LineNr">2318 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> %edx <span class="Constant">"}"</span>) <span id="L2319" class="LineNr">2319 </span> 3d/compare-eax-and 0/imm32 -<span id="L2320" class="LineNr">2320 </span> 0f 85/jump-if-not-equal <span class="Constant">break</span>/disp32 +<span id="L2320" class="LineNr">2320 </span> 0f 85/jump-if-!= <span class="Constant">break</span>/disp32 <span id="L2321" class="LineNr">2321 </span> <span class="subxComment"># if slice-ends-with?(word-slice, ":") parse named block and append</span> <span id="L2322" class="LineNr">2322 </span> { <span id="L2323" class="LineNr">2323 </span><span class="Constant">$parse-mu-block:check-for-named-block</span>: @@ -2339,7 +2339,7 @@ if ('onhashchange' in window) { <span id="L2327" class="LineNr">2327 </span> 81 4/subop/and %eax 0xff/imm32 <span id="L2328" class="LineNr">2328 </span> <span class="subxS1Comment"># . if (eax != ':') break</span> <span id="L2329" class="LineNr">2329 </span> 3d/compare-eax-and 0x23/imm32/hash -<span id="L2330" class="LineNr">2330 </span> 0f 85/jump-if-not-equal <span class="Constant">break</span>/disp32 +<span id="L2330" class="LineNr">2330 </span> 0f 85/jump-if-!= <span class="Constant">break</span>/disp32 <span id="L2331" class="LineNr">2331 </span> <span class="subxComment">#</span> <span id="L2332" class="LineNr">2332 </span> (<a href='mu.subx.html#L2428'>parse-mu-named-block</a> %edx %ecx *(ebp+8) *(ebp+0xc) *(ebp+0x10)) <span class="subxComment"># => eax</span> <span id="L2333" class="LineNr">2333 </span> (<a href='mu.subx.html#L3164'>append-to-block</a> %edi %eax) @@ -2350,7 +2350,7 @@ if ('onhashchange' in window) { <span id="L2338" class="LineNr">2338 </span><span class="Constant">$parse-mu-block:check-for-var</span>: <span id="L2339" class="LineNr">2339 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> %edx <span class="Constant">"var"</span>) <span id="L2340" class="LineNr">2340 </span> 3d/compare-eax-and 0/imm32 -<span id="L2341" class="LineNr">2341 </span> 74/jump-if-equal <span class="Constant">break</span>/disp8 +<span id="L2341" class="LineNr">2341 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L2342" class="LineNr">2342 </span> <span class="subxComment">#</span> <span id="L2343" class="LineNr">2343 </span> (<a href='mu.subx.html#L2472'>parse-mu-var-def</a> %ecx *(ebp+0xc)) <span class="subxComment"># => eax</span> <span id="L2344" class="LineNr">2344 </span> (<a href='mu.subx.html#L3164'>append-to-block</a> %edi %eax) @@ -2406,7 +2406,7 @@ if ('onhashchange' in window) { <span id="L2394" class="LineNr">2394 </span> <span class="subxComment"># if slice-empty?(s) return</span> <span id="L2395" class="LineNr">2395 </span> (<a href='../072slice.subx.html#L9'>slice-empty?</a> %ecx) <span id="L2396" class="LineNr">2396 </span> 3d/compare-eax-and 0/imm32 -<span id="L2397" class="LineNr">2397 </span> 75/jump-if-not-equal $check-no-tokens-left:end/disp8 +<span id="L2397" class="LineNr">2397 </span> 75/jump-if-!= $check-no-tokens-left:end/disp8 <span id="L2398" class="LineNr">2398 </span> <span class="subxComment"># if (slice-starts-with?(s, '#') return</span> <span id="L2399" class="LineNr">2399 </span> <span class="subxS1Comment"># . eax = *s->start</span> <span id="L2400" class="LineNr">2400 </span> 8b/-> *edx 0/r32/eax @@ -2414,7 +2414,7 @@ if ('onhashchange' in window) { <span id="L2402" class="LineNr">2402 </span> 81 4/subop/and %eax 0xff/imm32 <span id="L2403" class="LineNr">2403 </span> <span class="subxS1Comment"># . if (eax == '#') continue</span> <span id="L2404" class="LineNr">2404 </span> 3d/compare-eax-and 0x23/imm32/hash -<span id="L2405" class="LineNr">2405 </span> 74/jump-if-equal $check-no-tokens-left:end/disp8 +<span id="L2405" class="LineNr">2405 </span> 74/jump-if-= $check-no-tokens-left:end/disp8 <span id="L2406" class="LineNr">2406 </span> <span class="subxComment"># abort</span> <span id="L2407" class="LineNr">2407 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> <span class="SpecialChar"><a href='../065write-buffered.subx.html#L209'>Stderr</a></span> <span class="Constant">"'{' or '}' should be on its own line, but got '"</span>) <span id="L2408" class="LineNr">2408 </span> (<a href='../055stream.subx.html#L54'>rewind-stream</a> %ecx) @@ -2532,7 +2532,7 @@ if ('onhashchange' in window) { <span id="L2520" class="LineNr">2520 </span> { <span id="L2521" class="LineNr">2521 </span> (<a href='mu.subx.html#L2607'>stmt-has-outputs?</a> *(ebp+8)) <span id="L2522" class="LineNr">2522 </span> 3d/compare-eax-and 0/imm32 -<span id="L2523" class="LineNr">2523 </span> 0f 84/jump-if-equal <span class="Constant">break</span>/disp32 +<span id="L2523" class="LineNr">2523 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32 <span id="L2524" class="LineNr">2524 </span> { <span id="L2525" class="LineNr">2525 </span><span class="Constant">$parse-mu-stmt:read-outputs</span>: <span id="L2526" class="LineNr">2526 </span> <span class="subxComment"># name = next-word(line)</span> @@ -2540,15 +2540,15 @@ if ('onhashchange' in window) { <span id="L2528" class="LineNr">2528 </span> <span class="subxComment"># if slice-empty?(word-slice) break</span> <span id="L2529" class="LineNr">2529 </span> (<a href='../072slice.subx.html#L9'>slice-empty?</a> %ecx) <span id="L2530" class="LineNr">2530 </span> 3d/compare-eax-and 0/imm32 -<span id="L2531" class="LineNr">2531 </span> 0f 85/jump-if-not-equal <span class="Constant">break</span>/disp32 +<span id="L2531" class="LineNr">2531 </span> 0f 85/jump-if-!= <span class="Constant">break</span>/disp32 <span id="L2532" class="LineNr">2532 </span> <span class="subxComment"># if (name == "<-") break</span> <span id="L2533" class="LineNr">2533 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> %ecx <span class="Constant">"<-"</span>) <span id="L2534" class="LineNr">2534 </span> 3d/compare-eax-and 0/imm32 -<span id="L2535" class="LineNr">2535 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L2535" class="LineNr">2535 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L2536" class="LineNr">2536 </span> <span class="subxComment"># assert(is-identifier?(name))</span> <span id="L2537" class="LineNr">2537 </span> (<a href='mu.subx.html#L1897'>is-identifier?</a> %ecx) <span id="L2538" class="LineNr">2538 </span> 3d/compare-eax-and 0/imm32 -<span id="L2539" class="LineNr">2539 </span> 0f 84/jump-if-equal $parse-mu-stmt:abort/disp32 +<span id="L2539" class="LineNr">2539 </span> 0f 84/jump-if-= $parse-mu-stmt:abort/disp32 <span id="L2540" class="LineNr">2540 </span> <span class="subxComment">#</span> <span id="L2541" class="LineNr">2541 </span> (<a href='mu.subx.html#L2799'>lookup-or-define-var</a> %ecx *(ebp+0xc) *(ebp+0x10)) <span class="subxComment"># => eax</span> <span id="L2542" class="LineNr">2542 </span> (<a href='mu.subx.html#L3128'>append-list</a> <span class="SpecialChar"><a href='../069allocate.subx.html#L22'>Heap</a></span> %eax *(edi+0xc)) <span class="subxComment"># Stmt1-outputs => eax</span> @@ -2567,11 +2567,11 @@ if ('onhashchange' in window) { <span id="L2555" class="LineNr">2555 </span> <span class="subxComment"># if slice-empty?(word-slice) break</span> <span id="L2556" class="LineNr">2556 </span> (<a href='../072slice.subx.html#L9'>slice-empty?</a> %ecx) <span id="L2557" class="LineNr">2557 </span> 3d/compare-eax-and 0/imm32 -<span id="L2558" class="LineNr">2558 </span> 0f 85/jump-if-not-equal <span class="Constant">break</span>/disp32 +<span id="L2558" class="LineNr">2558 </span> 0f 85/jump-if-!= <span class="Constant">break</span>/disp32 <span id="L2559" class="LineNr">2559 </span> <span class="subxComment"># if (name == "<-") abort</span> <span id="L2560" class="LineNr">2560 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> %ecx <span class="Constant">"<-"</span>) <span id="L2561" class="LineNr">2561 </span> 3d/compare-eax-and 0/imm32 -<span id="L2562" class="LineNr">2562 </span> 0f 85/jump-if-not-equal $parse-mu-stmt:abort2/disp32 +<span id="L2562" class="LineNr">2562 </span> 0f 85/jump-if-!= $parse-mu-stmt:abort2/disp32 <span id="L2563" class="LineNr">2563 </span> <span class="subxComment">#</span> <span id="L2564" class="LineNr">2564 </span> (<a href='mu.subx.html#L2655'>lookup-var-or-literal</a> %ecx *(ebp+0xc)) <span class="subxComment"># => eax</span> <span id="L2565" class="LineNr">2565 </span> (<a href='mu.subx.html#L3128'>append-list</a> <span class="SpecialChar"><a href='../069allocate.subx.html#L22'>Heap</a></span> %eax *(edi+8)) <span class="subxComment"># Stmt1-inouts => eax</span> @@ -2635,7 +2635,7 @@ if ('onhashchange' in window) { <span id="L2623" class="LineNr">2623 </span> (<a href='../072slice.subx.html#L9'>slice-empty?</a> %ecx) <span id="L2624" class="LineNr">2624 </span> 3d/compare-eax-and 0/imm32 <span id="L2625" class="LineNr">2625 </span> b8/copy-to-eax 0/imm32/false/result <span class="subxComment"># restore result (if we're here it's still false)</span> -<span id="L2626" class="LineNr">2626 </span> 0f 85/jump-if-not-equal <span class="Constant">break</span>/disp32 +<span id="L2626" class="LineNr">2626 </span> 0f 85/jump-if-!= <span class="Constant">break</span>/disp32 <span id="L2627" class="LineNr">2627 </span> <span class="subxComment"># if slice-starts-with?(word-slice, '#') break</span> <span id="L2628" class="LineNr">2628 </span> <span class="subxS1Comment"># . eax = *word-slice->start</span> <span id="L2629" class="LineNr">2629 </span> 8b/-> *ecx 0/r32/eax @@ -2644,11 +2644,11 @@ if ('onhashchange' in window) { <span id="L2632" class="LineNr">2632 </span> <span class="subxS1Comment"># . if (eax == '#') break</span> <span id="L2633" class="LineNr">2633 </span> 3d/compare-eax-and 0x23/imm32/hash <span id="L2634" class="LineNr">2634 </span> b8/copy-to-eax 0/imm32/false/result <span class="subxComment"># restore result (if we're here it's still false)</span> -<span id="L2635" class="LineNr">2635 </span> 0f 84/jump-if-equal <span class="Constant">break</span>/disp32 +<span id="L2635" class="LineNr">2635 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32 <span id="L2636" class="LineNr">2636 </span> <span class="subxComment"># if slice-equal?(word-slice, '<-') return true</span> <span id="L2637" class="LineNr">2637 </span> (<a href='../072slice.subx.html#L91'>slice-equal?</a> %ecx <span class="Constant">"<-"</span>) <span id="L2638" class="LineNr">2638 </span> 3d/compare-eax-and 0/imm32 -<span id="L2639" class="LineNr">2639 </span> 74/jump-if-equal <span class="Constant">loop</span>/disp8 +<span id="L2639" class="LineNr">2639 </span> 74/jump-if-= <span class="Constant">loop</span>/disp8 <span id="L2640" class="LineNr">2640 </span> b8/copy-to-eax 1/imm32/true <span id="L2641" class="LineNr">2641 </span> } <span id="L2642" class="LineNr">2642 </span><span class="Constant">$stmt-has-outputs:end</span>: @@ -2676,7 +2676,7 @@ if ('onhashchange' in window) { <span id="L2664" class="LineNr">2664 </span> <span class="subxComment"># if slice-empty?(name) abort</span> <span id="L2665" class="LineNr">2665 </span> (<a href='../072slice.subx.html#L9'>slice-empty?</a> %esi) <span class="subxComment"># => eax</span> <span id="L2666" class="LineNr">2666 </span> 3d/compare-eax-and 0/imm32 -<span id="L2667" class="LineNr">2667 </span> 0f 85/jump-if-not-equal $lookup-var-or-literal:abort/disp32 +<span id="L2667" class="LineNr">2667 </span> 0f 85/jump-if-!= $lookup-var-or-literal:abort/disp32 <span id="L2668" class="LineNr">2668 </span> <span class="subxComment"># var ecx : byte = *name->start</span> <span id="L2669" class="LineNr">2669 </span> 8b/-> *esi 1/r32/ecx <span id="L2670" class="LineNr">2670 </span> 8a/copy-byte *ecx 1/r32/CL @@ -2685,12 +2685,12 @@ if ('onhashchange' in window) { <span id="L2673" class="LineNr">2673 </span> (<a href='../075print-int-decimal.subx.html#L307'>is-decimal-digit?</a> %ecx) <span class="subxComment"># => eax</span> <span id="L2674" class="LineNr">2674 </span> 81 7/subop/compare %eax 0/imm32 <span id="L2675" class="LineNr">2675 </span> { -<span id="L2676" class="LineNr">2676 </span> 74/jump-if-equal <span class="Constant">break</span>/disp8 +<span id="L2676" class="LineNr">2676 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L2677" class="LineNr">2677 </span> (<a href='mu.subx.html#L2954'>new-literal-integer</a> <span class="SpecialChar"><a href='../069allocate.subx.html#L22'>Heap</a></span> %esi) <span class="subxComment"># => eax</span> <span id="L2678" class="LineNr">2678 </span> } <span id="L2679" class="LineNr">2679 </span> <span class="subxComment"># otherwise return lookup-var(name, vars)</span> <span id="L2680" class="LineNr">2680 </span> { -<span id="L2681" class="LineNr">2681 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L2681" class="LineNr">2681 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L2682" class="LineNr">2682 </span> (<a href='mu.subx.html#L2703'>lookup-var</a> %esi *(ebp+0xc)) <span class="subxComment"># => eax</span> <span id="L2683" class="LineNr">2683 </span> } <span id="L2684" class="LineNr">2684 </span><span class="Constant">$lookup-var-or-literal:end</span>: @@ -2722,7 +2722,7 @@ if ('onhashchange' in window) { <span id="L2710" class="LineNr">2710 </span> (<a href='mu.subx.html#L2732'>lookup-var-helper</a> %eax *(ebp+0xc)) <span class="subxComment"># => eax</span> <span id="L2711" class="LineNr">2711 </span> <span class="subxComment"># if (result == 0) abort</span> <span id="L2712" class="LineNr">2712 </span> 3d/compare-eax-and 0/imm32 -<span id="L2713" class="LineNr">2713 </span> 74/jump-if-equal $lookup-var:abort/disp8 +<span id="L2713" class="LineNr">2713 </span> 74/jump-if-= $lookup-var:abort/disp8 <span id="L2714" class="LineNr">2714 </span><span class="Constant">$lookup-var:end</span>: <span id="L2715" class="LineNr">2715 </span> <span class="subxS1Comment"># . epilogue</span> <span id="L2716" class="LineNr">2716 </span> 89/<- %esp 5/r32/ebp @@ -2764,7 +2764,7 @@ if ('onhashchange' in window) { <span id="L2752" class="LineNr">2752 </span> 8b/-> *esi 3/r32/ebx <span id="L2753" class="LineNr">2753 </span> <span class="subxComment"># if (vars->top > vars->length) abort</span> <span id="L2754" class="LineNr">2754 </span> 3b/compare 0/r32/eax *(esi+4) -<span id="L2755" class="LineNr">2755 </span> 0f 8f/jump-if-greater $lookup-var-helper:error1/disp32 +<span id="L2755" class="LineNr">2755 </span> 0f 8f/jump-if-> $lookup-var-helper:error1/disp32 <span id="L2756" class="LineNr">2756 </span> <span class="subxComment"># var min/edx : (addr handle var) = vars->data</span> <span id="L2757" class="LineNr">2757 </span> 8d/copy-address *(esi+8) 2/r32/edx <span id="L2758" class="LineNr">2758 </span> <span class="subxComment"># var curr/ebx : (addr handle var) = &vars->data[vars->top - 4]</span> @@ -2774,14 +2774,14 @@ if ('onhashchange' in window) { <span id="L2762" class="LineNr">2762 </span> <span class="subxComment"># if (curr < min) return 0</span> <span id="L2763" class="LineNr">2763 </span> 39/compare %ebx 2/r32/edx <span id="L2764" class="LineNr">2764 </span> b8/copy-to-eax 0/imm32 -<span id="L2765" class="LineNr">2765 </span> 0f 82/jump-if-lesser-unsigned <span class="Constant">break</span>/disp32 +<span id="L2765" class="LineNr">2765 </span> 0f 82/jump-if-addr< <span class="Constant">break</span>/disp32 <span id="L2766" class="LineNr">2766 </span> <span class="subxComment"># var v/eax : (handle var) = *curr</span> <span id="L2767" class="LineNr">2767 </span> 8b/-> *ebx 0/r32/eax <span id="L2768" class="LineNr">2768 </span> <span class="subxComment"># if (v->name == name) return v</span> <span id="L2769" class="LineNr">2769 </span> (<a href='../054string-equal.subx.html#L16'>string-equal?</a> *eax *(ebp+8)) <span class="subxComment"># Var-name</span> <span id="L2770" class="LineNr">2770 </span> 3d/compare-eax-and 0/imm32 <span id="L2771" class="LineNr">2771 </span> 8b/-> *ebx 0/r32/eax -<span id="L2772" class="LineNr">2772 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L2772" class="LineNr">2772 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L2773" class="LineNr">2773 </span> <span class="subxComment"># curr -= 4</span> <span id="L2774" class="LineNr">2774 </span> 81 5/subop/subtract %ebx 4/imm32 <span id="L2775" class="LineNr">2775 </span> e9/jump <span class="Constant">loop</span>/disp32 @@ -2822,13 +2822,13 @@ if ('onhashchange' in window) { <span id="L2810" class="LineNr">2810 </span> { <span id="L2811" class="LineNr">2811 </span> <span class="subxComment"># if (result != 0) return</span> <span id="L2812" class="LineNr">2812 </span> 3d/compare-eax-and 0/imm32 -<span id="L2813" class="LineNr">2813 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L2813" class="LineNr">2813 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L2814" class="LineNr">2814 </span> <span class="subxComment"># if name is one of fn's outputs, return it</span> <span id="L2815" class="LineNr">2815 </span> { <span id="L2816" class="LineNr">2816 </span> (<a href='mu.subx.html#L2830'>find-in-function-outputs</a> *(ebp+0x10) %ecx) <span class="subxComment"># => eax</span> <span id="L2817" class="LineNr">2817 </span> 3d/compare-eax-and 0/imm32 <span id="L2818" class="LineNr">2818 </span> <span class="subxComment"># otherwise abort</span> -<span id="L2819" class="LineNr">2819 </span> 0f 84/jump-if-not-equal $lookup-var:abort/disp32 +<span id="L2819" class="LineNr">2819 </span> 0f 84/jump-if-!= $lookup-var:abort/disp32 <span id="L2820" class="LineNr">2820 </span> } <span id="L2821" class="LineNr">2821 </span> } <span id="L2822" class="LineNr">2822 </span><span class="Constant">$lookup-or-define-var:end</span>: @@ -2851,7 +2851,7 @@ if ('onhashchange' in window) { <span id="L2839" class="LineNr">2839 </span> <span class="subxComment"># while curr != null</span> <span id="L2840" class="LineNr">2840 </span> { <span id="L2841" class="LineNr">2841 </span> 81 7/subop/compare %ecx 0/imm32 -<span id="L2842" class="LineNr">2842 </span> 74/jump-if-equal <span class="Constant">break</span>/disp8 +<span id="L2842" class="LineNr">2842 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L2843" class="LineNr">2843 </span> <span class="subxComment"># var v : (handle var) = *curr</span> <span id="L2844" class="LineNr">2844 </span> 8b/-> *ecx 0/r32/eax <span class="subxComment"># List-value</span> <span id="L2845" class="LineNr">2845 </span> <span class="subxComment"># if (curr->name == name) return curr</span> @@ -2859,7 +2859,7 @@ if ('onhashchange' in window) { <span id="L2847" class="LineNr">2847 </span> (<a href='../054string-equal.subx.html#L16'>string-equal?</a> *eax *(ebp+0xc)) <span id="L2848" class="LineNr">2848 </span> 3d/compare-eax-and 0/imm32 <span id="L2849" class="LineNr">2849 </span> 58/pop-to-eax -<span id="L2850" class="LineNr">2850 </span> 75/jump-if-not-equal $find-in-function-outputs:end/disp8 +<span id="L2850" class="LineNr">2850 </span> 75/jump-if-!= $find-in-function-outputs:end/disp8 <span id="L2851" class="LineNr">2851 </span> <span class="subxComment"># curr = curr->next</span> <span id="L2852" class="LineNr">2852 </span> 8b/-> *(ecx+4) 1/r32/ecx <span class="subxComment"># List-next</span> <span id="L2853" class="LineNr">2853 </span> eb/jump <span class="Constant">loop</span>/disp8 @@ -2972,7 +2972,7 @@ if ('onhashchange' in window) { <span id="L2960" class="LineNr">2960 </span> <span class="subxComment"># if (!is-hex-int?(name)) abort</span> <span id="L2961" class="LineNr">2961 </span> (<a href='../067parse-hex.subx.html#L9'>is-hex-int?</a> *(ebp+0xc)) <span class="subxComment"># => eax</span> <span id="L2962" class="LineNr">2962 </span> 3d/compare-eax-and 0/imm32 -<span id="L2963" class="LineNr">2963 </span> 0f 84/jump-if-equal $new-literal-integer:abort/disp32 +<span id="L2963" class="LineNr">2963 </span> 0f 84/jump-if-= $new-literal-integer:abort/disp32 <span id="L2964" class="LineNr">2964 </span> <span class="subxComment"># var s/ecx : (addr array byte)</span> <span id="L2965" class="LineNr">2965 </span> (<a href='../072slice.subx.html#L1015'>slice-to-string</a> <span class="SpecialChar"><a href='../069allocate.subx.html#L22'>Heap</a></span> *(ebp+0xc)) <span class="subxComment"># => eax</span> <span id="L2966" class="LineNr">2966 </span> 89/<- %ecx 0/r32/eax @@ -3149,14 +3149,14 @@ if ('onhashchange' in window) { <span id="L3137" class="LineNr">3137 </span> 89/<- *eax 1/r32/ecx <span class="subxComment"># List-value</span> <span id="L3138" class="LineNr">3138 </span> <span class="subxComment"># if (list == null) return result</span> <span id="L3139" class="LineNr">3139 </span> 81 7/subop/compare *(ebp+0x10) 0/imm32 -<span id="L3140" class="LineNr">3140 </span> 74/jump-if-equal $new-list:end/disp8 +<span id="L3140" class="LineNr">3140 </span> 74/jump-if-= $new-list:end/disp8 <span id="L3141" class="LineNr">3141 </span> <span class="subxComment"># otherwise append</span> <span id="L3142" class="LineNr">3142 </span> <span class="subxComment"># var curr/ecx = list</span> <span id="L3143" class="LineNr">3143 </span> 8b/-> *(ebp+0x10) 1/r32/ecx <span id="L3144" class="LineNr">3144 </span> <span class="subxComment"># while (curr->next != null) curr = curr->next</span> <span id="L3145" class="LineNr">3145 </span> { <span id="L3146" class="LineNr">3146 </span> 81 7/subop/compare *(ecx+4) 0/imm32 <span class="subxComment"># List-next</span> -<span id="L3147" class="LineNr">3147 </span> 74/jump-if-equal <span class="Constant">break</span>/disp8 +<span id="L3147" class="LineNr">3147 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L3148" class="LineNr">3148 </span> <span class="subxComment"># curr = curr->next</span> <span id="L3149" class="LineNr">3149 </span> 8b/-> *(ecx+4) 1/r32/ecx <span id="L3150" class="LineNr">3150 </span> eb/jump <span class="Constant">loop</span>/disp8 @@ -3237,7 +3237,7 @@ if ('onhashchange' in window) { <span id="L3225" class="LineNr">3225 </span> { <span id="L3226" class="LineNr">3226 </span> <span class="subxComment"># if (curr == null) break</span> <span id="L3227" class="LineNr">3227 </span> 81 7/subop/compare %ecx 0/imm32 -<span id="L3228" class="LineNr">3228 </span> 0f 84/jump-if-equal <span class="Constant">break</span>/disp32 +<span id="L3228" class="LineNr">3228 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32 <span id="L3229" class="LineNr">3229 </span> (<a href='mu.subx.html#L3244'>emit-subx-function</a> %edi %ecx) <span id="L3230" class="LineNr">3230 </span> <span class="subxComment"># curr = curr->next</span> <span id="L3231" class="LineNr">3231 </span> 8b/-> *(ecx+0x14) 1/r32/ecx <span class="subxComment"># Function-next</span> @@ -3292,12 +3292,12 @@ if ('onhashchange' in window) { <span id="L3280" class="LineNr">3280 </span> { <span id="L3281" class="LineNr">3281 </span><span class="Constant">$emit-subx-block:check-empty</span>: <span id="L3282" class="LineNr">3282 </span> 81 7/subop/compare %esi 0/imm32 -<span id="L3283" class="LineNr">3283 </span> 0f 84/jump-if-equal <span class="Constant">break</span>/disp32 +<span id="L3283" class="LineNr">3283 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32 <span id="L3284" class="LineNr">3284 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"{\n"</span>) <span id="L3285" class="LineNr">3285 </span> { <span id="L3286" class="LineNr">3286 </span><span class="Constant">$emit-subx-block:stmt</span>: <span id="L3287" class="LineNr">3287 </span> 81 7/subop/compare %esi 0/imm32 -<span id="L3288" class="LineNr">3288 </span> 74/jump-if-equal <span class="Constant">break</span>/disp8 +<span id="L3288" class="LineNr">3288 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L3289" class="LineNr">3289 </span> (<a href='mu.subx.html#L3302'>emit-subx-statement</a> *(ebp+8) *esi <span class="SpecialChar"><a href='mu.subx.html#L3353'>Primitives</a></span> *<span class="SpecialChar"><a href='mu.subx.html#L249'>Program</a></span>) <span id="L3290" class="LineNr">3290 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="SpecialChar"><a href='../051test.subx.html#L83'>Newline</a></span>) <span id="L3291" class="LineNr">3291 </span> 8b/-> *(esi+4) 6/r32/esi <span class="subxComment"># List-next</span> @@ -3323,7 +3323,7 @@ if ('onhashchange' in window) { <span id="L3311" class="LineNr">3311 </span><span class="Constant">$emit-subx-statement:primitive</span>: <span id="L3312" class="LineNr">3312 </span> (<a href='mu.subx.html#L4414'>find-matching-primitive</a> *(ebp+0x10) *(ebp+0xc)) <span class="subxComment"># primitives, stmt => curr/eax</span> <span id="L3313" class="LineNr">3313 </span> 3d/compare-eax-and 0/imm32 -<span id="L3314" class="LineNr">3314 </span> 74/jump-if-equal <span class="Constant">break</span>/disp8 +<span id="L3314" class="LineNr">3314 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L3315" class="LineNr">3315 </span> (<a href='mu.subx.html#L4105'>emit-subx-primitive</a> *(ebp+8) *(ebp+0xc) %eax) <span class="subxComment"># out, stmt, curr</span> <span id="L3316" class="LineNr">3316 </span> e9/jump $emit-subx-statement:end/disp32 <span id="L3317" class="LineNr">3317 </span> } @@ -3332,7 +3332,7 @@ if ('onhashchange' in window) { <span id="L3320" class="LineNr">3320 </span><span class="Constant">$emit-subx-statement:call</span>: <span id="L3321" class="LineNr">3321 </span> (<a href='mu.subx.html#L4380'>find-matching-function</a> *(ebp+0x14) *(ebp+0xc)) <span class="subxComment"># functions, stmt => curr/eax</span> <span id="L3322" class="LineNr">3322 </span> 3d/compare-eax-and 0/imm32 -<span id="L3323" class="LineNr">3323 </span> 74/jump-if-equal <span class="Constant">break</span>/disp8 +<span id="L3323" class="LineNr">3323 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L3324" class="LineNr">3324 </span> (<a href='mu.subx.html#L4260'>emit-subx-call</a> *(ebp+8) *(ebp+0xc) %eax) <span class="subxComment"># out, stmt, curr</span> <span id="L3325" class="LineNr">3325 </span> e9/jump $emit-subx-statement:end/disp32 <span id="L3326" class="LineNr">3326 </span> } @@ -4148,7 +4148,7 @@ if ('onhashchange' in window) { <span id="L4136" class="LineNr">4136 </span> 50/push-eax <span id="L4137" class="LineNr">4137 </span> <span class="subxComment"># if (l == 0) return</span> <span id="L4138" class="LineNr">4138 </span> 81 7/subop/compare *(ebp+0xc) 0/imm32 -<span id="L4139" class="LineNr">4139 </span> 74/jump-if-equal $emit-subx-rm32:end/disp8 +<span id="L4139" class="LineNr">4139 </span> 74/jump-if-= $emit-subx-rm32:end/disp8 <span id="L4140" class="LineNr">4140 </span> <span class="subxComment">#</span> <span id="L4141" class="LineNr">4141 </span> (<a href='mu.subx.html#L4151'>get-stmt-operand-from-arg-location</a> *(ebp+0x10) *(ebp+0xc)) <span class="subxComment"># stmt, l => var/eax</span> <span id="L4142" class="LineNr">4142 </span> (<a href='mu.subx.html#L4345'>emit-subx-var-as-rm32</a> *(ebp+8) %eax) <span class="subxComment"># out, var</span> @@ -4173,7 +4173,7 @@ if ('onhashchange' in window) { <span id="L4161" class="LineNr">4161 </span> <span class="subxComment"># if (l == 1) return stmt->inouts->var</span> <span id="L4162" class="LineNr">4162 </span> { <span id="L4163" class="LineNr">4163 </span> 3d/compare-eax-and 1/imm32 -<span id="L4164" class="LineNr">4164 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L4164" class="LineNr">4164 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L4165" class="LineNr">4165 </span><span class="Constant">$get-stmt-operand-from-arg-location:1</span>: <span id="L4166" class="LineNr">4166 </span> 8b/-> *(ecx+8) 0/r32/eax <span class="subxComment"># Stmt1-inouts</span> <span id="L4167" class="LineNr">4167 </span> 8b/-> *eax 0/r32/eax <span class="subxComment"># Operand-var</span> @@ -4182,7 +4182,7 @@ if ('onhashchange' in window) { <span id="L4170" class="LineNr">4170 </span> <span class="subxComment"># if (l == 2) return stmt->inouts->next->var</span> <span id="L4171" class="LineNr">4171 </span> { <span id="L4172" class="LineNr">4172 </span> 3d/compare-eax-and 2/imm32 -<span id="L4173" class="LineNr">4173 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L4173" class="LineNr">4173 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L4174" class="LineNr">4174 </span><span class="Constant">$get-stmt-operand-from-arg-location:2</span>: <span id="L4175" class="LineNr">4175 </span> 8b/-> *(ecx+8) 0/r32/eax <span class="subxComment"># Stmt1-inouts</span> <span id="L4176" class="LineNr">4176 </span> 8b/-> *(eax+4) 0/r32/eax <span class="subxComment"># Operand-next</span> @@ -4192,7 +4192,7 @@ if ('onhashchange' in window) { <span id="L4180" class="LineNr">4180 </span> <span class="subxComment"># if (l == 3) return stmt->outputs</span> <span id="L4181" class="LineNr">4181 </span> { <span id="L4182" class="LineNr">4182 </span> 3d/compare-eax-and 3/imm32 -<span id="L4183" class="LineNr">4183 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L4183" class="LineNr">4183 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L4184" class="LineNr">4184 </span><span class="Constant">$get-stmt-operand-from-arg-location:3</span>: <span id="L4185" class="LineNr">4185 </span> 8b/-> *(ecx+0xc) 0/r32/eax <span class="subxComment"># Stmt1-outputs</span> <span id="L4186" class="LineNr">4186 </span> 8b/-> *eax 0/r32/eax <span class="subxComment"># Operand-var</span> @@ -4229,7 +4229,7 @@ if ('onhashchange' in window) { <span id="L4217" class="LineNr">4217 </span> 51/push-ecx <span id="L4218" class="LineNr">4218 </span> <span class="subxComment"># if (location == 0) return</span> <span id="L4219" class="LineNr">4219 </span> 81 7/subop/compare *(ebp+0xc) 0/imm32 -<span id="L4220" class="LineNr">4220 </span> 0f 84/jump-if-equal $emit-subx-r32:end/disp32 +<span id="L4220" class="LineNr">4220 </span> 0f 84/jump-if-= $emit-subx-r32:end/disp32 <span id="L4221" class="LineNr">4221 </span> <span class="subxComment">#</span> <span id="L4222" class="LineNr">4222 </span> (<a href='mu.subx.html#L4151'>get-stmt-operand-from-arg-location</a> *(ebp+0x10) *(ebp+0xc)) <span class="subxComment"># stmt, l => var/eax</span> <span id="L4223" class="LineNr">4223 </span> (<a href='../081table.subx.html#L1382'>maybe-get</a> <span class="SpecialChar"><a href='../090register-names.subx.html#L2'>Registers</a></span> *(eax+0x10) 8) <span class="subxComment"># Var-register => eax : (addr register-index)</span> @@ -4254,7 +4254,7 @@ if ('onhashchange' in window) { <span id="L4242" class="LineNr">4242 </span> 51/push-ecx <span id="L4243" class="LineNr">4243 </span> <span class="subxComment"># if (location == 0) return</span> <span id="L4244" class="LineNr">4244 </span> 81 7/subop/compare *(ebp+0xc) 0/imm32 -<span id="L4245" class="LineNr">4245 </span> 74/jump-if-equal $emit-subx-imm32:end/disp8 +<span id="L4245" class="LineNr">4245 </span> 74/jump-if-= $emit-subx-imm32:end/disp8 <span id="L4246" class="LineNr">4246 </span> <span class="subxComment">#</span> <span id="L4247" class="LineNr">4247 </span> (<a href='mu.subx.html#L4151'>get-stmt-operand-from-arg-location</a> *(ebp+0x10) *(ebp+0xc)) <span class="subxComment"># stmt, l => var/eax</span> <span id="L4248" class="LineNr">4248 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="SpecialChar"><a href='../051test.subx.html#L94'>Space</a></span>) @@ -4288,7 +4288,7 @@ if ('onhashchange' in window) { <span id="L4276" class="LineNr">4276 </span> { <span id="L4277" class="LineNr">4277 </span> <span class="subxComment"># if (curr == null) break</span> <span id="L4278" class="LineNr">4278 </span> 81 7/subop/compare %ecx 0/imm32 -<span id="L4279" class="LineNr">4279 </span> 74/jump-if-equal <span class="Constant">break</span>/disp8 +<span id="L4279" class="LineNr">4279 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L4280" class="LineNr">4280 </span> <span class="subxComment">#</span> <span id="L4281" class="LineNr">4281 </span> (<a href='mu.subx.html#L4297'>emit-subx-call-operand</a> *(ebp+8) *ecx) <span id="L4282" class="LineNr">4282 </span> <span class="subxComment"># curr = curr->next</span> @@ -4317,7 +4317,7 @@ if ('onhashchange' in window) { <span id="L4305" class="LineNr">4305 </span> <span class="subxComment"># if (operand->register) emit "%__"</span> <span id="L4306" class="LineNr">4306 </span> { <span id="L4307" class="LineNr">4307 </span> 81 7/subop/compare *(eax+0x10) 0/imm32 <span class="subxComment"># Var-register</span> -<span id="L4308" class="LineNr">4308 </span> 74/jump-if-equal <span class="Constant">break</span>/disp8 +<span id="L4308" class="LineNr">4308 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L4309" class="LineNr">4309 </span><span class="Constant">$emit-subx-call-operand:register</span>: <span id="L4310" class="LineNr">4310 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" %"</span>) <span id="L4311" class="LineNr">4311 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *(eax+0x10)) <span class="subxComment"># Var-register</span> @@ -4326,7 +4326,7 @@ if ('onhashchange' in window) { <span id="L4314" class="LineNr">4314 </span> <span class="subxComment"># else if (operand->stack-offset) emit "*(ebp+__)"</span> <span id="L4315" class="LineNr">4315 </span> { <span id="L4316" class="LineNr">4316 </span> 81 7/subop/compare *(eax+0xc) 0/imm32 <span class="subxComment"># Var-stack-offset</span> -<span id="L4317" class="LineNr">4317 </span> 74/jump-if-equal <span class="Constant">break</span>/disp8 +<span id="L4317" class="LineNr">4317 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L4318" class="LineNr">4318 </span><span class="Constant">$emit-subx-call-operand:stack</span>: <span id="L4319" class="LineNr">4319 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="SpecialChar"><a href='../051test.subx.html#L94'>Space</a></span>) <span id="L4320" class="LineNr">4320 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"*(ebp+"</span>) @@ -4341,7 +4341,7 @@ if ('onhashchange' in window) { <span id="L4329" class="LineNr">4329 </span> 8b/-> *(eax+4) 0/r32/eax <span class="subxComment"># Var-type</span> <span id="L4330" class="LineNr">4330 </span> 81 7/subop/compare *eax 0/imm32 <span class="subxComment"># Tree-left</span> <span id="L4331" class="LineNr">4331 </span> 58/pop-to-eax -<span id="L4332" class="LineNr">4332 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L4332" class="LineNr">4332 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L4333" class="LineNr">4333 </span><span class="Constant">$emit-subx-call-operand:literal</span>: <span id="L4334" class="LineNr">4334 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="SpecialChar"><a href='../051test.subx.html#L94'>Space</a></span>) <span id="L4335" class="LineNr">4335 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *eax) @@ -4365,7 +4365,7 @@ if ('onhashchange' in window) { <span id="L4353" class="LineNr">4353 </span> <span class="subxComment"># if (operand->register) emit "%__"</span> <span id="L4354" class="LineNr">4354 </span> { <span id="L4355" class="LineNr">4355 </span> 81 7/subop/compare *(eax+0x10) 0/imm32 <span class="subxComment"># Var-register</span> -<span id="L4356" class="LineNr">4356 </span> 74/jump-if-equal <span class="Constant">break</span>/disp8 +<span id="L4356" class="LineNr">4356 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L4357" class="LineNr">4357 </span><span class="Constant">$emit-subx-var-as-rm32:register</span>: <span id="L4358" class="LineNr">4358 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" %"</span>) <span id="L4359" class="LineNr">4359 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *(eax+0x10)) <span class="subxComment"># Var-register</span> @@ -4373,7 +4373,7 @@ if ('onhashchange' in window) { <span id="L4361" class="LineNr">4361 </span> <span class="subxComment"># else if (operand->stack-offset) emit "*(ebp+__)"</span> <span id="L4362" class="LineNr">4362 </span> { <span id="L4363" class="LineNr">4363 </span> 81 7/subop/compare *(eax+0xc) 0/imm32 <span class="subxComment"># Var-stack-offset</span> -<span id="L4364" class="LineNr">4364 </span> 74/jump-if-equal <span class="Constant">break</span>/disp8 +<span id="L4364" class="LineNr">4364 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L4365" class="LineNr">4365 </span><span class="Constant">$emit-subx-var-as-rm32:stack</span>: <span id="L4366" class="LineNr">4366 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="SpecialChar"><a href='../051test.subx.html#L94'>Space</a></span>) <span id="L4367" class="LineNr">4367 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"*(ebp+"</span>) @@ -4400,12 +4400,12 @@ if ('onhashchange' in window) { <span id="L4388" class="LineNr">4388 </span> { <span id="L4389" class="LineNr">4389 </span> <span class="subxComment"># if (curr == null) break</span> <span id="L4390" class="LineNr">4390 </span> 81 7/subop/compare %ecx 0/imm32 -<span id="L4391" class="LineNr">4391 </span> 74/jump-if-equal <span class="Constant">break</span>/disp8 +<span id="L4391" class="LineNr">4391 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L4392" class="LineNr">4392 </span> <span class="subxComment"># if match(stmt, curr) return curr</span> <span id="L4393" class="LineNr">4393 </span> { <span id="L4394" class="LineNr">4394 </span> (<a href='mu.subx.html#L4456'>mu-stmt-matches-function?</a> *(ebp+0xc) %ecx) <span class="subxComment"># => eax</span> <span id="L4395" class="LineNr">4395 </span> 3d/compare-eax-and 0/imm32 -<span id="L4396" class="LineNr">4396 </span> 74/jump-if-equal <span class="Constant">break</span>/disp8 +<span id="L4396" class="LineNr">4396 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L4397" class="LineNr">4397 </span> 89/<- %eax 1/r32/ecx <span id="L4398" class="LineNr">4398 </span> eb/jump $find-matching-function:end/disp8 <span id="L4399" class="LineNr">4399 </span> } @@ -4435,7 +4435,7 @@ if ('onhashchange' in window) { <span id="L4423" class="LineNr">4423 </span><span class="Constant">$find-matching-primitive:loop</span>: <span id="L4424" class="LineNr">4424 </span> <span class="subxComment"># if (curr == null) break</span> <span id="L4425" class="LineNr">4425 </span> 81 7/subop/compare %ecx 0/imm32 -<span id="L4426" class="LineNr">4426 </span> 0f 84/jump-if-equal <span class="Constant">break</span>/disp32 +<span id="L4426" class="LineNr">4426 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32 <span id="L4427" class="LineNr">4427 </span><span class="CommentedCode">#? (write-buffered Stderr "prim: ")</span> <span id="L4428" class="LineNr">4428 </span><span class="CommentedCode">#? (write-buffered Stderr *ecx) # Primitive-name</span> <span id="L4429" class="LineNr">4429 </span><span class="CommentedCode">#? (write-buffered Stderr " => ")</span> @@ -4446,7 +4446,7 @@ if ('onhashchange' in window) { <span id="L4434" class="LineNr">4434 </span> { <span id="L4435" class="LineNr">4435 </span> (<a href='mu.subx.html#L4474'>mu-stmt-matches-primitive?</a> *(ebp+0xc) %ecx) <span class="subxComment"># => eax</span> <span id="L4436" class="LineNr">4436 </span> 3d/compare-eax-and 0/imm32 -<span id="L4437" class="LineNr">4437 </span> 74/jump-if-equal <span class="Constant">break</span>/disp8 +<span id="L4437" class="LineNr">4437 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L4438" class="LineNr">4438 </span> 89/<- %eax 1/r32/ecx <span id="L4439" class="LineNr">4439 </span> eb/jump $find-matching-primitive:end/disp8 <span id="L4440" class="LineNr">4440 </span> } @@ -4507,7 +4507,7 @@ if ('onhashchange' in window) { <span id="L4495" class="LineNr">4495 </span> <span class="subxComment"># if (primitive->name != stmt->operation) return false</span> <span id="L4496" class="LineNr">4496 </span> (<a href='../054string-equal.subx.html#L16'>string-equal?</a> *(ecx+4) *edx) <span class="subxComment"># Stmt1-operation, Primitive-name => eax</span> <span id="L4497" class="LineNr">4497 </span> 3d/compare-eax-and 0/imm32 -<span id="L4498" class="LineNr">4498 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L4498" class="LineNr">4498 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L4499" class="LineNr">4499 </span> b8/copy-to-eax 0/imm32 <span id="L4500" class="LineNr">4500 </span> e9/jump $mu-stmt-matches-primitive?:end/disp32 <span id="L4501" class="LineNr">4501 </span> } @@ -4519,11 +4519,11 @@ if ('onhashchange' in window) { <span id="L4507" class="LineNr">4507 </span> <span class="subxComment"># if (curr == 0 && curr2 == 0) move on to check outputs</span> <span id="L4508" class="LineNr">4508 </span> { <span id="L4509" class="LineNr">4509 </span> 81 7/subop/compare %esi 0/imm32 -<span id="L4510" class="LineNr">4510 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L4510" class="LineNr">4510 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L4511" class="LineNr">4511 </span><span class="Constant">$mu-stmt-matches-primitive?:stmt-inout-is-null</span>: <span id="L4512" class="LineNr">4512 </span> { <span id="L4513" class="LineNr">4513 </span> 81 7/subop/compare %edi 0/imm32 -<span id="L4514" class="LineNr">4514 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L4514" class="LineNr">4514 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L4515" class="LineNr">4515 </span> <span class="subxComment">#</span> <span id="L4516" class="LineNr">4516 </span> e9/jump $mu-stmt-matches-primitive?:check-outputs/disp32 <span id="L4517" class="LineNr">4517 </span> } @@ -4534,7 +4534,7 @@ if ('onhashchange' in window) { <span id="L4522" class="LineNr">4522 </span> <span class="subxComment"># if (curr2 == 0) return false</span> <span id="L4523" class="LineNr">4523 </span> { <span id="L4524" class="LineNr">4524 </span> 81 7/subop/compare %edi 0/imm32 -<span id="L4525" class="LineNr">4525 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L4525" class="LineNr">4525 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L4526" class="LineNr">4526 </span><span class="Constant">$mu-stmt-matches-primitive?:prim-inout-is-null</span>: <span id="L4527" class="LineNr">4527 </span> b8/copy-to-eax 0/imm32/false <span id="L4528" class="LineNr">4528 </span> e9/jump $mu-stmt-matches-primitive?:end/disp32 @@ -4543,7 +4543,7 @@ if ('onhashchange' in window) { <span id="L4531" class="LineNr">4531 </span> { <span id="L4532" class="LineNr">4532 </span> (<a href='mu.subx.html#L4600'>operand-matches-primitive?</a> *esi *edi) <span class="subxComment"># => eax</span> <span id="L4533" class="LineNr">4533 </span> 3d/compare-eax-and 0/imm32 -<span id="L4534" class="LineNr">4534 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L4534" class="LineNr">4534 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L4535" class="LineNr">4535 </span> b8/copy-to-eax 0/imm32/false <span id="L4536" class="LineNr">4536 </span> e9/jump $mu-stmt-matches-primitive?:end/disp32 <span id="L4537" class="LineNr">4537 </span> } @@ -4562,10 +4562,10 @@ if ('onhashchange' in window) { <span id="L4550" class="LineNr">4550 </span> { <span id="L4551" class="LineNr">4551 </span><span class="Constant">$mu-stmt-matches-primitive?:check-output</span>: <span id="L4552" class="LineNr">4552 </span> 81 7/subop/compare %esi 0/imm32 -<span id="L4553" class="LineNr">4553 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L4553" class="LineNr">4553 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L4554" class="LineNr">4554 </span> { <span id="L4555" class="LineNr">4555 </span> 81 7/subop/compare %edi 0/imm32 -<span id="L4556" class="LineNr">4556 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L4556" class="LineNr">4556 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L4557" class="LineNr">4557 </span> <span class="subxComment"># return true</span> <span id="L4558" class="LineNr">4558 </span> b8/copy-to-eax 1/imm32 <span id="L4559" class="LineNr">4559 </span> e9/jump $mu-stmt-matches-primitive?:end/disp32 @@ -4577,7 +4577,7 @@ if ('onhashchange' in window) { <span id="L4565" class="LineNr">4565 </span> <span class="subxComment"># if (curr2 == 0) return false</span> <span id="L4566" class="LineNr">4566 </span> { <span id="L4567" class="LineNr">4567 </span> 81 7/subop/compare %edi 0/imm32 -<span id="L4568" class="LineNr">4568 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L4568" class="LineNr">4568 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L4569" class="LineNr">4569 </span> b8/copy-to-eax 0/imm32 <span id="L4570" class="LineNr">4570 </span> e9/jump $mu-stmt-matches-primitive?:end/disp32 <span id="L4571" class="LineNr">4571 </span> } @@ -4585,7 +4585,7 @@ if ('onhashchange' in window) { <span id="L4573" class="LineNr">4573 </span> { <span id="L4574" class="LineNr">4574 </span> (<a href='mu.subx.html#L4600'>operand-matches-primitive?</a> *esi *edi) <span class="subxComment"># List-value List-value => eax</span> <span id="L4575" class="LineNr">4575 </span> 3d/compare-eax-and 0/imm32 -<span id="L4576" class="LineNr">4576 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L4576" class="LineNr">4576 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L4577" class="LineNr">4577 </span> b8/copy-to-eax 0/imm32 <span id="L4578" class="LineNr">4578 </span> e9/jump $mu-stmt-matches-primitive?:end/disp32 <span id="L4579" class="LineNr">4579 </span> } @@ -4624,28 +4624,28 @@ if ('onhashchange' in window) { <span id="L4612" class="LineNr">4612 </span> (<a href='mu.subx.html#L4649'>type-equal?</a> *(esi+4) *(edi+4)) <span class="subxComment"># Var-type, Var-type => eax</span> <span id="L4613" class="LineNr">4613 </span> 3d/compare-eax-and 0/imm32 <span id="L4614" class="LineNr">4614 </span> b8/copy-to-eax 0/imm32/false -<span id="L4615" class="LineNr">4615 </span> 74/jump-if-equal $operand-matches-primitive?:end/disp8 +<span id="L4615" class="LineNr">4615 </span> 74/jump-if-= $operand-matches-primitive?:end/disp8 <span id="L4616" class="LineNr">4616 </span> <span class="subxComment"># return false if var->register doesn't match prim-var->register</span> <span id="L4617" class="LineNr">4617 </span> { <span id="L4618" class="LineNr">4618 </span> <span class="subxComment"># if addresses are equal, don't return here</span> <span id="L4619" class="LineNr">4619 </span> 8b/-> *(esi+0x10) 0/r32/eax <span id="L4620" class="LineNr">4620 </span> 39/compare *(edi+0x10) 0/r32/eax -<span id="L4621" class="LineNr">4621 </span> 74/jump-if-equal <span class="Constant">break</span>/disp8 +<span id="L4621" class="LineNr">4621 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L4622" class="LineNr">4622 </span> <span class="subxComment"># if either address is 0, return false</span> <span id="L4623" class="LineNr">4623 </span> 3d/compare-eax-and 0/imm32 -<span id="L4624" class="LineNr">4624 </span> 74/jump-if-equal $operand-matches-primitive?:end/disp8 <span class="subxComment"># eax goes from meaning var->register to result</span> +<span id="L4624" class="LineNr">4624 </span> 74/jump-if-= $operand-matches-primitive?:end/disp8 <span class="subxComment"># eax goes from meaning var->register to result</span> <span id="L4625" class="LineNr">4625 </span> 81 7/subop/compare *(edi+0x10) 0/imm32 -<span id="L4626" class="LineNr">4626 </span> 74/jump-if-equal $operand-matches-primitive?:end/disp8 <span class="subxComment"># eax goes from meaning var->register to result</span> +<span id="L4626" class="LineNr">4626 </span> 74/jump-if-= $operand-matches-primitive?:end/disp8 <span class="subxComment"># eax goes from meaning var->register to result</span> <span id="L4627" class="LineNr">4627 </span> <span class="subxComment"># if prim-var->register is "*", return true</span> <span id="L4628" class="LineNr">4628 </span> (<a href='../054string-equal.subx.html#L16'>string-equal?</a> *(edi+0x10) <span class="Constant">"*"</span>) <span class="subxComment"># Var-register</span> <span id="L4629" class="LineNr">4629 </span> 3d/compare-eax-and 0/imm32 <span id="L4630" class="LineNr">4630 </span> b8/copy-to-eax 1/imm32/true -<span id="L4631" class="LineNr">4631 </span> 75/jump-if-not-equal $operand-matches-primitive?:end/disp8 +<span id="L4631" class="LineNr">4631 </span> 75/jump-if-!= $operand-matches-primitive?:end/disp8 <span id="L4632" class="LineNr">4632 </span> <span class="subxComment"># if string contents don't match, return false</span> <span id="L4633" class="LineNr">4633 </span> (<a href='../054string-equal.subx.html#L16'>string-equal?</a> *(esi+0x10) *(edi+0x10)) <span class="subxComment"># Var-register Var-register</span> <span id="L4634" class="LineNr">4634 </span> 3d/compare-eax-and 0/imm32 <span id="L4635" class="LineNr">4635 </span> b8/copy-to-eax 0/imm32/false -<span id="L4636" class="LineNr">4636 </span> 74/jump-if-equal $operand-matches-primitive?:end/disp8 +<span id="L4636" class="LineNr">4636 </span> 74/jump-if-= $operand-matches-primitive?:end/disp8 <span id="L4637" class="LineNr">4637 </span> } <span id="L4638" class="LineNr">4638 </span> <span class="subxComment"># return true</span> <span id="L4639" class="LineNr">4639 </span> b8/copy-to-eax 1/imm32/true @@ -4673,19 +4673,19 @@ if ('onhashchange' in window) { <span id="L4661" class="LineNr">4661 </span> 8b/-> %ecx 0/r32/eax <span class="subxComment"># Var-type</span> <span id="L4662" class="LineNr">4662 </span> 39/compare %edx 0/r32/eax <span class="subxComment"># Var-type</span> <span id="L4663" class="LineNr">4663 </span> b8/copy-to-eax 1/imm32/true -<span id="L4664" class="LineNr">4664 </span> 0f 84/jump-if-equal $type-equal?:end/disp32 +<span id="L4664" class="LineNr">4664 </span> 0f 84/jump-if-= $type-equal?:end/disp32 <span id="L4665" class="LineNr">4665 </span> <span class="subxComment"># if (a == 0) return false</span> <span id="L4666" class="LineNr">4666 </span> 81 7/subop/compare %ecx 0/imm32 <span id="L4667" class="LineNr">4667 </span> b8/copy-to-eax 0/imm32/false -<span id="L4668" class="LineNr">4668 </span> 0f 84/jump-if-equal $type-equal?:end/disp32 +<span id="L4668" class="LineNr">4668 </span> 0f 84/jump-if-= $type-equal?:end/disp32 <span id="L4669" class="LineNr">4669 </span> <span class="subxComment"># if (b == 0) return false</span> <span id="L4670" class="LineNr">4670 </span> 81 7/subop/compare %edx 0/imm32 <span id="L4671" class="LineNr">4671 </span> b8/copy-to-eax 0/imm32/false -<span id="L4672" class="LineNr">4672 </span> 0f 84/jump-if-equal $type-equal?:end/disp32 +<span id="L4672" class="LineNr">4672 </span> 0f 84/jump-if-= $type-equal?:end/disp32 <span id="L4673" class="LineNr">4673 </span> <span class="subxComment"># if (!type-equal?(a->left, b->left)) return false</span> <span id="L4674" class="LineNr">4674 </span> (<a href='mu.subx.html#L4649'>type-equal?</a> *ecx *edx) <span class="subxComment"># Tree-left, Tree-left => eax</span> <span id="L4675" class="LineNr">4675 </span> 3d/compare-eax-and 0/imm32 -<span id="L4676" class="LineNr">4676 </span> 0f 84/jump-if-equal $type-equal?:end/disp32 +<span id="L4676" class="LineNr">4676 </span> 0f 84/jump-if-= $type-equal?:end/disp32 <span id="L4677" class="LineNr">4677 </span> <span class="subxComment"># return type-equal?(a->right, b->right</span> <span id="L4678" class="LineNr">4678 </span> (<a href='mu.subx.html#L4649'>type-equal?</a> *(ecx+4) *(edx+4)) <span class="subxComment"># Tree-right, Tree-right => eax</span> <span id="L4679" class="LineNr">4679 </span><span class="Constant">$type-equal?:end</span>: diff --git a/html/apps/mulisp.subx.html b/html/apps/mulisp.subx.html index 3bbb6b82..cf34f56b 100644 --- a/html/apps/mulisp.subx.html +++ b/html/apps/mulisp.subx.html @@ -76,11 +76,11 @@ if ('onhashchange' in window) { <span id="L18" class="LineNr"> 18 </span> { <span id="L19" class="LineNr"> 19 </span> <span class="subxComment"># if (argc <= 1) break</span> <span id="L20" class="LineNr"> 20 </span> 81 7/subop/compare *ebp 1/imm32 -<span id="L21" class="LineNr"> 21 </span> 7e/jump-if-lesser-or-equal <span class="Constant">break</span>/disp8 +<span id="L21" class="LineNr"> 21 </span> 7e/jump-if-<= <span class="Constant">break</span>/disp8 <span id="L22" class="LineNr"> 22 </span> <span class="subxComment"># if (argv[1] != "test")) break</span> <span id="L23" class="LineNr"> 23 </span> (<a href='../052kernel-string-equal.subx.html#L33'>kernel-string-equal?</a> *(ebp+8) <span class="Constant">"test"</span>) <span class="subxComment"># => eax</span> <span id="L24" class="LineNr"> 24 </span> 3d/compare-eax-and 0/imm32 -<span id="L25" class="LineNr"> 25 </span> 74/jump-if-equal <span class="Constant">break</span>/disp8 +<span id="L25" class="LineNr"> 25 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L26" class="LineNr"> 26 </span> <span class="subxComment">#</span> <span id="L27" class="LineNr"> 27 </span> (run-tests) <span id="L28" class="LineNr"> 28 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span> @@ -142,7 +142,7 @@ if ('onhashchange' in window) { <span id="L84" class="LineNr"> 84 </span> (<a href='mulisp.subx.html#L107'>lisp-read</a> <span class="SpecialChar"><a href='../061read-byte.subx.html#L14'>Stdin</a></span>) <span class="subxComment"># => eax : (handle cell)</span> <span id="L85" class="LineNr"> 85 </span> <span class="subxComment"># if (eax == 0) break</span> <span id="L86" class="LineNr"> 86 </span> 3d/compare-eax-and 0/imm32 -<span id="L87" class="LineNr"> 87 </span> 74/jump-if-equal <span class="Constant">break</span>/disp8 +<span id="L87" class="LineNr"> 87 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L88" class="LineNr"> 88 </span> <span class="subxComment">#</span> <span id="L89" class="LineNr"> 89 </span> (<a href='mulisp.subx.html#L201'>lisp-eval</a> %eax) <span class="subxComment"># => eax : (handle cell)</span> <span id="L90" class="LineNr"> 90 </span> (<a href='mulisp.subx.html#L214'>lisp-print</a> <span class="SpecialChar"><a href='../064write-byte.subx.html#L10'>Stdout</a></span> %eax) @@ -181,7 +181,7 @@ if ('onhashchange' in window) { <span id="L123" class="LineNr">123 </span> <span class="subxComment"># if (s->write == 0) return null</span> <span id="L124" class="LineNr">124 </span> { <span id="L125" class="LineNr">125 </span> 81 7/subop/compare *ecx 0/imm32 -<span id="L126" class="LineNr">126 </span> 75/jump-if-not-equal <span class="Constant">break</span>/disp8 +<span id="L126" class="LineNr">126 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L127" class="LineNr">127 </span> b8/copy-to-eax 0/imm32/eof <span id="L128" class="LineNr">128 </span> eb/jump $lisp-read:end/disp8 <span id="L129" class="LineNr">129 </span> } diff --git a/html/apps/pack.subx.html b/html/apps/pack.subx.html index bd5015eb..d3cb17a9 100644 --- a/html/apps/pack.subx.html +++ b/html/apps/pack.subx.html @@ -97,7 +97,7 @@ if ('onhashchange' in window) { <span id="L35" class="LineNr"> 35 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run_tests()</span> <span id="L36" class="LineNr"> 36 </span> <span class="subxComment"># if (argc <= 1) goto interactive</span> <span id="L37" class="LineNr"> 37 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/disp8 1/imm32 <span class="subxComment"># compare *ebp</span> -<span id="L38" class="LineNr"> 38 </span> 7e/jump-if-lesser-or-equal $subx-pack-main:interactive/disp8 +<span id="L38" class="LineNr"> 38 </span> 7e/jump-if-<= $subx-pack-main:interactive/disp8 <span id="L39" class="LineNr"> 39 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto interactive</span> <span id="L40" class="LineNr"> 40 </span> <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], "test")</span> <span id="L41" class="LineNr"> 41 </span> <span class="subxS2Comment"># . . push args</span> @@ -109,7 +109,7 @@ if ('onhashchange' in window) { <span id="L47" class="LineNr"> 47 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L48" class="LineNr"> 48 </span> <span class="subxS1Comment"># . if (eax == false) goto interactive</span> <span id="L49" class="LineNr"> 49 </span> 3d/compare-eax-and 0/imm32/false -<span id="L50" class="LineNr"> 50 </span> 74/jump-if-equal $subx-pack-main:interactive/disp8 +<span id="L50" class="LineNr"> 50 </span> 74/jump-if-= $subx-pack-main:interactive/disp8 <span id="L51" class="LineNr"> 51 </span> <span class="subxComment"># run-tests()</span> <span id="L52" class="LineNr"> 52 </span> e8/call run-tests/disp32 <span id="L53" class="LineNr"> 53 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span> @@ -221,7 +221,7 @@ if ('onhashchange' in window) { <span id="L159" class="LineNr"> 159 </span><span class="Constant">$subx-pack:check0</span>: <span id="L160" class="LineNr"> 160 </span> <span class="subxComment"># if (line->write == 0) break</span> <span id="L161" class="LineNr"> 161 </span> 81 7/subop/compare 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare *ecx</span> -<span id="L162" class="LineNr"> 162 </span> 0f 84/jump-if-equal $subx-pack:<span class="Constant">break</span>/disp32 +<span id="L162" class="LineNr"> 162 </span> 0f 84/jump-if-= $subx-pack:<span class="Constant">break</span>/disp32 <span id="L163" class="Folded"> 163 </span><span class="Folded">+-- 26 lines: #? # dump line -----------------------------------------------------------------------------------------------------------------------------</span> <span id="L189" class="LineNr"> 189 </span> <span class="subxComment"># next-word(line, word-slice)</span> <span id="L190" class="LineNr"> 190 </span> <span class="subxS2Comment"># . . push args</span> @@ -242,7 +242,7 @@ if ('onhashchange' in window) { <span id="L205" class="LineNr"> 205 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L206" class="LineNr"> 206 </span> <span class="subxS1Comment"># . if (eax != false) write-stream-data(out, line)</span> <span id="L207" class="LineNr"> 207 </span> 3d/compare-eax-and 0/imm32/false -<span id="L208" class="LineNr"> 208 </span> 0f 85/jump-if-not-equal $subx-pack:pass-through/disp32 +<span id="L208" class="LineNr"> 208 </span> 0f 85/jump-if-!= $subx-pack:pass-through/disp32 <span id="L209" class="LineNr"> 209 </span><span class="Constant">$subx-pack:check2</span>: <span id="L210" class="Folded"> 210 </span><span class="Folded">+-- 40 lines: #? # dump word-slice -----------------------------------------------------------------------------------------------------------------------</span> <span id="L250" class="LineNr"> 250 </span> <span class="subxComment"># if (!slice-equal?(word-slice, "==")) goto next check</span> @@ -256,7 +256,7 @@ if ('onhashchange' in window) { <span id="L258" class="LineNr"> 258 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L259" class="LineNr"> 259 </span> <span class="subxS1Comment"># . if (eax == false) goto check3</span> <span id="L260" class="LineNr"> 260 </span> 3d/compare-eax-and 0/imm32/false -<span id="L261" class="LineNr"> 261 </span> 0f 84/jump-if-equal $subx-pack:check3/disp32 +<span id="L261" class="LineNr"> 261 </span> 0f 84/jump-if-= $subx-pack:check3/disp32 <span id="L262" class="LineNr"> 262 </span> <span class="subxComment"># word-slice = next-word(line)</span> <span id="L263" class="LineNr"> 263 </span> <span class="subxS2Comment"># . . push args</span> <span id="L264" class="LineNr"> 264 </span> 52/push-edx @@ -289,7 +289,7 @@ if ('onhashchange' in window) { <span id="L330" class="LineNr"> 330 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L331" class="LineNr"> 331 </span> <span class="subxComment"># if (in-code? != false) convert-instruction(line, out)</span> <span id="L332" class="LineNr"> 332 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32/false <span class="subxComment"># compare ebx</span> -<span id="L333" class="LineNr"> 333 </span> 74/jump-if-equal $subx-pack:data/disp8 +<span id="L333" class="LineNr"> 333 </span> 74/jump-if-= $subx-pack:data/disp8 <span id="L334" class="LineNr"> 334 </span><span class="Constant">$subx-pack:code</span>: <span id="L335" class="LineNr"> 335 </span> <span class="subxS1Comment"># . convert-instruction(line, out)</span> <span id="L336" class="LineNr"> 336 </span> <span class="subxS2Comment"># . . push args</span> @@ -871,7 +871,7 @@ if ('onhashchange' in window) { <span id="L1026" class="LineNr">1026 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L1027" class="LineNr">1027 </span> <span class="subxS1Comment"># . if (eax != false) break</span> <span id="L1028" class="LineNr">1028 </span> 3d/compare-eax-and 0/imm32/false -<span id="L1029" class="LineNr">1029 </span> 0f 85/jump-if-not-equal $convert-data:<span class="Constant">break</span>/disp32 +<span id="L1029" class="LineNr">1029 </span> 0f 85/jump-if-!= $convert-data:<span class="Constant">break</span>/disp32 <span id="L1030" class="LineNr">1030 </span><span class="Constant">$convert-data:check-for-comment</span>: <span id="L1031" class="LineNr">1031 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, "#"))</span> <span id="L1032" class="LineNr">1032 </span> <span class="subxS1Comment"># . var start/edx : (addr byte) = word-slice->start</span> @@ -881,7 +881,7 @@ if ('onhashchange' in window) { <span id="L1036" class="LineNr">1036 </span> 8a/copy-byte 0/mod/indirect 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edx to AL</span> <span id="L1037" class="LineNr">1037 </span> <span class="subxS1Comment"># . if (c != '#') goto next check</span> <span id="L1038" class="LineNr">1038 </span> 3d/compare-eax-and 0x23/imm32/hash -<span id="L1039" class="LineNr">1039 </span> 75/jump-if-not-equal $convert-data:check-for-label/disp8 +<span id="L1039" class="LineNr">1039 </span> 75/jump-if-!= $convert-data:check-for-label/disp8 <span id="L1040" class="LineNr">1040 </span><span class="Constant">$convert-data:comment</span>: <span id="L1041" class="LineNr">1041 </span> <span class="subxComment"># write-slice-buffered(out, word-slice)</span> <span id="L1042" class="LineNr">1042 </span> <span class="subxS2Comment"># . . push args</span> @@ -892,7 +892,7 @@ if ('onhashchange' in window) { <span id="L1047" class="LineNr">1047 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L1048" class="LineNr">1048 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L1049" class="LineNr">1049 </span> <span class="subxComment"># return</span> -<span id="L1050" class="LineNr">1050 </span> 0f 85/jump-if-not-equal $convert-data:end/disp32 +<span id="L1050" class="LineNr">1050 </span> 0f 85/jump-if-!= $convert-data:end/disp32 <span id="L1051" class="LineNr">1051 </span><span class="Constant">$convert-data:check-for-label</span>: <span id="L1052" class="LineNr">1052 </span> <span class="subxComment"># if (slice-ends-with?(word-slice, ":"))</span> <span id="L1053" class="LineNr">1053 </span> <span class="subxS1Comment"># . var end/edx : (addr byte) = word-slice->end</span> @@ -902,7 +902,7 @@ if ('onhashchange' in window) { <span id="L1057" class="LineNr">1057 </span> 8a/copy-byte 1/mod/*+disp8 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL -1/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span> <span id="L1058" class="LineNr">1058 </span> <span class="subxS1Comment"># . if (c != ':') goto next check</span> <span id="L1059" class="LineNr">1059 </span> 3d/compare-eax-and 0x3a/imm32/colon -<span id="L1060" class="LineNr">1060 </span> 75/jump-if-not-equal $convert-data:check-for-imm32/disp8 +<span id="L1060" class="LineNr">1060 </span> 75/jump-if-!= $convert-data:check-for-imm32/disp8 <span id="L1061" class="LineNr">1061 </span><span class="Constant">$convert-data:label</span>: <span id="L1062" class="LineNr">1062 </span> <span class="subxComment"># write-stream-data(out, line)</span> <span id="L1063" class="LineNr">1063 </span> <span class="subxS2Comment"># . . push args</span> @@ -913,7 +913,7 @@ if ('onhashchange' in window) { <span id="L1068" class="LineNr">1068 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L1069" class="LineNr">1069 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L1070" class="LineNr">1070 </span> <span class="subxComment"># return</span> -<span id="L1071" class="LineNr">1071 </span> 75/jump-if-not-equal $convert-data:end/disp8 +<span id="L1071" class="LineNr">1071 </span> 75/jump-if-!= $convert-data:end/disp8 <span id="L1072" class="LineNr">1072 </span><span class="Constant">$convert-data:check-for-imm32</span>: <span id="L1073" class="LineNr">1073 </span> <span class="subxComment"># if (has-metadata?(word-slice, "imm32"))</span> <span id="L1074" class="LineNr">1074 </span> <span class="subxS1Comment"># . eax = has-metadata?(ecx, "imm32")</span> @@ -926,7 +926,7 @@ if ('onhashchange' in window) { <span id="L1081" class="LineNr">1081 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L1082" class="LineNr">1082 </span> <span class="subxS1Comment"># . if (eax == false) process as a single byte</span> <span id="L1083" class="LineNr">1083 </span> 3d/compare-eax-and 0/imm32/false -<span id="L1084" class="LineNr">1084 </span> 74/jump-if-equal $convert-data:single-byte/disp8 +<span id="L1084" class="LineNr">1084 </span> 74/jump-if-= $convert-data:single-byte/disp8 <span id="L1085" class="LineNr">1085 </span><span class="Constant">$convert-data:imm32</span>: <span id="L1086" class="LineNr">1086 </span> <span class="subxComment"># emit(out, word-slice, 4)</span> <span id="L1087" class="LineNr">1087 </span> <span class="subxS2Comment"># . . push args</span> @@ -1630,7 +1630,7 @@ if ('onhashchange' in window) { <span id="L1860" class="LineNr">1860 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L1861" class="LineNr">1861 </span> <span class="subxS1Comment"># . if (eax != false) pass through</span> <span id="L1862" class="LineNr">1862 </span> 3d/compare-eax-and 0/imm32/false -<span id="L1863" class="LineNr">1863 </span> 75/jump-if-not-equal $convert-instruction:pass-through/disp8 +<span id="L1863" class="LineNr">1863 </span> 75/jump-if-!= $convert-instruction:pass-through/disp8 <span id="L1864" class="LineNr">1864 </span><span class="Constant">$convert-instruction:check1</span>: <span id="L1865" class="LineNr">1865 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, "#")) write-stream-data(out, line)</span> <span id="L1866" class="LineNr">1866 </span> <span class="subxS1Comment"># . var start/edx : (addr byte) = word-slice->start</span> @@ -1640,7 +1640,7 @@ if ('onhashchange' in window) { <span id="L1870" class="LineNr">1870 </span> 8a/copy-byte 0/mod/indirect 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edx to AL</span> <span id="L1871" class="LineNr">1871 </span> <span class="subxS1Comment"># . if (c == '#') pass through</span> <span id="L1872" class="LineNr">1872 </span> 3d/compare-eax-and 0x23/imm32/hash -<span id="L1873" class="LineNr">1873 </span> 74/jump-if-equal $convert-instruction:pass-through/disp8 +<span id="L1873" class="LineNr">1873 </span> 74/jump-if-= $convert-instruction:pass-through/disp8 <span id="L1874" class="LineNr">1874 </span><span class="Constant">$convert-instruction:check2</span>: <span id="L1875" class="LineNr">1875 </span> <span class="subxComment"># if (slice-ends-with?(word-slice, ":")) write-stream-data(out, line)</span> <span id="L1876" class="LineNr">1876 </span> <span class="subxS1Comment"># . var end/edx : (addr byte) = word-slice->end</span> @@ -1650,7 +1650,7 @@ if ('onhashchange' in window) { <span id="L1880" class="LineNr">1880 </span> 8a/copy-byte 1/mod/*+disp8 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL -1/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span> <span id="L1881" class="LineNr">1881 </span> <span class="subxS1Comment"># . if (c == ':') pass through</span> <span id="L1882" class="LineNr">1882 </span> 3d/compare-eax-and 0x3a/imm32/colon -<span id="L1883" class="LineNr">1883 </span> 75/jump-if-not-equal $convert-instruction:really-convert/disp8 +<span id="L1883" class="LineNr">1883 </span> 75/jump-if-!= $convert-instruction:really-convert/disp8 <span id="L1884" class="LineNr">1884 </span><span class="Constant">$convert-instruction:pass-through</span>: <span id="L1885" class="LineNr">1885 </span> <span class="subxComment"># write-stream-data(out, line)</span> <span id="L1886" class="LineNr">1886 </span> <span class="subxS2Comment"># . . push args</span> @@ -1798,7 +1798,7 @@ if ('onhashchange' in window) { <span id="L2028" class="LineNr">2028 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L2029" class="LineNr">2029 </span> <span class="subxS1Comment"># . if (eax != false) return</span> <span id="L2030" class="LineNr">2030 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2031" class="LineNr">2031 </span> 0f 85/jump-if-not-equal $emit-opcodes:end/disp32 +<span id="L2031" class="LineNr">2031 </span> 0f 85/jump-if-!= $emit-opcodes:end/disp32 <span id="L2032" class="LineNr">2032 </span> <span class="subxComment"># if (slice-starts-with?(op1, "#")) return</span> <span id="L2033" class="LineNr">2033 </span> <span class="subxS1Comment"># . var start/ebx : (addr byte) = op1->start</span> <span id="L2034" class="LineNr">2034 </span> 8b/copy 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *ecx to ebx</span> @@ -1807,7 +1807,7 @@ if ('onhashchange' in window) { <span id="L2037" class="LineNr">2037 </span> 8a/copy-byte 0/mod/indirect 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ebx to AL</span> <span id="L2038" class="LineNr">2038 </span> <span class="subxS1Comment"># . if (c == '#') return</span> <span id="L2039" class="LineNr">2039 </span> 3d/compare-eax-and 0x23/imm32/hash -<span id="L2040" class="LineNr">2040 </span> 0f 84/jump-if-equal $emit-opcodes:end/disp32 +<span id="L2040" class="LineNr">2040 </span> 0f 84/jump-if-= $emit-opcodes:end/disp32 <span id="L2041" class="LineNr">2041 </span> <span class="subxComment"># op1 = next-token-from-slice(op1->start, op1->end, '/')</span> <span id="L2042" class="LineNr">2042 </span> <span class="subxS2Comment"># . . push args</span> <span id="L2043" class="LineNr">2043 </span> 51/push-ecx @@ -1845,7 +1845,7 @@ if ('onhashchange' in window) { <span id="L2075" class="LineNr">2075 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L2076" class="LineNr">2076 </span> <span class="subxS1Comment"># . if (eax != false) goto op2</span> <span id="L2077" class="LineNr">2077 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2078" class="LineNr">2078 </span> 75/jump-if-not-equal $emit-opcodes:op2/disp8 +<span id="L2078" class="LineNr">2078 </span> 75/jump-if-!= $emit-opcodes:op2/disp8 <span id="L2079" class="LineNr">2079 </span> <span class="subxComment"># if (slice-equal?(op1, "f2")) goto op2</span> <span id="L2080" class="LineNr">2080 </span> <span class="subxS1Comment"># . eax = slice-equal?(op1, "f2")</span> <span id="L2081" class="LineNr">2081 </span> <span class="subxS2Comment"># . . push args</span> @@ -1857,7 +1857,7 @@ if ('onhashchange' in window) { <span id="L2087" class="LineNr">2087 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L2088" class="LineNr">2088 </span> <span class="subxS1Comment"># . if (eax != false) goto op2</span> <span id="L2089" class="LineNr">2089 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2090" class="LineNr">2090 </span> 75/jump-if-not-equal $emit-opcodes:op2/disp8 +<span id="L2090" class="LineNr">2090 </span> 75/jump-if-!= $emit-opcodes:op2/disp8 <span id="L2091" class="LineNr">2091 </span> <span class="subxComment"># if (slice-equal?(op1, "f3")) goto op2</span> <span id="L2092" class="LineNr">2092 </span> <span class="subxS1Comment"># . eax = slice-equal?(op1, "f3")</span> <span id="L2093" class="LineNr">2093 </span> <span class="subxS2Comment"># . . push args</span> @@ -1869,7 +1869,7 @@ if ('onhashchange' in window) { <span id="L2099" class="LineNr">2099 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L2100" class="LineNr">2100 </span> <span class="subxS1Comment"># . if (eax != false) goto op2</span> <span id="L2101" class="LineNr">2101 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2102" class="LineNr">2102 </span> 75/jump-if-not-equal $emit-opcodes:op2/disp8 +<span id="L2102" class="LineNr">2102 </span> 75/jump-if-!= $emit-opcodes:op2/disp8 <span id="L2103" class="LineNr">2103 </span> <span class="subxComment"># otherwise return</span> <span id="L2104" class="LineNr">2104 </span> e9/jump $emit-opcodes:end/disp32 <span id="L2105" class="LineNr">2105 </span><span class="Constant">$emit-opcodes:op2</span>: @@ -1891,7 +1891,7 @@ if ('onhashchange' in window) { <span id="L2121" class="LineNr">2121 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L2122" class="LineNr">2122 </span> <span class="subxS1Comment"># . if (eax != false) return</span> <span id="L2123" class="LineNr">2123 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2124" class="LineNr">2124 </span> 0f 85/jump-if-not-equal $emit-opcodes:end/disp32 +<span id="L2124" class="LineNr">2124 </span> 0f 85/jump-if-!= $emit-opcodes:end/disp32 <span id="L2125" class="LineNr">2125 </span> <span class="subxComment"># if (slice-starts-with?(op2, "#")) return</span> <span id="L2126" class="LineNr">2126 </span> <span class="subxS1Comment"># . var start/ebx : (addr byte) = op2->start</span> <span id="L2127" class="LineNr">2127 </span> 8b/copy 0/mod/indirect 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *edx to ebx</span> @@ -1900,7 +1900,7 @@ if ('onhashchange' in window) { <span id="L2130" class="LineNr">2130 </span> 8a/copy-byte 0/mod/indirect 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ebx to AL</span> <span id="L2131" class="LineNr">2131 </span> <span class="subxS1Comment"># . if (c == '#') return</span> <span id="L2132" class="LineNr">2132 </span> 3d/compare-eax-and 0x23/imm32/hash -<span id="L2133" class="LineNr">2133 </span> 0f 84/jump-if-equal $emit-opcodes:end/disp32 +<span id="L2133" class="LineNr">2133 </span> 0f 84/jump-if-= $emit-opcodes:end/disp32 <span id="L2134" class="LineNr">2134 </span> <span class="subxComment"># op2 = next-token-from-slice(op2->start, op2->end, '/')</span> <span id="L2135" class="LineNr">2135 </span> <span class="subxS2Comment"># . . push args</span> <span id="L2136" class="LineNr">2136 </span> 52/push-edx @@ -1938,7 +1938,7 @@ if ('onhashchange' in window) { <span id="L2168" class="LineNr">2168 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L2169" class="LineNr">2169 </span> <span class="subxS1Comment"># . if (eax != false) return</span> <span id="L2170" class="LineNr">2170 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2171" class="LineNr">2171 </span> 0f 85/jump-if-not-equal $emit-opcodes:end/disp32 +<span id="L2171" class="LineNr">2171 </span> 0f 85/jump-if-!= $emit-opcodes:end/disp32 <span id="L2172" class="LineNr">2172 </span> <span class="subxComment"># if (!slice-equal?(op2, "0f")) return</span> <span id="L2173" class="LineNr">2173 </span> <span class="subxS1Comment"># . eax = slice-equal?(op2, "0f")</span> <span id="L2174" class="LineNr">2174 </span> <span class="subxS2Comment"># . . push args</span> @@ -1950,7 +1950,7 @@ if ('onhashchange' in window) { <span id="L2180" class="LineNr">2180 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L2181" class="LineNr">2181 </span> <span class="subxS1Comment"># . if (eax == false) return</span> <span id="L2182" class="LineNr">2182 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2183" class="LineNr">2183 </span> 0f 84/jump-if-equal $emit-opcodes:end/disp32 +<span id="L2183" class="LineNr">2183 </span> 0f 84/jump-if-= $emit-opcodes:end/disp32 <span id="L2184" class="LineNr">2184 </span><span class="Constant">$emit-opcodes:op3</span>: <span id="L2185" class="LineNr">2185 </span> <span class="subxComment"># next-word(line, op3) # reuse op2/edx</span> <span id="L2186" class="LineNr">2186 </span> <span class="subxS2Comment"># . . push args</span> @@ -1970,7 +1970,7 @@ if ('onhashchange' in window) { <span id="L2200" class="LineNr">2200 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L2201" class="LineNr">2201 </span> <span class="subxS1Comment"># . if (eax != false) return</span> <span id="L2202" class="LineNr">2202 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2203" class="LineNr">2203 </span> 0f 85/jump-if-not-equal $emit-opcodes:end/disp32 +<span id="L2203" class="LineNr">2203 </span> 0f 85/jump-if-!= $emit-opcodes:end/disp32 <span id="L2204" class="LineNr">2204 </span> <span class="subxComment"># if (slice-starts-with?(op3, "#")) return</span> <span id="L2205" class="LineNr">2205 </span> <span class="subxS1Comment"># . var start/ebx : (addr byte) = op2->start</span> <span id="L2206" class="LineNr">2206 </span> 8b/copy 0/mod/indirect 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *edx to ebx</span> @@ -1979,7 +1979,7 @@ if ('onhashchange' in window) { <span id="L2209" class="LineNr">2209 </span> 8a/copy-byte 0/mod/indirect 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ebx to AL</span> <span id="L2210" class="LineNr">2210 </span> <span class="subxS1Comment"># . if (c == '#') return</span> <span id="L2211" class="LineNr">2211 </span> 3d/compare-eax-and 0x23/imm32/hash -<span id="L2212" class="LineNr">2212 </span> 0f 84/jump-if-equal $emit-opcodes:end/disp32 +<span id="L2212" class="LineNr">2212 </span> 0f 84/jump-if-= $emit-opcodes:end/disp32 <span id="L2213" class="LineNr">2213 </span> <span class="subxComment"># op3 = next-token-from-slice(op3->start, op3->end, '/')</span> <span id="L2214" class="LineNr">2214 </span> <span class="subxS2Comment"># . . push args</span> <span id="L2215" class="LineNr">2215 </span> 52/push-edx @@ -2096,7 +2096,7 @@ if ('onhashchange' in window) { <span id="L2397" class="LineNr">2397 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L2398" class="LineNr">2398 </span> <span class="subxS1Comment"># . if (eax != false) pass through</span> <span id="L2399" class="LineNr">2399 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2400" class="LineNr">2400 </span> 0f 85/jump-if-not-equal $emit-modrm:<span class="Constant">break</span>/disp32 +<span id="L2400" class="LineNr">2400 </span> 0f 85/jump-if-!= $emit-modrm:<span class="Constant">break</span>/disp32 <span id="L2401" class="LineNr">2401 </span><span class="Constant">$emit-modrm:check1</span>: <span id="L2402" class="LineNr">2402 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, "#")) break</span> <span id="L2403" class="LineNr">2403 </span> <span class="subxS1Comment"># . spill edx</span> @@ -2110,7 +2110,7 @@ if ('onhashchange' in window) { <span id="L2411" class="LineNr">2411 </span> 5a/pop-to-edx <span id="L2412" class="LineNr">2412 </span> <span class="subxS1Comment"># . if (c == '#') pass through</span> <span id="L2413" class="LineNr">2413 </span> 3d/compare-eax-and 0x23/imm32/hash -<span id="L2414" class="LineNr">2414 </span> 0f 84/jump-if-equal $emit-modrm:<span class="Constant">break</span>/disp32 +<span id="L2414" class="LineNr">2414 </span> 0f 84/jump-if-= $emit-modrm:<span class="Constant">break</span>/disp32 <span id="L2415" class="LineNr">2415 </span><span class="Constant">$emit-modrm:check-for-mod</span>: <span id="L2416" class="LineNr">2416 </span> <span class="subxComment"># if (has-metadata?(word-slice, "mod"))</span> <span id="L2417" class="LineNr">2417 </span> <span class="subxS1Comment"># . eax = has-metadata?(ecx, "mod")</span> @@ -2123,7 +2123,7 @@ if ('onhashchange' in window) { <span id="L2424" class="LineNr">2424 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L2425" class="LineNr">2425 </span> <span class="subxS1Comment"># . if (eax == false) goto next check</span> <span id="L2426" class="LineNr">2426 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2427" class="LineNr">2427 </span> 74/jump-if-equal $emit-modrm:check-for-rm32/disp8 +<span id="L2427" class="LineNr">2427 </span> 74/jump-if-= $emit-modrm:check-for-rm32/disp8 <span id="L2428" class="LineNr">2428 </span><span class="Constant">$emit-modrm:mod</span>: <span id="L2429" class="LineNr">2429 </span> <span class="subxComment"># mod = parse-hex-int(next-token-from-slice(word-slice->start, word-slice->end, '/'))</span> <span id="L2430" class="LineNr">2430 </span> <span class="subxS1Comment"># . eax = parse-datum-of-word(word-slice)</span> @@ -2151,7 +2151,7 @@ if ('onhashchange' in window) { <span id="L2452" class="LineNr">2452 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L2453" class="LineNr">2453 </span> <span class="subxS1Comment"># . if (eax == false) goto next check</span> <span id="L2454" class="LineNr">2454 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2455" class="LineNr">2455 </span> 74/jump-if-equal $emit-modrm:check-for-r32/disp8 +<span id="L2455" class="LineNr">2455 </span> 74/jump-if-= $emit-modrm:check-for-r32/disp8 <span id="L2456" class="LineNr">2456 </span><span class="Constant">$emit-modrm:rm32</span>: <span id="L2457" class="LineNr">2457 </span> <span class="subxComment"># rm32 = parse-hex-int(next-token-from-slice(word-slice->start, word-slice->end, '/'))</span> <span id="L2458" class="LineNr">2458 </span> <span class="subxS1Comment"># . eax = parse-datum-of-word(word-slice)</span> @@ -2179,7 +2179,7 @@ if ('onhashchange' in window) { <span id="L2480" class="LineNr">2480 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L2481" class="LineNr">2481 </span> <span class="subxS1Comment"># . if (eax == false) goto next check</span> <span id="L2482" class="LineNr">2482 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2483" class="LineNr">2483 </span> 74/jump-if-equal $emit-modrm:check-for-subop/disp8 +<span id="L2483" class="LineNr">2483 </span> 74/jump-if-= $emit-modrm:check-for-subop/disp8 <span id="L2484" class="LineNr">2484 </span><span class="Constant">$emit-modrm:r32</span>: <span id="L2485" class="LineNr">2485 </span> <span class="subxComment"># r32 = parse-hex-int(next-token-from-slice(word-slice->start, word-slice->end, '/'))</span> <span id="L2486" class="LineNr">2486 </span> <span class="subxS1Comment"># . eax = parse-datum-of-word(word-slice)</span> @@ -2207,7 +2207,7 @@ if ('onhashchange' in window) { <span id="L2508" class="LineNr">2508 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L2509" class="LineNr">2509 </span> <span class="subxS1Comment"># . if (eax == false) loop</span> <span id="L2510" class="LineNr">2510 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2511" class="LineNr">2511 </span> 0f 84/jump-if-equal $emit-modrm:<span class="Constant">loop</span>/disp32 +<span id="L2511" class="LineNr">2511 </span> 0f 84/jump-if-= $emit-modrm:<span class="Constant">loop</span>/disp32 <span id="L2512" class="LineNr">2512 </span><span class="Constant">$emit-modrm:subop</span>: <span id="L2513" class="LineNr">2513 </span> <span class="subxComment"># r32 = parse-hex-int(next-token-from-slice(word-slice->start, word-slice->end, '/'))</span> <span id="L2514" class="LineNr">2514 </span> <span class="subxS1Comment"># . eax = parse-datum-of-word(word-slice)</span> @@ -2226,7 +2226,7 @@ if ('onhashchange' in window) { <span id="L2527" class="LineNr">2527 </span><span class="Constant">$emit-modrm:break</span>: <span id="L2528" class="LineNr">2528 </span> <span class="subxComment"># if (!has-modrm?) return</span> <span id="L2529" class="LineNr">2529 </span> 81 7/subop/compare 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32/false <span class="subxComment"># compare edx</span> -<span id="L2530" class="LineNr">2530 </span> 74/jump-if-equal $emit-modrm:end/disp8 +<span id="L2530" class="LineNr">2530 </span> 74/jump-if-= $emit-modrm:end/disp8 <span id="L2531" class="LineNr">2531 </span><span class="Constant">$emit-modrm:calculate</span>: <span id="L2532" class="LineNr">2532 </span> <span class="subxComment"># var modrm/ebx : byte = mod & 0b11</span> <span id="L2533" class="LineNr">2533 </span> 81 4/subop/and 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/imm32/0b11 <span class="subxComment"># bitwise and of ebx</span> @@ -2341,7 +2341,7 @@ if ('onhashchange' in window) { <span id="L2706" class="LineNr">2706 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L2707" class="LineNr">2707 </span> <span class="subxS1Comment"># . if (eax != false) pass through</span> <span id="L2708" class="LineNr">2708 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2709" class="LineNr">2709 </span> 0f 85/jump-if-not-equal $emit-sib:<span class="Constant">break</span>/disp32 +<span id="L2709" class="LineNr">2709 </span> 0f 85/jump-if-!= $emit-sib:<span class="Constant">break</span>/disp32 <span id="L2710" class="LineNr">2710 </span><span class="Constant">$emit-sib:check1</span>: <span id="L2711" class="LineNr">2711 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, "#")) break</span> <span id="L2712" class="LineNr">2712 </span> <span class="subxS1Comment"># . spill edx</span> @@ -2355,7 +2355,7 @@ if ('onhashchange' in window) { <span id="L2720" class="LineNr">2720 </span> 5a/pop-to-edx <span id="L2721" class="LineNr">2721 </span> <span class="subxS1Comment"># . if (c == '#') pass through</span> <span id="L2722" class="LineNr">2722 </span> 3d/compare-eax-and 0x23/imm32/hash -<span id="L2723" class="LineNr">2723 </span> 0f 84/jump-if-equal $emit-sib:<span class="Constant">break</span>/disp32 +<span id="L2723" class="LineNr">2723 </span> 0f 84/jump-if-= $emit-sib:<span class="Constant">break</span>/disp32 <span id="L2724" class="LineNr">2724 </span><span class="Constant">$emit-sib:check-for-scale</span>: <span id="L2725" class="LineNr">2725 </span> <span class="subxComment"># if (has-metadata?(word-slice, "scale"))</span> <span id="L2726" class="LineNr">2726 </span> <span class="subxS1Comment"># . eax = has-metadata?(ecx, "scale")</span> @@ -2368,7 +2368,7 @@ if ('onhashchange' in window) { <span id="L2733" class="LineNr">2733 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L2734" class="LineNr">2734 </span> <span class="subxS1Comment"># . if (eax == false) goto next check</span> <span id="L2735" class="LineNr">2735 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2736" class="LineNr">2736 </span> 74/jump-if-equal $emit-sib:check-for-base/disp8 +<span id="L2736" class="LineNr">2736 </span> 74/jump-if-= $emit-sib:check-for-base/disp8 <span id="L2737" class="LineNr">2737 </span><span class="Constant">$emit-sib:scale</span>: <span id="L2738" class="LineNr">2738 </span> <span class="subxComment"># scale = parse-hex-int(next-token-from-slice(word-slice->start, word-slice->end, '/'))</span> <span id="L2739" class="LineNr">2739 </span> <span class="subxS1Comment"># . eax = parse-datum-of-word(word-slice)</span> @@ -2396,7 +2396,7 @@ if ('onhashchange' in window) { <span id="L2761" class="LineNr">2761 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L2762" class="LineNr">2762 </span> <span class="subxS1Comment"># . if (eax == false) goto next check</span> <span id="L2763" class="LineNr">2763 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2764" class="LineNr">2764 </span> 74/jump-if-equal $emit-sib:check-for-index/disp8 +<span id="L2764" class="LineNr">2764 </span> 74/jump-if-= $emit-sib:check-for-index/disp8 <span id="L2765" class="LineNr">2765 </span><span class="Constant">$emit-sib:base</span>: <span id="L2766" class="LineNr">2766 </span> <span class="subxComment"># base = parse-hex-int(next-token-from-slice(word-slice->start, word-slice->end, '/'))</span> <span id="L2767" class="LineNr">2767 </span> <span class="subxS1Comment"># . eax = parse-datum-of-word(word-slice)</span> @@ -2424,7 +2424,7 @@ if ('onhashchange' in window) { <span id="L2789" class="LineNr">2789 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L2790" class="LineNr">2790 </span> <span class="subxS1Comment"># . if (eax == false) loop</span> <span id="L2791" class="LineNr">2791 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2792" class="LineNr">2792 </span> 0f 84/jump-if-equal $emit-sib:<span class="Constant">loop</span>/disp32 +<span id="L2792" class="LineNr">2792 </span> 0f 84/jump-if-= $emit-sib:<span class="Constant">loop</span>/disp32 <span id="L2793" class="LineNr">2793 </span><span class="Constant">$emit-sib:index</span>: <span id="L2794" class="LineNr">2794 </span> <span class="subxComment"># index = parse-hex-int(next-token-from-slice(word-slice->start, word-slice->end, '/'))</span> <span id="L2795" class="LineNr">2795 </span> <span class="subxS1Comment"># . eax = parse-datum-of-word(word-slice)</span> @@ -2443,7 +2443,7 @@ if ('onhashchange' in window) { <span id="L2808" class="LineNr">2808 </span><span class="Constant">$emit-sib:break</span>: <span id="L2809" class="LineNr">2809 </span> <span class="subxComment"># if (!has-sib?) return</span> <span id="L2810" class="LineNr">2810 </span> 81 7/subop/compare 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32/false <span class="subxComment"># compare edx</span> -<span id="L2811" class="LineNr">2811 </span> 74/jump-if-equal $emit-sib:end/disp8 +<span id="L2811" class="LineNr">2811 </span> 74/jump-if-= $emit-sib:end/disp8 <span id="L2812" class="LineNr">2812 </span><span class="Constant">$emit-sib:calculate</span>: <span id="L2813" class="LineNr">2813 </span> <span class="subxComment"># var sib/ebx : byte = scale & 0b11</span> <span id="L2814" class="LineNr">2814 </span> 81 4/subop/and 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/imm32/0b11 <span class="subxComment"># bitwise and of ebx</span> @@ -2540,7 +2540,7 @@ if ('onhashchange' in window) { <span id="L2969" class="LineNr">2969 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L2970" class="LineNr">2970 </span> <span class="subxS1Comment"># . if (eax != false) pass through</span> <span id="L2971" class="LineNr">2971 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2972" class="LineNr">2972 </span> 0f 85/jump-if-not-equal $emit-disp:<span class="Constant">break</span>/disp32 +<span id="L2972" class="LineNr">2972 </span> 0f 85/jump-if-!= $emit-disp:<span class="Constant">break</span>/disp32 <span id="L2973" class="LineNr">2973 </span><span class="Constant">$emit-disp:check1</span>: <span id="L2974" class="LineNr">2974 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, "#")) break</span> <span id="L2975" class="LineNr">2975 </span> <span class="subxS1Comment"># . var start/edx : (addr byte) = word-slice->start</span> @@ -2550,7 +2550,7 @@ if ('onhashchange' in window) { <span id="L2979" class="LineNr">2979 </span> 8a/copy-byte 0/mod/indirect 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edx to AL</span> <span id="L2980" class="LineNr">2980 </span> <span class="subxS1Comment"># . if (c == '#') break</span> <span id="L2981" class="LineNr">2981 </span> 3d/compare-eax-and 0x23/imm32/hash -<span id="L2982" class="LineNr">2982 </span> 0f 84/jump-if-equal $emit-disp:<span class="Constant">break</span>/disp32 +<span id="L2982" class="LineNr">2982 </span> 0f 84/jump-if-= $emit-disp:<span class="Constant">break</span>/disp32 <span id="L2983" class="LineNr">2983 </span><span class="Constant">$emit-disp:check-for-disp32</span>: <span id="L2984" class="LineNr">2984 </span> <span class="subxComment"># if (has-metadata?(word-slice, "disp32"))</span> <span id="L2985" class="LineNr">2985 </span> <span class="subxS1Comment"># . eax = has-metadata?(ecx, "disp32")</span> @@ -2563,7 +2563,7 @@ if ('onhashchange' in window) { <span id="L2992" class="LineNr">2992 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L2993" class="LineNr">2993 </span> <span class="subxS1Comment"># . if (eax == false) goto next check</span> <span id="L2994" class="LineNr">2994 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2995" class="LineNr">2995 </span> 74/jump-if-equal $emit-disp:check-for-disp16/disp8 +<span id="L2995" class="LineNr">2995 </span> 74/jump-if-= $emit-disp:check-for-disp16/disp8 <span id="L2996" class="LineNr">2996 </span><span class="Constant">$emit-disp:disp32</span>: <span id="L2997" class="LineNr">2997 </span> <span class="subxComment"># emit(out, word-slice, 4)</span> <span id="L2998" class="LineNr">2998 </span> <span class="subxS2Comment"># . . push args</span> @@ -2588,7 +2588,7 @@ if ('onhashchange' in window) { <span id="L3017" class="LineNr">3017 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L3018" class="LineNr">3018 </span> <span class="subxS1Comment"># . if (eax == false) goto next check</span> <span id="L3019" class="LineNr">3019 </span> 3d/compare-eax-and 0/imm32/false -<span id="L3020" class="LineNr">3020 </span> 74/jump-if-equal $emit-disp:check-for-disp8/disp8 +<span id="L3020" class="LineNr">3020 </span> 74/jump-if-= $emit-disp:check-for-disp8/disp8 <span id="L3021" class="LineNr">3021 </span><span class="Constant">$emit-disp:disp16</span>: <span id="L3022" class="LineNr">3022 </span> <span class="subxComment"># emit(out, word-slice, 2)</span> <span id="L3023" class="LineNr">3023 </span> <span class="subxS2Comment"># . . push args</span> @@ -2613,7 +2613,7 @@ if ('onhashchange' in window) { <span id="L3042" class="LineNr">3042 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L3043" class="LineNr">3043 </span> <span class="subxS1Comment"># . if (eax == false) loop</span> <span id="L3044" class="LineNr">3044 </span> 3d/compare-eax-and 0/imm32/false -<span id="L3045" class="LineNr">3045 </span> 0f 84/jump-if-equal $emit-disp:<span class="Constant">loop</span>/disp32 +<span id="L3045" class="LineNr">3045 </span> 0f 84/jump-if-= $emit-disp:<span class="Constant">loop</span>/disp32 <span id="L3046" class="LineNr">3046 </span><span class="Constant">$emit-disp:disp8</span>: <span id="L3047" class="LineNr">3047 </span> <span class="subxComment"># emit(out, word-slice, 1)</span> <span id="L3048" class="LineNr">3048 </span> <span class="subxS2Comment"># . . push args</span> @@ -2695,7 +2695,7 @@ if ('onhashchange' in window) { <span id="L3188" class="LineNr">3188 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L3189" class="LineNr">3189 </span> <span class="subxS1Comment"># . if (eax != false) pass through</span> <span id="L3190" class="LineNr">3190 </span> 3d/compare-eax-and 0/imm32/false -<span id="L3191" class="LineNr">3191 </span> 0f 85/jump-if-not-equal $emit-imm:<span class="Constant">break</span>/disp32 +<span id="L3191" class="LineNr">3191 </span> 0f 85/jump-if-!= $emit-imm:<span class="Constant">break</span>/disp32 <span id="L3192" class="LineNr">3192 </span><span class="Constant">$emit-imm:check1</span>: <span id="L3193" class="LineNr">3193 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, "#")) break</span> <span id="L3194" class="LineNr">3194 </span> <span class="subxS1Comment"># . var start/edx : (addr byte) = slice->start</span> @@ -2705,7 +2705,7 @@ if ('onhashchange' in window) { <span id="L3198" class="LineNr">3198 </span> 8a/copy-byte 0/mod/indirect 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edx to AL</span> <span id="L3199" class="LineNr">3199 </span> <span class="subxS1Comment"># . if (c == '#') break</span> <span id="L3200" class="LineNr">3200 </span> 3d/compare-eax-and 0x23/imm32/hash -<span id="L3201" class="LineNr">3201 </span> 0f 84/jump-if-equal $emit-imm:<span class="Constant">break</span>/disp32 +<span id="L3201" class="LineNr">3201 </span> 0f 84/jump-if-= $emit-imm:<span class="Constant">break</span>/disp32 <span id="L3202" class="LineNr">3202 </span><span class="Constant">$emit-imm:check-for-imm32</span>: <span id="L3203" class="LineNr">3203 </span> <span class="subxComment"># if (has-metadata?(word-slice, "imm32"))</span> <span id="L3204" class="LineNr">3204 </span> <span class="subxS1Comment"># . eax = has-metadata?(ecx, "imm32")</span> @@ -2718,7 +2718,7 @@ if ('onhashchange' in window) { <span id="L3211" class="LineNr">3211 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L3212" class="LineNr">3212 </span> <span class="subxS1Comment"># . if (eax == false) goto next check</span> <span id="L3213" class="LineNr">3213 </span> 3d/compare-eax-and 0/imm32/false -<span id="L3214" class="LineNr">3214 </span> 74/jump-if-equal $emit-imm:check-for-imm16/disp8 +<span id="L3214" class="LineNr">3214 </span> 74/jump-if-= $emit-imm:check-for-imm16/disp8 <span id="L3215" class="LineNr">3215 </span><span class="Constant">$emit-imm:imm32</span>: <span id="L3216" class="LineNr">3216 </span> <span class="subxComment"># emit(out, word-slice, 4)</span> <span id="L3217" class="LineNr">3217 </span> <span class="subxS2Comment"># . . push args</span> @@ -2743,7 +2743,7 @@ if ('onhashchange' in window) { <span id="L3236" class="LineNr">3236 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L3237" class="LineNr">3237 </span> <span class="subxS1Comment"># . if (eax == false) goto next check</span> <span id="L3238" class="LineNr">3238 </span> 3d/compare-eax-and 0/imm32/false -<span id="L3239" class="LineNr">3239 </span> 74/jump-if-equal $emit-imm:check-for-imm8/disp8 +<span id="L3239" class="LineNr">3239 </span> 74/jump-if-= $emit-imm:check-for-imm8/disp8 <span id="L3240" class="LineNr">3240 </span><span class="Constant">$emit-imm:imm16</span>: <span id="L3241" class="LineNr">3241 </span> <span class="subxComment"># emit(out, word-slice, 2)</span> <span id="L3242" class="LineNr">3242 </span> <span class="subxS2Comment"># . . push args</span> @@ -2768,7 +2768,7 @@ if ('onhashchange' in window) { <span id="L3261" class="LineNr">3261 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L3262" class="LineNr">3262 </span> <span class="subxS1Comment"># . if (eax == false) loop</span> <span id="L3263" class="LineNr">3263 </span> 3d/compare-eax-and 0/imm32/false -<span id="L3264" class="LineNr">3264 </span> 0f 84/jump-if-equal $emit-imm:<span class="Constant">loop</span>/disp32 +<span id="L3264" class="LineNr">3264 </span> 0f 84/jump-if-= $emit-imm:<span class="Constant">loop</span>/disp32 <span id="L3265" class="LineNr">3265 </span><span class="Constant">$emit-imm:imm8</span>: <span id="L3266" class="LineNr">3266 </span> <span class="subxComment"># emit(out, word-slice, 1)</span> <span id="L3267" class="LineNr">3267 </span> <span class="subxS2Comment"># . . push args</span> diff --git a/html/apps/sigils.subx.html b/html/apps/sigils.subx.html index 0dd7a70e..937f2bfc 100644 --- a/html/apps/sigils.subx.html +++ b/html/apps/sigils.subx.html @@ -130,7 +130,7 @@ if ('onhashchange' in window) { <span id="L68" class="LineNr"> 68 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run_tests()</span> <span id="L69" class="LineNr"> 69 </span> <span class="subxComment"># if (argc <= 1) goto interactive</span> <span id="L70" class="LineNr"> 70 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/disp8 1/imm32 <span class="subxComment"># compare *ebp</span> -<span id="L71" class="LineNr"> 71 </span> 7e/jump-if-lesser-or-equal $subx-sigils-main:interactive/disp8 +<span id="L71" class="LineNr"> 71 </span> 7e/jump-if-<= $subx-sigils-main:interactive/disp8 <span id="L72" class="LineNr"> 72 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto interactive</span> <span id="L73" class="LineNr"> 73 </span> <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], "test")</span> <span id="L74" class="LineNr"> 74 </span> <span class="subxS2Comment"># . . push args</span> @@ -142,7 +142,7 @@ if ('onhashchange' in window) { <span id="L80" class="LineNr"> 80 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L81" class="LineNr"> 81 </span> <span class="subxS1Comment"># . if (eax == false) goto interactive</span> <span id="L82" class="LineNr"> 82 </span> 3d/compare-eax-and 0/imm32/false -<span id="L83" class="LineNr"> 83 </span> 74/jump-if-equal $subx-sigils-main:interactive/disp8 +<span id="L83" class="LineNr"> 83 </span> 74/jump-if-= $subx-sigils-main:interactive/disp8 <span id="L84" class="LineNr"> 84 </span> <span class="subxComment"># run-tests()</span> <span id="L85" class="LineNr"> 85 </span> e8/call run-tests/disp32 <span id="L86" class="LineNr"> 86 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span> @@ -232,7 +232,7 @@ if ('onhashchange' in window) { <span id="L170" class="LineNr"> 170 </span><span class="Constant">$subx-sigils:check0</span>: <span id="L171" class="LineNr"> 171 </span> <span class="subxComment"># if (line->write == 0) break</span> <span id="L172" class="LineNr"> 172 </span> 81 7/subop/compare 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare *ecx</span> -<span id="L173" class="LineNr"> 173 </span> 0f 84/jump-if-equal $subx-sigils:<span class="Constant">break</span>/disp32 +<span id="L173" class="LineNr"> 173 </span> 0f 84/jump-if-= $subx-sigils:<span class="Constant">break</span>/disp32 <span id="L174" class="LineNr"> 174 </span><span class="Constant">$subx-sigils:word-loop</span>: <span id="L175" class="LineNr"> 175 </span> <span class="subxComment"># next-word-or-expression(line, word-slice)</span> <span id="L176" class="LineNr"> 176 </span> <span class="subxS2Comment"># . . push args</span> @@ -253,7 +253,7 @@ if ('onhashchange' in window) { <span id="L191" class="LineNr"> 191 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L192" class="LineNr"> 192 </span> <span class="subxS1Comment"># . if (eax != false) break</span> <span id="L193" class="LineNr"> 193 </span> 3d/compare-eax-and 0/imm32/false -<span id="L194" class="LineNr"> 194 </span> 0f 85/jump-if-not-equal $subx-sigils:next-line/disp32 +<span id="L194" class="LineNr"> 194 </span> 0f 85/jump-if-!= $subx-sigils:next-line/disp32 <span id="L195" class="LineNr"> 195 </span><span class="Constant">$subx-sigils:check-for-comment</span>: <span id="L196" class="LineNr"> 196 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, "#")) continue</span> <span id="L197" class="LineNr"> 197 </span> <span class="subxS1Comment"># . start/ebx = word-slice->start</span> @@ -263,11 +263,11 @@ if ('onhashchange' in window) { <span id="L201" class="LineNr"> 201 </span> 8a/copy-byte 0/mod/indirect 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ebx to AL</span> <span id="L202" class="LineNr"> 202 </span> <span class="subxS1Comment"># . if (eax == '#') continue</span> <span id="L203" class="LineNr"> 203 </span> 3d/compare-eax-and 0x23/imm32/hash -<span id="L204" class="LineNr"> 204 </span> 74/jump-if-equal $subx-sigils:word-loop/disp8 +<span id="L204" class="LineNr"> 204 </span> 74/jump-if-= $subx-sigils:word-loop/disp8 <span id="L205" class="LineNr"> 205 </span><span class="Constant">$subx-sigils:check-for-direct-mode</span>: <span id="L206" class="LineNr"> 206 </span> <span class="subxComment"># if (!slice-starts-with?(word-slice, "%")) goto next check</span> <span id="L207" class="LineNr"> 207 </span> 3d/compare-eax-and 0x25/imm32/percent -<span id="L208" class="LineNr"> 208 </span> 75/jump-if-not-equal $subx-sigils:check-for-indirect-mode/disp8 +<span id="L208" class="LineNr"> 208 </span> 75/jump-if-!= $subx-sigils:check-for-indirect-mode/disp8 <span id="L209" class="LineNr"> 209 </span><span class="Constant">$subx-sigils:direct-mode</span>: <span id="L210" class="Folded"> 210 </span><span class="Folded">+-- 40 lines: #? # dump word-slice -----------------------------------------------------------------------------------------------------------------------</span> <span id="L250" class="LineNr"> 250 </span> <span class="subxComment"># emit-direct-mode(out, word-slice)</span> @@ -283,7 +283,7 @@ if ('onhashchange' in window) { <span id="L260" class="LineNr"> 260 </span><span class="Constant">$subx-sigils:check-for-indirect-mode</span>: <span id="L261" class="LineNr"> 261 </span> <span class="subxComment"># if (!slice-starts-with?(word-slice, "*")) goto next check</span> <span id="L262" class="LineNr"> 262 </span> 3d/compare-eax-and 0x2a/imm32/asterisk -<span id="L263" class="LineNr"> 263 </span> 75/jump-if-not-equal $subx-sigils:check-for-invalid-addition/disp8 +<span id="L263" class="LineNr"> 263 </span> 75/jump-if-!= $subx-sigils:check-for-invalid-addition/disp8 <span id="L264" class="LineNr"> 264 </span> <span class="subxComment"># if (!disp32-mode?(word-slice)) goto indirect mode</span> <span id="L265" class="LineNr"> 265 </span> <span class="subxS1Comment"># . eax = disp32-mode?(word-slice)</span> <span id="L266" class="LineNr"> 266 </span> <span class="subxS2Comment"># . . push args</span> @@ -294,7 +294,7 @@ if ('onhashchange' in window) { <span id="L271" class="LineNr"> 271 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L272" class="LineNr"> 272 </span> <span class="subxS1Comment"># . if (eax == false) goto indirect mode</span> <span id="L273" class="LineNr"> 273 </span> 3d/compare-eax-and 0/imm32/false -<span id="L274" class="LineNr"> 274 </span> 74/jump-if-equal $subx-sigils:indirect-mode/disp8 +<span id="L274" class="LineNr"> 274 </span> 74/jump-if-= $subx-sigils:indirect-mode/disp8 <span id="L275" class="LineNr"> 275 </span><span class="Constant">$subx-sigils:disp32-mode</span>: <span id="L276" class="LineNr"> 276 </span> <span class="subxComment"># emit-indirect-mode(out, word-slice)</span> <span id="L277" class="LineNr"> 277 </span> <span class="subxS2Comment"># . . push args</span> @@ -340,11 +340,11 @@ if ('onhashchange' in window) { <span id="L317" class="LineNr"> 317 </span><span class="Constant">$subx-sigils:check-for-invalid-addition</span>: <span id="L318" class="LineNr"> 318 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, "+")) goto error1</span> <span id="L319" class="LineNr"> 319 </span> 3d/compare-eax-and 0x2b/imm32/plus -<span id="L320" class="LineNr"> 320 </span> 74/jump-if-equal $subx-sigils:error1/disp8 +<span id="L320" class="LineNr"> 320 </span> 74/jump-if-= $subx-sigils:error1/disp8 <span id="L321" class="LineNr"> 321 </span><span class="Constant">$subx-sigils:check-for-invalid-left-shift</span>: <span id="L322" class="LineNr"> 322 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, "<")) goto error1</span> <span id="L323" class="LineNr"> 323 </span> 3d/compare-eax-and 0x3c/imm32/less-than -<span id="L324" class="LineNr"> 324 </span> 74/jump-if-equal $subx-sigils:error1/disp8 +<span id="L324" class="LineNr"> 324 </span> 74/jump-if-= $subx-sigils:error1/disp8 <span id="L325" class="LineNr"> 325 </span><span class="Constant">$subx-sigils:regular-word</span>: <span id="L326" class="LineNr"> 326 </span> <span class="subxComment"># write-slice-buffered(out, word-slice)</span> <span id="L327" class="LineNr"> 327 </span> <span class="subxS2Comment"># . . push args</span> @@ -1425,7 +1425,7 @@ if ('onhashchange' in window) { <span id="L1652" class="LineNr">1652 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to ecx</span> <span id="L1653" class="LineNr">1653 </span> <span class="subxS1Comment"># . if (ecx < line->write) goto next check</span> <span id="L1654" class="LineNr">1654 </span> 3b/compare 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *esi</span> -<span id="L1655" class="LineNr">1655 </span> 7c/jump-if-lesser $next-word-or-expression:check-for-comment/disp8 +<span id="L1655" class="LineNr">1655 </span> 7c/jump-if-< $next-word-or-expression:check-for-comment/disp8 <span id="L1656" class="LineNr">1656 </span> <span class="subxS1Comment"># . return out = {0, 0}</span> <span id="L1657" class="LineNr">1657 </span> c7 0/subop/copy 0/mod/direct 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># copy to *edi</span> <span id="L1658" class="LineNr">1658 </span> c7 0/subop/copy 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 0/imm32 <span class="subxComment"># copy to *(edi+4)</span> @@ -1440,7 +1440,7 @@ if ('onhashchange' in window) { <span id="L1667" class="LineNr">1667 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span> <span id="L1668" class="LineNr">1668 </span> <span class="subxS1Comment"># . if (eax != '#') goto next check</span> <span id="L1669" class="LineNr">1669 </span> 3d/compare-eax-and 0x23/imm32/pound -<span id="L1670" class="LineNr">1670 </span> 75/jump-if-not-equal $next-word-or-expression:check-for-string-literal/disp8 +<span id="L1670" class="LineNr">1670 </span> 75/jump-if-!= $next-word-or-expression:check-for-string-literal/disp8 <span id="L1671" class="LineNr">1671 </span><span class="Constant">$next-word-or-expression:comment</span>: <span id="L1672" class="LineNr">1672 </span> <span class="subxComment"># out->end = &line->data[line->write]</span> <span id="L1673" class="LineNr">1673 </span> 8b/copy 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *esi to eax</span> @@ -1454,7 +1454,7 @@ if ('onhashchange' in window) { <span id="L1681" class="LineNr">1681 </span><span class="Constant">$next-word-or-expression:check-for-string-literal</span>: <span id="L1682" class="LineNr">1682 </span> <span class="subxComment"># if (line->data[line->read] != '"') goto next check</span> <span id="L1683" class="LineNr">1683 </span> 3d/compare-eax-and 0x22/imm32/dquote -<span id="L1684" class="LineNr">1684 </span> 75/jump-if-not-equal $next-word-or-expression:check-for-expression/disp8 +<span id="L1684" class="LineNr">1684 </span> 75/jump-if-!= $next-word-or-expression:check-for-expression/disp8 <span id="L1685" class="LineNr">1685 </span><span class="Constant">$next-word-or-expression:string-literal</span>: <span id="L1686" class="LineNr">1686 </span> <span class="subxComment"># skip-string(line)</span> <span id="L1687" class="LineNr">1687 </span> <span class="subxS2Comment"># . . push args</span> @@ -1468,14 +1468,14 @@ if ('onhashchange' in window) { <span id="L1695" class="LineNr">1695 </span><span class="Constant">$next-word-or-expression:check-for-expression</span>: <span id="L1696" class="LineNr">1696 </span> <span class="subxComment"># if (line->data[line->read] != '*') goto next check</span> <span id="L1697" class="LineNr">1697 </span> 3d/compare-eax-and 0x2a/imm32/asterisk -<span id="L1698" class="LineNr">1698 </span> 75/jump-if-not-equal $next-word-or-expression:regular-word/disp8 +<span id="L1698" class="LineNr">1698 </span> 75/jump-if-!= $next-word-or-expression:regular-word/disp8 <span id="L1699" class="LineNr">1699 </span> <span class="subxComment"># if (line->data[line->read + 1] == ' ') goto error1</span> <span id="L1700" class="LineNr">1700 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xd/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12+1) to AL</span> <span id="L1701" class="LineNr">1701 </span> 3d/compare-eax-and 0x20/imm32/space -<span id="L1702" class="LineNr">1702 </span> 74/jump-if-equal $next-word-or-expression:error1/disp8 +<span id="L1702" class="LineNr">1702 </span> 74/jump-if-= $next-word-or-expression:error1/disp8 <span id="L1703" class="LineNr">1703 </span> <span class="subxComment"># if (line->data[line->read + 1] != '(') goto regular word</span> <span id="L1704" class="LineNr">1704 </span> 3d/compare-eax-and 0x28/imm32/open-paren -<span id="L1705" class="LineNr">1705 </span> 75/jump-if-not-equal $next-word-or-expression:regular-word/disp8 +<span id="L1705" class="LineNr">1705 </span> 75/jump-if-!= $next-word-or-expression:regular-word/disp8 <span id="L1706" class="LineNr">1706 </span><span class="Constant">$next-word-or-expression:paren</span>: <span id="L1707" class="LineNr">1707 </span> <span class="subxComment"># skip-until-close-paren(line)</span> <span id="L1708" class="LineNr">1708 </span> <span class="subxS2Comment"># . . push args</span> @@ -1490,7 +1490,7 @@ if ('onhashchange' in window) { <span id="L1717" class="LineNr">1717 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span> <span id="L1718" class="LineNr">1718 </span> <span class="subxS1Comment"># . if (eax != ')') goto error2</span> <span id="L1719" class="LineNr">1719 </span> 3d/compare-eax-and 0x29/imm32/close-paren -<span id="L1720" class="LineNr">1720 </span> 75/jump-if-not-equal $next-word-or-expression:error2/disp8 +<span id="L1720" class="LineNr">1720 </span> 75/jump-if-!= $next-word-or-expression:error2/disp8 <span id="L1721" class="LineNr">1721 </span> <span class="subxComment"># skip ')'</span> <span id="L1722" class="LineNr">1722 </span> ff 0/subop/increment 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># increment *(esi+4)</span> <span id="L1723" class="LineNr">1723 </span> <span class="subxComment"># fall through</span> @@ -2042,7 +2042,7 @@ if ('onhashchange' in window) { <span id="L2269" class="LineNr">2269 </span> 8a/copy-byte 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *eax to AL</span> <span id="L2270" class="LineNr">2270 </span> 81 4/subop/and 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xff/imm32 <span class="subxComment"># bitwise and of eax</span> <span id="L2271" class="LineNr">2271 </span> 3d/compare-eax-and 0x28/imm32/open-paren -<span id="L2272" class="LineNr">2272 </span> 74/jump-if-equal $parse-effective-address:compound-expression/disp8 +<span id="L2272" class="LineNr">2272 </span> 74/jump-if-= $parse-effective-address:compound-expression/disp8 <span id="L2273" class="LineNr">2273 </span><span class="Constant">$parse-effective-address:simple-register</span>: <span id="L2274" class="LineNr">2274 </span> <span class="subxComment"># local-slice = next-token-from-slice(local-slice->start, local-slice->end, "/")</span> <span id="L2275" class="LineNr">2275 </span> <span class="subxS2Comment"># . . push args</span> @@ -2108,13 +2108,13 @@ if ('onhashchange' in window) { <span id="L2335" class="LineNr">2335 </span> 8a/copy-byte 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *eax to AL</span> <span id="L2336" class="LineNr">2336 </span> 81 4/subop/and 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xff/imm32 <span class="subxComment"># bitwise and of eax</span> <span id="L2337" class="LineNr">2337 </span> 3d/compare-eax-and 0x29/imm32/close-paren -<span id="L2338" class="LineNr">2338 </span> 0f 84/jump-if-equal $parse-effective-address:end/disp32 +<span id="L2338" class="LineNr">2338 </span> 0f 84/jump-if-= $parse-effective-address:end/disp32 <span id="L2339" class="LineNr">2339 </span> <span class="subxComment"># if (*local-slice->start == '-') goto displacement</span> <span id="L2340" class="LineNr">2340 </span> 3d/compare-eax-and 0x2d/imm32/minus -<span id="L2341" class="LineNr">2341 </span> 0f 84/jump-if-equal $parse-effective-address:displacement/disp32 +<span id="L2341" class="LineNr">2341 </span> 0f 84/jump-if-= $parse-effective-address:displacement/disp32 <span id="L2342" class="LineNr">2342 </span> <span class="subxComment"># if (*local-slice->start != '+') goto error1</span> <span id="L2343" class="LineNr">2343 </span> 3d/compare-eax-and 0x2b/imm32/plus -<span id="L2344" class="LineNr">2344 </span> 0f 85/jump-if-not-equal $parse-effective-address:error1/disp32 +<span id="L2344" class="LineNr">2344 </span> 0f 85/jump-if-!= $parse-effective-address:error1/disp32 <span id="L2345" class="LineNr">2345 </span><span class="Constant">$parse-effective-address:check-for-index</span>: <span id="L2346" class="LineNr">2346 </span> <span class="subxComment"># ++local-slice->start to skip '+'</span> <span id="L2347" class="LineNr">2347 </span> ff 0/subop/increment 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># increment *esi</span> @@ -2158,7 +2158,7 @@ if ('onhashchange' in window) { <span id="L2385" class="LineNr">2385 </span> 59/pop-to-ecx <span id="L2386" class="LineNr">2386 </span> <span class="subxS1Comment"># . if (eax == 0) goto displacement</span> <span id="L2387" class="LineNr">2387 </span> 3d/compare-eax-and 0/imm32 -<span id="L2388" class="LineNr">2388 </span> 0f 84/jump-if-equal $parse-effective-address:displacement/disp32 +<span id="L2388" class="LineNr">2388 </span> 0f 84/jump-if-= $parse-effective-address:displacement/disp32 <span id="L2389" class="LineNr">2389 </span><span class="Constant">$parse-effective-address:index</span>: <span id="L2390" class="LineNr">2390 </span> <span class="subxComment"># read register into index</span> <span id="L2391" class="LineNr">2391 </span> <span class="subxS1Comment"># . eax = next-register(local-slice)</span> @@ -2185,11 +2185,11 @@ if ('onhashchange' in window) { <span id="L2412" class="LineNr">2412 </span> 8a/copy-byte 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *eax to AL</span> <span id="L2413" class="LineNr">2413 </span> 81 4/subop/and 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xff/imm32 <span class="subxComment"># bitwise and of eax</span> <span id="L2414" class="LineNr">2414 </span> 3d/compare-eax-and 0x29/imm32/close-paren -<span id="L2415" class="LineNr">2415 </span> 0f 84/jump-if-equal $parse-effective-address:end/disp32 +<span id="L2415" class="LineNr">2415 </span> 0f 84/jump-if-= $parse-effective-address:end/disp32 <span id="L2416" class="LineNr">2416 </span><span class="Constant">$parse-effective-address:check-for-scale</span>: <span id="L2417" class="LineNr">2417 </span> <span class="subxComment"># if (*local-slice->start != '<') goto next check</span> <span id="L2418" class="LineNr">2418 </span> 3d/compare-eax-and 0x3c/imm32/less-than -<span id="L2419" class="LineNr">2419 </span> 75/jump-if-not-equal $parse-effective-address:check-for-displacement/disp8 +<span id="L2419" class="LineNr">2419 </span> 75/jump-if-!= $parse-effective-address:check-for-displacement/disp8 <span id="L2420" class="LineNr">2420 </span> <span class="subxComment"># ++local-slice->start to skip '<'</span> <span id="L2421" class="LineNr">2421 </span> ff 0/subop/increment 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># increment *esi</span> <span id="L2422" class="LineNr">2422 </span> <span class="subxComment"># if (*local-slice->start != '<') goto error2</span> @@ -2197,7 +2197,7 @@ if ('onhashchange' in window) { <span id="L2424" class="LineNr">2424 </span> 8a/copy-byte 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *eax to AL</span> <span id="L2425" class="LineNr">2425 </span> 81 4/subop/and 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xff/imm32 <span class="subxComment"># bitwise and of eax</span> <span id="L2426" class="LineNr">2426 </span> 3d/compare-eax-and 0x3c/imm32/less-than -<span id="L2427" class="LineNr">2427 </span> 0f 85/jump-if-not-equal $parse-effective-address:error2/disp32 +<span id="L2427" class="LineNr">2427 </span> 0f 85/jump-if-!= $parse-effective-address:error2/disp32 <span id="L2428" class="LineNr">2428 </span> <span class="subxComment"># ++local-slice->start to skip '<'</span> <span id="L2429" class="LineNr">2429 </span> ff 0/subop/increment 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># increment *esi</span> <span id="L2430" class="LineNr">2430 </span> <span class="subxComment"># skip whitespace</span> @@ -2237,13 +2237,13 @@ if ('onhashchange' in window) { <span id="L2464" class="LineNr">2464 </span> 8a/copy-byte 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *eax to AL</span> <span id="L2465" class="LineNr">2465 </span> 81 4/subop/and 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xff/imm32 <span class="subxComment"># bitwise and of eax</span> <span id="L2466" class="LineNr">2466 </span> 3d/compare-eax-and 0x29/imm32/close-paren -<span id="L2467" class="LineNr">2467 </span> 74/jump-if-equal $parse-effective-address:end/disp8 +<span id="L2467" class="LineNr">2467 </span> 74/jump-if-= $parse-effective-address:end/disp8 <span id="L2468" class="LineNr">2468 </span><span class="Constant">$parse-effective-address:check-for-displacement</span>: <span id="L2469" class="LineNr">2469 </span> <span class="subxComment"># if (*local-slice->start not in '+' '-') goto error3</span> <span id="L2470" class="LineNr">2470 </span> 3d/compare-eax-and 0x2b/imm32/plus -<span id="L2471" class="LineNr">2471 </span> 74/jump-if-equal $parse-effective-address:displacement/disp8 +<span id="L2471" class="LineNr">2471 </span> 74/jump-if-= $parse-effective-address:displacement/disp8 <span id="L2472" class="LineNr">2472 </span> 3d/compare-eax-and 0x2d/imm32/minus -<span id="L2473" class="LineNr">2473 </span> 74/jump-if-equal $parse-effective-address:displacement/disp8 +<span id="L2473" class="LineNr">2473 </span> 74/jump-if-= $parse-effective-address:displacement/disp8 <span id="L2474" class="LineNr">2474 </span> e9/jump $parse-effective-address:error3/disp32 <span id="L2475" class="LineNr">2475 </span><span class="Constant">$parse-effective-address:displacement</span>: <span id="L2476" class="LineNr">2476 </span> <span class="subxComment"># read integer into disp</span> @@ -2271,7 +2271,7 @@ if ('onhashchange' in window) { <span id="L2498" class="LineNr">2498 </span> 8a/copy-byte 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *eax to AL</span> <span id="L2499" class="LineNr">2499 </span> 81 4/subop/and 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xff/imm32 <span class="subxComment"># bitwise and of eax</span> <span id="L2500" class="LineNr">2500 </span> 3d/compare-eax-and 0x29/imm32/close-paren -<span id="L2501" class="LineNr">2501 </span> 0f 85/jump-if-not-equal $parse-effective-address:error4/disp32 +<span id="L2501" class="LineNr">2501 </span> 0f 85/jump-if-!= $parse-effective-address:error4/disp32 <span id="L2502" class="LineNr">2502 </span><span class="Constant">$parse-effective-address:end</span>: <span id="L2503" class="LineNr">2503 </span> <span class="subxComment"># return base in eax</span> <span id="L2504" class="LineNr">2504 </span> 89/copy 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 7/r32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy edi to eax</span> @@ -2929,15 +2929,15 @@ if ('onhashchange' in window) { <span id="L3156" class="LineNr">3156 </span><span class="Constant">$emit-indirect-mode:check-for-ebp</span>: <span id="L3157" class="LineNr">3157 </span> <span class="subxComment"># if (base == 5) goto emit-sib</span> <span id="L3158" class="LineNr">3158 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/disp8 5/imm32 <span class="subxComment"># compare *(ebp+12)</span> -<span id="L3159" class="LineNr">3159 </span> 74/jump-if-equal $emit-indirect-mode:emit-sib/disp8 +<span id="L3159" class="LineNr">3159 </span> 74/jump-if-= $emit-indirect-mode:emit-sib/disp8 <span id="L3160" class="LineNr">3160 </span><span class="Constant">$emit-indirect-mode:check-for-esp</span>: <span id="L3161" class="LineNr">3161 </span> <span class="subxComment"># if (base == 4) goto emit-sib</span> <span id="L3162" class="LineNr">3162 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/disp8 4/imm32 <span class="subxComment"># compare *(ebp+12)</span> -<span id="L3163" class="LineNr">3163 </span> 74/jump-if-equal $emit-indirect-mode:emit-sib/disp8 +<span id="L3163" class="LineNr">3163 </span> 74/jump-if-= $emit-indirect-mode:emit-sib/disp8 <span id="L3164" class="LineNr">3164 </span><span class="Constant">$emit-indirect-mode:check-for-sib</span>: <span id="L3165" class="LineNr">3165 </span> <span class="subxComment"># if (index == 4/none) goto next check</span> <span id="L3166" class="LineNr">3166 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x10/disp8 4/imm32 <span class="subxComment"># compare *(ebp+16)</span> -<span id="L3167" class="LineNr">3167 </span> 0f 84/jump-if-equal $emit-indirect-mode:check-for-disp/disp32 +<span id="L3167" class="LineNr">3167 </span> 0f 84/jump-if-= $emit-indirect-mode:check-for-disp/disp32 <span id="L3168" class="LineNr">3168 </span><span class="Constant">$emit-indirect-mode:emit-sib</span>: <span id="L3169" class="LineNr">3169 </span> <span class="subxComment"># emit(out, "2/mod/indirect 4/rm32/sib " base "/base " index "/index " scale "/scale " disp "/disp32")</span> <span id="L3170" class="LineNr">3170 </span> <span class="subxS1Comment"># . write-buffered(out, "2/mod/*+disp32 4/rm32/sib ")</span> @@ -3016,7 +3016,7 @@ if ('onhashchange' in window) { <span id="L3243" class="LineNr">3243 </span><span class="Constant">$emit-indirect-mode:check-for-disp</span>: <span id="L3244" class="LineNr">3244 </span> <span class="subxComment"># if (disp == 0) goto next check</span> <span id="L3245" class="LineNr">3245 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x18/disp8 0/imm32 <span class="subxComment"># compare *(ebp+24)</span> -<span id="L3246" class="LineNr">3246 </span> 74/jump-if-equal $emit-indirect-mode:emit-indirect/disp8 +<span id="L3246" class="LineNr">3246 </span> 74/jump-if-= $emit-indirect-mode:emit-indirect/disp8 <span id="L3247" class="LineNr">3247 </span><span class="Constant">$emit-indirect-mode:emit-disp</span>: <span id="L3248" class="LineNr">3248 </span> <span class="subxComment"># emit(out, "2/mod/*+disp32 " base "/rm32 " disp "/disp32")</span> <span id="L3249" class="LineNr">3249 </span> <span class="subxS1Comment"># . write-buffered(out, "2/mod/*+disp32 ")</span> @@ -3475,7 +3475,7 @@ if ('onhashchange' in window) { <span id="L3877" class="LineNr">3877 </span> 8a/copy-byte 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *eax to AL</span> <span id="L3878" class="LineNr">3878 </span> 81 4/subop/and 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xff/imm32 <span class="subxComment"># bitwise and of eax</span> <span id="L3879" class="LineNr">3879 </span> 3d/compare-eax-and 0x28/imm32/open-paren -<span id="L3880" class="LineNr">3880 </span> 74/jump-if-equal $disp32-mode?:false/disp8 +<span id="L3880" class="LineNr">3880 </span> 74/jump-if-= $disp32-mode?:false/disp8 <span id="L3881" class="LineNr">3881 </span><span class="Constant">$disp32-mode?:check-for-register</span>: <span id="L3882" class="LineNr">3882 </span> <span class="subxComment"># local-slice = next-token-from-slice(local-slice->start, local-slice->end, "/")</span> <span id="L3883" class="LineNr">3883 </span> <span class="subxS2Comment"># . . push args</span> @@ -3498,7 +3498,7 @@ if ('onhashchange' in window) { <span id="L3900" class="LineNr">3900 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span> <span id="L3901" class="LineNr">3901 </span> <span class="subxComment"># if (eax != 0) return false</span> <span id="L3902" class="LineNr">3902 </span> 3d/compare-eax-and 0/imm32 -<span id="L3903" class="LineNr">3903 </span> 75/jump-if-not-equal $disp32-mode?:false/disp8 +<span id="L3903" class="LineNr">3903 </span> 75/jump-if-!= $disp32-mode?:false/disp8 <span id="L3904" class="LineNr">3904 </span> <span class="subxComment"># return true</span> <span id="L3905" class="LineNr">3905 </span> b8/copy-to-eax 1/imm32/true <span id="L3906" class="LineNr">3906 </span> eb/jump $disp32-mode?:end/disp8 @@ -3591,14 +3591,14 @@ if ('onhashchange' in window) { <span id="L3993" class="LineNr">3993 </span><span class="Constant">$next-hex-int:positive</span>: <span id="L3994" class="LineNr">3994 </span> <span class="subxComment"># if (*curr == '+') ++curr</span> <span id="L3995" class="LineNr">3995 </span> 3d/compare-eax-and 0x2b/imm32/+ -<span id="L3996" class="LineNr">3996 </span> 75/jump-if-not-equal $next-hex-int:negative/disp8 +<span id="L3996" class="LineNr">3996 </span> 75/jump-if-!= $next-hex-int:negative/disp8 <span id="L3997" class="LineNr">3997 </span> <span class="subxS1Comment"># . ++curr</span> <span id="L3998" class="LineNr">3998 </span> 41/increment-ecx <span id="L3999" class="LineNr">3999 </span> eb/jump $next-hex-int:skip-whitespace/disp8 <span id="L4000" class="LineNr">4000 </span><span class="Constant">$next-hex-int:negative</span>: <span id="L4001" class="LineNr">4001 </span> <span class="subxComment"># else if (*curr == '-') ++curr, negate = true</span> <span id="L4002" class="LineNr">4002 </span> 3d/compare-eax-and 0x2d/imm32/- -<span id="L4003" class="LineNr">4003 </span> 75/jump-if-not-equal $next-hex-int:skip-whitespace/disp8 +<span id="L4003" class="LineNr">4003 </span> 75/jump-if-!= $next-hex-int:skip-whitespace/disp8 <span id="L4004" class="LineNr">4004 </span><span class="Constant">$next-hex-int:need-to-negate</span>: <span id="L4005" class="LineNr">4005 </span> <span class="subxS1Comment"># . ++curr</span> <span id="L4006" class="LineNr">4006 </span> 41/increment-ecx @@ -3625,24 +3625,24 @@ if ('onhashchange' in window) { <span id="L4027" class="LineNr">4027 </span> <span class="subxS1Comment"># . if (*curr != '0') jump to loop</span> <span id="L4028" class="LineNr">4028 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span> <span id="L4029" class="LineNr">4029 </span> 3d/compare-eax-and 0x30/imm32/0 -<span id="L4030" class="LineNr">4030 </span> 75/jump-if-not-equal $next-hex-int:<span class="Constant">loop</span>/disp8 +<span id="L4030" class="LineNr">4030 </span> 75/jump-if-!= $next-hex-int:<span class="Constant">loop</span>/disp8 <span id="L4031" class="LineNr">4031 </span> <span class="subxS1Comment"># . ++curr</span> <span id="L4032" class="LineNr">4032 </span> 41/increment-ecx <span id="L4033" class="LineNr">4033 </span><span class="Constant">$next-hex-int:initial-0x</span>: <span id="L4034" class="LineNr">4034 </span> <span class="subxS1Comment"># . if (curr >= in->end) return result</span> <span id="L4035" class="LineNr">4035 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span> -<span id="L4036" class="LineNr">4036 </span> 73/jump-if-greater-or-equal-unsigned $next-hex-int:end/disp8 +<span id="L4036" class="LineNr">4036 </span> 73/jump-if-addr>= $next-hex-int:end/disp8 <span id="L4037" class="LineNr">4037 </span> <span class="subxS1Comment"># . if (*curr != 'x') jump to loop # the previous '0' is still valid so doesn't need to be checked again</span> <span id="L4038" class="LineNr">4038 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span> <span id="L4039" class="LineNr">4039 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span> <span id="L4040" class="LineNr">4040 </span> 3d/compare-eax-and 0x78/imm32/x -<span id="L4041" class="LineNr">4041 </span> 75/jump-if-not-equal $next-hex-int:<span class="Constant">loop</span>/disp8 +<span id="L4041" class="LineNr">4041 </span> 75/jump-if-!= $next-hex-int:<span class="Constant">loop</span>/disp8 <span id="L4042" class="LineNr">4042 </span> <span class="subxS1Comment"># . ++curr</span> <span id="L4043" class="LineNr">4043 </span> 41/increment-ecx <span id="L4044" class="LineNr">4044 </span><span class="Constant">$next-hex-int:loop</span>: <span id="L4045" class="LineNr">4045 </span> <span class="subxComment"># if (curr >= in->end) break</span> <span id="L4046" class="LineNr">4046 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span> -<span id="L4047" class="LineNr">4047 </span> 73/jump-if-greater-or-equal-unsigned $next-hex-int:<span class="Constant">break</span>/disp8 +<span id="L4047" class="LineNr">4047 </span> 73/jump-if-addr>= $next-hex-int:<span class="Constant">break</span>/disp8 <span id="L4048" class="LineNr">4048 </span> <span class="subxComment"># if (!is-hex-digit?(*curr)) break</span> <span id="L4049" class="LineNr">4049 </span> <span class="subxS1Comment"># . eax = *curr</span> <span id="L4050" class="LineNr">4050 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span> @@ -3655,7 +3655,7 @@ if ('onhashchange' in window) { <span id="L4057" class="LineNr">4057 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L4058" class="LineNr">4058 </span> <span class="subxS1Comment"># . if (eax == false) break</span> <span id="L4059" class="LineNr">4059 </span> 3d/compare-eax-and 0/imm32/false -<span id="L4060" class="LineNr">4060 </span> 74/jump-if-equal $next-hex-int:<span class="Constant">break</span>/disp8 +<span id="L4060" class="LineNr">4060 </span> 74/jump-if-= $next-hex-int:<span class="Constant">break</span>/disp8 <span id="L4061" class="LineNr">4061 </span> <span class="subxComment"># eax = from-hex-char(*curr)</span> <span id="L4062" class="LineNr">4062 </span> <span class="subxS2Comment"># . . copy arg to eax</span> <span id="L4063" class="LineNr">4063 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span> @@ -3671,7 +3671,7 @@ if ('onhashchange' in window) { <span id="L4073" class="LineNr">4073 </span><span class="Constant">$next-hex-int:break</span>: <span id="L4074" class="LineNr">4074 </span> <span class="subxComment"># if (negate?) result = -result</span> <span id="L4075" class="LineNr">4075 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32/false <span class="subxComment"># compare ebx</span> -<span id="L4076" class="LineNr">4076 </span> 74/jump-if-equal $next-hex-int:end/disp8 +<span id="L4076" class="LineNr">4076 </span> 74/jump-if-= $next-hex-int:end/disp8 <span id="L4077" class="LineNr">4077 </span><span class="Constant">$next-hex-int:negate</span>: <span id="L4078" class="LineNr">4078 </span> f7 3/subop/negate 3/mod/direct 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># negate edi</span> <span id="L4079" class="LineNr">4079 </span><span class="Constant">$next-hex-int:end</span>: @@ -4008,24 +4008,24 @@ if ('onhashchange' in window) { <span id="L4410" class="LineNr">4410 </span> <span class="subxS1Comment"># . if (*curr != '0') jump to loop</span> <span id="L4411" class="LineNr">4411 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span> <span id="L4412" class="LineNr">4412 </span> 3d/compare-eax-and 0x30/imm32/0 -<span id="L4413" class="LineNr">4413 </span> 75/jump-if-not-equal $next-positive-hex-int:<span class="Constant">loop</span>/disp8 +<span id="L4413" class="LineNr">4413 </span> 75/jump-if-!= $next-positive-hex-int:<span class="Constant">loop</span>/disp8 <span id="L4414" class="LineNr">4414 </span> <span class="subxS1Comment"># . ++curr</span> <span id="L4415" class="LineNr">4415 </span> 41/increment-ecx <span id="L4416" class="LineNr">4416 </span><span class="Constant">$next-positive-hex-int:initial-0x</span>: <span id="L4417" class="LineNr">4417 </span> <span class="subxS1Comment"># . if (curr >= in->end) return result</span> <span id="L4418" class="LineNr">4418 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span> -<span id="L4419" class="LineNr">4419 </span> 73/jump-if-greater-or-equal-unsigned $next-positive-hex-int:end/disp8 +<span id="L4419" class="LineNr">4419 </span> 73/jump-if-addr>= $next-positive-hex-int:end/disp8 <span id="L4420" class="LineNr">4420 </span> <span class="subxS1Comment"># . if (*curr != 'x') jump to loop # the previous '0' is still valid so doesn't need to be checked again</span> <span id="L4421" class="LineNr">4421 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span> <span id="L4422" class="LineNr">4422 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span> <span id="L4423" class="LineNr">4423 </span> 3d/compare-eax-and 0x78/imm32/x -<span id="L4424" class="LineNr">4424 </span> 75/jump-if-not-equal $next-positive-hex-int:<span class="Constant">loop</span>/disp8 +<span id="L4424" class="LineNr">4424 </span> 75/jump-if-!= $next-positive-hex-int:<span class="Constant">loop</span>/disp8 <span id="L4425" class="LineNr">4425 </span> <span class="subxS1Comment"># . ++curr</span> <span id="L4426" class="LineNr">4426 </span> 41/increment-ecx <span id="L4427" class="LineNr">4427 </span><span class="Constant">$next-positive-hex-int:loop</span>: <span id="L4428" class="LineNr">4428 </span> <span class="subxComment"># if (curr >= in->end) break</span> <span id="L4429" class="LineNr">4429 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span> -<span id="L4430" class="LineNr">4430 </span> 73/jump-if-greater-or-equal-unsigned $next-positive-hex-int:end/disp8 +<span id="L4430" class="LineNr">4430 </span> 73/jump-if-addr>= $next-positive-hex-int:end/disp8 <span id="L4431" class="LineNr">4431 </span> <span class="subxComment"># if (!is-hex-digit?(*curr)) break</span> <span id="L4432" class="LineNr">4432 </span> <span class="subxS1Comment"># . eax = *curr</span> <span id="L4433" class="LineNr">4433 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span> @@ -4038,7 +4038,7 @@ if ('onhashchange' in window) { <span id="L4440" class="LineNr">4440 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L4441" class="LineNr">4441 </span> <span class="subxS1Comment"># . if (eax == false) break</span> <span id="L4442" class="LineNr">4442 </span> 3d/compare-eax-and 0/imm32/false -<span id="L4443" class="LineNr">4443 </span> 74/jump-if-equal $next-positive-hex-int:end/disp8 +<span id="L4443" class="LineNr">4443 </span> 74/jump-if-= $next-positive-hex-int:end/disp8 <span id="L4444" class="LineNr">4444 </span> <span class="subxComment"># eax = from-hex-char(*curr)</span> <span id="L4445" class="LineNr">4445 </span> <span class="subxS2Comment"># . . copy arg to eax</span> <span id="L4446" class="LineNr">4446 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span> diff --git a/html/apps/survey.subx.html b/html/apps/survey.subx.html index 6bad51ee..0c669fd5 100644 --- a/html/apps/survey.subx.html +++ b/html/apps/survey.subx.html @@ -127,7 +127,7 @@ if ('onhashchange' in window) { <span id="L64" class="LineNr"> 64 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run_tests()</span> <span id="L65" class="LineNr"> 65 </span> <span class="subxComment"># if (argc <= 1) goto interactive</span> <span id="L66" class="LineNr"> 66 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/disp8 1/imm32 <span class="subxComment"># compare *ebp</span> -<span id="L67" class="LineNr"> 67 </span> 7e/jump-if-lesser-or-equal $subx-survey-main:interactive/disp8 +<span id="L67" class="LineNr"> 67 </span> 7e/jump-if-<= $subx-survey-main:interactive/disp8 <span id="L68" class="LineNr"> 68 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto interactive</span> <span id="L69" class="LineNr"> 69 </span> <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], "test")</span> <span id="L70" class="LineNr"> 70 </span> <span class="subxS2Comment"># . . push args</span> @@ -139,7 +139,7 @@ if ('onhashchange' in window) { <span id="L76" class="LineNr"> 76 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L77" class="LineNr"> 77 </span> <span class="subxS1Comment"># . if (eax == false) goto interactive</span> <span id="L78" class="LineNr"> 78 </span> 3d/compare-eax-and 0/imm32/false -<span id="L79" class="LineNr"> 79 </span> 74/jump-if-equal $subx-survey-main:interactive/disp8 +<span id="L79" class="LineNr"> 79 </span> 74/jump-if-= $subx-survey-main:interactive/disp8 <span id="L80" class="LineNr"> 80 </span> <span class="subxComment"># run-tests()</span> <span id="L81" class="LineNr"> 81 </span> e8/call run-tests/disp32 <span id="L82" class="LineNr"> 82 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span> @@ -540,7 +540,7 @@ if ('onhashchange' in window) { <span id="L709" class="LineNr"> 709 </span> <span class="subxComment"># if (line->write == 0) break</span> <span id="L710" class="LineNr"> 710 </span> 8b/copy 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *ecx to eax</span> <span id="L711" class="LineNr"> 711 </span> 3d/compare-eax-and 0/imm32 -<span id="L712" class="LineNr"> 712 </span> 0f 84/jump-if-equal $compute-offsets:break-line-loop/disp32 +<span id="L712" class="LineNr"> 712 </span> 0f 84/jump-if-= $compute-offsets:break-line-loop/disp32 <span id="L713" class="Folded"> 713 </span><span class="Folded">+-- 33 lines: #? # dump line -----------------------------------------------------------------------------------------------------------------------------</span> <span id="L746" class="LineNr"> 746 </span><span class="Constant">$compute-offsets:word-loop</span>: <span id="L747" class="LineNr"> 747 </span> <span class="subxComment"># edx = word-slice</span> @@ -561,7 +561,7 @@ if ('onhashchange' in window) { <span id="L835" class="LineNr"> 835 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L836" class="LineNr"> 836 </span> <span class="subxS1Comment"># . if (eax != false) break</span> <span id="L837" class="LineNr"> 837 </span> 3d/compare-eax-and 0/imm32/false -<span id="L838" class="LineNr"> 838 </span> 0f 85/jump-if-not-equal $compute-offsets:line-loop/disp32 +<span id="L838" class="LineNr"> 838 </span> 0f 85/jump-if-!= $compute-offsets:line-loop/disp32 <span id="L839" class="LineNr"> 839 </span><span class="Constant">$compute-offsets:case-comment</span>: <span id="L840" class="LineNr"> 840 </span> <span class="subxComment"># if slice-starts-with?(word-slice, "#") continue</span> <span id="L841" class="LineNr"> 841 </span> 68/push <span class="Constant">"#"</span>/imm32 @@ -571,7 +571,7 @@ if ('onhashchange' in window) { <span id="L845" class="LineNr"> 845 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L846" class="LineNr"> 846 </span> <span class="subxS1Comment"># . if (eax != false) break</span> <span id="L847" class="LineNr"> 847 </span> 3d/compare-eax-and 0/imm32/false -<span id="L848" class="LineNr"> 848 </span> 0f 85/jump-if-not-equal $compute-offsets:line-loop/disp32 +<span id="L848" class="LineNr"> 848 </span> 0f 85/jump-if-!= $compute-offsets:line-loop/disp32 <span id="L849" class="LineNr"> 849 </span><span class="Constant">$compute-offsets:case-segment-header</span>: <span id="L850" class="LineNr"> 850 </span> <span class="subxComment"># if (!slice-equal?(word-slice/edx, "==")) goto next case</span> <span id="L851" class="LineNr"> 851 </span> <span class="subxS1Comment"># . eax = slice-equal?(word-slice/edx, "==")</span> @@ -582,10 +582,10 @@ if ('onhashchange' in window) { <span id="L856" class="LineNr"> 856 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L857" class="LineNr"> 857 </span> <span class="subxS1Comment"># . if (eax == false) goto next case</span> <span id="L858" class="LineNr"> 858 </span> 3d/compare-eax-and 0/imm32/false -<span id="L859" class="LineNr"> 859 </span> 0f 84/jump-if-equal $compute-offsets:case-label/disp32 +<span id="L859" class="LineNr"> 859 </span> 0f 84/jump-if-= $compute-offsets:case-label/disp32 <span id="L860" class="LineNr"> 860 </span> <span class="subxComment"># if (curr-segment-name == 0) goto construct-next-segment</span> <span id="L861" class="LineNr"> 861 </span> 81 7/subop/compare 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare esi</span> -<span id="L862" class="LineNr"> 862 </span> 74/jump-if-equal $compute-offsets:construct-next-segment/disp8 +<span id="L862" class="LineNr"> 862 </span> 74/jump-if-= $compute-offsets:construct-next-segment/disp8 <span id="L863" class="LineNr"> 863 </span> <span class="subxComment"># seg/eax = get-or-insert(segments, curr-segment-name, row-size=16)</span> <span id="L864" class="LineNr"> 864 </span> <span class="subxS2Comment"># . . push args</span> <span id="L865" class="LineNr"> 865 </span> 68/push 0x10/imm32/row-size @@ -642,7 +642,7 @@ if ('onhashchange' in window) { <span id="L960" class="LineNr"> 960 </span> <span class="subxComment"># if empty?(curr-segment-name) abort</span> <span id="L961" class="LineNr"> 961 </span> <span class="subxS1Comment"># . if (eax == 0) abort</span> <span id="L962" class="LineNr"> 962 </span> 3d/compare-eax-and 0/imm32 -<span id="L963" class="LineNr"> 963 </span> 0f 84/jump-if-equal $compute-offsets:abort/disp32 +<span id="L963" class="LineNr"> 963 </span> 0f 84/jump-if-= $compute-offsets:abort/disp32 <span id="L964" class="LineNr"> 964 </span> <span class="subxComment"># next-word(line, segment-tmp)</span> <span id="L965" class="LineNr"> 965 </span> 68/push <a href='survey.subx.html#L621'>compute-offsets</a>:segment-tmp/imm32 <span id="L966" class="LineNr"> 966 </span> 51/push-ecx @@ -657,7 +657,7 @@ if ('onhashchange' in window) { <span id="L975" class="LineNr"> 975 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L976" class="LineNr"> 976 </span> <span class="subxS1Comment"># . if (eax != false) abort</span> <span id="L977" class="LineNr"> 977 </span> 3d/compare-eax-and 0/imm32/false -<span id="L978" class="LineNr"> 978 </span> 0f 85/jump-if-not-equal $compute-offsets:abort/disp32 +<span id="L978" class="LineNr"> 978 </span> 0f 85/jump-if-!= $compute-offsets:abort/disp32 <span id="L979" class="LineNr"> 979 </span> <span class="subxComment"># seg/ebx = get-or-insert(segments, curr-segment-name, row-size=16)</span> <span id="L980" class="LineNr"> 980 </span> <span class="subxS2Comment"># . . push args</span> <span id="L981" class="LineNr"> 981 </span> 68/push 0x10/imm32/row-size @@ -706,7 +706,7 @@ if ('onhashchange' in window) { <span id="L1024" class="LineNr">1024 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L1025" class="LineNr">1025 </span> <span class="subxS1Comment"># . if (eax == false) goto next case</span> <span id="L1026" class="LineNr">1026 </span> 3d/compare-eax-and 0/imm32/false -<span id="L1027" class="LineNr">1027 </span> 74/jump-if-equal $compute-offsets:case-default/disp8 +<span id="L1027" class="LineNr">1027 </span> 74/jump-if-= $compute-offsets:case-default/disp8 <span id="L1028" class="LineNr">1028 </span> <span class="subxComment"># strip trailing ':' from word-slice</span> <span id="L1029" class="LineNr">1029 </span> ff 1/subop/decrement 1/mod/*+disp8 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># decrement *(edx+4)</span> <span id="L1030" class="LineNr">1030 </span> <span class="subxComment"># x/eax = leaky-get-or-insert-slice(labels, word-slice, row-size=16)</span> @@ -1045,7 +1045,7 @@ if ('onhashchange' in window) { <span id="L1428" class="LineNr">1428 </span><span class="Constant">$compute-addresses:segment-loop</span>: <span id="L1429" class="LineNr">1429 </span> <span class="subxComment"># if (srow >= max) break</span> <span id="L1430" class="LineNr">1430 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with ecx</span> -<span id="L1431" class="LineNr">1431 </span> 73/jump-if-greater-or-equal-unsigned $compute-addresses:segment-break/disp8 +<span id="L1431" class="LineNr">1431 </span> 73/jump-if-addr>= $compute-addresses:segment-break/disp8 <span id="L1432" class="LineNr">1432 </span> <span class="subxComment"># srow->file-offset += starting-offset</span> <span id="L1433" class="LineNr">1433 </span> 01/add 1/mod/*+disp8 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 7/r32/edi 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># add edi to *(eax+8)</span> <span id="L1434" class="LineNr">1434 </span> <span class="subxComment"># clear last 12 bits of srow->address for p_align=0x1000</span> @@ -1087,7 +1087,7 @@ if ('onhashchange' in window) { <span id="L1495" class="LineNr">1495 </span><span class="Constant">$compute-addresses:label-loop</span>: <span id="L1496" class="LineNr">1496 </span> <span class="subxComment"># if (lrow >= max) break</span> <span id="L1497" class="LineNr">1497 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with ecx</span> -<span id="L1498" class="LineNr">1498 </span> 0f 83/jump-if-greater-or-equal-unsigned $compute-addresses:end/disp32 +<span id="L1498" class="LineNr">1498 </span> 0f 83/jump-if-addr>= $compute-addresses:end/disp32 <span id="L1499" class="Folded">1499 </span><span class="Folded">+-- 26 lines: #? # dump lrow->key ------------------------------------------------------------------------------------------------------------------------</span> <span id="L1525" class="LineNr">1525 </span> <span class="subxComment"># seg-name/edx = lrow->segment-name</span> <span id="L1526" class="LineNr">1526 </span> 8b/copy 1/mod/*+disp8 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *eax to edx</span> @@ -1524,7 +1524,7 @@ if ('onhashchange' in window) { <span id="L2055" class="LineNr">2055 </span><span class="Constant">$emit-segments:check-for-end-of-input</span>: <span id="L2056" class="LineNr">2056 </span> <span class="subxComment"># if (line->write == 0) break</span> <span id="L2057" class="LineNr">2057 </span> 81 7/subop/compare 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare *ecx</span> -<span id="L2058" class="LineNr">2058 </span> 0f 84/jump-if-equal $emit-segments:end/disp32 +<span id="L2058" class="LineNr">2058 </span> 0f 84/jump-if-= $emit-segments:end/disp32 <span id="L2059" class="LineNr">2059 </span> <span class="subxComment"># offset-of-next-instruction += num-bytes(line)</span> <span id="L2060" class="LineNr">2060 </span> <span class="subxS1Comment"># . eax = num-bytes(line)</span> <span id="L2061" class="LineNr">2061 </span> <span class="subxS2Comment"># . . push args</span> @@ -1556,7 +1556,7 @@ if ('onhashchange' in window) { <span id="L2119" class="LineNr">2119 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L2120" class="LineNr">2120 </span> <span class="subxS1Comment"># . if (eax != 0) break</span> <span id="L2121" class="LineNr">2121 </span> 3d/compare-eax-and 0/imm32 -<span id="L2122" class="LineNr">2122 </span> 0f 85/jump-if-not-equal $emit-segments:next-line/disp32 +<span id="L2122" class="LineNr">2122 </span> 0f 85/jump-if-!= $emit-segments:next-line/disp32 <span id="L2123" class="LineNr">2123 </span><span class="Constant">$emit-segments:check-for-comment</span>: <span id="L2124" class="LineNr">2124 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, "#")) break</span> <span id="L2125" class="LineNr">2125 </span> <span class="subxS1Comment"># . start/esi = word-slice->start</span> @@ -1566,7 +1566,7 @@ if ('onhashchange' in window) { <span id="L2129" class="LineNr">2129 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to AL</span> <span id="L2130" class="LineNr">2130 </span> <span class="subxS1Comment"># . if (eax == '#') break</span> <span id="L2131" class="LineNr">2131 </span> 3d/compare-eax-and 0x23/imm32/hash -<span id="L2132" class="LineNr">2132 </span> 0f 84/jump-if-equal $emit-segments:next-line/disp32 +<span id="L2132" class="LineNr">2132 </span> 0f 84/jump-if-= $emit-segments:next-line/disp32 <span id="L2133" class="LineNr">2133 </span><span class="Constant">$emit-segments:check-for-label</span>: <span id="L2134" class="LineNr">2134 </span> <span class="subxComment"># if is-label?(word-slice) break</span> <span id="L2135" class="LineNr">2135 </span> <span class="subxS1Comment"># . eax = is-label?(word-slice)</span> @@ -1578,7 +1578,7 @@ if ('onhashchange' in window) { <span id="L2141" class="LineNr">2141 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L2142" class="LineNr">2142 </span> <span class="subxS1Comment"># . if (eax != false) break</span> <span id="L2143" class="LineNr">2143 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2144" class="LineNr">2144 </span> 0f 85/jump-if-not-equal $emit-segments:line-loop/disp32 +<span id="L2144" class="LineNr">2144 </span> 0f 85/jump-if-!= $emit-segments:line-loop/disp32 <span id="L2145" class="LineNr">2145 </span><span class="Constant">$emit-segments:check-for-segment-header</span>: <span id="L2146" class="LineNr">2146 </span> <span class="subxComment"># if (slice-equal?(word-slice, "==")) break</span> <span id="L2147" class="LineNr">2147 </span> <span class="subxS1Comment"># . eax = slice-equal?(word-slice, "==")</span> @@ -1591,7 +1591,7 @@ if ('onhashchange' in window) { <span id="L2154" class="LineNr">2154 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L2155" class="LineNr">2155 </span> <span class="subxS1Comment"># . if (eax != false) break</span> <span id="L2156" class="LineNr">2156 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2157" class="LineNr">2157 </span> 0f 85/jump-if-not-equal $emit-segments:line-loop/disp32 +<span id="L2157" class="LineNr">2157 </span> 0f 85/jump-if-!= $emit-segments:line-loop/disp32 <span id="L2158" class="LineNr">2158 </span><span class="Constant">$emit-segments:2-character</span>: <span id="L2159" class="LineNr">2159 </span> <span class="subxComment"># if (length(word-slice) != 2) goto next check</span> <span id="L2160" class="LineNr">2160 </span> <span class="subxS1Comment"># . eax = length(word-slice)</span> @@ -1599,7 +1599,7 @@ if ('onhashchange' in window) { <span id="L2162" class="LineNr">2162 </span> 2b/subtract 0/mod/indirect 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># subtract *edx from eax</span> <span id="L2163" class="LineNr">2163 </span> <span class="subxS1Comment"># . if (eax != 2) goto next check</span> <span id="L2164" class="LineNr">2164 </span> 3d/compare-eax-and 2/imm32 -<span id="L2165" class="LineNr">2165 </span> 75/jump-if-not-equal $emit-segments:check-metadata/disp8 +<span id="L2165" class="LineNr">2165 </span> 75/jump-if-!= $emit-segments:check-metadata/disp8 <span id="L2166" class="LineNr">2166 </span> <span class="subxComment"># write-slice-buffered(out, word-slice)</span> <span id="L2167" class="LineNr">2167 </span> <span class="subxS2Comment"># . . push args</span> <span id="L2168" class="LineNr">2168 </span> 52/push-edx @@ -1657,7 +1657,7 @@ if ('onhashchange' in window) { <span id="L2277" class="LineNr">2277 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L2278" class="LineNr">2278 </span> <span class="subxS1Comment"># . if (eax != false) goto code label checks</span> <span id="L2279" class="LineNr">2279 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2280" class="LineNr">2280 </span> 0f 85/jump-if-not-equal $emit-segments:check-code-label-for-imm8/disp32 +<span id="L2280" class="LineNr">2280 </span> 0f 85/jump-if-!= $emit-segments:check-code-label-for-imm8/disp32 <span id="L2281" class="LineNr">2281 </span><span class="Constant">$emit-segments:check-global-variable-for-disp8</span>: <span id="L2282" class="LineNr">2282 </span> <span class="subxComment"># if has-metadata?(word-slice, "disp8") abort</span> <span id="L2283" class="LineNr">2283 </span> <span class="subxS1Comment"># . eax = has-metadata?(word-slice, "disp8")</span> @@ -1670,7 +1670,7 @@ if ('onhashchange' in window) { <span id="L2290" class="LineNr">2290 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L2291" class="LineNr">2291 </span> <span class="subxS1Comment"># . if (eax != false) abort</span> <span id="L2292" class="LineNr">2292 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2293" class="LineNr">2293 </span> 0f 85/jump-if-not-equal $emit-segments:global-variable-abort/disp32 +<span id="L2293" class="LineNr">2293 </span> 0f 85/jump-if-!= $emit-segments:global-variable-abort/disp32 <span id="L2294" class="LineNr">2294 </span><span class="Constant">$emit-segments:check-global-variable-for-imm8</span>: <span id="L2295" class="LineNr">2295 </span> <span class="subxComment"># if has-metadata?(word-slice, "imm8") abort</span> <span id="L2296" class="LineNr">2296 </span> <span class="subxS1Comment"># . eax = has-metadata?(word-slice, "imm8")</span> @@ -1683,7 +1683,7 @@ if ('onhashchange' in window) { <span id="L2303" class="LineNr">2303 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L2304" class="LineNr">2304 </span> <span class="subxS1Comment"># . if (eax != false) abort</span> <span id="L2305" class="LineNr">2305 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2306" class="LineNr">2306 </span> 0f 85/jump-if-not-equal $emit-segments:global-variable-abort/disp32 +<span id="L2306" class="LineNr">2306 </span> 0f 85/jump-if-!= $emit-segments:global-variable-abort/disp32 <span id="L2307" class="LineNr">2307 </span><span class="Constant">$emit-segments:emit-global-variable</span>: <span id="L2308" class="LineNr">2308 </span> <span class="subxComment"># emit-hex(out, info->address, 4)</span> <span id="L2309" class="LineNr">2309 </span> <span class="subxS2Comment"># . . push args</span> @@ -1708,7 +1708,7 @@ if ('onhashchange' in window) { <span id="L2328" class="LineNr">2328 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L2329" class="LineNr">2329 </span> <span class="subxS1Comment"># . if (eax != false) abort</span> <span id="L2330" class="LineNr">2330 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2331" class="LineNr">2331 </span> 0f 85/jump-if-not-equal $emit-segments:imm8-abort/disp32 +<span id="L2331" class="LineNr">2331 </span> 0f 85/jump-if-!= $emit-segments:imm8-abort/disp32 <span id="L2332" class="LineNr">2332 </span><span class="Constant">$emit-segments:check-code-label-for-imm32</span>: <span id="L2333" class="LineNr">2333 </span> <span class="subxComment"># if (!has-metadata?(word-slice, "imm32")) goto next check</span> <span id="L2334" class="LineNr">2334 </span> <span class="subxS1Comment"># . eax = has-metadata?(edx, "imm32")</span> @@ -1721,7 +1721,7 @@ if ('onhashchange' in window) { <span id="L2341" class="LineNr">2341 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L2342" class="LineNr">2342 </span> <span class="subxS1Comment"># . if (eax == false) goto next check</span> <span id="L2343" class="LineNr">2343 </span> 3d/compare-eax-and 0/imm32 -<span id="L2344" class="LineNr">2344 </span> 74/jump-if-equal $emit-segments:check-code-label-for-disp8/disp8 +<span id="L2344" class="LineNr">2344 </span> 74/jump-if-= $emit-segments:check-code-label-for-disp8/disp8 <span id="L2345" class="Folded">2345 </span><span class="Folded">+-- 33 lines: #? # dump info->address --------------------------------------------------------------------------------------------------------------------</span> <span id="L2378" class="LineNr">2378 </span><span class="Constant">$emit-segments:emit-code-label-imm32</span>: <span id="L2379" class="LineNr">2379 </span> <span class="subxComment"># emit-hex(out, info->address, 4)</span> @@ -1747,7 +1747,7 @@ if ('onhashchange' in window) { <span id="L2399" class="LineNr">2399 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L2400" class="LineNr">2400 </span> <span class="subxS1Comment"># . if (eax == false) goto next check</span> <span id="L2401" class="LineNr">2401 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2402" class="LineNr">2402 </span> 74/jump-if-equal $emit-segments:check-code-label-for-disp32/disp8 +<span id="L2402" class="LineNr">2402 </span> 74/jump-if-= $emit-segments:check-code-label-for-disp32/disp8 <span id="L2403" class="LineNr">2403 </span><span class="Constant">$emit-segments:emit-code-label-disp8</span>: <span id="L2404" class="LineNr">2404 </span> <span class="subxComment"># emit-hex(out, info->offset - offset-of-next-instruction, 1)</span> <span id="L2405" class="LineNr">2405 </span> <span class="subxS2Comment"># . . push args</span> @@ -1774,7 +1774,7 @@ if ('onhashchange' in window) { <span id="L2426" class="LineNr">2426 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L2427" class="LineNr">2427 </span> <span class="subxS1Comment"># . if (eax == false) abort</span> <span id="L2428" class="LineNr">2428 </span> 3d/compare-eax-and 0/imm32/false -<span id="L2429" class="LineNr">2429 </span> 0f 84/jump-if-equal $emit-segments:abort/disp32 +<span id="L2429" class="LineNr">2429 </span> 0f 84/jump-if-= $emit-segments:abort/disp32 <span id="L2430" class="LineNr">2430 </span><span class="Constant">$emit-segments:emit-code-label-disp32</span>: <span id="L2431" class="LineNr">2431 </span> <span class="subxComment"># emit-hex(out, info->offset - offset-of-next-instruction, 4)</span> <span id="L2432" class="LineNr">2432 </span> <span class="subxS2Comment"># . . push args</span> @@ -2462,7 +2462,7 @@ if ('onhashchange' in window) { <span id="L3218" class="LineNr">3218 </span><span class="Constant">$emit-headers:loop</span>: <span id="L3219" class="LineNr">3219 </span> <span class="subxComment"># if (curr-segment >= max) break</span> <span id="L3220" class="LineNr">3220 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with ecx</span> -<span id="L3221" class="LineNr">3221 </span> 0f 83/jump-if-greater-or-equal-unsigned $emit-headers:end/disp32 +<span id="L3221" class="LineNr">3221 </span> 0f 83/jump-if-addr>= $emit-headers:end/disp32 <span id="L3222" class="Folded">3222 </span><span class="Folded">+-- 63 lines: #? # dump curr-segment->name ---------------------------------------------------------------------------------------------------------------</span> <span id="L3285" class="Folded">3285 </span><span class="Folded">+-- 9 lines: #? # write(2/stderr, "emit-segment-header\n") ----------------------------------------------------------------------------------------------</span> <span id="L3294" class="LineNr">3294 </span> <span class="subxComment"># emit-elf-program-header-entry(out, curr-segment)</span> @@ -2607,7 +2607,7 @@ if ('onhashchange' in window) { <span id="L3433" class="LineNr">3433 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L3434" class="LineNr">3434 </span> <span class="subxS1Comment"># . if (eax == false) goto next check</span> <span id="L3435" class="LineNr">3435 </span> 3d/compare-eax-and 0/imm32/false -<span id="L3436" class="LineNr">3436 </span> 74/jump-if-equal $emit-elf-program-header-entry:data/disp8 +<span id="L3436" class="LineNr">3436 </span> 74/jump-if-= $emit-elf-program-header-entry:data/disp8 <span id="L3437" class="LineNr">3437 </span> <span class="subxComment"># *$Elf_p_flags = r-x</span> <span id="L3438" class="LineNr">3438 </span> c7 0/subop/copy 0/mod/indirect 5/rm32/.disp32 <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> $<span class="SpecialChar">Elf_p_flags</span>/disp32 5/imm32 <span class="subxComment"># copy to *$Elf_p_flags</span> <span id="L3439" class="LineNr">3439 </span> eb/jump $emit-elf-program-header-entry:really-emit/disp8 @@ -2665,7 +2665,7 @@ if ('onhashchange' in window) { <span id="L3491" class="LineNr">3491 </span> 8d/copy-address 1/mod/*+disp8 4/rm32/sib 6/base/esi 2/index/edx <span class="Normal"> . </span> 2/r32/edx 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy esi+edx+12 to edx</span> <span id="L3492" class="LineNr">3492 </span> <span class="subxComment"># if (curr >= max) abort</span> <span id="L3493" class="LineNr">3493 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with edx</span> -<span id="L3494" class="LineNr">3494 </span> 73/jump-if-greater-or-equal-unsigned $stream-add4:abort/disp8 +<span id="L3494" class="LineNr">3494 </span> 73/jump-if-addr>= $stream-add4:abort/disp8 <span id="L3495" class="LineNr">3495 </span> <span class="subxComment"># *curr = key</span> <span id="L3496" class="LineNr">3496 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+12) to ecx</span> <span id="L3497" class="LineNr">3497 </span> 89/copy 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy ecx to *eax</span> @@ -2673,7 +2673,7 @@ if ('onhashchange' in window) { <span id="L3499" class="LineNr">3499 </span> 05/add-to-eax 4/imm32 <span id="L3500" class="LineNr">3500 </span> <span class="subxComment"># if (curr >= max) abort</span> <span id="L3501" class="LineNr">3501 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with edx</span> -<span id="L3502" class="LineNr">3502 </span> 73/jump-if-greater-or-equal-unsigned $stream-add4:abort/disp8 +<span id="L3502" class="LineNr">3502 </span> 73/jump-if-addr>= $stream-add4:abort/disp8 <span id="L3503" class="LineNr">3503 </span> <span class="subxComment"># *curr = val1</span> <span id="L3504" class="LineNr">3504 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 0x10/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+16) to ecx</span> <span id="L3505" class="LineNr">3505 </span> 89/copy 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy ecx to *eax</span> @@ -2681,7 +2681,7 @@ if ('onhashchange' in window) { <span id="L3507" class="LineNr">3507 </span> 05/add-to-eax 4/imm32 <span id="L3508" class="LineNr">3508 </span> <span class="subxComment"># if (curr >= max) abort</span> <span id="L3509" class="LineNr">3509 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with edx</span> -<span id="L3510" class="LineNr">3510 </span> 73/jump-if-greater-or-equal-unsigned $stream-add4:abort/disp8 +<span id="L3510" class="LineNr">3510 </span> 73/jump-if-addr>= $stream-add4:abort/disp8 <span id="L3511" class="LineNr">3511 </span> <span class="subxComment"># *curr = val2</span> <span id="L3512" class="LineNr">3512 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 0x14/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+20) to ecx</span> <span id="L3513" class="LineNr">3513 </span> 89/copy 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy ecx to *eax</span> @@ -2689,7 +2689,7 @@ if ('onhashchange' in window) { <span id="L3515" class="LineNr">3515 </span> 05/add-to-eax 4/imm32 <span id="L3516" class="LineNr">3516 </span> <span class="subxComment"># if (curr >= max) abort</span> <span id="L3517" class="LineNr">3517 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with edx</span> -<span id="L3518" class="LineNr">3518 </span> 73/jump-if-greater-or-equal-unsigned $stream-add4:abort/disp8 +<span id="L3518" class="LineNr">3518 </span> 73/jump-if-addr>= $stream-add4:abort/disp8 <span id="L3519" class="LineNr">3519 </span> <span class="subxComment"># *curr = val3</span> <span id="L3520" class="LineNr">3520 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 0x18/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+24) to ecx</span> <span id="L3521" class="LineNr">3521 </span> 89/copy 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy ecx to *eax</span> @@ -3236,7 +3236,7 @@ if ('onhashchange' in window) { <span id="L4251" class="LineNr">4251 </span> 3d/compare-eax-and 0/imm32/false <span id="L4252" class="LineNr">4252 </span> <span class="subxS1Comment"># . restore result now that ZF is set</span> <span id="L4253" class="LineNr">4253 </span> 58/pop-to-eax -<span id="L4254" class="LineNr">4254 </span> 75/jump-if-not-equal $num-bytes:end/disp8 +<span id="L4254" class="LineNr">4254 </span> 75/jump-if-!= $num-bytes:end/disp8 <span id="L4255" class="LineNr">4255 </span><span class="Constant">$num-bytes:check-for-comment</span>: <span id="L4256" class="LineNr">4256 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, "#")) break</span> <span id="L4257" class="LineNr">4257 </span> <span class="subxS1Comment"># . start/edx = word-slice->start</span> @@ -3246,7 +3246,7 @@ if ('onhashchange' in window) { <span id="L4261" class="LineNr">4261 </span> 8a/copy-byte 0/mod/indirect 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edx to BL</span> <span id="L4262" class="LineNr">4262 </span> <span class="subxS1Comment"># . if (ebx == '#') break</span> <span id="L4263" class="LineNr">4263 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x23/imm32/hash <span class="subxComment"># compare ebx</span> -<span id="L4264" class="LineNr">4264 </span> 74/jump-if-equal $num-bytes:end/disp8 +<span id="L4264" class="LineNr">4264 </span> 74/jump-if-= $num-bytes:end/disp8 <span id="L4265" class="LineNr">4265 </span><span class="Constant">$num-bytes:check-for-label</span>: <span id="L4266" class="LineNr">4266 </span> <span class="subxComment"># if (slice-ends-with?(word-slice, ":")) break</span> <span id="L4267" class="LineNr">4267 </span> <span class="subxS1Comment"># . end/edx = word-slice->end</span> @@ -3256,7 +3256,7 @@ if ('onhashchange' in window) { <span id="L4271" class="LineNr">4271 </span> 8a/copy-byte 1/mod/*+disp8 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL -1/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to BL</span> <span id="L4272" class="LineNr">4272 </span> <span class="subxS1Comment"># . if (ebx == ':') break</span> <span id="L4273" class="LineNr">4273 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x3a/imm32/colon <span class="subxComment"># compare ebx</span> -<span id="L4274" class="LineNr">4274 </span> 74/jump-if-equal $num-bytes:end/disp8 +<span id="L4274" class="LineNr">4274 </span> 74/jump-if-= $num-bytes:end/disp8 <span id="L4275" class="LineNr">4275 </span><span class="Constant">$num-bytes:check-for-segment-header</span>: <span id="L4276" class="LineNr">4276 </span> <span class="subxComment"># if (slice-equal?(word-slice, "==")) break</span> <span id="L4277" class="LineNr">4277 </span> <span class="subxS1Comment"># . push result</span> @@ -3273,7 +3273,7 @@ if ('onhashchange' in window) { <span id="L4288" class="LineNr">4288 </span> 3d/compare-eax-and 0/imm32/false <span id="L4289" class="LineNr">4289 </span> <span class="subxS1Comment"># . restore result now that ZF is set</span> <span id="L4290" class="LineNr">4290 </span> 58/pop-to-eax -<span id="L4291" class="LineNr">4291 </span> 75/jump-if-not-equal $num-bytes:end/disp8 +<span id="L4291" class="LineNr">4291 </span> 75/jump-if-!= $num-bytes:end/disp8 <span id="L4292" class="LineNr">4292 </span><span class="Constant">$num-bytes:loop-body</span>: <span id="L4293" class="LineNr">4293 </span> <span class="subxComment"># result += compute-width-of-slice(word-slice)</span> <span id="L4294" class="LineNr">4294 </span> <span class="subxS1Comment"># . copy result to edx</span> diff --git a/html/apps/tests.subx.html b/html/apps/tests.subx.html index ce28a332..cc20676e 100644 --- a/html/apps/tests.subx.html +++ b/html/apps/tests.subx.html @@ -93,7 +93,7 @@ if ('onhashchange' in window) { <span id="L33" class="LineNr"> 33 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run_tests()</span> <span id="L34" class="LineNr"> 34 </span> <span class="subxComment"># if (argc <= 1) goto run-main</span> <span id="L35" class="LineNr"> 35 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/disp8 1/imm32 <span class="subxComment"># compare *ebp</span> -<span id="L36" class="LineNr"> 36 </span> 7e/jump-if-lesser-or-equal $subx-tests-main:interactive/disp8 +<span id="L36" class="LineNr"> 36 </span> 7e/jump-if-<= $subx-tests-main:interactive/disp8 <span id="L37" class="LineNr"> 37 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto run-main</span> <span id="L38" class="LineNr"> 38 </span> <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], "test")</span> <span id="L39" class="LineNr"> 39 </span> <span class="subxS2Comment"># . . push args</span> @@ -105,7 +105,7 @@ if ('onhashchange' in window) { <span id="L45" class="LineNr"> 45 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L46" class="LineNr"> 46 </span> <span class="subxS1Comment"># . if (eax == false) goto run-main</span> <span id="L47" class="LineNr"> 47 </span> 3d/compare-eax-and 0/imm32/false -<span id="L48" class="LineNr"> 48 </span> 74/jump-if-equal $subx-tests-main:interactive/disp8 +<span id="L48" class="LineNr"> 48 </span> 74/jump-if-= $subx-tests-main:interactive/disp8 <span id="L49" class="LineNr"> 49 </span> <span class="subxComment"># run-tests()</span> <span id="L50" class="LineNr"> 50 </span> e8/call run-tests/disp32 <span id="L51" class="LineNr"> 51 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span> @@ -220,7 +220,7 @@ if ('onhashchange' in window) { <span id="L160" class="LineNr">160 </span><span class="Constant">$subx-gen-run-tests:check0</span>: <span id="L161" class="LineNr">161 </span> <span class="subxComment"># if (line->write == 0) break</span> <span id="L162" class="LineNr">162 </span> 81 7/subop/compare 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare *ecx</span> -<span id="L163" class="LineNr">163 </span> 0f 84/jump-if-equal $subx-gen-run-tests:<span class="Constant">break</span>/disp32 +<span id="L163" class="LineNr">163 </span> 0f 84/jump-if-= $subx-gen-run-tests:<span class="Constant">break</span>/disp32 <span id="L164" class="LineNr">164 </span> <span class="subxComment"># next-word(line, word-slice)</span> <span id="L165" class="LineNr">165 </span> <span class="subxS2Comment"># . . push args</span> <span id="L166" class="LineNr">166 </span> 52/push-edx @@ -240,7 +240,7 @@ if ('onhashchange' in window) { <span id="L180" class="LineNr">180 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L181" class="LineNr">181 </span> <span class="subxS1Comment"># . if (eax == false) continue</span> <span id="L182" class="LineNr">182 </span> 3d/compare-eax-and 0/imm32/false -<span id="L183" class="LineNr">183 </span> 74/jump-if-equal $subx-gen-run-tests:continue/disp8 +<span id="L183" class="LineNr">183 </span> 74/jump-if-= $subx-gen-run-tests:continue/disp8 <span id="L184" class="LineNr">184 </span><span class="Constant">$subx-gen-run-tests:check-label-prefix</span>: <span id="L185" class="LineNr">185 </span> <span class="subxComment"># strip trailing ':' from word-slice</span> <span id="L186" class="LineNr">186 </span> ff 1/subop/decrement 1/mod/*+disp8 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># decrement *(edx+4)</span> @@ -254,7 +254,7 @@ if ('onhashchange' in window) { <span id="L194" class="LineNr">194 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L195" class="LineNr">195 </span> <span class="subxS1Comment"># . if (eax == false) break</span> <span id="L196" class="LineNr">196 </span> 3d/compare-eax-and 0/imm32/false -<span id="L197" class="LineNr">197 </span> 74/jump-if-equal $subx-gen-run-tests:continue/disp8 +<span id="L197" class="LineNr">197 </span> 74/jump-if-= $subx-gen-run-tests:continue/disp8 <span id="L198" class="LineNr">198 </span><span class="Constant">$subx-gen-run-tests:call-test-function</span>: <span id="L199" class="LineNr">199 </span> <span class="subxComment"># tests-found? = true</span> <span id="L200" class="LineNr">200 </span> bb/copy-to-ebx 1/imm32/true @@ -303,7 +303,7 @@ if ('onhashchange' in window) { <span id="L243" class="LineNr">243 </span><span class="Constant">$subx-gen-run-tests:break</span>: <span id="L244" class="LineNr">244 </span> <span class="subxComment"># if (!tests-found?) goto end</span> <span id="L245" class="LineNr">245 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32/false <span class="subxComment"># compare ebx</span> -<span id="L246" class="LineNr">246 </span> 74/jump-if-equal $subx-gen-run-tests:end/disp8 +<span id="L246" class="LineNr">246 </span> 74/jump-if-= $subx-gen-run-tests:end/disp8 <span id="L247" class="LineNr">247 </span> <span class="subxComment"># write(new-code-segment, " c3/return\n")</span> <span id="L248" class="LineNr">248 </span> <span class="subxS2Comment"># . . push args</span> <span id="L249" class="LineNr">249 </span> 68/push <span class="Constant">" c3/return\n"</span>/imm32 |