diff options
author | Kartik Agaram <vc@akkartik.com> | 2020-03-06 18:39:16 -0800 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2020-03-06 18:39:16 -0800 |
commit | ee0e67b9d7c275480827d856b926d2c403057bb8 (patch) | |
tree | 4c64d0b7bd4f25292fa73868a7ad3a7820ae4644 /html/apps | |
parent | 8f256f1f2ee6a2a49816dd23d26cd120f526bf0b (diff) | |
download | mu-ee0e67b9d7c275480827d856b926d2c403057bb8.tar.gz |
6091
Diffstat (limited to 'html/apps')
30 files changed, 3743 insertions, 3580 deletions
diff --git a/html/apps/assort.subx.html b/html/apps/assort.subx.html index 23f49434..efb6a8f2 100644 --- a/html/apps/assort.subx.html +++ b/html/apps/assort.subx.html @@ -69,13 +69,13 @@ if ('onhashchange' in window) { <span id="L7" class="LineNr"> 7 </span><span class="subxComment"># because we don't know if they refer to the line above or the line below.</span> <span id="L8" class="LineNr"> 8 </span><span class="subxComment">#</span> <span id="L9" class="LineNr"> 9 </span><span class="subxComment"># To run:</span> -<span id="L10" class="LineNr"> 10 </span><span class="subxComment"># $ ./subx translate init.linux 0*.subx apps/subx-params.subx apps/assort.subx -o apps/assort</span> +<span id="L10" class="LineNr"> 10 </span><span class="subxComment"># $ ./bootstrap translate init.linux 0*.subx apps/subx-params.subx apps/assort.subx -o apps/assort</span> <span id="L11" class="LineNr"> 11 </span><span class="subxComment"># $ cat x</span> <span id="L12" class="LineNr"> 12 </span><span class="subxComment"># == code</span> <span id="L13" class="LineNr"> 13 </span><span class="subxComment"># abc</span> <span id="L14" class="LineNr"> 14 </span><span class="subxComment"># == code</span> <span id="L15" class="LineNr"> 15 </span><span class="subxComment"># def</span> -<span id="L16" class="LineNr"> 16 </span><span class="subxComment"># $ cat x |./subx run apps/assort</span> +<span id="L16" class="LineNr"> 16 </span><span class="subxComment"># $ cat x |./bootstrap run apps/assort</span> <span id="L17" class="LineNr"> 17 </span><span class="subxComment"># == code</span> <span id="L18" class="LineNr"> 18 </span><span class="subxComment"># abc</span> <span id="L19" class="LineNr"> 19 </span><span class="subxComment"># def</span> diff --git a/html/apps/crenshaw2-1.subx.html b/html/apps/crenshaw2-1.subx.html index 1c9ae904..42bfe4d6 100644 --- a/html/apps/crenshaw2-1.subx.html +++ b/html/apps/crenshaw2-1.subx.html @@ -64,8 +64,8 @@ if ('onhashchange' in window) { <span id="L3" class="LineNr"> 3 </span><span class="subxComment"># except that we support hex digits.</span> <span id="L4" class="LineNr"> 4 </span><span class="subxComment">#</span> <span id="L5" class="LineNr"> 5 </span><span class="subxComment"># To run:</span> -<span id="L6" class="LineNr"> 6 </span><span class="subxComment"># $ ./subx translate init.linux 0*.subx apps/crenshaw2-1.subx -o apps/crenshaw2-1</span> -<span id="L7" class="LineNr"> 7 </span><span class="subxComment"># $ echo '3' |./subx run apps/crenshaw2-1</span> +<span id="L6" class="LineNr"> 6 </span><span class="subxComment"># $ ./bootstrap translate init.linux 0*.subx apps/crenshaw2-1.subx -o apps/crenshaw2-1</span> +<span id="L7" class="LineNr"> 7 </span><span class="subxComment"># $ echo '3' |./bootstrap run apps/crenshaw2-1</span> <span id="L8" class="LineNr"> 8 </span><span class="subxComment"># Expected output:</span> <span id="L9" class="LineNr"> 9 </span><span class="subxComment"># # syscall(exit, 3)</span> <span id="L10" class="LineNr"> 10 </span><span class="subxComment"># bb/copy-to-ebx 3/imm32</span> @@ -73,14 +73,14 @@ if ('onhashchange' in window) { <span id="L12" class="LineNr"> 12 </span><span class="subxComment"># cd/syscall 0x80/imm8</span> <span id="L13" class="LineNr"> 13 </span><span class="subxComment">#</span> <span id="L14" class="LineNr"> 14 </span><span class="subxComment"># To run the generated output:</span> -<span id="L15" class="LineNr"> 15 </span><span class="subxComment"># $ echo '3' |./subx run apps/crenshaw2-1 > z1.subx</span> -<span id="L16" class="LineNr"> 16 </span><span class="subxComment"># $ ./subx translate init.linux z1.subx -o z1</span> -<span id="L17" class="LineNr"> 17 </span><span class="subxComment"># $ ./subx run z1</span> +<span id="L15" class="LineNr"> 15 </span><span class="subxComment"># $ echo '3' |./bootstrap run apps/crenshaw2-1 > z1.subx</span> +<span id="L16" class="LineNr"> 16 </span><span class="subxComment"># $ ./bootstrap translate init.linux z1.subx -o z1</span> +<span id="L17" class="LineNr"> 17 </span><span class="subxComment"># $ ./bootstrap run z1</span> <span id="L18" class="LineNr"> 18 </span><span class="subxComment"># $ echo $?</span> <span id="L19" class="LineNr"> 19 </span><span class="subxComment"># 3</span> <span id="L20" class="LineNr"> 20 </span><span class="subxComment">#</span> <span id="L21" class="LineNr"> 21 </span><span class="subxComment"># Stdin must contain just a single hex digit. Other input will print an error:</span> -<span id="L22" class="LineNr"> 22 </span><span class="subxComment"># $ echo 'xyz' |./subx run apps/crenshaw2-1</span> +<span id="L22" class="LineNr"> 22 </span><span class="subxComment"># $ echo 'xyz' |./bootstrap run apps/crenshaw2-1</span> <span id="L23" class="LineNr"> 23 </span><span class="subxComment"># Error: integer expected</span> <span id="L24" class="LineNr"> 24 </span><span class="subxComment">#</span> <span id="L25" class="LineNr"> 25 </span><span class="subxComment"># Names in this file sometimes follow Crenshaw's original rather than my usual</span> diff --git a/html/apps/crenshaw2-1b.subx.html b/html/apps/crenshaw2-1b.subx.html index 01b29a6a..67c8891f 100644 --- a/html/apps/crenshaw2-1b.subx.html +++ b/html/apps/crenshaw2-1b.subx.html @@ -64,8 +64,8 @@ if ('onhashchange' in window) { <span id="L3" class="LineNr"> 3 </span><span class="subxComment"># except that we support hex numbers of multiple digits.</span> <span id="L4" class="LineNr"> 4 </span><span class="subxComment">#</span> <span id="L5" class="LineNr"> 5 </span><span class="subxComment"># To run:</span> -<span id="L6" class="LineNr"> 6 </span><span class="subxComment"># $ ./subx translate init.linux 0*.subx apps/crenshaw2-1b.subx -o apps/crenshaw2-1b</span> -<span id="L7" class="LineNr"> 7 </span><span class="subxComment"># $ echo '1a' |./subx run apps/crenshaw2-1b</span> +<span id="L6" class="LineNr"> 6 </span><span class="subxComment"># $ ./bootstrap translate init.linux 0*.subx apps/crenshaw2-1b.subx -o apps/crenshaw2-1b</span> +<span id="L7" class="LineNr"> 7 </span><span class="subxComment"># $ echo '1a' |./bootstrap run apps/crenshaw2-1b</span> <span id="L8" class="LineNr"> 8 </span><span class="subxComment"># Expected output:</span> <span id="L9" class="LineNr"> 9 </span><span class="subxComment"># # syscall(exit, 1a)</span> <span id="L10" class="LineNr"> 10 </span><span class="subxComment"># bb/copy-to-ebx 3/imm32</span> @@ -73,14 +73,14 @@ if ('onhashchange' in window) { <span id="L12" class="LineNr"> 12 </span><span class="subxComment"># cd/syscall 0x80/imm8</span> <span id="L13" class="LineNr"> 13 </span><span class="subxComment">#</span> <span id="L14" class="LineNr"> 14 </span><span class="subxComment"># To run the generated output:</span> -<span id="L15" class="LineNr"> 15 </span><span class="subxComment"># $ echo '1a' |./subx run apps/crenshaw2-1b > z1.subx</span> -<span id="L16" class="LineNr"> 16 </span><span class="subxComment"># $ ./subx translate init.linux z1.subx -o z1</span> -<span id="L17" class="LineNr"> 17 </span><span class="subxComment"># $ ./subx run z1</span> +<span id="L15" class="LineNr"> 15 </span><span class="subxComment"># $ echo '1a' |./bootstrap run apps/crenshaw2-1b > z1.subx</span> +<span id="L16" class="LineNr"> 16 </span><span class="subxComment"># $ ./bootstrap translate init.linux z1.subx -o z1</span> +<span id="L17" class="LineNr"> 17 </span><span class="subxComment"># $ ./bootstrap run z1</span> <span id="L18" class="LineNr"> 18 </span><span class="subxComment"># $ echo $?</span> <span id="L19" class="LineNr"> 19 </span><span class="subxComment"># 26 # 0x1a in decimal</span> <span id="L20" class="LineNr"> 20 </span><span class="subxComment">#</span> <span id="L21" class="LineNr"> 21 </span><span class="subxComment"># Stdin must contain just a single hex digit. Other input will print an error:</span> -<span id="L22" class="LineNr"> 22 </span><span class="subxComment"># $ echo 'xyz' |./subx run apps/crenshaw2-1b</span> +<span id="L22" class="LineNr"> 22 </span><span class="subxComment"># $ echo 'xyz' |./bootstrap run apps/crenshaw2-1b</span> <span id="L23" class="LineNr"> 23 </span><span class="subxComment"># Error: integer expected</span> <span id="L24" class="LineNr"> 24 </span><span class="subxComment">#</span> <span id="L25" class="LineNr"> 25 </span><span class="subxComment"># Names in this file sometimes follow Crenshaw's original rather than my usual</span> diff --git a/html/apps/dquotes.subx.html b/html/apps/dquotes.subx.html index 43be5025..1636fde6 100644 --- a/html/apps/dquotes.subx.html +++ b/html/apps/dquotes.subx.html @@ -65,11 +65,11 @@ if ('onhashchange' in window) { <span id="L2" class="LineNr"> 2 </span><span class="subxComment"># Replace them with references to new variables in the data segment.</span> <span id="L3" class="LineNr"> 3 </span><span class="subxComment">#</span> <span id="L4" class="LineNr"> 4 </span><span class="subxComment"># To run:</span> -<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./subx translate init.linux 0*.subx apps/subx-params.subx apps/dquotes.subx -o apps/dquotes</span> +<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./bootstrap translate init.linux 0*.subx apps/subx-params.subx apps/dquotes.subx -o apps/dquotes</span> <span id="L6" class="LineNr"> 6 </span><span class="subxComment"># $ cat x</span> <span id="L7" class="LineNr"> 7 </span><span class="subxComment"># == code</span> <span id="L8" class="LineNr"> 8 </span><span class="subxComment"># ab "cd ef"/imm32</span> -<span id="L9" class="LineNr"> 9 </span><span class="subxComment"># $ cat x |./subx run apps/dquotes</span> +<span id="L9" class="LineNr"> 9 </span><span class="subxComment"># $ cat x |./bootstrap run apps/dquotes</span> <span id="L10" class="LineNr"> 10 </span><span class="subxComment"># == code</span> <span id="L11" class="LineNr"> 11 </span><span class="subxComment"># ab __string1/imm32</span> <span id="L12" class="LineNr"> 12 </span><span class="subxComment"># == data</span> diff --git a/html/apps/ex1.subx.html b/html/apps/ex1.subx.html index 4cc9e90f..0d3311bc 100644 --- a/html/apps/ex1.subx.html +++ b/html/apps/ex1.subx.html @@ -57,8 +57,8 @@ if ('onhashchange' in window) { <span id="L2" class="LineNr"> 2 </span><span class="subxComment"># Just return 42.</span> <span id="L3" class="LineNr"> 3 </span><span class="subxComment">#</span> <span id="L4" class="LineNr"> 4 </span><span class="subxComment"># To run:</span> -<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./subx translate init.linux examples/ex1.2.subx -o examples/ex1</span> -<span id="L6" class="LineNr"> 6 </span><span class="subxComment"># $ ./subx run examples/ex1</span> +<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./bootstrap translate init.linux apps/ex1.2.subx -o apps/ex1</span> +<span id="L6" class="LineNr"> 6 </span><span class="subxComment"># $ ./bootstrap run apps/ex1</span> <span id="L7" class="LineNr"> 7 </span><span class="subxComment"># Expected result:</span> <span id="L8" class="LineNr"> 8 </span><span class="subxComment"># $ echo $?</span> <span id="L9" class="LineNr"> 9 </span><span class="subxComment"># 42</span> diff --git a/html/apps/ex10.subx.html b/html/apps/ex10.subx.html index a0a7fd11..ddfd8a6e 100644 --- a/html/apps/ex10.subx.html +++ b/html/apps/ex10.subx.html @@ -60,8 +60,8 @@ if ('onhashchange' in window) { <span id="L1" class="LineNr"> 1 </span><span class="subxComment"># String comparison: return 1 iff the two args passed in at the commandline are equal.</span> <span id="L2" class="LineNr"> 2 </span><span class="subxComment">#</span> <span id="L3" class="LineNr"> 3 </span><span class="subxComment"># To run:</span> -<span id="L4" class="LineNr"> 4 </span><span class="subxComment"># $ ./subx translate init.linux examples/ex10.subx -o examples/ex10</span> -<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./subx run examples/ex10 abc abd</span> +<span id="L4" class="LineNr"> 4 </span><span class="subxComment"># $ ./bootstrap translate init.linux apps/ex10.subx -o apps/ex10</span> +<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./bootstrap run apps/ex10 abc abd</span> <span id="L6" class="LineNr"> 6 </span><span class="subxComment"># Expected result:</span> <span id="L7" class="LineNr"> 7 </span><span class="subxComment"># $ echo $?</span> <span id="L8" class="LineNr"> 8 </span><span class="subxComment"># 0 # false</span> diff --git a/html/apps/ex11.subx.html b/html/apps/ex11.subx.html index 199ffcff..275a594b 100644 --- a/html/apps/ex11.subx.html +++ b/html/apps/ex11.subx.html @@ -68,8 +68,8 @@ if ('onhashchange' in window) { <span id="L6" class="LineNr"> 6 </span><span class="subxComment"># a null-terminated 'kernel string' with a length-prefixed 'SubX string'.</span> <span id="L7" class="LineNr"> 7 </span><span class="subxComment">#</span> <span id="L8" class="LineNr"> 8 </span><span class="subxComment"># To run:</span> -<span id="L9" class="LineNr"> 9 </span><span class="subxComment"># $ ./subx translate init.linux examples/ex11.subx -o examples/ex11</span> -<span id="L10" class="LineNr"> 10 </span><span class="subxComment"># $ ./subx run examples/ex11 # runs a series of tests</span> +<span id="L9" class="LineNr"> 9 </span><span class="subxComment"># $ ./bootstrap translate init.linux apps/ex11.subx -o apps/ex11</span> +<span id="L10" class="LineNr"> 10 </span><span class="subxComment"># $ ./bootstrap run apps/ex11 # runs a series of tests</span> <span id="L11" class="LineNr"> 11 </span><span class="subxComment"># ...... # all tests pass</span> <span id="L12" class="LineNr"> 12 </span><span class="subxComment">#</span> <span id="L13" class="LineNr"> 13 </span><span class="subxComment"># (We can't yet run the tests when given a "test" commandline argument,</span> diff --git a/html/apps/ex12.subx.html b/html/apps/ex12.subx.html index 221bec80..4f753e5c 100644 --- a/html/apps/ex12.subx.html +++ b/html/apps/ex12.subx.html @@ -59,8 +59,8 @@ if ('onhashchange' in window) { <span id="L2" class="LineNr"> 2 </span><span class="subxComment"># Create a new segment using mmap, save the address, write to it.</span> <span id="L3" class="LineNr"> 3 </span><span class="subxComment">#</span> <span id="L4" class="LineNr"> 4 </span><span class="subxComment"># To run:</span> -<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./subx translate init.linux examples/ex12.subx -o examples/ex12</span> -<span id="L6" class="LineNr"> 6 </span><span class="subxComment"># $ ./subx run examples/ex12</span> +<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./bootstrap translate init.linux apps/ex12.subx -o apps/ex12</span> +<span id="L6" class="LineNr"> 6 </span><span class="subxComment"># $ ./bootstrap run apps/ex12</span> <span id="L7" class="LineNr"> 7 </span><span class="subxComment"># You shouldn't get a segmentation fault.</span> <span id="L8" class="LineNr"> 8 </span> <span id="L9" class="LineNr"> 9 </span>== code diff --git a/html/apps/ex13.subx.html b/html/apps/ex13.subx.html new file mode 100644 index 00000000..d85c5166 --- /dev/null +++ b/html/apps/ex13.subx.html @@ -0,0 +1,87 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> +<meta http-equiv="content-type" content="text/html; charset=UTF-8"> +<title>Mu - apps/ex13.subx</title> +<meta name="Generator" content="Vim/8.1"> +<meta name="plugin-version" content="vim8.1_v1"> +<meta name="syntax" content="none"> +<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy="> +<meta name="colorscheme" content="minimal-light"> +<style type="text/css"> +<!-- +pre { font-family: monospace; color: #000000; background-color: #c6c6c6; } +body { font-size:12pt; font-family: monospace; color: #000000; background-color: #c6c6c6; } +a { color:inherit; } +* { font-size:12pt; font-size: 1em; } +.subxComment { color: #005faf; } +.subxS2Comment { color: #8a8a8a; } +.LineNr { } +.subxS1Comment { color: #0000af; } +.SpecialChar { color: #d70000; } +.Normal { color: #000000; background-color: #c6c6c6; padding-bottom: 1px; } +.Constant { color: #008787; } +--> +</style> + +<script type='text/javascript'> +<!-- + +/* function to open any folds containing a jumped-to line before jumping to it */ +function JumpToLine() +{ + var lineNum; + lineNum = window.location.hash; + lineNum = lineNum.substr(1); /* strip off '#' */ + + if (lineNum.indexOf('L') == -1) { + lineNum = 'L'+lineNum; + } + var lineElem = document.getElementById(lineNum); + /* Always jump to new location even if the line was hidden inside a fold, or + * we corrected the raw number to a line ID. + */ + if (lineElem) { + lineElem.scrollIntoView(true); + } + return true; +} +if ('onhashchange' in window) { + window.onhashchange = JumpToLine; +} + +--> +</script> +</head> +<body onload='JumpToLine();'> +<a href='https://github.com/akkartik/mu/blob/master/apps/ex13.subx'>https://github.com/akkartik/mu/blob/master/apps/ex13.subx</a> +<pre id='vimCodeElement'> +<span id="L1" class="LineNr"> 1 </span><span class="subxComment"># Compare 3 and 3.</span> +<span id="L2" class="LineNr"> 2 </span><span class="subxComment">#</span> +<span id="L3" class="LineNr"> 3 </span><span class="subxComment"># To run:</span> +<span id="L4" class="LineNr"> 4 </span><span class="subxComment"># $ ./bootstrap translate init.linux apps/ex13.subx -o apps/ex13</span> +<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./bootstrap run apps/ex13</span> +<span id="L6" class="LineNr"> 6 </span><span class="subxComment"># Expected result:</span> +<span id="L7" class="LineNr"> 7 </span><span class="subxComment"># $ echo $?</span> +<span id="L8" class="LineNr"> 8 </span><span class="subxComment"># 1</span> +<span id="L9" class="LineNr"> 9 </span> +<span id="L10" class="LineNr">10 </span>== code +<span id="L11" class="LineNr">11 </span><span class="subxComment"># instruction effective address register displacement immediate</span> +<span id="L12" class="LineNr">12 </span><span class="subxS1Comment"># . op subop mod rm32 base index scale r32</span> +<span id="L13" class="LineNr">13 </span><span class="subxS1Comment"># . 1-3 bytes 3 bits 2 bits 3 bits 3 bits 3 bits 2 bits 2 bits 0/1/2/4 bytes 0/1/2/4 bytes</span> +<span id="L14" class="LineNr">14 </span> +<span id="L15" class="LineNr">15 </span><span class="SpecialChar">Entry</span>: +<span id="L16" class="LineNr">16 </span> b8/copy-to-eax 3/imm32 +<span id="L17" class="LineNr">17 </span> 3d/compare-eax-and 3/imm32 +<span id="L18" class="LineNr">18 </span> 0f 94/set-if-= 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> <span class="Normal"> . </span> <span class="subxComment"># set ebx to ZF</span> +<span id="L19" class="LineNr">19 </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> 0xff/imm32 <span class="subxComment"># AND eax with 0xff</span> +<span id="L20" class="LineNr">20 </span> +<span id="L21" class="LineNr">21 </span><span class="Constant">$exit</span>: +<span id="L22" class="LineNr">22 </span> <span class="subxComment"># exit(ebx)</span> +<span id="L23" class="LineNr">23 </span> e8/call syscall_exit/disp32 +<span id="L24" class="LineNr">24 </span> +<span id="L25" class="LineNr">25 </span><span class="subxS2Comment"># . . vim:nowrap:textwidth=0</span> +</pre> +</body> +</html> +<!-- vim: set foldmethod=manual : --> diff --git a/html/apps/ex14.subx.html b/html/apps/ex14.subx.html new file mode 100644 index 00000000..ed5fa2ee --- /dev/null +++ b/html/apps/ex14.subx.html @@ -0,0 +1,88 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> +<meta http-equiv="content-type" content="text/html; charset=UTF-8"> +<title>Mu - apps/ex14.subx</title> +<meta name="Generator" content="Vim/8.1"> +<meta name="plugin-version" content="vim8.1_v1"> +<meta name="syntax" content="none"> +<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy="> +<meta name="colorscheme" content="minimal-light"> +<style type="text/css"> +<!-- +pre { font-family: monospace; color: #000000; background-color: #c6c6c6; } +body { font-size:12pt; font-family: monospace; color: #000000; background-color: #c6c6c6; } +a { color:inherit; } +* { font-size:12pt; font-size: 1em; } +.subxComment { color: #005faf; } +.subxS2Comment { color: #8a8a8a; } +.LineNr { } +.subxS1Comment { color: #0000af; } +.SpecialChar { color: #d70000; } +.Normal { color: #000000; background-color: #c6c6c6; padding-bottom: 1px; } +.Constant { color: #008787; } +--> +</style> + +<script type='text/javascript'> +<!-- + +/* function to open any folds containing a jumped-to line before jumping to it */ +function JumpToLine() +{ + var lineNum; + lineNum = window.location.hash; + lineNum = lineNum.substr(1); /* strip off '#' */ + + if (lineNum.indexOf('L') == -1) { + lineNum = 'L'+lineNum; + } + var lineElem = document.getElementById(lineNum); + /* Always jump to new location even if the line was hidden inside a fold, or + * we corrected the raw number to a line ID. + */ + if (lineElem) { + lineElem.scrollIntoView(true); + } + return true; +} +if ('onhashchange' in window) { + window.onhashchange = JumpToLine; +} + +--> +</script> +</head> +<body onload='JumpToLine();'> +<a href='https://github.com/akkartik/mu/blob/master/apps/ex14.subx'>https://github.com/akkartik/mu/blob/master/apps/ex14.subx</a> +<pre id='vimCodeElement'> +<span id="L1" class="LineNr"> 1 </span><span class="subxComment"># Multiply 2 numbers.</span> +<span id="L2" class="LineNr"> 2 </span><span class="subxComment">#</span> +<span id="L3" class="LineNr"> 3 </span><span class="subxComment"># To run:</span> +<span id="L4" class="LineNr"> 4 </span><span class="subxComment"># $ ./bootstrap translate init.linux apps/ex14.subx -o apps/ex14</span> +<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./bootstrap run apps/ex14</span> +<span id="L6" class="LineNr"> 6 </span><span class="subxComment"># Expected result:</span> +<span id="L7" class="LineNr"> 7 </span><span class="subxComment"># $ echo $?</span> +<span id="L8" class="LineNr"> 8 </span><span class="subxComment"># 6</span> +<span id="L9" class="LineNr"> 9 </span> +<span id="L10" class="LineNr">10 </span>== code +<span id="L11" class="LineNr">11 </span><span class="subxComment"># instruction effective address register displacement immediate</span> +<span id="L12" class="LineNr">12 </span><span class="subxS1Comment"># . op subop mod rm32 base index scale r32</span> +<span id="L13" class="LineNr">13 </span><span class="subxS1Comment"># . 1-3 bytes 3 bits 2 bits 3 bits 3 bits 3 bits 2 bits 2 bits 0/1/2/4 bytes 0/1/2/4 bytes</span> +<span id="L14" class="LineNr">14 </span> +<span id="L15" class="LineNr">15 </span><span class="SpecialChar">Entry</span>: +<span id="L16" class="LineNr">16 </span> b8/copy-to-eax 1/imm32 +<span id="L17" class="LineNr">17 </span> b9/copy-to-ecx 2/imm32 +<span id="L18" class="LineNr">18 </span> bb/copy-to-ebx 3/imm32 +<span id="L19" class="LineNr">19 </span> +<span id="L20" class="LineNr">20 </span> 69/multiply 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx 3/imm32 <span class="subxComment"># ebx = ecx * 3</span> +<span id="L21" class="LineNr">21 </span> +<span id="L22" class="LineNr">22 </span><span class="Constant">$exit</span>: +<span id="L23" class="LineNr">23 </span> <span class="subxComment"># exit(ebx)</span> +<span id="L24" class="LineNr">24 </span> e8/call syscall_exit/disp32 +<span id="L25" class="LineNr">25 </span> +<span id="L26" class="LineNr">26 </span><span class="subxS2Comment"># . . vim:nowrap:textwidth=0</span> +</pre> +</body> +</html> +<!-- vim: set foldmethod=manual : --> diff --git a/html/apps/ex2.subx.html b/html/apps/ex2.subx.html index f1e4abe9..392f5440 100644 --- a/html/apps/ex2.subx.html +++ b/html/apps/ex2.subx.html @@ -56,8 +56,8 @@ if ('onhashchange' in window) { <span id="L1" class="LineNr"> 1 </span><span class="subxComment"># Add 1 and 1, and return the result in the exit code.</span> <span id="L2" class="LineNr"> 2 </span><span class="subxComment">#</span> <span id="L3" class="LineNr"> 3 </span><span class="subxComment"># To run:</span> -<span id="L4" class="LineNr"> 4 </span><span class="subxComment"># $ ./subx translate init.linux examples/ex2.subx -o examples/ex2</span> -<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./subx run examples/ex2</span> +<span id="L4" class="LineNr"> 4 </span><span class="subxComment"># $ ./bootstrap translate init.linux apps/ex2.subx -o apps/ex2</span> +<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./bootstrap run apps/ex2</span> <span id="L6" class="LineNr"> 6 </span><span class="subxComment"># Expected result:</span> <span id="L7" class="LineNr"> 7 </span><span class="subxComment"># $ echo $?</span> <span id="L8" class="LineNr"> 8 </span><span class="subxComment"># 2</span> diff --git a/html/apps/ex3.subx.html b/html/apps/ex3.subx.html index 31ff11a1..e267f0fe 100644 --- a/html/apps/ex3.subx.html +++ b/html/apps/ex3.subx.html @@ -59,8 +59,8 @@ if ('onhashchange' in window) { <span id="L1" class="LineNr"> 1 </span><span class="subxComment"># Add the first 10 numbers, and return the result in the exit code.</span> <span id="L2" class="LineNr"> 2 </span><span class="subxComment">#</span> <span id="L3" class="LineNr"> 3 </span><span class="subxComment"># To run:</span> -<span id="L4" class="LineNr"> 4 </span><span class="subxComment"># $ ./subx translate init.linux examples/ex3.subx -o examples/ex3</span> -<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./subx run examples/ex3</span> +<span id="L4" class="LineNr"> 4 </span><span class="subxComment"># $ ./bootstrap translate init.linux apps/ex3.subx -o apps/ex3</span> +<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./bootstrap run apps/ex3</span> <span id="L6" class="LineNr"> 6 </span><span class="subxComment"># Expected result:</span> <span id="L7" class="LineNr"> 7 </span><span class="subxComment"># $ echo $?</span> <span id="L8" class="LineNr"> 8 </span><span class="subxComment"># 55</span> diff --git a/html/apps/ex4.subx.html b/html/apps/ex4.subx.html index b1e1019b..297576bb 100644 --- a/html/apps/ex4.subx.html +++ b/html/apps/ex4.subx.html @@ -57,8 +57,8 @@ if ('onhashchange' in window) { <span id="L1" class="LineNr"> 1 </span><span class="subxComment"># Read a character from stdin, save it to a global, write it to stdout.</span> <span id="L2" class="LineNr"> 2 </span><span class="subxComment">#</span> <span id="L3" class="LineNr"> 3 </span><span class="subxComment"># To run:</span> -<span id="L4" class="LineNr"> 4 </span><span class="subxComment"># $ ./subx translate init.linux examples/ex4.subx -o examples/ex4</span> -<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./subx run examples/ex4</span> +<span id="L4" class="LineNr"> 4 </span><span class="subxComment"># $ ./bootstrap translate init.linux apps/ex4.subx -o apps/ex4</span> +<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./bootstrap run apps/ex4</span> <span id="L6" class="LineNr"> 6 </span> <span id="L7" class="LineNr"> 7 </span>== data <span id="L8" class="LineNr"> 8 </span> diff --git a/html/apps/ex5.subx.html b/html/apps/ex5.subx.html index 26c5700b..c403dcae 100644 --- a/html/apps/ex5.subx.html +++ b/html/apps/ex5.subx.html @@ -58,8 +58,8 @@ if ('onhashchange' in window) { <span id="L1" class="LineNr"> 1 </span><span class="subxComment"># Read a character from stdin, save it to a local on the stack, write it to stdout.</span> <span id="L2" class="LineNr"> 2 </span><span class="subxComment">#</span> <span id="L3" class="LineNr"> 3 </span><span class="subxComment"># To run:</span> -<span id="L4" class="LineNr"> 4 </span><span class="subxComment"># $ ./subx translate init.linux examples/ex5.subx -o examples/ex5</span> -<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./subx run examples/ex5</span> +<span id="L4" class="LineNr"> 4 </span><span class="subxComment"># $ ./bootstrap translate init.linux apps/ex5.subx -o apps/ex5</span> +<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./bootstrap run apps/ex5</span> <span id="L6" class="LineNr"> 6 </span> <span id="L7" class="LineNr"> 7 </span>== code <span id="L8" class="LineNr"> 8 </span><span class="subxComment"># instruction effective address register displacement immediate</span> diff --git a/html/apps/ex6.subx.html b/html/apps/ex6.subx.html index e8f7dbe4..ba8a4037 100644 --- a/html/apps/ex6.subx.html +++ b/html/apps/ex6.subx.html @@ -58,8 +58,8 @@ if ('onhashchange' in window) { <span id="L1" class="LineNr"> 1 </span><span class="subxComment"># Print out a (global variable) string to stdout.</span> <span id="L2" class="LineNr"> 2 </span><span class="subxComment">#</span> <span id="L3" class="LineNr"> 3 </span><span class="subxComment"># To run:</span> -<span id="L4" class="LineNr"> 4 </span><span class="subxComment"># $ ./subx translate init.linux examples/ex6.subx -o examples/ex6</span> -<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./subx run examples/ex6</span> +<span id="L4" class="LineNr"> 4 </span><span class="subxComment"># $ ./bootstrap translate init.linux apps/ex6.subx -o apps/ex6</span> +<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./bootstrap run apps/ex6</span> <span id="L6" class="LineNr"> 6 </span><span class="subxComment"># Hello, world!</span> <span id="L7" class="LineNr"> 7 </span> <span id="L8" class="LineNr"> 8 </span>== code diff --git a/html/apps/ex7.subx.html b/html/apps/ex7.subx.html index 617c44c2..76a1de01 100644 --- a/html/apps/ex7.subx.html +++ b/html/apps/ex7.subx.html @@ -62,8 +62,8 @@ if ('onhashchange' in window) { <span id="L5" class="LineNr"> 5 </span><span class="subxComment"># the character read.</span> <span id="L6" class="LineNr"> 6 </span><span class="subxComment">#</span> <span id="L7" class="LineNr"> 7 </span><span class="subxComment"># To run:</span> -<span id="L8" class="LineNr"> 8 </span><span class="subxComment"># $ ./subx translate init.linux examples/ex7.subx -o examples/ex7</span> -<span id="L9" class="LineNr"> 9 </span><span class="subxComment"># $ ./subx run examples/ex7</span> +<span id="L8" class="LineNr"> 8 </span><span class="subxComment"># $ ./bootstrap translate init.linux apps/ex7.subx -o apps/ex7</span> +<span id="L9" class="LineNr"> 9 </span><span class="subxComment"># $ ./bootstrap run apps/ex7</span> <span id="L10" class="LineNr">10 </span><span class="subxComment"># Expected result:</span> <span id="L11" class="LineNr">11 </span><span class="subxComment"># $ echo $?</span> <span id="L12" class="LineNr">12 </span><span class="subxComment"># 97</span> diff --git a/html/apps/ex8.subx.html b/html/apps/ex8.subx.html index 8cf64378..a6458493 100644 --- a/html/apps/ex8.subx.html +++ b/html/apps/ex8.subx.html @@ -60,8 +60,8 @@ if ('onhashchange' in window) { <span id="L1" class="LineNr"> 1 </span><span class="subxComment"># Example reading commandline arguments: compute length of first arg.</span> <span id="L2" class="LineNr"> 2 </span><span class="subxComment">#</span> <span id="L3" class="LineNr"> 3 </span><span class="subxComment"># To run:</span> -<span id="L4" class="LineNr"> 4 </span><span class="subxComment"># $ ./subx translate init.linux examples/ex8.subx -o examples/ex8</span> -<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./subx run examples/ex8 abc de fghi</span> +<span id="L4" class="LineNr"> 4 </span><span class="subxComment"># $ ./bootstrap translate init.linux apps/ex8.subx -o apps/ex8</span> +<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./bootstrap run apps/ex8 abc de fghi</span> <span id="L6" class="LineNr"> 6 </span><span class="subxComment"># Expected result:</span> <span id="L7" class="LineNr"> 7 </span><span class="subxComment"># $ echo $?</span> <span id="L8" class="LineNr"> 8 </span><span class="subxComment"># 3 # length of 'abc'</span> diff --git a/html/apps/ex9.subx.html b/html/apps/ex9.subx.html index 3558ac1c..4ac15f83 100644 --- a/html/apps/ex9.subx.html +++ b/html/apps/ex9.subx.html @@ -62,8 +62,8 @@ if ('onhashchange' in window) { <span id="L4" class="LineNr"> 4 </span><span class="subxComment"># letter of second arg.</span> <span id="L5" class="LineNr"> 5 </span><span class="subxComment">#</span> <span id="L6" class="LineNr"> 6 </span><span class="subxComment"># To run:</span> -<span id="L7" class="LineNr"> 7 </span><span class="subxComment"># $ ./subx translate init.linux examples/ex9.subx -o examples/ex9</span> -<span id="L8" class="LineNr"> 8 </span><span class="subxComment"># $ ./subx run examples/ex9 z x</span> +<span id="L7" class="LineNr"> 7 </span><span class="subxComment"># $ ./bootstrap translate init.linux apps/ex9.subx -o apps/ex9</span> +<span id="L8" class="LineNr"> 8 </span><span class="subxComment"># $ ./bootstrap run apps/ex9 z x</span> <span id="L9" class="LineNr"> 9 </span><span class="subxComment"># Expected result:</span> <span id="L10" class="LineNr">10 </span><span class="subxComment"># $ echo $?</span> <span id="L11" class="LineNr">11 </span><span class="subxComment"># 2</span> diff --git a/html/apps/factorial.subx.html b/html/apps/factorial.subx.html index 8c637957..bbd42944 100644 --- a/html/apps/factorial.subx.html +++ b/html/apps/factorial.subx.html @@ -62,14 +62,14 @@ if ('onhashchange' in window) { <span id="L1" class="LineNr"> 1 </span><span class="subxComment">## compute the factorial of 5, and return the result in the exit code</span> <span id="L2" class="LineNr"> 2 </span><span class="subxComment">#</span> <span id="L3" class="LineNr"> 3 </span><span class="subxComment"># To run:</span> -<span id="L4" class="LineNr"> 4 </span><span class="subxComment"># $ ./subx translate init.linux 0*.subx apps/factorial.subx -o apps/factorial</span> -<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./subx run apps/factorial</span> +<span id="L4" class="LineNr"> 4 </span><span class="subxComment"># $ ./bootstrap translate init.linux 0*.subx apps/factorial.subx -o apps/factorial</span> +<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./bootstrap run apps/factorial</span> <span id="L6" class="LineNr"> 6 </span><span class="subxComment"># Expected result:</span> <span id="L7" class="LineNr"> 7 </span><span class="subxComment"># $ echo $?</span> <span id="L8" class="LineNr"> 8 </span><span class="subxComment"># 120</span> <span id="L9" class="LineNr"> 9 </span><span class="subxComment">#</span> <span id="L10" class="LineNr"> 10 </span><span class="subxComment"># You can also run the automated test suite:</span> -<span id="L11" class="LineNr"> 11 </span><span class="subxComment"># $ ./subx run apps/factorial test</span> +<span id="L11" class="LineNr"> 11 </span><span class="subxComment"># $ ./bootstrap run apps/factorial test</span> <span id="L12" class="LineNr"> 12 </span><span class="subxComment"># Expected output:</span> <span id="L13" class="LineNr"> 13 </span><span class="subxComment"># ........</span> <span id="L14" class="LineNr"> 14 </span><span class="subxComment"># Every '.' indicates a passing test. Failing tests get a 'F'.</span> diff --git a/html/apps/factorial2.subx.html b/html/apps/factorial2.subx.html index 4d59c774..4e09dcf6 100644 --- a/html/apps/factorial2.subx.html +++ b/html/apps/factorial2.subx.html @@ -65,13 +65,13 @@ if ('onhashchange' in window) { <span id="L5" class="LineNr"> 5 </span><span class="subxComment">#</span> <span id="L6" class="LineNr"> 6 </span><span class="subxComment"># To run:</span> <span id="L7" class="LineNr"> 7 </span><span class="subxComment"># $ ./translate_subx init.linux 0*.subx apps/factorial.subx -o apps/factorial</span> -<span id="L8" class="LineNr"> 8 </span><span class="subxComment"># $ ./subx run apps/factorial</span> +<span id="L8" class="LineNr"> 8 </span><span class="subxComment"># $ ./bootstrap run apps/factorial</span> <span id="L9" class="LineNr"> 9 </span><span class="subxComment"># Expected result:</span> <span id="L10" class="LineNr"> 10 </span><span class="subxComment"># $ echo $?</span> <span id="L11" class="LineNr"> 11 </span><span class="subxComment"># 120</span> <span id="L12" class="LineNr"> 12 </span><span class="subxComment">#</span> <span id="L13" class="LineNr"> 13 </span><span class="subxComment"># You can also run the automated test suite:</span> -<span id="L14" class="LineNr"> 14 </span><span class="subxComment"># $ ./subx run apps/factorial test</span> +<span id="L14" class="LineNr"> 14 </span><span class="subxComment"># $ ./bootstrap run apps/factorial test</span> <span id="L15" class="LineNr"> 15 </span><span class="subxComment"># Expected output:</span> <span id="L16" class="LineNr"> 16 </span><span class="subxComment"># ........</span> <span id="L17" class="LineNr"> 17 </span><span class="subxComment"># Every '.' indicates a passing test. Failing tests get a 'F'.</span> diff --git a/html/apps/factorial3.subx.html b/html/apps/factorial3.subx.html index 7ad4a9fd..10792365 100644 --- a/html/apps/factorial3.subx.html +++ b/html/apps/factorial3.subx.html @@ -65,13 +65,13 @@ if ('onhashchange' in window) { <span id="L6" class="LineNr"> 6 </span><span class="subxComment">#</span> <span id="L7" class="LineNr"> 7 </span><span class="subxComment"># To run:</span> <span id="L8" class="LineNr"> 8 </span><span class="subxComment"># $ ./translate_subx init.linux 0*.subx apps/factorial.subx -o apps/factorial</span> -<span id="L9" class="LineNr"> 9 </span><span class="subxComment"># $ ./subx run apps/factorial</span> +<span id="L9" class="LineNr"> 9 </span><span class="subxComment"># $ ./bootstrap run apps/factorial</span> <span id="L10" class="LineNr">10 </span><span class="subxComment"># Expected result:</span> <span id="L11" class="LineNr">11 </span><span class="subxComment"># $ echo $?</span> <span id="L12" class="LineNr">12 </span><span class="subxComment"># 120</span> <span id="L13" class="LineNr">13 </span><span class="subxComment">#</span> <span id="L14" class="LineNr">14 </span><span class="subxComment"># You can also run the automated test suite:</span> -<span id="L15" class="LineNr">15 </span><span class="subxComment"># $ ./subx run apps/factorial test</span> +<span id="L15" class="LineNr">15 </span><span class="subxComment"># $ ./bootstrap run apps/factorial test</span> <span id="L16" class="LineNr">16 </span><span class="subxComment"># Expected output:</span> <span id="L17" class="LineNr">17 </span><span class="subxComment"># ........</span> <span id="L18" class="LineNr">18 </span><span class="subxComment"># Every '.' indicates a passing test. Failing tests get a 'F'.</span> diff --git a/html/apps/factorial4.subx.html b/html/apps/factorial4.subx.html index 8759c2f9..bd41739e 100644 --- a/html/apps/factorial4.subx.html +++ b/html/apps/factorial4.subx.html @@ -66,13 +66,13 @@ if ('onhashchange' in window) { <span id="L7" class="LineNr"> 7 </span><span class="subxComment">#</span> <span id="L8" class="LineNr"> 8 </span><span class="subxComment"># To run:</span> <span id="L9" class="LineNr"> 9 </span><span class="subxComment"># $ ./translate_subx init.linux 0*.subx apps/factorial.subx -o apps/factorial</span> -<span id="L10" class="LineNr">10 </span><span class="subxComment"># $ ./subx run apps/factorial</span> +<span id="L10" class="LineNr">10 </span><span class="subxComment"># $ ./bootstrap run apps/factorial</span> <span id="L11" class="LineNr">11 </span><span class="subxComment"># Expected result:</span> <span id="L12" class="LineNr">12 </span><span class="subxComment"># $ echo $?</span> <span id="L13" class="LineNr">13 </span><span class="subxComment"># 120</span> <span id="L14" class="LineNr">14 </span><span class="subxComment">#</span> <span id="L15" class="LineNr">15 </span><span class="subxComment"># You can also run the automated test suite:</span> -<span id="L16" class="LineNr">16 </span><span class="subxComment"># $ ./subx run apps/factorial test</span> +<span id="L16" class="LineNr">16 </span><span class="subxComment"># $ ./bootstrap run apps/factorial test</span> <span id="L17" class="LineNr">17 </span><span class="subxComment"># Expected output:</span> <span id="L18" class="LineNr">18 </span><span class="subxComment"># ........</span> <span id="L19" class="LineNr">19 </span><span class="subxComment"># Every '.' indicates a passing test. Failing tests get a 'F'.</span> diff --git a/html/apps/handle.subx.html b/html/apps/handle.subx.html index fc0ce1a8..9cf47d93 100644 --- a/html/apps/handle.subx.html +++ b/html/apps/handle.subx.html @@ -76,8 +76,8 @@ if ('onhashchange' in window) { <span id="L13" class="LineNr"> 13 </span><span class="subxComment"># offset 4: address</span> <span id="L14" class="LineNr"> 14 </span><span class="subxComment">#</span> <span id="L15" class="LineNr"> 15 </span><span class="subxComment"># To run:</span> -<span id="L16" class="LineNr"> 16 </span><span class="subxComment"># $ ./subx translate init.linux 0*.subx apps/handle.subx -o apps/handle</span> -<span id="L17" class="LineNr"> 17 </span><span class="subxComment"># $ ./subx run apps/handle</span> +<span id="L16" class="LineNr"> 16 </span><span class="subxComment"># $ ./bootstrap translate init.linux 0*.subx apps/handle.subx -o apps/handle</span> +<span id="L17" class="LineNr"> 17 </span><span class="subxComment"># $ ./bootstrap run apps/handle</span> <span id="L18" class="LineNr"> 18 </span><span class="subxComment"># Expected result is a successful lookup followed by a hard abort:</span> <span id="L19" class="LineNr"> 19 </span><span class="subxComment"># lookup succeeded</span> <span id="L20" class="LineNr"> 20 </span><span class="subxComment"># lookup failed</span> diff --git a/html/apps/hex.subx.html b/html/apps/hex.subx.html index 4018c82f..936a37e5 100644 --- a/html/apps/hex.subx.html +++ b/html/apps/hex.subx.html @@ -64,8 +64,8 @@ if ('onhashchange' in window) { <span id="L3" class="LineNr"> 3 </span><span class="subxComment"># comments between '#' and newline.</span> <span id="L4" class="LineNr"> 4 </span><span class="subxComment">#</span> <span id="L5" class="LineNr"> 5 </span><span class="subxComment"># To run:</span> -<span id="L6" class="LineNr"> 6 </span><span class="subxComment"># $ ./subx translate init.linux 0*.subx apps/subx-params.subx apps/hex.subx -o apps/hex</span> -<span id="L7" class="LineNr"> 7 </span><span class="subxComment"># $ echo '80 81 82 # comment' |./subx run apps/hex |xxd -</span> +<span id="L6" class="LineNr"> 6 </span><span class="subxComment"># $ ./bootstrap translate init.linux 0*.subx apps/subx-params.subx apps/hex.subx -o apps/hex</span> +<span id="L7" class="LineNr"> 7 </span><span class="subxComment"># $ echo '80 81 82 # comment' |./bootstrap run apps/hex |xxd -</span> <span id="L8" class="LineNr"> 8 </span><span class="subxComment"># Expected output:</span> <span id="L9" class="LineNr"> 9 </span><span class="subxComment"># 00000000: 8081 82</span> <span id="L10" class="LineNr"> 10 </span><span class="subxComment">#</span> @@ -225,7 +225,7 @@ if ('onhashchange' in window) { <span id="L164" class="LineNr"> 164 </span> 3d/compare-eax-and 0xffffffff/imm32/Eof <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="L167" class="LineNr"> 167 </span> e8/call <a href='../067parse-hex.subx.html#L864'>from-hex-char</a>/disp32 <span id="L168" class="LineNr"> 168 </span> <span class="subxComment"># ecx = eax</span> <span id="L169" class="LineNr"> 169 </span> 89/copy 3/mod/direct 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 eax to ecx</span> <span id="L170" class="LineNr"> 170 </span> <span class="subxComment"># eax = scan-next-byte(in, err, ed)</span> @@ -250,7 +250,7 @@ if ('onhashchange' in window) { <span id="L189" class="LineNr"> 189 </span> e8/call <a href='../068error-byte.subx.html#L27'>error-byte</a>/disp32 <span class="subxComment"># never returns</span> <span id="L190" class="LineNr"> 190 </span><span class="Constant">$convert-next-octet:convert</span>: <span id="L191" class="LineNr"> 191 </span> <span class="subxComment"># eax = from-hex-char(eax)</span> -<span id="L192" class="LineNr"> 192 </span> e8/call <a href='../067parse-hex.subx.html#L803'>from-hex-char</a>/disp32 +<span id="L192" class="LineNr"> 192 </span> e8/call <a href='../067parse-hex.subx.html#L864'>from-hex-char</a>/disp32 <span id="L193" class="LineNr"> 193 </span> <span class="subxComment"># eax = (ecx << 4) | eax</span> <span id="L194" class="LineNr"> 194 </span> <span class="subxS1Comment"># . ecx <<= 4</span> <span id="L195" class="LineNr"> 195 </span> c1/shift 4/subop/left 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> 4/imm8 <span class="subxComment"># shift ecx left by 4 bits</span> @@ -574,7 +574,7 @@ if ('onhashchange' in window) { <span id="L513" class="LineNr"> 513 </span> <span class="subxS2Comment"># . . push args</span> <span id="L514" class="LineNr"> 514 </span> 50/push-eax <span id="L515" class="LineNr"> 515 </span> <span class="subxS2Comment"># . . call</span> -<span id="L516" class="LineNr"> 516 </span> e8/call <a href='../067parse-hex.subx.html#L640'>is-hex-digit?</a>/disp32 +<span id="L516" class="LineNr"> 516 </span> e8/call <a href='../067parse-hex.subx.html#L701'>is-hex-digit?</a>/disp32 <span id="L517" class="LineNr"> 517 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L518" class="LineNr"> 518 </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="L519" class="LineNr"> 519 </span> <span class="subxS1Comment"># . compare with 'false'</span> diff --git a/html/apps/mu.subx.html b/html/apps/mu.subx.html index e79d755b..cb40e41c 100644 --- a/html/apps/mu.subx.html +++ b/html/apps/mu.subx.html @@ -5705,9 +5705,9 @@ if ('onhashchange' in window) { <span id="L5848" class="LineNr"> 5848 </span> <span class="subxComment"># Important: each block's depth during code-generation should be identical</span> <span id="L5849" class="LineNr"> 5849 </span> <span class="subxComment"># to what it was during parsing.</span> <span id="L5850" class="LineNr"> 5850 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 1/imm32 -<span id="L5851" class="LineNr"> 5851 </span> (<a href='mu.subx.html#L10470'>emit-subx-prologue</a> %edi) -<span id="L5852" class="LineNr"> 5852 </span> (<a href='mu.subx.html#L6937'>emit-subx-block</a> %edi *(ecx+0x10) %edx) <span class="subxComment"># Function-body</span> -<span id="L5853" class="LineNr"> 5853 </span> (<a href='mu.subx.html#L10484'>emit-subx-epilogue</a> %edi) +<span id="L5851" class="LineNr"> 5851 </span> (<a href='mu.subx.html#L10458'>emit-subx-prologue</a> %edi) +<span id="L5852" class="LineNr"> 5852 </span> (<a href='mu.subx.html#L6933'>emit-subx-block</a> %edi *(ecx+0x10) %edx) <span class="subxComment"># Function-body</span> +<span id="L5853" class="LineNr"> 5853 </span> (<a href='mu.subx.html#L10472'>emit-subx-epilogue</a> %edi) <span id="L5854" class="LineNr"> 5854 </span><span class="Constant">$emit-subx-function:end</span>: <span id="L5855" class="LineNr"> 5855 </span> <span class="subxS1Comment"># . reclaim locals</span> <span id="L5856" class="LineNr"> 5856 </span> 81 0/subop/add %esp 408/imm32 @@ -5747,7 +5747,7 @@ if ('onhashchange' in window) { <span id="L5890" class="LineNr"> 5890 </span> 81 7/subop/compare *ecx 0/imm32/block <span class="subxComment"># Stmt-tag</span> <span id="L5891" class="LineNr"> 5891 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L5892" class="LineNr"> 5892 </span><span class="Constant">$emit-subx-stmt-list:block</span>: -<span id="L5893" class="LineNr"> 5893 </span> (<a href='mu.subx.html#L6937'>emit-subx-block</a> *(ebp+8) %ecx *(ebp+0x10)) +<span id="L5893" class="LineNr"> 5893 </span> (<a href='mu.subx.html#L6933'>emit-subx-block</a> *(ebp+8) %ecx *(ebp+0x10)) <span id="L5894" class="LineNr"> 5894 </span> } <span id="L5895" class="LineNr"> 5895 </span> { <span id="L5896" class="LineNr"> 5896 </span><span class="Constant">$emit-subx-stmt-list:check-for-stmt</span>: @@ -5769,7 +5769,7 @@ if ('onhashchange' in window) { <span id="L5987" class="Folded"> 5987 </span><span class="Folded">+-- 19 lines: # conditional branches with an explicit target ----------------------------------------------------------------------------------------------------------------------------</span> <span id="L6006" class="LineNr"> 6006 </span> } <span id="L6007" class="LineNr"> 6007 </span><span class="Constant">$emit-subx-stmt-list:1-to-1</span>: -<span id="L6008" class="LineNr"> 6008 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> *(ebp+8) %ecx <span class="SpecialChar"><a href='mu.subx.html#L6983'>Primitives</a></span> *_Program-functions) +<span id="L6008" class="LineNr"> 6008 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> *(ebp+8) %ecx <span class="SpecialChar"><a href='mu.subx.html#L6979'>Primitives</a></span> *_Program-functions) <span id="L6009" class="LineNr"> 6009 </span> } <span id="L6010" class="LineNr"> 6010 </span> { <span id="L6011" class="LineNr"> 6011 </span><span class="Constant">$emit-subx-stmt-list:check-for-var-def</span>: @@ -5791,7 +5791,7 @@ if ('onhashchange' in window) { <span id="L6027" class="LineNr"> 6027 </span> <span class="subxComment"># register variable definition</span> <span id="L6028" class="LineNr"> 6028 </span> (<a href='../092stack.subx.html#L110'>push</a> *(ebp+0x10) %eax) <span id="L6029" class="LineNr"> 6029 </span> <span class="subxComment"># emit the instruction as usual</span> -<span id="L6030" class="LineNr"> 6030 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> *(ebp+8) %ecx <span class="SpecialChar"><a href='mu.subx.html#L6983'>Primitives</a></span> *_Program-functions) +<span id="L6030" class="LineNr"> 6030 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> *(ebp+8) %ecx <span class="SpecialChar"><a href='mu.subx.html#L6979'>Primitives</a></span> *_Program-functions) <span id="L6031" class="LineNr"> 6031 </span> <span class="subxComment"># var-seen? = true</span> <span id="L6032" class="LineNr"> 6032 </span> ba/copy-to-edx 1/imm32/true <span id="L6033" class="LineNr"> 6033 </span> } @@ -5837,7 +5837,7 @@ if ('onhashchange' in window) { <span id="L6073" class="LineNr"> 6073 </span> 3d/compare-eax-and 0/imm32/false <span id="L6074" class="LineNr"> 6074 </span> 75/jump-if-!= $compute-reg-and-maybe-emit-spill:end/disp8 <span id="L6075" class="LineNr"> 6075 </span> <span class="subxComment"># emit spill</span> -<span id="L6076" class="LineNr"> 6076 </span> (<a href='mu.subx.html#L10446'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) +<span id="L6076" class="LineNr"> 6076 </span> (<a href='mu.subx.html#L10434'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) <span id="L6077" class="LineNr"> 6077 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"ff 6/subop/push %"</span>) <span id="L6078" class="LineNr"> 6078 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *(ecx+0x10)) <span class="subxComment"># Var-register</span> <span id="L6079" class="LineNr"> 6079 </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>) @@ -5880,7 +5880,7 @@ if ('onhashchange' in window) { <span id="L6116" class="LineNr"> 6116 </span> <span class="subxComment"># clean up until target block</span> <span id="L6117" class="LineNr"> 6117 </span> (<a href='mu.subx.html#L6373'>emit-cleanup-code-until-target</a> *(ebp+8) *(ebp+0x10) %edx) <span id="L6118" class="LineNr"> 6118 </span> <span class="subxComment"># emit jump to target block</span> -<span id="L6119" class="LineNr"> 6119 </span> (<a href='mu.subx.html#L10446'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) +<span id="L6119" class="LineNr"> 6119 </span> (<a href='mu.subx.html#L10434'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) <span id="L6120" class="LineNr"> 6120 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"e9/jump "</span>) <span id="L6121" class="LineNr"> 6121 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) %edx) <span id="L6122" class="LineNr"> 6122 </span> (<a href='../054string-equal.subx.html#L58'>string-starts-with?</a> *(ecx+4) <span class="Constant">"break"</span>) @@ -5936,7 +5936,7 @@ if ('onhashchange' in window) { <span id="L6172" class="LineNr"> 6172 </span> 8b/-> *(ebp+0xc) 0/r32/eax <span id="L6173" class="LineNr"> 6173 </span> <span class="subxComment">#</span> <span id="L6174" class="LineNr"> 6174 </span> (<a href='../081table.subx.html#L27'>get</a> <span class="SpecialChar"><a href='mu.subx.html#L6188'>Reverse-branch</a></span> *(eax+4) 8 <span class="Constant">"reverse-branch: "</span>) <span class="subxComment"># Stmt1-operation => eax: (addr addr array byte)</span> -<span id="L6175" class="LineNr"> 6175 </span> (<a href='mu.subx.html#L10446'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) +<span id="L6175" class="LineNr"> 6175 </span> (<a href='mu.subx.html#L10434'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) <span id="L6176" class="LineNr"> 6176 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *eax) <span id="L6177" class="LineNr"> 6177 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" break/disp32\n"</span>) <span id="L6178" class="LineNr"> 6178 </span><span class="Constant">$emit-reverse-break:end</span>: @@ -6025,7 +6025,7 @@ if ('onhashchange' in window) { <span id="L6261" class="LineNr"> 6261 </span> 0f 85/jump-if-!= <span class="Constant">break</span>/disp32 <span id="L6262" class="LineNr"> 6262 </span><span class="Constant">$emit-unconditional-jump-to-depth:label-found</span>: <span id="L6263" class="LineNr"> 6263 </span> <span class="subxComment"># emit unconditional jump, then return</span> -<span id="L6264" class="LineNr"> 6264 </span> (<a href='mu.subx.html#L10446'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) +<span id="L6264" class="LineNr"> 6264 </span> (<a href='mu.subx.html#L10434'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) <span id="L6265" class="LineNr"> 6265 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"e9/jump "</span>) <span id="L6266" class="LineNr"> 6266 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *ebx) <span class="subxComment"># Var-name</span> <span id="L6267" class="LineNr"> 6267 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">":"</span>) @@ -6092,7 +6092,7 @@ if ('onhashchange' in window) { <span id="L6328" class="LineNr"> 6328 </span> 3d/compare-eax-and 0/imm32/false <span id="L6329" class="LineNr"> 6329 </span> 0f 85/jump-if-!= <span class="Constant">break</span>/disp32 <span id="L6330" class="LineNr"> 6330 </span><span class="Constant">$emit-cleanup-code-until-depth:reclaim-var-in-register</span>: -<span id="L6331" class="LineNr"> 6331 </span> (<a href='mu.subx.html#L10446'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) +<span id="L6331" class="LineNr"> 6331 </span> (<a href='mu.subx.html#L10434'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) <span id="L6332" class="LineNr"> 6332 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"8f 0/subop/pop %"</span>) <span id="L6333" class="LineNr"> 6333 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *(ebx+0x10)) <span id="L6334" class="LineNr"> 6334 </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>) @@ -6110,7 +6110,7 @@ if ('onhashchange' in window) { <span id="L6346" class="LineNr"> 6346 </span> 3d/compare-eax-and 0/imm32 <span id="L6347" class="LineNr"> 6347 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L6348" class="LineNr"> 6348 </span> <span class="subxComment">#</span> -<span id="L6349" class="LineNr"> 6349 </span> (<a href='mu.subx.html#L10446'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) +<span id="L6349" class="LineNr"> 6349 </span> (<a href='mu.subx.html#L10434'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) <span id="L6350" class="LineNr"> 6350 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"81 0/subop/add %esp "</span>) <span id="L6351" class="LineNr"> 6351 </span> (<a href='../066print-int.subx.html#L266'>print-int32-buffered</a> *(ebp+8) %eax) <span id="L6352" class="LineNr"> 6352 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"/imm32\n"</span>) @@ -6174,7 +6174,7 @@ if ('onhashchange' in window) { <span id="L6410" class="LineNr"> 6410 </span> 3d/compare-eax-and 0/imm32/false <span id="L6411" class="LineNr"> 6411 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 <span id="L6412" class="LineNr"> 6412 </span><span class="Constant">$emit-cleanup-code-until-target:reclaim-var-in-register</span>: -<span id="L6413" class="LineNr"> 6413 </span> (<a href='mu.subx.html#L10446'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) +<span id="L6413" class="LineNr"> 6413 </span> (<a href='mu.subx.html#L10434'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) <span id="L6414" class="LineNr"> 6414 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"8f 0/subop/pop %"</span>) <span id="L6415" class="LineNr"> 6415 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *(ebx+0x10)) <span id="L6416" class="LineNr"> 6416 </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>) @@ -6191,7 +6191,7 @@ if ('onhashchange' in window) { <span id="L6427" class="LineNr"> 6427 </span> 3d/compare-eax-and 0/imm32 <span id="L6428" class="LineNr"> 6428 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L6429" class="LineNr"> 6429 </span> <span class="subxComment">#</span> -<span id="L6430" class="LineNr"> 6430 </span> (<a href='mu.subx.html#L10446'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) +<span id="L6430" class="LineNr"> 6430 </span> (<a href='mu.subx.html#L10434'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) <span id="L6431" class="LineNr"> 6431 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"81 0/subop/add %esp "</span>) <span id="L6432" class="LineNr"> 6432 </span> (<a href='../066print-int.subx.html#L266'>print-int32-buffered</a> *(ebp+8) %eax) <span id="L6433" class="LineNr"> 6433 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"/imm32\n"</span>) @@ -6404,7 +6404,7 @@ if ('onhashchange' in window) { <span id="L6640" class="LineNr"> 6640 </span> { <span id="L6641" class="LineNr"> 6641 </span> 3d/compare-eax-with 0/imm32 <span id="L6642" class="LineNr"> 6642 </span> 7e/jump-if-<= <span class="Constant">break</span>/disp8 -<span id="L6643" class="LineNr"> 6643 </span> (<a href='mu.subx.html#L10446'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) +<span id="L6643" class="LineNr"> 6643 </span> (<a href='mu.subx.html#L10434'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) <span id="L6644" class="LineNr"> 6644 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"68/push 0/imm32\n"</span>) <span id="L6645" class="LineNr"> 6645 </span> <span class="subxComment"># n -= 4</span> <span id="L6646" class="LineNr"> 6646 </span> 2d/subtract-from-eax 4/imm32 @@ -6438,25 +6438,25 @@ if ('onhashchange' in window) { <span id="L6795" class="LineNr"> 6795 </span> <span class="subxComment"># if stmt matches a primitive, emit it</span> <span id="L6796" class="LineNr"> 6796 </span> { <span id="L6797" class="LineNr"> 6797 </span><span class="Constant">$emit-subx-stmt:check-for-primitive</span>: -<span id="L6798" class="LineNr"> 6798 </span> (<a href='mu.subx.html#L8793'>find-matching-primitive</a> *(ebp+0x10) *(ebp+0xc)) <span class="subxComment"># primitives, stmt => curr/eax</span> +<span id="L6798" class="LineNr"> 6798 </span> (<a href='mu.subx.html#L8789'>find-matching-primitive</a> *(ebp+0x10) *(ebp+0xc)) <span class="subxComment"># primitives, stmt => curr/eax</span> <span id="L6799" class="LineNr"> 6799 </span> 3d/compare-eax-and 0/imm32 <span id="L6800" class="LineNr"> 6800 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L6801" class="LineNr"> 6801 </span><span class="Constant">$emit-subx-stmt:primitive</span>: -<span id="L6802" class="LineNr"> 6802 </span> (<a href='mu.subx.html#L8364'>emit-subx-primitive</a> *(ebp+8) *(ebp+0xc) %eax) <span class="subxComment"># out, stmt, curr</span> +<span id="L6802" class="LineNr"> 6802 </span> (<a href='mu.subx.html#L8360'>emit-subx-primitive</a> *(ebp+8) *(ebp+0xc) %eax) <span class="subxComment"># out, stmt, curr</span> <span id="L6803" class="LineNr"> 6803 </span> e9/jump $emit-subx-stmt:end/disp32 <span id="L6804" class="LineNr"> 6804 </span> } <span id="L6805" class="LineNr"> 6805 </span> <span class="subxComment"># else if stmt matches a function, emit a call to it</span> <span id="L6806" class="LineNr"> 6806 </span> { <span id="L6807" class="LineNr"> 6807 </span><span class="Constant">$emit-subx-stmt:check-for-call</span>: -<span id="L6808" class="LineNr"> 6808 </span> (<a href='mu.subx.html#L8759'>find-matching-function</a> *(ebp+0x14) *(ebp+0xc)) <span class="subxComment"># functions, stmt => curr/eax</span> +<span id="L6808" class="LineNr"> 6808 </span> (<a href='mu.subx.html#L8755'>find-matching-function</a> *(ebp+0x14) *(ebp+0xc)) <span class="subxComment"># functions, stmt => curr/eax</span> <span id="L6809" class="LineNr"> 6809 </span> 3d/compare-eax-and 0/imm32 <span id="L6810" class="LineNr"> 6810 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 <span id="L6811" class="LineNr"> 6811 </span><span class="Constant">$emit-subx-stmt:call</span>: -<span id="L6812" class="LineNr"> 6812 </span> (<a href='mu.subx.html#L8564'>emit-subx-call</a> *(ebp+8) *(ebp+0xc) %eax) <span class="subxComment"># out, stmt, curr</span> +<span id="L6812" class="LineNr"> 6812 </span> (<a href='mu.subx.html#L8560'>emit-subx-call</a> *(ebp+8) *(ebp+0xc) %eax) <span class="subxComment"># out, stmt, curr</span> <span id="L6813" class="LineNr"> 6813 </span> e9/jump $emit-subx-stmt:end/disp32 <span id="L6814" class="LineNr"> 6814 </span> } <span id="L6815" class="LineNr"> 6815 </span> <span class="subxComment"># else assume it's a SubX function (TODO: how to type-check?!)</span> -<span id="L6816" class="LineNr"> 6816 </span> (<a href='mu.subx.html#L8602'>emit-hailmary-call</a> *(ebp+8) *(ebp+0xc)) +<span id="L6816" class="LineNr"> 6816 </span> (<a href='mu.subx.html#L8598'>emit-hailmary-call</a> *(ebp+8) *(ebp+0xc)) <span id="L6817" class="LineNr"> 6817 </span><span class="Constant">$emit-subx-stmt:end</span>: <span id="L6818" class="LineNr"> 6818 </span> <span class="subxS1Comment"># . restore registers</span> <span id="L6819" class="LineNr"> 6819 </span> 5b/pop-to-ebx @@ -6510,3539 +6510,3527 @@ if ('onhashchange' in window) { <span id="L6867" class="LineNr"> 6867 </span> 48/decrement-eax <span id="L6868" class="LineNr"> 6868 </span> <span class="subxComment"># var tmp2/eax: int = n & tmp</span> <span id="L6869" class="LineNr"> 6869 </span> 0b/and-> *(ebp+8) 0/r32/eax -<span id="L6870" class="LineNr"> 6870 </span> <span class="subxComment"># return (tmp2 == 0) # TODO: replace with setcc</span> +<span id="L6870" class="LineNr"> 6870 </span> <span class="subxComment"># return (tmp2 == 0)</span> <span id="L6871" class="LineNr"> 6871 </span> 3d/compare-eax-and 0/imm32 -<span id="L6872" class="LineNr"> 6872 </span> 74/jump-if-= $power-of-2?:true/disp8 -<span id="L6873" class="LineNr"> 6873 </span><span class="Constant">$power-of-2?:false</span>: -<span id="L6874" class="LineNr"> 6874 </span> b8/copy-to-eax 0/imm32/false -<span id="L6875" class="LineNr"> 6875 </span> eb/jump $power-of-2?:end/disp8 -<span id="L6876" class="LineNr"> 6876 </span><span class="Constant">$power-of-2?:true</span>: -<span id="L6877" class="LineNr"> 6877 </span> b8/copy-to-eax 1/imm32/true -<span id="L6878" class="LineNr"> 6878 </span><span class="Constant">$power-of-2?:end</span>: -<span id="L6879" class="LineNr"> 6879 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L6880" class="LineNr"> 6880 </span> 89/<- %esp 5/r32/ebp -<span id="L6881" class="LineNr"> 6881 </span> 5d/pop-to-ebp -<span id="L6882" class="LineNr"> 6882 </span> c3/return -<span id="L6883" class="LineNr"> 6883 </span> -<span id="L6884" class="LineNr"> 6884 </span><span class="subxFunction">num-shift-rights</span>: <span class="subxComment"># n: int -> result/eax: int</span> -<span id="L6885" class="LineNr"> 6885 </span> <span class="subxComment"># precondition: n is a positive power of 2</span> -<span id="L6886" class="LineNr"> 6886 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L6887" class="LineNr"> 6887 </span> 55/push-ebp -<span id="L6888" class="LineNr"> 6888 </span> 89/<- %ebp 4/r32/esp -<span id="L6889" class="LineNr"> 6889 </span> <span class="subxS1Comment"># . save registers</span> -<span id="L6890" class="LineNr"> 6890 </span> 51/push-ecx -<span id="L6891" class="LineNr"> 6891 </span> <span class="subxComment"># var curr/ecx: int = n</span> -<span id="L6892" class="LineNr"> 6892 </span> 8b/-> *(ebp+8) 1/r32/ecx -<span id="L6893" class="LineNr"> 6893 </span> <span class="subxComment"># result = 0</span> -<span id="L6894" class="LineNr"> 6894 </span> b8/copy-to-eax 0/imm32 -<span id="L6895" class="LineNr"> 6895 </span> { -<span id="L6896" class="LineNr"> 6896 </span> <span class="subxComment"># if (curr <= 1) break</span> -<span id="L6897" class="LineNr"> 6897 </span> 81 7/subop/compare %ecx 1/imm32 -<span id="L6898" class="LineNr"> 6898 </span> 7e/jump-if-<= <span class="Constant">break</span>/disp8 -<span id="L6899" class="LineNr"> 6899 </span> 40/increment-eax -<span id="L6900" class="LineNr"> 6900 </span> c1/shift 5/subop/arithmetic-right %ecx 1/imm8 -<span id="L6901" class="LineNr"> 6901 </span> eb/jump <span class="Constant">loop</span>/disp8 -<span id="L6902" class="LineNr"> 6902 </span> } -<span id="L6903" class="LineNr"> 6903 </span><span class="Constant">$num-shift-rights:end</span>: -<span id="L6904" class="LineNr"> 6904 </span> <span class="subxS1Comment"># . restore registers</span> -<span id="L6905" class="LineNr"> 6905 </span> 59/pop-to-ecx -<span id="L6906" class="LineNr"> 6906 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L6907" class="LineNr"> 6907 </span> 89/<- %esp 5/r32/ebp -<span id="L6908" class="LineNr"> 6908 </span> 5d/pop-to-ebp -<span id="L6909" class="LineNr"> 6909 </span> c3/return -<span id="L6910" class="LineNr"> 6910 </span> -<span id="L6911" class="LineNr"> 6911 </span><span class="subxFunction">print-mu-get-offset</span>: <span class="subxComment"># out: (addr buffered-file), stmt: (handle stmt)</span> -<span id="L6912" class="LineNr"> 6912 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L6913" class="LineNr"> 6913 </span> 55/push-ebp -<span id="L6914" class="LineNr"> 6914 </span> 89/<- %ebp 4/r32/esp -<span id="L6915" class="LineNr"> 6915 </span> <span class="subxS1Comment"># . save registers</span> -<span id="L6916" class="LineNr"> 6916 </span> 50/push-eax -<span id="L6917" class="LineNr"> 6917 </span> <span class="subxComment"># var second-inout/eax: (handle stmt-var) = stmt->inouts->next</span> -<span id="L6918" class="LineNr"> 6918 </span> 8b/-> *(ebp+0xc) 0/r32/eax -<span id="L6919" class="LineNr"> 6919 </span> 8b/-> *(eax+8) 0/r32/eax <span class="subxComment"># Stmt1-inouts</span> -<span id="L6920" class="LineNr"> 6920 </span> 8b/-> *(eax+4) 0/r32/eax <span class="subxComment"># Stmt-var-next</span> -<span id="L6921" class="LineNr"> 6921 </span> <span class="subxComment"># var output-var/eax: (handle var) = second-inout->value</span> -<span id="L6922" class="LineNr"> 6922 </span> 8b/-> *eax 0/r32/eax <span class="subxComment"># Stmt-var-value</span> -<span id="L6923" class="LineNr"> 6923 </span> <span class="subxComment"># print offset</span> -<span id="L6924" class="LineNr"> 6924 </span><span class="CommentedCode">#? (write-buffered Stderr "emitting offset from output var ")</span> -<span id="L6925" class="LineNr"> 6925 </span><span class="CommentedCode">#? (print-int32-buffered Stderr %eax)</span> -<span id="L6926" class="LineNr"> 6926 </span><span class="CommentedCode">#? (write-buffered Stderr Newline)</span> -<span id="L6927" class="LineNr"> 6927 </span><span class="CommentedCode">#? (flush Stderr)</span> -<span id="L6928" class="LineNr"> 6928 </span> (<a href='../066print-int.subx.html#L266'>print-int32-buffered</a> *(ebp+8) *(eax+0xc)) <span class="subxComment"># Var-offset</span> -<span id="L6929" class="LineNr"> 6929 </span><span class="Constant">$emit-get-offset:end</span>: -<span id="L6930" class="LineNr"> 6930 </span> <span class="subxS1Comment"># . restore registers</span> -<span id="L6931" class="LineNr"> 6931 </span> 58/pop-to-eax -<span id="L6932" class="LineNr"> 6932 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L6933" class="LineNr"> 6933 </span> 89/<- %esp 5/r32/ebp -<span id="L6934" class="LineNr"> 6934 </span> 5d/pop-to-ebp -<span id="L6935" class="LineNr"> 6935 </span> c3/return -<span id="L6936" class="LineNr"> 6936 </span> -<span id="L6937" class="LineNr"> 6937 </span><span class="subxFunction">emit-subx-block</span>: <span class="subxComment"># out: (addr buffered-file), block: (handle block), vars: (addr stack (handle var))</span> -<span id="L6938" class="LineNr"> 6938 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L6939" class="LineNr"> 6939 </span> 55/push-ebp -<span id="L6940" class="LineNr"> 6940 </span> 89/<- %ebp 4/r32/esp -<span id="L6941" class="LineNr"> 6941 </span> <span class="subxS1Comment"># . save registers</span> -<span id="L6942" class="LineNr"> 6942 </span> 50/push-eax -<span id="L6943" class="LineNr"> 6943 </span> 51/push-ecx -<span id="L6944" class="LineNr"> 6944 </span> 56/push-esi -<span id="L6945" class="LineNr"> 6945 </span> <span class="subxComment"># esi = block</span> -<span id="L6946" class="LineNr"> 6946 </span> 8b/-> *(ebp+0xc) 6/r32/esi -<span id="L6947" class="LineNr"> 6947 </span> <span class="subxComment"># var stmts/eax: (handle list stmt) = block->statements</span> -<span id="L6948" class="LineNr"> 6948 </span> 8b/-> *(esi+4) 0/r32/eax <span class="subxComment"># Block-stmts</span> -<span id="L6949" class="LineNr"> 6949 </span> <span class="subxComment">#</span> -<span id="L6950" class="LineNr"> 6950 </span> { -<span id="L6951" class="LineNr"> 6951 </span><span class="Constant">$emit-subx-block:check-empty</span>: -<span id="L6952" class="LineNr"> 6952 </span> 3d/compare-eax-and 0/imm32 -<span id="L6953" class="LineNr"> 6953 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32 -<span id="L6954" class="LineNr"> 6954 </span> (<a href='mu.subx.html#L10446'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) -<span id="L6955" class="LineNr"> 6955 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"{\n"</span>) -<span id="L6956" class="LineNr"> 6956 </span> <span class="subxComment"># var v/ecx: (addr array byte) = block->var->name</span> -<span id="L6957" class="LineNr"> 6957 </span> 8b/-> *(esi+8) 1/r32/ecx <span class="subxComment"># Block-var</span> -<span id="L6958" class="LineNr"> 6958 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *ecx) <span class="subxComment"># Var-name</span> -<span id="L6959" class="LineNr"> 6959 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">":loop:\n"</span>) -<span id="L6960" class="LineNr"> 6960 </span> ff 0/subop/increment *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> -<span id="L6961" class="LineNr"> 6961 </span> (<a href='../092stack.subx.html#L110'>push</a> *(ebp+0x10) %ecx) -<span id="L6962" class="LineNr"> 6962 </span> (<a href='mu.subx.html#L5867'>emit-subx-stmt-list</a> *(ebp+8) %eax *(ebp+0x10)) -<span id="L6963" class="LineNr"> 6963 </span> (<a href='../092stack.subx.html#L230'>pop</a> *(ebp+0x10)) <span class="subxComment"># => eax</span> -<span id="L6964" class="LineNr"> 6964 </span> ff 1/subop/decrement *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> -<span id="L6965" class="LineNr"> 6965 </span> (<a href='mu.subx.html#L10446'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) -<span id="L6966" class="LineNr"> 6966 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"}\n"</span>) -<span id="L6967" class="LineNr"> 6967 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *ecx) <span class="subxComment"># Var-name</span> -<span id="L6968" class="LineNr"> 6968 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">":break:\n"</span>) -<span id="L6969" class="LineNr"> 6969 </span> } -<span id="L6970" class="LineNr"> 6970 </span><span class="Constant">$emit-subx-block:end</span>: -<span id="L6971" class="LineNr"> 6971 </span> <span class="subxS1Comment"># . restore registers</span> -<span id="L6972" class="LineNr"> 6972 </span> 5e/pop-to-esi -<span id="L6973" class="LineNr"> 6973 </span> 59/pop-to-ecx -<span id="L6974" class="LineNr"> 6974 </span> 58/pop-to-eax -<span id="L6975" class="LineNr"> 6975 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L6976" class="LineNr"> 6976 </span> 89/<- %esp 5/r32/ebp -<span id="L6977" class="LineNr"> 6977 </span> 5d/pop-to-ebp -<span id="L6978" class="LineNr"> 6978 </span> c3/return -<span id="L6979" class="LineNr"> 6979 </span> -<span id="L6980" class="LineNr"> 6980 </span><span class="subxComment"># Primitives supported</span> -<span id="L6981" class="LineNr"> 6981 </span><span class="subxComment"># For each operation, put variants with hard-coded registers before flexible ones.</span> -<span id="L6982" class="LineNr"> 6982 </span>== data -<span id="L6983" class="LineNr"> 6983 </span><span class="SpecialChar">Primitives</span>: -<span id="L6984" class="LineNr"> 6984 </span><span class="subxH1Comment"># - increment/decrement</span> -<span id="L6985" class="LineNr"> 6985 </span><span class="subxMinorFunction">_Primitive-inc-eax</span>: -<span id="L6986" class="LineNr"> 6986 </span> <span class="subxComment"># var/eax <- increment => 40/increment-eax</span> -<span id="L6987" class="LineNr"> 6987 </span> <span class="Constant">"increment"</span>/imm32/name -<span id="L6988" class="LineNr"> 6988 </span> 0/imm32/no-inouts -<span id="L6989" class="LineNr"> 6989 </span> <span class="SpecialChar"><a href='mu.subx.html#L8278'>Single-int-var-in-eax</a></span>/imm32/outputs -<span id="L6990" class="LineNr"> 6990 </span> <span class="Constant">"40/increment-eax"</span>/imm32/subx-name -<span id="L6991" class="LineNr"> 6991 </span> 0/imm32/no-rm32 -<span id="L6992" class="LineNr"> 6992 </span> 0/imm32/no-r32 -<span id="L6993" class="LineNr"> 6993 </span> 0/imm32/no-imm32 -<span id="L6994" class="LineNr"> 6994 </span> 0/imm32/no-disp32 -<span id="L6995" class="LineNr"> 6995 </span> 0/imm32/output-is-write-only -<span id="L6996" class="LineNr"> 6996 </span> <a href='mu.subx.html#L6997'>_Primitive-inc-ecx</a>/imm32/next -<span id="L6997" class="LineNr"> 6997 </span><span class="subxMinorFunction">_Primitive-inc-ecx</span>: -<span id="L6998" class="LineNr"> 6998 </span> <span class="subxComment"># var/ecx <- increment => 41/increment-ecx</span> -<span id="L6999" class="LineNr"> 6999 </span> <span class="Constant">"increment"</span>/imm32/name -<span id="L7000" class="LineNr"> 7000 </span> 0/imm32/no-inouts -<span id="L7001" class="LineNr"> 7001 </span> <span class="SpecialChar"><a href='mu.subx.html#L8289'>Single-int-var-in-ecx</a></span>/imm32/outputs -<span id="L7002" class="LineNr"> 7002 </span> <span class="Constant">"41/increment-ecx"</span>/imm32/subx-name -<span id="L7003" class="LineNr"> 7003 </span> 0/imm32/no-rm32 -<span id="L7004" class="LineNr"> 7004 </span> 0/imm32/no-r32 -<span id="L7005" class="LineNr"> 7005 </span> 0/imm32/no-imm32 -<span id="L7006" class="LineNr"> 7006 </span> 0/imm32/no-disp32 -<span id="L7007" class="LineNr"> 7007 </span> 0/imm32/output-is-write-only -<span id="L7008" class="LineNr"> 7008 </span> <a href='mu.subx.html#L7009'>_Primitive-inc-edx</a>/imm32/next -<span id="L7009" class="LineNr"> 7009 </span><span class="subxMinorFunction">_Primitive-inc-edx</span>: -<span id="L7010" class="LineNr"> 7010 </span> <span class="subxComment"># var/edx <- increment => 42/increment-edx</span> -<span id="L7011" class="LineNr"> 7011 </span> <span class="Constant">"increment"</span>/imm32/name -<span id="L7012" class="LineNr"> 7012 </span> 0/imm32/no-inouts -<span id="L7013" class="LineNr"> 7013 </span> <span class="SpecialChar"><a href='mu.subx.html#L8300'>Single-int-var-in-edx</a></span>/imm32/outputs -<span id="L7014" class="LineNr"> 7014 </span> <span class="Constant">"42/increment-edx"</span>/imm32/subx-name -<span id="L7015" class="LineNr"> 7015 </span> 0/imm32/no-rm32 -<span id="L7016" class="LineNr"> 7016 </span> 0/imm32/no-r32 -<span id="L7017" class="LineNr"> 7017 </span> 0/imm32/no-imm32 -<span id="L7018" class="LineNr"> 7018 </span> 0/imm32/no-disp32 -<span id="L7019" class="LineNr"> 7019 </span> 0/imm32/output-is-write-only -<span id="L7020" class="LineNr"> 7020 </span> <a href='mu.subx.html#L7021'>_Primitive-inc-ebx</a>/imm32/next -<span id="L7021" class="LineNr"> 7021 </span><span class="subxMinorFunction">_Primitive-inc-ebx</span>: -<span id="L7022" class="LineNr"> 7022 </span> <span class="subxComment"># var/ebx <- increment => 43/increment-ebx</span> -<span id="L7023" class="LineNr"> 7023 </span> <span class="Constant">"increment"</span>/imm32/name -<span id="L7024" class="LineNr"> 7024 </span> 0/imm32/no-inouts -<span id="L7025" class="LineNr"> 7025 </span> <span class="SpecialChar"><a href='mu.subx.html#L8311'>Single-int-var-in-ebx</a></span>/imm32/outputs -<span id="L7026" class="LineNr"> 7026 </span> <span class="Constant">"43/increment-ebx"</span>/imm32/subx-name -<span id="L7027" class="LineNr"> 7027 </span> 0/imm32/no-rm32 -<span id="L7028" class="LineNr"> 7028 </span> 0/imm32/no-r32 -<span id="L7029" class="LineNr"> 7029 </span> 0/imm32/no-imm32 -<span id="L7030" class="LineNr"> 7030 </span> 0/imm32/no-disp32 -<span id="L7031" class="LineNr"> 7031 </span> 0/imm32/output-is-write-only -<span id="L7032" class="LineNr"> 7032 </span> <a href='mu.subx.html#L7033'>_Primitive-inc-esi</a>/imm32/next -<span id="L7033" class="LineNr"> 7033 </span><span class="subxMinorFunction">_Primitive-inc-esi</span>: -<span id="L7034" class="LineNr"> 7034 </span> <span class="subxComment"># var/esi <- increment => 46/increment-esi</span> -<span id="L7035" class="LineNr"> 7035 </span> <span class="Constant">"increment"</span>/imm32/name -<span id="L7036" class="LineNr"> 7036 </span> 0/imm32/no-inouts -<span id="L7037" class="LineNr"> 7037 </span> <span class="SpecialChar"><a href='mu.subx.html#L8322'>Single-int-var-in-esi</a></span>/imm32/outputs -<span id="L7038" class="LineNr"> 7038 </span> <span class="Constant">"46/increment-esi"</span>/imm32/subx-name -<span id="L7039" class="LineNr"> 7039 </span> 0/imm32/no-rm32 -<span id="L7040" class="LineNr"> 7040 </span> 0/imm32/no-r32 -<span id="L7041" class="LineNr"> 7041 </span> 0/imm32/no-imm32 -<span id="L7042" class="LineNr"> 7042 </span> 0/imm32/no-disp32 -<span id="L7043" class="LineNr"> 7043 </span> 0/imm32/output-is-write-only -<span id="L7044" class="LineNr"> 7044 </span> <a href='mu.subx.html#L7045'>_Primitive-inc-edi</a>/imm32/next -<span id="L7045" class="LineNr"> 7045 </span><span class="subxMinorFunction">_Primitive-inc-edi</span>: -<span id="L7046" class="LineNr"> 7046 </span> <span class="subxComment"># var/edi <- increment => 47/increment-edi</span> -<span id="L7047" class="LineNr"> 7047 </span> <span class="Constant">"increment"</span>/imm32/name -<span id="L7048" class="LineNr"> 7048 </span> 0/imm32/no-inouts -<span id="L7049" class="LineNr"> 7049 </span> <span class="SpecialChar"><a href='mu.subx.html#L8333'>Single-int-var-in-edi</a></span>/imm32/outputs -<span id="L7050" class="LineNr"> 7050 </span> <span class="Constant">"47/increment-edi"</span>/imm32/subx-name -<span id="L7051" class="LineNr"> 7051 </span> 0/imm32/no-rm32 -<span id="L7052" class="LineNr"> 7052 </span> 0/imm32/no-r32 -<span id="L7053" class="LineNr"> 7053 </span> 0/imm32/no-imm32 -<span id="L7054" class="LineNr"> 7054 </span> 0/imm32/no-disp32 -<span id="L7055" class="LineNr"> 7055 </span> 0/imm32/output-is-write-only -<span id="L7056" class="LineNr"> 7056 </span> <a href='mu.subx.html#L7057'>_Primitive-dec-eax</a>/imm32/next -<span id="L7057" class="LineNr"> 7057 </span><span class="subxMinorFunction">_Primitive-dec-eax</span>: -<span id="L7058" class="LineNr"> 7058 </span> <span class="subxComment"># var/eax <- decrement => 48/decrement-eax</span> -<span id="L7059" class="LineNr"> 7059 </span> <span class="Constant">"decrement"</span>/imm32/name -<span id="L7060" class="LineNr"> 7060 </span> 0/imm32/no-inouts -<span id="L7061" class="LineNr"> 7061 </span> <span class="SpecialChar"><a href='mu.subx.html#L8278'>Single-int-var-in-eax</a></span>/imm32/outputs -<span id="L7062" class="LineNr"> 7062 </span> <span class="Constant">"48/decrement-eax"</span>/imm32/subx-name -<span id="L7063" class="LineNr"> 7063 </span> 0/imm32/no-rm32 -<span id="L7064" class="LineNr"> 7064 </span> 0/imm32/no-r32 -<span id="L7065" class="LineNr"> 7065 </span> 0/imm32/no-imm32 -<span id="L7066" class="LineNr"> 7066 </span> 0/imm32/no-disp32 -<span id="L7067" class="LineNr"> 7067 </span> 0/imm32/output-is-write-only -<span id="L7068" class="LineNr"> 7068 </span> <a href='mu.subx.html#L7069'>_Primitive-dec-ecx</a>/imm32/next -<span id="L7069" class="LineNr"> 7069 </span><span class="subxMinorFunction">_Primitive-dec-ecx</span>: -<span id="L7070" class="LineNr"> 7070 </span> <span class="subxComment"># var/ecx <- decrement => 49/decrement-ecx</span> -<span id="L7071" class="LineNr"> 7071 </span> <span class="Constant">"decrement"</span>/imm32/name -<span id="L7072" class="LineNr"> 7072 </span> 0/imm32/no-inouts -<span id="L7073" class="LineNr"> 7073 </span> <span class="SpecialChar"><a href='mu.subx.html#L8289'>Single-int-var-in-ecx</a></span>/imm32/outputs -<span id="L7074" class="LineNr"> 7074 </span> <span class="Constant">"49/decrement-ecx"</span>/imm32/subx-name -<span id="L7075" class="LineNr"> 7075 </span> 0/imm32/no-rm32 -<span id="L7076" class="LineNr"> 7076 </span> 0/imm32/no-r32 -<span id="L7077" class="LineNr"> 7077 </span> 0/imm32/no-imm32 -<span id="L7078" class="LineNr"> 7078 </span> 0/imm32/no-disp32 -<span id="L7079" class="LineNr"> 7079 </span> 0/imm32/output-is-write-only -<span id="L7080" class="LineNr"> 7080 </span> <a href='mu.subx.html#L7081'>_Primitive-dec-edx</a>/imm32/next -<span id="L7081" class="LineNr"> 7081 </span><span class="subxMinorFunction">_Primitive-dec-edx</span>: -<span id="L7082" class="LineNr"> 7082 </span> <span class="subxComment"># var/edx <- decrement => 4a/decrement-edx</span> -<span id="L7083" class="LineNr"> 7083 </span> <span class="Constant">"decrement"</span>/imm32/name -<span id="L7084" class="LineNr"> 7084 </span> 0/imm32/no-inouts -<span id="L7085" class="LineNr"> 7085 </span> <span class="SpecialChar"><a href='mu.subx.html#L8300'>Single-int-var-in-edx</a></span>/imm32/outputs -<span id="L7086" class="LineNr"> 7086 </span> <span class="Constant">"4a/decrement-edx"</span>/imm32/subx-name -<span id="L7087" class="LineNr"> 7087 </span> 0/imm32/no-rm32 -<span id="L7088" class="LineNr"> 7088 </span> 0/imm32/no-r32 -<span id="L7089" class="LineNr"> 7089 </span> 0/imm32/no-imm32 -<span id="L7090" class="LineNr"> 7090 </span> 0/imm32/no-disp32 -<span id="L7091" class="LineNr"> 7091 </span> 0/imm32/output-is-write-only -<span id="L7092" class="LineNr"> 7092 </span> <a href='mu.subx.html#L7093'>_Primitive-dec-ebx</a>/imm32/next -<span id="L7093" class="LineNr"> 7093 </span><span class="subxMinorFunction">_Primitive-dec-ebx</span>: -<span id="L7094" class="LineNr"> 7094 </span> <span class="subxComment"># var/ebx <- decrement => 4b/decrement-ebx</span> -<span id="L7095" class="LineNr"> 7095 </span> <span class="Constant">"decrement"</span>/imm32/name -<span id="L7096" class="LineNr"> 7096 </span> 0/imm32/no-inouts -<span id="L7097" class="LineNr"> 7097 </span> <span class="SpecialChar"><a href='mu.subx.html#L8311'>Single-int-var-in-ebx</a></span>/imm32/outputs -<span id="L7098" class="LineNr"> 7098 </span> <span class="Constant">"4b/decrement-ebx"</span>/imm32/subx-name -<span id="L7099" class="LineNr"> 7099 </span> 0/imm32/no-rm32 -<span id="L7100" class="LineNr"> 7100 </span> 0/imm32/no-r32 -<span id="L7101" class="LineNr"> 7101 </span> 0/imm32/no-imm32 -<span id="L7102" class="LineNr"> 7102 </span> 0/imm32/no-disp32 -<span id="L7103" class="LineNr"> 7103 </span> 0/imm32/output-is-write-only -<span id="L7104" class="LineNr"> 7104 </span> <a href='mu.subx.html#L7105'>_Primitive-dec-esi</a>/imm32/next -<span id="L7105" class="LineNr"> 7105 </span><span class="subxMinorFunction">_Primitive-dec-esi</span>: -<span id="L7106" class="LineNr"> 7106 </span> <span class="subxComment"># var/esi <- decrement => 4e/decrement-esi</span> -<span id="L7107" class="LineNr"> 7107 </span> <span class="Constant">"decrement"</span>/imm32/name -<span id="L7108" class="LineNr"> 7108 </span> 0/imm32/no-inouts -<span id="L7109" class="LineNr"> 7109 </span> <span class="SpecialChar"><a href='mu.subx.html#L8322'>Single-int-var-in-esi</a></span>/imm32/outputs -<span id="L7110" class="LineNr"> 7110 </span> <span class="Constant">"4e/decrement-esi"</span>/imm32/subx-name -<span id="L7111" class="LineNr"> 7111 </span> 0/imm32/no-rm32 -<span id="L7112" class="LineNr"> 7112 </span> 0/imm32/no-r32 -<span id="L7113" class="LineNr"> 7113 </span> 0/imm32/no-imm32 -<span id="L7114" class="LineNr"> 7114 </span> 0/imm32/no-disp32 -<span id="L7115" class="LineNr"> 7115 </span> 0/imm32/output-is-write-only -<span id="L7116" class="LineNr"> 7116 </span> <a href='mu.subx.html#L7117'>_Primitive-dec-edi</a>/imm32/next -<span id="L7117" class="LineNr"> 7117 </span><span class="subxMinorFunction">_Primitive-dec-edi</span>: -<span id="L7118" class="LineNr"> 7118 </span> <span class="subxComment"># var/edi <- decrement => 4f/decrement-edi</span> -<span id="L7119" class="LineNr"> 7119 </span> <span class="Constant">"decrement"</span>/imm32/name -<span id="L7120" class="LineNr"> 7120 </span> 0/imm32/no-inouts -<span id="L7121" class="LineNr"> 7121 </span> <span class="SpecialChar"><a href='mu.subx.html#L8333'>Single-int-var-in-edi</a></span>/imm32/outputs -<span id="L7122" class="LineNr"> 7122 </span> <span class="Constant">"4f/decrement-edi"</span>/imm32/subx-name -<span id="L7123" class="LineNr"> 7123 </span> 0/imm32/no-rm32 -<span id="L7124" class="LineNr"> 7124 </span> 0/imm32/no-r32 -<span id="L7125" class="LineNr"> 7125 </span> 0/imm32/no-imm32 -<span id="L7126" class="LineNr"> 7126 </span> 0/imm32/no-disp32 -<span id="L7127" class="LineNr"> 7127 </span> 0/imm32/output-is-write-only -<span id="L7128" class="LineNr"> 7128 </span> <a href='mu.subx.html#L7129'>_Primitive-inc-mem</a>/imm32/next -<span id="L7129" class="LineNr"> 7129 </span><span class="subxMinorFunction">_Primitive-inc-mem</span>: -<span id="L7130" class="LineNr"> 7130 </span> <span class="subxComment"># increment var => ff 0/subop/increment *(ebp+__)</span> -<span id="L7131" class="LineNr"> 7131 </span> <span class="Constant">"increment"</span>/imm32/name -<span id="L7132" class="LineNr"> 7132 </span> <span class="SpecialChar"><a href='mu.subx.html#L8236'>Single-int-var-in-mem</a></span>/imm32/inouts -<span id="L7133" class="LineNr"> 7133 </span> 0/imm32/no-outputs -<span id="L7134" class="LineNr"> 7134 </span> <span class="Constant">"ff 0/subop/increment"</span>/imm32/subx-name -<span id="L7135" class="LineNr"> 7135 </span> 1/imm32/rm32-is-first-inout -<span id="L7136" class="LineNr"> 7136 </span> 0/imm32/no-r32 -<span id="L7137" class="LineNr"> 7137 </span> 0/imm32/no-imm32 -<span id="L7138" class="LineNr"> 7138 </span> 0/imm32/no-disp32 -<span id="L7139" class="LineNr"> 7139 </span> 0/imm32/output-is-write-only -<span id="L7140" class="LineNr"> 7140 </span> <a href='mu.subx.html#L7141'>_Primitive-inc-reg</a>/imm32/next -<span id="L7141" class="LineNr"> 7141 </span><span class="subxMinorFunction">_Primitive-inc-reg</span>: -<span id="L7142" class="LineNr"> 7142 </span> <span class="subxComment"># var/reg <- increment => ff 0/subop/increment %__</span> -<span id="L7143" class="LineNr"> 7143 </span> <span class="Constant">"increment"</span>/imm32/name -<span id="L7144" class="LineNr"> 7144 </span> 0/imm32/no-inouts -<span id="L7145" class="LineNr"> 7145 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/outputs -<span id="L7146" class="LineNr"> 7146 </span> <span class="Constant">"ff 0/subop/increment"</span>/imm32/subx-name -<span id="L7147" class="LineNr"> 7147 </span> 3/imm32/rm32-is-first-output -<span id="L7148" class="LineNr"> 7148 </span> 0/imm32/no-r32 -<span id="L7149" class="LineNr"> 7149 </span> 0/imm32/no-imm32 -<span id="L7150" class="LineNr"> 7150 </span> 0/imm32/no-disp32 -<span id="L7151" class="LineNr"> 7151 </span> 0/imm32/output-is-write-only -<span id="L7152" class="LineNr"> 7152 </span> <a href='mu.subx.html#L7153'>_Primitive-dec-mem</a>/imm32/next -<span id="L7153" class="LineNr"> 7153 </span><span class="subxMinorFunction">_Primitive-dec-mem</span>: -<span id="L7154" class="LineNr"> 7154 </span> <span class="subxComment"># decrement var => ff 1/subop/decrement *(ebp+__)</span> -<span id="L7155" class="LineNr"> 7155 </span> <span class="Constant">"decrement"</span>/imm32/name -<span id="L7156" class="LineNr"> 7156 </span> <span class="SpecialChar"><a href='mu.subx.html#L8236'>Single-int-var-in-mem</a></span>/imm32/inouts -<span id="L7157" class="LineNr"> 7157 </span> 0/imm32/no-outputs -<span id="L7158" class="LineNr"> 7158 </span> <span class="Constant">"ff 1/subop/decrement"</span>/imm32/subx-name -<span id="L7159" class="LineNr"> 7159 </span> 1/imm32/rm32-is-first-inout -<span id="L7160" class="LineNr"> 7160 </span> 0/imm32/no-r32 -<span id="L7161" class="LineNr"> 7161 </span> 0/imm32/no-imm32 -<span id="L7162" class="LineNr"> 7162 </span> 0/imm32/no-disp32 -<span id="L7163" class="LineNr"> 7163 </span> 0/imm32/output-is-write-only -<span id="L7164" class="LineNr"> 7164 </span> <a href='mu.subx.html#L7165'>_Primitive-dec-reg</a>/imm32/next -<span id="L7165" class="LineNr"> 7165 </span><span class="subxMinorFunction">_Primitive-dec-reg</span>: -<span id="L7166" class="LineNr"> 7166 </span> <span class="subxComment"># var/reg <- decrement => ff 1/subop/decrement %__</span> -<span id="L7167" class="LineNr"> 7167 </span> <span class="Constant">"decrement"</span>/imm32/name -<span id="L7168" class="LineNr"> 7168 </span> 0/imm32/no-inouts -<span id="L7169" class="LineNr"> 7169 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/outputs -<span id="L7170" class="LineNr"> 7170 </span> <span class="Constant">"ff 1/subop/decrement"</span>/imm32/subx-name -<span id="L7171" class="LineNr"> 7171 </span> 3/imm32/rm32-is-first-output -<span id="L7172" class="LineNr"> 7172 </span> 0/imm32/no-r32 -<span id="L7173" class="LineNr"> 7173 </span> 0/imm32/no-imm32 -<span id="L7174" class="LineNr"> 7174 </span> 0/imm32/no-disp32 -<span id="L7175" class="LineNr"> 7175 </span> 0/imm32/output-is-write-only -<span id="L7176" class="LineNr"> 7176 </span> <a href='mu.subx.html#L7178'>_Primitive-add-to-eax</a>/imm32/next -<span id="L7177" class="LineNr"> 7177 </span><span class="subxH1Comment"># - add</span> -<span id="L7178" class="LineNr"> 7178 </span><span class="subxMinorFunction">_Primitive-add-to-eax</span>: -<span id="L7179" class="LineNr"> 7179 </span> <span class="subxComment"># var/eax <- add lit => 05/add-to-eax lit/imm32</span> -<span id="L7180" class="LineNr"> 7180 </span> <span class="Constant">"add"</span>/imm32/name -<span id="L7181" class="LineNr"> 7181 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L7182" class="LineNr"> 7182 </span> <span class="SpecialChar"><a href='mu.subx.html#L8278'>Single-int-var-in-eax</a></span>/imm32/outputs -<span id="L7183" class="LineNr"> 7183 </span> <span class="Constant">"05/add-to-eax"</span>/imm32/subx-name -<span id="L7184" class="LineNr"> 7184 </span> 0/imm32/no-rm32 -<span id="L7185" class="LineNr"> 7185 </span> 0/imm32/no-r32 -<span id="L7186" class="LineNr"> 7186 </span> 1/imm32/imm32-is-first-inout -<span id="L7187" class="LineNr"> 7187 </span> 0/imm32/no-disp32 -<span id="L7188" class="LineNr"> 7188 </span> 0/imm32/output-is-write-only -<span id="L7189" class="LineNr"> 7189 </span> <a href='mu.subx.html#L7190'>_Primitive-add-reg-to-reg</a>/imm32/next -<span id="L7190" class="LineNr"> 7190 </span><span class="subxMinorFunction">_Primitive-add-reg-to-reg</span>: -<span id="L7191" class="LineNr"> 7191 </span> <span class="subxComment"># var1/reg <- add var2/reg => 01/add-to var1/rm32 var2/r32</span> -<span id="L7192" class="LineNr"> 7192 </span> <span class="Constant">"add"</span>/imm32/name -<span id="L7193" class="LineNr"> 7193 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/inouts -<span id="L7194" class="LineNr"> 7194 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/outputs -<span id="L7195" class="LineNr"> 7195 </span> <span class="Constant">"01/add-to"</span>/imm32/subx-name -<span id="L7196" class="LineNr"> 7196 </span> 3/imm32/rm32-is-first-output -<span id="L7197" class="LineNr"> 7197 </span> 1/imm32/r32-is-first-inout -<span id="L7198" class="LineNr"> 7198 </span> 0/imm32/no-imm32 -<span id="L7199" class="LineNr"> 7199 </span> 0/imm32/no-disp32 -<span id="L7200" class="LineNr"> 7200 </span> 0/imm32/output-is-write-only -<span id="L7201" class="LineNr"> 7201 </span> <a href='mu.subx.html#L7202'>_Primitive-add-reg-to-mem</a>/imm32/next -<span id="L7202" class="LineNr"> 7202 </span><span class="subxMinorFunction">_Primitive-add-reg-to-mem</span>: -<span id="L7203" class="LineNr"> 7203 </span> <span class="subxComment"># add-to var1 var2/reg => 01/add-to var1 var2/r32</span> -<span id="L7204" class="LineNr"> 7204 </span> <span class="Constant">"add-to"</span>/imm32/name -<span id="L7205" class="LineNr"> 7205 </span> <span class="SpecialChar"><a href='mu.subx.html#L8247'>Two-args-int-stack-int-reg</a></span>/imm32/inouts -<span id="L7206" class="LineNr"> 7206 </span> 0/imm32/outputs -<span id="L7207" class="LineNr"> 7207 </span> <span class="Constant">"01/add-to"</span>/imm32/subx-name -<span id="L7208" class="LineNr"> 7208 </span> 1/imm32/rm32-is-first-inout -<span id="L7209" class="LineNr"> 7209 </span> 2/imm32/r32-is-second-inout -<span id="L7210" class="LineNr"> 7210 </span> 0/imm32/no-imm32 -<span id="L7211" class="LineNr"> 7211 </span> 0/imm32/no-disp32 -<span id="L7212" class="LineNr"> 7212 </span> 0/imm32/output-is-write-only -<span id="L7213" class="LineNr"> 7213 </span> <a href='mu.subx.html#L7214'>_Primitive-add-mem-to-reg</a>/imm32/next -<span id="L7214" class="LineNr"> 7214 </span><span class="subxMinorFunction">_Primitive-add-mem-to-reg</span>: -<span id="L7215" class="LineNr"> 7215 </span> <span class="subxComment"># var1/reg <- add var2 => 03/add var2/rm32 var1/r32</span> -<span id="L7216" class="LineNr"> 7216 </span> <span class="Constant">"add"</span>/imm32/name -<span id="L7217" class="LineNr"> 7217 </span> <span class="SpecialChar"><a href='mu.subx.html#L8236'>Single-int-var-in-mem</a></span>/imm32/inouts -<span id="L7218" class="LineNr"> 7218 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/outputs -<span id="L7219" class="LineNr"> 7219 </span> <span class="Constant">"03/add"</span>/imm32/subx-name -<span id="L7220" class="LineNr"> 7220 </span> 1/imm32/rm32-is-first-inout -<span id="L7221" class="LineNr"> 7221 </span> 3/imm32/r32-is-first-output -<span id="L7222" class="LineNr"> 7222 </span> 0/imm32/no-imm32 -<span id="L7223" class="LineNr"> 7223 </span> 0/imm32/no-disp32 -<span id="L7224" class="LineNr"> 7224 </span> 0/imm32/output-is-write-only -<span id="L7225" class="LineNr"> 7225 </span> <a href='mu.subx.html#L7226'>_Primitive-add-lit-to-reg</a>/imm32/next -<span id="L7226" class="LineNr"> 7226 </span><span class="subxMinorFunction">_Primitive-add-lit-to-reg</span>: -<span id="L7227" class="LineNr"> 7227 </span> <span class="subxComment"># var1/reg <- add lit => 81 0/subop/add var1/rm32 lit/imm32</span> -<span id="L7228" class="LineNr"> 7228 </span> <span class="Constant">"add"</span>/imm32/name -<span id="L7229" class="LineNr"> 7229 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L7230" class="LineNr"> 7230 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/outputs -<span id="L7231" class="LineNr"> 7231 </span> <span class="Constant">"81 0/subop/add"</span>/imm32/subx-name -<span id="L7232" class="LineNr"> 7232 </span> 3/imm32/rm32-is-first-output -<span id="L7233" class="LineNr"> 7233 </span> 0/imm32/no-r32 -<span id="L7234" class="LineNr"> 7234 </span> 1/imm32/imm32-is-first-inout -<span id="L7235" class="LineNr"> 7235 </span> 0/imm32/no-disp32 -<span id="L7236" class="LineNr"> 7236 </span> 0/imm32/output-is-write-only -<span id="L7237" class="LineNr"> 7237 </span> <a href='mu.subx.html#L7238'>_Primitive-add-lit-to-mem</a>/imm32/next -<span id="L7238" class="LineNr"> 7238 </span><span class="subxMinorFunction">_Primitive-add-lit-to-mem</span>: -<span id="L7239" class="LineNr"> 7239 </span> <span class="subxComment"># add-to var1, lit => 81 0/subop/add var1/rm32 lit/imm32</span> -<span id="L7240" class="LineNr"> 7240 </span> <span class="Constant">"add-to"</span>/imm32/name -<span id="L7241" class="LineNr"> 7241 </span> <span class="SpecialChar"><a href='mu.subx.html#L8259'>Int-var-and-literal</a></span>/imm32/inouts -<span id="L7242" class="LineNr"> 7242 </span> 0/imm32/outputs -<span id="L7243" class="LineNr"> 7243 </span> <span class="Constant">"81 0/subop/add"</span>/imm32/subx-name -<span id="L7244" class="LineNr"> 7244 </span> 1/imm32/rm32-is-first-inout -<span id="L7245" class="LineNr"> 7245 </span> 0/imm32/no-r32 -<span id="L7246" class="LineNr"> 7246 </span> 2/imm32/imm32-is-second-inout -<span id="L7247" class="LineNr"> 7247 </span> 0/imm32/no-disp32 -<span id="L7248" class="LineNr"> 7248 </span> 0/imm32/output-is-write-only -<span id="L7249" class="LineNr"> 7249 </span> <a href='mu.subx.html#L7251'>_Primitive-subtract-from-eax</a>/imm32/next -<span id="L7250" class="LineNr"> 7250 </span><span class="subxH1Comment"># - subtract</span> -<span id="L7251" class="LineNr"> 7251 </span><span class="subxMinorFunction">_Primitive-subtract-from-eax</span>: -<span id="L7252" class="LineNr"> 7252 </span> <span class="subxComment"># var/eax <- subtract lit => 2d/subtract-from-eax lit/imm32</span> -<span id="L7253" class="LineNr"> 7253 </span> <span class="Constant">"subtract"</span>/imm32/name -<span id="L7254" class="LineNr"> 7254 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L7255" class="LineNr"> 7255 </span> <span class="SpecialChar"><a href='mu.subx.html#L8278'>Single-int-var-in-eax</a></span>/imm32/outputs -<span id="L7256" class="LineNr"> 7256 </span> <span class="Constant">"2d/subtract-from-eax"</span>/imm32/subx-name -<span id="L7257" class="LineNr"> 7257 </span> 0/imm32/no-rm32 -<span id="L7258" class="LineNr"> 7258 </span> 0/imm32/no-r32 -<span id="L7259" class="LineNr"> 7259 </span> 1/imm32/imm32-is-first-inout -<span id="L7260" class="LineNr"> 7260 </span> 0/imm32/no-disp32 -<span id="L7261" class="LineNr"> 7261 </span> 0/imm32/output-is-write-only -<span id="L7262" class="LineNr"> 7262 </span> <a href='mu.subx.html#L7263'>_Primitive-subtract-reg-from-reg</a>/imm32/next -<span id="L7263" class="LineNr"> 7263 </span><span class="subxMinorFunction">_Primitive-subtract-reg-from-reg</span>: -<span id="L7264" class="LineNr"> 7264 </span> <span class="subxComment"># var1/reg <- subtract var2/reg => 29/subtract-from var1/rm32 var2/r32</span> -<span id="L7265" class="LineNr"> 7265 </span> <span class="Constant">"subtract"</span>/imm32/name -<span id="L7266" class="LineNr"> 7266 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/inouts -<span id="L7267" class="LineNr"> 7267 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/outputs -<span id="L7268" class="LineNr"> 7268 </span> <span class="Constant">"29/subtract-from"</span>/imm32/subx-name -<span id="L7269" class="LineNr"> 7269 </span> 3/imm32/rm32-is-first-output -<span id="L7270" class="LineNr"> 7270 </span> 1/imm32/r32-is-first-inout -<span id="L7271" class="LineNr"> 7271 </span> 0/imm32/no-imm32 -<span id="L7272" class="LineNr"> 7272 </span> 0/imm32/no-disp32 -<span id="L7273" class="LineNr"> 7273 </span> 0/imm32/output-is-write-only -<span id="L7274" class="LineNr"> 7274 </span> <a href='mu.subx.html#L7275'>_Primitive-subtract-reg-from-mem</a>/imm32/next -<span id="L7275" class="LineNr"> 7275 </span><span class="subxMinorFunction">_Primitive-subtract-reg-from-mem</span>: -<span id="L7276" class="LineNr"> 7276 </span> <span class="subxComment"># subtract-from var1 var2/reg => 29/subtract-from var1 var2/r32</span> -<span id="L7277" class="LineNr"> 7277 </span> <span class="Constant">"subtract-from"</span>/imm32/name -<span id="L7278" class="LineNr"> 7278 </span> <span class="SpecialChar"><a href='mu.subx.html#L8247'>Two-args-int-stack-int-reg</a></span>/imm32/inouts -<span id="L7279" class="LineNr"> 7279 </span> 0/imm32/outputs -<span id="L7280" class="LineNr"> 7280 </span> <span class="Constant">"29/subtract-from"</span>/imm32/subx-name -<span id="L7281" class="LineNr"> 7281 </span> 1/imm32/rm32-is-first-inout -<span id="L7282" class="LineNr"> 7282 </span> 2/imm32/r32-is-second-inout -<span id="L7283" class="LineNr"> 7283 </span> 0/imm32/no-imm32 -<span id="L7284" class="LineNr"> 7284 </span> 0/imm32/no-disp32 -<span id="L7285" class="LineNr"> 7285 </span> 0/imm32/output-is-write-only -<span id="L7286" class="LineNr"> 7286 </span> <a href='mu.subx.html#L7287'>_Primitive-subtract-mem-from-reg</a>/imm32/next -<span id="L7287" class="LineNr"> 7287 </span><span class="subxMinorFunction">_Primitive-subtract-mem-from-reg</span>: -<span id="L7288" class="LineNr"> 7288 </span> <span class="subxComment"># var1/reg <- subtract var2 => 2b/subtract var2/rm32 var1/r32</span> -<span id="L7289" class="LineNr"> 7289 </span> <span class="Constant">"subtract"</span>/imm32/name -<span id="L7290" class="LineNr"> 7290 </span> <span class="SpecialChar"><a href='mu.subx.html#L8236'>Single-int-var-in-mem</a></span>/imm32/inouts -<span id="L7291" class="LineNr"> 7291 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/outputs -<span id="L7292" class="LineNr"> 7292 </span> <span class="Constant">"2b/subtract"</span>/imm32/subx-name -<span id="L7293" class="LineNr"> 7293 </span> 1/imm32/rm32-is-first-inout -<span id="L7294" class="LineNr"> 7294 </span> 3/imm32/r32-is-first-output -<span id="L7295" class="LineNr"> 7295 </span> 0/imm32/no-imm32 -<span id="L7296" class="LineNr"> 7296 </span> 0/imm32/no-disp32 -<span id="L7297" class="LineNr"> 7297 </span> 0/imm32/output-is-write-only -<span id="L7298" class="LineNr"> 7298 </span> <a href='mu.subx.html#L7299'>_Primitive-subtract-lit-from-reg</a>/imm32/next -<span id="L7299" class="LineNr"> 7299 </span><span class="subxMinorFunction">_Primitive-subtract-lit-from-reg</span>: -<span id="L7300" class="LineNr"> 7300 </span> <span class="subxComment"># var1/reg <- subtract lit => 81 5/subop/subtract var1/rm32 lit/imm32</span> -<span id="L7301" class="LineNr"> 7301 </span> <span class="Constant">"subtract"</span>/imm32/name -<span id="L7302" class="LineNr"> 7302 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L7303" class="LineNr"> 7303 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/outputs -<span id="L7304" class="LineNr"> 7304 </span> <span class="Constant">"81 5/subop/subtract"</span>/imm32/subx-name -<span id="L7305" class="LineNr"> 7305 </span> 3/imm32/rm32-is-first-output -<span id="L7306" class="LineNr"> 7306 </span> 0/imm32/no-r32 -<span id="L7307" class="LineNr"> 7307 </span> 1/imm32/imm32-is-first-inout -<span id="L7308" class="LineNr"> 7308 </span> 0/imm32/no-disp32 -<span id="L7309" class="LineNr"> 7309 </span> 0/imm32/output-is-write-only -<span id="L7310" class="LineNr"> 7310 </span> <a href='mu.subx.html#L7311'>_Primitive-subtract-lit-from-mem</a>/imm32/next -<span id="L7311" class="LineNr"> 7311 </span><span class="subxMinorFunction">_Primitive-subtract-lit-from-mem</span>: -<span id="L7312" class="LineNr"> 7312 </span> <span class="subxComment"># subtract-from var1, lit => 81 5/subop/subtract var1/rm32 lit/imm32</span> -<span id="L7313" class="LineNr"> 7313 </span> <span class="Constant">"subtract-from"</span>/imm32/name -<span id="L7314" class="LineNr"> 7314 </span> <span class="SpecialChar"><a href='mu.subx.html#L8259'>Int-var-and-literal</a></span>/imm32/inouts -<span id="L7315" class="LineNr"> 7315 </span> 0/imm32/outputs -<span id="L7316" class="LineNr"> 7316 </span> <span class="Constant">"81 5/subop/subtract"</span>/imm32/subx-name -<span id="L7317" class="LineNr"> 7317 </span> 1/imm32/rm32-is-first-inout -<span id="L7318" class="LineNr"> 7318 </span> 0/imm32/no-r32 -<span id="L7319" class="LineNr"> 7319 </span> 2/imm32/imm32-is-first-inout -<span id="L7320" class="LineNr"> 7320 </span> 0/imm32/no-disp32 -<span id="L7321" class="LineNr"> 7321 </span> 0/imm32/output-is-write-only -<span id="L7322" class="LineNr"> 7322 </span> <a href='mu.subx.html#L7324'>_Primitive-and-with-eax</a>/imm32/next -<span id="L7323" class="LineNr"> 7323 </span><span class="subxH1Comment"># - and</span> -<span id="L7324" class="LineNr"> 7324 </span><span class="subxMinorFunction">_Primitive-and-with-eax</span>: -<span id="L7325" class="LineNr"> 7325 </span> <span class="subxComment"># var/eax <- and lit => 25/and-with-eax lit/imm32</span> -<span id="L7326" class="LineNr"> 7326 </span> <span class="Constant">"and"</span>/imm32/name -<span id="L7327" class="LineNr"> 7327 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L7328" class="LineNr"> 7328 </span> <span class="SpecialChar"><a href='mu.subx.html#L8278'>Single-int-var-in-eax</a></span>/imm32/outputs -<span id="L7329" class="LineNr"> 7329 </span> <span class="Constant">"25/and-with-eax"</span>/imm32/subx-name -<span id="L7330" class="LineNr"> 7330 </span> 0/imm32/no-rm32 -<span id="L7331" class="LineNr"> 7331 </span> 0/imm32/no-r32 -<span id="L7332" class="LineNr"> 7332 </span> 1/imm32/imm32-is-first-inout -<span id="L7333" class="LineNr"> 7333 </span> 0/imm32/no-disp32 -<span id="L7334" class="LineNr"> 7334 </span> 0/imm32/output-is-write-only -<span id="L7335" class="LineNr"> 7335 </span> <a href='mu.subx.html#L7336'>_Primitive-and-reg-with-reg</a>/imm32/next -<span id="L7336" class="LineNr"> 7336 </span><span class="subxMinorFunction">_Primitive-and-reg-with-reg</span>: -<span id="L7337" class="LineNr"> 7337 </span> <span class="subxComment"># var1/reg <- and var2/reg => 21/and-with var1/rm32 var2/r32</span> -<span id="L7338" class="LineNr"> 7338 </span> <span class="Constant">"and"</span>/imm32/name -<span id="L7339" class="LineNr"> 7339 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/inouts -<span id="L7340" class="LineNr"> 7340 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/outputs -<span id="L7341" class="LineNr"> 7341 </span> <span class="Constant">"21/and-with"</span>/imm32/subx-name -<span id="L7342" class="LineNr"> 7342 </span> 3/imm32/rm32-is-first-output -<span id="L7343" class="LineNr"> 7343 </span> 1/imm32/r32-is-first-inout -<span id="L7344" class="LineNr"> 7344 </span> 0/imm32/no-imm32 -<span id="L7345" class="LineNr"> 7345 </span> 0/imm32/no-disp32 -<span id="L7346" class="LineNr"> 7346 </span> 0/imm32/output-is-write-only -<span id="L7347" class="LineNr"> 7347 </span> <a href='mu.subx.html#L7348'>_Primitive-and-reg-with-mem</a>/imm32/next -<span id="L7348" class="LineNr"> 7348 </span><span class="subxMinorFunction">_Primitive-and-reg-with-mem</span>: -<span id="L7349" class="LineNr"> 7349 </span> <span class="subxComment"># and-with var1 var2/reg => 21/and-with var1 var2/r32</span> -<span id="L7350" class="LineNr"> 7350 </span> <span class="Constant">"and-with"</span>/imm32/name -<span id="L7351" class="LineNr"> 7351 </span> <span class="SpecialChar"><a href='mu.subx.html#L8247'>Two-args-int-stack-int-reg</a></span>/imm32/inouts -<span id="L7352" class="LineNr"> 7352 </span> 0/imm32/outputs -<span id="L7353" class="LineNr"> 7353 </span> <span class="Constant">"21/and-with"</span>/imm32/subx-name -<span id="L7354" class="LineNr"> 7354 </span> 1/imm32/rm32-is-first-inout -<span id="L7355" class="LineNr"> 7355 </span> 2/imm32/r32-is-second-inout -<span id="L7356" class="LineNr"> 7356 </span> 0/imm32/no-imm32 -<span id="L7357" class="LineNr"> 7357 </span> 0/imm32/no-disp32 -<span id="L7358" class="LineNr"> 7358 </span> 0/imm32/output-is-write-only -<span id="L7359" class="LineNr"> 7359 </span> <a href='mu.subx.html#L7360'>_Primitive-and-mem-with-reg</a>/imm32/next -<span id="L7360" class="LineNr"> 7360 </span><span class="subxMinorFunction">_Primitive-and-mem-with-reg</span>: -<span id="L7361" class="LineNr"> 7361 </span> <span class="subxComment"># var1/reg <- and var2 => 23/and var2/rm32 var1/r32</span> -<span id="L7362" class="LineNr"> 7362 </span> <span class="Constant">"and"</span>/imm32/name -<span id="L7363" class="LineNr"> 7363 </span> <span class="SpecialChar"><a href='mu.subx.html#L8236'>Single-int-var-in-mem</a></span>/imm32/inouts -<span id="L7364" class="LineNr"> 7364 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/outputs -<span id="L7365" class="LineNr"> 7365 </span> <span class="Constant">"23/and"</span>/imm32/subx-name -<span id="L7366" class="LineNr"> 7366 </span> 1/imm32/rm32-is-first-inout -<span id="L7367" class="LineNr"> 7367 </span> 3/imm32/r32-is-first-output -<span id="L7368" class="LineNr"> 7368 </span> 0/imm32/no-imm32 -<span id="L7369" class="LineNr"> 7369 </span> 0/imm32/no-disp32 -<span id="L7370" class="LineNr"> 7370 </span> 0/imm32/output-is-write-only -<span id="L7371" class="LineNr"> 7371 </span> <a href='mu.subx.html#L7372'>_Primitive-and-lit-with-reg</a>/imm32/next -<span id="L7372" class="LineNr"> 7372 </span><span class="subxMinorFunction">_Primitive-and-lit-with-reg</span>: -<span id="L7373" class="LineNr"> 7373 </span> <span class="subxComment"># var1/reg <- and lit => 81 4/subop/and var1/rm32 lit/imm32</span> -<span id="L7374" class="LineNr"> 7374 </span> <span class="Constant">"and"</span>/imm32/name -<span id="L7375" class="LineNr"> 7375 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L7376" class="LineNr"> 7376 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/outputs -<span id="L7377" class="LineNr"> 7377 </span> <span class="Constant">"81 4/subop/and"</span>/imm32/subx-name -<span id="L7378" class="LineNr"> 7378 </span> 3/imm32/rm32-is-first-output -<span id="L7379" class="LineNr"> 7379 </span> 0/imm32/no-r32 -<span id="L7380" class="LineNr"> 7380 </span> 1/imm32/imm32-is-first-inout -<span id="L7381" class="LineNr"> 7381 </span> 0/imm32/no-disp32 -<span id="L7382" class="LineNr"> 7382 </span> 0/imm32/output-is-write-only -<span id="L7383" class="LineNr"> 7383 </span> <a href='mu.subx.html#L7384'>_Primitive-and-lit-with-mem</a>/imm32/next -<span id="L7384" class="LineNr"> 7384 </span><span class="subxMinorFunction">_Primitive-and-lit-with-mem</span>: -<span id="L7385" class="LineNr"> 7385 </span> <span class="subxComment"># and-with var1, lit => 81 4/subop/and var1/rm32 lit/imm32</span> -<span id="L7386" class="LineNr"> 7386 </span> <span class="Constant">"and-with"</span>/imm32/name -<span id="L7387" class="LineNr"> 7387 </span> <span class="SpecialChar"><a href='mu.subx.html#L8259'>Int-var-and-literal</a></span>/imm32/inouts -<span id="L7388" class="LineNr"> 7388 </span> 0/imm32/outputs -<span id="L7389" class="LineNr"> 7389 </span> <span class="Constant">"81 4/subop/and"</span>/imm32/subx-name -<span id="L7390" class="LineNr"> 7390 </span> 1/imm32/rm32-is-first-inout -<span id="L7391" class="LineNr"> 7391 </span> 0/imm32/no-r32 -<span id="L7392" class="LineNr"> 7392 </span> 2/imm32/imm32-is-first-inout -<span id="L7393" class="LineNr"> 7393 </span> 0/imm32/no-disp32 -<span id="L7394" class="LineNr"> 7394 </span> 0/imm32/output-is-write-only -<span id="L7395" class="LineNr"> 7395 </span> <a href='mu.subx.html#L7397'>_Primitive-or-with-eax</a>/imm32/next -<span id="L7396" class="LineNr"> 7396 </span><span class="subxH1Comment"># - or</span> -<span id="L7397" class="LineNr"> 7397 </span><span class="subxMinorFunction">_Primitive-or-with-eax</span>: -<span id="L7398" class="LineNr"> 7398 </span> <span class="subxComment"># var/eax <- or lit => 0d/or-with-eax lit/imm32</span> -<span id="L7399" class="LineNr"> 7399 </span> <span class="Constant">"or"</span>/imm32/name -<span id="L7400" class="LineNr"> 7400 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L7401" class="LineNr"> 7401 </span> <span class="SpecialChar"><a href='mu.subx.html#L8278'>Single-int-var-in-eax</a></span>/imm32/outputs -<span id="L7402" class="LineNr"> 7402 </span> <span class="Constant">"0d/or-with-eax"</span>/imm32/subx-name -<span id="L7403" class="LineNr"> 7403 </span> 0/imm32/no-rm32 -<span id="L7404" class="LineNr"> 7404 </span> 0/imm32/no-r32 -<span id="L7405" class="LineNr"> 7405 </span> 1/imm32/imm32-is-first-inout -<span id="L7406" class="LineNr"> 7406 </span> 0/imm32/no-disp32 -<span id="L7407" class="LineNr"> 7407 </span> 0/imm32/output-is-write-only -<span id="L7408" class="LineNr"> 7408 </span> <a href='mu.subx.html#L7409'>_Primitive-or-reg-with-reg</a>/imm32/next -<span id="L7409" class="LineNr"> 7409 </span><span class="subxMinorFunction">_Primitive-or-reg-with-reg</span>: -<span id="L7410" class="LineNr"> 7410 </span> <span class="subxComment"># var1/reg <- or var2/reg => 09/or-with var1/rm32 var2/r32</span> -<span id="L7411" class="LineNr"> 7411 </span> <span class="Constant">"or"</span>/imm32/name -<span id="L7412" class="LineNr"> 7412 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/inouts -<span id="L7413" class="LineNr"> 7413 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/outputs -<span id="L7414" class="LineNr"> 7414 </span> <span class="Constant">"09/or-with"</span>/imm32/subx-name -<span id="L7415" class="LineNr"> 7415 </span> 3/imm32/rm32-is-first-output -<span id="L7416" class="LineNr"> 7416 </span> 1/imm32/r32-is-first-inout -<span id="L7417" class="LineNr"> 7417 </span> 0/imm32/no-imm32 -<span id="L7418" class="LineNr"> 7418 </span> 0/imm32/no-disp32 -<span id="L7419" class="LineNr"> 7419 </span> 0/imm32/output-is-write-only -<span id="L7420" class="LineNr"> 7420 </span> <a href='mu.subx.html#L7421'>_Primitive-or-reg-with-mem</a>/imm32/next -<span id="L7421" class="LineNr"> 7421 </span><span class="subxMinorFunction">_Primitive-or-reg-with-mem</span>: -<span id="L7422" class="LineNr"> 7422 </span> <span class="subxComment"># or-with var1 var2/reg => 09/or-with var1 var2/r32</span> -<span id="L7423" class="LineNr"> 7423 </span> <span class="Constant">"or-with"</span>/imm32/name -<span id="L7424" class="LineNr"> 7424 </span> <span class="SpecialChar"><a href='mu.subx.html#L8247'>Two-args-int-stack-int-reg</a></span>/imm32/inouts -<span id="L7425" class="LineNr"> 7425 </span> 0/imm32/outputs -<span id="L7426" class="LineNr"> 7426 </span> <span class="Constant">"09/or-with"</span>/imm32/subx-name -<span id="L7427" class="LineNr"> 7427 </span> 1/imm32/rm32-is-first-inout -<span id="L7428" class="LineNr"> 7428 </span> 2/imm32/r32-is-second-inout -<span id="L7429" class="LineNr"> 7429 </span> 0/imm32/no-imm32 -<span id="L7430" class="LineNr"> 7430 </span> 0/imm32/no-disp32 -<span id="L7431" class="LineNr"> 7431 </span> 0/imm32/output-is-write-only -<span id="L7432" class="LineNr"> 7432 </span> <a href='mu.subx.html#L7433'>_Primitive-or-mem-with-reg</a>/imm32/next -<span id="L7433" class="LineNr"> 7433 </span><span class="subxMinorFunction">_Primitive-or-mem-with-reg</span>: -<span id="L7434" class="LineNr"> 7434 </span> <span class="subxComment"># var1/reg <- or var2 => 0b/or var2/rm32 var1/r32</span> -<span id="L7435" class="LineNr"> 7435 </span> <span class="Constant">"or"</span>/imm32/name -<span id="L7436" class="LineNr"> 7436 </span> <span class="SpecialChar"><a href='mu.subx.html#L8236'>Single-int-var-in-mem</a></span>/imm32/inouts -<span id="L7437" class="LineNr"> 7437 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/outputs -<span id="L7438" class="LineNr"> 7438 </span> <span class="Constant">"0b/or"</span>/imm32/subx-name -<span id="L7439" class="LineNr"> 7439 </span> 1/imm32/rm32-is-first-inout -<span id="L7440" class="LineNr"> 7440 </span> 3/imm32/r32-is-first-output -<span id="L7441" class="LineNr"> 7441 </span> 0/imm32/no-imm32 -<span id="L7442" class="LineNr"> 7442 </span> 0/imm32/no-disp32 -<span id="L7443" class="LineNr"> 7443 </span> 0/imm32/output-is-write-only -<span id="L7444" class="LineNr"> 7444 </span> <a href='mu.subx.html#L7445'>_Primitive-or-lit-with-reg</a>/imm32/next -<span id="L7445" class="LineNr"> 7445 </span><span class="subxMinorFunction">_Primitive-or-lit-with-reg</span>: -<span id="L7446" class="LineNr"> 7446 </span> <span class="subxComment"># var1/reg <- or lit => 81 1/subop/or var1/rm32 lit/imm32</span> -<span id="L7447" class="LineNr"> 7447 </span> <span class="Constant">"or"</span>/imm32/name -<span id="L7448" class="LineNr"> 7448 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L7449" class="LineNr"> 7449 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/outputs -<span id="L7450" class="LineNr"> 7450 </span> <span class="Constant">"81 1/subop/or"</span>/imm32/subx-name -<span id="L7451" class="LineNr"> 7451 </span> 3/imm32/rm32-is-first-output -<span id="L7452" class="LineNr"> 7452 </span> 0/imm32/no-r32 -<span id="L7453" class="LineNr"> 7453 </span> 1/imm32/imm32-is-first-inout -<span id="L7454" class="LineNr"> 7454 </span> 0/imm32/no-disp32 -<span id="L7455" class="LineNr"> 7455 </span> 0/imm32/output-is-write-only -<span id="L7456" class="LineNr"> 7456 </span> <a href='mu.subx.html#L7457'>_Primitive-or-lit-with-mem</a>/imm32/next -<span id="L7457" class="LineNr"> 7457 </span><span class="subxMinorFunction">_Primitive-or-lit-with-mem</span>: -<span id="L7458" class="LineNr"> 7458 </span> <span class="subxComment"># or-with var1, lit => 81 1/subop/or var1/rm32 lit/imm32</span> -<span id="L7459" class="LineNr"> 7459 </span> <span class="Constant">"or-with"</span>/imm32/name -<span id="L7460" class="LineNr"> 7460 </span> <span class="SpecialChar"><a href='mu.subx.html#L8259'>Int-var-and-literal</a></span>/imm32/inouts -<span id="L7461" class="LineNr"> 7461 </span> 0/imm32/outputs -<span id="L7462" class="LineNr"> 7462 </span> <span class="Constant">"81 1/subop/or"</span>/imm32/subx-name -<span id="L7463" class="LineNr"> 7463 </span> 1/imm32/rm32-is-first-inout -<span id="L7464" class="LineNr"> 7464 </span> 0/imm32/no-r32 -<span id="L7465" class="LineNr"> 7465 </span> 2/imm32/imm32-is-second-inout -<span id="L7466" class="LineNr"> 7466 </span> 0/imm32/no-disp32 -<span id="L7467" class="LineNr"> 7467 </span> 0/imm32/output-is-write-only -<span id="L7468" class="LineNr"> 7468 </span> <a href='mu.subx.html#L7470'>_Primitive-xor-with-eax</a>/imm32/next -<span id="L7469" class="LineNr"> 7469 </span><span class="subxH1Comment"># - xor</span> -<span id="L7470" class="LineNr"> 7470 </span><span class="subxMinorFunction">_Primitive-xor-with-eax</span>: -<span id="L7471" class="LineNr"> 7471 </span> <span class="subxComment"># var/eax <- xor lit => 35/xor-with-eax lit/imm32</span> -<span id="L7472" class="LineNr"> 7472 </span> <span class="Constant">"xor"</span>/imm32/name -<span id="L7473" class="LineNr"> 7473 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L7474" class="LineNr"> 7474 </span> <span class="SpecialChar"><a href='mu.subx.html#L8278'>Single-int-var-in-eax</a></span>/imm32/outputs -<span id="L7475" class="LineNr"> 7475 </span> <span class="Constant">"35/xor-with-eax"</span>/imm32/subx-name -<span id="L7476" class="LineNr"> 7476 </span> 0/imm32/no-rm32 -<span id="L7477" class="LineNr"> 7477 </span> 0/imm32/no-r32 -<span id="L7478" class="LineNr"> 7478 </span> 1/imm32/imm32-is-first-inout -<span id="L7479" class="LineNr"> 7479 </span> 0/imm32/no-disp32 -<span id="L7480" class="LineNr"> 7480 </span> 0/imm32/output-is-write-only -<span id="L7481" class="LineNr"> 7481 </span> <a href='mu.subx.html#L7482'>_Primitive-xor-reg-with-reg</a>/imm32/next -<span id="L7482" class="LineNr"> 7482 </span><span class="subxMinorFunction">_Primitive-xor-reg-with-reg</span>: -<span id="L7483" class="LineNr"> 7483 </span> <span class="subxComment"># var1/reg <- xor var2/reg => 31/xor-with var1/rm32 var2/r32</span> -<span id="L7484" class="LineNr"> 7484 </span> <span class="Constant">"xor"</span>/imm32/name -<span id="L7485" class="LineNr"> 7485 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/inouts -<span id="L7486" class="LineNr"> 7486 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/outputs -<span id="L7487" class="LineNr"> 7487 </span> <span class="Constant">"31/xor-with"</span>/imm32/subx-name -<span id="L7488" class="LineNr"> 7488 </span> 3/imm32/rm32-is-first-output -<span id="L7489" class="LineNr"> 7489 </span> 1/imm32/r32-is-first-inout -<span id="L7490" class="LineNr"> 7490 </span> 0/imm32/no-imm32 -<span id="L7491" class="LineNr"> 7491 </span> 0/imm32/no-disp32 -<span id="L7492" class="LineNr"> 7492 </span> 0/imm32/output-is-write-only -<span id="L7493" class="LineNr"> 7493 </span> <a href='mu.subx.html#L7494'>_Primitive-xor-reg-with-mem</a>/imm32/next -<span id="L7494" class="LineNr"> 7494 </span><span class="subxMinorFunction">_Primitive-xor-reg-with-mem</span>: -<span id="L7495" class="LineNr"> 7495 </span> <span class="subxComment"># xor-with var1 var2/reg => 31/xor-with var1 var2/r32</span> -<span id="L7496" class="LineNr"> 7496 </span> <span class="Constant">"xor-with"</span>/imm32/name -<span id="L7497" class="LineNr"> 7497 </span> <span class="SpecialChar"><a href='mu.subx.html#L8247'>Two-args-int-stack-int-reg</a></span>/imm32/inouts -<span id="L7498" class="LineNr"> 7498 </span> 0/imm32/outputs -<span id="L7499" class="LineNr"> 7499 </span> <span class="Constant">"31/xor-with"</span>/imm32/subx-name -<span id="L7500" class="LineNr"> 7500 </span> 1/imm32/rm32-is-first-inout -<span id="L7501" class="LineNr"> 7501 </span> 2/imm32/r32-is-second-inout -<span id="L7502" class="LineNr"> 7502 </span> 0/imm32/no-imm32 -<span id="L7503" class="LineNr"> 7503 </span> 0/imm32/no-disp32 -<span id="L7504" class="LineNr"> 7504 </span> 0/imm32/output-is-write-only -<span id="L7505" class="LineNr"> 7505 </span> <a href='mu.subx.html#L7506'>_Primitive-xor-mem-with-reg</a>/imm32/next -<span id="L7506" class="LineNr"> 7506 </span><span class="subxMinorFunction">_Primitive-xor-mem-with-reg</span>: -<span id="L7507" class="LineNr"> 7507 </span> <span class="subxComment"># var1/reg <- xor var2 => 33/xor var2/rm32 var1/r32</span> -<span id="L7508" class="LineNr"> 7508 </span> <span class="Constant">"xor"</span>/imm32/name -<span id="L7509" class="LineNr"> 7509 </span> <span class="SpecialChar"><a href='mu.subx.html#L8236'>Single-int-var-in-mem</a></span>/imm32/inouts -<span id="L7510" class="LineNr"> 7510 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/outputs -<span id="L7511" class="LineNr"> 7511 </span> <span class="Constant">"33/xor"</span>/imm32/subx-name -<span id="L7512" class="LineNr"> 7512 </span> 1/imm32/rm32-is-first-inout -<span id="L7513" class="LineNr"> 7513 </span> 3/imm32/r32-is-first-output -<span id="L7514" class="LineNr"> 7514 </span> 0/imm32/no-imm32 -<span id="L7515" class="LineNr"> 7515 </span> 0/imm32/no-disp32 -<span id="L7516" class="LineNr"> 7516 </span> 0/imm32/output-is-write-only -<span id="L7517" class="LineNr"> 7517 </span> <a href='mu.subx.html#L7518'>_Primitive-xor-lit-with-reg</a>/imm32/next -<span id="L7518" class="LineNr"> 7518 </span><span class="subxMinorFunction">_Primitive-xor-lit-with-reg</span>: -<span id="L7519" class="LineNr"> 7519 </span> <span class="subxComment"># var1/reg <- xor lit => 81 6/subop/xor var1/rm32 lit/imm32</span> -<span id="L7520" class="LineNr"> 7520 </span> <span class="Constant">"xor"</span>/imm32/name -<span id="L7521" class="LineNr"> 7521 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L7522" class="LineNr"> 7522 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/outputs -<span id="L7523" class="LineNr"> 7523 </span> <span class="Constant">"81 6/subop/xor"</span>/imm32/subx-name -<span id="L7524" class="LineNr"> 7524 </span> 3/imm32/rm32-is-first-output -<span id="L7525" class="LineNr"> 7525 </span> 0/imm32/no-r32 -<span id="L7526" class="LineNr"> 7526 </span> 1/imm32/imm32-is-first-inout -<span id="L7527" class="LineNr"> 7527 </span> 0/imm32/no-disp32 -<span id="L7528" class="LineNr"> 7528 </span> 0/imm32/output-is-write-only -<span id="L7529" class="LineNr"> 7529 </span> <a href='mu.subx.html#L7530'>_Primitive-xor-lit-with-mem</a>/imm32/next -<span id="L7530" class="LineNr"> 7530 </span><span class="subxMinorFunction">_Primitive-xor-lit-with-mem</span>: -<span id="L7531" class="LineNr"> 7531 </span> <span class="subxComment"># xor-with var1, lit => 81 6/subop/xor var1/rm32 lit/imm32</span> -<span id="L7532" class="LineNr"> 7532 </span> <span class="Constant">"xor-with"</span>/imm32/name -<span id="L7533" class="LineNr"> 7533 </span> <span class="SpecialChar"><a href='mu.subx.html#L8259'>Int-var-and-literal</a></span>/imm32/inouts -<span id="L7534" class="LineNr"> 7534 </span> 0/imm32/outputs -<span id="L7535" class="LineNr"> 7535 </span> <span class="Constant">"81 6/subop/xor"</span>/imm32/subx-name -<span id="L7536" class="LineNr"> 7536 </span> 1/imm32/rm32-is-first-inout -<span id="L7537" class="LineNr"> 7537 </span> 0/imm32/no-r32 -<span id="L7538" class="LineNr"> 7538 </span> 2/imm32/imm32-is-first-inout -<span id="L7539" class="LineNr"> 7539 </span> 0/imm32/no-disp32 -<span id="L7540" class="LineNr"> 7540 </span> 0/imm32/output-is-write-only -<span id="L7541" class="LineNr"> 7541 </span> <a href='mu.subx.html#L7543'>_Primitive-copy-to-eax</a>/imm32/next -<span id="L7542" class="LineNr"> 7542 </span><span class="subxH1Comment"># - copy</span> -<span id="L7543" class="LineNr"> 7543 </span><span class="subxMinorFunction">_Primitive-copy-to-eax</span>: -<span id="L7544" class="LineNr"> 7544 </span> <span class="subxComment"># var/eax <- copy lit => b8/copy-to-eax lit/imm32</span> -<span id="L7545" class="LineNr"> 7545 </span> <span class="Constant">"copy"</span>/imm32/name -<span id="L7546" class="LineNr"> 7546 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L7547" class="LineNr"> 7547 </span> <span class="SpecialChar"><a href='mu.subx.html#L8278'>Single-int-var-in-eax</a></span>/imm32/outputs -<span id="L7548" class="LineNr"> 7548 </span> <span class="Constant">"b8/copy-to-eax"</span>/imm32/subx-name -<span id="L7549" class="LineNr"> 7549 </span> 0/imm32/no-rm32 -<span id="L7550" class="LineNr"> 7550 </span> 0/imm32/no-r32 -<span id="L7551" class="LineNr"> 7551 </span> 1/imm32/imm32-is-first-inout -<span id="L7552" class="LineNr"> 7552 </span> 0/imm32/no-disp32 -<span id="L7553" class="LineNr"> 7553 </span> 1/imm32/output-is-write-only -<span id="L7554" class="LineNr"> 7554 </span> <a href='mu.subx.html#L7555'>_Primitive-copy-to-ecx</a>/imm32/next -<span id="L7555" class="LineNr"> 7555 </span><span class="subxMinorFunction">_Primitive-copy-to-ecx</span>: -<span id="L7556" class="LineNr"> 7556 </span> <span class="subxComment"># var/ecx <- copy lit => b9/copy-to-ecx lit/imm32</span> -<span id="L7557" class="LineNr"> 7557 </span> <span class="Constant">"copy"</span>/imm32/name -<span id="L7558" class="LineNr"> 7558 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L7559" class="LineNr"> 7559 </span> <span class="SpecialChar"><a href='mu.subx.html#L8289'>Single-int-var-in-ecx</a></span>/imm32/outputs -<span id="L7560" class="LineNr"> 7560 </span> <span class="Constant">"b9/copy-to-ecx"</span>/imm32/subx-name -<span id="L7561" class="LineNr"> 7561 </span> 0/imm32/no-rm32 -<span id="L7562" class="LineNr"> 7562 </span> 0/imm32/no-r32 -<span id="L7563" class="LineNr"> 7563 </span> 1/imm32/imm32-is-first-inout -<span id="L7564" class="LineNr"> 7564 </span> 0/imm32/no-disp32 -<span id="L7565" class="LineNr"> 7565 </span> 1/imm32/output-is-write-only -<span id="L7566" class="LineNr"> 7566 </span> <a href='mu.subx.html#L7567'>_Primitive-copy-to-edx</a>/imm32/next -<span id="L7567" class="LineNr"> 7567 </span><span class="subxMinorFunction">_Primitive-copy-to-edx</span>: -<span id="L7568" class="LineNr"> 7568 </span> <span class="subxComment"># var/edx <- copy lit => ba/copy-to-edx lit/imm32</span> -<span id="L7569" class="LineNr"> 7569 </span> <span class="Constant">"copy"</span>/imm32/name -<span id="L7570" class="LineNr"> 7570 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L7571" class="LineNr"> 7571 </span> <span class="SpecialChar"><a href='mu.subx.html#L8300'>Single-int-var-in-edx</a></span>/imm32/outputs -<span id="L7572" class="LineNr"> 7572 </span> <span class="Constant">"ba/copy-to-edx"</span>/imm32/subx-name -<span id="L7573" class="LineNr"> 7573 </span> 0/imm32/no-rm32 -<span id="L7574" class="LineNr"> 7574 </span> 0/imm32/no-r32 -<span id="L7575" class="LineNr"> 7575 </span> 1/imm32/imm32-is-first-inout -<span id="L7576" class="LineNr"> 7576 </span> 0/imm32/no-disp32 -<span id="L7577" class="LineNr"> 7577 </span> 1/imm32/output-is-write-only -<span id="L7578" class="LineNr"> 7578 </span> <a href='mu.subx.html#L7579'>_Primitive-copy-to-ebx</a>/imm32/next -<span id="L7579" class="LineNr"> 7579 </span><span class="subxMinorFunction">_Primitive-copy-to-ebx</span>: -<span id="L7580" class="LineNr"> 7580 </span> <span class="subxComment"># var/ebx <- copy lit => bb/copy-to-ebx lit/imm32</span> -<span id="L7581" class="LineNr"> 7581 </span> <span class="Constant">"copy"</span>/imm32/name -<span id="L7582" class="LineNr"> 7582 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L7583" class="LineNr"> 7583 </span> <span class="SpecialChar"><a href='mu.subx.html#L8311'>Single-int-var-in-ebx</a></span>/imm32/outputs -<span id="L7584" class="LineNr"> 7584 </span> <span class="Constant">"bb/copy-to-ebx"</span>/imm32/subx-name -<span id="L7585" class="LineNr"> 7585 </span> 0/imm32/no-rm32 -<span id="L7586" class="LineNr"> 7586 </span> 0/imm32/no-r32 -<span id="L7587" class="LineNr"> 7587 </span> 1/imm32/imm32-is-first-inout -<span id="L7588" class="LineNr"> 7588 </span> 0/imm32/no-disp32 -<span id="L7589" class="LineNr"> 7589 </span> 1/imm32/output-is-write-only -<span id="L7590" class="LineNr"> 7590 </span> <a href='mu.subx.html#L7591'>_Primitive-copy-to-esi</a>/imm32/next -<span id="L7591" class="LineNr"> 7591 </span><span class="subxMinorFunction">_Primitive-copy-to-esi</span>: -<span id="L7592" class="LineNr"> 7592 </span> <span class="subxComment"># var/esi <- copy lit => be/copy-to-esi lit/imm32</span> -<span id="L7593" class="LineNr"> 7593 </span> <span class="Constant">"copy"</span>/imm32/name -<span id="L7594" class="LineNr"> 7594 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L7595" class="LineNr"> 7595 </span> <span class="SpecialChar"><a href='mu.subx.html#L8322'>Single-int-var-in-esi</a></span>/imm32/outputs -<span id="L7596" class="LineNr"> 7596 </span> <span class="Constant">"be/copy-to-esi"</span>/imm32/subx-name -<span id="L7597" class="LineNr"> 7597 </span> 0/imm32/no-rm32 -<span id="L7598" class="LineNr"> 7598 </span> 0/imm32/no-r32 -<span id="L7599" class="LineNr"> 7599 </span> 1/imm32/imm32-is-first-inout -<span id="L7600" class="LineNr"> 7600 </span> 0/imm32/no-disp32 -<span id="L7601" class="LineNr"> 7601 </span> 1/imm32/output-is-write-only -<span id="L7602" class="LineNr"> 7602 </span> <a href='mu.subx.html#L7603'>_Primitive-copy-to-edi</a>/imm32/next -<span id="L7603" class="LineNr"> 7603 </span><span class="subxMinorFunction">_Primitive-copy-to-edi</span>: -<span id="L7604" class="LineNr"> 7604 </span> <span class="subxComment"># var/edi <- copy lit => bf/copy-to-edi lit/imm32</span> -<span id="L7605" class="LineNr"> 7605 </span> <span class="Constant">"copy"</span>/imm32/name -<span id="L7606" class="LineNr"> 7606 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L7607" class="LineNr"> 7607 </span> <span class="SpecialChar"><a href='mu.subx.html#L8333'>Single-int-var-in-edi</a></span>/imm32/outputs -<span id="L7608" class="LineNr"> 7608 </span> <span class="Constant">"bf/copy-to-edi"</span>/imm32/subx-name -<span id="L7609" class="LineNr"> 7609 </span> 0/imm32/no-rm32 -<span id="L7610" class="LineNr"> 7610 </span> 0/imm32/no-r32 -<span id="L7611" class="LineNr"> 7611 </span> 1/imm32/imm32-is-first-inout -<span id="L7612" class="LineNr"> 7612 </span> 0/imm32/no-disp32 -<span id="L7613" class="LineNr"> 7613 </span> 1/imm32/output-is-write-only -<span id="L7614" class="LineNr"> 7614 </span> <a href='mu.subx.html#L7615'>_Primitive-copy-reg-to-reg</a>/imm32/next -<span id="L7615" class="LineNr"> 7615 </span><span class="subxMinorFunction">_Primitive-copy-reg-to-reg</span>: -<span id="L7616" class="LineNr"> 7616 </span> <span class="subxComment"># var1/reg <- copy var2/reg => 89/copy-to var1/rm32 var2/r32</span> -<span id="L7617" class="LineNr"> 7617 </span> <span class="Constant">"copy"</span>/imm32/name -<span id="L7618" class="LineNr"> 7618 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/inouts -<span id="L7619" class="LineNr"> 7619 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/outputs -<span id="L7620" class="LineNr"> 7620 </span> <span class="Constant">"89/copy-to"</span>/imm32/subx-name -<span id="L7621" class="LineNr"> 7621 </span> 3/imm32/rm32-is-first-output -<span id="L7622" class="LineNr"> 7622 </span> 1/imm32/r32-is-first-inout -<span id="L7623" class="LineNr"> 7623 </span> 0/imm32/no-imm32 -<span id="L7624" class="LineNr"> 7624 </span> 0/imm32/no-disp32 -<span id="L7625" class="LineNr"> 7625 </span> 1/imm32/output-is-write-only -<span id="L7626" class="LineNr"> 7626 </span> <a href='mu.subx.html#L7627'>_Primitive-copy-reg-to-mem</a>/imm32/next -<span id="L7627" class="LineNr"> 7627 </span><span class="subxMinorFunction">_Primitive-copy-reg-to-mem</span>: -<span id="L7628" class="LineNr"> 7628 </span> <span class="subxComment"># copy-to var1 var2/reg => 89/copy-to var1 var2/r32</span> -<span id="L7629" class="LineNr"> 7629 </span> <span class="Constant">"copy-to"</span>/imm32/name -<span id="L7630" class="LineNr"> 7630 </span> <span class="SpecialChar"><a href='mu.subx.html#L8247'>Two-args-int-stack-int-reg</a></span>/imm32/inouts -<span id="L7631" class="LineNr"> 7631 </span> 0/imm32/outputs -<span id="L7632" class="LineNr"> 7632 </span> <span class="Constant">"89/copy-to"</span>/imm32/subx-name -<span id="L7633" class="LineNr"> 7633 </span> 1/imm32/rm32-is-first-inout -<span id="L7634" class="LineNr"> 7634 </span> 2/imm32/r32-is-second-inout -<span id="L7635" class="LineNr"> 7635 </span> 0/imm32/no-imm32 -<span id="L7636" class="LineNr"> 7636 </span> 0/imm32/no-disp32 -<span id="L7637" class="LineNr"> 7637 </span> 1/imm32/output-is-write-only -<span id="L7638" class="LineNr"> 7638 </span> <a href='mu.subx.html#L7639'>_Primitive-copy-mem-to-reg</a>/imm32/next -<span id="L7639" class="LineNr"> 7639 </span><span class="subxMinorFunction">_Primitive-copy-mem-to-reg</span>: -<span id="L7640" class="LineNr"> 7640 </span> <span class="subxComment"># var1/reg <- copy var2 => 8b/copy-from var2/rm32 var1/r32</span> -<span id="L7641" class="LineNr"> 7641 </span> <span class="Constant">"copy"</span>/imm32/name -<span id="L7642" class="LineNr"> 7642 </span> <span class="SpecialChar"><a href='mu.subx.html#L8236'>Single-int-var-in-mem</a></span>/imm32/inouts -<span id="L7643" class="LineNr"> 7643 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/outputs -<span id="L7644" class="LineNr"> 7644 </span> <span class="Constant">"8b/copy-from"</span>/imm32/subx-name -<span id="L7645" class="LineNr"> 7645 </span> 1/imm32/rm32-is-first-inout -<span id="L7646" class="LineNr"> 7646 </span> 3/imm32/r32-is-first-output -<span id="L7647" class="LineNr"> 7647 </span> 0/imm32/no-imm32 -<span id="L7648" class="LineNr"> 7648 </span> 0/imm32/no-disp32 -<span id="L7649" class="LineNr"> 7649 </span> 1/imm32/output-is-write-only -<span id="L7650" class="LineNr"> 7650 </span> <a href='mu.subx.html#L7651'>_Primitive-copy-lit-to-reg</a>/imm32/next -<span id="L7651" class="LineNr"> 7651 </span><span class="subxMinorFunction">_Primitive-copy-lit-to-reg</span>: -<span id="L7652" class="LineNr"> 7652 </span> <span class="subxComment"># var1/reg <- copy lit => c7 0/subop/copy var1/rm32 lit/imm32</span> -<span id="L7653" class="LineNr"> 7653 </span> <span class="Constant">"copy"</span>/imm32/name -<span id="L7654" class="LineNr"> 7654 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L7655" class="LineNr"> 7655 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/outputs -<span id="L7656" class="LineNr"> 7656 </span> <span class="Constant">"c7 0/subop/copy"</span>/imm32/subx-name -<span id="L7657" class="LineNr"> 7657 </span> 3/imm32/rm32-is-first-output -<span id="L7658" class="LineNr"> 7658 </span> 0/imm32/no-r32 -<span id="L7659" class="LineNr"> 7659 </span> 1/imm32/imm32-is-first-inout -<span id="L7660" class="LineNr"> 7660 </span> 0/imm32/no-disp32 -<span id="L7661" class="LineNr"> 7661 </span> 1/imm32/output-is-write-only -<span id="L7662" class="LineNr"> 7662 </span> <a href='mu.subx.html#L7663'>_Primitive-copy-lit-to-mem</a>/imm32/next -<span id="L7663" class="LineNr"> 7663 </span><span class="subxMinorFunction">_Primitive-copy-lit-to-mem</span>: -<span id="L7664" class="LineNr"> 7664 </span> <span class="subxComment"># copy-to var1, lit => c7 0/subop/copy var1/rm32 lit/imm32</span> -<span id="L7665" class="LineNr"> 7665 </span> <span class="Constant">"copy-to"</span>/imm32/name -<span id="L7666" class="LineNr"> 7666 </span> <span class="SpecialChar"><a href='mu.subx.html#L8259'>Int-var-and-literal</a></span>/imm32/inouts -<span id="L7667" class="LineNr"> 7667 </span> 0/imm32/outputs -<span id="L7668" class="LineNr"> 7668 </span> <span class="Constant">"c7 0/subop/copy"</span>/imm32/subx-name -<span id="L7669" class="LineNr"> 7669 </span> 1/imm32/rm32-is-first-inout -<span id="L7670" class="LineNr"> 7670 </span> 0/imm32/no-r32 -<span id="L7671" class="LineNr"> 7671 </span> 2/imm32/imm32-is-first-inout -<span id="L7672" class="LineNr"> 7672 </span> 0/imm32/no-disp32 -<span id="L7673" class="LineNr"> 7673 </span> 1/imm32/output-is-write-only -<span id="L7674" class="LineNr"> 7674 </span> <a href='mu.subx.html#L7676'>_Primitive-compare-mem-with-reg</a>/imm32/next -<span id="L7675" class="LineNr"> 7675 </span><span class="subxH1Comment"># - compare</span> -<span id="L7676" class="LineNr"> 7676 </span><span class="subxMinorFunction">_Primitive-compare-mem-with-reg</span>: -<span id="L7677" class="LineNr"> 7677 </span> <span class="subxComment"># compare var1 var2/reg => 39/compare-> var1/rm32 var2/r32</span> -<span id="L7678" class="LineNr"> 7678 </span> <span class="Constant">"compare"</span>/imm32/name -<span id="L7679" class="LineNr"> 7679 </span> <span class="SpecialChar"><a href='mu.subx.html#L8247'>Two-args-int-stack-int-reg</a></span>/imm32/inouts -<span id="L7680" class="LineNr"> 7680 </span> 0/imm32/outputs -<span id="L7681" class="LineNr"> 7681 </span> <span class="Constant">"39/compare->"</span>/imm32/subx-name -<span id="L7682" class="LineNr"> 7682 </span> 1/imm32/rm32-is-first-inout -<span id="L7683" class="LineNr"> 7683 </span> 2/imm32/r32-is-second-inout -<span id="L7684" class="LineNr"> 7684 </span> 0/imm32/no-imm32 -<span id="L7685" class="LineNr"> 7685 </span> 0/imm32/no-disp32 -<span id="L7686" class="LineNr"> 7686 </span> 0/imm32/output-is-write-only -<span id="L7687" class="LineNr"> 7687 </span> <a href='mu.subx.html#L7688'>_Primitive-compare-reg-with-mem</a>/imm32/next -<span id="L7688" class="LineNr"> 7688 </span><span class="subxMinorFunction">_Primitive-compare-reg-with-mem</span>: -<span id="L7689" class="LineNr"> 7689 </span> <span class="subxComment"># compare var1/reg var2 => 3b/compare<- var2/rm32 var1/r32</span> -<span id="L7690" class="LineNr"> 7690 </span> <span class="Constant">"compare"</span>/imm32/name -<span id="L7691" class="LineNr"> 7691 </span> <span class="SpecialChar"><a href='mu.subx.html#L8251'>Two-args-int-reg-int-stack</a></span>/imm32/inouts -<span id="L7692" class="LineNr"> 7692 </span> 0/imm32/outputs -<span id="L7693" class="LineNr"> 7693 </span> <span class="Constant">"3b/compare<-"</span>/imm32/subx-name -<span id="L7694" class="LineNr"> 7694 </span> 2/imm32/rm32-is-second-inout -<span id="L7695" class="LineNr"> 7695 </span> 1/imm32/r32-is-first-inout -<span id="L7696" class="LineNr"> 7696 </span> 0/imm32/no-imm32 -<span id="L7697" class="LineNr"> 7697 </span> 0/imm32/no-disp32 -<span id="L7698" class="LineNr"> 7698 </span> 0/imm32/output-is-write-only -<span id="L7699" class="LineNr"> 7699 </span> <a href='mu.subx.html#L7700'>_Primitive-compare-eax-with-literal</a>/imm32/next -<span id="L7700" class="LineNr"> 7700 </span><span class="subxMinorFunction">_Primitive-compare-eax-with-literal</span>: -<span id="L7701" class="LineNr"> 7701 </span> <span class="subxComment"># compare var1/eax n => 3d/compare-eax-with n/imm32</span> -<span id="L7702" class="LineNr"> 7702 </span> <span class="Constant">"compare"</span>/imm32/name -<span id="L7703" class="LineNr"> 7703 </span> <span class="SpecialChar"><a href='mu.subx.html#L8255'>Two-args-int-eax-int-literal</a></span>/imm32/inouts -<span id="L7704" class="LineNr"> 7704 </span> 0/imm32/outputs -<span id="L7705" class="LineNr"> 7705 </span> <span class="Constant">"3d/compare-eax-with"</span>/imm32/subx-name -<span id="L7706" class="LineNr"> 7706 </span> 0/imm32/no-rm32 -<span id="L7707" class="LineNr"> 7707 </span> 0/imm32/no-r32 -<span id="L7708" class="LineNr"> 7708 </span> 2/imm32/imm32-is-second-inout -<span id="L7709" class="LineNr"> 7709 </span> 0/imm32/no-disp32 -<span id="L7710" class="LineNr"> 7710 </span> 0/imm32/output-is-write-only -<span id="L7711" class="LineNr"> 7711 </span> <a href='mu.subx.html#L7712'>_Primitive-compare-reg-with-literal</a>/imm32/next -<span id="L7712" class="LineNr"> 7712 </span><span class="subxMinorFunction">_Primitive-compare-reg-with-literal</span>: -<span id="L7713" class="LineNr"> 7713 </span> <span class="subxComment"># compare var1/reg n => 81 7/subop/compare %reg n/imm32</span> -<span id="L7714" class="LineNr"> 7714 </span> <span class="Constant">"compare"</span>/imm32/name -<span id="L7715" class="LineNr"> 7715 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Int-var-in-register-and-literal</a></span>/imm32/inouts -<span id="L7716" class="LineNr"> 7716 </span> 0/imm32/outputs -<span id="L7717" class="LineNr"> 7717 </span> <span class="Constant">"81 7/subop/compare"</span>/imm32/subx-name -<span id="L7718" class="LineNr"> 7718 </span> 1/imm32/rm32-is-first-inout -<span id="L7719" class="LineNr"> 7719 </span> 0/imm32/no-r32 -<span id="L7720" class="LineNr"> 7720 </span> 2/imm32/imm32-is-second-inout -<span id="L7721" class="LineNr"> 7721 </span> 0/imm32/no-disp32 -<span id="L7722" class="LineNr"> 7722 </span> 0/imm32/output-is-write-only -<span id="L7723" class="LineNr"> 7723 </span> <a href='mu.subx.html#L7724'>_Primitive-compare-mem-with-literal</a>/imm32/next -<span id="L7724" class="LineNr"> 7724 </span><span class="subxMinorFunction">_Primitive-compare-mem-with-literal</span>: -<span id="L7725" class="LineNr"> 7725 </span> <span class="subxComment"># compare var1 n => 81 7/subop/compare *(ebp+___) n/imm32</span> -<span id="L7726" class="LineNr"> 7726 </span> <span class="Constant">"compare"</span>/imm32/name -<span id="L7727" class="LineNr"> 7727 </span> <span class="SpecialChar"><a href='mu.subx.html#L8259'>Int-var-and-literal</a></span>/imm32/inouts -<span id="L7728" class="LineNr"> 7728 </span> 0/imm32/outputs -<span id="L7729" class="LineNr"> 7729 </span> <span class="Constant">"81 7/subop/compare"</span>/imm32/subx-name -<span id="L7730" class="LineNr"> 7730 </span> 1/imm32/rm32-is-first-inout -<span id="L7731" class="LineNr"> 7731 </span> 0/imm32/no-r32 -<span id="L7732" class="LineNr"> 7732 </span> 2/imm32/imm32-is-second-inout -<span id="L7733" class="LineNr"> 7733 </span> 0/imm32/no-disp32 -<span id="L7734" class="LineNr"> 7734 </span> 0/imm32/output-is-write-only -<span id="L7735" class="LineNr"> 7735 </span> <a href='mu.subx.html#L7737'>_Primitive-multiply-reg-by-mem</a>/imm32/next -<span id="L7736" class="LineNr"> 7736 </span><span class="subxH1Comment"># - multiply</span> -<span id="L7737" class="LineNr"> 7737 </span><span class="subxMinorFunction">_Primitive-multiply-reg-by-mem</span>: -<span id="L7738" class="LineNr"> 7738 </span> <span class="subxComment"># var1/reg <- multiply var2 => 0f af/multiply var2/rm32 var1/r32</span> -<span id="L7739" class="LineNr"> 7739 </span> <span class="Constant">"multiply"</span>/imm32/name -<span id="L7740" class="LineNr"> 7740 </span> <span class="SpecialChar"><a href='mu.subx.html#L8236'>Single-int-var-in-mem</a></span>/imm32/inouts -<span id="L7741" class="LineNr"> 7741 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/outputs -<span id="L7742" class="LineNr"> 7742 </span> <span class="Constant">"0f af/multiply"</span>/imm32/subx-name -<span id="L7743" class="LineNr"> 7743 </span> 1/imm32/rm32-is-first-inout -<span id="L7744" class="LineNr"> 7744 </span> 3/imm32/r32-is-first-output -<span id="L7745" class="LineNr"> 7745 </span> 0/imm32/no-imm32 -<span id="L7746" class="LineNr"> 7746 </span> 0/imm32/no-disp32 -<span id="L7747" class="LineNr"> 7747 </span> 0/imm32/output-is-write-only -<span id="L7748" class="LineNr"> 7748 </span> <a href='mu.subx.html#L7750'>_Primitive-break-if-addr<</a>/imm32/next -<span id="L7749" class="LineNr"> 7749 </span><span class="subxH1Comment"># - branches</span> -<span id="L7750" class="LineNr"> 7750 </span><span class="subxMinorFunction">_Primitive-break-if-addr<</span>: -<span id="L7751" class="LineNr"> 7751 </span> <span class="Constant">"break-if-addr<"</span>/imm32/name -<span id="L7752" class="LineNr"> 7752 </span> 0/imm32/inouts -<span id="L7753" class="LineNr"> 7753 </span> 0/imm32/outputs -<span id="L7754" class="LineNr"> 7754 </span> <span class="Constant">"0f 82/jump-if-addr< break/disp32"</span>/imm32/subx-name -<span id="L7755" class="LineNr"> 7755 </span> 0/imm32/no-rm32 -<span id="L7756" class="LineNr"> 7756 </span> 0/imm32/no-r32 -<span id="L7757" class="LineNr"> 7757 </span> 0/imm32/no-imm32 -<span id="L7758" class="LineNr"> 7758 </span> 0/imm32/no-disp32 -<span id="L7759" class="LineNr"> 7759 </span> 0/imm32/no-output -<span id="L7760" class="LineNr"> 7760 </span> <a href='mu.subx.html#L7761'>_Primitive-break-if-addr>=</a>/imm32/next -<span id="L7761" class="LineNr"> 7761 </span><span class="subxMinorFunction">_Primitive-break-if-addr>=</span>: -<span id="L7762" class="LineNr"> 7762 </span> <span class="Constant">"break-if-addr>="</span>/imm32/name -<span id="L7763" class="LineNr"> 7763 </span> 0/imm32/inouts -<span id="L7764" class="LineNr"> 7764 </span> 0/imm32/outputs -<span id="L7765" class="LineNr"> 7765 </span> <span class="Constant">"0f 83/jump-if-addr>= break/disp32"</span>/imm32/subx-name -<span id="L7766" class="LineNr"> 7766 </span> 0/imm32/no-rm32 -<span id="L7767" class="LineNr"> 7767 </span> 0/imm32/no-r32 -<span id="L7768" class="LineNr"> 7768 </span> 0/imm32/no-imm32 -<span id="L7769" class="LineNr"> 7769 </span> 0/imm32/no-disp32 -<span id="L7770" class="LineNr"> 7770 </span> 0/imm32/no-output -<span id="L7771" class="LineNr"> 7771 </span> <a href='mu.subx.html#L7772'>_Primitive-break-if-=</a>/imm32/next -<span id="L7772" class="LineNr"> 7772 </span><span class="subxMinorFunction">_Primitive-break-if-=</span>: -<span id="L7773" class="LineNr"> 7773 </span> <span class="Constant">"break-if-="</span>/imm32/name -<span id="L7774" class="LineNr"> 7774 </span> 0/imm32/inouts -<span id="L7775" class="LineNr"> 7775 </span> 0/imm32/outputs -<span id="L7776" class="LineNr"> 7776 </span> <span class="Constant">"0f 84/jump-if-= break/disp32"</span>/imm32/subx-name -<span id="L7777" class="LineNr"> 7777 </span> 0/imm32/no-rm32 -<span id="L7778" class="LineNr"> 7778 </span> 0/imm32/no-r32 -<span id="L7779" class="LineNr"> 7779 </span> 0/imm32/no-imm32 -<span id="L7780" class="LineNr"> 7780 </span> 0/imm32/no-disp32 -<span id="L7781" class="LineNr"> 7781 </span> 0/imm32/no-output -<span id="L7782" class="LineNr"> 7782 </span> <a href='mu.subx.html#L7783'>_Primitive-break-if-!=</a>/imm32/next -<span id="L7783" class="LineNr"> 7783 </span><span class="subxMinorFunction">_Primitive-break-if-!=</span>: -<span id="L7784" class="LineNr"> 7784 </span> <span class="Constant">"break-if-!="</span>/imm32/name -<span id="L7785" class="LineNr"> 7785 </span> 0/imm32/inouts -<span id="L7786" class="LineNr"> 7786 </span> 0/imm32/outputs -<span id="L7787" class="LineNr"> 7787 </span> <span class="Constant">"0f 85/jump-if-!= break/disp32"</span>/imm32/subx-name -<span id="L7788" class="LineNr"> 7788 </span> 0/imm32/no-rm32 -<span id="L7789" class="LineNr"> 7789 </span> 0/imm32/no-r32 -<span id="L7790" class="LineNr"> 7790 </span> 0/imm32/no-imm32 -<span id="L7791" class="LineNr"> 7791 </span> 0/imm32/no-disp32 -<span id="L7792" class="LineNr"> 7792 </span> 0/imm32/no-output -<span id="L7793" class="LineNr"> 7793 </span> <a href='mu.subx.html#L7794'>_Primitive-break-if-addr<=</a>/imm32/next -<span id="L7794" class="LineNr"> 7794 </span><span class="subxMinorFunction">_Primitive-break-if-addr<=</span>: -<span id="L7795" class="LineNr"> 7795 </span> <span class="Constant">"break-if-addr<="</span>/imm32/name -<span id="L7796" class="LineNr"> 7796 </span> 0/imm32/inouts -<span id="L7797" class="LineNr"> 7797 </span> 0/imm32/outputs -<span id="L7798" class="LineNr"> 7798 </span> <span class="Constant">"0f 86/jump-if-addr<= break/disp32"</span>/imm32/subx-name -<span id="L7799" class="LineNr"> 7799 </span> 0/imm32/no-rm32 -<span id="L7800" class="LineNr"> 7800 </span> 0/imm32/no-r32 -<span id="L7801" class="LineNr"> 7801 </span> 0/imm32/no-imm32 -<span id="L7802" class="LineNr"> 7802 </span> 0/imm32/no-disp32 -<span id="L7803" class="LineNr"> 7803 </span> 0/imm32/no-output -<span id="L7804" class="LineNr"> 7804 </span> <a href='mu.subx.html#L7805'>_Primitive-break-if-addr></a>/imm32/next -<span id="L7805" class="LineNr"> 7805 </span><span class="subxMinorFunction">_Primitive-break-if-addr></span>: -<span id="L7806" class="LineNr"> 7806 </span> <span class="Constant">"break-if-addr>"</span>/imm32/name -<span id="L7807" class="LineNr"> 7807 </span> 0/imm32/inouts -<span id="L7808" class="LineNr"> 7808 </span> 0/imm32/outputs -<span id="L7809" class="LineNr"> 7809 </span> <span class="Constant">"0f 87/jump-if-addr> break/disp32"</span>/imm32/subx-name -<span id="L7810" class="LineNr"> 7810 </span> 0/imm32/no-rm32 -<span id="L7811" class="LineNr"> 7811 </span> 0/imm32/no-r32 -<span id="L7812" class="LineNr"> 7812 </span> 0/imm32/no-imm32 -<span id="L7813" class="LineNr"> 7813 </span> 0/imm32/no-disp32 -<span id="L7814" class="LineNr"> 7814 </span> 0/imm32/no-output -<span id="L7815" class="LineNr"> 7815 </span> <a href='mu.subx.html#L7816'>_Primitive-break-if-<</a>/imm32/next -<span id="L7816" class="LineNr"> 7816 </span><span class="subxMinorFunction">_Primitive-break-if-<</span>: -<span id="L7817" class="LineNr"> 7817 </span> <span class="Constant">"break-if-<"</span>/imm32/name -<span id="L7818" class="LineNr"> 7818 </span> 0/imm32/inouts -<span id="L7819" class="LineNr"> 7819 </span> 0/imm32/outputs -<span id="L7820" class="LineNr"> 7820 </span> <span class="Constant">"0f 8c/jump-if-< break/disp32"</span>/imm32/subx-name -<span id="L7821" class="LineNr"> 7821 </span> 0/imm32/no-rm32 -<span id="L7822" class="LineNr"> 7822 </span> 0/imm32/no-r32 -<span id="L7823" class="LineNr"> 7823 </span> 0/imm32/no-imm32 -<span id="L7824" class="LineNr"> 7824 </span> 0/imm32/no-disp32 -<span id="L7825" class="LineNr"> 7825 </span> 0/imm32/no-output -<span id="L7826" class="LineNr"> 7826 </span> <a href='mu.subx.html#L7827'>_Primitive-break-if->=</a>/imm32/next -<span id="L7827" class="LineNr"> 7827 </span><span class="subxMinorFunction">_Primitive-break-if->=</span>: -<span id="L7828" class="LineNr"> 7828 </span> <span class="Constant">"break-if->="</span>/imm32/name -<span id="L7829" class="LineNr"> 7829 </span> 0/imm32/inouts -<span id="L7830" class="LineNr"> 7830 </span> 0/imm32/outputs -<span id="L7831" class="LineNr"> 7831 </span> <span class="Constant">"0f 8d/jump-if->= break/disp32"</span>/imm32/subx-name -<span id="L7832" class="LineNr"> 7832 </span> 0/imm32/no-rm32 -<span id="L7833" class="LineNr"> 7833 </span> 0/imm32/no-r32 -<span id="L7834" class="LineNr"> 7834 </span> 0/imm32/no-imm32 -<span id="L7835" class="LineNr"> 7835 </span> 0/imm32/no-disp32 -<span id="L7836" class="LineNr"> 7836 </span> 0/imm32/no-output -<span id="L7837" class="LineNr"> 7837 </span> <a href='mu.subx.html#L7838'>_Primitive-break-if-<=</a>/imm32/next -<span id="L7838" class="LineNr"> 7838 </span><span class="subxMinorFunction">_Primitive-break-if-<=</span>: -<span id="L7839" class="LineNr"> 7839 </span> <span class="Constant">"break-if-<="</span>/imm32/name -<span id="L7840" class="LineNr"> 7840 </span> 0/imm32/inouts -<span id="L7841" class="LineNr"> 7841 </span> 0/imm32/outputs -<span id="L7842" class="LineNr"> 7842 </span> <span class="Constant">"0f 8e/jump-if-<= break/disp32"</span>/imm32/subx-name -<span id="L7843" class="LineNr"> 7843 </span> 0/imm32/no-rm32 -<span id="L7844" class="LineNr"> 7844 </span> 0/imm32/no-r32 -<span id="L7845" class="LineNr"> 7845 </span> 0/imm32/no-imm32 -<span id="L7846" class="LineNr"> 7846 </span> 0/imm32/no-disp32 -<span id="L7847" class="LineNr"> 7847 </span> 0/imm32/no-output -<span id="L7848" class="LineNr"> 7848 </span> <a href='mu.subx.html#L7849'>_Primitive-break-if-></a>/imm32/next -<span id="L7849" class="LineNr"> 7849 </span><span class="subxMinorFunction">_Primitive-break-if-></span>: -<span id="L7850" class="LineNr"> 7850 </span> <span class="Constant">"break-if->"</span>/imm32/name -<span id="L7851" class="LineNr"> 7851 </span> 0/imm32/inouts -<span id="L7852" class="LineNr"> 7852 </span> 0/imm32/outputs -<span id="L7853" class="LineNr"> 7853 </span> <span class="Constant">"0f 8f/jump-if-> break/disp32"</span>/imm32/subx-name -<span id="L7854" class="LineNr"> 7854 </span> 0/imm32/no-rm32 -<span id="L7855" class="LineNr"> 7855 </span> 0/imm32/no-r32 -<span id="L7856" class="LineNr"> 7856 </span> 0/imm32/no-imm32 -<span id="L7857" class="LineNr"> 7857 </span> 0/imm32/no-disp32 -<span id="L7858" class="LineNr"> 7858 </span> 0/imm32/no-output -<span id="L7859" class="LineNr"> 7859 </span> <a href='mu.subx.html#L7860'>_Primitive-break</a>/imm32/next -<span id="L7860" class="LineNr"> 7860 </span><span class="subxMinorFunction">_Primitive-break</span>: -<span id="L7861" class="LineNr"> 7861 </span> <span class="Constant">"break"</span>/imm32/name -<span id="L7862" class="LineNr"> 7862 </span> 0/imm32/inouts -<span id="L7863" class="LineNr"> 7863 </span> 0/imm32/outputs -<span id="L7864" class="LineNr"> 7864 </span> <span class="Constant">"e9/jump break/disp32"</span>/imm32/subx-name -<span id="L7865" class="LineNr"> 7865 </span> 0/imm32/no-rm32 -<span id="L7866" class="LineNr"> 7866 </span> 0/imm32/no-r32 -<span id="L7867" class="LineNr"> 7867 </span> 0/imm32/no-imm32 -<span id="L7868" class="LineNr"> 7868 </span> 0/imm32/no-disp32 -<span id="L7869" class="LineNr"> 7869 </span> 0/imm32/no-output -<span id="L7870" class="LineNr"> 7870 </span> <a href='mu.subx.html#L7871'>_Primitive-loop-if-addr<</a>/imm32/next -<span id="L7871" class="LineNr"> 7871 </span><span class="subxMinorFunction">_Primitive-loop-if-addr<</span>: -<span id="L7872" class="LineNr"> 7872 </span> <span class="Constant">"loop-if-addr<"</span>/imm32/name -<span id="L7873" class="LineNr"> 7873 </span> 0/imm32/inouts -<span id="L7874" class="LineNr"> 7874 </span> 0/imm32/outputs -<span id="L7875" class="LineNr"> 7875 </span> <span class="Constant">"0f 82/jump-if-addr< loop/disp32"</span>/imm32/subx-name -<span id="L7876" class="LineNr"> 7876 </span> 0/imm32/no-rm32 -<span id="L7877" class="LineNr"> 7877 </span> 0/imm32/no-r32 -<span id="L7878" class="LineNr"> 7878 </span> 0/imm32/no-imm32 -<span id="L7879" class="LineNr"> 7879 </span> 0/imm32/no-disp32 -<span id="L7880" class="LineNr"> 7880 </span> 0/imm32/no-output -<span id="L7881" class="LineNr"> 7881 </span> <a href='mu.subx.html#L7882'>_Primitive-loop-if-addr>=</a>/imm32/next -<span id="L7882" class="LineNr"> 7882 </span><span class="subxMinorFunction">_Primitive-loop-if-addr>=</span>: -<span id="L7883" class="LineNr"> 7883 </span> <span class="Constant">"loop-if-addr>="</span>/imm32/name -<span id="L7884" class="LineNr"> 7884 </span> 0/imm32/inouts -<span id="L7885" class="LineNr"> 7885 </span> 0/imm32/outputs -<span id="L7886" class="LineNr"> 7886 </span> <span class="Constant">"0f 83/jump-if-addr>= loop/disp32"</span>/imm32/subx-name -<span id="L7887" class="LineNr"> 7887 </span> 0/imm32/no-rm32 -<span id="L7888" class="LineNr"> 7888 </span> 0/imm32/no-r32 -<span id="L7889" class="LineNr"> 7889 </span> 0/imm32/no-imm32 -<span id="L7890" class="LineNr"> 7890 </span> 0/imm32/no-disp32 -<span id="L7891" class="LineNr"> 7891 </span> 0/imm32/no-output -<span id="L7892" class="LineNr"> 7892 </span> <a href='mu.subx.html#L7893'>_Primitive-loop-if-=</a>/imm32/next -<span id="L7893" class="LineNr"> 7893 </span><span class="subxMinorFunction">_Primitive-loop-if-=</span>: -<span id="L7894" class="LineNr"> 7894 </span> <span class="Constant">"loop-if-="</span>/imm32/name -<span id="L7895" class="LineNr"> 7895 </span> 0/imm32/inouts -<span id="L7896" class="LineNr"> 7896 </span> 0/imm32/outputs -<span id="L7897" class="LineNr"> 7897 </span> <span class="Constant">"0f 84/jump-if-= loop/disp32"</span>/imm32/subx-name -<span id="L7898" class="LineNr"> 7898 </span> 0/imm32/no-rm32 -<span id="L7899" class="LineNr"> 7899 </span> 0/imm32/no-r32 -<span id="L7900" class="LineNr"> 7900 </span> 0/imm32/no-imm32 -<span id="L7901" class="LineNr"> 7901 </span> 0/imm32/no-disp32 -<span id="L7902" class="LineNr"> 7902 </span> 0/imm32/no-output -<span id="L7903" class="LineNr"> 7903 </span> <a href='mu.subx.html#L7904'>_Primitive-loop-if-!=</a>/imm32/next -<span id="L7904" class="LineNr"> 7904 </span><span class="subxMinorFunction">_Primitive-loop-if-!=</span>: -<span id="L7905" class="LineNr"> 7905 </span> <span class="Constant">"loop-if-!="</span>/imm32/name -<span id="L7906" class="LineNr"> 7906 </span> 0/imm32/inouts -<span id="L7907" class="LineNr"> 7907 </span> 0/imm32/outputs -<span id="L7908" class="LineNr"> 7908 </span> <span class="Constant">"0f 85/jump-if-!= loop/disp32"</span>/imm32/subx-name -<span id="L7909" class="LineNr"> 7909 </span> 0/imm32/no-rm32 -<span id="L7910" class="LineNr"> 7910 </span> 0/imm32/no-r32 -<span id="L7911" class="LineNr"> 7911 </span> 0/imm32/no-imm32 -<span id="L7912" class="LineNr"> 7912 </span> 0/imm32/no-disp32 -<span id="L7913" class="LineNr"> 7913 </span> 0/imm32/no-output -<span id="L7914" class="LineNr"> 7914 </span> <a href='mu.subx.html#L7915'>_Primitive-loop-if-addr<=</a>/imm32/next -<span id="L7915" class="LineNr"> 7915 </span><span class="subxMinorFunction">_Primitive-loop-if-addr<=</span>: -<span id="L7916" class="LineNr"> 7916 </span> <span class="Constant">"loop-if-addr<="</span>/imm32/name -<span id="L7917" class="LineNr"> 7917 </span> 0/imm32/inouts -<span id="L7918" class="LineNr"> 7918 </span> 0/imm32/outputs -<span id="L7919" class="LineNr"> 7919 </span> <span class="Constant">"0f 86/jump-if-addr<= loop/disp32"</span>/imm32/subx-name -<span id="L7920" class="LineNr"> 7920 </span> 0/imm32/no-rm32 -<span id="L7921" class="LineNr"> 7921 </span> 0/imm32/no-r32 -<span id="L7922" class="LineNr"> 7922 </span> 0/imm32/no-imm32 -<span id="L7923" class="LineNr"> 7923 </span> 0/imm32/no-disp32 -<span id="L7924" class="LineNr"> 7924 </span> 0/imm32/no-output -<span id="L7925" class="LineNr"> 7925 </span> <a href='mu.subx.html#L7926'>_Primitive-loop-if-addr></a>/imm32/next -<span id="L7926" class="LineNr"> 7926 </span><span class="subxMinorFunction">_Primitive-loop-if-addr></span>: -<span id="L7927" class="LineNr"> 7927 </span> <span class="Constant">"loop-if-addr>"</span>/imm32/name -<span id="L7928" class="LineNr"> 7928 </span> 0/imm32/inouts -<span id="L7929" class="LineNr"> 7929 </span> 0/imm32/outputs -<span id="L7930" class="LineNr"> 7930 </span> <span class="Constant">"0f 87/jump-if-addr> loop/disp32"</span>/imm32/subx-name -<span id="L7931" class="LineNr"> 7931 </span> 0/imm32/no-rm32 -<span id="L7932" class="LineNr"> 7932 </span> 0/imm32/no-r32 -<span id="L7933" class="LineNr"> 7933 </span> 0/imm32/no-imm32 -<span id="L7934" class="LineNr"> 7934 </span> 0/imm32/no-disp32 -<span id="L7935" class="LineNr"> 7935 </span> 0/imm32/no-output -<span id="L7936" class="LineNr"> 7936 </span> <a href='mu.subx.html#L7937'>_Primitive-loop-if-<</a>/imm32/next -<span id="L7937" class="LineNr"> 7937 </span><span class="subxMinorFunction">_Primitive-loop-if-<</span>: -<span id="L7938" class="LineNr"> 7938 </span> <span class="Constant">"loop-if-<"</span>/imm32/name -<span id="L7939" class="LineNr"> 7939 </span> 0/imm32/inouts -<span id="L7940" class="LineNr"> 7940 </span> 0/imm32/outputs -<span id="L7941" class="LineNr"> 7941 </span> <span class="Constant">"0f 8c/jump-if-< loop/disp32"</span>/imm32/subx-name -<span id="L7942" class="LineNr"> 7942 </span> 0/imm32/no-rm32 -<span id="L7943" class="LineNr"> 7943 </span> 0/imm32/no-r32 -<span id="L7944" class="LineNr"> 7944 </span> 0/imm32/no-imm32 -<span id="L7945" class="LineNr"> 7945 </span> 0/imm32/no-disp32 -<span id="L7946" class="LineNr"> 7946 </span> 0/imm32/no-output -<span id="L7947" class="LineNr"> 7947 </span> <a href='mu.subx.html#L7948'>_Primitive-loop-if->=</a>/imm32/next -<span id="L7948" class="LineNr"> 7948 </span><span class="subxMinorFunction">_Primitive-loop-if->=</span>: -<span id="L7949" class="LineNr"> 7949 </span> <span class="Constant">"loop-if->="</span>/imm32/name -<span id="L7950" class="LineNr"> 7950 </span> 0/imm32/inouts -<span id="L7951" class="LineNr"> 7951 </span> 0/imm32/outputs -<span id="L7952" class="LineNr"> 7952 </span> <span class="Constant">"0f 8d/jump-if->= loop/disp32"</span>/imm32/subx-name -<span id="L7953" class="LineNr"> 7953 </span> 0/imm32/no-rm32 -<span id="L7954" class="LineNr"> 7954 </span> 0/imm32/no-r32 -<span id="L7955" class="LineNr"> 7955 </span> 0/imm32/no-imm32 -<span id="L7956" class="LineNr"> 7956 </span> 0/imm32/no-disp32 -<span id="L7957" class="LineNr"> 7957 </span> 0/imm32/no-output -<span id="L7958" class="LineNr"> 7958 </span> <a href='mu.subx.html#L7959'>_Primitive-loop-if-<=</a>/imm32/next -<span id="L7959" class="LineNr"> 7959 </span><span class="subxMinorFunction">_Primitive-loop-if-<=</span>: -<span id="L7960" class="LineNr"> 7960 </span> <span class="Constant">"loop-if-<="</span>/imm32/name -<span id="L7961" class="LineNr"> 7961 </span> 0/imm32/inouts -<span id="L7962" class="LineNr"> 7962 </span> 0/imm32/outputs -<span id="L7963" class="LineNr"> 7963 </span> <span class="Constant">"0f 8e/jump-if-<= loop/disp32"</span>/imm32/subx-name -<span id="L7964" class="LineNr"> 7964 </span> 0/imm32/no-rm32 -<span id="L7965" class="LineNr"> 7965 </span> 0/imm32/no-r32 -<span id="L7966" class="LineNr"> 7966 </span> 0/imm32/no-imm32 -<span id="L7967" class="LineNr"> 7967 </span> 0/imm32/no-disp32 -<span id="L7968" class="LineNr"> 7968 </span> 0/imm32/no-output -<span id="L7969" class="LineNr"> 7969 </span> <a href='mu.subx.html#L7970'>_Primitive-loop-if-></a>/imm32/next -<span id="L7970" class="LineNr"> 7970 </span><span class="subxMinorFunction">_Primitive-loop-if-></span>: -<span id="L7971" class="LineNr"> 7971 </span> <span class="Constant">"loop-if->"</span>/imm32/name -<span id="L7972" class="LineNr"> 7972 </span> 0/imm32/inouts -<span id="L7973" class="LineNr"> 7973 </span> 0/imm32/outputs -<span id="L7974" class="LineNr"> 7974 </span> <span class="Constant">"0f 8f/jump-if-> loop/disp32"</span>/imm32/subx-name -<span id="L7975" class="LineNr"> 7975 </span> 0/imm32/no-rm32 -<span id="L7976" class="LineNr"> 7976 </span> 0/imm32/no-r32 -<span id="L7977" class="LineNr"> 7977 </span> 0/imm32/no-imm32 -<span id="L7978" class="LineNr"> 7978 </span> 0/imm32/no-disp32 -<span id="L7979" class="LineNr"> 7979 </span> 0/imm32/no-output -<span id="L7980" class="LineNr"> 7980 </span> <a href='mu.subx.html#L7981'>_Primitive-loop</a>/imm32/next <span class="subxComment"># we probably don't need an unconditional break</span> -<span id="L7981" class="LineNr"> 7981 </span><span class="subxMinorFunction">_Primitive-loop</span>: -<span id="L7982" class="LineNr"> 7982 </span> <span class="Constant">"loop"</span>/imm32/name -<span id="L7983" class="LineNr"> 7983 </span> 0/imm32/inouts -<span id="L7984" class="LineNr"> 7984 </span> 0/imm32/outputs -<span id="L7985" class="LineNr"> 7985 </span> <span class="Constant">"e9/jump loop/disp32"</span>/imm32/subx-name -<span id="L7986" class="LineNr"> 7986 </span> 0/imm32/no-rm32 -<span id="L7987" class="LineNr"> 7987 </span> 0/imm32/no-r32 -<span id="L7988" class="LineNr"> 7988 </span> 0/imm32/no-imm32 -<span id="L7989" class="LineNr"> 7989 </span> 0/imm32/no-disp32 -<span id="L7990" class="LineNr"> 7990 </span> 0/imm32/no-output -<span id="L7991" class="LineNr"> 7991 </span> <a href='mu.subx.html#L7993'>_Primitive-break-if-addr<-named</a>/imm32/next -<span id="L7992" class="LineNr"> 7992 </span><span class="subxH1Comment"># - branches to named blocks</span> -<span id="L7993" class="LineNr"> 7993 </span><span class="subxMinorFunction">_Primitive-break-if-addr<-named</span>: -<span id="L7994" class="LineNr"> 7994 </span> <span class="Constant">"break-if-addr<"</span>/imm32/name -<span id="L7995" class="LineNr"> 7995 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L7996" class="LineNr"> 7996 </span> 0/imm32/outputs -<span id="L7997" class="LineNr"> 7997 </span> <span class="Constant">"0f 82/jump-if-addr<"</span>/imm32/subx-name -<span id="L7998" class="LineNr"> 7998 </span> 0/imm32/no-rm32 -<span id="L7999" class="LineNr"> 7999 </span> 0/imm32/no-r32 -<span id="L8000" class="LineNr"> 8000 </span> 0/imm32/no-imm32 -<span id="L8001" class="LineNr"> 8001 </span> 1/imm32/disp32-is-first-inout -<span id="L8002" class="LineNr"> 8002 </span> 0/imm32/no-output -<span id="L8003" class="LineNr"> 8003 </span> <a href='mu.subx.html#L8004'>_Primitive-break-if-addr>=-named</a>/imm32/next -<span id="L8004" class="LineNr"> 8004 </span><span class="subxMinorFunction">_Primitive-break-if-addr>=-named</span>: -<span id="L8005" class="LineNr"> 8005 </span> <span class="Constant">"break-if-addr>="</span>/imm32/name -<span id="L8006" class="LineNr"> 8006 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L8007" class="LineNr"> 8007 </span> 0/imm32/outputs -<span id="L8008" class="LineNr"> 8008 </span> <span class="Constant">"0f 83/jump-if-addr>="</span>/imm32/subx-name -<span id="L8009" class="LineNr"> 8009 </span> 0/imm32/no-rm32 -<span id="L8010" class="LineNr"> 8010 </span> 0/imm32/no-r32 -<span id="L8011" class="LineNr"> 8011 </span> 0/imm32/no-imm32 -<span id="L8012" class="LineNr"> 8012 </span> 1/imm32/disp32-is-first-inout -<span id="L8013" class="LineNr"> 8013 </span> 0/imm32/no-output -<span id="L8014" class="LineNr"> 8014 </span> <a href='mu.subx.html#L8015'>_Primitive-break-if-=-named</a>/imm32/next -<span id="L8015" class="LineNr"> 8015 </span><span class="subxMinorFunction">_Primitive-break-if-=-named</span>: -<span id="L8016" class="LineNr"> 8016 </span> <span class="Constant">"break-if-="</span>/imm32/name -<span id="L8017" class="LineNr"> 8017 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L8018" class="LineNr"> 8018 </span> 0/imm32/outputs -<span id="L8019" class="LineNr"> 8019 </span> <span class="Constant">"0f 84/jump-if-="</span>/imm32/subx-name -<span id="L8020" class="LineNr"> 8020 </span> 0/imm32/no-rm32 -<span id="L8021" class="LineNr"> 8021 </span> 0/imm32/no-r32 -<span id="L8022" class="LineNr"> 8022 </span> 0/imm32/no-imm32 -<span id="L8023" class="LineNr"> 8023 </span> 1/imm32/disp32-is-first-inout -<span id="L8024" class="LineNr"> 8024 </span> 0/imm32/no-output -<span id="L8025" class="LineNr"> 8025 </span> <a href='mu.subx.html#L8026'>_Primitive-break-if-!=-named</a>/imm32/next -<span id="L8026" class="LineNr"> 8026 </span><span class="subxMinorFunction">_Primitive-break-if-!=-named</span>: -<span id="L8027" class="LineNr"> 8027 </span> <span class="Constant">"break-if-!="</span>/imm32/name -<span id="L8028" class="LineNr"> 8028 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L8029" class="LineNr"> 8029 </span> 0/imm32/outputs -<span id="L8030" class="LineNr"> 8030 </span> <span class="Constant">"0f 85/jump-if-!="</span>/imm32/subx-name -<span id="L8031" class="LineNr"> 8031 </span> 0/imm32/no-rm32 -<span id="L8032" class="LineNr"> 8032 </span> 0/imm32/no-r32 -<span id="L8033" class="LineNr"> 8033 </span> 0/imm32/no-imm32 -<span id="L8034" class="LineNr"> 8034 </span> 1/imm32/disp32-is-first-inout -<span id="L8035" class="LineNr"> 8035 </span> 0/imm32/no-output -<span id="L8036" class="LineNr"> 8036 </span> <a href='mu.subx.html#L8037'>_Primitive-break-if-addr<=-named</a>/imm32/next -<span id="L8037" class="LineNr"> 8037 </span><span class="subxMinorFunction">_Primitive-break-if-addr<=-named</span>: -<span id="L8038" class="LineNr"> 8038 </span> <span class="Constant">"break-if-addr<="</span>/imm32/name -<span id="L8039" class="LineNr"> 8039 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L8040" class="LineNr"> 8040 </span> 0/imm32/outputs -<span id="L8041" class="LineNr"> 8041 </span> <span class="Constant">"0f 86/jump-if-addr<="</span>/imm32/subx-name -<span id="L8042" class="LineNr"> 8042 </span> 0/imm32/no-rm32 -<span id="L8043" class="LineNr"> 8043 </span> 0/imm32/no-r32 -<span id="L8044" class="LineNr"> 8044 </span> 0/imm32/no-imm32 -<span id="L8045" class="LineNr"> 8045 </span> 1/imm32/disp32-is-first-inout -<span id="L8046" class="LineNr"> 8046 </span> 0/imm32/no-output -<span id="L8047" class="LineNr"> 8047 </span> <a href='mu.subx.html#L8048'>_Primitive-break-if-addr>-named</a>/imm32/next -<span id="L8048" class="LineNr"> 8048 </span><span class="subxMinorFunction">_Primitive-break-if-addr>-named</span>: -<span id="L8049" class="LineNr"> 8049 </span> <span class="Constant">"break-if-addr>"</span>/imm32/name -<span id="L8050" class="LineNr"> 8050 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L8051" class="LineNr"> 8051 </span> 0/imm32/outputs -<span id="L8052" class="LineNr"> 8052 </span> <span class="Constant">"0f 87/jump-if-addr>"</span>/imm32/subx-name -<span id="L8053" class="LineNr"> 8053 </span> 0/imm32/no-rm32 -<span id="L8054" class="LineNr"> 8054 </span> 0/imm32/no-r32 -<span id="L8055" class="LineNr"> 8055 </span> 0/imm32/no-imm32 -<span id="L8056" class="LineNr"> 8056 </span> 1/imm32/disp32-is-first-inout -<span id="L8057" class="LineNr"> 8057 </span> 0/imm32/no-output -<span id="L8058" class="LineNr"> 8058 </span> <a href='mu.subx.html#L8059'>_Primitive-break-if-<-named</a>/imm32/next -<span id="L8059" class="LineNr"> 8059 </span><span class="subxMinorFunction">_Primitive-break-if-<-named</span>: -<span id="L8060" class="LineNr"> 8060 </span> <span class="Constant">"break-if-<"</span>/imm32/name -<span id="L8061" class="LineNr"> 8061 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L8062" class="LineNr"> 8062 </span> 0/imm32/outputs -<span id="L8063" class="LineNr"> 8063 </span> <span class="Constant">"0f 8c/jump-if-<"</span>/imm32/subx-name -<span id="L8064" class="LineNr"> 8064 </span> 0/imm32/no-rm32 -<span id="L8065" class="LineNr"> 8065 </span> 0/imm32/no-r32 -<span id="L8066" class="LineNr"> 8066 </span> 0/imm32/no-imm32 -<span id="L8067" class="LineNr"> 8067 </span> 1/imm32/disp32-is-first-inout -<span id="L8068" class="LineNr"> 8068 </span> 0/imm32/no-output -<span id="L8069" class="LineNr"> 8069 </span> <a href='mu.subx.html#L8070'>_Primitive-break-if->=-named</a>/imm32/next -<span id="L8070" class="LineNr"> 8070 </span><span class="subxMinorFunction">_Primitive-break-if->=-named</span>: -<span id="L8071" class="LineNr"> 8071 </span> <span class="Constant">"break-if->="</span>/imm32/name -<span id="L8072" class="LineNr"> 8072 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L8073" class="LineNr"> 8073 </span> 0/imm32/outputs -<span id="L8074" class="LineNr"> 8074 </span> <span class="Constant">"0f 8d/jump-if->="</span>/imm32/subx-name -<span id="L8075" class="LineNr"> 8075 </span> 0/imm32/no-rm32 -<span id="L8076" class="LineNr"> 8076 </span> 0/imm32/no-r32 -<span id="L8077" class="LineNr"> 8077 </span> 0/imm32/no-imm32 -<span id="L8078" class="LineNr"> 8078 </span> 1/imm32/disp32-is-first-inout -<span id="L8079" class="LineNr"> 8079 </span> 0/imm32/no-output -<span id="L8080" class="LineNr"> 8080 </span> <a href='mu.subx.html#L8081'>_Primitive-break-if-<=-named</a>/imm32/next -<span id="L8081" class="LineNr"> 8081 </span><span class="subxMinorFunction">_Primitive-break-if-<=-named</span>: -<span id="L8082" class="LineNr"> 8082 </span> <span class="Constant">"break-if-<="</span>/imm32/name -<span id="L8083" class="LineNr"> 8083 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L8084" class="LineNr"> 8084 </span> 0/imm32/outputs -<span id="L8085" class="LineNr"> 8085 </span> <span class="Constant">"0f 8e/jump-if-<="</span>/imm32/subx-name -<span id="L8086" class="LineNr"> 8086 </span> 0/imm32/no-rm32 -<span id="L8087" class="LineNr"> 8087 </span> 0/imm32/no-r32 -<span id="L8088" class="LineNr"> 8088 </span> 0/imm32/no-imm32 -<span id="L8089" class="LineNr"> 8089 </span> 1/imm32/disp32-is-first-inout -<span id="L8090" class="LineNr"> 8090 </span> 0/imm32/no-output -<span id="L8091" class="LineNr"> 8091 </span> <a href='mu.subx.html#L8092'>_Primitive-break-if->-named</a>/imm32/next -<span id="L8092" class="LineNr"> 8092 </span><span class="subxMinorFunction">_Primitive-break-if->-named</span>: -<span id="L8093" class="LineNr"> 8093 </span> <span class="Constant">"break-if->"</span>/imm32/name -<span id="L8094" class="LineNr"> 8094 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L8095" class="LineNr"> 8095 </span> 0/imm32/outputs -<span id="L8096" class="LineNr"> 8096 </span> <span class="Constant">"0f 8f/jump-if->"</span>/imm32/subx-name -<span id="L8097" class="LineNr"> 8097 </span> 0/imm32/no-rm32 -<span id="L8098" class="LineNr"> 8098 </span> 0/imm32/no-r32 -<span id="L8099" class="LineNr"> 8099 </span> 0/imm32/no-imm32 -<span id="L8100" class="LineNr"> 8100 </span> 1/imm32/disp32-is-first-inout -<span id="L8101" class="LineNr"> 8101 </span> 0/imm32/no-output -<span id="L8102" class="LineNr"> 8102 </span> <a href='mu.subx.html#L8103'>_Primitive-break-named</a>/imm32/next -<span id="L8103" class="LineNr"> 8103 </span><span class="subxMinorFunction">_Primitive-break-named</span>: -<span id="L8104" class="LineNr"> 8104 </span> <span class="Constant">"break"</span>/imm32/name -<span id="L8105" class="LineNr"> 8105 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L8106" class="LineNr"> 8106 </span> 0/imm32/outputs -<span id="L8107" class="LineNr"> 8107 </span> <span class="Constant">"e9/jump"</span>/imm32/subx-name -<span id="L8108" class="LineNr"> 8108 </span> 0/imm32/no-rm32 -<span id="L8109" class="LineNr"> 8109 </span> 0/imm32/no-r32 -<span id="L8110" class="LineNr"> 8110 </span> 0/imm32/no-imm32 -<span id="L8111" class="LineNr"> 8111 </span> 1/imm32/disp32-is-first-inout -<span id="L8112" class="LineNr"> 8112 </span> 0/imm32/no-output -<span id="L8113" class="LineNr"> 8113 </span> <a href='mu.subx.html#L8114'>_Primitive-loop-if-addr<-named</a>/imm32/next -<span id="L8114" class="LineNr"> 8114 </span><span class="subxMinorFunction">_Primitive-loop-if-addr<-named</span>: -<span id="L8115" class="LineNr"> 8115 </span> <span class="Constant">"loop-if-addr<"</span>/imm32/name -<span id="L8116" class="LineNr"> 8116 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L8117" class="LineNr"> 8117 </span> 0/imm32/outputs -<span id="L8118" class="LineNr"> 8118 </span> <span class="Constant">"0f 82/jump-if-addr<"</span>/imm32/subx-name -<span id="L8119" class="LineNr"> 8119 </span> 0/imm32/no-rm32 -<span id="L8120" class="LineNr"> 8120 </span> 0/imm32/no-r32 -<span id="L8121" class="LineNr"> 8121 </span> 0/imm32/no-imm32 -<span id="L8122" class="LineNr"> 8122 </span> 1/imm32/disp32-is-first-inout -<span id="L8123" class="LineNr"> 8123 </span> 0/imm32/no-output -<span id="L8124" class="LineNr"> 8124 </span> <a href='mu.subx.html#L8125'>_Primitive-loop-if-addr>=-named</a>/imm32/next -<span id="L8125" class="LineNr"> 8125 </span><span class="subxMinorFunction">_Primitive-loop-if-addr>=-named</span>: -<span id="L8126" class="LineNr"> 8126 </span> <span class="Constant">"loop-if-addr>="</span>/imm32/name -<span id="L8127" class="LineNr"> 8127 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L8128" class="LineNr"> 8128 </span> 0/imm32/outputs -<span id="L8129" class="LineNr"> 8129 </span> <span class="Constant">"0f 83/jump-if-addr>="</span>/imm32/subx-name -<span id="L8130" class="LineNr"> 8130 </span> 0/imm32/no-rm32 -<span id="L8131" class="LineNr"> 8131 </span> 0/imm32/no-r32 -<span id="L8132" class="LineNr"> 8132 </span> 0/imm32/no-imm32 -<span id="L8133" class="LineNr"> 8133 </span> 1/imm32/disp32-is-first-inout -<span id="L8134" class="LineNr"> 8134 </span> 0/imm32/no-output -<span id="L8135" class="LineNr"> 8135 </span> <a href='mu.subx.html#L8136'>_Primitive-loop-if-=-named</a>/imm32/next -<span id="L8136" class="LineNr"> 8136 </span><span class="subxMinorFunction">_Primitive-loop-if-=-named</span>: -<span id="L8137" class="LineNr"> 8137 </span> <span class="Constant">"loop-if-="</span>/imm32/name -<span id="L8138" class="LineNr"> 8138 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L8139" class="LineNr"> 8139 </span> 0/imm32/outputs -<span id="L8140" class="LineNr"> 8140 </span> <span class="Constant">"0f 84/jump-if-="</span>/imm32/subx-name -<span id="L8141" class="LineNr"> 8141 </span> 0/imm32/no-rm32 -<span id="L8142" class="LineNr"> 8142 </span> 0/imm32/no-r32 -<span id="L8143" class="LineNr"> 8143 </span> 0/imm32/no-imm32 -<span id="L8144" class="LineNr"> 8144 </span> 1/imm32/disp32-is-first-inout -<span id="L8145" class="LineNr"> 8145 </span> 0/imm32/no-output -<span id="L8146" class="LineNr"> 8146 </span> <a href='mu.subx.html#L8147'>_Primitive-loop-if-!=-named</a>/imm32/next -<span id="L8147" class="LineNr"> 8147 </span><span class="subxMinorFunction">_Primitive-loop-if-!=-named</span>: -<span id="L8148" class="LineNr"> 8148 </span> <span class="Constant">"loop-if-!="</span>/imm32/name -<span id="L8149" class="LineNr"> 8149 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L8150" class="LineNr"> 8150 </span> 0/imm32/outputs -<span id="L8151" class="LineNr"> 8151 </span> <span class="Constant">"0f 85/jump-if-!="</span>/imm32/subx-name -<span id="L8152" class="LineNr"> 8152 </span> 0/imm32/no-rm32 -<span id="L8153" class="LineNr"> 8153 </span> 0/imm32/no-r32 -<span id="L8154" class="LineNr"> 8154 </span> 0/imm32/no-imm32 -<span id="L8155" class="LineNr"> 8155 </span> 1/imm32/disp32-is-first-inout -<span id="L8156" class="LineNr"> 8156 </span> 0/imm32/no-output -<span id="L8157" class="LineNr"> 8157 </span> <a href='mu.subx.html#L8158'>_Primitive-loop-if-addr<=-named</a>/imm32/next -<span id="L8158" class="LineNr"> 8158 </span><span class="subxMinorFunction">_Primitive-loop-if-addr<=-named</span>: -<span id="L8159" class="LineNr"> 8159 </span> <span class="Constant">"loop-if-addr<="</span>/imm32/name -<span id="L8160" class="LineNr"> 8160 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L8161" class="LineNr"> 8161 </span> 0/imm32/outputs -<span id="L8162" class="LineNr"> 8162 </span> <span class="Constant">"0f 86/jump-if-addr<="</span>/imm32/subx-name -<span id="L8163" class="LineNr"> 8163 </span> 0/imm32/no-rm32 -<span id="L8164" class="LineNr"> 8164 </span> 0/imm32/no-r32 -<span id="L8165" class="LineNr"> 8165 </span> 0/imm32/no-imm32 -<span id="L8166" class="LineNr"> 8166 </span> 1/imm32/disp32-is-first-inout -<span id="L8167" class="LineNr"> 8167 </span> 0/imm32/no-output -<span id="L8168" class="LineNr"> 8168 </span> <a href='mu.subx.html#L8169'>_Primitive-loop-if-addr>-named</a>/imm32/next -<span id="L8169" class="LineNr"> 8169 </span><span class="subxMinorFunction">_Primitive-loop-if-addr>-named</span>: -<span id="L8170" class="LineNr"> 8170 </span> <span class="Constant">"loop-if-addr>"</span>/imm32/name -<span id="L8171" class="LineNr"> 8171 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L8172" class="LineNr"> 8172 </span> 0/imm32/outputs -<span id="L8173" class="LineNr"> 8173 </span> <span class="Constant">"0f 87/jump-if-addr>"</span>/imm32/subx-name -<span id="L8174" class="LineNr"> 8174 </span> 0/imm32/no-rm32 -<span id="L8175" class="LineNr"> 8175 </span> 0/imm32/no-r32 -<span id="L8176" class="LineNr"> 8176 </span> 0/imm32/no-imm32 -<span id="L8177" class="LineNr"> 8177 </span> 1/imm32/disp32-is-first-inout -<span id="L8178" class="LineNr"> 8178 </span> 0/imm32/no-output -<span id="L8179" class="LineNr"> 8179 </span> <a href='mu.subx.html#L8180'>_Primitive-loop-if-<-named</a>/imm32/next -<span id="L8180" class="LineNr"> 8180 </span><span class="subxMinorFunction">_Primitive-loop-if-<-named</span>: -<span id="L8181" class="LineNr"> 8181 </span> <span class="Constant">"loop-if-<"</span>/imm32/name -<span id="L8182" class="LineNr"> 8182 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L8183" class="LineNr"> 8183 </span> 0/imm32/outputs -<span id="L8184" class="LineNr"> 8184 </span> <span class="Constant">"0f 8c/jump-if-<"</span>/imm32/subx-name -<span id="L8185" class="LineNr"> 8185 </span> 0/imm32/no-rm32 -<span id="L8186" class="LineNr"> 8186 </span> 0/imm32/no-r32 -<span id="L8187" class="LineNr"> 8187 </span> 0/imm32/no-imm32 -<span id="L8188" class="LineNr"> 8188 </span> 1/imm32/disp32-is-first-inout -<span id="L8189" class="LineNr"> 8189 </span> 0/imm32/no-output -<span id="L8190" class="LineNr"> 8190 </span> <a href='mu.subx.html#L8191'>_Primitive-loop-if->=-named</a>/imm32/next -<span id="L8191" class="LineNr"> 8191 </span><span class="subxMinorFunction">_Primitive-loop-if->=-named</span>: -<span id="L8192" class="LineNr"> 8192 </span> <span class="Constant">"loop-if->="</span>/imm32/name -<span id="L8193" class="LineNr"> 8193 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L8194" class="LineNr"> 8194 </span> 0/imm32/outputs -<span id="L8195" class="LineNr"> 8195 </span> <span class="Constant">"0f 8d/jump-if->="</span>/imm32/subx-name -<span id="L8196" class="LineNr"> 8196 </span> 0/imm32/no-rm32 -<span id="L8197" class="LineNr"> 8197 </span> 0/imm32/no-r32 -<span id="L8198" class="LineNr"> 8198 </span> 0/imm32/no-imm32 -<span id="L8199" class="LineNr"> 8199 </span> 1/imm32/disp32-is-first-inout -<span id="L8200" class="LineNr"> 8200 </span> 0/imm32/no-output -<span id="L8201" class="LineNr"> 8201 </span> <a href='mu.subx.html#L8202'>_Primitive-loop-if-<=-named</a>/imm32/next -<span id="L8202" class="LineNr"> 8202 </span><span class="subxMinorFunction">_Primitive-loop-if-<=-named</span>: -<span id="L8203" class="LineNr"> 8203 </span> <span class="Constant">"loop-if-<="</span>/imm32/name -<span id="L8204" class="LineNr"> 8204 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L8205" class="LineNr"> 8205 </span> 0/imm32/outputs -<span id="L8206" class="LineNr"> 8206 </span> <span class="Constant">"0f 8e/jump-if-<="</span>/imm32/subx-name -<span id="L8207" class="LineNr"> 8207 </span> 0/imm32/no-rm32 -<span id="L8208" class="LineNr"> 8208 </span> 0/imm32/no-r32 -<span id="L8209" class="LineNr"> 8209 </span> 0/imm32/no-imm32 -<span id="L8210" class="LineNr"> 8210 </span> 1/imm32/disp32-is-first-inout -<span id="L8211" class="LineNr"> 8211 </span> 0/imm32/no-output -<span id="L8212" class="LineNr"> 8212 </span> <a href='mu.subx.html#L8213'>_Primitive-loop-if->-named</a>/imm32/next -<span id="L8213" class="LineNr"> 8213 </span><span class="subxMinorFunction">_Primitive-loop-if->-named</span>: -<span id="L8214" class="LineNr"> 8214 </span> <span class="Constant">"loop-if->"</span>/imm32/name -<span id="L8215" class="LineNr"> 8215 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L8216" class="LineNr"> 8216 </span> 0/imm32/outputs -<span id="L8217" class="LineNr"> 8217 </span> <span class="Constant">"0f 8f/jump-if->"</span>/imm32/subx-name -<span id="L8218" class="LineNr"> 8218 </span> 0/imm32/no-rm32 -<span id="L8219" class="LineNr"> 8219 </span> 0/imm32/no-r32 -<span id="L8220" class="LineNr"> 8220 </span> 0/imm32/no-imm32 -<span id="L8221" class="LineNr"> 8221 </span> 1/imm32/disp32-is-first-inout -<span id="L8222" class="LineNr"> 8222 </span> 0/imm32/no-output -<span id="L8223" class="LineNr"> 8223 </span> <a href='mu.subx.html#L8224'>_Primitive-loop-named</a>/imm32/next <span class="subxComment"># we probably don't need an unconditional break</span> -<span id="L8224" class="LineNr"> 8224 </span><span class="subxMinorFunction">_Primitive-loop-named</span>: -<span id="L8225" class="LineNr"> 8225 </span> <span class="Constant">"loop"</span>/imm32/name -<span id="L8226" class="LineNr"> 8226 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/inouts -<span id="L8227" class="LineNr"> 8227 </span> 0/imm32/outputs -<span id="L8228" class="LineNr"> 8228 </span> <span class="Constant">"e9/jump"</span>/imm32/subx-name -<span id="L8229" class="LineNr"> 8229 </span> 0/imm32/no-rm32 -<span id="L8230" class="LineNr"> 8230 </span> 0/imm32/no-r32 -<span id="L8231" class="LineNr"> 8231 </span> 0/imm32/no-imm32 -<span id="L8232" class="LineNr"> 8232 </span> 1/imm32/disp32-is-first-inout -<span id="L8233" class="LineNr"> 8233 </span> 0/imm32/no-output +<span id="L6872" class="LineNr"> 6872 </span> 0f 94/set-if-= %eax +<span id="L6873" class="LineNr"> 6873 </span> 81 4/subop/and %eax 0xff/imm32 +<span id="L6874" class="LineNr"> 6874 </span><span class="Constant">$power-of-2?:end</span>: +<span id="L6875" class="LineNr"> 6875 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L6876" class="LineNr"> 6876 </span> 89/<- %esp 5/r32/ebp +<span id="L6877" class="LineNr"> 6877 </span> 5d/pop-to-ebp +<span id="L6878" class="LineNr"> 6878 </span> c3/return +<span id="L6879" class="LineNr"> 6879 </span> +<span id="L6880" class="LineNr"> 6880 </span><span class="subxFunction">num-shift-rights</span>: <span class="subxComment"># n: int -> result/eax: int</span> +<span id="L6881" class="LineNr"> 6881 </span> <span class="subxComment"># precondition: n is a positive power of 2</span> +<span id="L6882" class="LineNr"> 6882 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L6883" class="LineNr"> 6883 </span> 55/push-ebp +<span id="L6884" class="LineNr"> 6884 </span> 89/<- %ebp 4/r32/esp +<span id="L6885" class="LineNr"> 6885 </span> <span class="subxS1Comment"># . save registers</span> +<span id="L6886" class="LineNr"> 6886 </span> 51/push-ecx +<span id="L6887" class="LineNr"> 6887 </span> <span class="subxComment"># var curr/ecx: int = n</span> +<span id="L6888" class="LineNr"> 6888 </span> 8b/-> *(ebp+8) 1/r32/ecx +<span id="L6889" class="LineNr"> 6889 </span> <span class="subxComment"># result = 0</span> +<span id="L6890" class="LineNr"> 6890 </span> b8/copy-to-eax 0/imm32 +<span id="L6891" class="LineNr"> 6891 </span> { +<span id="L6892" class="LineNr"> 6892 </span> <span class="subxComment"># if (curr <= 1) break</span> +<span id="L6893" class="LineNr"> 6893 </span> 81 7/subop/compare %ecx 1/imm32 +<span id="L6894" class="LineNr"> 6894 </span> 7e/jump-if-<= <span class="Constant">break</span>/disp8 +<span id="L6895" class="LineNr"> 6895 </span> 40/increment-eax +<span id="L6896" class="LineNr"> 6896 </span> c1/shift 5/subop/arithmetic-right %ecx 1/imm8 +<span id="L6897" class="LineNr"> 6897 </span> eb/jump <span class="Constant">loop</span>/disp8 +<span id="L6898" class="LineNr"> 6898 </span> } +<span id="L6899" class="LineNr"> 6899 </span><span class="Constant">$num-shift-rights:end</span>: +<span id="L6900" class="LineNr"> 6900 </span> <span class="subxS1Comment"># . restore registers</span> +<span id="L6901" class="LineNr"> 6901 </span> 59/pop-to-ecx +<span id="L6902" class="LineNr"> 6902 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L6903" class="LineNr"> 6903 </span> 89/<- %esp 5/r32/ebp +<span id="L6904" class="LineNr"> 6904 </span> 5d/pop-to-ebp +<span id="L6905" class="LineNr"> 6905 </span> c3/return +<span id="L6906" class="LineNr"> 6906 </span> +<span id="L6907" class="LineNr"> 6907 </span><span class="subxFunction">print-mu-get-offset</span>: <span class="subxComment"># out: (addr buffered-file), stmt: (handle stmt)</span> +<span id="L6908" class="LineNr"> 6908 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L6909" class="LineNr"> 6909 </span> 55/push-ebp +<span id="L6910" class="LineNr"> 6910 </span> 89/<- %ebp 4/r32/esp +<span id="L6911" class="LineNr"> 6911 </span> <span class="subxS1Comment"># . save registers</span> +<span id="L6912" class="LineNr"> 6912 </span> 50/push-eax +<span id="L6913" class="LineNr"> 6913 </span> <span class="subxComment"># var second-inout/eax: (handle stmt-var) = stmt->inouts->next</span> +<span id="L6914" class="LineNr"> 6914 </span> 8b/-> *(ebp+0xc) 0/r32/eax +<span id="L6915" class="LineNr"> 6915 </span> 8b/-> *(eax+8) 0/r32/eax <span class="subxComment"># Stmt1-inouts</span> +<span id="L6916" class="LineNr"> 6916 </span> 8b/-> *(eax+4) 0/r32/eax <span class="subxComment"># Stmt-var-next</span> +<span id="L6917" class="LineNr"> 6917 </span> <span class="subxComment"># var output-var/eax: (handle var) = second-inout->value</span> +<span id="L6918" class="LineNr"> 6918 </span> 8b/-> *eax 0/r32/eax <span class="subxComment"># Stmt-var-value</span> +<span id="L6919" class="LineNr"> 6919 </span> <span class="subxComment"># print offset</span> +<span id="L6920" class="LineNr"> 6920 </span><span class="CommentedCode">#? (write-buffered Stderr "emitting offset from output var ")</span> +<span id="L6921" class="LineNr"> 6921 </span><span class="CommentedCode">#? (print-int32-buffered Stderr %eax)</span> +<span id="L6922" class="LineNr"> 6922 </span><span class="CommentedCode">#? (write-buffered Stderr Newline)</span> +<span id="L6923" class="LineNr"> 6923 </span><span class="CommentedCode">#? (flush Stderr)</span> +<span id="L6924" class="LineNr"> 6924 </span> (<a href='../066print-int.subx.html#L266'>print-int32-buffered</a> *(ebp+8) *(eax+0xc)) <span class="subxComment"># Var-offset</span> +<span id="L6925" class="LineNr"> 6925 </span><span class="Constant">$emit-get-offset:end</span>: +<span id="L6926" class="LineNr"> 6926 </span> <span class="subxS1Comment"># . restore registers</span> +<span id="L6927" class="LineNr"> 6927 </span> 58/pop-to-eax +<span id="L6928" class="LineNr"> 6928 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L6929" class="LineNr"> 6929 </span> 89/<- %esp 5/r32/ebp +<span id="L6930" class="LineNr"> 6930 </span> 5d/pop-to-ebp +<span id="L6931" class="LineNr"> 6931 </span> c3/return +<span id="L6932" class="LineNr"> 6932 </span> +<span id="L6933" class="LineNr"> 6933 </span><span class="subxFunction">emit-subx-block</span>: <span class="subxComment"># out: (addr buffered-file), block: (handle block), vars: (addr stack (handle var))</span> +<span id="L6934" class="LineNr"> 6934 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L6935" class="LineNr"> 6935 </span> 55/push-ebp +<span id="L6936" class="LineNr"> 6936 </span> 89/<- %ebp 4/r32/esp +<span id="L6937" class="LineNr"> 6937 </span> <span class="subxS1Comment"># . save registers</span> +<span id="L6938" class="LineNr"> 6938 </span> 50/push-eax +<span id="L6939" class="LineNr"> 6939 </span> 51/push-ecx +<span id="L6940" class="LineNr"> 6940 </span> 56/push-esi +<span id="L6941" class="LineNr"> 6941 </span> <span class="subxComment"># esi = block</span> +<span id="L6942" class="LineNr"> 6942 </span> 8b/-> *(ebp+0xc) 6/r32/esi +<span id="L6943" class="LineNr"> 6943 </span> <span class="subxComment"># var stmts/eax: (handle list stmt) = block->statements</span> +<span id="L6944" class="LineNr"> 6944 </span> 8b/-> *(esi+4) 0/r32/eax <span class="subxComment"># Block-stmts</span> +<span id="L6945" class="LineNr"> 6945 </span> <span class="subxComment">#</span> +<span id="L6946" class="LineNr"> 6946 </span> { +<span id="L6947" class="LineNr"> 6947 </span><span class="Constant">$emit-subx-block:check-empty</span>: +<span id="L6948" class="LineNr"> 6948 </span> 3d/compare-eax-and 0/imm32 +<span id="L6949" class="LineNr"> 6949 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32 +<span id="L6950" class="LineNr"> 6950 </span> (<a href='mu.subx.html#L10434'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) +<span id="L6951" class="LineNr"> 6951 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"{\n"</span>) +<span id="L6952" class="LineNr"> 6952 </span> <span class="subxComment"># var v/ecx: (addr array byte) = block->var->name</span> +<span id="L6953" class="LineNr"> 6953 </span> 8b/-> *(esi+8) 1/r32/ecx <span class="subxComment"># Block-var</span> +<span id="L6954" class="LineNr"> 6954 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *ecx) <span class="subxComment"># Var-name</span> +<span id="L6955" class="LineNr"> 6955 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">":loop:\n"</span>) +<span id="L6956" class="LineNr"> 6956 </span> ff 0/subop/increment *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> +<span id="L6957" class="LineNr"> 6957 </span> (<a href='../092stack.subx.html#L110'>push</a> *(ebp+0x10) %ecx) +<span id="L6958" class="LineNr"> 6958 </span> (<a href='mu.subx.html#L5867'>emit-subx-stmt-list</a> *(ebp+8) %eax *(ebp+0x10)) +<span id="L6959" class="LineNr"> 6959 </span> (<a href='../092stack.subx.html#L230'>pop</a> *(ebp+0x10)) <span class="subxComment"># => eax</span> +<span id="L6960" class="LineNr"> 6960 </span> ff 1/subop/decrement *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> +<span id="L6961" class="LineNr"> 6961 </span> (<a href='mu.subx.html#L10434'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) +<span id="L6962" class="LineNr"> 6962 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"}\n"</span>) +<span id="L6963" class="LineNr"> 6963 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *ecx) <span class="subxComment"># Var-name</span> +<span id="L6964" class="LineNr"> 6964 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">":break:\n"</span>) +<span id="L6965" class="LineNr"> 6965 </span> } +<span id="L6966" class="LineNr"> 6966 </span><span class="Constant">$emit-subx-block:end</span>: +<span id="L6967" class="LineNr"> 6967 </span> <span class="subxS1Comment"># . restore registers</span> +<span id="L6968" class="LineNr"> 6968 </span> 5e/pop-to-esi +<span id="L6969" class="LineNr"> 6969 </span> 59/pop-to-ecx +<span id="L6970" class="LineNr"> 6970 </span> 58/pop-to-eax +<span id="L6971" class="LineNr"> 6971 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L6972" class="LineNr"> 6972 </span> 89/<- %esp 5/r32/ebp +<span id="L6973" class="LineNr"> 6973 </span> 5d/pop-to-ebp +<span id="L6974" class="LineNr"> 6974 </span> c3/return +<span id="L6975" class="LineNr"> 6975 </span> +<span id="L6976" class="LineNr"> 6976 </span><span class="subxComment"># Primitives supported</span> +<span id="L6977" class="LineNr"> 6977 </span><span class="subxComment"># For each operation, put variants with hard-coded registers before flexible ones.</span> +<span id="L6978" class="LineNr"> 6978 </span>== data +<span id="L6979" class="LineNr"> 6979 </span><span class="SpecialChar">Primitives</span>: +<span id="L6980" class="LineNr"> 6980 </span><span class="subxH1Comment"># - increment/decrement</span> +<span id="L6981" class="LineNr"> 6981 </span><span class="subxMinorFunction">_Primitive-inc-eax</span>: +<span id="L6982" class="LineNr"> 6982 </span> <span class="subxComment"># var/eax <- increment => 40/increment-eax</span> +<span id="L6983" class="LineNr"> 6983 </span> <span class="Constant">"increment"</span>/imm32/name +<span id="L6984" class="LineNr"> 6984 </span> 0/imm32/no-inouts +<span id="L6985" class="LineNr"> 6985 </span> <span class="SpecialChar"><a href='mu.subx.html#L8274'>Single-int-var-in-eax</a></span>/imm32/outputs +<span id="L6986" class="LineNr"> 6986 </span> <span class="Constant">"40/increment-eax"</span>/imm32/subx-name +<span id="L6987" class="LineNr"> 6987 </span> 0/imm32/no-rm32 +<span id="L6988" class="LineNr"> 6988 </span> 0/imm32/no-r32 +<span id="L6989" class="LineNr"> 6989 </span> 0/imm32/no-imm32 +<span id="L6990" class="LineNr"> 6990 </span> 0/imm32/no-disp32 +<span id="L6991" class="LineNr"> 6991 </span> 0/imm32/output-is-write-only +<span id="L6992" class="LineNr"> 6992 </span> <a href='mu.subx.html#L6993'>_Primitive-inc-ecx</a>/imm32/next +<span id="L6993" class="LineNr"> 6993 </span><span class="subxMinorFunction">_Primitive-inc-ecx</span>: +<span id="L6994" class="LineNr"> 6994 </span> <span class="subxComment"># var/ecx <- increment => 41/increment-ecx</span> +<span id="L6995" class="LineNr"> 6995 </span> <span class="Constant">"increment"</span>/imm32/name +<span id="L6996" class="LineNr"> 6996 </span> 0/imm32/no-inouts +<span id="L6997" class="LineNr"> 6997 </span> <span class="SpecialChar"><a href='mu.subx.html#L8285'>Single-int-var-in-ecx</a></span>/imm32/outputs +<span id="L6998" class="LineNr"> 6998 </span> <span class="Constant">"41/increment-ecx"</span>/imm32/subx-name +<span id="L6999" class="LineNr"> 6999 </span> 0/imm32/no-rm32 +<span id="L7000" class="LineNr"> 7000 </span> 0/imm32/no-r32 +<span id="L7001" class="LineNr"> 7001 </span> 0/imm32/no-imm32 +<span id="L7002" class="LineNr"> 7002 </span> 0/imm32/no-disp32 +<span id="L7003" class="LineNr"> 7003 </span> 0/imm32/output-is-write-only +<span id="L7004" class="LineNr"> 7004 </span> <a href='mu.subx.html#L7005'>_Primitive-inc-edx</a>/imm32/next +<span id="L7005" class="LineNr"> 7005 </span><span class="subxMinorFunction">_Primitive-inc-edx</span>: +<span id="L7006" class="LineNr"> 7006 </span> <span class="subxComment"># var/edx <- increment => 42/increment-edx</span> +<span id="L7007" class="LineNr"> 7007 </span> <span class="Constant">"increment"</span>/imm32/name +<span id="L7008" class="LineNr"> 7008 </span> 0/imm32/no-inouts +<span id="L7009" class="LineNr"> 7009 </span> <span class="SpecialChar"><a href='mu.subx.html#L8296'>Single-int-var-in-edx</a></span>/imm32/outputs +<span id="L7010" class="LineNr"> 7010 </span> <span class="Constant">"42/increment-edx"</span>/imm32/subx-name +<span id="L7011" class="LineNr"> 7011 </span> 0/imm32/no-rm32 +<span id="L7012" class="LineNr"> 7012 </span> 0/imm32/no-r32 +<span id="L7013" class="LineNr"> 7013 </span> 0/imm32/no-imm32 +<span id="L7014" class="LineNr"> 7014 </span> 0/imm32/no-disp32 +<span id="L7015" class="LineNr"> 7015 </span> 0/imm32/output-is-write-only +<span id="L7016" class="LineNr"> 7016 </span> <a href='mu.subx.html#L7017'>_Primitive-inc-ebx</a>/imm32/next +<span id="L7017" class="LineNr"> 7017 </span><span class="subxMinorFunction">_Primitive-inc-ebx</span>: +<span id="L7018" class="LineNr"> 7018 </span> <span class="subxComment"># var/ebx <- increment => 43/increment-ebx</span> +<span id="L7019" class="LineNr"> 7019 </span> <span class="Constant">"increment"</span>/imm32/name +<span id="L7020" class="LineNr"> 7020 </span> 0/imm32/no-inouts +<span id="L7021" class="LineNr"> 7021 </span> <span class="SpecialChar"><a href='mu.subx.html#L8307'>Single-int-var-in-ebx</a></span>/imm32/outputs +<span id="L7022" class="LineNr"> 7022 </span> <span class="Constant">"43/increment-ebx"</span>/imm32/subx-name +<span id="L7023" class="LineNr"> 7023 </span> 0/imm32/no-rm32 +<span id="L7024" class="LineNr"> 7024 </span> 0/imm32/no-r32 +<span id="L7025" class="LineNr"> 7025 </span> 0/imm32/no-imm32 +<span id="L7026" class="LineNr"> 7026 </span> 0/imm32/no-disp32 +<span id="L7027" class="LineNr"> 7027 </span> 0/imm32/output-is-write-only +<span id="L7028" class="LineNr"> 7028 </span> <a href='mu.subx.html#L7029'>_Primitive-inc-esi</a>/imm32/next +<span id="L7029" class="LineNr"> 7029 </span><span class="subxMinorFunction">_Primitive-inc-esi</span>: +<span id="L7030" class="LineNr"> 7030 </span> <span class="subxComment"># var/esi <- increment => 46/increment-esi</span> +<span id="L7031" class="LineNr"> 7031 </span> <span class="Constant">"increment"</span>/imm32/name +<span id="L7032" class="LineNr"> 7032 </span> 0/imm32/no-inouts +<span id="L7033" class="LineNr"> 7033 </span> <span class="SpecialChar"><a href='mu.subx.html#L8318'>Single-int-var-in-esi</a></span>/imm32/outputs +<span id="L7034" class="LineNr"> 7034 </span> <span class="Constant">"46/increment-esi"</span>/imm32/subx-name +<span id="L7035" class="LineNr"> 7035 </span> 0/imm32/no-rm32 +<span id="L7036" class="LineNr"> 7036 </span> 0/imm32/no-r32 +<span id="L7037" class="LineNr"> 7037 </span> 0/imm32/no-imm32 +<span id="L7038" class="LineNr"> 7038 </span> 0/imm32/no-disp32 +<span id="L7039" class="LineNr"> 7039 </span> 0/imm32/output-is-write-only +<span id="L7040" class="LineNr"> 7040 </span> <a href='mu.subx.html#L7041'>_Primitive-inc-edi</a>/imm32/next +<span id="L7041" class="LineNr"> 7041 </span><span class="subxMinorFunction">_Primitive-inc-edi</span>: +<span id="L7042" class="LineNr"> 7042 </span> <span class="subxComment"># var/edi <- increment => 47/increment-edi</span> +<span id="L7043" class="LineNr"> 7043 </span> <span class="Constant">"increment"</span>/imm32/name +<span id="L7044" class="LineNr"> 7044 </span> 0/imm32/no-inouts +<span id="L7045" class="LineNr"> 7045 </span> <span class="SpecialChar"><a href='mu.subx.html#L8329'>Single-int-var-in-edi</a></span>/imm32/outputs +<span id="L7046" class="LineNr"> 7046 </span> <span class="Constant">"47/increment-edi"</span>/imm32/subx-name +<span id="L7047" class="LineNr"> 7047 </span> 0/imm32/no-rm32 +<span id="L7048" class="LineNr"> 7048 </span> 0/imm32/no-r32 +<span id="L7049" class="LineNr"> 7049 </span> 0/imm32/no-imm32 +<span id="L7050" class="LineNr"> 7050 </span> 0/imm32/no-disp32 +<span id="L7051" class="LineNr"> 7051 </span> 0/imm32/output-is-write-only +<span id="L7052" class="LineNr"> 7052 </span> <a href='mu.subx.html#L7053'>_Primitive-dec-eax</a>/imm32/next +<span id="L7053" class="LineNr"> 7053 </span><span class="subxMinorFunction">_Primitive-dec-eax</span>: +<span id="L7054" class="LineNr"> 7054 </span> <span class="subxComment"># var/eax <- decrement => 48/decrement-eax</span> +<span id="L7055" class="LineNr"> 7055 </span> <span class="Constant">"decrement"</span>/imm32/name +<span id="L7056" class="LineNr"> 7056 </span> 0/imm32/no-inouts +<span id="L7057" class="LineNr"> 7057 </span> <span class="SpecialChar"><a href='mu.subx.html#L8274'>Single-int-var-in-eax</a></span>/imm32/outputs +<span id="L7058" class="LineNr"> 7058 </span> <span class="Constant">"48/decrement-eax"</span>/imm32/subx-name +<span id="L7059" class="LineNr"> 7059 </span> 0/imm32/no-rm32 +<span id="L7060" class="LineNr"> 7060 </span> 0/imm32/no-r32 +<span id="L7061" class="LineNr"> 7061 </span> 0/imm32/no-imm32 +<span id="L7062" class="LineNr"> 7062 </span> 0/imm32/no-disp32 +<span id="L7063" class="LineNr"> 7063 </span> 0/imm32/output-is-write-only +<span id="L7064" class="LineNr"> 7064 </span> <a href='mu.subx.html#L7065'>_Primitive-dec-ecx</a>/imm32/next +<span id="L7065" class="LineNr"> 7065 </span><span class="subxMinorFunction">_Primitive-dec-ecx</span>: +<span id="L7066" class="LineNr"> 7066 </span> <span class="subxComment"># var/ecx <- decrement => 49/decrement-ecx</span> +<span id="L7067" class="LineNr"> 7067 </span> <span class="Constant">"decrement"</span>/imm32/name +<span id="L7068" class="LineNr"> 7068 </span> 0/imm32/no-inouts +<span id="L7069" class="LineNr"> 7069 </span> <span class="SpecialChar"><a href='mu.subx.html#L8285'>Single-int-var-in-ecx</a></span>/imm32/outputs +<span id="L7070" class="LineNr"> 7070 </span> <span class="Constant">"49/decrement-ecx"</span>/imm32/subx-name +<span id="L7071" class="LineNr"> 7071 </span> 0/imm32/no-rm32 +<span id="L7072" class="LineNr"> 7072 </span> 0/imm32/no-r32 +<span id="L7073" class="LineNr"> 7073 </span> 0/imm32/no-imm32 +<span id="L7074" class="LineNr"> 7074 </span> 0/imm32/no-disp32 +<span id="L7075" class="LineNr"> 7075 </span> 0/imm32/output-is-write-only +<span id="L7076" class="LineNr"> 7076 </span> <a href='mu.subx.html#L7077'>_Primitive-dec-edx</a>/imm32/next +<span id="L7077" class="LineNr"> 7077 </span><span class="subxMinorFunction">_Primitive-dec-edx</span>: +<span id="L7078" class="LineNr"> 7078 </span> <span class="subxComment"># var/edx <- decrement => 4a/decrement-edx</span> +<span id="L7079" class="LineNr"> 7079 </span> <span class="Constant">"decrement"</span>/imm32/name +<span id="L7080" class="LineNr"> 7080 </span> 0/imm32/no-inouts +<span id="L7081" class="LineNr"> 7081 </span> <span class="SpecialChar"><a href='mu.subx.html#L8296'>Single-int-var-in-edx</a></span>/imm32/outputs +<span id="L7082" class="LineNr"> 7082 </span> <span class="Constant">"4a/decrement-edx"</span>/imm32/subx-name +<span id="L7083" class="LineNr"> 7083 </span> 0/imm32/no-rm32 +<span id="L7084" class="LineNr"> 7084 </span> 0/imm32/no-r32 +<span id="L7085" class="LineNr"> 7085 </span> 0/imm32/no-imm32 +<span id="L7086" class="LineNr"> 7086 </span> 0/imm32/no-disp32 +<span id="L7087" class="LineNr"> 7087 </span> 0/imm32/output-is-write-only +<span id="L7088" class="LineNr"> 7088 </span> <a href='mu.subx.html#L7089'>_Primitive-dec-ebx</a>/imm32/next +<span id="L7089" class="LineNr"> 7089 </span><span class="subxMinorFunction">_Primitive-dec-ebx</span>: +<span id="L7090" class="LineNr"> 7090 </span> <span class="subxComment"># var/ebx <- decrement => 4b/decrement-ebx</span> +<span id="L7091" class="LineNr"> 7091 </span> <span class="Constant">"decrement"</span>/imm32/name +<span id="L7092" class="LineNr"> 7092 </span> 0/imm32/no-inouts +<span id="L7093" class="LineNr"> 7093 </span> <span class="SpecialChar"><a href='mu.subx.html#L8307'>Single-int-var-in-ebx</a></span>/imm32/outputs +<span id="L7094" class="LineNr"> 7094 </span> <span class="Constant">"4b/decrement-ebx"</span>/imm32/subx-name +<span id="L7095" class="LineNr"> 7095 </span> 0/imm32/no-rm32 +<span id="L7096" class="LineNr"> 7096 </span> 0/imm32/no-r32 +<span id="L7097" class="LineNr"> 7097 </span> 0/imm32/no-imm32 +<span id="L7098" class="LineNr"> 7098 </span> 0/imm32/no-disp32 +<span id="L7099" class="LineNr"> 7099 </span> 0/imm32/output-is-write-only +<span id="L7100" class="LineNr"> 7100 </span> <a href='mu.subx.html#L7101'>_Primitive-dec-esi</a>/imm32/next +<span id="L7101" class="LineNr"> 7101 </span><span class="subxMinorFunction">_Primitive-dec-esi</span>: +<span id="L7102" class="LineNr"> 7102 </span> <span class="subxComment"># var/esi <- decrement => 4e/decrement-esi</span> +<span id="L7103" class="LineNr"> 7103 </span> <span class="Constant">"decrement"</span>/imm32/name +<span id="L7104" class="LineNr"> 7104 </span> 0/imm32/no-inouts +<span id="L7105" class="LineNr"> 7105 </span> <span class="SpecialChar"><a href='mu.subx.html#L8318'>Single-int-var-in-esi</a></span>/imm32/outputs +<span id="L7106" class="LineNr"> 7106 </span> <span class="Constant">"4e/decrement-esi"</span>/imm32/subx-name +<span id="L7107" class="LineNr"> 7107 </span> 0/imm32/no-rm32 +<span id="L7108" class="LineNr"> 7108 </span> 0/imm32/no-r32 +<span id="L7109" class="LineNr"> 7109 </span> 0/imm32/no-imm32 +<span id="L7110" class="LineNr"> 7110 </span> 0/imm32/no-disp32 +<span id="L7111" class="LineNr"> 7111 </span> 0/imm32/output-is-write-only +<span id="L7112" class="LineNr"> 7112 </span> <a href='mu.subx.html#L7113'>_Primitive-dec-edi</a>/imm32/next +<span id="L7113" class="LineNr"> 7113 </span><span class="subxMinorFunction">_Primitive-dec-edi</span>: +<span id="L7114" class="LineNr"> 7114 </span> <span class="subxComment"># var/edi <- decrement => 4f/decrement-edi</span> +<span id="L7115" class="LineNr"> 7115 </span> <span class="Constant">"decrement"</span>/imm32/name +<span id="L7116" class="LineNr"> 7116 </span> 0/imm32/no-inouts +<span id="L7117" class="LineNr"> 7117 </span> <span class="SpecialChar"><a href='mu.subx.html#L8329'>Single-int-var-in-edi</a></span>/imm32/outputs +<span id="L7118" class="LineNr"> 7118 </span> <span class="Constant">"4f/decrement-edi"</span>/imm32/subx-name +<span id="L7119" class="LineNr"> 7119 </span> 0/imm32/no-rm32 +<span id="L7120" class="LineNr"> 7120 </span> 0/imm32/no-r32 +<span id="L7121" class="LineNr"> 7121 </span> 0/imm32/no-imm32 +<span id="L7122" class="LineNr"> 7122 </span> 0/imm32/no-disp32 +<span id="L7123" class="LineNr"> 7123 </span> 0/imm32/output-is-write-only +<span id="L7124" class="LineNr"> 7124 </span> <a href='mu.subx.html#L7125'>_Primitive-inc-mem</a>/imm32/next +<span id="L7125" class="LineNr"> 7125 </span><span class="subxMinorFunction">_Primitive-inc-mem</span>: +<span id="L7126" class="LineNr"> 7126 </span> <span class="subxComment"># increment var => ff 0/subop/increment *(ebp+__)</span> +<span id="L7127" class="LineNr"> 7127 </span> <span class="Constant">"increment"</span>/imm32/name +<span id="L7128" class="LineNr"> 7128 </span> <span class="SpecialChar"><a href='mu.subx.html#L8232'>Single-int-var-in-mem</a></span>/imm32/inouts +<span id="L7129" class="LineNr"> 7129 </span> 0/imm32/no-outputs +<span id="L7130" class="LineNr"> 7130 </span> <span class="Constant">"ff 0/subop/increment"</span>/imm32/subx-name +<span id="L7131" class="LineNr"> 7131 </span> 1/imm32/rm32-is-first-inout +<span id="L7132" class="LineNr"> 7132 </span> 0/imm32/no-r32 +<span id="L7133" class="LineNr"> 7133 </span> 0/imm32/no-imm32 +<span id="L7134" class="LineNr"> 7134 </span> 0/imm32/no-disp32 +<span id="L7135" class="LineNr"> 7135 </span> 0/imm32/output-is-write-only +<span id="L7136" class="LineNr"> 7136 </span> <a href='mu.subx.html#L7137'>_Primitive-inc-reg</a>/imm32/next +<span id="L7137" class="LineNr"> 7137 </span><span class="subxMinorFunction">_Primitive-inc-reg</span>: +<span id="L7138" class="LineNr"> 7138 </span> <span class="subxComment"># var/reg <- increment => ff 0/subop/increment %__</span> +<span id="L7139" class="LineNr"> 7139 </span> <span class="Constant">"increment"</span>/imm32/name +<span id="L7140" class="LineNr"> 7140 </span> 0/imm32/no-inouts +<span id="L7141" class="LineNr"> 7141 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/outputs +<span id="L7142" class="LineNr"> 7142 </span> <span class="Constant">"ff 0/subop/increment"</span>/imm32/subx-name +<span id="L7143" class="LineNr"> 7143 </span> 3/imm32/rm32-is-first-output +<span id="L7144" class="LineNr"> 7144 </span> 0/imm32/no-r32 +<span id="L7145" class="LineNr"> 7145 </span> 0/imm32/no-imm32 +<span id="L7146" class="LineNr"> 7146 </span> 0/imm32/no-disp32 +<span id="L7147" class="LineNr"> 7147 </span> 0/imm32/output-is-write-only +<span id="L7148" class="LineNr"> 7148 </span> <a href='mu.subx.html#L7149'>_Primitive-dec-mem</a>/imm32/next +<span id="L7149" class="LineNr"> 7149 </span><span class="subxMinorFunction">_Primitive-dec-mem</span>: +<span id="L7150" class="LineNr"> 7150 </span> <span class="subxComment"># decrement var => ff 1/subop/decrement *(ebp+__)</span> +<span id="L7151" class="LineNr"> 7151 </span> <span class="Constant">"decrement"</span>/imm32/name +<span id="L7152" class="LineNr"> 7152 </span> <span class="SpecialChar"><a href='mu.subx.html#L8232'>Single-int-var-in-mem</a></span>/imm32/inouts +<span id="L7153" class="LineNr"> 7153 </span> 0/imm32/no-outputs +<span id="L7154" class="LineNr"> 7154 </span> <span class="Constant">"ff 1/subop/decrement"</span>/imm32/subx-name +<span id="L7155" class="LineNr"> 7155 </span> 1/imm32/rm32-is-first-inout +<span id="L7156" class="LineNr"> 7156 </span> 0/imm32/no-r32 +<span id="L7157" class="LineNr"> 7157 </span> 0/imm32/no-imm32 +<span id="L7158" class="LineNr"> 7158 </span> 0/imm32/no-disp32 +<span id="L7159" class="LineNr"> 7159 </span> 0/imm32/output-is-write-only +<span id="L7160" class="LineNr"> 7160 </span> <a href='mu.subx.html#L7161'>_Primitive-dec-reg</a>/imm32/next +<span id="L7161" class="LineNr"> 7161 </span><span class="subxMinorFunction">_Primitive-dec-reg</span>: +<span id="L7162" class="LineNr"> 7162 </span> <span class="subxComment"># var/reg <- decrement => ff 1/subop/decrement %__</span> +<span id="L7163" class="LineNr"> 7163 </span> <span class="Constant">"decrement"</span>/imm32/name +<span id="L7164" class="LineNr"> 7164 </span> 0/imm32/no-inouts +<span id="L7165" class="LineNr"> 7165 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/outputs +<span id="L7166" class="LineNr"> 7166 </span> <span class="Constant">"ff 1/subop/decrement"</span>/imm32/subx-name +<span id="L7167" class="LineNr"> 7167 </span> 3/imm32/rm32-is-first-output +<span id="L7168" class="LineNr"> 7168 </span> 0/imm32/no-r32 +<span id="L7169" class="LineNr"> 7169 </span> 0/imm32/no-imm32 +<span id="L7170" class="LineNr"> 7170 </span> 0/imm32/no-disp32 +<span id="L7171" class="LineNr"> 7171 </span> 0/imm32/output-is-write-only +<span id="L7172" class="LineNr"> 7172 </span> <a href='mu.subx.html#L7174'>_Primitive-add-to-eax</a>/imm32/next +<span id="L7173" class="LineNr"> 7173 </span><span class="subxH1Comment"># - add</span> +<span id="L7174" class="LineNr"> 7174 </span><span class="subxMinorFunction">_Primitive-add-to-eax</span>: +<span id="L7175" class="LineNr"> 7175 </span> <span class="subxComment"># var/eax <- add lit => 05/add-to-eax lit/imm32</span> +<span id="L7176" class="LineNr"> 7176 </span> <span class="Constant">"add"</span>/imm32/name +<span id="L7177" class="LineNr"> 7177 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L7178" class="LineNr"> 7178 </span> <span class="SpecialChar"><a href='mu.subx.html#L8274'>Single-int-var-in-eax</a></span>/imm32/outputs +<span id="L7179" class="LineNr"> 7179 </span> <span class="Constant">"05/add-to-eax"</span>/imm32/subx-name +<span id="L7180" class="LineNr"> 7180 </span> 0/imm32/no-rm32 +<span id="L7181" class="LineNr"> 7181 </span> 0/imm32/no-r32 +<span id="L7182" class="LineNr"> 7182 </span> 1/imm32/imm32-is-first-inout +<span id="L7183" class="LineNr"> 7183 </span> 0/imm32/no-disp32 +<span id="L7184" class="LineNr"> 7184 </span> 0/imm32/output-is-write-only +<span id="L7185" class="LineNr"> 7185 </span> <a href='mu.subx.html#L7186'>_Primitive-add-reg-to-reg</a>/imm32/next +<span id="L7186" class="LineNr"> 7186 </span><span class="subxMinorFunction">_Primitive-add-reg-to-reg</span>: +<span id="L7187" class="LineNr"> 7187 </span> <span class="subxComment"># var1/reg <- add var2/reg => 01/add-to var1/rm32 var2/r32</span> +<span id="L7188" class="LineNr"> 7188 </span> <span class="Constant">"add"</span>/imm32/name +<span id="L7189" class="LineNr"> 7189 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/inouts +<span id="L7190" class="LineNr"> 7190 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/outputs +<span id="L7191" class="LineNr"> 7191 </span> <span class="Constant">"01/add-to"</span>/imm32/subx-name +<span id="L7192" class="LineNr"> 7192 </span> 3/imm32/rm32-is-first-output +<span id="L7193" class="LineNr"> 7193 </span> 1/imm32/r32-is-first-inout +<span id="L7194" class="LineNr"> 7194 </span> 0/imm32/no-imm32 +<span id="L7195" class="LineNr"> 7195 </span> 0/imm32/no-disp32 +<span id="L7196" class="LineNr"> 7196 </span> 0/imm32/output-is-write-only +<span id="L7197" class="LineNr"> 7197 </span> <a href='mu.subx.html#L7198'>_Primitive-add-reg-to-mem</a>/imm32/next +<span id="L7198" class="LineNr"> 7198 </span><span class="subxMinorFunction">_Primitive-add-reg-to-mem</span>: +<span id="L7199" class="LineNr"> 7199 </span> <span class="subxComment"># add-to var1 var2/reg => 01/add-to var1 var2/r32</span> +<span id="L7200" class="LineNr"> 7200 </span> <span class="Constant">"add-to"</span>/imm32/name +<span id="L7201" class="LineNr"> 7201 </span> <span class="SpecialChar"><a href='mu.subx.html#L8243'>Two-args-int-stack-int-reg</a></span>/imm32/inouts +<span id="L7202" class="LineNr"> 7202 </span> 0/imm32/outputs +<span id="L7203" class="LineNr"> 7203 </span> <span class="Constant">"01/add-to"</span>/imm32/subx-name +<span id="L7204" class="LineNr"> 7204 </span> 1/imm32/rm32-is-first-inout +<span id="L7205" class="LineNr"> 7205 </span> 2/imm32/r32-is-second-inout +<span id="L7206" class="LineNr"> 7206 </span> 0/imm32/no-imm32 +<span id="L7207" class="LineNr"> 7207 </span> 0/imm32/no-disp32 +<span id="L7208" class="LineNr"> 7208 </span> 0/imm32/output-is-write-only +<span id="L7209" class="LineNr"> 7209 </span> <a href='mu.subx.html#L7210'>_Primitive-add-mem-to-reg</a>/imm32/next +<span id="L7210" class="LineNr"> 7210 </span><span class="subxMinorFunction">_Primitive-add-mem-to-reg</span>: +<span id="L7211" class="LineNr"> 7211 </span> <span class="subxComment"># var1/reg <- add var2 => 03/add var2/rm32 var1/r32</span> +<span id="L7212" class="LineNr"> 7212 </span> <span class="Constant">"add"</span>/imm32/name +<span id="L7213" class="LineNr"> 7213 </span> <span class="SpecialChar"><a href='mu.subx.html#L8232'>Single-int-var-in-mem</a></span>/imm32/inouts +<span id="L7214" class="LineNr"> 7214 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/outputs +<span id="L7215" class="LineNr"> 7215 </span> <span class="Constant">"03/add"</span>/imm32/subx-name +<span id="L7216" class="LineNr"> 7216 </span> 1/imm32/rm32-is-first-inout +<span id="L7217" class="LineNr"> 7217 </span> 3/imm32/r32-is-first-output +<span id="L7218" class="LineNr"> 7218 </span> 0/imm32/no-imm32 +<span id="L7219" class="LineNr"> 7219 </span> 0/imm32/no-disp32 +<span id="L7220" class="LineNr"> 7220 </span> 0/imm32/output-is-write-only +<span id="L7221" class="LineNr"> 7221 </span> <a href='mu.subx.html#L7222'>_Primitive-add-lit-to-reg</a>/imm32/next +<span id="L7222" class="LineNr"> 7222 </span><span class="subxMinorFunction">_Primitive-add-lit-to-reg</span>: +<span id="L7223" class="LineNr"> 7223 </span> <span class="subxComment"># var1/reg <- add lit => 81 0/subop/add var1/rm32 lit/imm32</span> +<span id="L7224" class="LineNr"> 7224 </span> <span class="Constant">"add"</span>/imm32/name +<span id="L7225" class="LineNr"> 7225 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L7226" class="LineNr"> 7226 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/outputs +<span id="L7227" class="LineNr"> 7227 </span> <span class="Constant">"81 0/subop/add"</span>/imm32/subx-name +<span id="L7228" class="LineNr"> 7228 </span> 3/imm32/rm32-is-first-output +<span id="L7229" class="LineNr"> 7229 </span> 0/imm32/no-r32 +<span id="L7230" class="LineNr"> 7230 </span> 1/imm32/imm32-is-first-inout +<span id="L7231" class="LineNr"> 7231 </span> 0/imm32/no-disp32 +<span id="L7232" class="LineNr"> 7232 </span> 0/imm32/output-is-write-only +<span id="L7233" class="LineNr"> 7233 </span> <a href='mu.subx.html#L7234'>_Primitive-add-lit-to-mem</a>/imm32/next +<span id="L7234" class="LineNr"> 7234 </span><span class="subxMinorFunction">_Primitive-add-lit-to-mem</span>: +<span id="L7235" class="LineNr"> 7235 </span> <span class="subxComment"># add-to var1, lit => 81 0/subop/add var1/rm32 lit/imm32</span> +<span id="L7236" class="LineNr"> 7236 </span> <span class="Constant">"add-to"</span>/imm32/name +<span id="L7237" class="LineNr"> 7237 </span> <span class="SpecialChar"><a href='mu.subx.html#L8255'>Int-var-and-literal</a></span>/imm32/inouts +<span id="L7238" class="LineNr"> 7238 </span> 0/imm32/outputs +<span id="L7239" class="LineNr"> 7239 </span> <span class="Constant">"81 0/subop/add"</span>/imm32/subx-name +<span id="L7240" class="LineNr"> 7240 </span> 1/imm32/rm32-is-first-inout +<span id="L7241" class="LineNr"> 7241 </span> 0/imm32/no-r32 +<span id="L7242" class="LineNr"> 7242 </span> 2/imm32/imm32-is-second-inout +<span id="L7243" class="LineNr"> 7243 </span> 0/imm32/no-disp32 +<span id="L7244" class="LineNr"> 7244 </span> 0/imm32/output-is-write-only +<span id="L7245" class="LineNr"> 7245 </span> <a href='mu.subx.html#L7247'>_Primitive-subtract-from-eax</a>/imm32/next +<span id="L7246" class="LineNr"> 7246 </span><span class="subxH1Comment"># - subtract</span> +<span id="L7247" class="LineNr"> 7247 </span><span class="subxMinorFunction">_Primitive-subtract-from-eax</span>: +<span id="L7248" class="LineNr"> 7248 </span> <span class="subxComment"># var/eax <- subtract lit => 2d/subtract-from-eax lit/imm32</span> +<span id="L7249" class="LineNr"> 7249 </span> <span class="Constant">"subtract"</span>/imm32/name +<span id="L7250" class="LineNr"> 7250 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L7251" class="LineNr"> 7251 </span> <span class="SpecialChar"><a href='mu.subx.html#L8274'>Single-int-var-in-eax</a></span>/imm32/outputs +<span id="L7252" class="LineNr"> 7252 </span> <span class="Constant">"2d/subtract-from-eax"</span>/imm32/subx-name +<span id="L7253" class="LineNr"> 7253 </span> 0/imm32/no-rm32 +<span id="L7254" class="LineNr"> 7254 </span> 0/imm32/no-r32 +<span id="L7255" class="LineNr"> 7255 </span> 1/imm32/imm32-is-first-inout +<span id="L7256" class="LineNr"> 7256 </span> 0/imm32/no-disp32 +<span id="L7257" class="LineNr"> 7257 </span> 0/imm32/output-is-write-only +<span id="L7258" class="LineNr"> 7258 </span> <a href='mu.subx.html#L7259'>_Primitive-subtract-reg-from-reg</a>/imm32/next +<span id="L7259" class="LineNr"> 7259 </span><span class="subxMinorFunction">_Primitive-subtract-reg-from-reg</span>: +<span id="L7260" class="LineNr"> 7260 </span> <span class="subxComment"># var1/reg <- subtract var2/reg => 29/subtract-from var1/rm32 var2/r32</span> +<span id="L7261" class="LineNr"> 7261 </span> <span class="Constant">"subtract"</span>/imm32/name +<span id="L7262" class="LineNr"> 7262 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/inouts +<span id="L7263" class="LineNr"> 7263 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/outputs +<span id="L7264" class="LineNr"> 7264 </span> <span class="Constant">"29/subtract-from"</span>/imm32/subx-name +<span id="L7265" class="LineNr"> 7265 </span> 3/imm32/rm32-is-first-output +<span id="L7266" class="LineNr"> 7266 </span> 1/imm32/r32-is-first-inout +<span id="L7267" class="LineNr"> 7267 </span> 0/imm32/no-imm32 +<span id="L7268" class="LineNr"> 7268 </span> 0/imm32/no-disp32 +<span id="L7269" class="LineNr"> 7269 </span> 0/imm32/output-is-write-only +<span id="L7270" class="LineNr"> 7270 </span> <a href='mu.subx.html#L7271'>_Primitive-subtract-reg-from-mem</a>/imm32/next +<span id="L7271" class="LineNr"> 7271 </span><span class="subxMinorFunction">_Primitive-subtract-reg-from-mem</span>: +<span id="L7272" class="LineNr"> 7272 </span> <span class="subxComment"># subtract-from var1 var2/reg => 29/subtract-from var1 var2/r32</span> +<span id="L7273" class="LineNr"> 7273 </span> <span class="Constant">"subtract-from"</span>/imm32/name +<span id="L7274" class="LineNr"> 7274 </span> <span class="SpecialChar"><a href='mu.subx.html#L8243'>Two-args-int-stack-int-reg</a></span>/imm32/inouts +<span id="L7275" class="LineNr"> 7275 </span> 0/imm32/outputs +<span id="L7276" class="LineNr"> 7276 </span> <span class="Constant">"29/subtract-from"</span>/imm32/subx-name +<span id="L7277" class="LineNr"> 7277 </span> 1/imm32/rm32-is-first-inout +<span id="L7278" class="LineNr"> 7278 </span> 2/imm32/r32-is-second-inout +<span id="L7279" class="LineNr"> 7279 </span> 0/imm32/no-imm32 +<span id="L7280" class="LineNr"> 7280 </span> 0/imm32/no-disp32 +<span id="L7281" class="LineNr"> 7281 </span> 0/imm32/output-is-write-only +<span id="L7282" class="LineNr"> 7282 </span> <a href='mu.subx.html#L7283'>_Primitive-subtract-mem-from-reg</a>/imm32/next +<span id="L7283" class="LineNr"> 7283 </span><span class="subxMinorFunction">_Primitive-subtract-mem-from-reg</span>: +<span id="L7284" class="LineNr"> 7284 </span> <span class="subxComment"># var1/reg <- subtract var2 => 2b/subtract var2/rm32 var1/r32</span> +<span id="L7285" class="LineNr"> 7285 </span> <span class="Constant">"subtract"</span>/imm32/name +<span id="L7286" class="LineNr"> 7286 </span> <span class="SpecialChar"><a href='mu.subx.html#L8232'>Single-int-var-in-mem</a></span>/imm32/inouts +<span id="L7287" class="LineNr"> 7287 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/outputs +<span id="L7288" class="LineNr"> 7288 </span> <span class="Constant">"2b/subtract"</span>/imm32/subx-name +<span id="L7289" class="LineNr"> 7289 </span> 1/imm32/rm32-is-first-inout +<span id="L7290" class="LineNr"> 7290 </span> 3/imm32/r32-is-first-output +<span id="L7291" class="LineNr"> 7291 </span> 0/imm32/no-imm32 +<span id="L7292" class="LineNr"> 7292 </span> 0/imm32/no-disp32 +<span id="L7293" class="LineNr"> 7293 </span> 0/imm32/output-is-write-only +<span id="L7294" class="LineNr"> 7294 </span> <a href='mu.subx.html#L7295'>_Primitive-subtract-lit-from-reg</a>/imm32/next +<span id="L7295" class="LineNr"> 7295 </span><span class="subxMinorFunction">_Primitive-subtract-lit-from-reg</span>: +<span id="L7296" class="LineNr"> 7296 </span> <span class="subxComment"># var1/reg <- subtract lit => 81 5/subop/subtract var1/rm32 lit/imm32</span> +<span id="L7297" class="LineNr"> 7297 </span> <span class="Constant">"subtract"</span>/imm32/name +<span id="L7298" class="LineNr"> 7298 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L7299" class="LineNr"> 7299 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/outputs +<span id="L7300" class="LineNr"> 7300 </span> <span class="Constant">"81 5/subop/subtract"</span>/imm32/subx-name +<span id="L7301" class="LineNr"> 7301 </span> 3/imm32/rm32-is-first-output +<span id="L7302" class="LineNr"> 7302 </span> 0/imm32/no-r32 +<span id="L7303" class="LineNr"> 7303 </span> 1/imm32/imm32-is-first-inout +<span id="L7304" class="LineNr"> 7304 </span> 0/imm32/no-disp32 +<span id="L7305" class="LineNr"> 7305 </span> 0/imm32/output-is-write-only +<span id="L7306" class="LineNr"> 7306 </span> <a href='mu.subx.html#L7307'>_Primitive-subtract-lit-from-mem</a>/imm32/next +<span id="L7307" class="LineNr"> 7307 </span><span class="subxMinorFunction">_Primitive-subtract-lit-from-mem</span>: +<span id="L7308" class="LineNr"> 7308 </span> <span class="subxComment"># subtract-from var1, lit => 81 5/subop/subtract var1/rm32 lit/imm32</span> +<span id="L7309" class="LineNr"> 7309 </span> <span class="Constant">"subtract-from"</span>/imm32/name +<span id="L7310" class="LineNr"> 7310 </span> <span class="SpecialChar"><a href='mu.subx.html#L8255'>Int-var-and-literal</a></span>/imm32/inouts +<span id="L7311" class="LineNr"> 7311 </span> 0/imm32/outputs +<span id="L7312" class="LineNr"> 7312 </span> <span class="Constant">"81 5/subop/subtract"</span>/imm32/subx-name +<span id="L7313" class="LineNr"> 7313 </span> 1/imm32/rm32-is-first-inout +<span id="L7314" class="LineNr"> 7314 </span> 0/imm32/no-r32 +<span id="L7315" class="LineNr"> 7315 </span> 2/imm32/imm32-is-first-inout +<span id="L7316" class="LineNr"> 7316 </span> 0/imm32/no-disp32 +<span id="L7317" class="LineNr"> 7317 </span> 0/imm32/output-is-write-only +<span id="L7318" class="LineNr"> 7318 </span> <a href='mu.subx.html#L7320'>_Primitive-and-with-eax</a>/imm32/next +<span id="L7319" class="LineNr"> 7319 </span><span class="subxH1Comment"># - and</span> +<span id="L7320" class="LineNr"> 7320 </span><span class="subxMinorFunction">_Primitive-and-with-eax</span>: +<span id="L7321" class="LineNr"> 7321 </span> <span class="subxComment"># var/eax <- and lit => 25/and-with-eax lit/imm32</span> +<span id="L7322" class="LineNr"> 7322 </span> <span class="Constant">"and"</span>/imm32/name +<span id="L7323" class="LineNr"> 7323 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L7324" class="LineNr"> 7324 </span> <span class="SpecialChar"><a href='mu.subx.html#L8274'>Single-int-var-in-eax</a></span>/imm32/outputs +<span id="L7325" class="LineNr"> 7325 </span> <span class="Constant">"25/and-with-eax"</span>/imm32/subx-name +<span id="L7326" class="LineNr"> 7326 </span> 0/imm32/no-rm32 +<span id="L7327" class="LineNr"> 7327 </span> 0/imm32/no-r32 +<span id="L7328" class="LineNr"> 7328 </span> 1/imm32/imm32-is-first-inout +<span id="L7329" class="LineNr"> 7329 </span> 0/imm32/no-disp32 +<span id="L7330" class="LineNr"> 7330 </span> 0/imm32/output-is-write-only +<span id="L7331" class="LineNr"> 7331 </span> <a href='mu.subx.html#L7332'>_Primitive-and-reg-with-reg</a>/imm32/next +<span id="L7332" class="LineNr"> 7332 </span><span class="subxMinorFunction">_Primitive-and-reg-with-reg</span>: +<span id="L7333" class="LineNr"> 7333 </span> <span class="subxComment"># var1/reg <- and var2/reg => 21/and-with var1/rm32 var2/r32</span> +<span id="L7334" class="LineNr"> 7334 </span> <span class="Constant">"and"</span>/imm32/name +<span id="L7335" class="LineNr"> 7335 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/inouts +<span id="L7336" class="LineNr"> 7336 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/outputs +<span id="L7337" class="LineNr"> 7337 </span> <span class="Constant">"21/and-with"</span>/imm32/subx-name +<span id="L7338" class="LineNr"> 7338 </span> 3/imm32/rm32-is-first-output +<span id="L7339" class="LineNr"> 7339 </span> 1/imm32/r32-is-first-inout +<span id="L7340" class="LineNr"> 7340 </span> 0/imm32/no-imm32 +<span id="L7341" class="LineNr"> 7341 </span> 0/imm32/no-disp32 +<span id="L7342" class="LineNr"> 7342 </span> 0/imm32/output-is-write-only +<span id="L7343" class="LineNr"> 7343 </span> <a href='mu.subx.html#L7344'>_Primitive-and-reg-with-mem</a>/imm32/next +<span id="L7344" class="LineNr"> 7344 </span><span class="subxMinorFunction">_Primitive-and-reg-with-mem</span>: +<span id="L7345" class="LineNr"> 7345 </span> <span class="subxComment"># and-with var1 var2/reg => 21/and-with var1 var2/r32</span> +<span id="L7346" class="LineNr"> 7346 </span> <span class="Constant">"and-with"</span>/imm32/name +<span id="L7347" class="LineNr"> 7347 </span> <span class="SpecialChar"><a href='mu.subx.html#L8243'>Two-args-int-stack-int-reg</a></span>/imm32/inouts +<span id="L7348" class="LineNr"> 7348 </span> 0/imm32/outputs +<span id="L7349" class="LineNr"> 7349 </span> <span class="Constant">"21/and-with"</span>/imm32/subx-name +<span id="L7350" class="LineNr"> 7350 </span> 1/imm32/rm32-is-first-inout +<span id="L7351" class="LineNr"> 7351 </span> 2/imm32/r32-is-second-inout +<span id="L7352" class="LineNr"> 7352 </span> 0/imm32/no-imm32 +<span id="L7353" class="LineNr"> 7353 </span> 0/imm32/no-disp32 +<span id="L7354" class="LineNr"> 7354 </span> 0/imm32/output-is-write-only +<span id="L7355" class="LineNr"> 7355 </span> <a href='mu.subx.html#L7356'>_Primitive-and-mem-with-reg</a>/imm32/next +<span id="L7356" class="LineNr"> 7356 </span><span class="subxMinorFunction">_Primitive-and-mem-with-reg</span>: +<span id="L7357" class="LineNr"> 7357 </span> <span class="subxComment"># var1/reg <- and var2 => 23/and var2/rm32 var1/r32</span> +<span id="L7358" class="LineNr"> 7358 </span> <span class="Constant">"and"</span>/imm32/name +<span id="L7359" class="LineNr"> 7359 </span> <span class="SpecialChar"><a href='mu.subx.html#L8232'>Single-int-var-in-mem</a></span>/imm32/inouts +<span id="L7360" class="LineNr"> 7360 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/outputs +<span id="L7361" class="LineNr"> 7361 </span> <span class="Constant">"23/and"</span>/imm32/subx-name +<span id="L7362" class="LineNr"> 7362 </span> 1/imm32/rm32-is-first-inout +<span id="L7363" class="LineNr"> 7363 </span> 3/imm32/r32-is-first-output +<span id="L7364" class="LineNr"> 7364 </span> 0/imm32/no-imm32 +<span id="L7365" class="LineNr"> 7365 </span> 0/imm32/no-disp32 +<span id="L7366" class="LineNr"> 7366 </span> 0/imm32/output-is-write-only +<span id="L7367" class="LineNr"> 7367 </span> <a href='mu.subx.html#L7368'>_Primitive-and-lit-with-reg</a>/imm32/next +<span id="L7368" class="LineNr"> 7368 </span><span class="subxMinorFunction">_Primitive-and-lit-with-reg</span>: +<span id="L7369" class="LineNr"> 7369 </span> <span class="subxComment"># var1/reg <- and lit => 81 4/subop/and var1/rm32 lit/imm32</span> +<span id="L7370" class="LineNr"> 7370 </span> <span class="Constant">"and"</span>/imm32/name +<span id="L7371" class="LineNr"> 7371 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L7372" class="LineNr"> 7372 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/outputs +<span id="L7373" class="LineNr"> 7373 </span> <span class="Constant">"81 4/subop/and"</span>/imm32/subx-name +<span id="L7374" class="LineNr"> 7374 </span> 3/imm32/rm32-is-first-output +<span id="L7375" class="LineNr"> 7375 </span> 0/imm32/no-r32 +<span id="L7376" class="LineNr"> 7376 </span> 1/imm32/imm32-is-first-inout +<span id="L7377" class="LineNr"> 7377 </span> 0/imm32/no-disp32 +<span id="L7378" class="LineNr"> 7378 </span> 0/imm32/output-is-write-only +<span id="L7379" class="LineNr"> 7379 </span> <a href='mu.subx.html#L7380'>_Primitive-and-lit-with-mem</a>/imm32/next +<span id="L7380" class="LineNr"> 7380 </span><span class="subxMinorFunction">_Primitive-and-lit-with-mem</span>: +<span id="L7381" class="LineNr"> 7381 </span> <span class="subxComment"># and-with var1, lit => 81 4/subop/and var1/rm32 lit/imm32</span> +<span id="L7382" class="LineNr"> 7382 </span> <span class="Constant">"and-with"</span>/imm32/name +<span id="L7383" class="LineNr"> 7383 </span> <span class="SpecialChar"><a href='mu.subx.html#L8255'>Int-var-and-literal</a></span>/imm32/inouts +<span id="L7384" class="LineNr"> 7384 </span> 0/imm32/outputs +<span id="L7385" class="LineNr"> 7385 </span> <span class="Constant">"81 4/subop/and"</span>/imm32/subx-name +<span id="L7386" class="LineNr"> 7386 </span> 1/imm32/rm32-is-first-inout +<span id="L7387" class="LineNr"> 7387 </span> 0/imm32/no-r32 +<span id="L7388" class="LineNr"> 7388 </span> 2/imm32/imm32-is-first-inout +<span id="L7389" class="LineNr"> 7389 </span> 0/imm32/no-disp32 +<span id="L7390" class="LineNr"> 7390 </span> 0/imm32/output-is-write-only +<span id="L7391" class="LineNr"> 7391 </span> <a href='mu.subx.html#L7393'>_Primitive-or-with-eax</a>/imm32/next +<span id="L7392" class="LineNr"> 7392 </span><span class="subxH1Comment"># - or</span> +<span id="L7393" class="LineNr"> 7393 </span><span class="subxMinorFunction">_Primitive-or-with-eax</span>: +<span id="L7394" class="LineNr"> 7394 </span> <span class="subxComment"># var/eax <- or lit => 0d/or-with-eax lit/imm32</span> +<span id="L7395" class="LineNr"> 7395 </span> <span class="Constant">"or"</span>/imm32/name +<span id="L7396" class="LineNr"> 7396 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L7397" class="LineNr"> 7397 </span> <span class="SpecialChar"><a href='mu.subx.html#L8274'>Single-int-var-in-eax</a></span>/imm32/outputs +<span id="L7398" class="LineNr"> 7398 </span> <span class="Constant">"0d/or-with-eax"</span>/imm32/subx-name +<span id="L7399" class="LineNr"> 7399 </span> 0/imm32/no-rm32 +<span id="L7400" class="LineNr"> 7400 </span> 0/imm32/no-r32 +<span id="L7401" class="LineNr"> 7401 </span> 1/imm32/imm32-is-first-inout +<span id="L7402" class="LineNr"> 7402 </span> 0/imm32/no-disp32 +<span id="L7403" class="LineNr"> 7403 </span> 0/imm32/output-is-write-only +<span id="L7404" class="LineNr"> 7404 </span> <a href='mu.subx.html#L7405'>_Primitive-or-reg-with-reg</a>/imm32/next +<span id="L7405" class="LineNr"> 7405 </span><span class="subxMinorFunction">_Primitive-or-reg-with-reg</span>: +<span id="L7406" class="LineNr"> 7406 </span> <span class="subxComment"># var1/reg <- or var2/reg => 09/or-with var1/rm32 var2/r32</span> +<span id="L7407" class="LineNr"> 7407 </span> <span class="Constant">"or"</span>/imm32/name +<span id="L7408" class="LineNr"> 7408 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/inouts +<span id="L7409" class="LineNr"> 7409 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/outputs +<span id="L7410" class="LineNr"> 7410 </span> <span class="Constant">"09/or-with"</span>/imm32/subx-name +<span id="L7411" class="LineNr"> 7411 </span> 3/imm32/rm32-is-first-output +<span id="L7412" class="LineNr"> 7412 </span> 1/imm32/r32-is-first-inout +<span id="L7413" class="LineNr"> 7413 </span> 0/imm32/no-imm32 +<span id="L7414" class="LineNr"> 7414 </span> 0/imm32/no-disp32 +<span id="L7415" class="LineNr"> 7415 </span> 0/imm32/output-is-write-only +<span id="L7416" class="LineNr"> 7416 </span> <a href='mu.subx.html#L7417'>_Primitive-or-reg-with-mem</a>/imm32/next +<span id="L7417" class="LineNr"> 7417 </span><span class="subxMinorFunction">_Primitive-or-reg-with-mem</span>: +<span id="L7418" class="LineNr"> 7418 </span> <span class="subxComment"># or-with var1 var2/reg => 09/or-with var1 var2/r32</span> +<span id="L7419" class="LineNr"> 7419 </span> <span class="Constant">"or-with"</span>/imm32/name +<span id="L7420" class="LineNr"> 7420 </span> <span class="SpecialChar"><a href='mu.subx.html#L8243'>Two-args-int-stack-int-reg</a></span>/imm32/inouts +<span id="L7421" class="LineNr"> 7421 </span> 0/imm32/outputs +<span id="L7422" class="LineNr"> 7422 </span> <span class="Constant">"09/or-with"</span>/imm32/subx-name +<span id="L7423" class="LineNr"> 7423 </span> 1/imm32/rm32-is-first-inout +<span id="L7424" class="LineNr"> 7424 </span> 2/imm32/r32-is-second-inout +<span id="L7425" class="LineNr"> 7425 </span> 0/imm32/no-imm32 +<span id="L7426" class="LineNr"> 7426 </span> 0/imm32/no-disp32 +<span id="L7427" class="LineNr"> 7427 </span> 0/imm32/output-is-write-only +<span id="L7428" class="LineNr"> 7428 </span> <a href='mu.subx.html#L7429'>_Primitive-or-mem-with-reg</a>/imm32/next +<span id="L7429" class="LineNr"> 7429 </span><span class="subxMinorFunction">_Primitive-or-mem-with-reg</span>: +<span id="L7430" class="LineNr"> 7430 </span> <span class="subxComment"># var1/reg <- or var2 => 0b/or var2/rm32 var1/r32</span> +<span id="L7431" class="LineNr"> 7431 </span> <span class="Constant">"or"</span>/imm32/name +<span id="L7432" class="LineNr"> 7432 </span> <span class="SpecialChar"><a href='mu.subx.html#L8232'>Single-int-var-in-mem</a></span>/imm32/inouts +<span id="L7433" class="LineNr"> 7433 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/outputs +<span id="L7434" class="LineNr"> 7434 </span> <span class="Constant">"0b/or"</span>/imm32/subx-name +<span id="L7435" class="LineNr"> 7435 </span> 1/imm32/rm32-is-first-inout +<span id="L7436" class="LineNr"> 7436 </span> 3/imm32/r32-is-first-output +<span id="L7437" class="LineNr"> 7437 </span> 0/imm32/no-imm32 +<span id="L7438" class="LineNr"> 7438 </span> 0/imm32/no-disp32 +<span id="L7439" class="LineNr"> 7439 </span> 0/imm32/output-is-write-only +<span id="L7440" class="LineNr"> 7440 </span> <a href='mu.subx.html#L7441'>_Primitive-or-lit-with-reg</a>/imm32/next +<span id="L7441" class="LineNr"> 7441 </span><span class="subxMinorFunction">_Primitive-or-lit-with-reg</span>: +<span id="L7442" class="LineNr"> 7442 </span> <span class="subxComment"># var1/reg <- or lit => 81 1/subop/or var1/rm32 lit/imm32</span> +<span id="L7443" class="LineNr"> 7443 </span> <span class="Constant">"or"</span>/imm32/name +<span id="L7444" class="LineNr"> 7444 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L7445" class="LineNr"> 7445 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/outputs +<span id="L7446" class="LineNr"> 7446 </span> <span class="Constant">"81 1/subop/or"</span>/imm32/subx-name +<span id="L7447" class="LineNr"> 7447 </span> 3/imm32/rm32-is-first-output +<span id="L7448" class="LineNr"> 7448 </span> 0/imm32/no-r32 +<span id="L7449" class="LineNr"> 7449 </span> 1/imm32/imm32-is-first-inout +<span id="L7450" class="LineNr"> 7450 </span> 0/imm32/no-disp32 +<span id="L7451" class="LineNr"> 7451 </span> 0/imm32/output-is-write-only +<span id="L7452" class="LineNr"> 7452 </span> <a href='mu.subx.html#L7453'>_Primitive-or-lit-with-mem</a>/imm32/next +<span id="L7453" class="LineNr"> 7453 </span><span class="subxMinorFunction">_Primitive-or-lit-with-mem</span>: +<span id="L7454" class="LineNr"> 7454 </span> <span class="subxComment"># or-with var1, lit => 81 1/subop/or var1/rm32 lit/imm32</span> +<span id="L7455" class="LineNr"> 7455 </span> <span class="Constant">"or-with"</span>/imm32/name +<span id="L7456" class="LineNr"> 7456 </span> <span class="SpecialChar"><a href='mu.subx.html#L8255'>Int-var-and-literal</a></span>/imm32/inouts +<span id="L7457" class="LineNr"> 7457 </span> 0/imm32/outputs +<span id="L7458" class="LineNr"> 7458 </span> <span class="Constant">"81 1/subop/or"</span>/imm32/subx-name +<span id="L7459" class="LineNr"> 7459 </span> 1/imm32/rm32-is-first-inout +<span id="L7460" class="LineNr"> 7460 </span> 0/imm32/no-r32 +<span id="L7461" class="LineNr"> 7461 </span> 2/imm32/imm32-is-second-inout +<span id="L7462" class="LineNr"> 7462 </span> 0/imm32/no-disp32 +<span id="L7463" class="LineNr"> 7463 </span> 0/imm32/output-is-write-only +<span id="L7464" class="LineNr"> 7464 </span> <a href='mu.subx.html#L7466'>_Primitive-xor-with-eax</a>/imm32/next +<span id="L7465" class="LineNr"> 7465 </span><span class="subxH1Comment"># - xor</span> +<span id="L7466" class="LineNr"> 7466 </span><span class="subxMinorFunction">_Primitive-xor-with-eax</span>: +<span id="L7467" class="LineNr"> 7467 </span> <span class="subxComment"># var/eax <- xor lit => 35/xor-with-eax lit/imm32</span> +<span id="L7468" class="LineNr"> 7468 </span> <span class="Constant">"xor"</span>/imm32/name +<span id="L7469" class="LineNr"> 7469 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L7470" class="LineNr"> 7470 </span> <span class="SpecialChar"><a href='mu.subx.html#L8274'>Single-int-var-in-eax</a></span>/imm32/outputs +<span id="L7471" class="LineNr"> 7471 </span> <span class="Constant">"35/xor-with-eax"</span>/imm32/subx-name +<span id="L7472" class="LineNr"> 7472 </span> 0/imm32/no-rm32 +<span id="L7473" class="LineNr"> 7473 </span> 0/imm32/no-r32 +<span id="L7474" class="LineNr"> 7474 </span> 1/imm32/imm32-is-first-inout +<span id="L7475" class="LineNr"> 7475 </span> 0/imm32/no-disp32 +<span id="L7476" class="LineNr"> 7476 </span> 0/imm32/output-is-write-only +<span id="L7477" class="LineNr"> 7477 </span> <a href='mu.subx.html#L7478'>_Primitive-xor-reg-with-reg</a>/imm32/next +<span id="L7478" class="LineNr"> 7478 </span><span class="subxMinorFunction">_Primitive-xor-reg-with-reg</span>: +<span id="L7479" class="LineNr"> 7479 </span> <span class="subxComment"># var1/reg <- xor var2/reg => 31/xor-with var1/rm32 var2/r32</span> +<span id="L7480" class="LineNr"> 7480 </span> <span class="Constant">"xor"</span>/imm32/name +<span id="L7481" class="LineNr"> 7481 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/inouts +<span id="L7482" class="LineNr"> 7482 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/outputs +<span id="L7483" class="LineNr"> 7483 </span> <span class="Constant">"31/xor-with"</span>/imm32/subx-name +<span id="L7484" class="LineNr"> 7484 </span> 3/imm32/rm32-is-first-output +<span id="L7485" class="LineNr"> 7485 </span> 1/imm32/r32-is-first-inout +<span id="L7486" class="LineNr"> 7486 </span> 0/imm32/no-imm32 +<span id="L7487" class="LineNr"> 7487 </span> 0/imm32/no-disp32 +<span id="L7488" class="LineNr"> 7488 </span> 0/imm32/output-is-write-only +<span id="L7489" class="LineNr"> 7489 </span> <a href='mu.subx.html#L7490'>_Primitive-xor-reg-with-mem</a>/imm32/next +<span id="L7490" class="LineNr"> 7490 </span><span class="subxMinorFunction">_Primitive-xor-reg-with-mem</span>: +<span id="L7491" class="LineNr"> 7491 </span> <span class="subxComment"># xor-with var1 var2/reg => 31/xor-with var1 var2/r32</span> +<span id="L7492" class="LineNr"> 7492 </span> <span class="Constant">"xor-with"</span>/imm32/name +<span id="L7493" class="LineNr"> 7493 </span> <span class="SpecialChar"><a href='mu.subx.html#L8243'>Two-args-int-stack-int-reg</a></span>/imm32/inouts +<span id="L7494" class="LineNr"> 7494 </span> 0/imm32/outputs +<span id="L7495" class="LineNr"> 7495 </span> <span class="Constant">"31/xor-with"</span>/imm32/subx-name +<span id="L7496" class="LineNr"> 7496 </span> 1/imm32/rm32-is-first-inout +<span id="L7497" class="LineNr"> 7497 </span> 2/imm32/r32-is-second-inout +<span id="L7498" class="LineNr"> 7498 </span> 0/imm32/no-imm32 +<span id="L7499" class="LineNr"> 7499 </span> 0/imm32/no-disp32 +<span id="L7500" class="LineNr"> 7500 </span> 0/imm32/output-is-write-only +<span id="L7501" class="LineNr"> 7501 </span> <a href='mu.subx.html#L7502'>_Primitive-xor-mem-with-reg</a>/imm32/next +<span id="L7502" class="LineNr"> 7502 </span><span class="subxMinorFunction">_Primitive-xor-mem-with-reg</span>: +<span id="L7503" class="LineNr"> 7503 </span> <span class="subxComment"># var1/reg <- xor var2 => 33/xor var2/rm32 var1/r32</span> +<span id="L7504" class="LineNr"> 7504 </span> <span class="Constant">"xor"</span>/imm32/name +<span id="L7505" class="LineNr"> 7505 </span> <span class="SpecialChar"><a href='mu.subx.html#L8232'>Single-int-var-in-mem</a></span>/imm32/inouts +<span id="L7506" class="LineNr"> 7506 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/outputs +<span id="L7507" class="LineNr"> 7507 </span> <span class="Constant">"33/xor"</span>/imm32/subx-name +<span id="L7508" class="LineNr"> 7508 </span> 1/imm32/rm32-is-first-inout +<span id="L7509" class="LineNr"> 7509 </span> 3/imm32/r32-is-first-output +<span id="L7510" class="LineNr"> 7510 </span> 0/imm32/no-imm32 +<span id="L7511" class="LineNr"> 7511 </span> 0/imm32/no-disp32 +<span id="L7512" class="LineNr"> 7512 </span> 0/imm32/output-is-write-only +<span id="L7513" class="LineNr"> 7513 </span> <a href='mu.subx.html#L7514'>_Primitive-xor-lit-with-reg</a>/imm32/next +<span id="L7514" class="LineNr"> 7514 </span><span class="subxMinorFunction">_Primitive-xor-lit-with-reg</span>: +<span id="L7515" class="LineNr"> 7515 </span> <span class="subxComment"># var1/reg <- xor lit => 81 6/subop/xor var1/rm32 lit/imm32</span> +<span id="L7516" class="LineNr"> 7516 </span> <span class="Constant">"xor"</span>/imm32/name +<span id="L7517" class="LineNr"> 7517 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L7518" class="LineNr"> 7518 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/outputs +<span id="L7519" class="LineNr"> 7519 </span> <span class="Constant">"81 6/subop/xor"</span>/imm32/subx-name +<span id="L7520" class="LineNr"> 7520 </span> 3/imm32/rm32-is-first-output +<span id="L7521" class="LineNr"> 7521 </span> 0/imm32/no-r32 +<span id="L7522" class="LineNr"> 7522 </span> 1/imm32/imm32-is-first-inout +<span id="L7523" class="LineNr"> 7523 </span> 0/imm32/no-disp32 +<span id="L7524" class="LineNr"> 7524 </span> 0/imm32/output-is-write-only +<span id="L7525" class="LineNr"> 7525 </span> <a href='mu.subx.html#L7526'>_Primitive-xor-lit-with-mem</a>/imm32/next +<span id="L7526" class="LineNr"> 7526 </span><span class="subxMinorFunction">_Primitive-xor-lit-with-mem</span>: +<span id="L7527" class="LineNr"> 7527 </span> <span class="subxComment"># xor-with var1, lit => 81 6/subop/xor var1/rm32 lit/imm32</span> +<span id="L7528" class="LineNr"> 7528 </span> <span class="Constant">"xor-with"</span>/imm32/name +<span id="L7529" class="LineNr"> 7529 </span> <span class="SpecialChar"><a href='mu.subx.html#L8255'>Int-var-and-literal</a></span>/imm32/inouts +<span id="L7530" class="LineNr"> 7530 </span> 0/imm32/outputs +<span id="L7531" class="LineNr"> 7531 </span> <span class="Constant">"81 6/subop/xor"</span>/imm32/subx-name +<span id="L7532" class="LineNr"> 7532 </span> 1/imm32/rm32-is-first-inout +<span id="L7533" class="LineNr"> 7533 </span> 0/imm32/no-r32 +<span id="L7534" class="LineNr"> 7534 </span> 2/imm32/imm32-is-first-inout +<span id="L7535" class="LineNr"> 7535 </span> 0/imm32/no-disp32 +<span id="L7536" class="LineNr"> 7536 </span> 0/imm32/output-is-write-only +<span id="L7537" class="LineNr"> 7537 </span> <a href='mu.subx.html#L7539'>_Primitive-copy-to-eax</a>/imm32/next +<span id="L7538" class="LineNr"> 7538 </span><span class="subxH1Comment"># - copy</span> +<span id="L7539" class="LineNr"> 7539 </span><span class="subxMinorFunction">_Primitive-copy-to-eax</span>: +<span id="L7540" class="LineNr"> 7540 </span> <span class="subxComment"># var/eax <- copy lit => b8/copy-to-eax lit/imm32</span> +<span id="L7541" class="LineNr"> 7541 </span> <span class="Constant">"copy"</span>/imm32/name +<span id="L7542" class="LineNr"> 7542 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L7543" class="LineNr"> 7543 </span> <span class="SpecialChar"><a href='mu.subx.html#L8274'>Single-int-var-in-eax</a></span>/imm32/outputs +<span id="L7544" class="LineNr"> 7544 </span> <span class="Constant">"b8/copy-to-eax"</span>/imm32/subx-name +<span id="L7545" class="LineNr"> 7545 </span> 0/imm32/no-rm32 +<span id="L7546" class="LineNr"> 7546 </span> 0/imm32/no-r32 +<span id="L7547" class="LineNr"> 7547 </span> 1/imm32/imm32-is-first-inout +<span id="L7548" class="LineNr"> 7548 </span> 0/imm32/no-disp32 +<span id="L7549" class="LineNr"> 7549 </span> 1/imm32/output-is-write-only +<span id="L7550" class="LineNr"> 7550 </span> <a href='mu.subx.html#L7551'>_Primitive-copy-to-ecx</a>/imm32/next +<span id="L7551" class="LineNr"> 7551 </span><span class="subxMinorFunction">_Primitive-copy-to-ecx</span>: +<span id="L7552" class="LineNr"> 7552 </span> <span class="subxComment"># var/ecx <- copy lit => b9/copy-to-ecx lit/imm32</span> +<span id="L7553" class="LineNr"> 7553 </span> <span class="Constant">"copy"</span>/imm32/name +<span id="L7554" class="LineNr"> 7554 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L7555" class="LineNr"> 7555 </span> <span class="SpecialChar"><a href='mu.subx.html#L8285'>Single-int-var-in-ecx</a></span>/imm32/outputs +<span id="L7556" class="LineNr"> 7556 </span> <span class="Constant">"b9/copy-to-ecx"</span>/imm32/subx-name +<span id="L7557" class="LineNr"> 7557 </span> 0/imm32/no-rm32 +<span id="L7558" class="LineNr"> 7558 </span> 0/imm32/no-r32 +<span id="L7559" class="LineNr"> 7559 </span> 1/imm32/imm32-is-first-inout +<span id="L7560" class="LineNr"> 7560 </span> 0/imm32/no-disp32 +<span id="L7561" class="LineNr"> 7561 </span> 1/imm32/output-is-write-only +<span id="L7562" class="LineNr"> 7562 </span> <a href='mu.subx.html#L7563'>_Primitive-copy-to-edx</a>/imm32/next +<span id="L7563" class="LineNr"> 7563 </span><span class="subxMinorFunction">_Primitive-copy-to-edx</span>: +<span id="L7564" class="LineNr"> 7564 </span> <span class="subxComment"># var/edx <- copy lit => ba/copy-to-edx lit/imm32</span> +<span id="L7565" class="LineNr"> 7565 </span> <span class="Constant">"copy"</span>/imm32/name +<span id="L7566" class="LineNr"> 7566 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L7567" class="LineNr"> 7567 </span> <span class="SpecialChar"><a href='mu.subx.html#L8296'>Single-int-var-in-edx</a></span>/imm32/outputs +<span id="L7568" class="LineNr"> 7568 </span> <span class="Constant">"ba/copy-to-edx"</span>/imm32/subx-name +<span id="L7569" class="LineNr"> 7569 </span> 0/imm32/no-rm32 +<span id="L7570" class="LineNr"> 7570 </span> 0/imm32/no-r32 +<span id="L7571" class="LineNr"> 7571 </span> 1/imm32/imm32-is-first-inout +<span id="L7572" class="LineNr"> 7572 </span> 0/imm32/no-disp32 +<span id="L7573" class="LineNr"> 7573 </span> 1/imm32/output-is-write-only +<span id="L7574" class="LineNr"> 7574 </span> <a href='mu.subx.html#L7575'>_Primitive-copy-to-ebx</a>/imm32/next +<span id="L7575" class="LineNr"> 7575 </span><span class="subxMinorFunction">_Primitive-copy-to-ebx</span>: +<span id="L7576" class="LineNr"> 7576 </span> <span class="subxComment"># var/ebx <- copy lit => bb/copy-to-ebx lit/imm32</span> +<span id="L7577" class="LineNr"> 7577 </span> <span class="Constant">"copy"</span>/imm32/name +<span id="L7578" class="LineNr"> 7578 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L7579" class="LineNr"> 7579 </span> <span class="SpecialChar"><a href='mu.subx.html#L8307'>Single-int-var-in-ebx</a></span>/imm32/outputs +<span id="L7580" class="LineNr"> 7580 </span> <span class="Constant">"bb/copy-to-ebx"</span>/imm32/subx-name +<span id="L7581" class="LineNr"> 7581 </span> 0/imm32/no-rm32 +<span id="L7582" class="LineNr"> 7582 </span> 0/imm32/no-r32 +<span id="L7583" class="LineNr"> 7583 </span> 1/imm32/imm32-is-first-inout +<span id="L7584" class="LineNr"> 7584 </span> 0/imm32/no-disp32 +<span id="L7585" class="LineNr"> 7585 </span> 1/imm32/output-is-write-only +<span id="L7586" class="LineNr"> 7586 </span> <a href='mu.subx.html#L7587'>_Primitive-copy-to-esi</a>/imm32/next +<span id="L7587" class="LineNr"> 7587 </span><span class="subxMinorFunction">_Primitive-copy-to-esi</span>: +<span id="L7588" class="LineNr"> 7588 </span> <span class="subxComment"># var/esi <- copy lit => be/copy-to-esi lit/imm32</span> +<span id="L7589" class="LineNr"> 7589 </span> <span class="Constant">"copy"</span>/imm32/name +<span id="L7590" class="LineNr"> 7590 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L7591" class="LineNr"> 7591 </span> <span class="SpecialChar"><a href='mu.subx.html#L8318'>Single-int-var-in-esi</a></span>/imm32/outputs +<span id="L7592" class="LineNr"> 7592 </span> <span class="Constant">"be/copy-to-esi"</span>/imm32/subx-name +<span id="L7593" class="LineNr"> 7593 </span> 0/imm32/no-rm32 +<span id="L7594" class="LineNr"> 7594 </span> 0/imm32/no-r32 +<span id="L7595" class="LineNr"> 7595 </span> 1/imm32/imm32-is-first-inout +<span id="L7596" class="LineNr"> 7596 </span> 0/imm32/no-disp32 +<span id="L7597" class="LineNr"> 7597 </span> 1/imm32/output-is-write-only +<span id="L7598" class="LineNr"> 7598 </span> <a href='mu.subx.html#L7599'>_Primitive-copy-to-edi</a>/imm32/next +<span id="L7599" class="LineNr"> 7599 </span><span class="subxMinorFunction">_Primitive-copy-to-edi</span>: +<span id="L7600" class="LineNr"> 7600 </span> <span class="subxComment"># var/edi <- copy lit => bf/copy-to-edi lit/imm32</span> +<span id="L7601" class="LineNr"> 7601 </span> <span class="Constant">"copy"</span>/imm32/name +<span id="L7602" class="LineNr"> 7602 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L7603" class="LineNr"> 7603 </span> <span class="SpecialChar"><a href='mu.subx.html#L8329'>Single-int-var-in-edi</a></span>/imm32/outputs +<span id="L7604" class="LineNr"> 7604 </span> <span class="Constant">"bf/copy-to-edi"</span>/imm32/subx-name +<span id="L7605" class="LineNr"> 7605 </span> 0/imm32/no-rm32 +<span id="L7606" class="LineNr"> 7606 </span> 0/imm32/no-r32 +<span id="L7607" class="LineNr"> 7607 </span> 1/imm32/imm32-is-first-inout +<span id="L7608" class="LineNr"> 7608 </span> 0/imm32/no-disp32 +<span id="L7609" class="LineNr"> 7609 </span> 1/imm32/output-is-write-only +<span id="L7610" class="LineNr"> 7610 </span> <a href='mu.subx.html#L7611'>_Primitive-copy-reg-to-reg</a>/imm32/next +<span id="L7611" class="LineNr"> 7611 </span><span class="subxMinorFunction">_Primitive-copy-reg-to-reg</span>: +<span id="L7612" class="LineNr"> 7612 </span> <span class="subxComment"># var1/reg <- copy var2/reg => 89/copy-to var1/rm32 var2/r32</span> +<span id="L7613" class="LineNr"> 7613 </span> <span class="Constant">"copy"</span>/imm32/name +<span id="L7614" class="LineNr"> 7614 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/inouts +<span id="L7615" class="LineNr"> 7615 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/outputs +<span id="L7616" class="LineNr"> 7616 </span> <span class="Constant">"89/copy-to"</span>/imm32/subx-name +<span id="L7617" class="LineNr"> 7617 </span> 3/imm32/rm32-is-first-output +<span id="L7618" class="LineNr"> 7618 </span> 1/imm32/r32-is-first-inout +<span id="L7619" class="LineNr"> 7619 </span> 0/imm32/no-imm32 +<span id="L7620" class="LineNr"> 7620 </span> 0/imm32/no-disp32 +<span id="L7621" class="LineNr"> 7621 </span> 1/imm32/output-is-write-only +<span id="L7622" class="LineNr"> 7622 </span> <a href='mu.subx.html#L7623'>_Primitive-copy-reg-to-mem</a>/imm32/next +<span id="L7623" class="LineNr"> 7623 </span><span class="subxMinorFunction">_Primitive-copy-reg-to-mem</span>: +<span id="L7624" class="LineNr"> 7624 </span> <span class="subxComment"># copy-to var1 var2/reg => 89/copy-to var1 var2/r32</span> +<span id="L7625" class="LineNr"> 7625 </span> <span class="Constant">"copy-to"</span>/imm32/name +<span id="L7626" class="LineNr"> 7626 </span> <span class="SpecialChar"><a href='mu.subx.html#L8243'>Two-args-int-stack-int-reg</a></span>/imm32/inouts +<span id="L7627" class="LineNr"> 7627 </span> 0/imm32/outputs +<span id="L7628" class="LineNr"> 7628 </span> <span class="Constant">"89/copy-to"</span>/imm32/subx-name +<span id="L7629" class="LineNr"> 7629 </span> 1/imm32/rm32-is-first-inout +<span id="L7630" class="LineNr"> 7630 </span> 2/imm32/r32-is-second-inout +<span id="L7631" class="LineNr"> 7631 </span> 0/imm32/no-imm32 +<span id="L7632" class="LineNr"> 7632 </span> 0/imm32/no-disp32 +<span id="L7633" class="LineNr"> 7633 </span> 1/imm32/output-is-write-only +<span id="L7634" class="LineNr"> 7634 </span> <a href='mu.subx.html#L7635'>_Primitive-copy-mem-to-reg</a>/imm32/next +<span id="L7635" class="LineNr"> 7635 </span><span class="subxMinorFunction">_Primitive-copy-mem-to-reg</span>: +<span id="L7636" class="LineNr"> 7636 </span> <span class="subxComment"># var1/reg <- copy var2 => 8b/copy-from var2/rm32 var1/r32</span> +<span id="L7637" class="LineNr"> 7637 </span> <span class="Constant">"copy"</span>/imm32/name +<span id="L7638" class="LineNr"> 7638 </span> <span class="SpecialChar"><a href='mu.subx.html#L8232'>Single-int-var-in-mem</a></span>/imm32/inouts +<span id="L7639" class="LineNr"> 7639 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/outputs +<span id="L7640" class="LineNr"> 7640 </span> <span class="Constant">"8b/copy-from"</span>/imm32/subx-name +<span id="L7641" class="LineNr"> 7641 </span> 1/imm32/rm32-is-first-inout +<span id="L7642" class="LineNr"> 7642 </span> 3/imm32/r32-is-first-output +<span id="L7643" class="LineNr"> 7643 </span> 0/imm32/no-imm32 +<span id="L7644" class="LineNr"> 7644 </span> 0/imm32/no-disp32 +<span id="L7645" class="LineNr"> 7645 </span> 1/imm32/output-is-write-only +<span id="L7646" class="LineNr"> 7646 </span> <a href='mu.subx.html#L7647'>_Primitive-copy-lit-to-reg</a>/imm32/next +<span id="L7647" class="LineNr"> 7647 </span><span class="subxMinorFunction">_Primitive-copy-lit-to-reg</span>: +<span id="L7648" class="LineNr"> 7648 </span> <span class="subxComment"># var1/reg <- copy lit => c7 0/subop/copy var1/rm32 lit/imm32</span> +<span id="L7649" class="LineNr"> 7649 </span> <span class="Constant">"copy"</span>/imm32/name +<span id="L7650" class="LineNr"> 7650 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L7651" class="LineNr"> 7651 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/outputs +<span id="L7652" class="LineNr"> 7652 </span> <span class="Constant">"c7 0/subop/copy"</span>/imm32/subx-name +<span id="L7653" class="LineNr"> 7653 </span> 3/imm32/rm32-is-first-output +<span id="L7654" class="LineNr"> 7654 </span> 0/imm32/no-r32 +<span id="L7655" class="LineNr"> 7655 </span> 1/imm32/imm32-is-first-inout +<span id="L7656" class="LineNr"> 7656 </span> 0/imm32/no-disp32 +<span id="L7657" class="LineNr"> 7657 </span> 1/imm32/output-is-write-only +<span id="L7658" class="LineNr"> 7658 </span> <a href='mu.subx.html#L7659'>_Primitive-copy-lit-to-mem</a>/imm32/next +<span id="L7659" class="LineNr"> 7659 </span><span class="subxMinorFunction">_Primitive-copy-lit-to-mem</span>: +<span id="L7660" class="LineNr"> 7660 </span> <span class="subxComment"># copy-to var1, lit => c7 0/subop/copy var1/rm32 lit/imm32</span> +<span id="L7661" class="LineNr"> 7661 </span> <span class="Constant">"copy-to"</span>/imm32/name +<span id="L7662" class="LineNr"> 7662 </span> <span class="SpecialChar"><a href='mu.subx.html#L8255'>Int-var-and-literal</a></span>/imm32/inouts +<span id="L7663" class="LineNr"> 7663 </span> 0/imm32/outputs +<span id="L7664" class="LineNr"> 7664 </span> <span class="Constant">"c7 0/subop/copy"</span>/imm32/subx-name +<span id="L7665" class="LineNr"> 7665 </span> 1/imm32/rm32-is-first-inout +<span id="L7666" class="LineNr"> 7666 </span> 0/imm32/no-r32 +<span id="L7667" class="LineNr"> 7667 </span> 2/imm32/imm32-is-first-inout +<span id="L7668" class="LineNr"> 7668 </span> 0/imm32/no-disp32 +<span id="L7669" class="LineNr"> 7669 </span> 1/imm32/output-is-write-only +<span id="L7670" class="LineNr"> 7670 </span> <a href='mu.subx.html#L7672'>_Primitive-compare-mem-with-reg</a>/imm32/next +<span id="L7671" class="LineNr"> 7671 </span><span class="subxH1Comment"># - compare</span> +<span id="L7672" class="LineNr"> 7672 </span><span class="subxMinorFunction">_Primitive-compare-mem-with-reg</span>: +<span id="L7673" class="LineNr"> 7673 </span> <span class="subxComment"># compare var1 var2/reg => 39/compare-> var1/rm32 var2/r32</span> +<span id="L7674" class="LineNr"> 7674 </span> <span class="Constant">"compare"</span>/imm32/name +<span id="L7675" class="LineNr"> 7675 </span> <span class="SpecialChar"><a href='mu.subx.html#L8243'>Two-args-int-stack-int-reg</a></span>/imm32/inouts +<span id="L7676" class="LineNr"> 7676 </span> 0/imm32/outputs +<span id="L7677" class="LineNr"> 7677 </span> <span class="Constant">"39/compare->"</span>/imm32/subx-name +<span id="L7678" class="LineNr"> 7678 </span> 1/imm32/rm32-is-first-inout +<span id="L7679" class="LineNr"> 7679 </span> 2/imm32/r32-is-second-inout +<span id="L7680" class="LineNr"> 7680 </span> 0/imm32/no-imm32 +<span id="L7681" class="LineNr"> 7681 </span> 0/imm32/no-disp32 +<span id="L7682" class="LineNr"> 7682 </span> 0/imm32/output-is-write-only +<span id="L7683" class="LineNr"> 7683 </span> <a href='mu.subx.html#L7684'>_Primitive-compare-reg-with-mem</a>/imm32/next +<span id="L7684" class="LineNr"> 7684 </span><span class="subxMinorFunction">_Primitive-compare-reg-with-mem</span>: +<span id="L7685" class="LineNr"> 7685 </span> <span class="subxComment"># compare var1/reg var2 => 3b/compare<- var2/rm32 var1/r32</span> +<span id="L7686" class="LineNr"> 7686 </span> <span class="Constant">"compare"</span>/imm32/name +<span id="L7687" class="LineNr"> 7687 </span> <span class="SpecialChar"><a href='mu.subx.html#L8247'>Two-args-int-reg-int-stack</a></span>/imm32/inouts +<span id="L7688" class="LineNr"> 7688 </span> 0/imm32/outputs +<span id="L7689" class="LineNr"> 7689 </span> <span class="Constant">"3b/compare<-"</span>/imm32/subx-name +<span id="L7690" class="LineNr"> 7690 </span> 2/imm32/rm32-is-second-inout +<span id="L7691" class="LineNr"> 7691 </span> 1/imm32/r32-is-first-inout +<span id="L7692" class="LineNr"> 7692 </span> 0/imm32/no-imm32 +<span id="L7693" class="LineNr"> 7693 </span> 0/imm32/no-disp32 +<span id="L7694" class="LineNr"> 7694 </span> 0/imm32/output-is-write-only +<span id="L7695" class="LineNr"> 7695 </span> <a href='mu.subx.html#L7696'>_Primitive-compare-eax-with-literal</a>/imm32/next +<span id="L7696" class="LineNr"> 7696 </span><span class="subxMinorFunction">_Primitive-compare-eax-with-literal</span>: +<span id="L7697" class="LineNr"> 7697 </span> <span class="subxComment"># compare var1/eax n => 3d/compare-eax-with n/imm32</span> +<span id="L7698" class="LineNr"> 7698 </span> <span class="Constant">"compare"</span>/imm32/name +<span id="L7699" class="LineNr"> 7699 </span> <span class="SpecialChar"><a href='mu.subx.html#L8251'>Two-args-int-eax-int-literal</a></span>/imm32/inouts +<span id="L7700" class="LineNr"> 7700 </span> 0/imm32/outputs +<span id="L7701" class="LineNr"> 7701 </span> <span class="Constant">"3d/compare-eax-with"</span>/imm32/subx-name +<span id="L7702" class="LineNr"> 7702 </span> 0/imm32/no-rm32 +<span id="L7703" class="LineNr"> 7703 </span> 0/imm32/no-r32 +<span id="L7704" class="LineNr"> 7704 </span> 2/imm32/imm32-is-second-inout +<span id="L7705" class="LineNr"> 7705 </span> 0/imm32/no-disp32 +<span id="L7706" class="LineNr"> 7706 </span> 0/imm32/output-is-write-only +<span id="L7707" class="LineNr"> 7707 </span> <a href='mu.subx.html#L7708'>_Primitive-compare-reg-with-literal</a>/imm32/next +<span id="L7708" class="LineNr"> 7708 </span><span class="subxMinorFunction">_Primitive-compare-reg-with-literal</span>: +<span id="L7709" class="LineNr"> 7709 </span> <span class="subxComment"># compare var1/reg n => 81 7/subop/compare %reg n/imm32</span> +<span id="L7710" class="LineNr"> 7710 </span> <span class="Constant">"compare"</span>/imm32/name +<span id="L7711" class="LineNr"> 7711 </span> <span class="SpecialChar"><a href='mu.subx.html#L8259'>Int-var-in-register-and-literal</a></span>/imm32/inouts +<span id="L7712" class="LineNr"> 7712 </span> 0/imm32/outputs +<span id="L7713" class="LineNr"> 7713 </span> <span class="Constant">"81 7/subop/compare"</span>/imm32/subx-name +<span id="L7714" class="LineNr"> 7714 </span> 1/imm32/rm32-is-first-inout +<span id="L7715" class="LineNr"> 7715 </span> 0/imm32/no-r32 +<span id="L7716" class="LineNr"> 7716 </span> 2/imm32/imm32-is-second-inout +<span id="L7717" class="LineNr"> 7717 </span> 0/imm32/no-disp32 +<span id="L7718" class="LineNr"> 7718 </span> 0/imm32/output-is-write-only +<span id="L7719" class="LineNr"> 7719 </span> <a href='mu.subx.html#L7720'>_Primitive-compare-mem-with-literal</a>/imm32/next +<span id="L7720" class="LineNr"> 7720 </span><span class="subxMinorFunction">_Primitive-compare-mem-with-literal</span>: +<span id="L7721" class="LineNr"> 7721 </span> <span class="subxComment"># compare var1 n => 81 7/subop/compare *(ebp+___) n/imm32</span> +<span id="L7722" class="LineNr"> 7722 </span> <span class="Constant">"compare"</span>/imm32/name +<span id="L7723" class="LineNr"> 7723 </span> <span class="SpecialChar"><a href='mu.subx.html#L8255'>Int-var-and-literal</a></span>/imm32/inouts +<span id="L7724" class="LineNr"> 7724 </span> 0/imm32/outputs +<span id="L7725" class="LineNr"> 7725 </span> <span class="Constant">"81 7/subop/compare"</span>/imm32/subx-name +<span id="L7726" class="LineNr"> 7726 </span> 1/imm32/rm32-is-first-inout +<span id="L7727" class="LineNr"> 7727 </span> 0/imm32/no-r32 +<span id="L7728" class="LineNr"> 7728 </span> 2/imm32/imm32-is-second-inout +<span id="L7729" class="LineNr"> 7729 </span> 0/imm32/no-disp32 +<span id="L7730" class="LineNr"> 7730 </span> 0/imm32/output-is-write-only +<span id="L7731" class="LineNr"> 7731 </span> <a href='mu.subx.html#L7733'>_Primitive-multiply-reg-by-mem</a>/imm32/next +<span id="L7732" class="LineNr"> 7732 </span><span class="subxH1Comment"># - multiply</span> +<span id="L7733" class="LineNr"> 7733 </span><span class="subxMinorFunction">_Primitive-multiply-reg-by-mem</span>: +<span id="L7734" class="LineNr"> 7734 </span> <span class="subxComment"># var1/reg <- multiply var2 => 0f af/multiply var2/rm32 var1/r32</span> +<span id="L7735" class="LineNr"> 7735 </span> <span class="Constant">"multiply"</span>/imm32/name +<span id="L7736" class="LineNr"> 7736 </span> <span class="SpecialChar"><a href='mu.subx.html#L8232'>Single-int-var-in-mem</a></span>/imm32/inouts +<span id="L7737" class="LineNr"> 7737 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/outputs +<span id="L7738" class="LineNr"> 7738 </span> <span class="Constant">"0f af/multiply"</span>/imm32/subx-name +<span id="L7739" class="LineNr"> 7739 </span> 1/imm32/rm32-is-first-inout +<span id="L7740" class="LineNr"> 7740 </span> 3/imm32/r32-is-first-output +<span id="L7741" class="LineNr"> 7741 </span> 0/imm32/no-imm32 +<span id="L7742" class="LineNr"> 7742 </span> 0/imm32/no-disp32 +<span id="L7743" class="LineNr"> 7743 </span> 0/imm32/output-is-write-only +<span id="L7744" class="LineNr"> 7744 </span> <a href='mu.subx.html#L7746'>_Primitive-break-if-addr<</a>/imm32/next +<span id="L7745" class="LineNr"> 7745 </span><span class="subxH1Comment"># - branches</span> +<span id="L7746" class="LineNr"> 7746 </span><span class="subxMinorFunction">_Primitive-break-if-addr<</span>: +<span id="L7747" class="LineNr"> 7747 </span> <span class="Constant">"break-if-addr<"</span>/imm32/name +<span id="L7748" class="LineNr"> 7748 </span> 0/imm32/inouts +<span id="L7749" class="LineNr"> 7749 </span> 0/imm32/outputs +<span id="L7750" class="LineNr"> 7750 </span> <span class="Constant">"0f 82/jump-if-addr< break/disp32"</span>/imm32/subx-name +<span id="L7751" class="LineNr"> 7751 </span> 0/imm32/no-rm32 +<span id="L7752" class="LineNr"> 7752 </span> 0/imm32/no-r32 +<span id="L7753" class="LineNr"> 7753 </span> 0/imm32/no-imm32 +<span id="L7754" class="LineNr"> 7754 </span> 0/imm32/no-disp32 +<span id="L7755" class="LineNr"> 7755 </span> 0/imm32/no-output +<span id="L7756" class="LineNr"> 7756 </span> <a href='mu.subx.html#L7757'>_Primitive-break-if-addr>=</a>/imm32/next +<span id="L7757" class="LineNr"> 7757 </span><span class="subxMinorFunction">_Primitive-break-if-addr>=</span>: +<span id="L7758" class="LineNr"> 7758 </span> <span class="Constant">"break-if-addr>="</span>/imm32/name +<span id="L7759" class="LineNr"> 7759 </span> 0/imm32/inouts +<span id="L7760" class="LineNr"> 7760 </span> 0/imm32/outputs +<span id="L7761" class="LineNr"> 7761 </span> <span class="Constant">"0f 83/jump-if-addr>= break/disp32"</span>/imm32/subx-name +<span id="L7762" class="LineNr"> 7762 </span> 0/imm32/no-rm32 +<span id="L7763" class="LineNr"> 7763 </span> 0/imm32/no-r32 +<span id="L7764" class="LineNr"> 7764 </span> 0/imm32/no-imm32 +<span id="L7765" class="LineNr"> 7765 </span> 0/imm32/no-disp32 +<span id="L7766" class="LineNr"> 7766 </span> 0/imm32/no-output +<span id="L7767" class="LineNr"> 7767 </span> <a href='mu.subx.html#L7768'>_Primitive-break-if-=</a>/imm32/next +<span id="L7768" class="LineNr"> 7768 </span><span class="subxMinorFunction">_Primitive-break-if-=</span>: +<span id="L7769" class="LineNr"> 7769 </span> <span class="Constant">"break-if-="</span>/imm32/name +<span id="L7770" class="LineNr"> 7770 </span> 0/imm32/inouts +<span id="L7771" class="LineNr"> 7771 </span> 0/imm32/outputs +<span id="L7772" class="LineNr"> 7772 </span> <span class="Constant">"0f 84/jump-if-= break/disp32"</span>/imm32/subx-name +<span id="L7773" class="LineNr"> 7773 </span> 0/imm32/no-rm32 +<span id="L7774" class="LineNr"> 7774 </span> 0/imm32/no-r32 +<span id="L7775" class="LineNr"> 7775 </span> 0/imm32/no-imm32 +<span id="L7776" class="LineNr"> 7776 </span> 0/imm32/no-disp32 +<span id="L7777" class="LineNr"> 7777 </span> 0/imm32/no-output +<span id="L7778" class="LineNr"> 7778 </span> <a href='mu.subx.html#L7779'>_Primitive-break-if-!=</a>/imm32/next +<span id="L7779" class="LineNr"> 7779 </span><span class="subxMinorFunction">_Primitive-break-if-!=</span>: +<span id="L7780" class="LineNr"> 7780 </span> <span class="Constant">"break-if-!="</span>/imm32/name +<span id="L7781" class="LineNr"> 7781 </span> 0/imm32/inouts +<span id="L7782" class="LineNr"> 7782 </span> 0/imm32/outputs +<span id="L7783" class="LineNr"> 7783 </span> <span class="Constant">"0f 85/jump-if-!= break/disp32"</span>/imm32/subx-name +<span id="L7784" class="LineNr"> 7784 </span> 0/imm32/no-rm32 +<span id="L7785" class="LineNr"> 7785 </span> 0/imm32/no-r32 +<span id="L7786" class="LineNr"> 7786 </span> 0/imm32/no-imm32 +<span id="L7787" class="LineNr"> 7787 </span> 0/imm32/no-disp32 +<span id="L7788" class="LineNr"> 7788 </span> 0/imm32/no-output +<span id="L7789" class="LineNr"> 7789 </span> <a href='mu.subx.html#L7790'>_Primitive-break-if-addr<=</a>/imm32/next +<span id="L7790" class="LineNr"> 7790 </span><span class="subxMinorFunction">_Primitive-break-if-addr<=</span>: +<span id="L7791" class="LineNr"> 7791 </span> <span class="Constant">"break-if-addr<="</span>/imm32/name +<span id="L7792" class="LineNr"> 7792 </span> 0/imm32/inouts +<span id="L7793" class="LineNr"> 7793 </span> 0/imm32/outputs +<span id="L7794" class="LineNr"> 7794 </span> <span class="Constant">"0f 86/jump-if-addr<= break/disp32"</span>/imm32/subx-name +<span id="L7795" class="LineNr"> 7795 </span> 0/imm32/no-rm32 +<span id="L7796" class="LineNr"> 7796 </span> 0/imm32/no-r32 +<span id="L7797" class="LineNr"> 7797 </span> 0/imm32/no-imm32 +<span id="L7798" class="LineNr"> 7798 </span> 0/imm32/no-disp32 +<span id="L7799" class="LineNr"> 7799 </span> 0/imm32/no-output +<span id="L7800" class="LineNr"> 7800 </span> <a href='mu.subx.html#L7801'>_Primitive-break-if-addr></a>/imm32/next +<span id="L7801" class="LineNr"> 7801 </span><span class="subxMinorFunction">_Primitive-break-if-addr></span>: +<span id="L7802" class="LineNr"> 7802 </span> <span class="Constant">"break-if-addr>"</span>/imm32/name +<span id="L7803" class="LineNr"> 7803 </span> 0/imm32/inouts +<span id="L7804" class="LineNr"> 7804 </span> 0/imm32/outputs +<span id="L7805" class="LineNr"> 7805 </span> <span class="Constant">"0f 87/jump-if-addr> break/disp32"</span>/imm32/subx-name +<span id="L7806" class="LineNr"> 7806 </span> 0/imm32/no-rm32 +<span id="L7807" class="LineNr"> 7807 </span> 0/imm32/no-r32 +<span id="L7808" class="LineNr"> 7808 </span> 0/imm32/no-imm32 +<span id="L7809" class="LineNr"> 7809 </span> 0/imm32/no-disp32 +<span id="L7810" class="LineNr"> 7810 </span> 0/imm32/no-output +<span id="L7811" class="LineNr"> 7811 </span> <a href='mu.subx.html#L7812'>_Primitive-break-if-<</a>/imm32/next +<span id="L7812" class="LineNr"> 7812 </span><span class="subxMinorFunction">_Primitive-break-if-<</span>: +<span id="L7813" class="LineNr"> 7813 </span> <span class="Constant">"break-if-<"</span>/imm32/name +<span id="L7814" class="LineNr"> 7814 </span> 0/imm32/inouts +<span id="L7815" class="LineNr"> 7815 </span> 0/imm32/outputs +<span id="L7816" class="LineNr"> 7816 </span> <span class="Constant">"0f 8c/jump-if-< break/disp32"</span>/imm32/subx-name +<span id="L7817" class="LineNr"> 7817 </span> 0/imm32/no-rm32 +<span id="L7818" class="LineNr"> 7818 </span> 0/imm32/no-r32 +<span id="L7819" class="LineNr"> 7819 </span> 0/imm32/no-imm32 +<span id="L7820" class="LineNr"> 7820 </span> 0/imm32/no-disp32 +<span id="L7821" class="LineNr"> 7821 </span> 0/imm32/no-output +<span id="L7822" class="LineNr"> 7822 </span> <a href='mu.subx.html#L7823'>_Primitive-break-if->=</a>/imm32/next +<span id="L7823" class="LineNr"> 7823 </span><span class="subxMinorFunction">_Primitive-break-if->=</span>: +<span id="L7824" class="LineNr"> 7824 </span> <span class="Constant">"break-if->="</span>/imm32/name +<span id="L7825" class="LineNr"> 7825 </span> 0/imm32/inouts +<span id="L7826" class="LineNr"> 7826 </span> 0/imm32/outputs +<span id="L7827" class="LineNr"> 7827 </span> <span class="Constant">"0f 8d/jump-if->= break/disp32"</span>/imm32/subx-name +<span id="L7828" class="LineNr"> 7828 </span> 0/imm32/no-rm32 +<span id="L7829" class="LineNr"> 7829 </span> 0/imm32/no-r32 +<span id="L7830" class="LineNr"> 7830 </span> 0/imm32/no-imm32 +<span id="L7831" class="LineNr"> 7831 </span> 0/imm32/no-disp32 +<span id="L7832" class="LineNr"> 7832 </span> 0/imm32/no-output +<span id="L7833" class="LineNr"> 7833 </span> <a href='mu.subx.html#L7834'>_Primitive-break-if-<=</a>/imm32/next +<span id="L7834" class="LineNr"> 7834 </span><span class="subxMinorFunction">_Primitive-break-if-<=</span>: +<span id="L7835" class="LineNr"> 7835 </span> <span class="Constant">"break-if-<="</span>/imm32/name +<span id="L7836" class="LineNr"> 7836 </span> 0/imm32/inouts +<span id="L7837" class="LineNr"> 7837 </span> 0/imm32/outputs +<span id="L7838" class="LineNr"> 7838 </span> <span class="Constant">"0f 8e/jump-if-<= break/disp32"</span>/imm32/subx-name +<span id="L7839" class="LineNr"> 7839 </span> 0/imm32/no-rm32 +<span id="L7840" class="LineNr"> 7840 </span> 0/imm32/no-r32 +<span id="L7841" class="LineNr"> 7841 </span> 0/imm32/no-imm32 +<span id="L7842" class="LineNr"> 7842 </span> 0/imm32/no-disp32 +<span id="L7843" class="LineNr"> 7843 </span> 0/imm32/no-output +<span id="L7844" class="LineNr"> 7844 </span> <a href='mu.subx.html#L7845'>_Primitive-break-if-></a>/imm32/next +<span id="L7845" class="LineNr"> 7845 </span><span class="subxMinorFunction">_Primitive-break-if-></span>: +<span id="L7846" class="LineNr"> 7846 </span> <span class="Constant">"break-if->"</span>/imm32/name +<span id="L7847" class="LineNr"> 7847 </span> 0/imm32/inouts +<span id="L7848" class="LineNr"> 7848 </span> 0/imm32/outputs +<span id="L7849" class="LineNr"> 7849 </span> <span class="Constant">"0f 8f/jump-if-> break/disp32"</span>/imm32/subx-name +<span id="L7850" class="LineNr"> 7850 </span> 0/imm32/no-rm32 +<span id="L7851" class="LineNr"> 7851 </span> 0/imm32/no-r32 +<span id="L7852" class="LineNr"> 7852 </span> 0/imm32/no-imm32 +<span id="L7853" class="LineNr"> 7853 </span> 0/imm32/no-disp32 +<span id="L7854" class="LineNr"> 7854 </span> 0/imm32/no-output +<span id="L7855" class="LineNr"> 7855 </span> <a href='mu.subx.html#L7856'>_Primitive-break</a>/imm32/next +<span id="L7856" class="LineNr"> 7856 </span><span class="subxMinorFunction">_Primitive-break</span>: +<span id="L7857" class="LineNr"> 7857 </span> <span class="Constant">"break"</span>/imm32/name +<span id="L7858" class="LineNr"> 7858 </span> 0/imm32/inouts +<span id="L7859" class="LineNr"> 7859 </span> 0/imm32/outputs +<span id="L7860" class="LineNr"> 7860 </span> <span class="Constant">"e9/jump break/disp32"</span>/imm32/subx-name +<span id="L7861" class="LineNr"> 7861 </span> 0/imm32/no-rm32 +<span id="L7862" class="LineNr"> 7862 </span> 0/imm32/no-r32 +<span id="L7863" class="LineNr"> 7863 </span> 0/imm32/no-imm32 +<span id="L7864" class="LineNr"> 7864 </span> 0/imm32/no-disp32 +<span id="L7865" class="LineNr"> 7865 </span> 0/imm32/no-output +<span id="L7866" class="LineNr"> 7866 </span> <a href='mu.subx.html#L7867'>_Primitive-loop-if-addr<</a>/imm32/next +<span id="L7867" class="LineNr"> 7867 </span><span class="subxMinorFunction">_Primitive-loop-if-addr<</span>: +<span id="L7868" class="LineNr"> 7868 </span> <span class="Constant">"loop-if-addr<"</span>/imm32/name +<span id="L7869" class="LineNr"> 7869 </span> 0/imm32/inouts +<span id="L7870" class="LineNr"> 7870 </span> 0/imm32/outputs +<span id="L7871" class="LineNr"> 7871 </span> <span class="Constant">"0f 82/jump-if-addr< loop/disp32"</span>/imm32/subx-name +<span id="L7872" class="LineNr"> 7872 </span> 0/imm32/no-rm32 +<span id="L7873" class="LineNr"> 7873 </span> 0/imm32/no-r32 +<span id="L7874" class="LineNr"> 7874 </span> 0/imm32/no-imm32 +<span id="L7875" class="LineNr"> 7875 </span> 0/imm32/no-disp32 +<span id="L7876" class="LineNr"> 7876 </span> 0/imm32/no-output +<span id="L7877" class="LineNr"> 7877 </span> <a href='mu.subx.html#L7878'>_Primitive-loop-if-addr>=</a>/imm32/next +<span id="L7878" class="LineNr"> 7878 </span><span class="subxMinorFunction">_Primitive-loop-if-addr>=</span>: +<span id="L7879" class="LineNr"> 7879 </span> <span class="Constant">"loop-if-addr>="</span>/imm32/name +<span id="L7880" class="LineNr"> 7880 </span> 0/imm32/inouts +<span id="L7881" class="LineNr"> 7881 </span> 0/imm32/outputs +<span id="L7882" class="LineNr"> 7882 </span> <span class="Constant">"0f 83/jump-if-addr>= loop/disp32"</span>/imm32/subx-name +<span id="L7883" class="LineNr"> 7883 </span> 0/imm32/no-rm32 +<span id="L7884" class="LineNr"> 7884 </span> 0/imm32/no-r32 +<span id="L7885" class="LineNr"> 7885 </span> 0/imm32/no-imm32 +<span id="L7886" class="LineNr"> 7886 </span> 0/imm32/no-disp32 +<span id="L7887" class="LineNr"> 7887 </span> 0/imm32/no-output +<span id="L7888" class="LineNr"> 7888 </span> <a href='mu.subx.html#L7889'>_Primitive-loop-if-=</a>/imm32/next +<span id="L7889" class="LineNr"> 7889 </span><span class="subxMinorFunction">_Primitive-loop-if-=</span>: +<span id="L7890" class="LineNr"> 7890 </span> <span class="Constant">"loop-if-="</span>/imm32/name +<span id="L7891" class="LineNr"> 7891 </span> 0/imm32/inouts +<span id="L7892" class="LineNr"> 7892 </span> 0/imm32/outputs +<span id="L7893" class="LineNr"> 7893 </span> <span class="Constant">"0f 84/jump-if-= loop/disp32"</span>/imm32/subx-name +<span id="L7894" class="LineNr"> 7894 </span> 0/imm32/no-rm32 +<span id="L7895" class="LineNr"> 7895 </span> 0/imm32/no-r32 +<span id="L7896" class="LineNr"> 7896 </span> 0/imm32/no-imm32 +<span id="L7897" class="LineNr"> 7897 </span> 0/imm32/no-disp32 +<span id="L7898" class="LineNr"> 7898 </span> 0/imm32/no-output +<span id="L7899" class="LineNr"> 7899 </span> <a href='mu.subx.html#L7900'>_Primitive-loop-if-!=</a>/imm32/next +<span id="L7900" class="LineNr"> 7900 </span><span class="subxMinorFunction">_Primitive-loop-if-!=</span>: +<span id="L7901" class="LineNr"> 7901 </span> <span class="Constant">"loop-if-!="</span>/imm32/name +<span id="L7902" class="LineNr"> 7902 </span> 0/imm32/inouts +<span id="L7903" class="LineNr"> 7903 </span> 0/imm32/outputs +<span id="L7904" class="LineNr"> 7904 </span> <span class="Constant">"0f 85/jump-if-!= loop/disp32"</span>/imm32/subx-name +<span id="L7905" class="LineNr"> 7905 </span> 0/imm32/no-rm32 +<span id="L7906" class="LineNr"> 7906 </span> 0/imm32/no-r32 +<span id="L7907" class="LineNr"> 7907 </span> 0/imm32/no-imm32 +<span id="L7908" class="LineNr"> 7908 </span> 0/imm32/no-disp32 +<span id="L7909" class="LineNr"> 7909 </span> 0/imm32/no-output +<span id="L7910" class="LineNr"> 7910 </span> <a href='mu.subx.html#L7911'>_Primitive-loop-if-addr<=</a>/imm32/next +<span id="L7911" class="LineNr"> 7911 </span><span class="subxMinorFunction">_Primitive-loop-if-addr<=</span>: +<span id="L7912" class="LineNr"> 7912 </span> <span class="Constant">"loop-if-addr<="</span>/imm32/name +<span id="L7913" class="LineNr"> 7913 </span> 0/imm32/inouts +<span id="L7914" class="LineNr"> 7914 </span> 0/imm32/outputs +<span id="L7915" class="LineNr"> 7915 </span> <span class="Constant">"0f 86/jump-if-addr<= loop/disp32"</span>/imm32/subx-name +<span id="L7916" class="LineNr"> 7916 </span> 0/imm32/no-rm32 +<span id="L7917" class="LineNr"> 7917 </span> 0/imm32/no-r32 +<span id="L7918" class="LineNr"> 7918 </span> 0/imm32/no-imm32 +<span id="L7919" class="LineNr"> 7919 </span> 0/imm32/no-disp32 +<span id="L7920" class="LineNr"> 7920 </span> 0/imm32/no-output +<span id="L7921" class="LineNr"> 7921 </span> <a href='mu.subx.html#L7922'>_Primitive-loop-if-addr></a>/imm32/next +<span id="L7922" class="LineNr"> 7922 </span><span class="subxMinorFunction">_Primitive-loop-if-addr></span>: +<span id="L7923" class="LineNr"> 7923 </span> <span class="Constant">"loop-if-addr>"</span>/imm32/name +<span id="L7924" class="LineNr"> 7924 </span> 0/imm32/inouts +<span id="L7925" class="LineNr"> 7925 </span> 0/imm32/outputs +<span id="L7926" class="LineNr"> 7926 </span> <span class="Constant">"0f 87/jump-if-addr> loop/disp32"</span>/imm32/subx-name +<span id="L7927" class="LineNr"> 7927 </span> 0/imm32/no-rm32 +<span id="L7928" class="LineNr"> 7928 </span> 0/imm32/no-r32 +<span id="L7929" class="LineNr"> 7929 </span> 0/imm32/no-imm32 +<span id="L7930" class="LineNr"> 7930 </span> 0/imm32/no-disp32 +<span id="L7931" class="LineNr"> 7931 </span> 0/imm32/no-output +<span id="L7932" class="LineNr"> 7932 </span> <a href='mu.subx.html#L7933'>_Primitive-loop-if-<</a>/imm32/next +<span id="L7933" class="LineNr"> 7933 </span><span class="subxMinorFunction">_Primitive-loop-if-<</span>: +<span id="L7934" class="LineNr"> 7934 </span> <span class="Constant">"loop-if-<"</span>/imm32/name +<span id="L7935" class="LineNr"> 7935 </span> 0/imm32/inouts +<span id="L7936" class="LineNr"> 7936 </span> 0/imm32/outputs +<span id="L7937" class="LineNr"> 7937 </span> <span class="Constant">"0f 8c/jump-if-< loop/disp32"</span>/imm32/subx-name +<span id="L7938" class="LineNr"> 7938 </span> 0/imm32/no-rm32 +<span id="L7939" class="LineNr"> 7939 </span> 0/imm32/no-r32 +<span id="L7940" class="LineNr"> 7940 </span> 0/imm32/no-imm32 +<span id="L7941" class="LineNr"> 7941 </span> 0/imm32/no-disp32 +<span id="L7942" class="LineNr"> 7942 </span> 0/imm32/no-output +<span id="L7943" class="LineNr"> 7943 </span> <a href='mu.subx.html#L7944'>_Primitive-loop-if->=</a>/imm32/next +<span id="L7944" class="LineNr"> 7944 </span><span class="subxMinorFunction">_Primitive-loop-if->=</span>: +<span id="L7945" class="LineNr"> 7945 </span> <span class="Constant">"loop-if->="</span>/imm32/name +<span id="L7946" class="LineNr"> 7946 </span> 0/imm32/inouts +<span id="L7947" class="LineNr"> 7947 </span> 0/imm32/outputs +<span id="L7948" class="LineNr"> 7948 </span> <span class="Constant">"0f 8d/jump-if->= loop/disp32"</span>/imm32/subx-name +<span id="L7949" class="LineNr"> 7949 </span> 0/imm32/no-rm32 +<span id="L7950" class="LineNr"> 7950 </span> 0/imm32/no-r32 +<span id="L7951" class="LineNr"> 7951 </span> 0/imm32/no-imm32 +<span id="L7952" class="LineNr"> 7952 </span> 0/imm32/no-disp32 +<span id="L7953" class="LineNr"> 7953 </span> 0/imm32/no-output +<span id="L7954" class="LineNr"> 7954 </span> <a href='mu.subx.html#L7955'>_Primitive-loop-if-<=</a>/imm32/next +<span id="L7955" class="LineNr"> 7955 </span><span class="subxMinorFunction">_Primitive-loop-if-<=</span>: +<span id="L7956" class="LineNr"> 7956 </span> <span class="Constant">"loop-if-<="</span>/imm32/name +<span id="L7957" class="LineNr"> 7957 </span> 0/imm32/inouts +<span id="L7958" class="LineNr"> 7958 </span> 0/imm32/outputs +<span id="L7959" class="LineNr"> 7959 </span> <span class="Constant">"0f 8e/jump-if-<= loop/disp32"</span>/imm32/subx-name +<span id="L7960" class="LineNr"> 7960 </span> 0/imm32/no-rm32 +<span id="L7961" class="LineNr"> 7961 </span> 0/imm32/no-r32 +<span id="L7962" class="LineNr"> 7962 </span> 0/imm32/no-imm32 +<span id="L7963" class="LineNr"> 7963 </span> 0/imm32/no-disp32 +<span id="L7964" class="LineNr"> 7964 </span> 0/imm32/no-output +<span id="L7965" class="LineNr"> 7965 </span> <a href='mu.subx.html#L7966'>_Primitive-loop-if-></a>/imm32/next +<span id="L7966" class="LineNr"> 7966 </span><span class="subxMinorFunction">_Primitive-loop-if-></span>: +<span id="L7967" class="LineNr"> 7967 </span> <span class="Constant">"loop-if->"</span>/imm32/name +<span id="L7968" class="LineNr"> 7968 </span> 0/imm32/inouts +<span id="L7969" class="LineNr"> 7969 </span> 0/imm32/outputs +<span id="L7970" class="LineNr"> 7970 </span> <span class="Constant">"0f 8f/jump-if-> loop/disp32"</span>/imm32/subx-name +<span id="L7971" class="LineNr"> 7971 </span> 0/imm32/no-rm32 +<span id="L7972" class="LineNr"> 7972 </span> 0/imm32/no-r32 +<span id="L7973" class="LineNr"> 7973 </span> 0/imm32/no-imm32 +<span id="L7974" class="LineNr"> 7974 </span> 0/imm32/no-disp32 +<span id="L7975" class="LineNr"> 7975 </span> 0/imm32/no-output +<span id="L7976" class="LineNr"> 7976 </span> <a href='mu.subx.html#L7977'>_Primitive-loop</a>/imm32/next <span class="subxComment"># we probably don't need an unconditional break</span> +<span id="L7977" class="LineNr"> 7977 </span><span class="subxMinorFunction">_Primitive-loop</span>: +<span id="L7978" class="LineNr"> 7978 </span> <span class="Constant">"loop"</span>/imm32/name +<span id="L7979" class="LineNr"> 7979 </span> 0/imm32/inouts +<span id="L7980" class="LineNr"> 7980 </span> 0/imm32/outputs +<span id="L7981" class="LineNr"> 7981 </span> <span class="Constant">"e9/jump loop/disp32"</span>/imm32/subx-name +<span id="L7982" class="LineNr"> 7982 </span> 0/imm32/no-rm32 +<span id="L7983" class="LineNr"> 7983 </span> 0/imm32/no-r32 +<span id="L7984" class="LineNr"> 7984 </span> 0/imm32/no-imm32 +<span id="L7985" class="LineNr"> 7985 </span> 0/imm32/no-disp32 +<span id="L7986" class="LineNr"> 7986 </span> 0/imm32/no-output +<span id="L7987" class="LineNr"> 7987 </span> <a href='mu.subx.html#L7989'>_Primitive-break-if-addr<-named</a>/imm32/next +<span id="L7988" class="LineNr"> 7988 </span><span class="subxH1Comment"># - branches to named blocks</span> +<span id="L7989" class="LineNr"> 7989 </span><span class="subxMinorFunction">_Primitive-break-if-addr<-named</span>: +<span id="L7990" class="LineNr"> 7990 </span> <span class="Constant">"break-if-addr<"</span>/imm32/name +<span id="L7991" class="LineNr"> 7991 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L7992" class="LineNr"> 7992 </span> 0/imm32/outputs +<span id="L7993" class="LineNr"> 7993 </span> <span class="Constant">"0f 82/jump-if-addr<"</span>/imm32/subx-name +<span id="L7994" class="LineNr"> 7994 </span> 0/imm32/no-rm32 +<span id="L7995" class="LineNr"> 7995 </span> 0/imm32/no-r32 +<span id="L7996" class="LineNr"> 7996 </span> 0/imm32/no-imm32 +<span id="L7997" class="LineNr"> 7997 </span> 1/imm32/disp32-is-first-inout +<span id="L7998" class="LineNr"> 7998 </span> 0/imm32/no-output +<span id="L7999" class="LineNr"> 7999 </span> <a href='mu.subx.html#L8000'>_Primitive-break-if-addr>=-named</a>/imm32/next +<span id="L8000" class="LineNr"> 8000 </span><span class="subxMinorFunction">_Primitive-break-if-addr>=-named</span>: +<span id="L8001" class="LineNr"> 8001 </span> <span class="Constant">"break-if-addr>="</span>/imm32/name +<span id="L8002" class="LineNr"> 8002 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L8003" class="LineNr"> 8003 </span> 0/imm32/outputs +<span id="L8004" class="LineNr"> 8004 </span> <span class="Constant">"0f 83/jump-if-addr>="</span>/imm32/subx-name +<span id="L8005" class="LineNr"> 8005 </span> 0/imm32/no-rm32 +<span id="L8006" class="LineNr"> 8006 </span> 0/imm32/no-r32 +<span id="L8007" class="LineNr"> 8007 </span> 0/imm32/no-imm32 +<span id="L8008" class="LineNr"> 8008 </span> 1/imm32/disp32-is-first-inout +<span id="L8009" class="LineNr"> 8009 </span> 0/imm32/no-output +<span id="L8010" class="LineNr"> 8010 </span> <a href='mu.subx.html#L8011'>_Primitive-break-if-=-named</a>/imm32/next +<span id="L8011" class="LineNr"> 8011 </span><span class="subxMinorFunction">_Primitive-break-if-=-named</span>: +<span id="L8012" class="LineNr"> 8012 </span> <span class="Constant">"break-if-="</span>/imm32/name +<span id="L8013" class="LineNr"> 8013 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L8014" class="LineNr"> 8014 </span> 0/imm32/outputs +<span id="L8015" class="LineNr"> 8015 </span> <span class="Constant">"0f 84/jump-if-="</span>/imm32/subx-name +<span id="L8016" class="LineNr"> 8016 </span> 0/imm32/no-rm32 +<span id="L8017" class="LineNr"> 8017 </span> 0/imm32/no-r32 +<span id="L8018" class="LineNr"> 8018 </span> 0/imm32/no-imm32 +<span id="L8019" class="LineNr"> 8019 </span> 1/imm32/disp32-is-first-inout +<span id="L8020" class="LineNr"> 8020 </span> 0/imm32/no-output +<span id="L8021" class="LineNr"> 8021 </span> <a href='mu.subx.html#L8022'>_Primitive-break-if-!=-named</a>/imm32/next +<span id="L8022" class="LineNr"> 8022 </span><span class="subxMinorFunction">_Primitive-break-if-!=-named</span>: +<span id="L8023" class="LineNr"> 8023 </span> <span class="Constant">"break-if-!="</span>/imm32/name +<span id="L8024" class="LineNr"> 8024 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L8025" class="LineNr"> 8025 </span> 0/imm32/outputs +<span id="L8026" class="LineNr"> 8026 </span> <span class="Constant">"0f 85/jump-if-!="</span>/imm32/subx-name +<span id="L8027" class="LineNr"> 8027 </span> 0/imm32/no-rm32 +<span id="L8028" class="LineNr"> 8028 </span> 0/imm32/no-r32 +<span id="L8029" class="LineNr"> 8029 </span> 0/imm32/no-imm32 +<span id="L8030" class="LineNr"> 8030 </span> 1/imm32/disp32-is-first-inout +<span id="L8031" class="LineNr"> 8031 </span> 0/imm32/no-output +<span id="L8032" class="LineNr"> 8032 </span> <a href='mu.subx.html#L8033'>_Primitive-break-if-addr<=-named</a>/imm32/next +<span id="L8033" class="LineNr"> 8033 </span><span class="subxMinorFunction">_Primitive-break-if-addr<=-named</span>: +<span id="L8034" class="LineNr"> 8034 </span> <span class="Constant">"break-if-addr<="</span>/imm32/name +<span id="L8035" class="LineNr"> 8035 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L8036" class="LineNr"> 8036 </span> 0/imm32/outputs +<span id="L8037" class="LineNr"> 8037 </span> <span class="Constant">"0f 86/jump-if-addr<="</span>/imm32/subx-name +<span id="L8038" class="LineNr"> 8038 </span> 0/imm32/no-rm32 +<span id="L8039" class="LineNr"> 8039 </span> 0/imm32/no-r32 +<span id="L8040" class="LineNr"> 8040 </span> 0/imm32/no-imm32 +<span id="L8041" class="LineNr"> 8041 </span> 1/imm32/disp32-is-first-inout +<span id="L8042" class="LineNr"> 8042 </span> 0/imm32/no-output +<span id="L8043" class="LineNr"> 8043 </span> <a href='mu.subx.html#L8044'>_Primitive-break-if-addr>-named</a>/imm32/next +<span id="L8044" class="LineNr"> 8044 </span><span class="subxMinorFunction">_Primitive-break-if-addr>-named</span>: +<span id="L8045" class="LineNr"> 8045 </span> <span class="Constant">"break-if-addr>"</span>/imm32/name +<span id="L8046" class="LineNr"> 8046 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L8047" class="LineNr"> 8047 </span> 0/imm32/outputs +<span id="L8048" class="LineNr"> 8048 </span> <span class="Constant">"0f 87/jump-if-addr>"</span>/imm32/subx-name +<span id="L8049" class="LineNr"> 8049 </span> 0/imm32/no-rm32 +<span id="L8050" class="LineNr"> 8050 </span> 0/imm32/no-r32 +<span id="L8051" class="LineNr"> 8051 </span> 0/imm32/no-imm32 +<span id="L8052" class="LineNr"> 8052 </span> 1/imm32/disp32-is-first-inout +<span id="L8053" class="LineNr"> 8053 </span> 0/imm32/no-output +<span id="L8054" class="LineNr"> 8054 </span> <a href='mu.subx.html#L8055'>_Primitive-break-if-<-named</a>/imm32/next +<span id="L8055" class="LineNr"> 8055 </span><span class="subxMinorFunction">_Primitive-break-if-<-named</span>: +<span id="L8056" class="LineNr"> 8056 </span> <span class="Constant">"break-if-<"</span>/imm32/name +<span id="L8057" class="LineNr"> 8057 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L8058" class="LineNr"> 8058 </span> 0/imm32/outputs +<span id="L8059" class="LineNr"> 8059 </span> <span class="Constant">"0f 8c/jump-if-<"</span>/imm32/subx-name +<span id="L8060" class="LineNr"> 8060 </span> 0/imm32/no-rm32 +<span id="L8061" class="LineNr"> 8061 </span> 0/imm32/no-r32 +<span id="L8062" class="LineNr"> 8062 </span> 0/imm32/no-imm32 +<span id="L8063" class="LineNr"> 8063 </span> 1/imm32/disp32-is-first-inout +<span id="L8064" class="LineNr"> 8064 </span> 0/imm32/no-output +<span id="L8065" class="LineNr"> 8065 </span> <a href='mu.subx.html#L8066'>_Primitive-break-if->=-named</a>/imm32/next +<span id="L8066" class="LineNr"> 8066 </span><span class="subxMinorFunction">_Primitive-break-if->=-named</span>: +<span id="L8067" class="LineNr"> 8067 </span> <span class="Constant">"break-if->="</span>/imm32/name +<span id="L8068" class="LineNr"> 8068 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L8069" class="LineNr"> 8069 </span> 0/imm32/outputs +<span id="L8070" class="LineNr"> 8070 </span> <span class="Constant">"0f 8d/jump-if->="</span>/imm32/subx-name +<span id="L8071" class="LineNr"> 8071 </span> 0/imm32/no-rm32 +<span id="L8072" class="LineNr"> 8072 </span> 0/imm32/no-r32 +<span id="L8073" class="LineNr"> 8073 </span> 0/imm32/no-imm32 +<span id="L8074" class="LineNr"> 8074 </span> 1/imm32/disp32-is-first-inout +<span id="L8075" class="LineNr"> 8075 </span> 0/imm32/no-output +<span id="L8076" class="LineNr"> 8076 </span> <a href='mu.subx.html#L8077'>_Primitive-break-if-<=-named</a>/imm32/next +<span id="L8077" class="LineNr"> 8077 </span><span class="subxMinorFunction">_Primitive-break-if-<=-named</span>: +<span id="L8078" class="LineNr"> 8078 </span> <span class="Constant">"break-if-<="</span>/imm32/name +<span id="L8079" class="LineNr"> 8079 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L8080" class="LineNr"> 8080 </span> 0/imm32/outputs +<span id="L8081" class="LineNr"> 8081 </span> <span class="Constant">"0f 8e/jump-if-<="</span>/imm32/subx-name +<span id="L8082" class="LineNr"> 8082 </span> 0/imm32/no-rm32 +<span id="L8083" class="LineNr"> 8083 </span> 0/imm32/no-r32 +<span id="L8084" class="LineNr"> 8084 </span> 0/imm32/no-imm32 +<span id="L8085" class="LineNr"> 8085 </span> 1/imm32/disp32-is-first-inout +<span id="L8086" class="LineNr"> 8086 </span> 0/imm32/no-output +<span id="L8087" class="LineNr"> 8087 </span> <a href='mu.subx.html#L8088'>_Primitive-break-if->-named</a>/imm32/next +<span id="L8088" class="LineNr"> 8088 </span><span class="subxMinorFunction">_Primitive-break-if->-named</span>: +<span id="L8089" class="LineNr"> 8089 </span> <span class="Constant">"break-if->"</span>/imm32/name +<span id="L8090" class="LineNr"> 8090 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L8091" class="LineNr"> 8091 </span> 0/imm32/outputs +<span id="L8092" class="LineNr"> 8092 </span> <span class="Constant">"0f 8f/jump-if->"</span>/imm32/subx-name +<span id="L8093" class="LineNr"> 8093 </span> 0/imm32/no-rm32 +<span id="L8094" class="LineNr"> 8094 </span> 0/imm32/no-r32 +<span id="L8095" class="LineNr"> 8095 </span> 0/imm32/no-imm32 +<span id="L8096" class="LineNr"> 8096 </span> 1/imm32/disp32-is-first-inout +<span id="L8097" class="LineNr"> 8097 </span> 0/imm32/no-output +<span id="L8098" class="LineNr"> 8098 </span> <a href='mu.subx.html#L8099'>_Primitive-break-named</a>/imm32/next +<span id="L8099" class="LineNr"> 8099 </span><span class="subxMinorFunction">_Primitive-break-named</span>: +<span id="L8100" class="LineNr"> 8100 </span> <span class="Constant">"break"</span>/imm32/name +<span id="L8101" class="LineNr"> 8101 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L8102" class="LineNr"> 8102 </span> 0/imm32/outputs +<span id="L8103" class="LineNr"> 8103 </span> <span class="Constant">"e9/jump"</span>/imm32/subx-name +<span id="L8104" class="LineNr"> 8104 </span> 0/imm32/no-rm32 +<span id="L8105" class="LineNr"> 8105 </span> 0/imm32/no-r32 +<span id="L8106" class="LineNr"> 8106 </span> 0/imm32/no-imm32 +<span id="L8107" class="LineNr"> 8107 </span> 1/imm32/disp32-is-first-inout +<span id="L8108" class="LineNr"> 8108 </span> 0/imm32/no-output +<span id="L8109" class="LineNr"> 8109 </span> <a href='mu.subx.html#L8110'>_Primitive-loop-if-addr<-named</a>/imm32/next +<span id="L8110" class="LineNr"> 8110 </span><span class="subxMinorFunction">_Primitive-loop-if-addr<-named</span>: +<span id="L8111" class="LineNr"> 8111 </span> <span class="Constant">"loop-if-addr<"</span>/imm32/name +<span id="L8112" class="LineNr"> 8112 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L8113" class="LineNr"> 8113 </span> 0/imm32/outputs +<span id="L8114" class="LineNr"> 8114 </span> <span class="Constant">"0f 82/jump-if-addr<"</span>/imm32/subx-name +<span id="L8115" class="LineNr"> 8115 </span> 0/imm32/no-rm32 +<span id="L8116" class="LineNr"> 8116 </span> 0/imm32/no-r32 +<span id="L8117" class="LineNr"> 8117 </span> 0/imm32/no-imm32 +<span id="L8118" class="LineNr"> 8118 </span> 1/imm32/disp32-is-first-inout +<span id="L8119" class="LineNr"> 8119 </span> 0/imm32/no-output +<span id="L8120" class="LineNr"> 8120 </span> <a href='mu.subx.html#L8121'>_Primitive-loop-if-addr>=-named</a>/imm32/next +<span id="L8121" class="LineNr"> 8121 </span><span class="subxMinorFunction">_Primitive-loop-if-addr>=-named</span>: +<span id="L8122" class="LineNr"> 8122 </span> <span class="Constant">"loop-if-addr>="</span>/imm32/name +<span id="L8123" class="LineNr"> 8123 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L8124" class="LineNr"> 8124 </span> 0/imm32/outputs +<span id="L8125" class="LineNr"> 8125 </span> <span class="Constant">"0f 83/jump-if-addr>="</span>/imm32/subx-name +<span id="L8126" class="LineNr"> 8126 </span> 0/imm32/no-rm32 +<span id="L8127" class="LineNr"> 8127 </span> 0/imm32/no-r32 +<span id="L8128" class="LineNr"> 8128 </span> 0/imm32/no-imm32 +<span id="L8129" class="LineNr"> 8129 </span> 1/imm32/disp32-is-first-inout +<span id="L8130" class="LineNr"> 8130 </span> 0/imm32/no-output +<span id="L8131" class="LineNr"> 8131 </span> <a href='mu.subx.html#L8132'>_Primitive-loop-if-=-named</a>/imm32/next +<span id="L8132" class="LineNr"> 8132 </span><span class="subxMinorFunction">_Primitive-loop-if-=-named</span>: +<span id="L8133" class="LineNr"> 8133 </span> <span class="Constant">"loop-if-="</span>/imm32/name +<span id="L8134" class="LineNr"> 8134 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L8135" class="LineNr"> 8135 </span> 0/imm32/outputs +<span id="L8136" class="LineNr"> 8136 </span> <span class="Constant">"0f 84/jump-if-="</span>/imm32/subx-name +<span id="L8137" class="LineNr"> 8137 </span> 0/imm32/no-rm32 +<span id="L8138" class="LineNr"> 8138 </span> 0/imm32/no-r32 +<span id="L8139" class="LineNr"> 8139 </span> 0/imm32/no-imm32 +<span id="L8140" class="LineNr"> 8140 </span> 1/imm32/disp32-is-first-inout +<span id="L8141" class="LineNr"> 8141 </span> 0/imm32/no-output +<span id="L8142" class="LineNr"> 8142 </span> <a href='mu.subx.html#L8143'>_Primitive-loop-if-!=-named</a>/imm32/next +<span id="L8143" class="LineNr"> 8143 </span><span class="subxMinorFunction">_Primitive-loop-if-!=-named</span>: +<span id="L8144" class="LineNr"> 8144 </span> <span class="Constant">"loop-if-!="</span>/imm32/name +<span id="L8145" class="LineNr"> 8145 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L8146" class="LineNr"> 8146 </span> 0/imm32/outputs +<span id="L8147" class="LineNr"> 8147 </span> <span class="Constant">"0f 85/jump-if-!="</span>/imm32/subx-name +<span id="L8148" class="LineNr"> 8148 </span> 0/imm32/no-rm32 +<span id="L8149" class="LineNr"> 8149 </span> 0/imm32/no-r32 +<span id="L8150" class="LineNr"> 8150 </span> 0/imm32/no-imm32 +<span id="L8151" class="LineNr"> 8151 </span> 1/imm32/disp32-is-first-inout +<span id="L8152" class="LineNr"> 8152 </span> 0/imm32/no-output +<span id="L8153" class="LineNr"> 8153 </span> <a href='mu.subx.html#L8154'>_Primitive-loop-if-addr<=-named</a>/imm32/next +<span id="L8154" class="LineNr"> 8154 </span><span class="subxMinorFunction">_Primitive-loop-if-addr<=-named</span>: +<span id="L8155" class="LineNr"> 8155 </span> <span class="Constant">"loop-if-addr<="</span>/imm32/name +<span id="L8156" class="LineNr"> 8156 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L8157" class="LineNr"> 8157 </span> 0/imm32/outputs +<span id="L8158" class="LineNr"> 8158 </span> <span class="Constant">"0f 86/jump-if-addr<="</span>/imm32/subx-name +<span id="L8159" class="LineNr"> 8159 </span> 0/imm32/no-rm32 +<span id="L8160" class="LineNr"> 8160 </span> 0/imm32/no-r32 +<span id="L8161" class="LineNr"> 8161 </span> 0/imm32/no-imm32 +<span id="L8162" class="LineNr"> 8162 </span> 1/imm32/disp32-is-first-inout +<span id="L8163" class="LineNr"> 8163 </span> 0/imm32/no-output +<span id="L8164" class="LineNr"> 8164 </span> <a href='mu.subx.html#L8165'>_Primitive-loop-if-addr>-named</a>/imm32/next +<span id="L8165" class="LineNr"> 8165 </span><span class="subxMinorFunction">_Primitive-loop-if-addr>-named</span>: +<span id="L8166" class="LineNr"> 8166 </span> <span class="Constant">"loop-if-addr>"</span>/imm32/name +<span id="L8167" class="LineNr"> 8167 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L8168" class="LineNr"> 8168 </span> 0/imm32/outputs +<span id="L8169" class="LineNr"> 8169 </span> <span class="Constant">"0f 87/jump-if-addr>"</span>/imm32/subx-name +<span id="L8170" class="LineNr"> 8170 </span> 0/imm32/no-rm32 +<span id="L8171" class="LineNr"> 8171 </span> 0/imm32/no-r32 +<span id="L8172" class="LineNr"> 8172 </span> 0/imm32/no-imm32 +<span id="L8173" class="LineNr"> 8173 </span> 1/imm32/disp32-is-first-inout +<span id="L8174" class="LineNr"> 8174 </span> 0/imm32/no-output +<span id="L8175" class="LineNr"> 8175 </span> <a href='mu.subx.html#L8176'>_Primitive-loop-if-<-named</a>/imm32/next +<span id="L8176" class="LineNr"> 8176 </span><span class="subxMinorFunction">_Primitive-loop-if-<-named</span>: +<span id="L8177" class="LineNr"> 8177 </span> <span class="Constant">"loop-if-<"</span>/imm32/name +<span id="L8178" class="LineNr"> 8178 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L8179" class="LineNr"> 8179 </span> 0/imm32/outputs +<span id="L8180" class="LineNr"> 8180 </span> <span class="Constant">"0f 8c/jump-if-<"</span>/imm32/subx-name +<span id="L8181" class="LineNr"> 8181 </span> 0/imm32/no-rm32 +<span id="L8182" class="LineNr"> 8182 </span> 0/imm32/no-r32 +<span id="L8183" class="LineNr"> 8183 </span> 0/imm32/no-imm32 +<span id="L8184" class="LineNr"> 8184 </span> 1/imm32/disp32-is-first-inout +<span id="L8185" class="LineNr"> 8185 </span> 0/imm32/no-output +<span id="L8186" class="LineNr"> 8186 </span> <a href='mu.subx.html#L8187'>_Primitive-loop-if->=-named</a>/imm32/next +<span id="L8187" class="LineNr"> 8187 </span><span class="subxMinorFunction">_Primitive-loop-if->=-named</span>: +<span id="L8188" class="LineNr"> 8188 </span> <span class="Constant">"loop-if->="</span>/imm32/name +<span id="L8189" class="LineNr"> 8189 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L8190" class="LineNr"> 8190 </span> 0/imm32/outputs +<span id="L8191" class="LineNr"> 8191 </span> <span class="Constant">"0f 8d/jump-if->="</span>/imm32/subx-name +<span id="L8192" class="LineNr"> 8192 </span> 0/imm32/no-rm32 +<span id="L8193" class="LineNr"> 8193 </span> 0/imm32/no-r32 +<span id="L8194" class="LineNr"> 8194 </span> 0/imm32/no-imm32 +<span id="L8195" class="LineNr"> 8195 </span> 1/imm32/disp32-is-first-inout +<span id="L8196" class="LineNr"> 8196 </span> 0/imm32/no-output +<span id="L8197" class="LineNr"> 8197 </span> <a href='mu.subx.html#L8198'>_Primitive-loop-if-<=-named</a>/imm32/next +<span id="L8198" class="LineNr"> 8198 </span><span class="subxMinorFunction">_Primitive-loop-if-<=-named</span>: +<span id="L8199" class="LineNr"> 8199 </span> <span class="Constant">"loop-if-<="</span>/imm32/name +<span id="L8200" class="LineNr"> 8200 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L8201" class="LineNr"> 8201 </span> 0/imm32/outputs +<span id="L8202" class="LineNr"> 8202 </span> <span class="Constant">"0f 8e/jump-if-<="</span>/imm32/subx-name +<span id="L8203" class="LineNr"> 8203 </span> 0/imm32/no-rm32 +<span id="L8204" class="LineNr"> 8204 </span> 0/imm32/no-r32 +<span id="L8205" class="LineNr"> 8205 </span> 0/imm32/no-imm32 +<span id="L8206" class="LineNr"> 8206 </span> 1/imm32/disp32-is-first-inout +<span id="L8207" class="LineNr"> 8207 </span> 0/imm32/no-output +<span id="L8208" class="LineNr"> 8208 </span> <a href='mu.subx.html#L8209'>_Primitive-loop-if->-named</a>/imm32/next +<span id="L8209" class="LineNr"> 8209 </span><span class="subxMinorFunction">_Primitive-loop-if->-named</span>: +<span id="L8210" class="LineNr"> 8210 </span> <span class="Constant">"loop-if->"</span>/imm32/name +<span id="L8211" class="LineNr"> 8211 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L8212" class="LineNr"> 8212 </span> 0/imm32/outputs +<span id="L8213" class="LineNr"> 8213 </span> <span class="Constant">"0f 8f/jump-if->"</span>/imm32/subx-name +<span id="L8214" class="LineNr"> 8214 </span> 0/imm32/no-rm32 +<span id="L8215" class="LineNr"> 8215 </span> 0/imm32/no-r32 +<span id="L8216" class="LineNr"> 8216 </span> 0/imm32/no-imm32 +<span id="L8217" class="LineNr"> 8217 </span> 1/imm32/disp32-is-first-inout +<span id="L8218" class="LineNr"> 8218 </span> 0/imm32/no-output +<span id="L8219" class="LineNr"> 8219 </span> <a href='mu.subx.html#L8220'>_Primitive-loop-named</a>/imm32/next <span class="subxComment"># we probably don't need an unconditional break</span> +<span id="L8220" class="LineNr"> 8220 </span><span class="subxMinorFunction">_Primitive-loop-named</span>: +<span id="L8221" class="LineNr"> 8221 </span> <span class="Constant">"loop"</span>/imm32/name +<span id="L8222" class="LineNr"> 8222 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/inouts +<span id="L8223" class="LineNr"> 8223 </span> 0/imm32/outputs +<span id="L8224" class="LineNr"> 8224 </span> <span class="Constant">"e9/jump"</span>/imm32/subx-name +<span id="L8225" class="LineNr"> 8225 </span> 0/imm32/no-rm32 +<span id="L8226" class="LineNr"> 8226 </span> 0/imm32/no-r32 +<span id="L8227" class="LineNr"> 8227 </span> 0/imm32/no-imm32 +<span id="L8228" class="LineNr"> 8228 </span> 1/imm32/disp32-is-first-inout +<span id="L8229" class="LineNr"> 8229 </span> 0/imm32/no-output +<span id="L8230" class="LineNr"> 8230 </span> 0/imm32/next +<span id="L8231" class="LineNr"> 8231 </span> +<span id="L8232" class="LineNr"> 8232 </span><span class="SpecialChar">Single-int-var-in-mem</span>: +<span id="L8233" class="LineNr"> 8233 </span> <span class="SpecialChar"><a href='mu.subx.html#L8236'>Int-var-in-mem</a></span>/imm32 <span id="L8234" class="LineNr"> 8234 </span> 0/imm32/next <span id="L8235" class="LineNr"> 8235 </span> -<span id="L8236" class="LineNr"> 8236 </span><span class="SpecialChar">Single-int-var-in-mem</span>: -<span id="L8237" class="LineNr"> 8237 </span> <span class="SpecialChar"><a href='mu.subx.html#L8240'>Int-var-in-mem</a></span>/imm32 -<span id="L8238" class="LineNr"> 8238 </span> 0/imm32/next -<span id="L8239" class="LineNr"> 8239 </span> -<span id="L8240" class="LineNr"> 8240 </span><span class="SpecialChar">Int-var-in-mem</span>: -<span id="L8241" class="LineNr"> 8241 </span> <span class="Constant">"arg1"</span>/imm32/name -<span id="L8242" class="LineNr"> 8242 </span> <span class="SpecialChar"><a href='mu.subx.html#L8355'>Type-int</a></span>/imm32 -<span id="L8243" class="LineNr"> 8243 </span> 1/imm32/some-block-depth -<span id="L8244" class="LineNr"> 8244 </span> 1/imm32/some-stack-offset -<span id="L8245" class="LineNr"> 8245 </span> 0/imm32/no-register +<span id="L8236" class="LineNr"> 8236 </span><span class="SpecialChar">Int-var-in-mem</span>: +<span id="L8237" class="LineNr"> 8237 </span> <span class="Constant">"arg1"</span>/imm32/name +<span id="L8238" class="LineNr"> 8238 </span> <span class="SpecialChar"><a href='mu.subx.html#L8351'>Type-int</a></span>/imm32 +<span id="L8239" class="LineNr"> 8239 </span> 1/imm32/some-block-depth +<span id="L8240" class="LineNr"> 8240 </span> 1/imm32/some-stack-offset +<span id="L8241" class="LineNr"> 8241 </span> 0/imm32/no-register +<span id="L8242" class="LineNr"> 8242 </span> +<span id="L8243" class="LineNr"> 8243 </span><span class="SpecialChar">Two-args-int-stack-int-reg</span>: +<span id="L8244" class="LineNr"> 8244 </span> <span class="SpecialChar"><a href='mu.subx.html#L8236'>Int-var-in-mem</a></span>/imm32 +<span id="L8245" class="LineNr"> 8245 </span> <span class="SpecialChar"><a href='mu.subx.html#L8263'>Single-int-var-in-some-register</a></span>/imm32/next <span id="L8246" class="LineNr"> 8246 </span> -<span id="L8247" class="LineNr"> 8247 </span><span class="SpecialChar">Two-args-int-stack-int-reg</span>: -<span id="L8248" class="LineNr"> 8248 </span> <span class="SpecialChar"><a href='mu.subx.html#L8240'>Int-var-in-mem</a></span>/imm32 -<span id="L8249" class="LineNr"> 8249 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Single-int-var-in-some-register</a></span>/imm32/next +<span id="L8247" class="LineNr"> 8247 </span><span class="SpecialChar">Two-args-int-reg-int-stack</span>: +<span id="L8248" class="LineNr"> 8248 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Int-var-in-some-register</a></span>/imm32 +<span id="L8249" class="LineNr"> 8249 </span> <span class="SpecialChar"><a href='mu.subx.html#L8232'>Single-int-var-in-mem</a></span>/imm32/next <span id="L8250" class="LineNr"> 8250 </span> -<span id="L8251" class="LineNr"> 8251 </span><span class="SpecialChar">Two-args-int-reg-int-stack</span>: -<span id="L8252" class="LineNr"> 8252 </span> <span class="SpecialChar"><a href='mu.subx.html#L8271'>Int-var-in-some-register</a></span>/imm32 -<span id="L8253" class="LineNr"> 8253 </span> <span class="SpecialChar"><a href='mu.subx.html#L8236'>Single-int-var-in-mem</a></span>/imm32/next +<span id="L8251" class="LineNr"> 8251 </span><span class="SpecialChar">Two-args-int-eax-int-literal</span>: +<span id="L8252" class="LineNr"> 8252 </span> <span class="SpecialChar"><a href='mu.subx.html#L8278'>Int-var-in-eax</a></span>/imm32 +<span id="L8253" class="LineNr"> 8253 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/next <span id="L8254" class="LineNr"> 8254 </span> -<span id="L8255" class="LineNr"> 8255 </span><span class="SpecialChar">Two-args-int-eax-int-literal</span>: -<span id="L8256" class="LineNr"> 8256 </span> <span class="SpecialChar"><a href='mu.subx.html#L8282'>Int-var-in-eax</a></span>/imm32 -<span id="L8257" class="LineNr"> 8257 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/next +<span id="L8255" class="LineNr"> 8255 </span><span class="SpecialChar">Int-var-and-literal</span>: +<span id="L8256" class="LineNr"> 8256 </span> <span class="SpecialChar"><a href='mu.subx.html#L8236'>Int-var-in-mem</a></span>/imm32 +<span id="L8257" class="LineNr"> 8257 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/next <span id="L8258" class="LineNr"> 8258 </span> -<span id="L8259" class="LineNr"> 8259 </span><span class="SpecialChar">Int-var-and-literal</span>: -<span id="L8260" class="LineNr"> 8260 </span> <span class="SpecialChar"><a href='mu.subx.html#L8240'>Int-var-in-mem</a></span>/imm32 -<span id="L8261" class="LineNr"> 8261 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/next +<span id="L8259" class="LineNr"> 8259 </span><span class="SpecialChar">Int-var-in-register-and-literal</span>: +<span id="L8260" class="LineNr"> 8260 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Int-var-in-some-register</a></span>/imm32 +<span id="L8261" class="LineNr"> 8261 </span> <span class="SpecialChar"><a href='mu.subx.html#L8340'>Single-lit-var</a></span>/imm32/next <span id="L8262" class="LineNr"> 8262 </span> -<span id="L8263" class="LineNr"> 8263 </span><span class="SpecialChar">Int-var-in-register-and-literal</span>: -<span id="L8264" class="LineNr"> 8264 </span> <span class="SpecialChar"><a href='mu.subx.html#L8271'>Int-var-in-some-register</a></span>/imm32 -<span id="L8265" class="LineNr"> 8265 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Single-lit-var</a></span>/imm32/next +<span id="L8263" class="LineNr"> 8263 </span><span class="SpecialChar">Single-int-var-in-some-register</span>: +<span id="L8264" class="LineNr"> 8264 </span> <span class="SpecialChar"><a href='mu.subx.html#L8267'>Int-var-in-some-register</a></span>/imm32 +<span id="L8265" class="LineNr"> 8265 </span> 0/imm32/next <span id="L8266" class="LineNr"> 8266 </span> -<span id="L8267" class="LineNr"> 8267 </span><span class="SpecialChar">Single-int-var-in-some-register</span>: -<span id="L8268" class="LineNr"> 8268 </span> <span class="SpecialChar"><a href='mu.subx.html#L8271'>Int-var-in-some-register</a></span>/imm32 -<span id="L8269" class="LineNr"> 8269 </span> 0/imm32/next -<span id="L8270" class="LineNr"> 8270 </span> -<span id="L8271" class="LineNr"> 8271 </span><span class="SpecialChar">Int-var-in-some-register</span>: -<span id="L8272" class="LineNr"> 8272 </span> <span class="Constant">"arg1"</span>/imm32/name -<span id="L8273" class="LineNr"> 8273 </span> <span class="SpecialChar"><a href='mu.subx.html#L8355'>Type-int</a></span>/imm32 -<span id="L8274" class="LineNr"> 8274 </span> 1/imm32/some-block-depth -<span id="L8275" class="LineNr"> 8275 </span> 0/imm32/no-stack-offset -<span id="L8276" class="LineNr"> 8276 </span> <span class="SpecialChar"><a href='mu.subx.html#L339'>Any-register</a></span>/imm32 +<span id="L8267" class="LineNr"> 8267 </span><span class="SpecialChar">Int-var-in-some-register</span>: +<span id="L8268" class="LineNr"> 8268 </span> <span class="Constant">"arg1"</span>/imm32/name +<span id="L8269" class="LineNr"> 8269 </span> <span class="SpecialChar"><a href='mu.subx.html#L8351'>Type-int</a></span>/imm32 +<span id="L8270" class="LineNr"> 8270 </span> 1/imm32/some-block-depth +<span id="L8271" class="LineNr"> 8271 </span> 0/imm32/no-stack-offset +<span id="L8272" class="LineNr"> 8272 </span> <span class="SpecialChar"><a href='mu.subx.html#L339'>Any-register</a></span>/imm32 +<span id="L8273" class="LineNr"> 8273 </span> +<span id="L8274" class="LineNr"> 8274 </span><span class="SpecialChar">Single-int-var-in-eax</span>: +<span id="L8275" class="LineNr"> 8275 </span> <span class="SpecialChar"><a href='mu.subx.html#L8278'>Int-var-in-eax</a></span>/imm32 +<span id="L8276" class="LineNr"> 8276 </span> 0/imm32/next <span id="L8277" class="LineNr"> 8277 </span> -<span id="L8278" class="LineNr"> 8278 </span><span class="SpecialChar">Single-int-var-in-eax</span>: -<span id="L8279" class="LineNr"> 8279 </span> <span class="SpecialChar"><a href='mu.subx.html#L8282'>Int-var-in-eax</a></span>/imm32 -<span id="L8280" class="LineNr"> 8280 </span> 0/imm32/next -<span id="L8281" class="LineNr"> 8281 </span> -<span id="L8282" class="LineNr"> 8282 </span><span class="SpecialChar">Int-var-in-eax</span>: -<span id="L8283" class="LineNr"> 8283 </span> <span class="Constant">"arg1"</span>/imm32/name -<span id="L8284" class="LineNr"> 8284 </span> <span class="SpecialChar"><a href='mu.subx.html#L8355'>Type-int</a></span>/imm32 -<span id="L8285" class="LineNr"> 8285 </span> 1/imm32/some-block-depth -<span id="L8286" class="LineNr"> 8286 </span> 0/imm32/no-stack-offset -<span id="L8287" class="LineNr"> 8287 </span> <span class="Constant">"eax"</span>/imm32/register +<span id="L8278" class="LineNr"> 8278 </span><span class="SpecialChar">Int-var-in-eax</span>: +<span id="L8279" class="LineNr"> 8279 </span> <span class="Constant">"arg1"</span>/imm32/name +<span id="L8280" class="LineNr"> 8280 </span> <span class="SpecialChar"><a href='mu.subx.html#L8351'>Type-int</a></span>/imm32 +<span id="L8281" class="LineNr"> 8281 </span> 1/imm32/some-block-depth +<span id="L8282" class="LineNr"> 8282 </span> 0/imm32/no-stack-offset +<span id="L8283" class="LineNr"> 8283 </span> <span class="Constant">"eax"</span>/imm32/register +<span id="L8284" class="LineNr"> 8284 </span> +<span id="L8285" class="LineNr"> 8285 </span><span class="SpecialChar">Single-int-var-in-ecx</span>: +<span id="L8286" class="LineNr"> 8286 </span> <span class="SpecialChar"><a href='mu.subx.html#L8289'>Int-var-in-ecx</a></span>/imm32 +<span id="L8287" class="LineNr"> 8287 </span> 0/imm32/next <span id="L8288" class="LineNr"> 8288 </span> -<span id="L8289" class="LineNr"> 8289 </span><span class="SpecialChar">Single-int-var-in-ecx</span>: -<span id="L8290" class="LineNr"> 8290 </span> <span class="SpecialChar"><a href='mu.subx.html#L8293'>Int-var-in-ecx</a></span>/imm32 -<span id="L8291" class="LineNr"> 8291 </span> 0/imm32/next -<span id="L8292" class="LineNr"> 8292 </span> -<span id="L8293" class="LineNr"> 8293 </span><span class="SpecialChar">Int-var-in-ecx</span>: -<span id="L8294" class="LineNr"> 8294 </span> <span class="Constant">"arg1"</span>/imm32/name -<span id="L8295" class="LineNr"> 8295 </span> <span class="SpecialChar"><a href='mu.subx.html#L8355'>Type-int</a></span>/imm32 -<span id="L8296" class="LineNr"> 8296 </span> 1/imm32/some-block-depth -<span id="L8297" class="LineNr"> 8297 </span> 0/imm32/no-stack-offset -<span id="L8298" class="LineNr"> 8298 </span> <span class="Constant">"ecx"</span>/imm32/register +<span id="L8289" class="LineNr"> 8289 </span><span class="SpecialChar">Int-var-in-ecx</span>: +<span id="L8290" class="LineNr"> 8290 </span> <span class="Constant">"arg1"</span>/imm32/name +<span id="L8291" class="LineNr"> 8291 </span> <span class="SpecialChar"><a href='mu.subx.html#L8351'>Type-int</a></span>/imm32 +<span id="L8292" class="LineNr"> 8292 </span> 1/imm32/some-block-depth +<span id="L8293" class="LineNr"> 8293 </span> 0/imm32/no-stack-offset +<span id="L8294" class="LineNr"> 8294 </span> <span class="Constant">"ecx"</span>/imm32/register +<span id="L8295" class="LineNr"> 8295 </span> +<span id="L8296" class="LineNr"> 8296 </span><span class="SpecialChar">Single-int-var-in-edx</span>: +<span id="L8297" class="LineNr"> 8297 </span> <span class="SpecialChar"><a href='mu.subx.html#L8300'>Int-var-in-edx</a></span>/imm32 +<span id="L8298" class="LineNr"> 8298 </span> 0/imm32/next <span id="L8299" class="LineNr"> 8299 </span> -<span id="L8300" class="LineNr"> 8300 </span><span class="SpecialChar">Single-int-var-in-edx</span>: -<span id="L8301" class="LineNr"> 8301 </span> <span class="SpecialChar"><a href='mu.subx.html#L8304'>Int-var-in-edx</a></span>/imm32 -<span id="L8302" class="LineNr"> 8302 </span> 0/imm32/next -<span id="L8303" class="LineNr"> 8303 </span> -<span id="L8304" class="LineNr"> 8304 </span><span class="SpecialChar">Int-var-in-edx</span>: -<span id="L8305" class="LineNr"> 8305 </span> <span class="Constant">"arg1"</span>/imm32/name -<span id="L8306" class="LineNr"> 8306 </span> <span class="SpecialChar"><a href='mu.subx.html#L8355'>Type-int</a></span>/imm32 -<span id="L8307" class="LineNr"> 8307 </span> 1/imm32/some-block-depth -<span id="L8308" class="LineNr"> 8308 </span> 0/imm32/no-stack-offset -<span id="L8309" class="LineNr"> 8309 </span> <span class="Constant">"edx"</span>/imm32/register +<span id="L8300" class="LineNr"> 8300 </span><span class="SpecialChar">Int-var-in-edx</span>: +<span id="L8301" class="LineNr"> 8301 </span> <span class="Constant">"arg1"</span>/imm32/name +<span id="L8302" class="LineNr"> 8302 </span> <span class="SpecialChar"><a href='mu.subx.html#L8351'>Type-int</a></span>/imm32 +<span id="L8303" class="LineNr"> 8303 </span> 1/imm32/some-block-depth +<span id="L8304" class="LineNr"> 8304 </span> 0/imm32/no-stack-offset +<span id="L8305" class="LineNr"> 8305 </span> <span class="Constant">"edx"</span>/imm32/register +<span id="L8306" class="LineNr"> 8306 </span> +<span id="L8307" class="LineNr"> 8307 </span><span class="SpecialChar">Single-int-var-in-ebx</span>: +<span id="L8308" class="LineNr"> 8308 </span> <span class="SpecialChar"><a href='mu.subx.html#L8311'>Int-var-in-ebx</a></span>/imm32 +<span id="L8309" class="LineNr"> 8309 </span> 0/imm32/next <span id="L8310" class="LineNr"> 8310 </span> -<span id="L8311" class="LineNr"> 8311 </span><span class="SpecialChar">Single-int-var-in-ebx</span>: -<span id="L8312" class="LineNr"> 8312 </span> <span class="SpecialChar"><a href='mu.subx.html#L8315'>Int-var-in-ebx</a></span>/imm32 -<span id="L8313" class="LineNr"> 8313 </span> 0/imm32/next -<span id="L8314" class="LineNr"> 8314 </span> -<span id="L8315" class="LineNr"> 8315 </span><span class="SpecialChar">Int-var-in-ebx</span>: -<span id="L8316" class="LineNr"> 8316 </span> <span class="Constant">"arg1"</span>/imm32/name -<span id="L8317" class="LineNr"> 8317 </span> <span class="SpecialChar"><a href='mu.subx.html#L8355'>Type-int</a></span>/imm32 -<span id="L8318" class="LineNr"> 8318 </span> 1/imm32/some-block-depth -<span id="L8319" class="LineNr"> 8319 </span> 0/imm32/no-stack-offset -<span id="L8320" class="LineNr"> 8320 </span> <span class="Constant">"ebx"</span>/imm32/register +<span id="L8311" class="LineNr"> 8311 </span><span class="SpecialChar">Int-var-in-ebx</span>: +<span id="L8312" class="LineNr"> 8312 </span> <span class="Constant">"arg1"</span>/imm32/name +<span id="L8313" class="LineNr"> 8313 </span> <span class="SpecialChar"><a href='mu.subx.html#L8351'>Type-int</a></span>/imm32 +<span id="L8314" class="LineNr"> 8314 </span> 1/imm32/some-block-depth +<span id="L8315" class="LineNr"> 8315 </span> 0/imm32/no-stack-offset +<span id="L8316" class="LineNr"> 8316 </span> <span class="Constant">"ebx"</span>/imm32/register +<span id="L8317" class="LineNr"> 8317 </span> +<span id="L8318" class="LineNr"> 8318 </span><span class="SpecialChar">Single-int-var-in-esi</span>: +<span id="L8319" class="LineNr"> 8319 </span> <span class="SpecialChar"><a href='mu.subx.html#L8322'>Int-var-in-esi</a></span>/imm32 +<span id="L8320" class="LineNr"> 8320 </span> 0/imm32/next <span id="L8321" class="LineNr"> 8321 </span> -<span id="L8322" class="LineNr"> 8322 </span><span class="SpecialChar">Single-int-var-in-esi</span>: -<span id="L8323" class="LineNr"> 8323 </span> <span class="SpecialChar"><a href='mu.subx.html#L8326'>Int-var-in-esi</a></span>/imm32 -<span id="L8324" class="LineNr"> 8324 </span> 0/imm32/next -<span id="L8325" class="LineNr"> 8325 </span> -<span id="L8326" class="LineNr"> 8326 </span><span class="SpecialChar">Int-var-in-esi</span>: -<span id="L8327" class="LineNr"> 8327 </span> <span class="Constant">"arg1"</span>/imm32/name -<span id="L8328" class="LineNr"> 8328 </span> <span class="SpecialChar"><a href='mu.subx.html#L8355'>Type-int</a></span>/imm32 -<span id="L8329" class="LineNr"> 8329 </span> 1/imm32/some-block-depth -<span id="L8330" class="LineNr"> 8330 </span> 0/imm32/no-stack-offset -<span id="L8331" class="LineNr"> 8331 </span> <span class="Constant">"esi"</span>/imm32/register +<span id="L8322" class="LineNr"> 8322 </span><span class="SpecialChar">Int-var-in-esi</span>: +<span id="L8323" class="LineNr"> 8323 </span> <span class="Constant">"arg1"</span>/imm32/name +<span id="L8324" class="LineNr"> 8324 </span> <span class="SpecialChar"><a href='mu.subx.html#L8351'>Type-int</a></span>/imm32 +<span id="L8325" class="LineNr"> 8325 </span> 1/imm32/some-block-depth +<span id="L8326" class="LineNr"> 8326 </span> 0/imm32/no-stack-offset +<span id="L8327" class="LineNr"> 8327 </span> <span class="Constant">"esi"</span>/imm32/register +<span id="L8328" class="LineNr"> 8328 </span> +<span id="L8329" class="LineNr"> 8329 </span><span class="SpecialChar">Single-int-var-in-edi</span>: +<span id="L8330" class="LineNr"> 8330 </span> <span class="SpecialChar"><a href='mu.subx.html#L8333'>Int-var-in-edi</a></span>/imm32 +<span id="L8331" class="LineNr"> 8331 </span> 0/imm32/next <span id="L8332" class="LineNr"> 8332 </span> -<span id="L8333" class="LineNr"> 8333 </span><span class="SpecialChar">Single-int-var-in-edi</span>: -<span id="L8334" class="LineNr"> 8334 </span> <span class="SpecialChar"><a href='mu.subx.html#L8337'>Int-var-in-edi</a></span>/imm32 -<span id="L8335" class="LineNr"> 8335 </span> 0/imm32/next -<span id="L8336" class="LineNr"> 8336 </span> -<span id="L8337" class="LineNr"> 8337 </span><span class="SpecialChar">Int-var-in-edi</span>: -<span id="L8338" class="LineNr"> 8338 </span> <span class="Constant">"arg1"</span>/imm32/name -<span id="L8339" class="LineNr"> 8339 </span> <span class="SpecialChar"><a href='mu.subx.html#L8355'>Type-int</a></span>/imm32 -<span id="L8340" class="LineNr"> 8340 </span> 1/imm32/some-block-depth -<span id="L8341" class="LineNr"> 8341 </span> 0/imm32/no-stack-offset -<span id="L8342" class="LineNr"> 8342 </span> <span class="Constant">"edi"</span>/imm32/register +<span id="L8333" class="LineNr"> 8333 </span><span class="SpecialChar">Int-var-in-edi</span>: +<span id="L8334" class="LineNr"> 8334 </span> <span class="Constant">"arg1"</span>/imm32/name +<span id="L8335" class="LineNr"> 8335 </span> <span class="SpecialChar"><a href='mu.subx.html#L8351'>Type-int</a></span>/imm32 +<span id="L8336" class="LineNr"> 8336 </span> 1/imm32/some-block-depth +<span id="L8337" class="LineNr"> 8337 </span> 0/imm32/no-stack-offset +<span id="L8338" class="LineNr"> 8338 </span> <span class="Constant">"edi"</span>/imm32/register +<span id="L8339" class="LineNr"> 8339 </span> +<span id="L8340" class="LineNr"> 8340 </span><span class="SpecialChar">Single-lit-var</span>: +<span id="L8341" class="LineNr"> 8341 </span> <span class="SpecialChar"><a href='mu.subx.html#L8344'>Lit-var</a></span>/imm32 +<span id="L8342" class="LineNr"> 8342 </span> 0/imm32/next <span id="L8343" class="LineNr"> 8343 </span> -<span id="L8344" class="LineNr"> 8344 </span><span class="SpecialChar">Single-lit-var</span>: -<span id="L8345" class="LineNr"> 8345 </span> <span class="SpecialChar"><a href='mu.subx.html#L8348'>Lit-var</a></span>/imm32 -<span id="L8346" class="LineNr"> 8346 </span> 0/imm32/next -<span id="L8347" class="LineNr"> 8347 </span> -<span id="L8348" class="LineNr"> 8348 </span><span class="SpecialChar">Lit-var</span>: -<span id="L8349" class="LineNr"> 8349 </span> <span class="Constant">"literal"</span>/imm32/name -<span id="L8350" class="LineNr"> 8350 </span> <span class="SpecialChar"><a href='mu.subx.html#L8359'>Type-literal</a></span>/imm32 -<span id="L8351" class="LineNr"> 8351 </span> 1/imm32/some-block-depth -<span id="L8352" class="LineNr"> 8352 </span> 0/imm32/no-stack-offset -<span id="L8353" class="LineNr"> 8353 </span> 0/imm32/no-register +<span id="L8344" class="LineNr"> 8344 </span><span class="SpecialChar">Lit-var</span>: +<span id="L8345" class="LineNr"> 8345 </span> <span class="Constant">"literal"</span>/imm32/name +<span id="L8346" class="LineNr"> 8346 </span> <span class="SpecialChar"><a href='mu.subx.html#L8355'>Type-literal</a></span>/imm32 +<span id="L8347" class="LineNr"> 8347 </span> 1/imm32/some-block-depth +<span id="L8348" class="LineNr"> 8348 </span> 0/imm32/no-stack-offset +<span id="L8349" class="LineNr"> 8349 </span> 0/imm32/no-register +<span id="L8350" class="LineNr"> 8350 </span> +<span id="L8351" class="LineNr"> 8351 </span><span class="SpecialChar">Type-int</span>: +<span id="L8352" class="LineNr"> 8352 </span> 1/imm32/left/int +<span id="L8353" class="LineNr"> 8353 </span> 0/imm32/right/null <span id="L8354" class="LineNr"> 8354 </span> -<span id="L8355" class="LineNr"> 8355 </span><span class="SpecialChar">Type-int</span>: -<span id="L8356" class="LineNr"> 8356 </span> 1/imm32/left/int +<span id="L8355" class="LineNr"> 8355 </span><span class="SpecialChar">Type-literal</span>: +<span id="L8356" class="LineNr"> 8356 </span> 0/imm32/left/literal <span id="L8357" class="LineNr"> 8357 </span> 0/imm32/right/null <span id="L8358" class="LineNr"> 8358 </span> -<span id="L8359" class="LineNr"> 8359 </span><span class="SpecialChar">Type-literal</span>: -<span id="L8360" class="LineNr"> 8360 </span> 0/imm32/left/literal -<span id="L8361" class="LineNr"> 8361 </span> 0/imm32/right/null -<span id="L8362" class="LineNr"> 8362 </span> -<span id="L8363" class="LineNr"> 8363 </span>== code -<span id="L8364" class="LineNr"> 8364 </span><span class="subxFunction">emit-subx-primitive</span>: <span class="subxComment"># out: (addr buffered-file), stmt: (handle stmt), primitive: (handle function)</span> -<span id="L8365" class="LineNr"> 8365 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L8366" class="LineNr"> 8366 </span> 55/push-ebp -<span id="L8367" class="LineNr"> 8367 </span> 89/<- %ebp 4/r32/esp -<span id="L8368" class="LineNr"> 8368 </span> <span class="subxS1Comment"># . save registers</span> -<span id="L8369" class="LineNr"> 8369 </span> 50/push-eax -<span id="L8370" class="LineNr"> 8370 </span> 51/push-ecx -<span id="L8371" class="LineNr"> 8371 </span> <span class="subxComment"># ecx = primitive</span> -<span id="L8372" class="LineNr"> 8372 </span> 8b/-> *(ebp+0x10) 1/r32/ecx -<span id="L8373" class="LineNr"> 8373 </span> <span class="subxComment"># emit primitive name</span> -<span id="L8374" class="LineNr"> 8374 </span> (<a href='mu.subx.html#L10446'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) -<span id="L8375" class="LineNr"> 8375 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *(ecx+0xc)) <span class="subxComment"># Primitive-subx-name</span> -<span id="L8376" class="LineNr"> 8376 </span> <span class="subxComment"># emit rm32 if necessary</span> -<span id="L8377" class="LineNr"> 8377 </span> (<a href='mu.subx.html#L8394'>emit-subx-rm32</a> *(ebp+8) *(ecx+0x10) *(ebp+0xc)) <span class="subxComment"># out, Primitive-subx-rm32, stmt</span> -<span id="L8378" class="LineNr"> 8378 </span> <span class="subxComment"># emit r32 if necessary</span> -<span id="L8379" class="LineNr"> 8379 </span> (<a href='mu.subx.html#L8471'>emit-subx-r32</a> *(ebp+8) *(ecx+0x14) *(ebp+0xc)) <span class="subxComment"># out, Primitive-subx-r32, stmt</span> -<span id="L8380" class="LineNr"> 8380 </span> <span class="subxComment"># emit imm32 if necessary</span> -<span id="L8381" class="LineNr"> 8381 </span> (<a href='mu.subx.html#L8497'>emit-subx-imm32</a> *(ebp+8) *(ecx+0x18) *(ebp+0xc)) <span class="subxComment"># out, Primitive-subx-imm32, stmt</span> -<span id="L8382" class="LineNr"> 8382 </span> <span class="subxComment"># emit disp32 if necessary</span> -<span id="L8383" class="LineNr"> 8383 </span> (<a href='mu.subx.html#L8522'>emit-subx-disp32</a> *(ebp+8) *(ecx+0x1c) *(ebp+0xc)) <span class="subxComment"># out, Primitive-subx-disp32, stmt</span> -<span id="L8384" class="LineNr"> 8384 </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="L8385" class="LineNr"> 8385 </span><span class="Constant">$emit-subx-primitive:end</span>: -<span id="L8386" class="LineNr"> 8386 </span> <span class="subxS1Comment"># . restore registers</span> -<span id="L8387" class="LineNr"> 8387 </span> 59/pop-to-ecx -<span id="L8388" class="LineNr"> 8388 </span> 58/pop-to-eax -<span id="L8389" class="LineNr"> 8389 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L8390" class="LineNr"> 8390 </span> 89/<- %esp 5/r32/ebp -<span id="L8391" class="LineNr"> 8391 </span> 5d/pop-to-ebp -<span id="L8392" class="LineNr"> 8392 </span> c3/return -<span id="L8393" class="LineNr"> 8393 </span> -<span id="L8394" class="LineNr"> 8394 </span><span class="subxFunction">emit-subx-rm32</span>: <span class="subxComment"># out: (addr buffered-file), l: arg-location, stmt: (handle stmt)</span> -<span id="L8395" class="LineNr"> 8395 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L8396" class="LineNr"> 8396 </span> 55/push-ebp -<span id="L8397" class="LineNr"> 8397 </span> 89/<- %ebp 4/r32/esp -<span id="L8398" class="LineNr"> 8398 </span> <span class="subxS1Comment"># . save registers</span> -<span id="L8399" class="LineNr"> 8399 </span> 50/push-eax -<span id="L8400" class="LineNr"> 8400 </span> <span class="subxComment"># if (l == 0) return</span> -<span id="L8401" class="LineNr"> 8401 </span> 81 7/subop/compare *(ebp+0xc) 0/imm32 -<span id="L8402" class="LineNr"> 8402 </span> 74/jump-if-= $emit-subx-rm32:end/disp8 -<span id="L8403" class="LineNr"> 8403 </span> <span class="subxComment"># var v/eax: (handle var)</span> -<span id="L8404" class="LineNr"> 8404 </span> (<a href='mu.subx.html#L8414'>get-stmt-operand-from-arg-location</a> *(ebp+0x10) *(ebp+0xc)) <span class="subxComment"># => eax</span> -<span id="L8405" class="LineNr"> 8405 </span> (<a href='mu.subx.html#L8705'>emit-subx-var-as-rm32</a> *(ebp+8) %eax) -<span id="L8406" class="LineNr"> 8406 </span><span class="Constant">$emit-subx-rm32:end</span>: -<span id="L8407" class="LineNr"> 8407 </span> <span class="subxS1Comment"># . restore registers</span> -<span id="L8408" class="LineNr"> 8408 </span> 58/pop-to-eax -<span id="L8409" class="LineNr"> 8409 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L8410" class="LineNr"> 8410 </span> 89/<- %esp 5/r32/ebp -<span id="L8411" class="LineNr"> 8411 </span> 5d/pop-to-ebp -<span id="L8412" class="LineNr"> 8412 </span> c3/return -<span id="L8413" class="LineNr"> 8413 </span> -<span id="L8414" class="LineNr"> 8414 </span><span class="subxFunction">get-stmt-operand-from-arg-location</span>: <span class="subxComment"># stmt: (handle stmt), l: arg-location -> var/eax: (handle stmt-var)</span> -<span id="L8415" class="LineNr"> 8415 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L8416" class="LineNr"> 8416 </span> 55/push-ebp -<span id="L8417" class="LineNr"> 8417 </span> 89/<- %ebp 4/r32/esp -<span id="L8418" class="LineNr"> 8418 </span> <span class="subxS1Comment"># . save registers</span> -<span id="L8419" class="LineNr"> 8419 </span> 51/push-ecx -<span id="L8420" class="LineNr"> 8420 </span> <span class="subxComment"># eax = l</span> -<span id="L8421" class="LineNr"> 8421 </span> 8b/-> *(ebp+0xc) 0/r32/eax -<span id="L8422" class="LineNr"> 8422 </span> <span class="subxComment"># ecx = stmt</span> -<span id="L8423" class="LineNr"> 8423 </span> 8b/-> *(ebp+8) 1/r32/ecx -<span id="L8424" class="LineNr"> 8424 </span> <span class="subxComment"># if (l == 1) return stmt->inouts</span> -<span id="L8425" class="LineNr"> 8425 </span> { -<span id="L8426" class="LineNr"> 8426 </span> 3d/compare-eax-and 1/imm32 -<span id="L8427" class="LineNr"> 8427 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 -<span id="L8428" class="LineNr"> 8428 </span><span class="Constant">$get-stmt-operand-from-arg-location:1</span>: -<span id="L8429" class="LineNr"> 8429 </span> 8b/-> *(ecx+8) 0/r32/eax <span class="subxComment"># Stmt1-inouts or Regvardef-inouts</span> -<span id="L8430" class="LineNr"> 8430 </span> eb/jump $get-stmt-operand-from-arg-location:end/disp8 -<span id="L8431" class="LineNr"> 8431 </span> } -<span id="L8432" class="LineNr"> 8432 </span> <span class="subxComment"># if (l == 2) return stmt->inouts->next</span> -<span id="L8433" class="LineNr"> 8433 </span> { -<span id="L8434" class="LineNr"> 8434 </span> 3d/compare-eax-and 2/imm32 -<span id="L8435" class="LineNr"> 8435 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 -<span id="L8436" class="LineNr"> 8436 </span><span class="Constant">$get-stmt-operand-from-arg-location:2</span>: -<span id="L8437" class="LineNr"> 8437 </span> 8b/-> *(ecx+8) 0/r32/eax <span class="subxComment"># Stmt1-inouts or Regvardef-inouts</span> -<span id="L8438" class="LineNr"> 8438 </span> 8b/-> *(eax+4) 0/r32/eax <span class="subxComment"># Stmt-var-next</span> -<span id="L8439" class="LineNr"> 8439 </span> eb/jump $get-stmt-operand-from-arg-location:end/disp8 -<span id="L8440" class="LineNr"> 8440 </span> } -<span id="L8441" class="LineNr"> 8441 </span> <span class="subxComment"># if (l == 3) return stmt->outputs</span> -<span id="L8442" class="LineNr"> 8442 </span> { -<span id="L8443" class="LineNr"> 8443 </span> 3d/compare-eax-and 3/imm32 -<span id="L8444" class="LineNr"> 8444 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 -<span id="L8445" class="LineNr"> 8445 </span><span class="Constant">$get-stmt-operand-from-arg-location:3</span>: -<span id="L8446" class="LineNr"> 8446 </span> 8b/-> *(ecx+0xc) 0/r32/eax <span class="subxComment"># Stmt1-outputs</span> -<span id="L8447" class="LineNr"> 8447 </span> eb/jump $get-stmt-operand-from-arg-location:end/disp8 -<span id="L8448" class="LineNr"> 8448 </span> } -<span id="L8449" class="LineNr"> 8449 </span> <span class="subxComment"># abort</span> -<span id="L8450" class="LineNr"> 8450 </span> e9/jump $get-stmt-operand-from-arg-location:abort/disp32 -<span id="L8451" class="LineNr"> 8451 </span><span class="Constant">$get-stmt-operand-from-arg-location:end</span>: -<span id="L8452" class="LineNr"> 8452 </span> <span class="subxS1Comment"># . restore registers</span> -<span id="L8453" class="LineNr"> 8453 </span> 59/pop-to-ecx -<span id="L8454" class="LineNr"> 8454 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L8455" class="LineNr"> 8455 </span> 89/<- %esp 5/r32/ebp -<span id="L8456" class="LineNr"> 8456 </span> 5d/pop-to-ebp -<span id="L8457" class="LineNr"> 8457 </span> c3/return -<span id="L8458" class="LineNr"> 8458 </span> -<span id="L8459" class="LineNr"> 8459 </span><span class="Constant">$get-stmt-operand-from-arg-location:abort</span>: -<span id="L8460" class="LineNr"> 8460 </span> <span class="subxComment"># error("invalid arg-location " eax)</span> -<span id="L8461" class="LineNr"> 8461 </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">"invalid arg-location "</span>) -<span id="L8462" class="LineNr"> 8462 </span> (<a href='../066print-int.subx.html#L266'>print-int32-buffered</a> <span class="SpecialChar"><a href='../065write-buffered.subx.html#L209'>Stderr</a></span> %eax) -<span id="L8463" class="LineNr"> 8463 </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="SpecialChar"><a href='../051test.subx.html#L83'>Newline</a></span>) -<span id="L8464" class="LineNr"> 8464 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <span class="SpecialChar"><a href='../065write-buffered.subx.html#L209'>Stderr</a></span>) -<span id="L8465" class="LineNr"> 8465 </span> <span class="subxS1Comment"># . syscall(exit, 1)</span> -<span id="L8466" class="LineNr"> 8466 </span> bb/copy-to-ebx 1/imm32 -<span id="L8467" class="LineNr"> 8467 </span> b8/copy-to-eax 1/imm32/exit -<span id="L8468" class="LineNr"> 8468 </span> cd/syscall 0x80/imm8 -<span id="L8469" class="LineNr"> 8469 </span> <span class="subxComment"># never gets here</span> -<span id="L8470" class="LineNr"> 8470 </span> -<span id="L8471" class="LineNr"> 8471 </span><span class="subxFunction">emit-subx-r32</span>: <span class="subxComment"># out: (addr buffered-file), l: arg-location, stmt: (handle stmt)</span> -<span id="L8472" class="LineNr"> 8472 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L8473" class="LineNr"> 8473 </span> 55/push-ebp -<span id="L8474" class="LineNr"> 8474 </span> 89/<- %ebp 4/r32/esp -<span id="L8475" class="LineNr"> 8475 </span> <span class="subxS1Comment"># . save registers</span> -<span id="L8476" class="LineNr"> 8476 </span> 50/push-eax -<span id="L8477" class="LineNr"> 8477 </span> 51/push-ecx -<span id="L8478" class="LineNr"> 8478 </span> <span class="subxComment"># if (location == 0) return</span> -<span id="L8479" class="LineNr"> 8479 </span> 81 7/subop/compare *(ebp+0xc) 0/imm32 -<span id="L8480" class="LineNr"> 8480 </span> 0f 84/jump-if-= $emit-subx-r32:end/disp32 -<span id="L8481" class="LineNr"> 8481 </span> <span class="subxComment"># var v/eax: (handle var)</span> -<span id="L8482" class="LineNr"> 8482 </span> (<a href='mu.subx.html#L8414'>get-stmt-operand-from-arg-location</a> *(ebp+0x10) *(ebp+0xc)) <span class="subxComment"># => eax</span> -<span id="L8483" class="LineNr"> 8483 </span> 8b/-> *eax 0/r32/eax <span class="subxComment"># Stmt-var-value</span> -<span id="L8484" class="LineNr"> 8484 </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> -<span id="L8485" class="LineNr"> 8485 </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="L8486" class="LineNr"> 8486 </span> (<a href='../066print-int.subx.html#L266'>print-int32-buffered</a> *(ebp+8) *eax) -<span id="L8487" class="LineNr"> 8487 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"/r32"</span>) -<span id="L8488" class="LineNr"> 8488 </span><span class="Constant">$emit-subx-r32:end</span>: -<span id="L8489" class="LineNr"> 8489 </span> <span class="subxS1Comment"># . restore registers</span> -<span id="L8490" class="LineNr"> 8490 </span> 59/pop-to-ecx -<span id="L8491" class="LineNr"> 8491 </span> 58/pop-to-eax -<span id="L8492" class="LineNr"> 8492 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L8493" class="LineNr"> 8493 </span> 89/<- %esp 5/r32/ebp -<span id="L8494" class="LineNr"> 8494 </span> 5d/pop-to-ebp -<span id="L8495" class="LineNr"> 8495 </span> c3/return -<span id="L8496" class="LineNr"> 8496 </span> -<span id="L8497" class="LineNr"> 8497 </span><span class="subxFunction">emit-subx-imm32</span>: <span class="subxComment"># out: (addr buffered-file), l: arg-location, stmt: (handle stmt)</span> -<span id="L8498" class="LineNr"> 8498 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L8499" class="LineNr"> 8499 </span> 55/push-ebp -<span id="L8500" class="LineNr"> 8500 </span> 89/<- %ebp 4/r32/esp -<span id="L8501" class="LineNr"> 8501 </span> <span class="subxS1Comment"># . save registers</span> -<span id="L8502" class="LineNr"> 8502 </span> 50/push-eax -<span id="L8503" class="LineNr"> 8503 </span> 51/push-ecx -<span id="L8504" class="LineNr"> 8504 </span> <span class="subxComment"># if (location == 0) return</span> -<span id="L8505" class="LineNr"> 8505 </span> 81 7/subop/compare *(ebp+0xc) 0/imm32 -<span id="L8506" class="LineNr"> 8506 </span> 74/jump-if-= $emit-subx-imm32:end/disp8 -<span id="L8507" class="LineNr"> 8507 </span> <span class="subxComment"># var v/eax: (handle var)</span> -<span id="L8508" class="LineNr"> 8508 </span> (<a href='mu.subx.html#L8414'>get-stmt-operand-from-arg-location</a> *(ebp+0x10) *(ebp+0xc)) <span class="subxComment"># => eax</span> -<span id="L8509" class="LineNr"> 8509 </span> 8b/-> *eax 0/r32/eax <span class="subxComment"># Stmt-var-value</span> -<span id="L8510" class="LineNr"> 8510 </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="L8511" class="LineNr"> 8511 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *eax) <span class="subxComment"># Var-name</span> -<span id="L8512" class="LineNr"> 8512 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"/imm32"</span>) -<span id="L8513" class="LineNr"> 8513 </span><span class="Constant">$emit-subx-imm32:end</span>: -<span id="L8514" class="LineNr"> 8514 </span> <span class="subxS1Comment"># . restore registers</span> -<span id="L8515" class="LineNr"> 8515 </span> 59/pop-to-ecx -<span id="L8516" class="LineNr"> 8516 </span> 58/pop-to-eax -<span id="L8517" class="LineNr"> 8517 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L8518" class="LineNr"> 8518 </span> 89/<- %esp 5/r32/ebp -<span id="L8519" class="LineNr"> 8519 </span> 5d/pop-to-ebp -<span id="L8520" class="LineNr"> 8520 </span> c3/return -<span id="L8521" class="LineNr"> 8521 </span> -<span id="L8522" class="LineNr"> 8522 </span><span class="subxFunction">emit-subx-disp32</span>: <span class="subxComment"># out: (addr buffered-file), l: arg-location, stmt: (handle stmt)</span> -<span id="L8523" class="LineNr"> 8523 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L8524" class="LineNr"> 8524 </span> 55/push-ebp -<span id="L8525" class="LineNr"> 8525 </span> 89/<- %ebp 4/r32/esp -<span id="L8526" class="LineNr"> 8526 </span> <span class="subxS1Comment"># . save registers</span> -<span id="L8527" class="LineNr"> 8527 </span> 50/push-eax -<span id="L8528" class="LineNr"> 8528 </span> 51/push-ecx -<span id="L8529" class="LineNr"> 8529 </span> <span class="subxComment"># if (location == 0) return</span> -<span id="L8530" class="LineNr"> 8530 </span> 81 7/subop/compare *(ebp+0xc) 0/imm32 -<span id="L8531" class="LineNr"> 8531 </span> 0f 84/jump-if-= $emit-subx-disp32:end/disp32 -<span id="L8532" class="LineNr"> 8532 </span> <span class="subxComment"># var v/eax: (handle var)</span> -<span id="L8533" class="LineNr"> 8533 </span> (<a href='mu.subx.html#L8414'>get-stmt-operand-from-arg-location</a> *(ebp+0x10) *(ebp+0xc)) <span class="subxComment"># => eax</span> -<span id="L8534" class="LineNr"> 8534 </span> 8b/-> *eax 0/r32/eax <span class="subxComment"># Stmt-var-value</span> -<span id="L8535" class="LineNr"> 8535 </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="L8536" class="LineNr"> 8536 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *eax) <span class="subxComment"># Var-name</span> -<span id="L8537" class="LineNr"> 8537 </span> <span class="subxComment"># hack: if instruction operation starts with "break", emit ":break"</span> -<span id="L8538" class="LineNr"> 8538 </span> <span class="subxComment"># var name/ecx: (addr array byte) = stmt->operation</span> -<span id="L8539" class="LineNr"> 8539 </span> 8b/-> *(ebp+0x10) 0/r32/eax -<span id="L8540" class="LineNr"> 8540 </span> 8b/-> *(eax+4) 1/r32/ecx -<span id="L8541" class="LineNr"> 8541 </span> { -<span id="L8542" class="LineNr"> 8542 </span> (<a href='../054string-equal.subx.html#L58'>string-starts-with?</a> %ecx <span class="Constant">"break"</span>) <span class="subxComment"># => eax</span> -<span id="L8543" class="LineNr"> 8543 </span> 3d/compare-eax-and 0/imm32/false -<span id="L8544" class="LineNr"> 8544 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 -<span id="L8545" class="LineNr"> 8545 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">":break"</span>) -<span id="L8546" class="LineNr"> 8546 </span> } -<span id="L8547" class="LineNr"> 8547 </span> <span class="subxComment"># hack: if instruction operation starts with "loop", emit ":loop"</span> -<span id="L8548" class="LineNr"> 8548 </span> { -<span id="L8549" class="LineNr"> 8549 </span> (<a href='../054string-equal.subx.html#L58'>string-starts-with?</a> %ecx <span class="Constant">"loop"</span>) <span class="subxComment"># => eax</span> -<span id="L8550" class="LineNr"> 8550 </span> 3d/compare-eax-and 0/imm32/false -<span id="L8551" class="LineNr"> 8551 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 -<span id="L8552" class="LineNr"> 8552 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">":loop"</span>) -<span id="L8553" class="LineNr"> 8553 </span> } -<span id="L8554" class="LineNr"> 8554 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"/disp32"</span>) -<span id="L8555" class="LineNr"> 8555 </span><span class="Constant">$emit-subx-disp32:end</span>: -<span id="L8556" class="LineNr"> 8556 </span> <span class="subxS1Comment"># . restore registers</span> -<span id="L8557" class="LineNr"> 8557 </span> 59/pop-to-ecx -<span id="L8558" class="LineNr"> 8558 </span> 58/pop-to-eax -<span id="L8559" class="LineNr"> 8559 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L8560" class="LineNr"> 8560 </span> 89/<- %esp 5/r32/ebp -<span id="L8561" class="LineNr"> 8561 </span> 5d/pop-to-ebp -<span id="L8562" class="LineNr"> 8562 </span> c3/return -<span id="L8563" class="LineNr"> 8563 </span> -<span id="L8564" class="LineNr"> 8564 </span><span class="subxFunction">emit-subx-call</span>: <span class="subxComment"># out: (addr buffered-file), stmt: (handle stmt), callee: (handle function)</span> -<span id="L8565" class="LineNr"> 8565 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L8566" class="LineNr"> 8566 </span> 55/push-ebp -<span id="L8567" class="LineNr"> 8567 </span> 89/<- %ebp 4/r32/esp -<span id="L8568" class="LineNr"> 8568 </span> <span class="subxS1Comment"># . save registers</span> -<span id="L8569" class="LineNr"> 8569 </span> 51/push-ecx -<span id="L8570" class="LineNr"> 8570 </span> <span class="subxComment">#</span> -<span id="L8571" class="LineNr"> 8571 </span> (<a href='mu.subx.html#L10446'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) -<span id="L8572" class="LineNr"> 8572 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"("</span>) -<span id="L8573" class="LineNr"> 8573 </span> <span class="subxH1Comment"># - emit function name</span> -<span id="L8574" class="LineNr"> 8574 </span> 8b/-> *(ebp+0x10) 1/r32/ecx -<span id="L8575" class="LineNr"> 8575 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *(ecx+4)) <span class="subxComment"># Function-subx-name</span> -<span id="L8576" class="LineNr"> 8576 </span> <span class="subxH1Comment"># - emit arguments</span> -<span id="L8577" class="LineNr"> 8577 </span> <span class="subxComment"># var curr/ecx: (handle stmt-var) = stmt->inouts</span> -<span id="L8578" class="LineNr"> 8578 </span> 8b/-> *(ebp+0xc) 1/r32/ecx -<span id="L8579" class="LineNr"> 8579 </span> 8b/-> *(ecx+8) 1/r32/ecx <span class="subxComment"># Stmt1-inouts</span> -<span id="L8580" class="LineNr"> 8580 </span> { -<span id="L8581" class="LineNr"> 8581 </span> <span class="subxComment"># if (curr == null) break</span> -<span id="L8582" class="LineNr"> 8582 </span> 81 7/subop/compare %ecx 0/imm32 -<span id="L8583" class="LineNr"> 8583 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 -<span id="L8584" class="LineNr"> 8584 </span> <span class="subxComment">#</span> -<span id="L8585" class="LineNr"> 8585 </span> (<a href='mu.subx.html#L8638'>emit-subx-call-operand</a> *(ebp+8) %ecx) -<span id="L8586" class="LineNr"> 8586 </span> <span class="subxComment"># curr = curr->next</span> -<span id="L8587" class="LineNr"> 8587 </span> 8b/-> *(ecx+4) 1/r32/ecx <span class="subxComment"># Stmt-var-next</span> -<span id="L8588" class="LineNr"> 8588 </span> eb/jump <span class="Constant">loop</span>/disp8 -<span id="L8589" class="LineNr"> 8589 </span> } -<span id="L8590" class="LineNr"> 8590 </span> <span class="subxComment">#</span> -<span id="L8591" class="LineNr"> 8591 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">")\n"</span>) -<span id="L8592" class="LineNr"> 8592 </span><span class="Constant">$emit-subx-call:end</span>: -<span id="L8593" class="LineNr"> 8593 </span> <span class="subxS1Comment"># . restore registers</span> -<span id="L8594" class="LineNr"> 8594 </span> 59/pop-to-ecx -<span id="L8595" class="LineNr"> 8595 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L8596" class="LineNr"> 8596 </span> 89/<- %esp 5/r32/ebp -<span id="L8597" class="LineNr"> 8597 </span> 5d/pop-to-ebp -<span id="L8598" class="LineNr"> 8598 </span> c3/return -<span id="L8599" class="LineNr"> 8599 </span> -<span id="L8600" class="LineNr"> 8600 </span><span class="subxComment"># like a function call, except we have no idea what function it is</span> -<span id="L8601" class="LineNr"> 8601 </span><span class="subxComment"># we hope it's defined in SubX and that the types are ok</span> -<span id="L8602" class="LineNr"> 8602 </span><span class="subxFunction">emit-hailmary-call</span>: <span class="subxComment"># out: (addr buffered-file), stmt: (handle stmt)</span> -<span id="L8603" class="LineNr"> 8603 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L8604" class="LineNr"> 8604 </span> 55/push-ebp -<span id="L8605" class="LineNr"> 8605 </span> 89/<- %ebp 4/r32/esp -<span id="L8606" class="LineNr"> 8606 </span> <span class="subxS1Comment"># . save registers</span> -<span id="L8607" class="LineNr"> 8607 </span> 51/push-ecx -<span id="L8608" class="LineNr"> 8608 </span> <span class="subxComment">#</span> -<span id="L8609" class="LineNr"> 8609 </span> (<a href='mu.subx.html#L10446'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) -<span id="L8610" class="LineNr"> 8610 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"("</span>) -<span id="L8611" class="LineNr"> 8611 </span> <span class="subxComment"># ecx = stmt</span> -<span id="L8612" class="LineNr"> 8612 </span> 8b/-> *(ebp+0xc) 1/r32/ecx -<span id="L8613" class="LineNr"> 8613 </span> <span class="subxH1Comment"># - emit function name</span> -<span id="L8614" class="LineNr"> 8614 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *(ecx+4)) <span class="subxComment"># Stmt1-operation</span> -<span id="L8615" class="LineNr"> 8615 </span> <span class="subxH1Comment"># - emit arguments</span> -<span id="L8616" class="LineNr"> 8616 </span> <span class="subxComment"># var curr/ecx: (handle stmt-var) = stmt->inouts</span> -<span id="L8617" class="LineNr"> 8617 </span> 8b/-> *(ecx+8) 1/r32/ecx <span class="subxComment"># Stmt1-inouts</span> -<span id="L8618" class="LineNr"> 8618 </span> { -<span id="L8619" class="LineNr"> 8619 </span> <span class="subxComment"># if (curr == null) break</span> -<span id="L8620" class="LineNr"> 8620 </span> 81 7/subop/compare %ecx 0/imm32 -<span id="L8621" class="LineNr"> 8621 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 -<span id="L8622" class="LineNr"> 8622 </span> <span class="subxComment">#</span> -<span id="L8623" class="LineNr"> 8623 </span> (<a href='mu.subx.html#L8638'>emit-subx-call-operand</a> *(ebp+8) %ecx) -<span id="L8624" class="LineNr"> 8624 </span> <span class="subxComment"># curr = curr->next</span> -<span id="L8625" class="LineNr"> 8625 </span> 8b/-> *(ecx+4) 1/r32/ecx <span class="subxComment"># Stmt-var-next</span> -<span id="L8626" class="LineNr"> 8626 </span> eb/jump <span class="Constant">loop</span>/disp8 -<span id="L8627" class="LineNr"> 8627 </span> } -<span id="L8628" class="LineNr"> 8628 </span> <span class="subxComment">#</span> -<span id="L8629" class="LineNr"> 8629 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">")\n"</span>) -<span id="L8630" class="LineNr"> 8630 </span><span class="Constant">$emit-hailmary-call:end</span>: -<span id="L8631" class="LineNr"> 8631 </span> <span class="subxS1Comment"># . restore registers</span> -<span id="L8632" class="LineNr"> 8632 </span> 59/pop-to-ecx -<span id="L8633" class="LineNr"> 8633 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L8634" class="LineNr"> 8634 </span> 89/<- %esp 5/r32/ebp -<span id="L8635" class="LineNr"> 8635 </span> 5d/pop-to-ebp -<span id="L8636" class="LineNr"> 8636 </span> c3/return -<span id="L8637" class="LineNr"> 8637 </span> -<span id="L8638" class="LineNr"> 8638 </span><span class="subxFunction">emit-subx-call-operand</span>: <span class="subxComment"># out: (addr buffered-file), s: (handle stmt-var)</span> -<span id="L8639" class="LineNr"> 8639 </span> <span class="subxComment"># shares code with emit-subx-var-as-rm32</span> -<span id="L8640" class="LineNr"> 8640 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L8641" class="LineNr"> 8641 </span> 55/push-ebp -<span id="L8642" class="LineNr"> 8642 </span> 89/<- %ebp 4/r32/esp -<span id="L8643" class="LineNr"> 8643 </span> <span class="subxS1Comment"># . save registers</span> -<span id="L8644" class="LineNr"> 8644 </span> 50/push-eax -<span id="L8645" class="LineNr"> 8645 </span> 51/push-ecx -<span id="L8646" class="LineNr"> 8646 </span> 56/push-esi -<span id="L8647" class="LineNr"> 8647 </span> <span class="subxComment"># ecx = s</span> -<span id="L8648" class="LineNr"> 8648 </span> 8b/-> *(ebp+0xc) 1/r32/ecx -<span id="L8649" class="LineNr"> 8649 </span> <span class="subxComment"># var operand/esi: (handle var) = s->value</span> -<span id="L8650" class="LineNr"> 8650 </span> 8b/-> *ecx 6/r32/esi <span class="subxComment"># Stmt-var-value</span> -<span id="L8651" class="LineNr"> 8651 </span> <span class="subxComment"># if (operand->register && s->is-deref?) emit "*__"</span> -<span id="L8652" class="LineNr"> 8652 </span> { -<span id="L8653" class="LineNr"> 8653 </span><span class="Constant">$emit-subx-call-operand:check-for-register-indirect</span>: -<span id="L8654" class="LineNr"> 8654 </span> 81 7/subop/compare *(esi+0x10) 0/imm32 <span class="subxComment"># Var-register</span> -<span id="L8655" class="LineNr"> 8655 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 -<span id="L8656" class="LineNr"> 8656 </span> 81 7/subop/compare *(ecx+8) 0/imm32/false <span class="subxComment"># Stmt-var-is-deref</span> -<span id="L8657" class="LineNr"> 8657 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 -<span id="L8658" class="LineNr"> 8658 </span><span class="Constant">$emit-subx-call-operand:register-indirect</span>: -<span id="L8659" class="LineNr"> 8659 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" *"</span>) -<span id="L8660" class="LineNr"> 8660 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *(esi+0x10)) <span class="subxComment"># Var-register</span> -<span id="L8661" class="LineNr"> 8661 </span> e9/jump $emit-subx-call-operand:end/disp32 -<span id="L8662" class="LineNr"> 8662 </span> } -<span id="L8663" class="LineNr"> 8663 </span> <span class="subxComment"># if (operand->register && !s->is-deref?) emit "%__"</span> -<span id="L8664" class="LineNr"> 8664 </span> { -<span id="L8665" class="LineNr"> 8665 </span><span class="Constant">$emit-subx-call-operand:check-for-register-direct</span>: -<span id="L8666" class="LineNr"> 8666 </span> 81 7/subop/compare *(esi+0x10) 0/imm32 <span class="subxComment"># Var-register</span> -<span id="L8667" class="LineNr"> 8667 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 -<span id="L8668" class="LineNr"> 8668 </span> 81 7/subop/compare *(ecx+8) 0/imm32/false <span class="subxComment"># Stmt-var-is-deref</span> -<span id="L8669" class="LineNr"> 8669 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 -<span id="L8670" class="LineNr"> 8670 </span><span class="Constant">$emit-subx-call-operand:register-direct</span>: -<span id="L8671" class="LineNr"> 8671 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" %"</span>) -<span id="L8672" class="LineNr"> 8672 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *(esi+0x10)) <span class="subxComment"># Var-register</span> -<span id="L8673" class="LineNr"> 8673 </span> e9/jump $emit-subx-call-operand:end/disp32 -<span id="L8674" class="LineNr"> 8674 </span> } -<span id="L8675" class="LineNr"> 8675 </span> <span class="subxComment"># else if (operand->stack-offset) emit "*(ebp+__)"</span> -<span id="L8676" class="LineNr"> 8676 </span> { -<span id="L8677" class="LineNr"> 8677 </span> 81 7/subop/compare *(esi+0xc) 0/imm32 <span class="subxComment"># Var-offset</span> -<span id="L8678" class="LineNr"> 8678 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 -<span id="L8679" class="LineNr"> 8679 </span><span class="Constant">$emit-subx-call-operand:stack</span>: -<span id="L8680" class="LineNr"> 8680 </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="L8681" class="LineNr"> 8681 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"*(ebp+"</span>) -<span id="L8682" class="LineNr"> 8682 </span> (<a href='../066print-int.subx.html#L266'>print-int32-buffered</a> *(ebp+8) *(esi+0xc)) <span class="subxComment"># Var-offset</span> -<span id="L8683" class="LineNr"> 8683 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">")"</span>) -<span id="L8684" class="LineNr"> 8684 </span> e9/jump $emit-subx-call-operand:end/disp32 -<span id="L8685" class="LineNr"> 8685 </span> } -<span id="L8686" class="LineNr"> 8686 </span> <span class="subxComment"># else if (operand->type == literal) emit "__"</span> -<span id="L8687" class="LineNr"> 8687 </span> { -<span id="L8688" class="LineNr"> 8688 </span> 8b/-> *(esi+4) 0/r32/eax <span class="subxComment"># Var-type</span> -<span id="L8689" class="LineNr"> 8689 </span> 81 7/subop/compare *eax 0/imm32 <span class="subxComment"># Tree-left</span> -<span id="L8690" class="LineNr"> 8690 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 -<span id="L8691" class="LineNr"> 8691 </span><span class="Constant">$emit-subx-call-operand:literal</span>: -<span id="L8692" class="LineNr"> 8692 </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="L8693" class="LineNr"> 8693 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *esi) -<span id="L8694" class="LineNr"> 8694 </span> } -<span id="L8695" class="LineNr"> 8695 </span><span class="Constant">$emit-subx-call-operand:end</span>: -<span id="L8696" class="LineNr"> 8696 </span> <span class="subxS1Comment"># . restore registers</span> -<span id="L8697" class="LineNr"> 8697 </span> 5e/pop-to-esi -<span id="L8698" class="LineNr"> 8698 </span> 59/pop-to-ecx -<span id="L8699" class="LineNr"> 8699 </span> 58/pop-to-eax -<span id="L8700" class="LineNr"> 8700 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L8701" class="LineNr"> 8701 </span> 89/<- %esp 5/r32/ebp -<span id="L8702" class="LineNr"> 8702 </span> 5d/pop-to-ebp -<span id="L8703" class="LineNr"> 8703 </span> c3/return -<span id="L8704" class="LineNr"> 8704 </span> -<span id="L8705" class="LineNr"> 8705 </span><span class="subxFunction">emit-subx-var-as-rm32</span>: <span class="subxComment"># out: (addr buffered-file), s: (handle stmt-var)</span> -<span id="L8706" class="LineNr"> 8706 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L8707" class="LineNr"> 8707 </span> 55/push-ebp -<span id="L8708" class="LineNr"> 8708 </span> 89/<- %ebp 4/r32/esp -<span id="L8709" class="LineNr"> 8709 </span> <span class="subxS1Comment"># . save registers</span> -<span id="L8710" class="LineNr"> 8710 </span> 50/push-eax -<span id="L8711" class="LineNr"> 8711 </span> 51/push-ecx -<span id="L8712" class="LineNr"> 8712 </span> 56/push-esi -<span id="L8713" class="LineNr"> 8713 </span> <span class="subxComment"># ecx = s</span> -<span id="L8714" class="LineNr"> 8714 </span> 8b/-> *(ebp+0xc) 1/r32/ecx -<span id="L8715" class="LineNr"> 8715 </span> <span class="subxComment"># var operand/esi: (handle var) = s->value</span> -<span id="L8716" class="LineNr"> 8716 </span> 8b/-> *ecx 6/r32/esi <span class="subxComment"># Stmt-var-value</span> -<span id="L8717" class="LineNr"> 8717 </span> <span class="subxComment"># if (operand->register && s->is-deref?) emit "*__"</span> -<span id="L8718" class="LineNr"> 8718 </span> { -<span id="L8719" class="LineNr"> 8719 </span><span class="Constant">$emit-subx-var-as-rm32:check-for-register-indirect</span>: -<span id="L8720" class="LineNr"> 8720 </span> 81 7/subop/compare *(esi+0x10) 0/imm32 <span class="subxComment"># Var-register</span> -<span id="L8721" class="LineNr"> 8721 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 -<span id="L8722" class="LineNr"> 8722 </span> 81 7/subop/compare *(ecx+8) 0/imm32/false <span class="subxComment"># Stmt-var-is-deref</span> -<span id="L8723" class="LineNr"> 8723 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 -<span id="L8724" class="LineNr"> 8724 </span><span class="Constant">$emit-subx-var-as-rm32:register-indirect</span>: -<span id="L8725" class="LineNr"> 8725 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" *"</span>) -<span id="L8726" class="LineNr"> 8726 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *(esi+0x10)) <span class="subxComment"># Var-register</span> -<span id="L8727" class="LineNr"> 8727 </span> } -<span id="L8728" class="LineNr"> 8728 </span> <span class="subxComment"># if (operand->register && !s->is-deref?) emit "%__"</span> -<span id="L8729" class="LineNr"> 8729 </span> { -<span id="L8730" class="LineNr"> 8730 </span><span class="Constant">$emit-subx-var-as-rm32:check-for-register-direct</span>: -<span id="L8731" class="LineNr"> 8731 </span> 81 7/subop/compare *(esi+0x10) 0/imm32 <span class="subxComment"># Var-register</span> -<span id="L8732" class="LineNr"> 8732 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 -<span id="L8733" class="LineNr"> 8733 </span> 81 7/subop/compare *(ecx+8) 0/imm32/false <span class="subxComment"># Stmt-var-is-deref</span> -<span id="L8734" class="LineNr"> 8734 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 -<span id="L8735" class="LineNr"> 8735 </span><span class="Constant">$emit-subx-var-as-rm32:register-direct</span>: -<span id="L8736" class="LineNr"> 8736 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" %"</span>) -<span id="L8737" class="LineNr"> 8737 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *(esi+0x10)) <span class="subxComment"># Var-register</span> -<span id="L8738" class="LineNr"> 8738 </span> } -<span id="L8739" class="LineNr"> 8739 </span> <span class="subxComment"># else if (operand->stack-offset) emit "*(ebp+__)"</span> -<span id="L8740" class="LineNr"> 8740 </span> { -<span id="L8741" class="LineNr"> 8741 </span> 81 7/subop/compare *(esi+0xc) 0/imm32 <span class="subxComment"># Var-offset</span> -<span id="L8742" class="LineNr"> 8742 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 -<span id="L8743" class="LineNr"> 8743 </span><span class="Constant">$emit-subx-var-as-rm32:stack</span>: -<span id="L8744" class="LineNr"> 8744 </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="L8745" class="LineNr"> 8745 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"*(ebp+"</span>) -<span id="L8746" class="LineNr"> 8746 </span> (<a href='../066print-int.subx.html#L266'>print-int32-buffered</a> *(ebp+8) *(esi+0xc)) <span class="subxComment"># Var-offset</span> -<span id="L8747" class="LineNr"> 8747 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">")"</span>) -<span id="L8748" class="LineNr"> 8748 </span> } -<span id="L8749" class="LineNr"> 8749 </span><span class="Constant">$emit-subx-var-as-rm32:end</span>: -<span id="L8750" class="LineNr"> 8750 </span> <span class="subxS1Comment"># . restore registers</span> -<span id="L8751" class="LineNr"> 8751 </span> 5e/pop-to-esi -<span id="L8752" class="LineNr"> 8752 </span> 59/pop-to-ecx -<span id="L8753" class="LineNr"> 8753 </span> 58/pop-to-eax -<span id="L8754" class="LineNr"> 8754 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L8755" class="LineNr"> 8755 </span> 89/<- %esp 5/r32/ebp -<span id="L8756" class="LineNr"> 8756 </span> 5d/pop-to-ebp -<span id="L8757" class="LineNr"> 8757 </span> c3/return -<span id="L8758" class="LineNr"> 8758 </span> -<span id="L8759" class="LineNr"> 8759 </span><span class="subxFunction">find-matching-function</span>: <span class="subxComment"># functions: (addr function), stmt: (handle stmt) -> result/eax: (handle function)</span> -<span id="L8760" class="LineNr"> 8760 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L8761" class="LineNr"> 8761 </span> 55/push-ebp -<span id="L8762" class="LineNr"> 8762 </span> 89/<- %ebp 4/r32/esp -<span id="L8763" class="LineNr"> 8763 </span> <span class="subxS1Comment"># . save registers</span> -<span id="L8764" class="LineNr"> 8764 </span> 51/push-ecx -<span id="L8765" class="LineNr"> 8765 </span> <span class="subxComment"># var curr/ecx: (handle function) = functions</span> -<span id="L8766" class="LineNr"> 8766 </span> 8b/-> *(ebp+8) 1/r32/ecx -<span id="L8767" class="LineNr"> 8767 </span> { -<span id="L8768" class="LineNr"> 8768 </span> <span class="subxComment"># if (curr == null) break</span> -<span id="L8769" class="LineNr"> 8769 </span> 81 7/subop/compare %ecx 0/imm32 -<span id="L8770" class="LineNr"> 8770 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 -<span id="L8771" class="LineNr"> 8771 </span> <span class="subxComment"># if match(stmt, curr) return curr</span> -<span id="L8772" class="LineNr"> 8772 </span> { -<span id="L8773" class="LineNr"> 8773 </span> (<a href='mu.subx.html#L8835'>mu-stmt-matches-function?</a> *(ebp+0xc) %ecx) <span class="subxComment"># => eax</span> -<span id="L8774" class="LineNr"> 8774 </span> 3d/compare-eax-and 0/imm32/false -<span id="L8775" class="LineNr"> 8775 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 -<span id="L8776" class="LineNr"> 8776 </span> 89/<- %eax 1/r32/ecx -<span id="L8777" class="LineNr"> 8777 </span> eb/jump $find-matching-function:end/disp8 -<span id="L8778" class="LineNr"> 8778 </span> } -<span id="L8779" class="LineNr"> 8779 </span> <span class="subxComment"># curr = curr->next</span> -<span id="L8780" class="LineNr"> 8780 </span> 8b/-> *(ecx+0x14) 1/r32/ecx <span class="subxComment"># Function-next</span> -<span id="L8781" class="LineNr"> 8781 </span> eb/jump <span class="Constant">loop</span>/disp8 -<span id="L8782" class="LineNr"> 8782 </span> } -<span id="L8783" class="LineNr"> 8783 </span> <span class="subxComment"># return null</span> -<span id="L8784" class="LineNr"> 8784 </span> b8/copy-to-eax 0/imm32 -<span id="L8785" class="LineNr"> 8785 </span><span class="Constant">$find-matching-function:end</span>: -<span id="L8786" class="LineNr"> 8786 </span> <span class="subxS1Comment"># . restore registers</span> -<span id="L8787" class="LineNr"> 8787 </span> 59/pop-to-ecx -<span id="L8788" class="LineNr"> 8788 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L8789" class="LineNr"> 8789 </span> 89/<- %esp 5/r32/ebp -<span id="L8790" class="LineNr"> 8790 </span> 5d/pop-to-ebp -<span id="L8791" class="LineNr"> 8791 </span> c3/return -<span id="L8792" class="LineNr"> 8792 </span> -<span id="L8793" class="LineNr"> 8793 </span><span class="subxFunction">find-matching-primitive</span>: <span class="subxComment"># primitives: (handle primitive), stmt: (handle stmt) -> result/eax: (handle primitive)</span> -<span id="L8794" class="LineNr"> 8794 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L8795" class="LineNr"> 8795 </span> 55/push-ebp -<span id="L8796" class="LineNr"> 8796 </span> 89/<- %ebp 4/r32/esp -<span id="L8797" class="LineNr"> 8797 </span> <span class="subxS1Comment"># . save registers</span> -<span id="L8798" class="LineNr"> 8798 </span> 51/push-ecx -<span id="L8799" class="LineNr"> 8799 </span> <span class="subxComment"># var curr/ecx: (handle primitive) = primitives</span> -<span id="L8800" class="LineNr"> 8800 </span> 8b/-> *(ebp+8) 1/r32/ecx -<span id="L8801" class="LineNr"> 8801 </span> { -<span id="L8802" class="LineNr"> 8802 </span><span class="Constant">$find-matching-primitive:loop</span>: -<span id="L8803" class="LineNr"> 8803 </span> <span class="subxComment"># if (curr == null) break</span> -<span id="L8804" class="LineNr"> 8804 </span> 81 7/subop/compare %ecx 0/imm32 -<span id="L8805" class="LineNr"> 8805 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32 -<span id="L8806" class="LineNr"> 8806 </span><span class="CommentedCode">#? (write-buffered Stderr "prim: ")</span> -<span id="L8807" class="LineNr"> 8807 </span><span class="CommentedCode">#? (write-buffered Stderr *ecx) # Primitive-name</span> -<span id="L8808" class="LineNr"> 8808 </span><span class="CommentedCode">#? (write-buffered Stderr " => ")</span> -<span id="L8809" class="LineNr"> 8809 </span><span class="CommentedCode">#? (write-buffered Stderr *(ecx+0xc)) # Primitive-subx-name</span> -<span id="L8810" class="LineNr"> 8810 </span><span class="CommentedCode">#? (write-buffered Stderr Newline)</span> -<span id="L8811" class="LineNr"> 8811 </span><span class="CommentedCode">#? (flush Stderr)</span> -<span id="L8812" class="LineNr"> 8812 </span> <span class="subxComment"># if match(curr, stmt) return curr</span> -<span id="L8813" class="LineNr"> 8813 </span> { -<span id="L8814" class="LineNr"> 8814 </span> (<a href='mu.subx.html#L8853'>mu-stmt-matches-primitive?</a> *(ebp+0xc) %ecx) <span class="subxComment"># => eax</span> -<span id="L8815" class="LineNr"> 8815 </span> 3d/compare-eax-and 0/imm32/false -<span id="L8816" class="LineNr"> 8816 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 -<span id="L8817" class="LineNr"> 8817 </span> 89/<- %eax 1/r32/ecx -<span id="L8818" class="LineNr"> 8818 </span> eb/jump $find-matching-primitive:end/disp8 -<span id="L8819" class="LineNr"> 8819 </span> } -<span id="L8820" class="LineNr"> 8820 </span><span class="Constant">$find-matching-primitive:next-primitive</span>: -<span id="L8821" class="LineNr"> 8821 </span> <span class="subxComment"># curr = curr->next</span> -<span id="L8822" class="LineNr"> 8822 </span> 8b/-> *(ecx+0x24) 1/r32/ecx <span class="subxComment"># Primitive-next</span> -<span id="L8823" class="LineNr"> 8823 </span> e9/jump <span class="Constant">loop</span>/disp32 -<span id="L8824" class="LineNr"> 8824 </span> } -<span id="L8825" class="LineNr"> 8825 </span> <span class="subxComment"># return null</span> -<span id="L8826" class="LineNr"> 8826 </span> b8/copy-to-eax 0/imm32 -<span id="L8827" class="LineNr"> 8827 </span><span class="Constant">$find-matching-primitive:end</span>: -<span id="L8828" class="LineNr"> 8828 </span> <span class="subxS1Comment"># . restore registers</span> -<span id="L8829" class="LineNr"> 8829 </span> 59/pop-to-ecx -<span id="L8830" class="LineNr"> 8830 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L8831" class="LineNr"> 8831 </span> 89/<- %esp 5/r32/ebp -<span id="L8832" class="LineNr"> 8832 </span> 5d/pop-to-ebp -<span id="L8833" class="LineNr"> 8833 </span> c3/return -<span id="L8834" class="LineNr"> 8834 </span> -<span id="L8835" class="LineNr"> 8835 </span><span class="subxFunction">mu-stmt-matches-function?</span>: <span class="subxComment"># stmt: (handle stmt), function: (handle function) -> result/eax: boolean</span> -<span id="L8836" class="LineNr"> 8836 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L8837" class="LineNr"> 8837 </span> 55/push-ebp -<span id="L8838" class="LineNr"> 8838 </span> 89/<- %ebp 4/r32/esp -<span id="L8839" class="LineNr"> 8839 </span> <span class="subxS1Comment"># . save registers</span> -<span id="L8840" class="LineNr"> 8840 </span> 51/push-ecx -<span id="L8841" class="LineNr"> 8841 </span> <span class="subxComment"># return function->name == stmt->operation</span> -<span id="L8842" class="LineNr"> 8842 </span> 8b/-> *(ebp+8) 1/r32/ecx -<span id="L8843" class="LineNr"> 8843 </span> 8b/-> *(ebp+0xc) 0/r32/eax -<span id="L8844" class="LineNr"> 8844 </span> (<a href='../054string-equal.subx.html#L16'>string-equal?</a> *(ecx+4) *eax) <span class="subxComment"># Stmt1-operation, Function-name => eax</span> -<span id="L8845" class="LineNr"> 8845 </span><span class="Constant">$mu-stmt-matches-function?:end</span>: -<span id="L8846" class="LineNr"> 8846 </span> <span class="subxS1Comment"># . restore registers</span> -<span id="L8847" class="LineNr"> 8847 </span> 59/pop-to-ecx -<span id="L8848" class="LineNr"> 8848 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L8849" class="LineNr"> 8849 </span> 89/<- %esp 5/r32/ebp -<span id="L8850" class="LineNr"> 8850 </span> 5d/pop-to-ebp -<span id="L8851" class="LineNr"> 8851 </span> c3/return -<span id="L8852" class="LineNr"> 8852 </span> -<span id="L8853" class="LineNr"> 8853 </span><span class="subxFunction">mu-stmt-matches-primitive?</span>: <span class="subxComment"># stmt: (handle stmt), primitive: (handle primitive) -> result/eax: boolean</span> -<span id="L8854" class="LineNr"> 8854 </span> <span class="subxComment"># A mu stmt matches a primitive if the name matches, all the inout vars</span> -<span id="L8855" class="LineNr"> 8855 </span> <span class="subxComment"># match, and all the output vars match.</span> -<span id="L8856" class="LineNr"> 8856 </span> <span class="subxComment"># Vars match if types match and registers match.</span> -<span id="L8857" class="LineNr"> 8857 </span> <span class="subxComment"># In addition, a stmt output matches a primitive's output if types match</span> -<span id="L8858" class="LineNr"> 8858 </span> <span class="subxComment"># and the primitive has a wildcard register.</span> -<span id="L8859" class="LineNr"> 8859 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L8860" class="LineNr"> 8860 </span> 55/push-ebp -<span id="L8861" class="LineNr"> 8861 </span> 89/<- %ebp 4/r32/esp -<span id="L8862" class="LineNr"> 8862 </span> <span class="subxS1Comment"># . save registers</span> -<span id="L8863" class="LineNr"> 8863 </span> 51/push-ecx -<span id="L8864" class="LineNr"> 8864 </span> 52/push-edx -<span id="L8865" class="LineNr"> 8865 </span> 53/push-ebx -<span id="L8866" class="LineNr"> 8866 </span> 56/push-esi -<span id="L8867" class="LineNr"> 8867 </span> 57/push-edi -<span id="L8868" class="LineNr"> 8868 </span> <span class="subxComment"># ecx = stmt</span> -<span id="L8869" class="LineNr"> 8869 </span> 8b/-> *(ebp+8) 1/r32/ecx -<span id="L8870" class="LineNr"> 8870 </span> <span class="subxComment"># edx = primitive</span> -<span id="L8871" class="LineNr"> 8871 </span> 8b/-> *(ebp+0xc) 2/r32/edx -<span id="L8872" class="LineNr"> 8872 </span> { -<span id="L8873" class="LineNr"> 8873 </span><span class="Constant">$mu-stmt-matches-primitive?:check-name</span>: -<span id="L8874" class="LineNr"> 8874 </span> <span class="subxComment"># if (primitive->name != stmt->operation) return false</span> -<span id="L8875" class="LineNr"> 8875 </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="L8876" class="LineNr"> 8876 </span> 3d/compare-eax-and 0/imm32/false -<span id="L8877" class="LineNr"> 8877 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 -<span id="L8878" class="LineNr"> 8878 </span> b8/copy-to-eax 0/imm32 -<span id="L8879" class="LineNr"> 8879 </span> e9/jump $mu-stmt-matches-primitive?:end/disp32 -<span id="L8880" class="LineNr"> 8880 </span> } -<span id="L8881" class="LineNr"> 8881 </span><span class="Constant">$mu-stmt-matches-primitive?:check-inouts</span>: -<span id="L8882" class="LineNr"> 8882 </span> <span class="subxComment"># for (curr/esi in stmt->inouts, curr2/edi in primitive->inouts)</span> -<span id="L8883" class="LineNr"> 8883 </span> 8b/-> *(ecx+8) 6/r32/esi <span class="subxComment"># Stmt1-inouts or Regvardef-inouts</span> -<span id="L8884" class="LineNr"> 8884 </span> 8b/-> *(edx+4) 7/r32/edi <span class="subxComment"># Primitive-inouts</span> -<span id="L8885" class="LineNr"> 8885 </span> { -<span id="L8886" class="LineNr"> 8886 </span> <span class="subxComment"># if (curr == 0 && curr2 == 0) move on to check outputs</span> -<span id="L8887" class="LineNr"> 8887 </span> { -<span id="L8888" class="LineNr"> 8888 </span> 81 7/subop/compare %esi 0/imm32 -<span id="L8889" class="LineNr"> 8889 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 -<span id="L8890" class="LineNr"> 8890 </span><span class="Constant">$mu-stmt-matches-primitive?:stmt-inout-is-null</span>: -<span id="L8891" class="LineNr"> 8891 </span> { -<span id="L8892" class="LineNr"> 8892 </span> 81 7/subop/compare %edi 0/imm32 -<span id="L8893" class="LineNr"> 8893 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 -<span id="L8894" class="LineNr"> 8894 </span> <span class="subxComment">#</span> -<span id="L8895" class="LineNr"> 8895 </span> e9/jump $mu-stmt-matches-primitive?:check-outputs/disp32 -<span id="L8896" class="LineNr"> 8896 </span> } -<span id="L8897" class="LineNr"> 8897 </span> <span class="subxComment"># return false</span> -<span id="L8898" class="LineNr"> 8898 </span> b8/copy-to-eax 0/imm32/false -<span id="L8899" class="LineNr"> 8899 </span> e9/jump $mu-stmt-matches-primitive?:end/disp32 -<span id="L8900" class="LineNr"> 8900 </span> } -<span id="L8901" class="LineNr"> 8901 </span> <span class="subxComment"># if (curr2 == 0) return false</span> -<span id="L8902" class="LineNr"> 8902 </span> { -<span id="L8903" class="LineNr"> 8903 </span> 81 7/subop/compare %edi 0/imm32 -<span id="L8904" class="LineNr"> 8904 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 -<span id="L8905" class="LineNr"> 8905 </span><span class="Constant">$mu-stmt-matches-primitive?:prim-inout-is-null</span>: -<span id="L8906" class="LineNr"> 8906 </span> b8/copy-to-eax 0/imm32/false -<span id="L8907" class="LineNr"> 8907 </span> e9/jump $mu-stmt-matches-primitive?:end/disp32 -<span id="L8908" class="LineNr"> 8908 </span> } -<span id="L8909" class="LineNr"> 8909 </span> <span class="subxComment"># if (curr != curr2) return false</span> -<span id="L8910" class="LineNr"> 8910 </span> { -<span id="L8911" class="LineNr"> 8911 </span> (<a href='mu.subx.html#L8979'>operand-matches-primitive?</a> %esi *edi) <span class="subxComment"># List-value => eax</span> -<span id="L8912" class="LineNr"> 8912 </span> 3d/compare-eax-and 0/imm32/false -<span id="L8913" class="LineNr"> 8913 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 -<span id="L8914" class="LineNr"> 8914 </span> b8/copy-to-eax 0/imm32/false -<span id="L8915" class="LineNr"> 8915 </span> e9/jump $mu-stmt-matches-primitive?:end/disp32 -<span id="L8916" class="LineNr"> 8916 </span> } -<span id="L8917" class="LineNr"> 8917 </span> <span class="subxComment"># curr=curr->next</span> -<span id="L8918" class="LineNr"> 8918 </span> 8b/-> *(esi+4) 6/r32/esi <span class="subxComment"># Stmt-var-next</span> -<span id="L8919" class="LineNr"> 8919 </span> <span class="subxComment"># curr2=curr2->next</span> -<span id="L8920" class="LineNr"> 8920 </span> 8b/-> *(edi+4) 7/r32/edi <span class="subxComment"># Stmt-var-next</span> -<span id="L8921" class="LineNr"> 8921 </span> eb/jump <span class="Constant">loop</span>/disp8 -<span id="L8922" class="LineNr"> 8922 </span> } -<span id="L8923" class="LineNr"> 8923 </span><span class="Constant">$mu-stmt-matches-primitive?:check-outputs</span>: -<span id="L8924" class="LineNr"> 8924 </span> <span class="subxComment"># for (curr/esi in stmt->outputs, curr2/edi in primitive->outputs)</span> -<span id="L8925" class="LineNr"> 8925 </span> 8b/-> *(ecx+0xc) 6/r32/esi <span class="subxComment"># Stmt1-outputs</span> -<span id="L8926" class="LineNr"> 8926 </span> 8b/-> *(edx+8) 7/r32/edi <span class="subxComment"># Primitive-outputs</span> -<span id="L8927" class="LineNr"> 8927 </span> { -<span id="L8928" class="LineNr"> 8928 </span> <span class="subxComment"># if (curr == 0) return (curr2 == 0)</span> -<span id="L8929" class="LineNr"> 8929 </span> { -<span id="L8930" class="LineNr"> 8930 </span><span class="Constant">$mu-stmt-matches-primitive?:check-output</span>: -<span id="L8931" class="LineNr"> 8931 </span> 81 7/subop/compare %esi 0/imm32 -<span id="L8932" class="LineNr"> 8932 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 -<span id="L8933" class="LineNr"> 8933 </span> { -<span id="L8934" class="LineNr"> 8934 </span> 81 7/subop/compare %edi 0/imm32 -<span id="L8935" class="LineNr"> 8935 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 -<span id="L8936" class="LineNr"> 8936 </span> <span class="subxComment"># return true</span> -<span id="L8937" class="LineNr"> 8937 </span> b8/copy-to-eax 1/imm32 -<span id="L8938" class="LineNr"> 8938 </span> e9/jump $mu-stmt-matches-primitive?:end/disp32 -<span id="L8939" class="LineNr"> 8939 </span> } -<span id="L8940" class="LineNr"> 8940 </span> <span class="subxComment"># return false</span> -<span id="L8941" class="LineNr"> 8941 </span> b8/copy-to-eax 0/imm32 -<span id="L8942" class="LineNr"> 8942 </span> e9/jump $mu-stmt-matches-primitive?:end/disp32 -<span id="L8943" class="LineNr"> 8943 </span> } -<span id="L8944" class="LineNr"> 8944 </span> <span class="subxComment"># if (curr2 == 0) return false</span> -<span id="L8945" class="LineNr"> 8945 </span> { -<span id="L8946" class="LineNr"> 8946 </span> 81 7/subop/compare %edi 0/imm32 -<span id="L8947" class="LineNr"> 8947 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 -<span id="L8948" class="LineNr"> 8948 </span> b8/copy-to-eax 0/imm32 -<span id="L8949" class="LineNr"> 8949 </span> e9/jump $mu-stmt-matches-primitive?:end/disp32 -<span id="L8950" class="LineNr"> 8950 </span> } -<span id="L8951" class="LineNr"> 8951 </span> <span class="subxComment"># if (curr != curr2) return false</span> -<span id="L8952" class="LineNr"> 8952 </span> { -<span id="L8953" class="LineNr"> 8953 </span> (<a href='mu.subx.html#L8979'>operand-matches-primitive?</a> %esi *edi) <span class="subxComment"># List-value => eax</span> -<span id="L8954" class="LineNr"> 8954 </span> 3d/compare-eax-and 0/imm32/false -<span id="L8955" class="LineNr"> 8955 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 -<span id="L8956" class="LineNr"> 8956 </span> b8/copy-to-eax 0/imm32 -<span id="L8957" class="LineNr"> 8957 </span> e9/jump $mu-stmt-matches-primitive?:end/disp32 -<span id="L8958" class="LineNr"> 8958 </span> } -<span id="L8959" class="LineNr"> 8959 </span> <span class="subxComment"># curr=curr->next</span> -<span id="L8960" class="LineNr"> 8960 </span> 8b/-> *(esi+4) 6/r32/esi <span class="subxComment"># Stmt-var-next</span> -<span id="L8961" class="LineNr"> 8961 </span> <span class="subxComment"># curr2=curr2->next</span> -<span id="L8962" class="LineNr"> 8962 </span> 8b/-> *(edi+4) 7/r32/edi <span class="subxComment"># Stmt-var-next</span> -<span id="L8963" class="LineNr"> 8963 </span> eb/jump <span class="Constant">loop</span>/disp8 -<span id="L8964" class="LineNr"> 8964 </span> } -<span id="L8965" class="LineNr"> 8965 </span><span class="Constant">$mu-stmt-matches-primitive?:return-true</span>: -<span id="L8966" class="LineNr"> 8966 </span> b8/copy-to-eax 1/imm32 -<span id="L8967" class="LineNr"> 8967 </span><span class="Constant">$mu-stmt-matches-primitive?:end</span>: -<span id="L8968" class="LineNr"> 8968 </span> <span class="subxS1Comment"># . restore registers</span> -<span id="L8969" class="LineNr"> 8969 </span> 5f/pop-to-edi -<span id="L8970" class="LineNr"> 8970 </span> 5e/pop-to-esi -<span id="L8971" class="LineNr"> 8971 </span> 5b/pop-to-ebx -<span id="L8972" class="LineNr"> 8972 </span> 5a/pop-to-edx -<span id="L8973" class="LineNr"> 8973 </span> 59/pop-to-ecx -<span id="L8974" class="LineNr"> 8974 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L8975" class="LineNr"> 8975 </span> 89/<- %esp 5/r32/ebp -<span id="L8976" class="LineNr"> 8976 </span> 5d/pop-to-ebp -<span id="L8977" class="LineNr"> 8977 </span> c3/return -<span id="L8978" class="LineNr"> 8978 </span> -<span id="L8979" class="LineNr"> 8979 </span><span class="subxFunction">operand-matches-primitive?</span>: <span class="subxComment"># s: (handle stmt-var), prim-var: (handle var) -> result/eax: boolean</span> -<span id="L8980" class="LineNr"> 8980 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L8981" class="LineNr"> 8981 </span> 55/push-ebp -<span id="L8982" class="LineNr"> 8982 </span> 89/<- %ebp 4/r32/esp -<span id="L8983" class="LineNr"> 8983 </span> <span class="subxS1Comment"># . save registers</span> -<span id="L8984" class="LineNr"> 8984 </span> 51/push-ecx -<span id="L8985" class="LineNr"> 8985 </span> 56/push-esi -<span id="L8986" class="LineNr"> 8986 </span> 57/push-edi -<span id="L8987" class="LineNr"> 8987 </span> <span class="subxComment"># ecx = s</span> -<span id="L8988" class="LineNr"> 8988 </span> 8b/-> *(ebp+8) 1/r32/ecx -<span id="L8989" class="LineNr"> 8989 </span> <span class="subxComment"># var var/esi : (handle var) = s->value</span> -<span id="L8990" class="LineNr"> 8990 </span> 8b/-> *ecx 6/r32/esi <span class="subxComment"># Stmt-var-value</span> -<span id="L8991" class="LineNr"> 8991 </span> <span class="subxComment"># edi = prim-var</span> -<span id="L8992" class="LineNr"> 8992 </span> 8b/-> *(ebp+0xc) 7/r32/edi -<span id="L8993" class="LineNr"> 8993 </span><span class="Constant">$operand-matches-primitive?:check-type</span>: -<span id="L8994" class="LineNr"> 8994 </span> <span class="subxComment"># if (var->type != prim-var->type) return false</span> -<span id="L8995" class="LineNr"> 8995 </span> (<a href='mu.subx.html#L9057'>subx-type-equal?</a> *(esi+4) *(edi+4)) <span class="subxComment"># Var-type, Var-type => eax</span> -<span id="L8996" class="LineNr"> 8996 </span> 3d/compare-eax-and 0/imm32/false -<span id="L8997" class="LineNr"> 8997 </span> b8/copy-to-eax 0/imm32/false -<span id="L8998" class="LineNr"> 8998 </span> 0f 84/jump-if-= $operand-matches-primitive?:end/disp32 -<span id="L8999" class="LineNr"> 8999 </span> { -<span id="L9000" class="LineNr"> 9000 </span><span class="Constant">$operand-matches-primitive?:check-register</span>: -<span id="L9001" class="LineNr"> 9001 </span> <span class="subxComment"># if prim-var is in memory and var is in register but dereference, match</span> -<span id="L9002" class="LineNr"> 9002 </span> { -<span id="L9003" class="LineNr"> 9003 </span> 81 7/subop/compare *(edi+0x10) 0/imm32 <span class="subxComment"># Var-register</span> -<span id="L9004" class="LineNr"> 9004 </span> 0f 85/jump-if-!= <span class="Constant">break</span>/disp32 -<span id="L9005" class="LineNr"> 9005 </span> 81 7/subop/compare *(esi+0x10) 0/imm32 <span class="subxComment"># Var-register</span> -<span id="L9006" class="LineNr"> 9006 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 -<span id="L9007" class="LineNr"> 9007 </span> 81 7/subop/compare *(ecx+8) 0/imm32/false <span class="subxComment"># Stmt-var-is-deref</span> -<span id="L9008" class="LineNr"> 9008 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 -<span id="L9009" class="LineNr"> 9009 </span> e9/jump $operand-matches-primitive?:return-true/disp32 -<span id="L9010" class="LineNr"> 9010 </span> } -<span id="L9011" class="LineNr"> 9011 </span> <span class="subxComment"># if prim-var is in register and var is in register but dereference, no match</span> -<span id="L9012" class="LineNr"> 9012 </span> { -<span id="L9013" class="LineNr"> 9013 </span> 81 7/subop/compare *(edi+0x10) 0/imm32 <span class="subxComment"># Var-register</span> -<span id="L9014" class="LineNr"> 9014 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32 -<span id="L9015" class="LineNr"> 9015 </span> 81 7/subop/compare *(esi+0x10) 0/imm32 <span class="subxComment"># Var-register</span> -<span id="L9016" class="LineNr"> 9016 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32 -<span id="L9017" class="LineNr"> 9017 </span> 81 7/subop/compare *(ecx+8) 0/imm32/false <span class="subxComment"># Stmt-var-is-deref</span> -<span id="L9018" class="LineNr"> 9018 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 -<span id="L9019" class="LineNr"> 9019 </span> e9/jump $operand-matches-primitive?:return-false/disp32 -<span id="L9020" class="LineNr"> 9020 </span> } -<span id="L9021" class="LineNr"> 9021 </span> <span class="subxComment"># return false if var->register doesn't match prim-var->register</span> -<span id="L9022" class="LineNr"> 9022 </span> { -<span id="L9023" class="LineNr"> 9023 </span> <span class="subxComment"># if register addresses are equal, it's a match</span> -<span id="L9024" class="LineNr"> 9024 </span> 8b/-> *(esi+0x10) 0/r32/eax <span class="subxComment"># Var-register</span> -<span id="L9025" class="LineNr"> 9025 </span> 39/compare *(edi+0x10) 0/r32/eax <span class="subxComment"># Var-register</span> -<span id="L9026" class="LineNr"> 9026 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 -<span id="L9027" class="LineNr"> 9027 </span> <span class="subxComment"># if either address is 0, return false</span> -<span id="L9028" class="LineNr"> 9028 </span> 3d/compare-eax-and 0/imm32 -<span id="L9029" class="LineNr"> 9029 </span> 74/jump-if-= $operand-matches-primitive?:end/disp8 <span class="subxComment"># eax goes from meaning var->register to result</span> -<span id="L9030" class="LineNr"> 9030 </span> 81 7/subop/compare *(edi+0x10) 0/imm32 <span class="subxComment"># Var-register</span> -<span id="L9031" class="LineNr"> 9031 </span> 74/jump-if-= $operand-matches-primitive?:return-false/disp8 -<span id="L9032" class="LineNr"> 9032 </span> <span class="subxComment"># if prim-var->register is wildcard, it's a match</span> -<span id="L9033" class="LineNr"> 9033 </span> (<a href='../054string-equal.subx.html#L16'>string-equal?</a> *(edi+0x10) <span class="SpecialChar"><a href='mu.subx.html#L339'>Any-register</a></span>) <span class="subxComment"># Var-register => eax</span> +<span id="L8359" class="LineNr"> 8359 </span>== code +<span id="L8360" class="LineNr"> 8360 </span><span class="subxFunction">emit-subx-primitive</span>: <span class="subxComment"># out: (addr buffered-file), stmt: (handle stmt), primitive: (handle function)</span> +<span id="L8361" class="LineNr"> 8361 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L8362" class="LineNr"> 8362 </span> 55/push-ebp +<span id="L8363" class="LineNr"> 8363 </span> 89/<- %ebp 4/r32/esp +<span id="L8364" class="LineNr"> 8364 </span> <span class="subxS1Comment"># . save registers</span> +<span id="L8365" class="LineNr"> 8365 </span> 50/push-eax +<span id="L8366" class="LineNr"> 8366 </span> 51/push-ecx +<span id="L8367" class="LineNr"> 8367 </span> <span class="subxComment"># ecx = primitive</span> +<span id="L8368" class="LineNr"> 8368 </span> 8b/-> *(ebp+0x10) 1/r32/ecx +<span id="L8369" class="LineNr"> 8369 </span> <span class="subxComment"># emit primitive name</span> +<span id="L8370" class="LineNr"> 8370 </span> (<a href='mu.subx.html#L10434'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) +<span id="L8371" class="LineNr"> 8371 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *(ecx+0xc)) <span class="subxComment"># Primitive-subx-name</span> +<span id="L8372" class="LineNr"> 8372 </span> <span class="subxComment"># emit rm32 if necessary</span> +<span id="L8373" class="LineNr"> 8373 </span> (<a href='mu.subx.html#L8390'>emit-subx-rm32</a> *(ebp+8) *(ecx+0x10) *(ebp+0xc)) <span class="subxComment"># out, Primitive-subx-rm32, stmt</span> +<span id="L8374" class="LineNr"> 8374 </span> <span class="subxComment"># emit r32 if necessary</span> +<span id="L8375" class="LineNr"> 8375 </span> (<a href='mu.subx.html#L8467'>emit-subx-r32</a> *(ebp+8) *(ecx+0x14) *(ebp+0xc)) <span class="subxComment"># out, Primitive-subx-r32, stmt</span> +<span id="L8376" class="LineNr"> 8376 </span> <span class="subxComment"># emit imm32 if necessary</span> +<span id="L8377" class="LineNr"> 8377 </span> (<a href='mu.subx.html#L8493'>emit-subx-imm32</a> *(ebp+8) *(ecx+0x18) *(ebp+0xc)) <span class="subxComment"># out, Primitive-subx-imm32, stmt</span> +<span id="L8378" class="LineNr"> 8378 </span> <span class="subxComment"># emit disp32 if necessary</span> +<span id="L8379" class="LineNr"> 8379 </span> (<a href='mu.subx.html#L8518'>emit-subx-disp32</a> *(ebp+8) *(ecx+0x1c) *(ebp+0xc)) <span class="subxComment"># out, Primitive-subx-disp32, stmt</span> +<span id="L8380" class="LineNr"> 8380 </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="L8381" class="LineNr"> 8381 </span><span class="Constant">$emit-subx-primitive:end</span>: +<span id="L8382" class="LineNr"> 8382 </span> <span class="subxS1Comment"># . restore registers</span> +<span id="L8383" class="LineNr"> 8383 </span> 59/pop-to-ecx +<span id="L8384" class="LineNr"> 8384 </span> 58/pop-to-eax +<span id="L8385" class="LineNr"> 8385 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L8386" class="LineNr"> 8386 </span> 89/<- %esp 5/r32/ebp +<span id="L8387" class="LineNr"> 8387 </span> 5d/pop-to-ebp +<span id="L8388" class="LineNr"> 8388 </span> c3/return +<span id="L8389" class="LineNr"> 8389 </span> +<span id="L8390" class="LineNr"> 8390 </span><span class="subxFunction">emit-subx-rm32</span>: <span class="subxComment"># out: (addr buffered-file), l: arg-location, stmt: (handle stmt)</span> +<span id="L8391" class="LineNr"> 8391 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L8392" class="LineNr"> 8392 </span> 55/push-ebp +<span id="L8393" class="LineNr"> 8393 </span> 89/<- %ebp 4/r32/esp +<span id="L8394" class="LineNr"> 8394 </span> <span class="subxS1Comment"># . save registers</span> +<span id="L8395" class="LineNr"> 8395 </span> 50/push-eax +<span id="L8396" class="LineNr"> 8396 </span> <span class="subxComment"># if (l == 0) return</span> +<span id="L8397" class="LineNr"> 8397 </span> 81 7/subop/compare *(ebp+0xc) 0/imm32 +<span id="L8398" class="LineNr"> 8398 </span> 74/jump-if-= $emit-subx-rm32:end/disp8 +<span id="L8399" class="LineNr"> 8399 </span> <span class="subxComment"># var v/eax: (handle var)</span> +<span id="L8400" class="LineNr"> 8400 </span> (<a href='mu.subx.html#L8410'>get-stmt-operand-from-arg-location</a> *(ebp+0x10) *(ebp+0xc)) <span class="subxComment"># => eax</span> +<span id="L8401" class="LineNr"> 8401 </span> (<a href='mu.subx.html#L8701'>emit-subx-var-as-rm32</a> *(ebp+8) %eax) +<span id="L8402" class="LineNr"> 8402 </span><span class="Constant">$emit-subx-rm32:end</span>: +<span id="L8403" class="LineNr"> 8403 </span> <span class="subxS1Comment"># . restore registers</span> +<span id="L8404" class="LineNr"> 8404 </span> 58/pop-to-eax +<span id="L8405" class="LineNr"> 8405 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L8406" class="LineNr"> 8406 </span> 89/<- %esp 5/r32/ebp +<span id="L8407" class="LineNr"> 8407 </span> 5d/pop-to-ebp +<span id="L8408" class="LineNr"> 8408 </span> c3/return +<span id="L8409" class="LineNr"> 8409 </span> +<span id="L8410" class="LineNr"> 8410 </span><span class="subxFunction">get-stmt-operand-from-arg-location</span>: <span class="subxComment"># stmt: (handle stmt), l: arg-location -> var/eax: (handle stmt-var)</span> +<span id="L8411" class="LineNr"> 8411 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L8412" class="LineNr"> 8412 </span> 55/push-ebp +<span id="L8413" class="LineNr"> 8413 </span> 89/<- %ebp 4/r32/esp +<span id="L8414" class="LineNr"> 8414 </span> <span class="subxS1Comment"># . save registers</span> +<span id="L8415" class="LineNr"> 8415 </span> 51/push-ecx +<span id="L8416" class="LineNr"> 8416 </span> <span class="subxComment"># eax = l</span> +<span id="L8417" class="LineNr"> 8417 </span> 8b/-> *(ebp+0xc) 0/r32/eax +<span id="L8418" class="LineNr"> 8418 </span> <span class="subxComment"># ecx = stmt</span> +<span id="L8419" class="LineNr"> 8419 </span> 8b/-> *(ebp+8) 1/r32/ecx +<span id="L8420" class="LineNr"> 8420 </span> <span class="subxComment"># if (l == 1) return stmt->inouts</span> +<span id="L8421" class="LineNr"> 8421 </span> { +<span id="L8422" class="LineNr"> 8422 </span> 3d/compare-eax-and 1/imm32 +<span id="L8423" class="LineNr"> 8423 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 +<span id="L8424" class="LineNr"> 8424 </span><span class="Constant">$get-stmt-operand-from-arg-location:1</span>: +<span id="L8425" class="LineNr"> 8425 </span> 8b/-> *(ecx+8) 0/r32/eax <span class="subxComment"># Stmt1-inouts or Regvardef-inouts</span> +<span id="L8426" class="LineNr"> 8426 </span> eb/jump $get-stmt-operand-from-arg-location:end/disp8 +<span id="L8427" class="LineNr"> 8427 </span> } +<span id="L8428" class="LineNr"> 8428 </span> <span class="subxComment"># if (l == 2) return stmt->inouts->next</span> +<span id="L8429" class="LineNr"> 8429 </span> { +<span id="L8430" class="LineNr"> 8430 </span> 3d/compare-eax-and 2/imm32 +<span id="L8431" class="LineNr"> 8431 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 +<span id="L8432" class="LineNr"> 8432 </span><span class="Constant">$get-stmt-operand-from-arg-location:2</span>: +<span id="L8433" class="LineNr"> 8433 </span> 8b/-> *(ecx+8) 0/r32/eax <span class="subxComment"># Stmt1-inouts or Regvardef-inouts</span> +<span id="L8434" class="LineNr"> 8434 </span> 8b/-> *(eax+4) 0/r32/eax <span class="subxComment"># Stmt-var-next</span> +<span id="L8435" class="LineNr"> 8435 </span> eb/jump $get-stmt-operand-from-arg-location:end/disp8 +<span id="L8436" class="LineNr"> 8436 </span> } +<span id="L8437" class="LineNr"> 8437 </span> <span class="subxComment"># if (l == 3) return stmt->outputs</span> +<span id="L8438" class="LineNr"> 8438 </span> { +<span id="L8439" class="LineNr"> 8439 </span> 3d/compare-eax-and 3/imm32 +<span id="L8440" class="LineNr"> 8440 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 +<span id="L8441" class="LineNr"> 8441 </span><span class="Constant">$get-stmt-operand-from-arg-location:3</span>: +<span id="L8442" class="LineNr"> 8442 </span> 8b/-> *(ecx+0xc) 0/r32/eax <span class="subxComment"># Stmt1-outputs</span> +<span id="L8443" class="LineNr"> 8443 </span> eb/jump $get-stmt-operand-from-arg-location:end/disp8 +<span id="L8444" class="LineNr"> 8444 </span> } +<span id="L8445" class="LineNr"> 8445 </span> <span class="subxComment"># abort</span> +<span id="L8446" class="LineNr"> 8446 </span> e9/jump $get-stmt-operand-from-arg-location:abort/disp32 +<span id="L8447" class="LineNr"> 8447 </span><span class="Constant">$get-stmt-operand-from-arg-location:end</span>: +<span id="L8448" class="LineNr"> 8448 </span> <span class="subxS1Comment"># . restore registers</span> +<span id="L8449" class="LineNr"> 8449 </span> 59/pop-to-ecx +<span id="L8450" class="LineNr"> 8450 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L8451" class="LineNr"> 8451 </span> 89/<- %esp 5/r32/ebp +<span id="L8452" class="LineNr"> 8452 </span> 5d/pop-to-ebp +<span id="L8453" class="LineNr"> 8453 </span> c3/return +<span id="L8454" class="LineNr"> 8454 </span> +<span id="L8455" class="LineNr"> 8455 </span><span class="Constant">$get-stmt-operand-from-arg-location:abort</span>: +<span id="L8456" class="LineNr"> 8456 </span> <span class="subxComment"># error("invalid arg-location " eax)</span> +<span id="L8457" class="LineNr"> 8457 </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">"invalid arg-location "</span>) +<span id="L8458" class="LineNr"> 8458 </span> (<a href='../066print-int.subx.html#L266'>print-int32-buffered</a> <span class="SpecialChar"><a href='../065write-buffered.subx.html#L209'>Stderr</a></span> %eax) +<span id="L8459" class="LineNr"> 8459 </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="SpecialChar"><a href='../051test.subx.html#L83'>Newline</a></span>) +<span id="L8460" class="LineNr"> 8460 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <span class="SpecialChar"><a href='../065write-buffered.subx.html#L209'>Stderr</a></span>) +<span id="L8461" class="LineNr"> 8461 </span> <span class="subxS1Comment"># . syscall(exit, 1)</span> +<span id="L8462" class="LineNr"> 8462 </span> bb/copy-to-ebx 1/imm32 +<span id="L8463" class="LineNr"> 8463 </span> b8/copy-to-eax 1/imm32/exit +<span id="L8464" class="LineNr"> 8464 </span> cd/syscall 0x80/imm8 +<span id="L8465" class="LineNr"> 8465 </span> <span class="subxComment"># never gets here</span> +<span id="L8466" class="LineNr"> 8466 </span> +<span id="L8467" class="LineNr"> 8467 </span><span class="subxFunction">emit-subx-r32</span>: <span class="subxComment"># out: (addr buffered-file), l: arg-location, stmt: (handle stmt)</span> +<span id="L8468" class="LineNr"> 8468 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L8469" class="LineNr"> 8469 </span> 55/push-ebp +<span id="L8470" class="LineNr"> 8470 </span> 89/<- %ebp 4/r32/esp +<span id="L8471" class="LineNr"> 8471 </span> <span class="subxS1Comment"># . save registers</span> +<span id="L8472" class="LineNr"> 8472 </span> 50/push-eax +<span id="L8473" class="LineNr"> 8473 </span> 51/push-ecx +<span id="L8474" class="LineNr"> 8474 </span> <span class="subxComment"># if (location == 0) return</span> +<span id="L8475" class="LineNr"> 8475 </span> 81 7/subop/compare *(ebp+0xc) 0/imm32 +<span id="L8476" class="LineNr"> 8476 </span> 0f 84/jump-if-= $emit-subx-r32:end/disp32 +<span id="L8477" class="LineNr"> 8477 </span> <span class="subxComment"># var v/eax: (handle var)</span> +<span id="L8478" class="LineNr"> 8478 </span> (<a href='mu.subx.html#L8410'>get-stmt-operand-from-arg-location</a> *(ebp+0x10) *(ebp+0xc)) <span class="subxComment"># => eax</span> +<span id="L8479" class="LineNr"> 8479 </span> 8b/-> *eax 0/r32/eax <span class="subxComment"># Stmt-var-value</span> +<span id="L8480" class="LineNr"> 8480 </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> +<span id="L8481" class="LineNr"> 8481 </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="L8482" class="LineNr"> 8482 </span> (<a href='../066print-int.subx.html#L266'>print-int32-buffered</a> *(ebp+8) *eax) +<span id="L8483" class="LineNr"> 8483 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"/r32"</span>) +<span id="L8484" class="LineNr"> 8484 </span><span class="Constant">$emit-subx-r32:end</span>: +<span id="L8485" class="LineNr"> 8485 </span> <span class="subxS1Comment"># . restore registers</span> +<span id="L8486" class="LineNr"> 8486 </span> 59/pop-to-ecx +<span id="L8487" class="LineNr"> 8487 </span> 58/pop-to-eax +<span id="L8488" class="LineNr"> 8488 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L8489" class="LineNr"> 8489 </span> 89/<- %esp 5/r32/ebp +<span id="L8490" class="LineNr"> 8490 </span> 5d/pop-to-ebp +<span id="L8491" class="LineNr"> 8491 </span> c3/return +<span id="L8492" class="LineNr"> 8492 </span> +<span id="L8493" class="LineNr"> 8493 </span><span class="subxFunction">emit-subx-imm32</span>: <span class="subxComment"># out: (addr buffered-file), l: arg-location, stmt: (handle stmt)</span> +<span id="L8494" class="LineNr"> 8494 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L8495" class="LineNr"> 8495 </span> 55/push-ebp +<span id="L8496" class="LineNr"> 8496 </span> 89/<- %ebp 4/r32/esp +<span id="L8497" class="LineNr"> 8497 </span> <span class="subxS1Comment"># . save registers</span> +<span id="L8498" class="LineNr"> 8498 </span> 50/push-eax +<span id="L8499" class="LineNr"> 8499 </span> 51/push-ecx +<span id="L8500" class="LineNr"> 8500 </span> <span class="subxComment"># if (location == 0) return</span> +<span id="L8501" class="LineNr"> 8501 </span> 81 7/subop/compare *(ebp+0xc) 0/imm32 +<span id="L8502" class="LineNr"> 8502 </span> 74/jump-if-= $emit-subx-imm32:end/disp8 +<span id="L8503" class="LineNr"> 8503 </span> <span class="subxComment"># var v/eax: (handle var)</span> +<span id="L8504" class="LineNr"> 8504 </span> (<a href='mu.subx.html#L8410'>get-stmt-operand-from-arg-location</a> *(ebp+0x10) *(ebp+0xc)) <span class="subxComment"># => eax</span> +<span id="L8505" class="LineNr"> 8505 </span> 8b/-> *eax 0/r32/eax <span class="subxComment"># Stmt-var-value</span> +<span id="L8506" class="LineNr"> 8506 </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="L8507" class="LineNr"> 8507 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *eax) <span class="subxComment"># Var-name</span> +<span id="L8508" class="LineNr"> 8508 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"/imm32"</span>) +<span id="L8509" class="LineNr"> 8509 </span><span class="Constant">$emit-subx-imm32:end</span>: +<span id="L8510" class="LineNr"> 8510 </span> <span class="subxS1Comment"># . restore registers</span> +<span id="L8511" class="LineNr"> 8511 </span> 59/pop-to-ecx +<span id="L8512" class="LineNr"> 8512 </span> 58/pop-to-eax +<span id="L8513" class="LineNr"> 8513 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L8514" class="LineNr"> 8514 </span> 89/<- %esp 5/r32/ebp +<span id="L8515" class="LineNr"> 8515 </span> 5d/pop-to-ebp +<span id="L8516" class="LineNr"> 8516 </span> c3/return +<span id="L8517" class="LineNr"> 8517 </span> +<span id="L8518" class="LineNr"> 8518 </span><span class="subxFunction">emit-subx-disp32</span>: <span class="subxComment"># out: (addr buffered-file), l: arg-location, stmt: (handle stmt)</span> +<span id="L8519" class="LineNr"> 8519 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L8520" class="LineNr"> 8520 </span> 55/push-ebp +<span id="L8521" class="LineNr"> 8521 </span> 89/<- %ebp 4/r32/esp +<span id="L8522" class="LineNr"> 8522 </span> <span class="subxS1Comment"># . save registers</span> +<span id="L8523" class="LineNr"> 8523 </span> 50/push-eax +<span id="L8524" class="LineNr"> 8524 </span> 51/push-ecx +<span id="L8525" class="LineNr"> 8525 </span> <span class="subxComment"># if (location == 0) return</span> +<span id="L8526" class="LineNr"> 8526 </span> 81 7/subop/compare *(ebp+0xc) 0/imm32 +<span id="L8527" class="LineNr"> 8527 </span> 0f 84/jump-if-= $emit-subx-disp32:end/disp32 +<span id="L8528" class="LineNr"> 8528 </span> <span class="subxComment"># var v/eax: (handle var)</span> +<span id="L8529" class="LineNr"> 8529 </span> (<a href='mu.subx.html#L8410'>get-stmt-operand-from-arg-location</a> *(ebp+0x10) *(ebp+0xc)) <span class="subxComment"># => eax</span> +<span id="L8530" class="LineNr"> 8530 </span> 8b/-> *eax 0/r32/eax <span class="subxComment"># Stmt-var-value</span> +<span id="L8531" class="LineNr"> 8531 </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="L8532" class="LineNr"> 8532 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *eax) <span class="subxComment"># Var-name</span> +<span id="L8533" class="LineNr"> 8533 </span> <span class="subxComment"># hack: if instruction operation starts with "break", emit ":break"</span> +<span id="L8534" class="LineNr"> 8534 </span> <span class="subxComment"># var name/ecx: (addr array byte) = stmt->operation</span> +<span id="L8535" class="LineNr"> 8535 </span> 8b/-> *(ebp+0x10) 0/r32/eax +<span id="L8536" class="LineNr"> 8536 </span> 8b/-> *(eax+4) 1/r32/ecx +<span id="L8537" class="LineNr"> 8537 </span> { +<span id="L8538" class="LineNr"> 8538 </span> (<a href='../054string-equal.subx.html#L58'>string-starts-with?</a> %ecx <span class="Constant">"break"</span>) <span class="subxComment"># => eax</span> +<span id="L8539" class="LineNr"> 8539 </span> 3d/compare-eax-and 0/imm32/false +<span id="L8540" class="LineNr"> 8540 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 +<span id="L8541" class="LineNr"> 8541 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">":break"</span>) +<span id="L8542" class="LineNr"> 8542 </span> } +<span id="L8543" class="LineNr"> 8543 </span> <span class="subxComment"># hack: if instruction operation starts with "loop", emit ":loop"</span> +<span id="L8544" class="LineNr"> 8544 </span> { +<span id="L8545" class="LineNr"> 8545 </span> (<a href='../054string-equal.subx.html#L58'>string-starts-with?</a> %ecx <span class="Constant">"loop"</span>) <span class="subxComment"># => eax</span> +<span id="L8546" class="LineNr"> 8546 </span> 3d/compare-eax-and 0/imm32/false +<span id="L8547" class="LineNr"> 8547 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 +<span id="L8548" class="LineNr"> 8548 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">":loop"</span>) +<span id="L8549" class="LineNr"> 8549 </span> } +<span id="L8550" class="LineNr"> 8550 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"/disp32"</span>) +<span id="L8551" class="LineNr"> 8551 </span><span class="Constant">$emit-subx-disp32:end</span>: +<span id="L8552" class="LineNr"> 8552 </span> <span class="subxS1Comment"># . restore registers</span> +<span id="L8553" class="LineNr"> 8553 </span> 59/pop-to-ecx +<span id="L8554" class="LineNr"> 8554 </span> 58/pop-to-eax +<span id="L8555" class="LineNr"> 8555 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L8556" class="LineNr"> 8556 </span> 89/<- %esp 5/r32/ebp +<span id="L8557" class="LineNr"> 8557 </span> 5d/pop-to-ebp +<span id="L8558" class="LineNr"> 8558 </span> c3/return +<span id="L8559" class="LineNr"> 8559 </span> +<span id="L8560" class="LineNr"> 8560 </span><span class="subxFunction">emit-subx-call</span>: <span class="subxComment"># out: (addr buffered-file), stmt: (handle stmt), callee: (handle function)</span> +<span id="L8561" class="LineNr"> 8561 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L8562" class="LineNr"> 8562 </span> 55/push-ebp +<span id="L8563" class="LineNr"> 8563 </span> 89/<- %ebp 4/r32/esp +<span id="L8564" class="LineNr"> 8564 </span> <span class="subxS1Comment"># . save registers</span> +<span id="L8565" class="LineNr"> 8565 </span> 51/push-ecx +<span id="L8566" class="LineNr"> 8566 </span> <span class="subxComment">#</span> +<span id="L8567" class="LineNr"> 8567 </span> (<a href='mu.subx.html#L10434'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) +<span id="L8568" class="LineNr"> 8568 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"("</span>) +<span id="L8569" class="LineNr"> 8569 </span> <span class="subxH1Comment"># - emit function name</span> +<span id="L8570" class="LineNr"> 8570 </span> 8b/-> *(ebp+0x10) 1/r32/ecx +<span id="L8571" class="LineNr"> 8571 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *(ecx+4)) <span class="subxComment"># Function-subx-name</span> +<span id="L8572" class="LineNr"> 8572 </span> <span class="subxH1Comment"># - emit arguments</span> +<span id="L8573" class="LineNr"> 8573 </span> <span class="subxComment"># var curr/ecx: (handle stmt-var) = stmt->inouts</span> +<span id="L8574" class="LineNr"> 8574 </span> 8b/-> *(ebp+0xc) 1/r32/ecx +<span id="L8575" class="LineNr"> 8575 </span> 8b/-> *(ecx+8) 1/r32/ecx <span class="subxComment"># Stmt1-inouts</span> +<span id="L8576" class="LineNr"> 8576 </span> { +<span id="L8577" class="LineNr"> 8577 </span> <span class="subxComment"># if (curr == null) break</span> +<span id="L8578" class="LineNr"> 8578 </span> 81 7/subop/compare %ecx 0/imm32 +<span id="L8579" class="LineNr"> 8579 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 +<span id="L8580" class="LineNr"> 8580 </span> <span class="subxComment">#</span> +<span id="L8581" class="LineNr"> 8581 </span> (<a href='mu.subx.html#L8634'>emit-subx-call-operand</a> *(ebp+8) %ecx) +<span id="L8582" class="LineNr"> 8582 </span> <span class="subxComment"># curr = curr->next</span> +<span id="L8583" class="LineNr"> 8583 </span> 8b/-> *(ecx+4) 1/r32/ecx <span class="subxComment"># Stmt-var-next</span> +<span id="L8584" class="LineNr"> 8584 </span> eb/jump <span class="Constant">loop</span>/disp8 +<span id="L8585" class="LineNr"> 8585 </span> } +<span id="L8586" class="LineNr"> 8586 </span> <span class="subxComment">#</span> +<span id="L8587" class="LineNr"> 8587 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">")\n"</span>) +<span id="L8588" class="LineNr"> 8588 </span><span class="Constant">$emit-subx-call:end</span>: +<span id="L8589" class="LineNr"> 8589 </span> <span class="subxS1Comment"># . restore registers</span> +<span id="L8590" class="LineNr"> 8590 </span> 59/pop-to-ecx +<span id="L8591" class="LineNr"> 8591 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L8592" class="LineNr"> 8592 </span> 89/<- %esp 5/r32/ebp +<span id="L8593" class="LineNr"> 8593 </span> 5d/pop-to-ebp +<span id="L8594" class="LineNr"> 8594 </span> c3/return +<span id="L8595" class="LineNr"> 8595 </span> +<span id="L8596" class="LineNr"> 8596 </span><span class="subxComment"># like a function call, except we have no idea what function it is</span> +<span id="L8597" class="LineNr"> 8597 </span><span class="subxComment"># we hope it's defined in SubX and that the types are ok</span> +<span id="L8598" class="LineNr"> 8598 </span><span class="subxFunction">emit-hailmary-call</span>: <span class="subxComment"># out: (addr buffered-file), stmt: (handle stmt)</span> +<span id="L8599" class="LineNr"> 8599 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L8600" class="LineNr"> 8600 </span> 55/push-ebp +<span id="L8601" class="LineNr"> 8601 </span> 89/<- %ebp 4/r32/esp +<span id="L8602" class="LineNr"> 8602 </span> <span class="subxS1Comment"># . save registers</span> +<span id="L8603" class="LineNr"> 8603 </span> 51/push-ecx +<span id="L8604" class="LineNr"> 8604 </span> <span class="subxComment">#</span> +<span id="L8605" class="LineNr"> 8605 </span> (<a href='mu.subx.html#L10434'>emit-indent</a> *(ebp+8) *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span>) +<span id="L8606" class="LineNr"> 8606 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"("</span>) +<span id="L8607" class="LineNr"> 8607 </span> <span class="subxComment"># ecx = stmt</span> +<span id="L8608" class="LineNr"> 8608 </span> 8b/-> *(ebp+0xc) 1/r32/ecx +<span id="L8609" class="LineNr"> 8609 </span> <span class="subxH1Comment"># - emit function name</span> +<span id="L8610" class="LineNr"> 8610 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *(ecx+4)) <span class="subxComment"># Stmt1-operation</span> +<span id="L8611" class="LineNr"> 8611 </span> <span class="subxH1Comment"># - emit arguments</span> +<span id="L8612" class="LineNr"> 8612 </span> <span class="subxComment"># var curr/ecx: (handle stmt-var) = stmt->inouts</span> +<span id="L8613" class="LineNr"> 8613 </span> 8b/-> *(ecx+8) 1/r32/ecx <span class="subxComment"># Stmt1-inouts</span> +<span id="L8614" class="LineNr"> 8614 </span> { +<span id="L8615" class="LineNr"> 8615 </span> <span class="subxComment"># if (curr == null) break</span> +<span id="L8616" class="LineNr"> 8616 </span> 81 7/subop/compare %ecx 0/imm32 +<span id="L8617" class="LineNr"> 8617 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 +<span id="L8618" class="LineNr"> 8618 </span> <span class="subxComment">#</span> +<span id="L8619" class="LineNr"> 8619 </span> (<a href='mu.subx.html#L8634'>emit-subx-call-operand</a> *(ebp+8) %ecx) +<span id="L8620" class="LineNr"> 8620 </span> <span class="subxComment"># curr = curr->next</span> +<span id="L8621" class="LineNr"> 8621 </span> 8b/-> *(ecx+4) 1/r32/ecx <span class="subxComment"># Stmt-var-next</span> +<span id="L8622" class="LineNr"> 8622 </span> eb/jump <span class="Constant">loop</span>/disp8 +<span id="L8623" class="LineNr"> 8623 </span> } +<span id="L8624" class="LineNr"> 8624 </span> <span class="subxComment">#</span> +<span id="L8625" class="LineNr"> 8625 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">")\n"</span>) +<span id="L8626" class="LineNr"> 8626 </span><span class="Constant">$emit-hailmary-call:end</span>: +<span id="L8627" class="LineNr"> 8627 </span> <span class="subxS1Comment"># . restore registers</span> +<span id="L8628" class="LineNr"> 8628 </span> 59/pop-to-ecx +<span id="L8629" class="LineNr"> 8629 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L8630" class="LineNr"> 8630 </span> 89/<- %esp 5/r32/ebp +<span id="L8631" class="LineNr"> 8631 </span> 5d/pop-to-ebp +<span id="L8632" class="LineNr"> 8632 </span> c3/return +<span id="L8633" class="LineNr"> 8633 </span> +<span id="L8634" class="LineNr"> 8634 </span><span class="subxFunction">emit-subx-call-operand</span>: <span class="subxComment"># out: (addr buffered-file), s: (handle stmt-var)</span> +<span id="L8635" class="LineNr"> 8635 </span> <span class="subxComment"># shares code with emit-subx-var-as-rm32</span> +<span id="L8636" class="LineNr"> 8636 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L8637" class="LineNr"> 8637 </span> 55/push-ebp +<span id="L8638" class="LineNr"> 8638 </span> 89/<- %ebp 4/r32/esp +<span id="L8639" class="LineNr"> 8639 </span> <span class="subxS1Comment"># . save registers</span> +<span id="L8640" class="LineNr"> 8640 </span> 50/push-eax +<span id="L8641" class="LineNr"> 8641 </span> 51/push-ecx +<span id="L8642" class="LineNr"> 8642 </span> 56/push-esi +<span id="L8643" class="LineNr"> 8643 </span> <span class="subxComment"># ecx = s</span> +<span id="L8644" class="LineNr"> 8644 </span> 8b/-> *(ebp+0xc) 1/r32/ecx +<span id="L8645" class="LineNr"> 8645 </span> <span class="subxComment"># var operand/esi: (handle var) = s->value</span> +<span id="L8646" class="LineNr"> 8646 </span> 8b/-> *ecx 6/r32/esi <span class="subxComment"># Stmt-var-value</span> +<span id="L8647" class="LineNr"> 8647 </span> <span class="subxComment"># if (operand->register && s->is-deref?) emit "*__"</span> +<span id="L8648" class="LineNr"> 8648 </span> { +<span id="L8649" class="LineNr"> 8649 </span><span class="Constant">$emit-subx-call-operand:check-for-register-indirect</span>: +<span id="L8650" class="LineNr"> 8650 </span> 81 7/subop/compare *(esi+0x10) 0/imm32 <span class="subxComment"># Var-register</span> +<span id="L8651" class="LineNr"> 8651 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 +<span id="L8652" class="LineNr"> 8652 </span> 81 7/subop/compare *(ecx+8) 0/imm32/false <span class="subxComment"># Stmt-var-is-deref</span> +<span id="L8653" class="LineNr"> 8653 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 +<span id="L8654" class="LineNr"> 8654 </span><span class="Constant">$emit-subx-call-operand:register-indirect</span>: +<span id="L8655" class="LineNr"> 8655 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" *"</span>) +<span id="L8656" class="LineNr"> 8656 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *(esi+0x10)) <span class="subxComment"># Var-register</span> +<span id="L8657" class="LineNr"> 8657 </span> e9/jump $emit-subx-call-operand:end/disp32 +<span id="L8658" class="LineNr"> 8658 </span> } +<span id="L8659" class="LineNr"> 8659 </span> <span class="subxComment"># if (operand->register && !s->is-deref?) emit "%__"</span> +<span id="L8660" class="LineNr"> 8660 </span> { +<span id="L8661" class="LineNr"> 8661 </span><span class="Constant">$emit-subx-call-operand:check-for-register-direct</span>: +<span id="L8662" class="LineNr"> 8662 </span> 81 7/subop/compare *(esi+0x10) 0/imm32 <span class="subxComment"># Var-register</span> +<span id="L8663" class="LineNr"> 8663 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 +<span id="L8664" class="LineNr"> 8664 </span> 81 7/subop/compare *(ecx+8) 0/imm32/false <span class="subxComment"># Stmt-var-is-deref</span> +<span id="L8665" class="LineNr"> 8665 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 +<span id="L8666" class="LineNr"> 8666 </span><span class="Constant">$emit-subx-call-operand:register-direct</span>: +<span id="L8667" class="LineNr"> 8667 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" %"</span>) +<span id="L8668" class="LineNr"> 8668 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *(esi+0x10)) <span class="subxComment"># Var-register</span> +<span id="L8669" class="LineNr"> 8669 </span> e9/jump $emit-subx-call-operand:end/disp32 +<span id="L8670" class="LineNr"> 8670 </span> } +<span id="L8671" class="LineNr"> 8671 </span> <span class="subxComment"># else if (operand->stack-offset) emit "*(ebp+__)"</span> +<span id="L8672" class="LineNr"> 8672 </span> { +<span id="L8673" class="LineNr"> 8673 </span> 81 7/subop/compare *(esi+0xc) 0/imm32 <span class="subxComment"># Var-offset</span> +<span id="L8674" class="LineNr"> 8674 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 +<span id="L8675" class="LineNr"> 8675 </span><span class="Constant">$emit-subx-call-operand:stack</span>: +<span id="L8676" class="LineNr"> 8676 </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="L8677" class="LineNr"> 8677 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"*(ebp+"</span>) +<span id="L8678" class="LineNr"> 8678 </span> (<a href='../066print-int.subx.html#L266'>print-int32-buffered</a> *(ebp+8) *(esi+0xc)) <span class="subxComment"># Var-offset</span> +<span id="L8679" class="LineNr"> 8679 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">")"</span>) +<span id="L8680" class="LineNr"> 8680 </span> e9/jump $emit-subx-call-operand:end/disp32 +<span id="L8681" class="LineNr"> 8681 </span> } +<span id="L8682" class="LineNr"> 8682 </span> <span class="subxComment"># else if (operand->type == literal) emit "__"</span> +<span id="L8683" class="LineNr"> 8683 </span> { +<span id="L8684" class="LineNr"> 8684 </span> 8b/-> *(esi+4) 0/r32/eax <span class="subxComment"># Var-type</span> +<span id="L8685" class="LineNr"> 8685 </span> 81 7/subop/compare *eax 0/imm32 <span class="subxComment"># Tree-left</span> +<span id="L8686" class="LineNr"> 8686 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 +<span id="L8687" class="LineNr"> 8687 </span><span class="Constant">$emit-subx-call-operand:literal</span>: +<span id="L8688" class="LineNr"> 8688 </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="L8689" class="LineNr"> 8689 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *esi) +<span id="L8690" class="LineNr"> 8690 </span> } +<span id="L8691" class="LineNr"> 8691 </span><span class="Constant">$emit-subx-call-operand:end</span>: +<span id="L8692" class="LineNr"> 8692 </span> <span class="subxS1Comment"># . restore registers</span> +<span id="L8693" class="LineNr"> 8693 </span> 5e/pop-to-esi +<span id="L8694" class="LineNr"> 8694 </span> 59/pop-to-ecx +<span id="L8695" class="LineNr"> 8695 </span> 58/pop-to-eax +<span id="L8696" class="LineNr"> 8696 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L8697" class="LineNr"> 8697 </span> 89/<- %esp 5/r32/ebp +<span id="L8698" class="LineNr"> 8698 </span> 5d/pop-to-ebp +<span id="L8699" class="LineNr"> 8699 </span> c3/return +<span id="L8700" class="LineNr"> 8700 </span> +<span id="L8701" class="LineNr"> 8701 </span><span class="subxFunction">emit-subx-var-as-rm32</span>: <span class="subxComment"># out: (addr buffered-file), s: (handle stmt-var)</span> +<span id="L8702" class="LineNr"> 8702 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L8703" class="LineNr"> 8703 </span> 55/push-ebp +<span id="L8704" class="LineNr"> 8704 </span> 89/<- %ebp 4/r32/esp +<span id="L8705" class="LineNr"> 8705 </span> <span class="subxS1Comment"># . save registers</span> +<span id="L8706" class="LineNr"> 8706 </span> 50/push-eax +<span id="L8707" class="LineNr"> 8707 </span> 51/push-ecx +<span id="L8708" class="LineNr"> 8708 </span> 56/push-esi +<span id="L8709" class="LineNr"> 8709 </span> <span class="subxComment"># ecx = s</span> +<span id="L8710" class="LineNr"> 8710 </span> 8b/-> *(ebp+0xc) 1/r32/ecx +<span id="L8711" class="LineNr"> 8711 </span> <span class="subxComment"># var operand/esi: (handle var) = s->value</span> +<span id="L8712" class="LineNr"> 8712 </span> 8b/-> *ecx 6/r32/esi <span class="subxComment"># Stmt-var-value</span> +<span id="L8713" class="LineNr"> 8713 </span> <span class="subxComment"># if (operand->register && s->is-deref?) emit "*__"</span> +<span id="L8714" class="LineNr"> 8714 </span> { +<span id="L8715" class="LineNr"> 8715 </span><span class="Constant">$emit-subx-var-as-rm32:check-for-register-indirect</span>: +<span id="L8716" class="LineNr"> 8716 </span> 81 7/subop/compare *(esi+0x10) 0/imm32 <span class="subxComment"># Var-register</span> +<span id="L8717" class="LineNr"> 8717 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 +<span id="L8718" class="LineNr"> 8718 </span> 81 7/subop/compare *(ecx+8) 0/imm32/false <span class="subxComment"># Stmt-var-is-deref</span> +<span id="L8719" class="LineNr"> 8719 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 +<span id="L8720" class="LineNr"> 8720 </span><span class="Constant">$emit-subx-var-as-rm32:register-indirect</span>: +<span id="L8721" class="LineNr"> 8721 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" *"</span>) +<span id="L8722" class="LineNr"> 8722 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *(esi+0x10)) <span class="subxComment"># Var-register</span> +<span id="L8723" class="LineNr"> 8723 </span> } +<span id="L8724" class="LineNr"> 8724 </span> <span class="subxComment"># if (operand->register && !s->is-deref?) emit "%__"</span> +<span id="L8725" class="LineNr"> 8725 </span> { +<span id="L8726" class="LineNr"> 8726 </span><span class="Constant">$emit-subx-var-as-rm32:check-for-register-direct</span>: +<span id="L8727" class="LineNr"> 8727 </span> 81 7/subop/compare *(esi+0x10) 0/imm32 <span class="subxComment"># Var-register</span> +<span id="L8728" class="LineNr"> 8728 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 +<span id="L8729" class="LineNr"> 8729 </span> 81 7/subop/compare *(ecx+8) 0/imm32/false <span class="subxComment"># Stmt-var-is-deref</span> +<span id="L8730" class="LineNr"> 8730 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 +<span id="L8731" class="LineNr"> 8731 </span><span class="Constant">$emit-subx-var-as-rm32:register-direct</span>: +<span id="L8732" class="LineNr"> 8732 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" %"</span>) +<span id="L8733" class="LineNr"> 8733 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) *(esi+0x10)) <span class="subxComment"># Var-register</span> +<span id="L8734" class="LineNr"> 8734 </span> } +<span id="L8735" class="LineNr"> 8735 </span> <span class="subxComment"># else if (operand->stack-offset) emit "*(ebp+__)"</span> +<span id="L8736" class="LineNr"> 8736 </span> { +<span id="L8737" class="LineNr"> 8737 </span> 81 7/subop/compare *(esi+0xc) 0/imm32 <span class="subxComment"># Var-offset</span> +<span id="L8738" class="LineNr"> 8738 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 +<span id="L8739" class="LineNr"> 8739 </span><span class="Constant">$emit-subx-var-as-rm32:stack</span>: +<span id="L8740" class="LineNr"> 8740 </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="L8741" class="LineNr"> 8741 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">"*(ebp+"</span>) +<span id="L8742" class="LineNr"> 8742 </span> (<a href='../066print-int.subx.html#L266'>print-int32-buffered</a> *(ebp+8) *(esi+0xc)) <span class="subxComment"># Var-offset</span> +<span id="L8743" class="LineNr"> 8743 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">")"</span>) +<span id="L8744" class="LineNr"> 8744 </span> } +<span id="L8745" class="LineNr"> 8745 </span><span class="Constant">$emit-subx-var-as-rm32:end</span>: +<span id="L8746" class="LineNr"> 8746 </span> <span class="subxS1Comment"># . restore registers</span> +<span id="L8747" class="LineNr"> 8747 </span> 5e/pop-to-esi +<span id="L8748" class="LineNr"> 8748 </span> 59/pop-to-ecx +<span id="L8749" class="LineNr"> 8749 </span> 58/pop-to-eax +<span id="L8750" class="LineNr"> 8750 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L8751" class="LineNr"> 8751 </span> 89/<- %esp 5/r32/ebp +<span id="L8752" class="LineNr"> 8752 </span> 5d/pop-to-ebp +<span id="L8753" class="LineNr"> 8753 </span> c3/return +<span id="L8754" class="LineNr"> 8754 </span> +<span id="L8755" class="LineNr"> 8755 </span><span class="subxFunction">find-matching-function</span>: <span class="subxComment"># functions: (addr function), stmt: (handle stmt) -> result/eax: (handle function)</span> +<span id="L8756" class="LineNr"> 8756 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L8757" class="LineNr"> 8757 </span> 55/push-ebp +<span id="L8758" class="LineNr"> 8758 </span> 89/<- %ebp 4/r32/esp +<span id="L8759" class="LineNr"> 8759 </span> <span class="subxS1Comment"># . save registers</span> +<span id="L8760" class="LineNr"> 8760 </span> 51/push-ecx +<span id="L8761" class="LineNr"> 8761 </span> <span class="subxComment"># var curr/ecx: (handle function) = functions</span> +<span id="L8762" class="LineNr"> 8762 </span> 8b/-> *(ebp+8) 1/r32/ecx +<span id="L8763" class="LineNr"> 8763 </span> { +<span id="L8764" class="LineNr"> 8764 </span> <span class="subxComment"># if (curr == null) break</span> +<span id="L8765" class="LineNr"> 8765 </span> 81 7/subop/compare %ecx 0/imm32 +<span id="L8766" class="LineNr"> 8766 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 +<span id="L8767" class="LineNr"> 8767 </span> <span class="subxComment"># if match(stmt, curr) return curr</span> +<span id="L8768" class="LineNr"> 8768 </span> { +<span id="L8769" class="LineNr"> 8769 </span> (<a href='mu.subx.html#L8831'>mu-stmt-matches-function?</a> *(ebp+0xc) %ecx) <span class="subxComment"># => eax</span> +<span id="L8770" class="LineNr"> 8770 </span> 3d/compare-eax-and 0/imm32/false +<span id="L8771" class="LineNr"> 8771 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 +<span id="L8772" class="LineNr"> 8772 </span> 89/<- %eax 1/r32/ecx +<span id="L8773" class="LineNr"> 8773 </span> eb/jump $find-matching-function:end/disp8 +<span id="L8774" class="LineNr"> 8774 </span> } +<span id="L8775" class="LineNr"> 8775 </span> <span class="subxComment"># curr = curr->next</span> +<span id="L8776" class="LineNr"> 8776 </span> 8b/-> *(ecx+0x14) 1/r32/ecx <span class="subxComment"># Function-next</span> +<span id="L8777" class="LineNr"> 8777 </span> eb/jump <span class="Constant">loop</span>/disp8 +<span id="L8778" class="LineNr"> 8778 </span> } +<span id="L8779" class="LineNr"> 8779 </span> <span class="subxComment"># return null</span> +<span id="L8780" class="LineNr"> 8780 </span> b8/copy-to-eax 0/imm32 +<span id="L8781" class="LineNr"> 8781 </span><span class="Constant">$find-matching-function:end</span>: +<span id="L8782" class="LineNr"> 8782 </span> <span class="subxS1Comment"># . restore registers</span> +<span id="L8783" class="LineNr"> 8783 </span> 59/pop-to-ecx +<span id="L8784" class="LineNr"> 8784 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L8785" class="LineNr"> 8785 </span> 89/<- %esp 5/r32/ebp +<span id="L8786" class="LineNr"> 8786 </span> 5d/pop-to-ebp +<span id="L8787" class="LineNr"> 8787 </span> c3/return +<span id="L8788" class="LineNr"> 8788 </span> +<span id="L8789" class="LineNr"> 8789 </span><span class="subxFunction">find-matching-primitive</span>: <span class="subxComment"># primitives: (handle primitive), stmt: (handle stmt) -> result/eax: (handle primitive)</span> +<span id="L8790" class="LineNr"> 8790 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L8791" class="LineNr"> 8791 </span> 55/push-ebp +<span id="L8792" class="LineNr"> 8792 </span> 89/<- %ebp 4/r32/esp +<span id="L8793" class="LineNr"> 8793 </span> <span class="subxS1Comment"># . save registers</span> +<span id="L8794" class="LineNr"> 8794 </span> 51/push-ecx +<span id="L8795" class="LineNr"> 8795 </span> <span class="subxComment"># var curr/ecx: (handle primitive) = primitives</span> +<span id="L8796" class="LineNr"> 8796 </span> 8b/-> *(ebp+8) 1/r32/ecx +<span id="L8797" class="LineNr"> 8797 </span> { +<span id="L8798" class="LineNr"> 8798 </span><span class="Constant">$find-matching-primitive:loop</span>: +<span id="L8799" class="LineNr"> 8799 </span> <span class="subxComment"># if (curr == null) break</span> +<span id="L8800" class="LineNr"> 8800 </span> 81 7/subop/compare %ecx 0/imm32 +<span id="L8801" class="LineNr"> 8801 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32 +<span id="L8802" class="LineNr"> 8802 </span><span class="CommentedCode">#? (write-buffered Stderr "prim: ")</span> +<span id="L8803" class="LineNr"> 8803 </span><span class="CommentedCode">#? (write-buffered Stderr *ecx) # Primitive-name</span> +<span id="L8804" class="LineNr"> 8804 </span><span class="CommentedCode">#? (write-buffered Stderr " => ")</span> +<span id="L8805" class="LineNr"> 8805 </span><span class="CommentedCode">#? (write-buffered Stderr *(ecx+0xc)) # Primitive-subx-name</span> +<span id="L8806" class="LineNr"> 8806 </span><span class="CommentedCode">#? (write-buffered Stderr Newline)</span> +<span id="L8807" class="LineNr"> 8807 </span><span class="CommentedCode">#? (flush Stderr)</span> +<span id="L8808" class="LineNr"> 8808 </span> <span class="subxComment"># if match(curr, stmt) return curr</span> +<span id="L8809" class="LineNr"> 8809 </span> { +<span id="L8810" class="LineNr"> 8810 </span> (<a href='mu.subx.html#L8849'>mu-stmt-matches-primitive?</a> *(ebp+0xc) %ecx) <span class="subxComment"># => eax</span> +<span id="L8811" class="LineNr"> 8811 </span> 3d/compare-eax-and 0/imm32/false +<span id="L8812" class="LineNr"> 8812 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 +<span id="L8813" class="LineNr"> 8813 </span> 89/<- %eax 1/r32/ecx +<span id="L8814" class="LineNr"> 8814 </span> eb/jump $find-matching-primitive:end/disp8 +<span id="L8815" class="LineNr"> 8815 </span> } +<span id="L8816" class="LineNr"> 8816 </span><span class="Constant">$find-matching-primitive:next-primitive</span>: +<span id="L8817" class="LineNr"> 8817 </span> <span class="subxComment"># curr = curr->next</span> +<span id="L8818" class="LineNr"> 8818 </span> 8b/-> *(ecx+0x24) 1/r32/ecx <span class="subxComment"># Primitive-next</span> +<span id="L8819" class="LineNr"> 8819 </span> e9/jump <span class="Constant">loop</span>/disp32 +<span id="L8820" class="LineNr"> 8820 </span> } +<span id="L8821" class="LineNr"> 8821 </span> <span class="subxComment"># return null</span> +<span id="L8822" class="LineNr"> 8822 </span> b8/copy-to-eax 0/imm32 +<span id="L8823" class="LineNr"> 8823 </span><span class="Constant">$find-matching-primitive:end</span>: +<span id="L8824" class="LineNr"> 8824 </span> <span class="subxS1Comment"># . restore registers</span> +<span id="L8825" class="LineNr"> 8825 </span> 59/pop-to-ecx +<span id="L8826" class="LineNr"> 8826 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L8827" class="LineNr"> 8827 </span> 89/<- %esp 5/r32/ebp +<span id="L8828" class="LineNr"> 8828 </span> 5d/pop-to-ebp +<span id="L8829" class="LineNr"> 8829 </span> c3/return +<span id="L8830" class="LineNr"> 8830 </span> +<span id="L8831" class="LineNr"> 8831 </span><span class="subxFunction">mu-stmt-matches-function?</span>: <span class="subxComment"># stmt: (handle stmt), function: (handle function) -> result/eax: boolean</span> +<span id="L8832" class="LineNr"> 8832 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L8833" class="LineNr"> 8833 </span> 55/push-ebp +<span id="L8834" class="LineNr"> 8834 </span> 89/<- %ebp 4/r32/esp +<span id="L8835" class="LineNr"> 8835 </span> <span class="subxS1Comment"># . save registers</span> +<span id="L8836" class="LineNr"> 8836 </span> 51/push-ecx +<span id="L8837" class="LineNr"> 8837 </span> <span class="subxComment"># return function->name == stmt->operation</span> +<span id="L8838" class="LineNr"> 8838 </span> 8b/-> *(ebp+8) 1/r32/ecx +<span id="L8839" class="LineNr"> 8839 </span> 8b/-> *(ebp+0xc) 0/r32/eax +<span id="L8840" class="LineNr"> 8840 </span> (<a href='../054string-equal.subx.html#L16'>string-equal?</a> *(ecx+4) *eax) <span class="subxComment"># Stmt1-operation, Function-name => eax</span> +<span id="L8841" class="LineNr"> 8841 </span><span class="Constant">$mu-stmt-matches-function?:end</span>: +<span id="L8842" class="LineNr"> 8842 </span> <span class="subxS1Comment"># . restore registers</span> +<span id="L8843" class="LineNr"> 8843 </span> 59/pop-to-ecx +<span id="L8844" class="LineNr"> 8844 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L8845" class="LineNr"> 8845 </span> 89/<- %esp 5/r32/ebp +<span id="L8846" class="LineNr"> 8846 </span> 5d/pop-to-ebp +<span id="L8847" class="LineNr"> 8847 </span> c3/return +<span id="L8848" class="LineNr"> 8848 </span> +<span id="L8849" class="LineNr"> 8849 </span><span class="subxFunction">mu-stmt-matches-primitive?</span>: <span class="subxComment"># stmt: (handle stmt), primitive: (handle primitive) -> result/eax: boolean</span> +<span id="L8850" class="LineNr"> 8850 </span> <span class="subxComment"># A mu stmt matches a primitive if the name matches, all the inout vars</span> +<span id="L8851" class="LineNr"> 8851 </span> <span class="subxComment"># match, and all the output vars match.</span> +<span id="L8852" class="LineNr"> 8852 </span> <span class="subxComment"># Vars match if types match and registers match.</span> +<span id="L8853" class="LineNr"> 8853 </span> <span class="subxComment"># In addition, a stmt output matches a primitive's output if types match</span> +<span id="L8854" class="LineNr"> 8854 </span> <span class="subxComment"># and the primitive has a wildcard register.</span> +<span id="L8855" class="LineNr"> 8855 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L8856" class="LineNr"> 8856 </span> 55/push-ebp +<span id="L8857" class="LineNr"> 8857 </span> 89/<- %ebp 4/r32/esp +<span id="L8858" class="LineNr"> 8858 </span> <span class="subxS1Comment"># . save registers</span> +<span id="L8859" class="LineNr"> 8859 </span> 51/push-ecx +<span id="L8860" class="LineNr"> 8860 </span> 52/push-edx +<span id="L8861" class="LineNr"> 8861 </span> 53/push-ebx +<span id="L8862" class="LineNr"> 8862 </span> 56/push-esi +<span id="L8863" class="LineNr"> 8863 </span> 57/push-edi +<span id="L8864" class="LineNr"> 8864 </span> <span class="subxComment"># ecx = stmt</span> +<span id="L8865" class="LineNr"> 8865 </span> 8b/-> *(ebp+8) 1/r32/ecx +<span id="L8866" class="LineNr"> 8866 </span> <span class="subxComment"># edx = primitive</span> +<span id="L8867" class="LineNr"> 8867 </span> 8b/-> *(ebp+0xc) 2/r32/edx +<span id="L8868" class="LineNr"> 8868 </span> { +<span id="L8869" class="LineNr"> 8869 </span><span class="Constant">$mu-stmt-matches-primitive?:check-name</span>: +<span id="L8870" class="LineNr"> 8870 </span> <span class="subxComment"># if (primitive->name != stmt->operation) return false</span> +<span id="L8871" class="LineNr"> 8871 </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="L8872" class="LineNr"> 8872 </span> 3d/compare-eax-and 0/imm32/false +<span id="L8873" class="LineNr"> 8873 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 +<span id="L8874" class="LineNr"> 8874 </span> b8/copy-to-eax 0/imm32 +<span id="L8875" class="LineNr"> 8875 </span> e9/jump $mu-stmt-matches-primitive?:end/disp32 +<span id="L8876" class="LineNr"> 8876 </span> } +<span id="L8877" class="LineNr"> 8877 </span><span class="Constant">$mu-stmt-matches-primitive?:check-inouts</span>: +<span id="L8878" class="LineNr"> 8878 </span> <span class="subxComment"># for (curr/esi in stmt->inouts, curr2/edi in primitive->inouts)</span> +<span id="L8879" class="LineNr"> 8879 </span> 8b/-> *(ecx+8) 6/r32/esi <span class="subxComment"># Stmt1-inouts or Regvardef-inouts</span> +<span id="L8880" class="LineNr"> 8880 </span> 8b/-> *(edx+4) 7/r32/edi <span class="subxComment"># Primitive-inouts</span> +<span id="L8881" class="LineNr"> 8881 </span> { +<span id="L8882" class="LineNr"> 8882 </span> <span class="subxComment"># if (curr == 0 && curr2 == 0) move on to check outputs</span> +<span id="L8883" class="LineNr"> 8883 </span> { +<span id="L8884" class="LineNr"> 8884 </span> 81 7/subop/compare %esi 0/imm32 +<span id="L8885" class="LineNr"> 8885 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 +<span id="L8886" class="LineNr"> 8886 </span><span class="Constant">$mu-stmt-matches-primitive?:stmt-inout-is-null</span>: +<span id="L8887" class="LineNr"> 8887 </span> { +<span id="L8888" class="LineNr"> 8888 </span> 81 7/subop/compare %edi 0/imm32 +<span id="L8889" class="LineNr"> 8889 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 +<span id="L8890" class="LineNr"> 8890 </span> <span class="subxComment">#</span> +<span id="L8891" class="LineNr"> 8891 </span> e9/jump $mu-stmt-matches-primitive?:check-outputs/disp32 +<span id="L8892" class="LineNr"> 8892 </span> } +<span id="L8893" class="LineNr"> 8893 </span> <span class="subxComment"># return false</span> +<span id="L8894" class="LineNr"> 8894 </span> b8/copy-to-eax 0/imm32/false +<span id="L8895" class="LineNr"> 8895 </span> e9/jump $mu-stmt-matches-primitive?:end/disp32 +<span id="L8896" class="LineNr"> 8896 </span> } +<span id="L8897" class="LineNr"> 8897 </span> <span class="subxComment"># if (curr2 == 0) return false</span> +<span id="L8898" class="LineNr"> 8898 </span> { +<span id="L8899" class="LineNr"> 8899 </span> 81 7/subop/compare %edi 0/imm32 +<span id="L8900" class="LineNr"> 8900 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 +<span id="L8901" class="LineNr"> 8901 </span><span class="Constant">$mu-stmt-matches-primitive?:prim-inout-is-null</span>: +<span id="L8902" class="LineNr"> 8902 </span> b8/copy-to-eax 0/imm32/false +<span id="L8903" class="LineNr"> 8903 </span> e9/jump $mu-stmt-matches-primitive?:end/disp32 +<span id="L8904" class="LineNr"> 8904 </span> } +<span id="L8905" class="LineNr"> 8905 </span> <span class="subxComment"># if (curr != curr2) return false</span> +<span id="L8906" class="LineNr"> 8906 </span> { +<span id="L8907" class="LineNr"> 8907 </span> (<a href='mu.subx.html#L8975'>operand-matches-primitive?</a> %esi *edi) <span class="subxComment"># List-value => eax</span> +<span id="L8908" class="LineNr"> 8908 </span> 3d/compare-eax-and 0/imm32/false +<span id="L8909" class="LineNr"> 8909 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 +<span id="L8910" class="LineNr"> 8910 </span> b8/copy-to-eax 0/imm32/false +<span id="L8911" class="LineNr"> 8911 </span> e9/jump $mu-stmt-matches-primitive?:end/disp32 +<span id="L8912" class="LineNr"> 8912 </span> } +<span id="L8913" class="LineNr"> 8913 </span> <span class="subxComment"># curr=curr->next</span> +<span id="L8914" class="LineNr"> 8914 </span> 8b/-> *(esi+4) 6/r32/esi <span class="subxComment"># Stmt-var-next</span> +<span id="L8915" class="LineNr"> 8915 </span> <span class="subxComment"># curr2=curr2->next</span> +<span id="L8916" class="LineNr"> 8916 </span> 8b/-> *(edi+4) 7/r32/edi <span class="subxComment"># Stmt-var-next</span> +<span id="L8917" class="LineNr"> 8917 </span> eb/jump <span class="Constant">loop</span>/disp8 +<span id="L8918" class="LineNr"> 8918 </span> } +<span id="L8919" class="LineNr"> 8919 </span><span class="Constant">$mu-stmt-matches-primitive?:check-outputs</span>: +<span id="L8920" class="LineNr"> 8920 </span> <span class="subxComment"># for (curr/esi in stmt->outputs, curr2/edi in primitive->outputs)</span> +<span id="L8921" class="LineNr"> 8921 </span> 8b/-> *(ecx+0xc) 6/r32/esi <span class="subxComment"># Stmt1-outputs</span> +<span id="L8922" class="LineNr"> 8922 </span> 8b/-> *(edx+8) 7/r32/edi <span class="subxComment"># Primitive-outputs</span> +<span id="L8923" class="LineNr"> 8923 </span> { +<span id="L8924" class="LineNr"> 8924 </span> <span class="subxComment"># if (curr == 0) return (curr2 == 0)</span> +<span id="L8925" class="LineNr"> 8925 </span> { +<span id="L8926" class="LineNr"> 8926 </span><span class="Constant">$mu-stmt-matches-primitive?:check-output</span>: +<span id="L8927" class="LineNr"> 8927 </span> 81 7/subop/compare %esi 0/imm32 +<span id="L8928" class="LineNr"> 8928 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 +<span id="L8929" class="LineNr"> 8929 </span> { +<span id="L8930" class="LineNr"> 8930 </span> 81 7/subop/compare %edi 0/imm32 +<span id="L8931" class="LineNr"> 8931 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 +<span id="L8932" class="LineNr"> 8932 </span> <span class="subxComment"># return true</span> +<span id="L8933" class="LineNr"> 8933 </span> b8/copy-to-eax 1/imm32 +<span id="L8934" class="LineNr"> 8934 </span> e9/jump $mu-stmt-matches-primitive?:end/disp32 +<span id="L8935" class="LineNr"> 8935 </span> } +<span id="L8936" class="LineNr"> 8936 </span> <span class="subxComment"># return false</span> +<span id="L8937" class="LineNr"> 8937 </span> b8/copy-to-eax 0/imm32 +<span id="L8938" class="LineNr"> 8938 </span> e9/jump $mu-stmt-matches-primitive?:end/disp32 +<span id="L8939" class="LineNr"> 8939 </span> } +<span id="L8940" class="LineNr"> 8940 </span> <span class="subxComment"># if (curr2 == 0) return false</span> +<span id="L8941" class="LineNr"> 8941 </span> { +<span id="L8942" class="LineNr"> 8942 </span> 81 7/subop/compare %edi 0/imm32 +<span id="L8943" class="LineNr"> 8943 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 +<span id="L8944" class="LineNr"> 8944 </span> b8/copy-to-eax 0/imm32 +<span id="L8945" class="LineNr"> 8945 </span> e9/jump $mu-stmt-matches-primitive?:end/disp32 +<span id="L8946" class="LineNr"> 8946 </span> } +<span id="L8947" class="LineNr"> 8947 </span> <span class="subxComment"># if (curr != curr2) return false</span> +<span id="L8948" class="LineNr"> 8948 </span> { +<span id="L8949" class="LineNr"> 8949 </span> (<a href='mu.subx.html#L8975'>operand-matches-primitive?</a> %esi *edi) <span class="subxComment"># List-value => eax</span> +<span id="L8950" class="LineNr"> 8950 </span> 3d/compare-eax-and 0/imm32/false +<span id="L8951" class="LineNr"> 8951 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 +<span id="L8952" class="LineNr"> 8952 </span> b8/copy-to-eax 0/imm32 +<span id="L8953" class="LineNr"> 8953 </span> e9/jump $mu-stmt-matches-primitive?:end/disp32 +<span id="L8954" class="LineNr"> 8954 </span> } +<span id="L8955" class="LineNr"> 8955 </span> <span class="subxComment"># curr=curr->next</span> +<span id="L8956" class="LineNr"> 8956 </span> 8b/-> *(esi+4) 6/r32/esi <span class="subxComment"># Stmt-var-next</span> +<span id="L8957" class="LineNr"> 8957 </span> <span class="subxComment"># curr2=curr2->next</span> +<span id="L8958" class="LineNr"> 8958 </span> 8b/-> *(edi+4) 7/r32/edi <span class="subxComment"># Stmt-var-next</span> +<span id="L8959" class="LineNr"> 8959 </span> eb/jump <span class="Constant">loop</span>/disp8 +<span id="L8960" class="LineNr"> 8960 </span> } +<span id="L8961" class="LineNr"> 8961 </span><span class="Constant">$mu-stmt-matches-primitive?:return-true</span>: +<span id="L8962" class="LineNr"> 8962 </span> b8/copy-to-eax 1/imm32 +<span id="L8963" class="LineNr"> 8963 </span><span class="Constant">$mu-stmt-matches-primitive?:end</span>: +<span id="L8964" class="LineNr"> 8964 </span> <span class="subxS1Comment"># . restore registers</span> +<span id="L8965" class="LineNr"> 8965 </span> 5f/pop-to-edi +<span id="L8966" class="LineNr"> 8966 </span> 5e/pop-to-esi +<span id="L8967" class="LineNr"> 8967 </span> 5b/pop-to-ebx +<span id="L8968" class="LineNr"> 8968 </span> 5a/pop-to-edx +<span id="L8969" class="LineNr"> 8969 </span> 59/pop-to-ecx +<span id="L8970" class="LineNr"> 8970 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L8971" class="LineNr"> 8971 </span> 89/<- %esp 5/r32/ebp +<span id="L8972" class="LineNr"> 8972 </span> 5d/pop-to-ebp +<span id="L8973" class="LineNr"> 8973 </span> c3/return +<span id="L8974" class="LineNr"> 8974 </span> +<span id="L8975" class="LineNr"> 8975 </span><span class="subxFunction">operand-matches-primitive?</span>: <span class="subxComment"># s: (handle stmt-var), prim-var: (handle var) -> result/eax: boolean</span> +<span id="L8976" class="LineNr"> 8976 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L8977" class="LineNr"> 8977 </span> 55/push-ebp +<span id="L8978" class="LineNr"> 8978 </span> 89/<- %ebp 4/r32/esp +<span id="L8979" class="LineNr"> 8979 </span> <span class="subxS1Comment"># . save registers</span> +<span id="L8980" class="LineNr"> 8980 </span> 51/push-ecx +<span id="L8981" class="LineNr"> 8981 </span> 56/push-esi +<span id="L8982" class="LineNr"> 8982 </span> 57/push-edi +<span id="L8983" class="LineNr"> 8983 </span> <span class="subxComment"># ecx = s</span> +<span id="L8984" class="LineNr"> 8984 </span> 8b/-> *(ebp+8) 1/r32/ecx +<span id="L8985" class="LineNr"> 8985 </span> <span class="subxComment"># var var/esi : (handle var) = s->value</span> +<span id="L8986" class="LineNr"> 8986 </span> 8b/-> *ecx 6/r32/esi <span class="subxComment"># Stmt-var-value</span> +<span id="L8987" class="LineNr"> 8987 </span> <span class="subxComment"># edi = prim-var</span> +<span id="L8988" class="LineNr"> 8988 </span> 8b/-> *(ebp+0xc) 7/r32/edi +<span id="L8989" class="LineNr"> 8989 </span><span class="Constant">$operand-matches-primitive?:check-type</span>: +<span id="L8990" class="LineNr"> 8990 </span> <span class="subxComment"># if (var->type != prim-var->type) return false</span> +<span id="L8991" class="LineNr"> 8991 </span> (<a href='mu.subx.html#L9053'>subx-type-equal?</a> *(esi+4) *(edi+4)) <span class="subxComment"># Var-type, Var-type => eax</span> +<span id="L8992" class="LineNr"> 8992 </span> 3d/compare-eax-and 0/imm32/false +<span id="L8993" class="LineNr"> 8993 </span> b8/copy-to-eax 0/imm32/false +<span id="L8994" class="LineNr"> 8994 </span> 0f 84/jump-if-= $operand-matches-primitive?:end/disp32 +<span id="L8995" class="LineNr"> 8995 </span> { +<span id="L8996" class="LineNr"> 8996 </span><span class="Constant">$operand-matches-primitive?:check-register</span>: +<span id="L8997" class="LineNr"> 8997 </span> <span class="subxComment"># if prim-var is in memory and var is in register but dereference, match</span> +<span id="L8998" class="LineNr"> 8998 </span> { +<span id="L8999" class="LineNr"> 8999 </span> 81 7/subop/compare *(edi+0x10) 0/imm32 <span class="subxComment"># Var-register</span> +<span id="L9000" class="LineNr"> 9000 </span> 0f 85/jump-if-!= <span class="Constant">break</span>/disp32 +<span id="L9001" class="LineNr"> 9001 </span> 81 7/subop/compare *(esi+0x10) 0/imm32 <span class="subxComment"># Var-register</span> +<span id="L9002" class="LineNr"> 9002 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 +<span id="L9003" class="LineNr"> 9003 </span> 81 7/subop/compare *(ecx+8) 0/imm32/false <span class="subxComment"># Stmt-var-is-deref</span> +<span id="L9004" class="LineNr"> 9004 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 +<span id="L9005" class="LineNr"> 9005 </span> e9/jump $operand-matches-primitive?:return-true/disp32 +<span id="L9006" class="LineNr"> 9006 </span> } +<span id="L9007" class="LineNr"> 9007 </span> <span class="subxComment"># if prim-var is in register and var is in register but dereference, no match</span> +<span id="L9008" class="LineNr"> 9008 </span> { +<span id="L9009" class="LineNr"> 9009 </span> 81 7/subop/compare *(edi+0x10) 0/imm32 <span class="subxComment"># Var-register</span> +<span id="L9010" class="LineNr"> 9010 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32 +<span id="L9011" class="LineNr"> 9011 </span> 81 7/subop/compare *(esi+0x10) 0/imm32 <span class="subxComment"># Var-register</span> +<span id="L9012" class="LineNr"> 9012 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32 +<span id="L9013" class="LineNr"> 9013 </span> 81 7/subop/compare *(ecx+8) 0/imm32/false <span class="subxComment"># Stmt-var-is-deref</span> +<span id="L9014" class="LineNr"> 9014 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 +<span id="L9015" class="LineNr"> 9015 </span> e9/jump $operand-matches-primitive?:return-false/disp32 +<span id="L9016" class="LineNr"> 9016 </span> } +<span id="L9017" class="LineNr"> 9017 </span> <span class="subxComment"># return false if var->register doesn't match prim-var->register</span> +<span id="L9018" class="LineNr"> 9018 </span> { +<span id="L9019" class="LineNr"> 9019 </span> <span class="subxComment"># if register addresses are equal, it's a match</span> +<span id="L9020" class="LineNr"> 9020 </span> 8b/-> *(esi+0x10) 0/r32/eax <span class="subxComment"># Var-register</span> +<span id="L9021" class="LineNr"> 9021 </span> 39/compare *(edi+0x10) 0/r32/eax <span class="subxComment"># Var-register</span> +<span id="L9022" class="LineNr"> 9022 </span> 74/jump-if-= <span class="Constant">break</span>/disp8 +<span id="L9023" class="LineNr"> 9023 </span> <span class="subxComment"># if either address is 0, return false</span> +<span id="L9024" class="LineNr"> 9024 </span> 3d/compare-eax-and 0/imm32 +<span id="L9025" class="LineNr"> 9025 </span> 74/jump-if-= $operand-matches-primitive?:end/disp8 <span class="subxComment"># eax goes from meaning var->register to result</span> +<span id="L9026" class="LineNr"> 9026 </span> 81 7/subop/compare *(edi+0x10) 0/imm32 <span class="subxComment"># Var-register</span> +<span id="L9027" class="LineNr"> 9027 </span> 74/jump-if-= $operand-matches-primitive?:return-false/disp8 +<span id="L9028" class="LineNr"> 9028 </span> <span class="subxComment"># if prim-var->register is wildcard, it's a match</span> +<span id="L9029" class="LineNr"> 9029 </span> (<a href='../054string-equal.subx.html#L16'>string-equal?</a> *(edi+0x10) <span class="SpecialChar"><a href='mu.subx.html#L339'>Any-register</a></span>) <span class="subxComment"># Var-register => eax</span> +<span id="L9030" class="LineNr"> 9030 </span> 3d/compare-eax-and 0/imm32/false +<span id="L9031" class="LineNr"> 9031 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 +<span id="L9032" class="LineNr"> 9032 </span> <span class="subxComment"># if string contents aren't equal, return false</span> +<span id="L9033" class="LineNr"> 9033 </span> (<a href='../054string-equal.subx.html#L16'>string-equal?</a> *(esi+0x10) *(edi+0x10)) <span class="subxComment"># Var-register Var-register => eax</span> <span id="L9034" class="LineNr"> 9034 </span> 3d/compare-eax-and 0/imm32/false -<span id="L9035" class="LineNr"> 9035 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8 -<span id="L9036" class="LineNr"> 9036 </span> <span class="subxComment"># if string contents aren't equal, return false</span> -<span id="L9037" class="LineNr"> 9037 </span> (<a href='../054string-equal.subx.html#L16'>string-equal?</a> *(esi+0x10) *(edi+0x10)) <span class="subxComment"># Var-register Var-register => eax</span> -<span id="L9038" class="LineNr"> 9038 </span> 3d/compare-eax-and 0/imm32/false -<span id="L9039" class="LineNr"> 9039 </span> 74/jump-if-= $operand-matches-primitive?:return-false/disp8 -<span id="L9040" class="LineNr"> 9040 </span> } -<span id="L9041" class="LineNr"> 9041 </span> } -<span id="L9042" class="LineNr"> 9042 </span><span class="Constant">$operand-matches-primitive?:return-true</span>: -<span id="L9043" class="LineNr"> 9043 </span> b8/copy-to-eax 1/imm32/true -<span id="L9044" class="LineNr"> 9044 </span> eb/jump $operand-matches-primitive?:end/disp8 -<span id="L9045" class="LineNr"> 9045 </span><span class="Constant">$operand-matches-primitive?:return-false</span>: -<span id="L9046" class="LineNr"> 9046 </span> b8/copy-to-eax 0/imm32/false -<span id="L9047" class="LineNr"> 9047 </span><span class="Constant">$operand-matches-primitive?:end</span>: -<span id="L9048" class="LineNr"> 9048 </span> <span class="subxS1Comment"># . restore registers</span> -<span id="L9049" class="LineNr"> 9049 </span> 5f/pop-to-edi -<span id="L9050" class="LineNr"> 9050 </span> 5e/pop-to-esi -<span id="L9051" class="LineNr"> 9051 </span> 59/pop-to-ecx -<span id="L9052" class="LineNr"> 9052 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L9053" class="LineNr"> 9053 </span> 89/<- %esp 5/r32/ebp -<span id="L9054" class="LineNr"> 9054 </span> 5d/pop-to-ebp -<span id="L9055" class="LineNr"> 9055 </span> c3/return -<span id="L9056" class="LineNr"> 9056 </span> -<span id="L9057" class="LineNr"> 9057 </span><span class="subxFunction">subx-type-equal?</span>: <span class="subxComment"># a: (handle tree type-id), b: (handle tree type-id) -> result/eax: boolean</span> -<span id="L9058" class="LineNr"> 9058 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L9059" class="LineNr"> 9059 </span> 55/push-ebp -<span id="L9060" class="LineNr"> 9060 </span> 89/<- %ebp 4/r32/esp -<span id="L9061" class="LineNr"> 9061 </span> <span class="subxS1Comment"># . save registers</span> -<span id="L9062" class="LineNr"> 9062 </span> 51/push-ecx -<span id="L9063" class="LineNr"> 9063 </span> <span class="subxComment"># var alit/ecx: boolean = is-literal-type?(a)</span> -<span id="L9064" class="LineNr"> 9064 </span> (<a href='mu.subx.html#L9084'>is-literal-type?</a> *(ebp+8)) <span class="subxComment"># => eax</span> -<span id="L9065" class="LineNr"> 9065 </span> 89/<- %ecx 0/r32/eax -<span id="L9066" class="LineNr"> 9066 </span> <span class="subxComment"># var blit/eax: boolean = is-literal-type?(b)</span> -<span id="L9067" class="LineNr"> 9067 </span> (<a href='mu.subx.html#L9084'>is-literal-type?</a> *(ebp+0xc)) <span class="subxComment"># => eax</span> -<span id="L9068" class="LineNr"> 9068 </span> <span class="subxComment"># return alit == blit</span> -<span id="L9069" class="LineNr"> 9069 </span> 39/compare %eax 1/r32/ecx -<span id="L9070" class="LineNr"> 9070 </span> 74/jump-if-= $subx-type-equal?:true/disp8 -<span id="L9071" class="LineNr"> 9071 </span><span class="Constant">$subx-type-equal?:false</span>: <span class="subxComment"># TODO: replace with setcc</span> -<span id="L9072" class="LineNr"> 9072 </span> b8/copy-to-eax 0/imm32/false -<span id="L9073" class="LineNr"> 9073 </span> eb/jump $subx-type-equal?:end/disp8 -<span id="L9074" class="LineNr"> 9074 </span><span class="Constant">$subx-type-equal?:true</span>: -<span id="L9075" class="LineNr"> 9075 </span> b8/copy-to-eax 1/imm32/true -<span id="L9076" class="LineNr"> 9076 </span><span class="Constant">$subx-type-equal?:end</span>: -<span id="L9077" class="LineNr"> 9077 </span> <span class="subxS1Comment"># . restore registers</span> -<span id="L9078" class="LineNr"> 9078 </span> 59/pop-to-ecx -<span id="L9079" class="LineNr"> 9079 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L9080" class="LineNr"> 9080 </span> 89/<- %esp 5/r32/ebp -<span id="L9081" class="LineNr"> 9081 </span> 5d/pop-to-ebp -<span id="L9082" class="LineNr"> 9082 </span> c3/return -<span id="L9083" class="LineNr"> 9083 </span> -<span id="L9084" class="LineNr"> 9084 </span><span class="subxFunction">is-literal-type?</span>: <span class="subxComment"># a: (handle tree type-id) -> result/eax: boolean</span> -<span id="L9085" class="LineNr"> 9085 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L9086" class="LineNr"> 9086 </span> 55/push-ebp -<span id="L9087" class="LineNr"> 9087 </span> 89/<- %ebp 4/r32/esp -<span id="L9088" class="LineNr"> 9088 </span> <span class="subxComment">#</span> -<span id="L9089" class="LineNr"> 9089 </span> 8b/-> *(ebp+8) 0/r32/eax -<span id="L9090" class="LineNr"> 9090 </span> <span class="subxComment"># return (*eax == 0) # TODO: replace with setcc</span> -<span id="L9091" class="LineNr"> 9091 </span> 81 7/subop/compare *eax 0/imm32/literal-type-id <span class="subxComment"># Atom-type</span> -<span id="L9092" class="LineNr"> 9092 </span> 75/jump-if-!= $is-literal-type?:false/disp8 -<span id="L9093" class="LineNr"> 9093 </span><span class="Constant">$is-literal-type?:true</span>: -<span id="L9094" class="LineNr"> 9094 </span> b8/copy-to-eax 1/imm32/true -<span id="L9095" class="LineNr"> 9095 </span> eb/jump $is-literal-type?:end/disp8 -<span id="L9096" class="LineNr"> 9096 </span><span class="Constant">$is-literal-type?:false</span>: -<span id="L9097" class="LineNr"> 9097 </span> b8/copy-to-eax 0/imm32/false -<span id="L9098" class="LineNr"> 9098 </span><span class="Constant">$is-literal-type?:end</span>: -<span id="L9099" class="LineNr"> 9099 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L9100" class="LineNr"> 9100 </span> 89/<- %esp 5/r32/ebp -<span id="L9101" class="LineNr"> 9101 </span> 5d/pop-to-ebp -<span id="L9102" class="LineNr"> 9102 </span> c3/return -<span id="L9103" class="LineNr"> 9103 </span> -<span id="L9104" class="LineNr"> 9104 </span><span class="subxTest">test-emit-subx-stmt-primitive</span>: -<span id="L9105" class="LineNr"> 9105 </span> <span class="subxComment"># Primitive operation on a variable on the stack.</span> -<span id="L9106" class="LineNr"> 9106 </span> <span class="subxComment"># increment foo</span> -<span id="L9107" class="LineNr"> 9107 </span> <span class="subxComment"># =></span> -<span id="L9108" class="LineNr"> 9108 </span> <span class="subxComment"># ff 0/subop/increment *(ebp-8)</span> +<span id="L9035" class="LineNr"> 9035 </span> 74/jump-if-= $operand-matches-primitive?:return-false/disp8 +<span id="L9036" class="LineNr"> 9036 </span> } +<span id="L9037" class="LineNr"> 9037 </span> } +<span id="L9038" class="LineNr"> 9038 </span><span class="Constant">$operand-matches-primitive?:return-true</span>: +<span id="L9039" class="LineNr"> 9039 </span> b8/copy-to-eax 1/imm32/true +<span id="L9040" class="LineNr"> 9040 </span> eb/jump $operand-matches-primitive?:end/disp8 +<span id="L9041" class="LineNr"> 9041 </span><span class="Constant">$operand-matches-primitive?:return-false</span>: +<span id="L9042" class="LineNr"> 9042 </span> b8/copy-to-eax 0/imm32/false +<span id="L9043" class="LineNr"> 9043 </span><span class="Constant">$operand-matches-primitive?:end</span>: +<span id="L9044" class="LineNr"> 9044 </span> <span class="subxS1Comment"># . restore registers</span> +<span id="L9045" class="LineNr"> 9045 </span> 5f/pop-to-edi +<span id="L9046" class="LineNr"> 9046 </span> 5e/pop-to-esi +<span id="L9047" class="LineNr"> 9047 </span> 59/pop-to-ecx +<span id="L9048" class="LineNr"> 9048 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L9049" class="LineNr"> 9049 </span> 89/<- %esp 5/r32/ebp +<span id="L9050" class="LineNr"> 9050 </span> 5d/pop-to-ebp +<span id="L9051" class="LineNr"> 9051 </span> c3/return +<span id="L9052" class="LineNr"> 9052 </span> +<span id="L9053" class="LineNr"> 9053 </span><span class="subxFunction">subx-type-equal?</span>: <span class="subxComment"># a: (handle tree type-id), b: (handle tree type-id) -> result/eax: boolean</span> +<span id="L9054" class="LineNr"> 9054 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L9055" class="LineNr"> 9055 </span> 55/push-ebp +<span id="L9056" class="LineNr"> 9056 </span> 89/<- %ebp 4/r32/esp +<span id="L9057" class="LineNr"> 9057 </span> <span class="subxS1Comment"># . save registers</span> +<span id="L9058" class="LineNr"> 9058 </span> 51/push-ecx +<span id="L9059" class="LineNr"> 9059 </span> <span class="subxComment"># var alit/ecx: boolean = is-literal-type?(a)</span> +<span id="L9060" class="LineNr"> 9060 </span> (<a href='mu.subx.html#L9076'>is-literal-type?</a> *(ebp+8)) <span class="subxComment"># => eax</span> +<span id="L9061" class="LineNr"> 9061 </span> 89/<- %ecx 0/r32/eax +<span id="L9062" class="LineNr"> 9062 </span> <span class="subxComment"># var blit/eax: boolean = is-literal-type?(b)</span> +<span id="L9063" class="LineNr"> 9063 </span> (<a href='mu.subx.html#L9076'>is-literal-type?</a> *(ebp+0xc)) <span class="subxComment"># => eax</span> +<span id="L9064" class="LineNr"> 9064 </span> <span class="subxComment"># return alit == blit</span> +<span id="L9065" class="LineNr"> 9065 </span> 39/compare %eax 1/r32/ecx +<span id="L9066" class="LineNr"> 9066 </span> 0f 94/set-if-= %eax +<span id="L9067" class="LineNr"> 9067 </span> 81 4/subop/and %eax 0xff/imm32 +<span id="L9068" class="LineNr"> 9068 </span><span class="Constant">$subx-type-equal?:end</span>: +<span id="L9069" class="LineNr"> 9069 </span> <span class="subxS1Comment"># . restore registers</span> +<span id="L9070" class="LineNr"> 9070 </span> 59/pop-to-ecx +<span id="L9071" class="LineNr"> 9071 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L9072" class="LineNr"> 9072 </span> 89/<- %esp 5/r32/ebp +<span id="L9073" class="LineNr"> 9073 </span> 5d/pop-to-ebp +<span id="L9074" class="LineNr"> 9074 </span> c3/return +<span id="L9075" class="LineNr"> 9075 </span> +<span id="L9076" class="LineNr"> 9076 </span><span class="subxFunction">is-literal-type?</span>: <span class="subxComment"># a: (handle tree type-id) -> result/eax: boolean</span> +<span id="L9077" class="LineNr"> 9077 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L9078" class="LineNr"> 9078 </span> 55/push-ebp +<span id="L9079" class="LineNr"> 9079 </span> 89/<- %ebp 4/r32/esp +<span id="L9080" class="LineNr"> 9080 </span> <span class="subxComment">#</span> +<span id="L9081" class="LineNr"> 9081 </span> 8b/-> *(ebp+8) 0/r32/eax +<span id="L9082" class="LineNr"> 9082 </span> <span class="subxComment"># return (*eax == 0)</span> +<span id="L9083" class="LineNr"> 9083 </span> 81 7/subop/compare *eax 0/imm32/literal-type-id <span class="subxComment"># Atom-type</span> +<span id="L9084" class="LineNr"> 9084 </span> 0f 94/set-if-= %eax +<span id="L9085" class="LineNr"> 9085 </span> 81 4/subop/and %eax 0xff/imm32 +<span id="L9086" class="LineNr"> 9086 </span><span class="Constant">$is-literal-type?:end</span>: +<span id="L9087" class="LineNr"> 9087 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L9088" class="LineNr"> 9088 </span> 89/<- %esp 5/r32/ebp +<span id="L9089" class="LineNr"> 9089 </span> 5d/pop-to-ebp +<span id="L9090" class="LineNr"> 9090 </span> c3/return +<span id="L9091" class="LineNr"> 9091 </span> +<span id="L9092" class="LineNr"> 9092 </span><span class="subxTest">test-emit-subx-stmt-primitive</span>: +<span id="L9093" class="LineNr"> 9093 </span> <span class="subxComment"># Primitive operation on a variable on the stack.</span> +<span id="L9094" class="LineNr"> 9094 </span> <span class="subxComment"># increment foo</span> +<span id="L9095" class="LineNr"> 9095 </span> <span class="subxComment"># =></span> +<span id="L9096" class="LineNr"> 9096 </span> <span class="subxComment"># ff 0/subop/increment *(ebp-8)</span> +<span id="L9097" class="LineNr"> 9097 </span> <span class="subxComment">#</span> +<span id="L9098" class="LineNr"> 9098 </span> <span class="subxComment"># There's a variable on the var stack as follows:</span> +<span id="L9099" class="LineNr"> 9099 </span> <span class="subxComment"># name: 'foo'</span> +<span id="L9100" class="LineNr"> 9100 </span> <span class="subxComment"># type: int</span> +<span id="L9101" class="LineNr"> 9101 </span> <span class="subxComment"># stack-offset: -8</span> +<span id="L9102" class="LineNr"> 9102 </span> <span class="subxComment">#</span> +<span id="L9103" class="LineNr"> 9103 </span> <span class="subxComment"># There's a primitive with this info:</span> +<span id="L9104" class="LineNr"> 9104 </span> <span class="subxComment"># name: 'increment'</span> +<span id="L9105" class="LineNr"> 9105 </span> <span class="subxComment"># inouts: int/mem</span> +<span id="L9106" class="LineNr"> 9106 </span> <span class="subxComment"># value: 'ff 0/subop/increment'</span> +<span id="L9107" class="LineNr"> 9107 </span> <span class="subxComment">#</span> +<span id="L9108" class="LineNr"> 9108 </span> <span class="subxComment"># There's nothing in functions.</span> <span id="L9109" class="LineNr"> 9109 </span> <span class="subxComment">#</span> -<span id="L9110" class="LineNr"> 9110 </span> <span class="subxComment"># There's a variable on the var stack as follows:</span> -<span id="L9111" class="LineNr"> 9111 </span> <span class="subxComment"># name: 'foo'</span> -<span id="L9112" class="LineNr"> 9112 </span> <span class="subxComment"># type: int</span> -<span id="L9113" class="LineNr"> 9113 </span> <span class="subxComment"># stack-offset: -8</span> -<span id="L9114" class="LineNr"> 9114 </span> <span class="subxComment">#</span> -<span id="L9115" class="LineNr"> 9115 </span> <span class="subxComment"># There's a primitive with this info:</span> -<span id="L9116" class="LineNr"> 9116 </span> <span class="subxComment"># name: 'increment'</span> -<span id="L9117" class="LineNr"> 9117 </span> <span class="subxComment"># inouts: int/mem</span> -<span id="L9118" class="LineNr"> 9118 </span> <span class="subxComment"># value: 'ff 0/subop/increment'</span> -<span id="L9119" class="LineNr"> 9119 </span> <span class="subxComment">#</span> -<span id="L9120" class="LineNr"> 9120 </span> <span class="subxComment"># There's nothing in functions.</span> -<span id="L9121" class="LineNr"> 9121 </span> <span class="subxComment">#</span> -<span id="L9122" class="LineNr"> 9122 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L9123" class="LineNr"> 9123 </span> 55/push-ebp -<span id="L9124" class="LineNr"> 9124 </span> 89/<- %ebp 4/r32/esp -<span id="L9125" class="LineNr"> 9125 </span> <span class="subxComment"># setup</span> -<span id="L9126" class="LineNr"> 9126 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) -<span id="L9127" class="LineNr"> 9127 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) -<span id="L9128" class="LineNr"> 9128 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> -<span id="L9129" class="LineNr"> 9129 </span> 68/push 0/imm32/right/null -<span id="L9130" class="LineNr"> 9130 </span> 68/push 1/imm32/left/int -<span id="L9131" class="LineNr"> 9131 </span> 89/<- %ecx 4/r32/esp -<span id="L9132" class="LineNr"> 9132 </span> <span class="subxComment"># var var-foo/ecx: var</span> -<span id="L9133" class="LineNr"> 9133 </span> 68/push 0/imm32/no-register -<span id="L9134" class="LineNr"> 9134 </span> 68/push -8/imm32/stack-offset -<span id="L9135" class="LineNr"> 9135 </span> 68/push 1/imm32/block-depth -<span id="L9136" class="LineNr"> 9136 </span> 51/push-ecx -<span id="L9137" class="LineNr"> 9137 </span> 68/push <span class="Constant">"foo"</span>/imm32 -<span id="L9138" class="LineNr"> 9138 </span> 89/<- %ecx 4/r32/esp -<span id="L9139" class="LineNr"> 9139 </span> <span class="subxComment"># var operand/ebx: (handle stmt-var)</span> -<span id="L9140" class="LineNr"> 9140 </span> 68/push 0/imm32/is-deref:false -<span id="L9141" class="LineNr"> 9141 </span> 68/push 0/imm32/next -<span id="L9142" class="LineNr"> 9142 </span> 51/push-ecx/var-foo -<span id="L9143" class="LineNr"> 9143 </span> 89/<- %ebx 4/r32/esp -<span id="L9144" class="LineNr"> 9144 </span> <span class="subxComment"># var stmt/esi: statement</span> -<span id="L9145" class="LineNr"> 9145 </span> 68/push 0/imm32/next -<span id="L9146" class="LineNr"> 9146 </span> 68/push 0/imm32/outputs -<span id="L9147" class="LineNr"> 9147 </span> 53/push-ebx/operands -<span id="L9148" class="LineNr"> 9148 </span> 68/push <span class="Constant">"increment"</span>/imm32/operation -<span id="L9149" class="LineNr"> 9149 </span> 68/push 1/imm32 -<span id="L9150" class="LineNr"> 9150 </span> 89/<- %esi 4/r32/esp -<span id="L9151" class="LineNr"> 9151 </span> <span class="subxComment"># var primitives/ebx: primitive</span> -<span id="L9152" class="LineNr"> 9152 </span> 68/push 0/imm32/next -<span id="L9153" class="LineNr"> 9153 </span> 68/push 0/imm32/output-is-write-only -<span id="L9154" class="LineNr"> 9154 </span> 68/push 0/imm32/no-disp32 -<span id="L9155" class="LineNr"> 9155 </span> 68/push 0/imm32/no-imm32 -<span id="L9156" class="LineNr"> 9156 </span> 68/push 0/imm32/no-r32 -<span id="L9157" class="LineNr"> 9157 </span> 68/push 1/imm32/rm32-is-first-inout -<span id="L9158" class="LineNr"> 9158 </span> 68/push <span class="Constant">"ff 0/subop/increment"</span>/imm32/subx-name -<span id="L9159" class="LineNr"> 9159 </span> 68/push 0/imm32/outputs -<span id="L9160" class="LineNr"> 9160 </span> 53/push-ebx/inouts <span class="subxComment"># hack; in practice we won't have the same var in function definition and call</span> -<span id="L9161" class="LineNr"> 9161 </span> 68/push <span class="Constant">"increment"</span>/imm32/name -<span id="L9162" class="LineNr"> 9162 </span> 89/<- %ebx 4/r32/esp -<span id="L9163" class="LineNr"> 9163 </span> <span class="subxComment"># convert</span> -<span id="L9164" class="LineNr"> 9164 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 -<span id="L9165" class="LineNr"> 9165 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi %ebx 0) -<span id="L9166" class="LineNr"> 9166 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) -<span id="L9167" class="Folded"> 9167 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L9173" class="LineNr"> 9173 </span> <span class="subxComment"># check output</span> -<span id="L9174" class="LineNr"> 9174 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"ff 0/subop/increment *(ebp+0xfffffff8)"</span> <span class="Constant">"F - test-emit-subx-stmt-primitive"</span>) -<span id="L9175" class="LineNr"> 9175 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L9176" class="LineNr"> 9176 </span> 89/<- %esp 5/r32/ebp -<span id="L9177" class="LineNr"> 9177 </span> 5d/pop-to-ebp -<span id="L9178" class="LineNr"> 9178 </span> c3/return -<span id="L9179" class="LineNr"> 9179 </span> -<span id="L9180" class="LineNr"> 9180 </span><span class="subxTest">test-emit-subx-stmt-primitive-register</span>: -<span id="L9181" class="LineNr"> 9181 </span> <span class="subxComment"># Primitive operation on a variable in a register.</span> -<span id="L9182" class="LineNr"> 9182 </span> <span class="subxComment"># foo <- increment</span> -<span id="L9183" class="LineNr"> 9183 </span> <span class="subxComment"># =></span> -<span id="L9184" class="LineNr"> 9184 </span> <span class="subxComment"># ff 0/subop/increment %eax # sub-optimal, but should suffice</span> +<span id="L9110" class="LineNr"> 9110 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L9111" class="LineNr"> 9111 </span> 55/push-ebp +<span id="L9112" class="LineNr"> 9112 </span> 89/<- %ebp 4/r32/esp +<span id="L9113" class="LineNr"> 9113 </span> <span class="subxComment"># setup</span> +<span id="L9114" class="LineNr"> 9114 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) +<span id="L9115" class="LineNr"> 9115 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) +<span id="L9116" class="LineNr"> 9116 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> +<span id="L9117" class="LineNr"> 9117 </span> 68/push 0/imm32/right/null +<span id="L9118" class="LineNr"> 9118 </span> 68/push 1/imm32/left/int +<span id="L9119" class="LineNr"> 9119 </span> 89/<- %ecx 4/r32/esp +<span id="L9120" class="LineNr"> 9120 </span> <span class="subxComment"># var var-foo/ecx: var</span> +<span id="L9121" class="LineNr"> 9121 </span> 68/push 0/imm32/no-register +<span id="L9122" class="LineNr"> 9122 </span> 68/push -8/imm32/stack-offset +<span id="L9123" class="LineNr"> 9123 </span> 68/push 1/imm32/block-depth +<span id="L9124" class="LineNr"> 9124 </span> 51/push-ecx +<span id="L9125" class="LineNr"> 9125 </span> 68/push <span class="Constant">"foo"</span>/imm32 +<span id="L9126" class="LineNr"> 9126 </span> 89/<- %ecx 4/r32/esp +<span id="L9127" class="LineNr"> 9127 </span> <span class="subxComment"># var operand/ebx: (handle stmt-var)</span> +<span id="L9128" class="LineNr"> 9128 </span> 68/push 0/imm32/is-deref:false +<span id="L9129" class="LineNr"> 9129 </span> 68/push 0/imm32/next +<span id="L9130" class="LineNr"> 9130 </span> 51/push-ecx/var-foo +<span id="L9131" class="LineNr"> 9131 </span> 89/<- %ebx 4/r32/esp +<span id="L9132" class="LineNr"> 9132 </span> <span class="subxComment"># var stmt/esi: statement</span> +<span id="L9133" class="LineNr"> 9133 </span> 68/push 0/imm32/next +<span id="L9134" class="LineNr"> 9134 </span> 68/push 0/imm32/outputs +<span id="L9135" class="LineNr"> 9135 </span> 53/push-ebx/operands +<span id="L9136" class="LineNr"> 9136 </span> 68/push <span class="Constant">"increment"</span>/imm32/operation +<span id="L9137" class="LineNr"> 9137 </span> 68/push 1/imm32 +<span id="L9138" class="LineNr"> 9138 </span> 89/<- %esi 4/r32/esp +<span id="L9139" class="LineNr"> 9139 </span> <span class="subxComment"># var primitives/ebx: primitive</span> +<span id="L9140" class="LineNr"> 9140 </span> 68/push 0/imm32/next +<span id="L9141" class="LineNr"> 9141 </span> 68/push 0/imm32/output-is-write-only +<span id="L9142" class="LineNr"> 9142 </span> 68/push 0/imm32/no-disp32 +<span id="L9143" class="LineNr"> 9143 </span> 68/push 0/imm32/no-imm32 +<span id="L9144" class="LineNr"> 9144 </span> 68/push 0/imm32/no-r32 +<span id="L9145" class="LineNr"> 9145 </span> 68/push 1/imm32/rm32-is-first-inout +<span id="L9146" class="LineNr"> 9146 </span> 68/push <span class="Constant">"ff 0/subop/increment"</span>/imm32/subx-name +<span id="L9147" class="LineNr"> 9147 </span> 68/push 0/imm32/outputs +<span id="L9148" class="LineNr"> 9148 </span> 53/push-ebx/inouts <span class="subxComment"># hack; in practice we won't have the same var in function definition and call</span> +<span id="L9149" class="LineNr"> 9149 </span> 68/push <span class="Constant">"increment"</span>/imm32/name +<span id="L9150" class="LineNr"> 9150 </span> 89/<- %ebx 4/r32/esp +<span id="L9151" class="LineNr"> 9151 </span> <span class="subxComment"># convert</span> +<span id="L9152" class="LineNr"> 9152 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 +<span id="L9153" class="LineNr"> 9153 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi %ebx 0) +<span id="L9154" class="LineNr"> 9154 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) +<span id="L9155" class="Folded"> 9155 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> +<span id="L9161" class="LineNr"> 9161 </span> <span class="subxComment"># check output</span> +<span id="L9162" class="LineNr"> 9162 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"ff 0/subop/increment *(ebp+0xfffffff8)"</span> <span class="Constant">"F - test-emit-subx-stmt-primitive"</span>) +<span id="L9163" class="LineNr"> 9163 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L9164" class="LineNr"> 9164 </span> 89/<- %esp 5/r32/ebp +<span id="L9165" class="LineNr"> 9165 </span> 5d/pop-to-ebp +<span id="L9166" class="LineNr"> 9166 </span> c3/return +<span id="L9167" class="LineNr"> 9167 </span> +<span id="L9168" class="LineNr"> 9168 </span><span class="subxTest">test-emit-subx-stmt-primitive-register</span>: +<span id="L9169" class="LineNr"> 9169 </span> <span class="subxComment"># Primitive operation on a variable in a register.</span> +<span id="L9170" class="LineNr"> 9170 </span> <span class="subxComment"># foo <- increment</span> +<span id="L9171" class="LineNr"> 9171 </span> <span class="subxComment"># =></span> +<span id="L9172" class="LineNr"> 9172 </span> <span class="subxComment"># ff 0/subop/increment %eax # sub-optimal, but should suffice</span> +<span id="L9173" class="LineNr"> 9173 </span> <span class="subxComment">#</span> +<span id="L9174" class="LineNr"> 9174 </span> <span class="subxComment"># There's a variable on the var stack as follows:</span> +<span id="L9175" class="LineNr"> 9175 </span> <span class="subxComment"># name: 'foo'</span> +<span id="L9176" class="LineNr"> 9176 </span> <span class="subxComment"># type: int</span> +<span id="L9177" class="LineNr"> 9177 </span> <span class="subxComment"># register: 'eax'</span> +<span id="L9178" class="LineNr"> 9178 </span> <span class="subxComment">#</span> +<span id="L9179" class="LineNr"> 9179 </span> <span class="subxComment"># There's a primitive with this info:</span> +<span id="L9180" class="LineNr"> 9180 </span> <span class="subxComment"># name: 'increment'</span> +<span id="L9181" class="LineNr"> 9181 </span> <span class="subxComment"># out: int/reg</span> +<span id="L9182" class="LineNr"> 9182 </span> <span class="subxComment"># value: 'ff 0/subop/increment'</span> +<span id="L9183" class="LineNr"> 9183 </span> <span class="subxComment">#</span> +<span id="L9184" class="LineNr"> 9184 </span> <span class="subxComment"># There's nothing in functions.</span> <span id="L9185" class="LineNr"> 9185 </span> <span class="subxComment">#</span> -<span id="L9186" class="LineNr"> 9186 </span> <span class="subxComment"># There's a variable on the var stack as follows:</span> -<span id="L9187" class="LineNr"> 9187 </span> <span class="subxComment"># name: 'foo'</span> -<span id="L9188" class="LineNr"> 9188 </span> <span class="subxComment"># type: int</span> -<span id="L9189" class="LineNr"> 9189 </span> <span class="subxComment"># register: 'eax'</span> -<span id="L9190" class="LineNr"> 9190 </span> <span class="subxComment">#</span> -<span id="L9191" class="LineNr"> 9191 </span> <span class="subxComment"># There's a primitive with this info:</span> -<span id="L9192" class="LineNr"> 9192 </span> <span class="subxComment"># name: 'increment'</span> -<span id="L9193" class="LineNr"> 9193 </span> <span class="subxComment"># out: int/reg</span> -<span id="L9194" class="LineNr"> 9194 </span> <span class="subxComment"># value: 'ff 0/subop/increment'</span> -<span id="L9195" class="LineNr"> 9195 </span> <span class="subxComment">#</span> -<span id="L9196" class="LineNr"> 9196 </span> <span class="subxComment"># There's nothing in functions.</span> -<span id="L9197" class="LineNr"> 9197 </span> <span class="subxComment">#</span> -<span id="L9198" class="LineNr"> 9198 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L9199" class="LineNr"> 9199 </span> 55/push-ebp -<span id="L9200" class="LineNr"> 9200 </span> 89/<- %ebp 4/r32/esp -<span id="L9201" class="LineNr"> 9201 </span> <span class="subxComment"># setup</span> -<span id="L9202" class="LineNr"> 9202 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) -<span id="L9203" class="LineNr"> 9203 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) -<span id="L9204" class="LineNr"> 9204 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> -<span id="L9205" class="LineNr"> 9205 </span> 68/push 0/imm32/right/null -<span id="L9206" class="LineNr"> 9206 </span> 68/push 1/imm32/left/int -<span id="L9207" class="LineNr"> 9207 </span> 89/<- %ecx 4/r32/esp -<span id="L9208" class="LineNr"> 9208 </span> <span class="subxComment"># var var-foo/ecx: var in eax</span> -<span id="L9209" class="LineNr"> 9209 </span> 68/push <span class="Constant">"eax"</span>/imm32/register -<span id="L9210" class="LineNr"> 9210 </span> 68/push 0/imm32/no-stack-offset -<span id="L9211" class="LineNr"> 9211 </span> 68/push 1/imm32/block-depth -<span id="L9212" class="LineNr"> 9212 </span> 51/push-ecx -<span id="L9213" class="LineNr"> 9213 </span> 68/push <span class="Constant">"foo"</span>/imm32 -<span id="L9214" class="LineNr"> 9214 </span> 89/<- %ecx 4/r32/esp -<span id="L9215" class="LineNr"> 9215 </span> <span class="subxComment"># var operand/ebx: (handle stmt-var)</span> -<span id="L9216" class="LineNr"> 9216 </span> 68/push 0/imm32/is-deref:false -<span id="L9217" class="LineNr"> 9217 </span> 68/push 0/imm32/next -<span id="L9218" class="LineNr"> 9218 </span> 51/push-ecx/var-foo -<span id="L9219" class="LineNr"> 9219 </span> 89/<- %ebx 4/r32/esp -<span id="L9220" class="LineNr"> 9220 </span> <span class="subxComment"># var stmt/esi: statement</span> -<span id="L9221" class="LineNr"> 9221 </span> 68/push 0/imm32/next -<span id="L9222" class="LineNr"> 9222 </span> 53/push-ebx/outputs -<span id="L9223" class="LineNr"> 9223 </span> 68/push 0/imm32/inouts -<span id="L9224" class="LineNr"> 9224 </span> 68/push <span class="Constant">"increment"</span>/imm32/operation -<span id="L9225" class="LineNr"> 9225 </span> 68/push 1/imm32 -<span id="L9226" class="LineNr"> 9226 </span> 89/<- %esi 4/r32/esp -<span id="L9227" class="LineNr"> 9227 </span> <span class="subxComment"># var formal-var/ebx: var in any register</span> -<span id="L9228" class="LineNr"> 9228 </span> 68/push <span class="SpecialChar"><a href='mu.subx.html#L339'>Any-register</a></span>/imm32 -<span id="L9229" class="LineNr"> 9229 </span> 68/push 0/imm32/no-stack-offset -<span id="L9230" class="LineNr"> 9230 </span> 68/push 1/imm32/block-depth -<span id="L9231" class="LineNr"> 9231 </span> ff 6/subop/push *(ecx+4) <span class="subxComment"># Var-type</span> -<span id="L9232" class="LineNr"> 9232 </span> 68/push <span class="Constant">"dummy"</span>/imm32 -<span id="L9233" class="LineNr"> 9233 </span> 89/<- %ebx 4/r32/esp -<span id="L9234" class="LineNr"> 9234 </span> <span class="subxComment"># var operand/ebx: (handle stmt-var)</span> -<span id="L9235" class="LineNr"> 9235 </span> 68/push 0/imm32/is-deref:false -<span id="L9236" class="LineNr"> 9236 </span> 68/push 0/imm32/next -<span id="L9237" class="LineNr"> 9237 </span> 53/push-ebx/formal-var +<span id="L9186" class="LineNr"> 9186 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L9187" class="LineNr"> 9187 </span> 55/push-ebp +<span id="L9188" class="LineNr"> 9188 </span> 89/<- %ebp 4/r32/esp +<span id="L9189" class="LineNr"> 9189 </span> <span class="subxComment"># setup</span> +<span id="L9190" class="LineNr"> 9190 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) +<span id="L9191" class="LineNr"> 9191 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) +<span id="L9192" class="LineNr"> 9192 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> +<span id="L9193" class="LineNr"> 9193 </span> 68/push 0/imm32/right/null +<span id="L9194" class="LineNr"> 9194 </span> 68/push 1/imm32/left/int +<span id="L9195" class="LineNr"> 9195 </span> 89/<- %ecx 4/r32/esp +<span id="L9196" class="LineNr"> 9196 </span> <span class="subxComment"># var var-foo/ecx: var in eax</span> +<span id="L9197" class="LineNr"> 9197 </span> 68/push <span class="Constant">"eax"</span>/imm32/register +<span id="L9198" class="LineNr"> 9198 </span> 68/push 0/imm32/no-stack-offset +<span id="L9199" class="LineNr"> 9199 </span> 68/push 1/imm32/block-depth +<span id="L9200" class="LineNr"> 9200 </span> 51/push-ecx +<span id="L9201" class="LineNr"> 9201 </span> 68/push <span class="Constant">"foo"</span>/imm32 +<span id="L9202" class="LineNr"> 9202 </span> 89/<- %ecx 4/r32/esp +<span id="L9203" class="LineNr"> 9203 </span> <span class="subxComment"># var operand/ebx: (handle stmt-var)</span> +<span id="L9204" class="LineNr"> 9204 </span> 68/push 0/imm32/is-deref:false +<span id="L9205" class="LineNr"> 9205 </span> 68/push 0/imm32/next +<span id="L9206" class="LineNr"> 9206 </span> 51/push-ecx/var-foo +<span id="L9207" class="LineNr"> 9207 </span> 89/<- %ebx 4/r32/esp +<span id="L9208" class="LineNr"> 9208 </span> <span class="subxComment"># var stmt/esi: statement</span> +<span id="L9209" class="LineNr"> 9209 </span> 68/push 0/imm32/next +<span id="L9210" class="LineNr"> 9210 </span> 53/push-ebx/outputs +<span id="L9211" class="LineNr"> 9211 </span> 68/push 0/imm32/inouts +<span id="L9212" class="LineNr"> 9212 </span> 68/push <span class="Constant">"increment"</span>/imm32/operation +<span id="L9213" class="LineNr"> 9213 </span> 68/push 1/imm32 +<span id="L9214" class="LineNr"> 9214 </span> 89/<- %esi 4/r32/esp +<span id="L9215" class="LineNr"> 9215 </span> <span class="subxComment"># var formal-var/ebx: var in any register</span> +<span id="L9216" class="LineNr"> 9216 </span> 68/push <span class="SpecialChar"><a href='mu.subx.html#L339'>Any-register</a></span>/imm32 +<span id="L9217" class="LineNr"> 9217 </span> 68/push 0/imm32/no-stack-offset +<span id="L9218" class="LineNr"> 9218 </span> 68/push 1/imm32/block-depth +<span id="L9219" class="LineNr"> 9219 </span> ff 6/subop/push *(ecx+4) <span class="subxComment"># Var-type</span> +<span id="L9220" class="LineNr"> 9220 </span> 68/push <span class="Constant">"dummy"</span>/imm32 +<span id="L9221" class="LineNr"> 9221 </span> 89/<- %ebx 4/r32/esp +<span id="L9222" class="LineNr"> 9222 </span> <span class="subxComment"># var operand/ebx: (handle stmt-var)</span> +<span id="L9223" class="LineNr"> 9223 </span> 68/push 0/imm32/is-deref:false +<span id="L9224" class="LineNr"> 9224 </span> 68/push 0/imm32/next +<span id="L9225" class="LineNr"> 9225 </span> 53/push-ebx/formal-var +<span id="L9226" class="LineNr"> 9226 </span> 89/<- %ebx 4/r32/esp +<span id="L9227" class="LineNr"> 9227 </span> <span class="subxComment"># var primitives/ebx: primitive</span> +<span id="L9228" class="LineNr"> 9228 </span> 68/push 0/imm32/next +<span id="L9229" class="LineNr"> 9229 </span> 68/push 0/imm32/output-is-write-only +<span id="L9230" class="LineNr"> 9230 </span> 68/push 0/imm32/no-disp32 +<span id="L9231" class="LineNr"> 9231 </span> 68/push 0/imm32/no-imm32 +<span id="L9232" class="LineNr"> 9232 </span> 68/push 0/imm32/no-r32 +<span id="L9233" class="LineNr"> 9233 </span> 68/push 3/imm32/rm32-in-first-output +<span id="L9234" class="LineNr"> 9234 </span> 68/push <span class="Constant">"ff 0/subop/increment"</span>/imm32/subx-name +<span id="L9235" class="LineNr"> 9235 </span> 53/push-ebx/outputs +<span id="L9236" class="LineNr"> 9236 </span> 68/push 0/imm32/inouts +<span id="L9237" class="LineNr"> 9237 </span> 68/push <span class="Constant">"increment"</span>/imm32/name <span id="L9238" class="LineNr"> 9238 </span> 89/<- %ebx 4/r32/esp -<span id="L9239" class="LineNr"> 9239 </span> <span class="subxComment"># var primitives/ebx: primitive</span> -<span id="L9240" class="LineNr"> 9240 </span> 68/push 0/imm32/next -<span id="L9241" class="LineNr"> 9241 </span> 68/push 0/imm32/output-is-write-only -<span id="L9242" class="LineNr"> 9242 </span> 68/push 0/imm32/no-disp32 -<span id="L9243" class="LineNr"> 9243 </span> 68/push 0/imm32/no-imm32 -<span id="L9244" class="LineNr"> 9244 </span> 68/push 0/imm32/no-r32 -<span id="L9245" class="LineNr"> 9245 </span> 68/push 3/imm32/rm32-in-first-output -<span id="L9246" class="LineNr"> 9246 </span> 68/push <span class="Constant">"ff 0/subop/increment"</span>/imm32/subx-name -<span id="L9247" class="LineNr"> 9247 </span> 53/push-ebx/outputs -<span id="L9248" class="LineNr"> 9248 </span> 68/push 0/imm32/inouts -<span id="L9249" class="LineNr"> 9249 </span> 68/push <span class="Constant">"increment"</span>/imm32/name -<span id="L9250" class="LineNr"> 9250 </span> 89/<- %ebx 4/r32/esp -<span id="L9251" class="LineNr"> 9251 </span> <span class="subxComment"># convert</span> -<span id="L9252" class="LineNr"> 9252 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 -<span id="L9253" class="LineNr"> 9253 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi %ebx 0) -<span id="L9254" class="LineNr"> 9254 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) -<span id="L9255" class="Folded"> 9255 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L9261" class="LineNr"> 9261 </span> <span class="subxComment"># check output</span> -<span id="L9262" class="LineNr"> 9262 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"ff 0/subop/increment %eax"</span> <span class="Constant">"F - test-emit-subx-stmt-primitive-register"</span>) -<span id="L9263" class="LineNr"> 9263 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L9264" class="LineNr"> 9264 </span> 89/<- %esp 5/r32/ebp -<span id="L9265" class="LineNr"> 9265 </span> 5d/pop-to-ebp -<span id="L9266" class="LineNr"> 9266 </span> c3/return -<span id="L9267" class="LineNr"> 9267 </span> -<span id="L9268" class="LineNr"> 9268 </span><span class="subxTest">test-emit-subx-stmt-select-primitive</span>: -<span id="L9269" class="LineNr"> 9269 </span> <span class="subxComment"># Select the right primitive between overloads.</span> -<span id="L9270" class="LineNr"> 9270 </span> <span class="subxComment"># foo <- increment</span> -<span id="L9271" class="LineNr"> 9271 </span> <span class="subxComment"># =></span> -<span id="L9272" class="LineNr"> 9272 </span> <span class="subxComment"># ff 0/subop/increment %eax # sub-optimal, but should suffice</span> -<span id="L9273" class="LineNr"> 9273 </span> <span class="subxComment">#</span> -<span id="L9274" class="LineNr"> 9274 </span> <span class="subxComment"># There's a variable on the var stack as follows:</span> -<span id="L9275" class="LineNr"> 9275 </span> <span class="subxComment"># name: 'foo'</span> -<span id="L9276" class="LineNr"> 9276 </span> <span class="subxComment"># type: int</span> -<span id="L9277" class="LineNr"> 9277 </span> <span class="subxComment"># register: 'eax'</span> -<span id="L9278" class="LineNr"> 9278 </span> <span class="subxComment">#</span> -<span id="L9279" class="LineNr"> 9279 </span> <span class="subxComment"># There's two primitives, as follows:</span> -<span id="L9280" class="LineNr"> 9280 </span> <span class="subxComment"># - name: 'increment'</span> -<span id="L9281" class="LineNr"> 9281 </span> <span class="subxComment"># out: int/reg</span> -<span id="L9282" class="LineNr"> 9282 </span> <span class="subxComment"># value: 'ff 0/subop/increment'</span> -<span id="L9283" class="LineNr"> 9283 </span> <span class="subxComment"># - name: 'increment'</span> -<span id="L9284" class="LineNr"> 9284 </span> <span class="subxComment"># inout: int/mem</span> -<span id="L9285" class="LineNr"> 9285 </span> <span class="subxComment"># value: 'ff 0/subop/increment'</span> -<span id="L9286" class="LineNr"> 9286 </span> <span class="subxComment">#</span> -<span id="L9287" class="LineNr"> 9287 </span> <span class="subxComment"># There's nothing in functions.</span> -<span id="L9288" class="LineNr"> 9288 </span> <span class="subxComment">#</span> -<span id="L9289" class="LineNr"> 9289 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L9290" class="LineNr"> 9290 </span> 55/push-ebp -<span id="L9291" class="LineNr"> 9291 </span> 89/<- %ebp 4/r32/esp -<span id="L9292" class="LineNr"> 9292 </span> <span class="subxComment"># setup</span> -<span id="L9293" class="LineNr"> 9293 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) -<span id="L9294" class="LineNr"> 9294 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) -<span id="L9295" class="LineNr"> 9295 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> -<span id="L9296" class="LineNr"> 9296 </span> 68/push 0/imm32/right/null -<span id="L9297" class="LineNr"> 9297 </span> 68/push 1/imm32/left/int -<span id="L9298" class="LineNr"> 9298 </span> 89/<- %ecx 4/r32/esp -<span id="L9299" class="LineNr"> 9299 </span> <span class="subxComment"># var var-foo/ecx: var in eax</span> -<span id="L9300" class="LineNr"> 9300 </span> 68/push <span class="Constant">"eax"</span>/imm32/register -<span id="L9301" class="LineNr"> 9301 </span> 68/push 0/imm32/no-stack-offset -<span id="L9302" class="LineNr"> 9302 </span> 68/push 1/imm32/block-depth -<span id="L9303" class="LineNr"> 9303 </span> 51/push-ecx -<span id="L9304" class="LineNr"> 9304 </span> 68/push <span class="Constant">"foo"</span>/imm32 -<span id="L9305" class="LineNr"> 9305 </span> 89/<- %ecx 4/r32/esp -<span id="L9306" class="LineNr"> 9306 </span> <span class="subxComment"># var real-outputs/edi: (handle stmt-var)</span> -<span id="L9307" class="LineNr"> 9307 </span> 68/push 0/imm32/is-deref:false -<span id="L9308" class="LineNr"> 9308 </span> 68/push 0/imm32/next -<span id="L9309" class="LineNr"> 9309 </span> 51/push-ecx/var-foo -<span id="L9310" class="LineNr"> 9310 </span> 89/<- %edi 4/r32/esp -<span id="L9311" class="LineNr"> 9311 </span> <span class="subxComment"># var stmt/esi: statement</span> -<span id="L9312" class="LineNr"> 9312 </span> 68/push 0/imm32/next -<span id="L9313" class="LineNr"> 9313 </span> 57/push-edi/outputs -<span id="L9314" class="LineNr"> 9314 </span> 68/push 0/imm32/inouts -<span id="L9315" class="LineNr"> 9315 </span> 68/push <span class="Constant">"increment"</span>/imm32/operation -<span id="L9316" class="LineNr"> 9316 </span> 68/push 1/imm32 -<span id="L9317" class="LineNr"> 9317 </span> 89/<- %esi 4/r32/esp -<span id="L9318" class="LineNr"> 9318 </span> <span class="subxComment"># var formal-var/ebx: var in any register</span> -<span id="L9319" class="LineNr"> 9319 </span> 68/push <span class="SpecialChar"><a href='mu.subx.html#L339'>Any-register</a></span>/imm32 -<span id="L9320" class="LineNr"> 9320 </span> 68/push 0/imm32/no-stack-offset -<span id="L9321" class="LineNr"> 9321 </span> 68/push 1/imm32/block-depth -<span id="L9322" class="LineNr"> 9322 </span> ff 6/subop/push *(ecx+4) <span class="subxComment"># Var-type</span> -<span id="L9323" class="LineNr"> 9323 </span> 68/push <span class="Constant">"dummy"</span>/imm32 -<span id="L9324" class="LineNr"> 9324 </span> 89/<- %ebx 4/r32/esp -<span id="L9325" class="LineNr"> 9325 </span> <span class="subxComment"># var formal-outputs/ebx: (handle stmt-var)</span> -<span id="L9326" class="LineNr"> 9326 </span> 68/push 0/imm32/is-deref:false -<span id="L9327" class="LineNr"> 9327 </span> 68/push 0/imm32/next -<span id="L9328" class="LineNr"> 9328 </span> 53/push-ebx/formal-var +<span id="L9239" class="LineNr"> 9239 </span> <span class="subxComment"># convert</span> +<span id="L9240" class="LineNr"> 9240 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 +<span id="L9241" class="LineNr"> 9241 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi %ebx 0) +<span id="L9242" class="LineNr"> 9242 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) +<span id="L9243" class="Folded"> 9243 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> +<span id="L9249" class="LineNr"> 9249 </span> <span class="subxComment"># check output</span> +<span id="L9250" class="LineNr"> 9250 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"ff 0/subop/increment %eax"</span> <span class="Constant">"F - test-emit-subx-stmt-primitive-register"</span>) +<span id="L9251" class="LineNr"> 9251 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L9252" class="LineNr"> 9252 </span> 89/<- %esp 5/r32/ebp +<span id="L9253" class="LineNr"> 9253 </span> 5d/pop-to-ebp +<span id="L9254" class="LineNr"> 9254 </span> c3/return +<span id="L9255" class="LineNr"> 9255 </span> +<span id="L9256" class="LineNr"> 9256 </span><span class="subxTest">test-emit-subx-stmt-select-primitive</span>: +<span id="L9257" class="LineNr"> 9257 </span> <span class="subxComment"># Select the right primitive between overloads.</span> +<span id="L9258" class="LineNr"> 9258 </span> <span class="subxComment"># foo <- increment</span> +<span id="L9259" class="LineNr"> 9259 </span> <span class="subxComment"># =></span> +<span id="L9260" class="LineNr"> 9260 </span> <span class="subxComment"># ff 0/subop/increment %eax # sub-optimal, but should suffice</span> +<span id="L9261" class="LineNr"> 9261 </span> <span class="subxComment">#</span> +<span id="L9262" class="LineNr"> 9262 </span> <span class="subxComment"># There's a variable on the var stack as follows:</span> +<span id="L9263" class="LineNr"> 9263 </span> <span class="subxComment"># name: 'foo'</span> +<span id="L9264" class="LineNr"> 9264 </span> <span class="subxComment"># type: int</span> +<span id="L9265" class="LineNr"> 9265 </span> <span class="subxComment"># register: 'eax'</span> +<span id="L9266" class="LineNr"> 9266 </span> <span class="subxComment">#</span> +<span id="L9267" class="LineNr"> 9267 </span> <span class="subxComment"># There's two primitives, as follows:</span> +<span id="L9268" class="LineNr"> 9268 </span> <span class="subxComment"># - name: 'increment'</span> +<span id="L9269" class="LineNr"> 9269 </span> <span class="subxComment"># out: int/reg</span> +<span id="L9270" class="LineNr"> 9270 </span> <span class="subxComment"># value: 'ff 0/subop/increment'</span> +<span id="L9271" class="LineNr"> 9271 </span> <span class="subxComment"># - name: 'increment'</span> +<span id="L9272" class="LineNr"> 9272 </span> <span class="subxComment"># inout: int/mem</span> +<span id="L9273" class="LineNr"> 9273 </span> <span class="subxComment"># value: 'ff 0/subop/increment'</span> +<span id="L9274" class="LineNr"> 9274 </span> <span class="subxComment">#</span> +<span id="L9275" class="LineNr"> 9275 </span> <span class="subxComment"># There's nothing in functions.</span> +<span id="L9276" class="LineNr"> 9276 </span> <span class="subxComment">#</span> +<span id="L9277" class="LineNr"> 9277 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L9278" class="LineNr"> 9278 </span> 55/push-ebp +<span id="L9279" class="LineNr"> 9279 </span> 89/<- %ebp 4/r32/esp +<span id="L9280" class="LineNr"> 9280 </span> <span class="subxComment"># setup</span> +<span id="L9281" class="LineNr"> 9281 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) +<span id="L9282" class="LineNr"> 9282 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) +<span id="L9283" class="LineNr"> 9283 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> +<span id="L9284" class="LineNr"> 9284 </span> 68/push 0/imm32/right/null +<span id="L9285" class="LineNr"> 9285 </span> 68/push 1/imm32/left/int +<span id="L9286" class="LineNr"> 9286 </span> 89/<- %ecx 4/r32/esp +<span id="L9287" class="LineNr"> 9287 </span> <span class="subxComment"># var var-foo/ecx: var in eax</span> +<span id="L9288" class="LineNr"> 9288 </span> 68/push <span class="Constant">"eax"</span>/imm32/register +<span id="L9289" class="LineNr"> 9289 </span> 68/push 0/imm32/no-stack-offset +<span id="L9290" class="LineNr"> 9290 </span> 68/push 1/imm32/block-depth +<span id="L9291" class="LineNr"> 9291 </span> 51/push-ecx +<span id="L9292" class="LineNr"> 9292 </span> 68/push <span class="Constant">"foo"</span>/imm32 +<span id="L9293" class="LineNr"> 9293 </span> 89/<- %ecx 4/r32/esp +<span id="L9294" class="LineNr"> 9294 </span> <span class="subxComment"># var real-outputs/edi: (handle stmt-var)</span> +<span id="L9295" class="LineNr"> 9295 </span> 68/push 0/imm32/is-deref:false +<span id="L9296" class="LineNr"> 9296 </span> 68/push 0/imm32/next +<span id="L9297" class="LineNr"> 9297 </span> 51/push-ecx/var-foo +<span id="L9298" class="LineNr"> 9298 </span> 89/<- %edi 4/r32/esp +<span id="L9299" class="LineNr"> 9299 </span> <span class="subxComment"># var stmt/esi: statement</span> +<span id="L9300" class="LineNr"> 9300 </span> 68/push 0/imm32/next +<span id="L9301" class="LineNr"> 9301 </span> 57/push-edi/outputs +<span id="L9302" class="LineNr"> 9302 </span> 68/push 0/imm32/inouts +<span id="L9303" class="LineNr"> 9303 </span> 68/push <span class="Constant">"increment"</span>/imm32/operation +<span id="L9304" class="LineNr"> 9304 </span> 68/push 1/imm32 +<span id="L9305" class="LineNr"> 9305 </span> 89/<- %esi 4/r32/esp +<span id="L9306" class="LineNr"> 9306 </span> <span class="subxComment"># var formal-var/ebx: var in any register</span> +<span id="L9307" class="LineNr"> 9307 </span> 68/push <span class="SpecialChar"><a href='mu.subx.html#L339'>Any-register</a></span>/imm32 +<span id="L9308" class="LineNr"> 9308 </span> 68/push 0/imm32/no-stack-offset +<span id="L9309" class="LineNr"> 9309 </span> 68/push 1/imm32/block-depth +<span id="L9310" class="LineNr"> 9310 </span> ff 6/subop/push *(ecx+4) <span class="subxComment"># Var-type</span> +<span id="L9311" class="LineNr"> 9311 </span> 68/push <span class="Constant">"dummy"</span>/imm32 +<span id="L9312" class="LineNr"> 9312 </span> 89/<- %ebx 4/r32/esp +<span id="L9313" class="LineNr"> 9313 </span> <span class="subxComment"># var formal-outputs/ebx: (handle stmt-var)</span> +<span id="L9314" class="LineNr"> 9314 </span> 68/push 0/imm32/is-deref:false +<span id="L9315" class="LineNr"> 9315 </span> 68/push 0/imm32/next +<span id="L9316" class="LineNr"> 9316 </span> 53/push-ebx/formal-var +<span id="L9317" class="LineNr"> 9317 </span> 89/<- %ebx 4/r32/esp +<span id="L9318" class="LineNr"> 9318 </span> <span class="subxComment"># var primitive1/ebx: primitive</span> +<span id="L9319" class="LineNr"> 9319 </span> 68/push 0/imm32/next +<span id="L9320" class="LineNr"> 9320 </span> 68/push 0/imm32/output-is-write-only +<span id="L9321" class="LineNr"> 9321 </span> 68/push 0/imm32/no-disp32 +<span id="L9322" class="LineNr"> 9322 </span> 68/push 0/imm32/no-imm32 +<span id="L9323" class="LineNr"> 9323 </span> 68/push 0/imm32/no-r32 +<span id="L9324" class="LineNr"> 9324 </span> 68/push 3/imm32/rm32-in-first-output +<span id="L9325" class="LineNr"> 9325 </span> 68/push <span class="Constant">"ff 0/subop/increment"</span>/imm32/subx-name +<span id="L9326" class="LineNr"> 9326 </span> 53/push-ebx/outputs/formal-outputs +<span id="L9327" class="LineNr"> 9327 </span> 68/push 0/imm32/inouts +<span id="L9328" class="LineNr"> 9328 </span> 68/push <span class="Constant">"increment"</span>/imm32/name <span id="L9329" class="LineNr"> 9329 </span> 89/<- %ebx 4/r32/esp -<span id="L9330" class="LineNr"> 9330 </span> <span class="subxComment"># var primitive1/ebx: primitive</span> -<span id="L9331" class="LineNr"> 9331 </span> 68/push 0/imm32/next +<span id="L9330" class="LineNr"> 9330 </span> <span class="subxComment"># var primitives/ebx: primitive</span> +<span id="L9331" class="LineNr"> 9331 </span> 53/push-ebx/next <span id="L9332" class="LineNr"> 9332 </span> 68/push 0/imm32/output-is-write-only <span id="L9333" class="LineNr"> 9333 </span> 68/push 0/imm32/no-disp32 <span id="L9334" class="LineNr"> 9334 </span> 68/push 0/imm32/no-imm32 <span id="L9335" class="LineNr"> 9335 </span> 68/push 0/imm32/no-r32 -<span id="L9336" class="LineNr"> 9336 </span> 68/push 3/imm32/rm32-in-first-output +<span id="L9336" class="LineNr"> 9336 </span> 68/push 1/imm32/rm32-is-first-inout <span id="L9337" class="LineNr"> 9337 </span> 68/push <span class="Constant">"ff 0/subop/increment"</span>/imm32/subx-name -<span id="L9338" class="LineNr"> 9338 </span> 53/push-ebx/outputs/formal-outputs -<span id="L9339" class="LineNr"> 9339 </span> 68/push 0/imm32/inouts +<span id="L9338" class="LineNr"> 9338 </span> 68/push 0/imm32/outputs +<span id="L9339" class="LineNr"> 9339 </span> 57/push-edi/inouts/real-outputs <span class="subxComment"># hack; in practice we won't have the same var in function definition and call</span> <span id="L9340" class="LineNr"> 9340 </span> 68/push <span class="Constant">"increment"</span>/imm32/name <span id="L9341" class="LineNr"> 9341 </span> 89/<- %ebx 4/r32/esp -<span id="L9342" class="LineNr"> 9342 </span> <span class="subxComment"># var primitives/ebx: primitive</span> -<span id="L9343" class="LineNr"> 9343 </span> 53/push-ebx/next -<span id="L9344" class="LineNr"> 9344 </span> 68/push 0/imm32/output-is-write-only -<span id="L9345" class="LineNr"> 9345 </span> 68/push 0/imm32/no-disp32 -<span id="L9346" class="LineNr"> 9346 </span> 68/push 0/imm32/no-imm32 -<span id="L9347" class="LineNr"> 9347 </span> 68/push 0/imm32/no-r32 -<span id="L9348" class="LineNr"> 9348 </span> 68/push 1/imm32/rm32-is-first-inout -<span id="L9349" class="LineNr"> 9349 </span> 68/push <span class="Constant">"ff 0/subop/increment"</span>/imm32/subx-name -<span id="L9350" class="LineNr"> 9350 </span> 68/push 0/imm32/outputs -<span id="L9351" class="LineNr"> 9351 </span> 57/push-edi/inouts/real-outputs <span class="subxComment"># hack; in practice we won't have the same var in function definition and call</span> -<span id="L9352" class="LineNr"> 9352 </span> 68/push <span class="Constant">"increment"</span>/imm32/name -<span id="L9353" class="LineNr"> 9353 </span> 89/<- %ebx 4/r32/esp -<span id="L9354" class="LineNr"> 9354 </span> <span class="subxComment"># convert</span> -<span id="L9355" class="LineNr"> 9355 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 -<span id="L9356" class="LineNr"> 9356 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi %ebx 0) -<span id="L9357" class="LineNr"> 9357 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) -<span id="L9358" class="Folded"> 9358 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L9364" class="LineNr"> 9364 </span> <span class="subxComment"># check output</span> -<span id="L9365" class="LineNr"> 9365 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"ff 0/subop/increment %eax"</span> <span class="Constant">"F - test-emit-subx-stmt-select-primitive"</span>) -<span id="L9366" class="LineNr"> 9366 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L9367" class="LineNr"> 9367 </span> 89/<- %esp 5/r32/ebp -<span id="L9368" class="LineNr"> 9368 </span> 5d/pop-to-ebp -<span id="L9369" class="LineNr"> 9369 </span> c3/return -<span id="L9370" class="LineNr"> 9370 </span> -<span id="L9371" class="LineNr"> 9371 </span><span class="subxTest">test-emit-subx-stmt-select-primitive-2</span>: -<span id="L9372" class="LineNr"> 9372 </span> <span class="subxComment"># Select the right primitive between overloads.</span> -<span id="L9373" class="LineNr"> 9373 </span> <span class="subxComment"># foo <- increment</span> -<span id="L9374" class="LineNr"> 9374 </span> <span class="subxComment"># =></span> -<span id="L9375" class="LineNr"> 9375 </span> <span class="subxComment"># ff 0/subop/increment %eax # sub-optimal, but should suffice</span> -<span id="L9376" class="LineNr"> 9376 </span> <span class="subxComment">#</span> -<span id="L9377" class="LineNr"> 9377 </span> <span class="subxComment"># There's a variable on the var stack as follows:</span> -<span id="L9378" class="LineNr"> 9378 </span> <span class="subxComment"># name: 'foo'</span> -<span id="L9379" class="LineNr"> 9379 </span> <span class="subxComment"># type: int</span> -<span id="L9380" class="LineNr"> 9380 </span> <span class="subxComment"># register: 'eax'</span> -<span id="L9381" class="LineNr"> 9381 </span> <span class="subxComment">#</span> -<span id="L9382" class="LineNr"> 9382 </span> <span class="subxComment"># There's two primitives, as follows:</span> -<span id="L9383" class="LineNr"> 9383 </span> <span class="subxComment"># - name: 'increment'</span> -<span id="L9384" class="LineNr"> 9384 </span> <span class="subxComment"># out: int/reg</span> -<span id="L9385" class="LineNr"> 9385 </span> <span class="subxComment"># value: 'ff 0/subop/increment'</span> -<span id="L9386" class="LineNr"> 9386 </span> <span class="subxComment"># - name: 'increment'</span> -<span id="L9387" class="LineNr"> 9387 </span> <span class="subxComment"># inout: int/mem</span> -<span id="L9388" class="LineNr"> 9388 </span> <span class="subxComment"># value: 'ff 0/subop/increment'</span> -<span id="L9389" class="LineNr"> 9389 </span> <span class="subxComment">#</span> -<span id="L9390" class="LineNr"> 9390 </span> <span class="subxComment"># There's nothing in functions.</span> -<span id="L9391" class="LineNr"> 9391 </span> <span class="subxComment">#</span> -<span id="L9392" class="LineNr"> 9392 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L9393" class="LineNr"> 9393 </span> 55/push-ebp -<span id="L9394" class="LineNr"> 9394 </span> 89/<- %ebp 4/r32/esp -<span id="L9395" class="LineNr"> 9395 </span> <span class="subxComment"># setup</span> -<span id="L9396" class="LineNr"> 9396 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) -<span id="L9397" class="LineNr"> 9397 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) -<span id="L9398" class="LineNr"> 9398 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> -<span id="L9399" class="LineNr"> 9399 </span> 68/push 0/imm32/right/null -<span id="L9400" class="LineNr"> 9400 </span> 68/push 1/imm32/left/int -<span id="L9401" class="LineNr"> 9401 </span> 89/<- %ecx 4/r32/esp -<span id="L9402" class="LineNr"> 9402 </span> <span class="subxComment"># var var-foo/ecx: var in eax</span> -<span id="L9403" class="LineNr"> 9403 </span> 68/push <span class="Constant">"eax"</span>/imm32/register -<span id="L9404" class="LineNr"> 9404 </span> 68/push 0/imm32/no-stack-offset -<span id="L9405" class="LineNr"> 9405 </span> 68/push 1/imm32/block-depth -<span id="L9406" class="LineNr"> 9406 </span> 51/push-ecx -<span id="L9407" class="LineNr"> 9407 </span> 68/push <span class="Constant">"foo"</span>/imm32 -<span id="L9408" class="LineNr"> 9408 </span> 89/<- %ecx 4/r32/esp -<span id="L9409" class="LineNr"> 9409 </span> <span class="subxComment"># var inouts/edi: (handle stmt-var)</span> -<span id="L9410" class="LineNr"> 9410 </span> 68/push 0/imm32/is-deref:false -<span id="L9411" class="LineNr"> 9411 </span> 68/push 0/imm32/next -<span id="L9412" class="LineNr"> 9412 </span> 51/push-ecx/var-foo -<span id="L9413" class="LineNr"> 9413 </span> 89/<- %edi 4/r32/esp -<span id="L9414" class="LineNr"> 9414 </span> <span class="subxComment"># var stmt/esi: statement</span> -<span id="L9415" class="LineNr"> 9415 </span> 68/push 0/imm32/next -<span id="L9416" class="LineNr"> 9416 </span> 68/push 0/imm32/outputs -<span id="L9417" class="LineNr"> 9417 </span> 57/push-edi/inouts -<span id="L9418" class="LineNr"> 9418 </span> 68/push <span class="Constant">"increment"</span>/imm32/operation -<span id="L9419" class="LineNr"> 9419 </span> 68/push 1/imm32 -<span id="L9420" class="LineNr"> 9420 </span> 89/<- %esi 4/r32/esp -<span id="L9421" class="LineNr"> 9421 </span> <span class="subxComment"># var formal-var/ebx: var in any register</span> -<span id="L9422" class="LineNr"> 9422 </span> 68/push <span class="SpecialChar"><a href='mu.subx.html#L339'>Any-register</a></span>/imm32 -<span id="L9423" class="LineNr"> 9423 </span> 68/push 0/imm32/no-stack-offset -<span id="L9424" class="LineNr"> 9424 </span> 68/push 1/imm32/block-depth -<span id="L9425" class="LineNr"> 9425 </span> ff 6/subop/push *(ecx+4) <span class="subxComment"># Var-type</span> -<span id="L9426" class="LineNr"> 9426 </span> 68/push <span class="Constant">"dummy"</span>/imm32 -<span id="L9427" class="LineNr"> 9427 </span> 89/<- %ebx 4/r32/esp -<span id="L9428" class="LineNr"> 9428 </span> <span class="subxComment"># var operand/ebx: (handle stmt-var)</span> -<span id="L9429" class="LineNr"> 9429 </span> 68/push 0/imm32/is-deref:false -<span id="L9430" class="LineNr"> 9430 </span> 68/push 0/imm32/next -<span id="L9431" class="LineNr"> 9431 </span> 53/push-ebx/formal-var +<span id="L9342" class="LineNr"> 9342 </span> <span class="subxComment"># convert</span> +<span id="L9343" class="LineNr"> 9343 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 +<span id="L9344" class="LineNr"> 9344 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi %ebx 0) +<span id="L9345" class="LineNr"> 9345 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) +<span id="L9346" class="Folded"> 9346 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> +<span id="L9352" class="LineNr"> 9352 </span> <span class="subxComment"># check output</span> +<span id="L9353" class="LineNr"> 9353 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"ff 0/subop/increment %eax"</span> <span class="Constant">"F - test-emit-subx-stmt-select-primitive"</span>) +<span id="L9354" class="LineNr"> 9354 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L9355" class="LineNr"> 9355 </span> 89/<- %esp 5/r32/ebp +<span id="L9356" class="LineNr"> 9356 </span> 5d/pop-to-ebp +<span id="L9357" class="LineNr"> 9357 </span> c3/return +<span id="L9358" class="LineNr"> 9358 </span> +<span id="L9359" class="LineNr"> 9359 </span><span class="subxTest">test-emit-subx-stmt-select-primitive-2</span>: +<span id="L9360" class="LineNr"> 9360 </span> <span class="subxComment"># Select the right primitive between overloads.</span> +<span id="L9361" class="LineNr"> 9361 </span> <span class="subxComment"># foo <- increment</span> +<span id="L9362" class="LineNr"> 9362 </span> <span class="subxComment"># =></span> +<span id="L9363" class="LineNr"> 9363 </span> <span class="subxComment"># ff 0/subop/increment %eax # sub-optimal, but should suffice</span> +<span id="L9364" class="LineNr"> 9364 </span> <span class="subxComment">#</span> +<span id="L9365" class="LineNr"> 9365 </span> <span class="subxComment"># There's a variable on the var stack as follows:</span> +<span id="L9366" class="LineNr"> 9366 </span> <span class="subxComment"># name: 'foo'</span> +<span id="L9367" class="LineNr"> 9367 </span> <span class="subxComment"># type: int</span> +<span id="L9368" class="LineNr"> 9368 </span> <span class="subxComment"># register: 'eax'</span> +<span id="L9369" class="LineNr"> 9369 </span> <span class="subxComment">#</span> +<span id="L9370" class="LineNr"> 9370 </span> <span class="subxComment"># There's two primitives, as follows:</span> +<span id="L9371" class="LineNr"> 9371 </span> <span class="subxComment"># - name: 'increment'</span> +<span id="L9372" class="LineNr"> 9372 </span> <span class="subxComment"># out: int/reg</span> +<span id="L9373" class="LineNr"> 9373 </span> <span class="subxComment"># value: 'ff 0/subop/increment'</span> +<span id="L9374" class="LineNr"> 9374 </span> <span class="subxComment"># - name: 'increment'</span> +<span id="L9375" class="LineNr"> 9375 </span> <span class="subxComment"># inout: int/mem</span> +<span id="L9376" class="LineNr"> 9376 </span> <span class="subxComment"># value: 'ff 0/subop/increment'</span> +<span id="L9377" class="LineNr"> 9377 </span> <span class="subxComment">#</span> +<span id="L9378" class="LineNr"> 9378 </span> <span class="subxComment"># There's nothing in functions.</span> +<span id="L9379" class="LineNr"> 9379 </span> <span class="subxComment">#</span> +<span id="L9380" class="LineNr"> 9380 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L9381" class="LineNr"> 9381 </span> 55/push-ebp +<span id="L9382" class="LineNr"> 9382 </span> 89/<- %ebp 4/r32/esp +<span id="L9383" class="LineNr"> 9383 </span> <span class="subxComment"># setup</span> +<span id="L9384" class="LineNr"> 9384 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) +<span id="L9385" class="LineNr"> 9385 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) +<span id="L9386" class="LineNr"> 9386 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> +<span id="L9387" class="LineNr"> 9387 </span> 68/push 0/imm32/right/null +<span id="L9388" class="LineNr"> 9388 </span> 68/push 1/imm32/left/int +<span id="L9389" class="LineNr"> 9389 </span> 89/<- %ecx 4/r32/esp +<span id="L9390" class="LineNr"> 9390 </span> <span class="subxComment"># var var-foo/ecx: var in eax</span> +<span id="L9391" class="LineNr"> 9391 </span> 68/push <span class="Constant">"eax"</span>/imm32/register +<span id="L9392" class="LineNr"> 9392 </span> 68/push 0/imm32/no-stack-offset +<span id="L9393" class="LineNr"> 9393 </span> 68/push 1/imm32/block-depth +<span id="L9394" class="LineNr"> 9394 </span> 51/push-ecx +<span id="L9395" class="LineNr"> 9395 </span> 68/push <span class="Constant">"foo"</span>/imm32 +<span id="L9396" class="LineNr"> 9396 </span> 89/<- %ecx 4/r32/esp +<span id="L9397" class="LineNr"> 9397 </span> <span class="subxComment"># var inouts/edi: (handle stmt-var)</span> +<span id="L9398" class="LineNr"> 9398 </span> 68/push 0/imm32/is-deref:false +<span id="L9399" class="LineNr"> 9399 </span> 68/push 0/imm32/next +<span id="L9400" class="LineNr"> 9400 </span> 51/push-ecx/var-foo +<span id="L9401" class="LineNr"> 9401 </span> 89/<- %edi 4/r32/esp +<span id="L9402" class="LineNr"> 9402 </span> <span class="subxComment"># var stmt/esi: statement</span> +<span id="L9403" class="LineNr"> 9403 </span> 68/push 0/imm32/next +<span id="L9404" class="LineNr"> 9404 </span> 68/push 0/imm32/outputs +<span id="L9405" class="LineNr"> 9405 </span> 57/push-edi/inouts +<span id="L9406" class="LineNr"> 9406 </span> 68/push <span class="Constant">"increment"</span>/imm32/operation +<span id="L9407" class="LineNr"> 9407 </span> 68/push 1/imm32 +<span id="L9408" class="LineNr"> 9408 </span> 89/<- %esi 4/r32/esp +<span id="L9409" class="LineNr"> 9409 </span> <span class="subxComment"># var formal-var/ebx: var in any register</span> +<span id="L9410" class="LineNr"> 9410 </span> 68/push <span class="SpecialChar"><a href='mu.subx.html#L339'>Any-register</a></span>/imm32 +<span id="L9411" class="LineNr"> 9411 </span> 68/push 0/imm32/no-stack-offset +<span id="L9412" class="LineNr"> 9412 </span> 68/push 1/imm32/block-depth +<span id="L9413" class="LineNr"> 9413 </span> ff 6/subop/push *(ecx+4) <span class="subxComment"># Var-type</span> +<span id="L9414" class="LineNr"> 9414 </span> 68/push <span class="Constant">"dummy"</span>/imm32 +<span id="L9415" class="LineNr"> 9415 </span> 89/<- %ebx 4/r32/esp +<span id="L9416" class="LineNr"> 9416 </span> <span class="subxComment"># var operand/ebx: (handle stmt-var)</span> +<span id="L9417" class="LineNr"> 9417 </span> 68/push 0/imm32/is-deref:false +<span id="L9418" class="LineNr"> 9418 </span> 68/push 0/imm32/next +<span id="L9419" class="LineNr"> 9419 </span> 53/push-ebx/formal-var +<span id="L9420" class="LineNr"> 9420 </span> 89/<- %ebx 4/r32/esp +<span id="L9421" class="LineNr"> 9421 </span> <span class="subxComment"># var primitive1/ebx: primitive</span> +<span id="L9422" class="LineNr"> 9422 </span> 68/push 0/imm32/next +<span id="L9423" class="LineNr"> 9423 </span> 68/push 0/imm32/output-is-write-only +<span id="L9424" class="LineNr"> 9424 </span> 68/push 0/imm32/no-disp32 +<span id="L9425" class="LineNr"> 9425 </span> 68/push 0/imm32/no-imm32 +<span id="L9426" class="LineNr"> 9426 </span> 68/push 0/imm32/no-r32 +<span id="L9427" class="LineNr"> 9427 </span> 68/push 3/imm32/rm32-in-first-output +<span id="L9428" class="LineNr"> 9428 </span> 68/push <span class="Constant">"ff 0/subop/increment"</span>/imm32/subx-name +<span id="L9429" class="LineNr"> 9429 </span> 53/push-ebx/outputs/formal-outputs +<span id="L9430" class="LineNr"> 9430 </span> 68/push 0/imm32/inouts +<span id="L9431" class="LineNr"> 9431 </span> 68/push <span class="Constant">"increment"</span>/imm32/name <span id="L9432" class="LineNr"> 9432 </span> 89/<- %ebx 4/r32/esp -<span id="L9433" class="LineNr"> 9433 </span> <span class="subxComment"># var primitive1/ebx: primitive</span> -<span id="L9434" class="LineNr"> 9434 </span> 68/push 0/imm32/next +<span id="L9433" class="LineNr"> 9433 </span> <span class="subxComment"># var primitives/ebx: primitive</span> +<span id="L9434" class="LineNr"> 9434 </span> 53/push-ebx/next <span id="L9435" class="LineNr"> 9435 </span> 68/push 0/imm32/output-is-write-only <span id="L9436" class="LineNr"> 9436 </span> 68/push 0/imm32/no-disp32 <span id="L9437" class="LineNr"> 9437 </span> 68/push 0/imm32/no-imm32 <span id="L9438" class="LineNr"> 9438 </span> 68/push 0/imm32/no-r32 -<span id="L9439" class="LineNr"> 9439 </span> 68/push 3/imm32/rm32-in-first-output +<span id="L9439" class="LineNr"> 9439 </span> 68/push 1/imm32/rm32-is-first-inout <span id="L9440" class="LineNr"> 9440 </span> 68/push <span class="Constant">"ff 0/subop/increment"</span>/imm32/subx-name -<span id="L9441" class="LineNr"> 9441 </span> 53/push-ebx/outputs/formal-outputs -<span id="L9442" class="LineNr"> 9442 </span> 68/push 0/imm32/inouts +<span id="L9441" class="LineNr"> 9441 </span> 68/push 0/imm32/outputs +<span id="L9442" class="LineNr"> 9442 </span> 57/push-edi/inouts/real-outputs <span class="subxComment"># hack; in practice we won't have the same var in function definition and call</span> <span id="L9443" class="LineNr"> 9443 </span> 68/push <span class="Constant">"increment"</span>/imm32/name <span id="L9444" class="LineNr"> 9444 </span> 89/<- %ebx 4/r32/esp -<span id="L9445" class="LineNr"> 9445 </span> <span class="subxComment"># var primitives/ebx: primitive</span> -<span id="L9446" class="LineNr"> 9446 </span> 53/push-ebx/next -<span id="L9447" class="LineNr"> 9447 </span> 68/push 0/imm32/output-is-write-only -<span id="L9448" class="LineNr"> 9448 </span> 68/push 0/imm32/no-disp32 -<span id="L9449" class="LineNr"> 9449 </span> 68/push 0/imm32/no-imm32 -<span id="L9450" class="LineNr"> 9450 </span> 68/push 0/imm32/no-r32 -<span id="L9451" class="LineNr"> 9451 </span> 68/push 1/imm32/rm32-is-first-inout -<span id="L9452" class="LineNr"> 9452 </span> 68/push <span class="Constant">"ff 0/subop/increment"</span>/imm32/subx-name -<span id="L9453" class="LineNr"> 9453 </span> 68/push 0/imm32/outputs -<span id="L9454" class="LineNr"> 9454 </span> 57/push-edi/inouts/real-outputs <span class="subxComment"># hack; in practice we won't have the same var in function definition and call</span> -<span id="L9455" class="LineNr"> 9455 </span> 68/push <span class="Constant">"increment"</span>/imm32/name -<span id="L9456" class="LineNr"> 9456 </span> 89/<- %ebx 4/r32/esp -<span id="L9457" class="LineNr"> 9457 </span> <span class="subxComment"># convert</span> -<span id="L9458" class="LineNr"> 9458 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 -<span id="L9459" class="LineNr"> 9459 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi %ebx 0) -<span id="L9460" class="LineNr"> 9460 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) -<span id="L9461" class="Folded"> 9461 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L9467" class="LineNr"> 9467 </span> <span class="subxComment"># check output</span> -<span id="L9468" class="LineNr"> 9468 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"ff 0/subop/increment %eax"</span> <span class="Constant">"F - test-emit-subx-stmt-select-primitive-2"</span>) -<span id="L9469" class="LineNr"> 9469 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L9470" class="LineNr"> 9470 </span> 89/<- %esp 5/r32/ebp -<span id="L9471" class="LineNr"> 9471 </span> 5d/pop-to-ebp -<span id="L9472" class="LineNr"> 9472 </span> c3/return -<span id="L9473" class="LineNr"> 9473 </span> -<span id="L9474" class="LineNr"> 9474 </span><span class="subxTest">test-increment-register</span>: -<span id="L9475" class="LineNr"> 9475 </span> <span class="subxComment"># Select the right register between overloads.</span> -<span id="L9476" class="LineNr"> 9476 </span> <span class="subxComment"># foo <- increment</span> -<span id="L9477" class="LineNr"> 9477 </span> <span class="subxComment"># =></span> -<span id="L9478" class="LineNr"> 9478 </span> <span class="subxComment"># 50/increment-eax</span> -<span id="L9479" class="LineNr"> 9479 </span> <span class="subxComment">#</span> -<span id="L9480" class="LineNr"> 9480 </span> <span class="subxComment"># There's a variable on the var stack as follows:</span> -<span id="L9481" class="LineNr"> 9481 </span> <span class="subxComment"># name: 'foo'</span> -<span id="L9482" class="LineNr"> 9482 </span> <span class="subxComment"># type: int</span> -<span id="L9483" class="LineNr"> 9483 </span> <span class="subxComment"># register: 'eax'</span> -<span id="L9484" class="LineNr"> 9484 </span> <span class="subxComment">#</span> -<span id="L9485" class="LineNr"> 9485 </span> <span class="subxComment"># Primitives are the global definitions.</span> -<span id="L9486" class="LineNr"> 9486 </span> <span class="subxComment">#</span> -<span id="L9487" class="LineNr"> 9487 </span> <span class="subxComment"># There are no functions defined.</span> -<span id="L9488" class="LineNr"> 9488 </span> <span class="subxComment">#</span> -<span id="L9489" class="LineNr"> 9489 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L9490" class="LineNr"> 9490 </span> 55/push-ebp -<span id="L9491" class="LineNr"> 9491 </span> 89/<- %ebp 4/r32/esp -<span id="L9492" class="LineNr"> 9492 </span> <span class="subxComment"># setup</span> -<span id="L9493" class="LineNr"> 9493 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) -<span id="L9494" class="LineNr"> 9494 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) -<span id="L9495" class="LineNr"> 9495 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> -<span id="L9496" class="LineNr"> 9496 </span> 68/push 0/imm32/right/null -<span id="L9497" class="LineNr"> 9497 </span> 68/push 1/imm32/left/int -<span id="L9498" class="LineNr"> 9498 </span> 89/<- %ecx 4/r32/esp -<span id="L9499" class="LineNr"> 9499 </span> <span class="subxComment"># var var-foo/ecx: var in eax</span> -<span id="L9500" class="LineNr"> 9500 </span> 68/push <span class="Constant">"eax"</span>/imm32/register -<span id="L9501" class="LineNr"> 9501 </span> 68/push 0/imm32/no-stack-offset -<span id="L9502" class="LineNr"> 9502 </span> 68/push 1/imm32/block-depth -<span id="L9503" class="LineNr"> 9503 </span> 51/push-ecx -<span id="L9504" class="LineNr"> 9504 </span> 68/push <span class="Constant">"foo"</span>/imm32 -<span id="L9505" class="LineNr"> 9505 </span> 89/<- %ecx 4/r32/esp -<span id="L9506" class="LineNr"> 9506 </span> <span class="subxComment"># var real-outputs/edi: (handle stmt-var)</span> -<span id="L9507" class="LineNr"> 9507 </span> 68/push 0/imm32/is-deref:false -<span id="L9508" class="LineNr"> 9508 </span> 68/push 0/imm32/next -<span id="L9509" class="LineNr"> 9509 </span> 51/push-ecx/var-foo -<span id="L9510" class="LineNr"> 9510 </span> 89/<- %edi 4/r32/esp -<span id="L9511" class="LineNr"> 9511 </span> <span class="subxComment"># var stmt/esi: statement</span> -<span id="L9512" class="LineNr"> 9512 </span> 68/push 0/imm32/next -<span id="L9513" class="LineNr"> 9513 </span> 57/push-edi/outputs -<span id="L9514" class="LineNr"> 9514 </span> 68/push 0/imm32/inouts -<span id="L9515" class="LineNr"> 9515 </span> 68/push <span class="Constant">"increment"</span>/imm32/operation -<span id="L9516" class="LineNr"> 9516 </span> 68/push 1/imm32/regular-stmt -<span id="L9517" class="LineNr"> 9517 </span> 89/<- %esi 4/r32/esp -<span id="L9518" class="LineNr"> 9518 </span> <span class="subxComment"># convert</span> -<span id="L9519" class="LineNr"> 9519 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 -<span id="L9520" class="LineNr"> 9520 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6983'>Primitives</a></span> 0) -<span id="L9521" class="LineNr"> 9521 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) -<span id="L9522" class="Folded"> 9522 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L9528" class="LineNr"> 9528 </span> <span class="subxComment"># check output</span> -<span id="L9529" class="LineNr"> 9529 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"40/increment-eax"</span> <span class="Constant">"F - test-increment-register"</span>) -<span id="L9530" class="LineNr"> 9530 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L9531" class="LineNr"> 9531 </span> 89/<- %esp 5/r32/ebp -<span id="L9532" class="LineNr"> 9532 </span> 5d/pop-to-ebp -<span id="L9533" class="LineNr"> 9533 </span> c3/return -<span id="L9534" class="LineNr"> 9534 </span> -<span id="L9535" class="LineNr"> 9535 </span><span class="subxTest">test-increment-var</span>: -<span id="L9536" class="LineNr"> 9536 </span> <span class="subxComment"># Select the right primitive between overloads.</span> -<span id="L9537" class="LineNr"> 9537 </span> <span class="subxComment"># foo <- increment</span> -<span id="L9538" class="LineNr"> 9538 </span> <span class="subxComment"># =></span> -<span id="L9539" class="LineNr"> 9539 </span> <span class="subxComment"># ff 0/subop/increment %eax # sub-optimal, but should suffice</span> -<span id="L9540" class="LineNr"> 9540 </span> <span class="subxComment">#</span> -<span id="L9541" class="LineNr"> 9541 </span> <span class="subxComment"># There's a variable on the var stack as follows:</span> -<span id="L9542" class="LineNr"> 9542 </span> <span class="subxComment"># name: 'foo'</span> -<span id="L9543" class="LineNr"> 9543 </span> <span class="subxComment"># type: int</span> -<span id="L9544" class="LineNr"> 9544 </span> <span class="subxComment"># register: 'eax'</span> -<span id="L9545" class="LineNr"> 9545 </span> <span class="subxComment">#</span> -<span id="L9546" class="LineNr"> 9546 </span> <span class="subxComment"># Primitives are the global definitions.</span> -<span id="L9547" class="LineNr"> 9547 </span> <span class="subxComment">#</span> -<span id="L9548" class="LineNr"> 9548 </span> <span class="subxComment"># There are no functions defined.</span> -<span id="L9549" class="LineNr"> 9549 </span> <span class="subxComment">#</span> -<span id="L9550" class="LineNr"> 9550 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L9551" class="LineNr"> 9551 </span> 55/push-ebp -<span id="L9552" class="LineNr"> 9552 </span> 89/<- %ebp 4/r32/esp -<span id="L9553" class="LineNr"> 9553 </span> <span class="subxComment"># setup</span> -<span id="L9554" class="LineNr"> 9554 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) -<span id="L9555" class="LineNr"> 9555 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) -<span id="L9556" class="LineNr"> 9556 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> -<span id="L9557" class="LineNr"> 9557 </span> 68/push 0/imm32/right/null -<span id="L9558" class="LineNr"> 9558 </span> 68/push 1/imm32/left/int -<span id="L9559" class="LineNr"> 9559 </span> 89/<- %ecx 4/r32/esp -<span id="L9560" class="LineNr"> 9560 </span> <span class="subxComment"># var var-foo/ecx: var in eax</span> -<span id="L9561" class="LineNr"> 9561 </span> 68/push <span class="Constant">"eax"</span>/imm32/register -<span id="L9562" class="LineNr"> 9562 </span> 68/push 0/imm32/no-stack-offset -<span id="L9563" class="LineNr"> 9563 </span> 68/push 1/imm32/block-depth -<span id="L9564" class="LineNr"> 9564 </span> 51/push-ecx -<span id="L9565" class="LineNr"> 9565 </span> 68/push <span class="Constant">"foo"</span>/imm32 -<span id="L9566" class="LineNr"> 9566 </span> 89/<- %ecx 4/r32/esp -<span id="L9567" class="LineNr"> 9567 </span> <span class="subxComment"># var inouts/edi: (handle stmt-var)</span> -<span id="L9568" class="LineNr"> 9568 </span> 68/push 0/imm32/is-deref:false -<span id="L9569" class="LineNr"> 9569 </span> 68/push 0/imm32/next -<span id="L9570" class="LineNr"> 9570 </span> 51/push-ecx/var-foo -<span id="L9571" class="LineNr"> 9571 </span> 89/<- %edi 4/r32/esp -<span id="L9572" class="LineNr"> 9572 </span> <span class="subxComment"># var stmt/esi: statement</span> -<span id="L9573" class="LineNr"> 9573 </span> 68/push 0/imm32/next -<span id="L9574" class="LineNr"> 9574 </span> 57/push-edi/outputs -<span id="L9575" class="LineNr"> 9575 </span> 68/push 0/imm32/inouts -<span id="L9576" class="LineNr"> 9576 </span> 68/push <span class="Constant">"increment"</span>/imm32/operation -<span id="L9577" class="LineNr"> 9577 </span> 68/push 1/imm32 -<span id="L9578" class="LineNr"> 9578 </span> 89/<- %esi 4/r32/esp -<span id="L9579" class="LineNr"> 9579 </span> <span class="subxComment"># convert</span> -<span id="L9580" class="LineNr"> 9580 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 -<span id="L9581" class="LineNr"> 9581 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6983'>Primitives</a></span> 0) -<span id="L9582" class="LineNr"> 9582 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) -<span id="L9583" class="Folded"> 9583 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L9589" class="LineNr"> 9589 </span> <span class="subxComment"># check output</span> -<span id="L9590" class="LineNr"> 9590 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"40/increment-eax"</span> <span class="Constant">"F - test-increment-var"</span>) -<span id="L9591" class="LineNr"> 9591 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L9592" class="LineNr"> 9592 </span> 89/<- %esp 5/r32/ebp -<span id="L9593" class="LineNr"> 9593 </span> 5d/pop-to-ebp -<span id="L9594" class="LineNr"> 9594 </span> c3/return -<span id="L9595" class="LineNr"> 9595 </span> -<span id="L9596" class="LineNr"> 9596 </span><span class="subxTest">test-add-reg-to-reg</span>: -<span id="L9597" class="LineNr"> 9597 </span> <span class="subxComment"># var1/reg <- add var2/reg</span> -<span id="L9598" class="LineNr"> 9598 </span> <span class="subxComment"># =></span> -<span id="L9599" class="LineNr"> 9599 </span> <span class="subxComment"># 01/add %var1 var2</span> -<span id="L9600" class="LineNr"> 9600 </span> <span class="subxComment">#</span> -<span id="L9601" class="LineNr"> 9601 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L9602" class="LineNr"> 9602 </span> 55/push-ebp -<span id="L9603" class="LineNr"> 9603 </span> 89/<- %ebp 4/r32/esp -<span id="L9604" class="LineNr"> 9604 </span> <span class="subxComment"># setup</span> -<span id="L9605" class="LineNr"> 9605 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) -<span id="L9606" class="LineNr"> 9606 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) -<span id="L9607" class="LineNr"> 9607 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> -<span id="L9608" class="LineNr"> 9608 </span> 68/push 0/imm32/right/null -<span id="L9609" class="LineNr"> 9609 </span> 68/push 1/imm32/left/int -<span id="L9610" class="LineNr"> 9610 </span> 89/<- %ecx 4/r32/esp -<span id="L9611" class="LineNr"> 9611 </span> <span class="subxComment"># var var-var1/ecx: var in eax</span> -<span id="L9612" class="LineNr"> 9612 </span> 68/push <span class="Constant">"eax"</span>/imm32/register -<span id="L9613" class="LineNr"> 9613 </span> 68/push 0/imm32/no-stack-offset -<span id="L9614" class="LineNr"> 9614 </span> 68/push 1/imm32/block-depth -<span id="L9615" class="LineNr"> 9615 </span> 51/push-ecx -<span id="L9616" class="LineNr"> 9616 </span> 68/push <span class="Constant">"var1"</span>/imm32 -<span id="L9617" class="LineNr"> 9617 </span> 89/<- %ecx 4/r32/esp -<span id="L9618" class="LineNr"> 9618 </span> <span class="subxComment"># var var-var2/edx: var in ecx</span> -<span id="L9619" class="LineNr"> 9619 </span> 68/push <span class="Constant">"ecx"</span>/imm32/register -<span id="L9620" class="LineNr"> 9620 </span> 68/push 0/imm32/no-stack-offset -<span id="L9621" class="LineNr"> 9621 </span> 68/push 1/imm32/block-depth -<span id="L9622" class="LineNr"> 9622 </span> ff 6/subop/push *(ecx+4) <span class="subxComment"># Var-type</span> -<span id="L9623" class="LineNr"> 9623 </span> 68/push <span class="Constant">"var2"</span>/imm32 -<span id="L9624" class="LineNr"> 9624 </span> 89/<- %edx 4/r32/esp -<span id="L9625" class="LineNr"> 9625 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var) = [var2]</span> -<span id="L9626" class="LineNr"> 9626 </span> 68/push 0/imm32/is-deref:false -<span id="L9627" class="LineNr"> 9627 </span> 68/push 0/imm32/next -<span id="L9628" class="LineNr"> 9628 </span> 52/push-edx/var-var2 +<span id="L9445" class="LineNr"> 9445 </span> <span class="subxComment"># convert</span> +<span id="L9446" class="LineNr"> 9446 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 +<span id="L9447" class="LineNr"> 9447 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi %ebx 0) +<span id="L9448" class="LineNr"> 9448 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) +<span id="L9449" class="Folded"> 9449 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> +<span id="L9455" class="LineNr"> 9455 </span> <span class="subxComment"># check output</span> +<span id="L9456" class="LineNr"> 9456 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"ff 0/subop/increment %eax"</span> <span class="Constant">"F - test-emit-subx-stmt-select-primitive-2"</span>) +<span id="L9457" class="LineNr"> 9457 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L9458" class="LineNr"> 9458 </span> 89/<- %esp 5/r32/ebp +<span id="L9459" class="LineNr"> 9459 </span> 5d/pop-to-ebp +<span id="L9460" class="LineNr"> 9460 </span> c3/return +<span id="L9461" class="LineNr"> 9461 </span> +<span id="L9462" class="LineNr"> 9462 </span><span class="subxTest">test-increment-register</span>: +<span id="L9463" class="LineNr"> 9463 </span> <span class="subxComment"># Select the right register between overloads.</span> +<span id="L9464" class="LineNr"> 9464 </span> <span class="subxComment"># foo <- increment</span> +<span id="L9465" class="LineNr"> 9465 </span> <span class="subxComment"># =></span> +<span id="L9466" class="LineNr"> 9466 </span> <span class="subxComment"># 50/increment-eax</span> +<span id="L9467" class="LineNr"> 9467 </span> <span class="subxComment">#</span> +<span id="L9468" class="LineNr"> 9468 </span> <span class="subxComment"># There's a variable on the var stack as follows:</span> +<span id="L9469" class="LineNr"> 9469 </span> <span class="subxComment"># name: 'foo'</span> +<span id="L9470" class="LineNr"> 9470 </span> <span class="subxComment"># type: int</span> +<span id="L9471" class="LineNr"> 9471 </span> <span class="subxComment"># register: 'eax'</span> +<span id="L9472" class="LineNr"> 9472 </span> <span class="subxComment">#</span> +<span id="L9473" class="LineNr"> 9473 </span> <span class="subxComment"># Primitives are the global definitions.</span> +<span id="L9474" class="LineNr"> 9474 </span> <span class="subxComment">#</span> +<span id="L9475" class="LineNr"> 9475 </span> <span class="subxComment"># There are no functions defined.</span> +<span id="L9476" class="LineNr"> 9476 </span> <span class="subxComment">#</span> +<span id="L9477" class="LineNr"> 9477 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L9478" class="LineNr"> 9478 </span> 55/push-ebp +<span id="L9479" class="LineNr"> 9479 </span> 89/<- %ebp 4/r32/esp +<span id="L9480" class="LineNr"> 9480 </span> <span class="subxComment"># setup</span> +<span id="L9481" class="LineNr"> 9481 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) +<span id="L9482" class="LineNr"> 9482 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) +<span id="L9483" class="LineNr"> 9483 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> +<span id="L9484" class="LineNr"> 9484 </span> 68/push 0/imm32/right/null +<span id="L9485" class="LineNr"> 9485 </span> 68/push 1/imm32/left/int +<span id="L9486" class="LineNr"> 9486 </span> 89/<- %ecx 4/r32/esp +<span id="L9487" class="LineNr"> 9487 </span> <span class="subxComment"># var var-foo/ecx: var in eax</span> +<span id="L9488" class="LineNr"> 9488 </span> 68/push <span class="Constant">"eax"</span>/imm32/register +<span id="L9489" class="LineNr"> 9489 </span> 68/push 0/imm32/no-stack-offset +<span id="L9490" class="LineNr"> 9490 </span> 68/push 1/imm32/block-depth +<span id="L9491" class="LineNr"> 9491 </span> 51/push-ecx +<span id="L9492" class="LineNr"> 9492 </span> 68/push <span class="Constant">"foo"</span>/imm32 +<span id="L9493" class="LineNr"> 9493 </span> 89/<- %ecx 4/r32/esp +<span id="L9494" class="LineNr"> 9494 </span> <span class="subxComment"># var real-outputs/edi: (handle stmt-var)</span> +<span id="L9495" class="LineNr"> 9495 </span> 68/push 0/imm32/is-deref:false +<span id="L9496" class="LineNr"> 9496 </span> 68/push 0/imm32/next +<span id="L9497" class="LineNr"> 9497 </span> 51/push-ecx/var-foo +<span id="L9498" class="LineNr"> 9498 </span> 89/<- %edi 4/r32/esp +<span id="L9499" class="LineNr"> 9499 </span> <span class="subxComment"># var stmt/esi: statement</span> +<span id="L9500" class="LineNr"> 9500 </span> 68/push 0/imm32/next +<span id="L9501" class="LineNr"> 9501 </span> 57/push-edi/outputs +<span id="L9502" class="LineNr"> 9502 </span> 68/push 0/imm32/inouts +<span id="L9503" class="LineNr"> 9503 </span> 68/push <span class="Constant">"increment"</span>/imm32/operation +<span id="L9504" class="LineNr"> 9504 </span> 68/push 1/imm32/regular-stmt +<span id="L9505" class="LineNr"> 9505 </span> 89/<- %esi 4/r32/esp +<span id="L9506" class="LineNr"> 9506 </span> <span class="subxComment"># convert</span> +<span id="L9507" class="LineNr"> 9507 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 +<span id="L9508" class="LineNr"> 9508 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6979'>Primitives</a></span> 0) +<span id="L9509" class="LineNr"> 9509 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) +<span id="L9510" class="Folded"> 9510 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> +<span id="L9516" class="LineNr"> 9516 </span> <span class="subxComment"># check output</span> +<span id="L9517" class="LineNr"> 9517 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"40/increment-eax"</span> <span class="Constant">"F - test-increment-register"</span>) +<span id="L9518" class="LineNr"> 9518 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L9519" class="LineNr"> 9519 </span> 89/<- %esp 5/r32/ebp +<span id="L9520" class="LineNr"> 9520 </span> 5d/pop-to-ebp +<span id="L9521" class="LineNr"> 9521 </span> c3/return +<span id="L9522" class="LineNr"> 9522 </span> +<span id="L9523" class="LineNr"> 9523 </span><span class="subxTest">test-increment-var</span>: +<span id="L9524" class="LineNr"> 9524 </span> <span class="subxComment"># Select the right primitive between overloads.</span> +<span id="L9525" class="LineNr"> 9525 </span> <span class="subxComment"># foo <- increment</span> +<span id="L9526" class="LineNr"> 9526 </span> <span class="subxComment"># =></span> +<span id="L9527" class="LineNr"> 9527 </span> <span class="subxComment"># ff 0/subop/increment %eax # sub-optimal, but should suffice</span> +<span id="L9528" class="LineNr"> 9528 </span> <span class="subxComment">#</span> +<span id="L9529" class="LineNr"> 9529 </span> <span class="subxComment"># There's a variable on the var stack as follows:</span> +<span id="L9530" class="LineNr"> 9530 </span> <span class="subxComment"># name: 'foo'</span> +<span id="L9531" class="LineNr"> 9531 </span> <span class="subxComment"># type: int</span> +<span id="L9532" class="LineNr"> 9532 </span> <span class="subxComment"># register: 'eax'</span> +<span id="L9533" class="LineNr"> 9533 </span> <span class="subxComment">#</span> +<span id="L9534" class="LineNr"> 9534 </span> <span class="subxComment"># Primitives are the global definitions.</span> +<span id="L9535" class="LineNr"> 9535 </span> <span class="subxComment">#</span> +<span id="L9536" class="LineNr"> 9536 </span> <span class="subxComment"># There are no functions defined.</span> +<span id="L9537" class="LineNr"> 9537 </span> <span class="subxComment">#</span> +<span id="L9538" class="LineNr"> 9538 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L9539" class="LineNr"> 9539 </span> 55/push-ebp +<span id="L9540" class="LineNr"> 9540 </span> 89/<- %ebp 4/r32/esp +<span id="L9541" class="LineNr"> 9541 </span> <span class="subxComment"># setup</span> +<span id="L9542" class="LineNr"> 9542 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) +<span id="L9543" class="LineNr"> 9543 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) +<span id="L9544" class="LineNr"> 9544 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> +<span id="L9545" class="LineNr"> 9545 </span> 68/push 0/imm32/right/null +<span id="L9546" class="LineNr"> 9546 </span> 68/push 1/imm32/left/int +<span id="L9547" class="LineNr"> 9547 </span> 89/<- %ecx 4/r32/esp +<span id="L9548" class="LineNr"> 9548 </span> <span class="subxComment"># var var-foo/ecx: var in eax</span> +<span id="L9549" class="LineNr"> 9549 </span> 68/push <span class="Constant">"eax"</span>/imm32/register +<span id="L9550" class="LineNr"> 9550 </span> 68/push 0/imm32/no-stack-offset +<span id="L9551" class="LineNr"> 9551 </span> 68/push 1/imm32/block-depth +<span id="L9552" class="LineNr"> 9552 </span> 51/push-ecx +<span id="L9553" class="LineNr"> 9553 </span> 68/push <span class="Constant">"foo"</span>/imm32 +<span id="L9554" class="LineNr"> 9554 </span> 89/<- %ecx 4/r32/esp +<span id="L9555" class="LineNr"> 9555 </span> <span class="subxComment"># var inouts/edi: (handle stmt-var)</span> +<span id="L9556" class="LineNr"> 9556 </span> 68/push 0/imm32/is-deref:false +<span id="L9557" class="LineNr"> 9557 </span> 68/push 0/imm32/next +<span id="L9558" class="LineNr"> 9558 </span> 51/push-ecx/var-foo +<span id="L9559" class="LineNr"> 9559 </span> 89/<- %edi 4/r32/esp +<span id="L9560" class="LineNr"> 9560 </span> <span class="subxComment"># var stmt/esi: statement</span> +<span id="L9561" class="LineNr"> 9561 </span> 68/push 0/imm32/next +<span id="L9562" class="LineNr"> 9562 </span> 57/push-edi/outputs +<span id="L9563" class="LineNr"> 9563 </span> 68/push 0/imm32/inouts +<span id="L9564" class="LineNr"> 9564 </span> 68/push <span class="Constant">"increment"</span>/imm32/operation +<span id="L9565" class="LineNr"> 9565 </span> 68/push 1/imm32 +<span id="L9566" class="LineNr"> 9566 </span> 89/<- %esi 4/r32/esp +<span id="L9567" class="LineNr"> 9567 </span> <span class="subxComment"># convert</span> +<span id="L9568" class="LineNr"> 9568 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 +<span id="L9569" class="LineNr"> 9569 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6979'>Primitives</a></span> 0) +<span id="L9570" class="LineNr"> 9570 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) +<span id="L9571" class="Folded"> 9571 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> +<span id="L9577" class="LineNr"> 9577 </span> <span class="subxComment"># check output</span> +<span id="L9578" class="LineNr"> 9578 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"40/increment-eax"</span> <span class="Constant">"F - test-increment-var"</span>) +<span id="L9579" class="LineNr"> 9579 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L9580" class="LineNr"> 9580 </span> 89/<- %esp 5/r32/ebp +<span id="L9581" class="LineNr"> 9581 </span> 5d/pop-to-ebp +<span id="L9582" class="LineNr"> 9582 </span> c3/return +<span id="L9583" class="LineNr"> 9583 </span> +<span id="L9584" class="LineNr"> 9584 </span><span class="subxTest">test-add-reg-to-reg</span>: +<span id="L9585" class="LineNr"> 9585 </span> <span class="subxComment"># var1/reg <- add var2/reg</span> +<span id="L9586" class="LineNr"> 9586 </span> <span class="subxComment"># =></span> +<span id="L9587" class="LineNr"> 9587 </span> <span class="subxComment"># 01/add %var1 var2</span> +<span id="L9588" class="LineNr"> 9588 </span> <span class="subxComment">#</span> +<span id="L9589" class="LineNr"> 9589 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L9590" class="LineNr"> 9590 </span> 55/push-ebp +<span id="L9591" class="LineNr"> 9591 </span> 89/<- %ebp 4/r32/esp +<span id="L9592" class="LineNr"> 9592 </span> <span class="subxComment"># setup</span> +<span id="L9593" class="LineNr"> 9593 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) +<span id="L9594" class="LineNr"> 9594 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) +<span id="L9595" class="LineNr"> 9595 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> +<span id="L9596" class="LineNr"> 9596 </span> 68/push 0/imm32/right/null +<span id="L9597" class="LineNr"> 9597 </span> 68/push 1/imm32/left/int +<span id="L9598" class="LineNr"> 9598 </span> 89/<- %ecx 4/r32/esp +<span id="L9599" class="LineNr"> 9599 </span> <span class="subxComment"># var var-var1/ecx: var in eax</span> +<span id="L9600" class="LineNr"> 9600 </span> 68/push <span class="Constant">"eax"</span>/imm32/register +<span id="L9601" class="LineNr"> 9601 </span> 68/push 0/imm32/no-stack-offset +<span id="L9602" class="LineNr"> 9602 </span> 68/push 1/imm32/block-depth +<span id="L9603" class="LineNr"> 9603 </span> 51/push-ecx +<span id="L9604" class="LineNr"> 9604 </span> 68/push <span class="Constant">"var1"</span>/imm32 +<span id="L9605" class="LineNr"> 9605 </span> 89/<- %ecx 4/r32/esp +<span id="L9606" class="LineNr"> 9606 </span> <span class="subxComment"># var var-var2/edx: var in ecx</span> +<span id="L9607" class="LineNr"> 9607 </span> 68/push <span class="Constant">"ecx"</span>/imm32/register +<span id="L9608" class="LineNr"> 9608 </span> 68/push 0/imm32/no-stack-offset +<span id="L9609" class="LineNr"> 9609 </span> 68/push 1/imm32/block-depth +<span id="L9610" class="LineNr"> 9610 </span> ff 6/subop/push *(ecx+4) <span class="subxComment"># Var-type</span> +<span id="L9611" class="LineNr"> 9611 </span> 68/push <span class="Constant">"var2"</span>/imm32 +<span id="L9612" class="LineNr"> 9612 </span> 89/<- %edx 4/r32/esp +<span id="L9613" class="LineNr"> 9613 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var) = [var2]</span> +<span id="L9614" class="LineNr"> 9614 </span> 68/push 0/imm32/is-deref:false +<span id="L9615" class="LineNr"> 9615 </span> 68/push 0/imm32/next +<span id="L9616" class="LineNr"> 9616 </span> 52/push-edx/var-var2 +<span id="L9617" class="LineNr"> 9617 </span> 89/<- %esi 4/r32/esp +<span id="L9618" class="LineNr"> 9618 </span> <span class="subxComment"># var outputs/edi: (handle stmt-var) = [var1, var2]</span> +<span id="L9619" class="LineNr"> 9619 </span> 68/push 0/imm32/is-deref:false +<span id="L9620" class="LineNr"> 9620 </span> 68/push 0/imm32/next +<span id="L9621" class="LineNr"> 9621 </span> 51/push-ecx/var-var1 +<span id="L9622" class="LineNr"> 9622 </span> 89/<- %edi 4/r32/esp +<span id="L9623" class="LineNr"> 9623 </span> <span class="subxComment"># var stmt/esi: statement</span> +<span id="L9624" class="LineNr"> 9624 </span> 68/push 0/imm32/next +<span id="L9625" class="LineNr"> 9625 </span> 57/push-edi/outputs +<span id="L9626" class="LineNr"> 9626 </span> 56/push-esi/inouts +<span id="L9627" class="LineNr"> 9627 </span> 68/push <span class="Constant">"add"</span>/imm32/operation +<span id="L9628" class="LineNr"> 9628 </span> 68/push 1/imm32 <span id="L9629" class="LineNr"> 9629 </span> 89/<- %esi 4/r32/esp -<span id="L9630" class="LineNr"> 9630 </span> <span class="subxComment"># var outputs/edi: (handle stmt-var) = [var1, var2]</span> -<span id="L9631" class="LineNr"> 9631 </span> 68/push 0/imm32/is-deref:false -<span id="L9632" class="LineNr"> 9632 </span> 68/push 0/imm32/next -<span id="L9633" class="LineNr"> 9633 </span> 51/push-ecx/var-var1 -<span id="L9634" class="LineNr"> 9634 </span> 89/<- %edi 4/r32/esp -<span id="L9635" class="LineNr"> 9635 </span> <span class="subxComment"># var stmt/esi: statement</span> -<span id="L9636" class="LineNr"> 9636 </span> 68/push 0/imm32/next -<span id="L9637" class="LineNr"> 9637 </span> 57/push-edi/outputs -<span id="L9638" class="LineNr"> 9638 </span> 56/push-esi/inouts -<span id="L9639" class="LineNr"> 9639 </span> 68/push <span class="Constant">"add"</span>/imm32/operation -<span id="L9640" class="LineNr"> 9640 </span> 68/push 1/imm32 -<span id="L9641" class="LineNr"> 9641 </span> 89/<- %esi 4/r32/esp -<span id="L9642" class="LineNr"> 9642 </span> <span class="subxComment"># convert</span> -<span id="L9643" class="LineNr"> 9643 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 -<span id="L9644" class="LineNr"> 9644 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6983'>Primitives</a></span> 0) -<span id="L9645" class="LineNr"> 9645 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) -<span id="L9646" class="Folded"> 9646 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L9652" class="LineNr"> 9652 </span> <span class="subxComment"># check output</span> -<span id="L9653" class="LineNr"> 9653 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"01/add-to %eax 0x00000001/r32"</span> <span class="Constant">"F - test-add-reg-to-reg"</span>) -<span id="L9654" class="LineNr"> 9654 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L9655" class="LineNr"> 9655 </span> 89/<- %esp 5/r32/ebp -<span id="L9656" class="LineNr"> 9656 </span> 5d/pop-to-ebp -<span id="L9657" class="LineNr"> 9657 </span> c3/return -<span id="L9658" class="LineNr"> 9658 </span> -<span id="L9659" class="LineNr"> 9659 </span><span class="subxTest">test-add-reg-to-mem</span>: -<span id="L9660" class="LineNr"> 9660 </span> <span class="subxComment"># add-to var1 var2/reg</span> -<span id="L9661" class="LineNr"> 9661 </span> <span class="subxComment"># =></span> -<span id="L9662" class="LineNr"> 9662 </span> <span class="subxComment"># 01/add *(ebp+__) var2</span> -<span id="L9663" class="LineNr"> 9663 </span> <span class="subxComment">#</span> -<span id="L9664" class="LineNr"> 9664 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L9665" class="LineNr"> 9665 </span> 55/push-ebp -<span id="L9666" class="LineNr"> 9666 </span> 89/<- %ebp 4/r32/esp -<span id="L9667" class="LineNr"> 9667 </span> <span class="subxComment"># setup</span> -<span id="L9668" class="LineNr"> 9668 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) -<span id="L9669" class="LineNr"> 9669 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) -<span id="L9670" class="LineNr"> 9670 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> -<span id="L9671" class="LineNr"> 9671 </span> 68/push 0/imm32/right/null -<span id="L9672" class="LineNr"> 9672 </span> 68/push 1/imm32/left/int -<span id="L9673" class="LineNr"> 9673 </span> 89/<- %ecx 4/r32/esp -<span id="L9674" class="LineNr"> 9674 </span> <span class="subxComment"># var var-var1/ecx: var</span> -<span id="L9675" class="LineNr"> 9675 </span> 68/push 0/imm32/no-register -<span id="L9676" class="LineNr"> 9676 </span> 68/push 8/imm32/stack-offset -<span id="L9677" class="LineNr"> 9677 </span> 68/push 1/imm32/block-depth -<span id="L9678" class="LineNr"> 9678 </span> 51/push-ecx -<span id="L9679" class="LineNr"> 9679 </span> 68/push <span class="Constant">"var1"</span>/imm32 -<span id="L9680" class="LineNr"> 9680 </span> 89/<- %ecx 4/r32/esp -<span id="L9681" class="LineNr"> 9681 </span> <span class="subxComment"># var var-var2/edx: var in ecx</span> -<span id="L9682" class="LineNr"> 9682 </span> 68/push <span class="Constant">"ecx"</span>/imm32/register -<span id="L9683" class="LineNr"> 9683 </span> 68/push 0/imm32/no-stack-offset -<span id="L9684" class="LineNr"> 9684 </span> 68/push 1/imm32/block-depth -<span id="L9685" class="LineNr"> 9685 </span> ff 6/subop/push *(ecx+4) <span class="subxComment"># Var-type</span> -<span id="L9686" class="LineNr"> 9686 </span> 68/push <span class="Constant">"var2"</span>/imm32 -<span id="L9687" class="LineNr"> 9687 </span> 89/<- %edx 4/r32/esp -<span id="L9688" class="LineNr"> 9688 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var) = [var2]</span> -<span id="L9689" class="LineNr"> 9689 </span> 68/push 0/imm32/is-deref:false -<span id="L9690" class="LineNr"> 9690 </span> 68/push 0/imm32/next -<span id="L9691" class="LineNr"> 9691 </span> 52/push-edx/var-var2 -<span id="L9692" class="LineNr"> 9692 </span> 89/<- %esi 4/r32/esp -<span id="L9693" class="LineNr"> 9693 </span> <span class="subxComment"># var inouts = (handle stmt-var) = [var1, var2]</span> -<span id="L9694" class="LineNr"> 9694 </span> 56/push-esi/next -<span id="L9695" class="LineNr"> 9695 </span> 51/push-ecx/var-var1 -<span id="L9696" class="LineNr"> 9696 </span> 89/<- %esi 4/r32/esp -<span id="L9697" class="LineNr"> 9697 </span> <span class="subxComment"># var stmt/esi: statement</span> -<span id="L9698" class="LineNr"> 9698 </span> 68/push 0/imm32/next -<span id="L9699" class="LineNr"> 9699 </span> 68/push 0/imm32/outputs -<span id="L9700" class="LineNr"> 9700 </span> 56/push-esi/inouts -<span id="L9701" class="LineNr"> 9701 </span> 68/push <span class="Constant">"add-to"</span>/imm32/operation -<span id="L9702" class="LineNr"> 9702 </span> 68/push 1/imm32 -<span id="L9703" class="LineNr"> 9703 </span> 89/<- %esi 4/r32/esp -<span id="L9704" class="LineNr"> 9704 </span> <span class="subxComment"># convert</span> -<span id="L9705" class="LineNr"> 9705 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 -<span id="L9706" class="LineNr"> 9706 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6983'>Primitives</a></span> 0) -<span id="L9707" class="LineNr"> 9707 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) -<span id="L9708" class="Folded"> 9708 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L9714" class="LineNr"> 9714 </span> <span class="subxComment"># check output</span> -<span id="L9715" class="LineNr"> 9715 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"01/add-to *(ebp+0x00000008) 0x00000001/r32"</span> <span class="Constant">"F - test-add-reg-to-mem"</span>) -<span id="L9716" class="LineNr"> 9716 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L9717" class="LineNr"> 9717 </span> 89/<- %esp 5/r32/ebp -<span id="L9718" class="LineNr"> 9718 </span> 5d/pop-to-ebp -<span id="L9719" class="LineNr"> 9719 </span> c3/return -<span id="L9720" class="LineNr"> 9720 </span> -<span id="L9721" class="LineNr"> 9721 </span><span class="subxTest">test-add-mem-to-reg</span>: -<span id="L9722" class="LineNr"> 9722 </span> <span class="subxComment"># var1/reg <- add var2</span> -<span id="L9723" class="LineNr"> 9723 </span> <span class="subxComment"># =></span> -<span id="L9724" class="LineNr"> 9724 </span> <span class="subxComment"># 03/add *(ebp+__) var1</span> -<span id="L9725" class="LineNr"> 9725 </span> <span class="subxComment">#</span> -<span id="L9726" class="LineNr"> 9726 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L9727" class="LineNr"> 9727 </span> 55/push-ebp -<span id="L9728" class="LineNr"> 9728 </span> 89/<- %ebp 4/r32/esp -<span id="L9729" class="LineNr"> 9729 </span> <span class="subxComment"># setup</span> -<span id="L9730" class="LineNr"> 9730 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) -<span id="L9731" class="LineNr"> 9731 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) -<span id="L9732" class="LineNr"> 9732 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> -<span id="L9733" class="LineNr"> 9733 </span> 68/push 0/imm32/right/null -<span id="L9734" class="LineNr"> 9734 </span> 68/push 1/imm32/left/int -<span id="L9735" class="LineNr"> 9735 </span> 89/<- %ecx 4/r32/esp -<span id="L9736" class="LineNr"> 9736 </span> <span class="subxComment"># var var-var1/ecx: var in eax</span> -<span id="L9737" class="LineNr"> 9737 </span> 68/push <span class="Constant">"eax"</span>/imm32/register -<span id="L9738" class="LineNr"> 9738 </span> 68/push 0/imm32/no-stack-offset -<span id="L9739" class="LineNr"> 9739 </span> 68/push 1/imm32/block-depth -<span id="L9740" class="LineNr"> 9740 </span> 51/push-ecx -<span id="L9741" class="LineNr"> 9741 </span> 68/push <span class="Constant">"var1"</span>/imm32 -<span id="L9742" class="LineNr"> 9742 </span> 89/<- %ecx 4/r32/esp -<span id="L9743" class="LineNr"> 9743 </span> <span class="subxComment"># var var-var2/edx: var</span> -<span id="L9744" class="LineNr"> 9744 </span> 68/push 0/imm32/no-register -<span id="L9745" class="LineNr"> 9745 </span> 68/push 8/imm32/stack-offset -<span id="L9746" class="LineNr"> 9746 </span> 68/push 1/imm32/block-depth -<span id="L9747" class="LineNr"> 9747 </span> ff 6/subop/push *(ecx+4) <span class="subxComment"># Var-type</span> -<span id="L9748" class="LineNr"> 9748 </span> 68/push <span class="Constant">"var2"</span>/imm32 -<span id="L9749" class="LineNr"> 9749 </span> 89/<- %edx 4/r32/esp -<span id="L9750" class="LineNr"> 9750 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var) = [var2]</span> -<span id="L9751" class="LineNr"> 9751 </span> 68/push 0/imm32/is-deref:false -<span id="L9752" class="LineNr"> 9752 </span> 68/push 0/imm32/next -<span id="L9753" class="LineNr"> 9753 </span> 52/push-edx/var-var2 +<span id="L9630" class="LineNr"> 9630 </span> <span class="subxComment"># convert</span> +<span id="L9631" class="LineNr"> 9631 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 +<span id="L9632" class="LineNr"> 9632 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6979'>Primitives</a></span> 0) +<span id="L9633" class="LineNr"> 9633 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) +<span id="L9634" class="Folded"> 9634 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> +<span id="L9640" class="LineNr"> 9640 </span> <span class="subxComment"># check output</span> +<span id="L9641" class="LineNr"> 9641 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"01/add-to %eax 0x00000001/r32"</span> <span class="Constant">"F - test-add-reg-to-reg"</span>) +<span id="L9642" class="LineNr"> 9642 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L9643" class="LineNr"> 9643 </span> 89/<- %esp 5/r32/ebp +<span id="L9644" class="LineNr"> 9644 </span> 5d/pop-to-ebp +<span id="L9645" class="LineNr"> 9645 </span> c3/return +<span id="L9646" class="LineNr"> 9646 </span> +<span id="L9647" class="LineNr"> 9647 </span><span class="subxTest">test-add-reg-to-mem</span>: +<span id="L9648" class="LineNr"> 9648 </span> <span class="subxComment"># add-to var1 var2/reg</span> +<span id="L9649" class="LineNr"> 9649 </span> <span class="subxComment"># =></span> +<span id="L9650" class="LineNr"> 9650 </span> <span class="subxComment"># 01/add *(ebp+__) var2</span> +<span id="L9651" class="LineNr"> 9651 </span> <span class="subxComment">#</span> +<span id="L9652" class="LineNr"> 9652 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L9653" class="LineNr"> 9653 </span> 55/push-ebp +<span id="L9654" class="LineNr"> 9654 </span> 89/<- %ebp 4/r32/esp +<span id="L9655" class="LineNr"> 9655 </span> <span class="subxComment"># setup</span> +<span id="L9656" class="LineNr"> 9656 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) +<span id="L9657" class="LineNr"> 9657 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) +<span id="L9658" class="LineNr"> 9658 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> +<span id="L9659" class="LineNr"> 9659 </span> 68/push 0/imm32/right/null +<span id="L9660" class="LineNr"> 9660 </span> 68/push 1/imm32/left/int +<span id="L9661" class="LineNr"> 9661 </span> 89/<- %ecx 4/r32/esp +<span id="L9662" class="LineNr"> 9662 </span> <span class="subxComment"># var var-var1/ecx: var</span> +<span id="L9663" class="LineNr"> 9663 </span> 68/push 0/imm32/no-register +<span id="L9664" class="LineNr"> 9664 </span> 68/push 8/imm32/stack-offset +<span id="L9665" class="LineNr"> 9665 </span> 68/push 1/imm32/block-depth +<span id="L9666" class="LineNr"> 9666 </span> 51/push-ecx +<span id="L9667" class="LineNr"> 9667 </span> 68/push <span class="Constant">"var1"</span>/imm32 +<span id="L9668" class="LineNr"> 9668 </span> 89/<- %ecx 4/r32/esp +<span id="L9669" class="LineNr"> 9669 </span> <span class="subxComment"># var var-var2/edx: var in ecx</span> +<span id="L9670" class="LineNr"> 9670 </span> 68/push <span class="Constant">"ecx"</span>/imm32/register +<span id="L9671" class="LineNr"> 9671 </span> 68/push 0/imm32/no-stack-offset +<span id="L9672" class="LineNr"> 9672 </span> 68/push 1/imm32/block-depth +<span id="L9673" class="LineNr"> 9673 </span> ff 6/subop/push *(ecx+4) <span class="subxComment"># Var-type</span> +<span id="L9674" class="LineNr"> 9674 </span> 68/push <span class="Constant">"var2"</span>/imm32 +<span id="L9675" class="LineNr"> 9675 </span> 89/<- %edx 4/r32/esp +<span id="L9676" class="LineNr"> 9676 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var) = [var2]</span> +<span id="L9677" class="LineNr"> 9677 </span> 68/push 0/imm32/is-deref:false +<span id="L9678" class="LineNr"> 9678 </span> 68/push 0/imm32/next +<span id="L9679" class="LineNr"> 9679 </span> 52/push-edx/var-var2 +<span id="L9680" class="LineNr"> 9680 </span> 89/<- %esi 4/r32/esp +<span id="L9681" class="LineNr"> 9681 </span> <span class="subxComment"># var inouts = (handle stmt-var) = [var1, var2]</span> +<span id="L9682" class="LineNr"> 9682 </span> 56/push-esi/next +<span id="L9683" class="LineNr"> 9683 </span> 51/push-ecx/var-var1 +<span id="L9684" class="LineNr"> 9684 </span> 89/<- %esi 4/r32/esp +<span id="L9685" class="LineNr"> 9685 </span> <span class="subxComment"># var stmt/esi: statement</span> +<span id="L9686" class="LineNr"> 9686 </span> 68/push 0/imm32/next +<span id="L9687" class="LineNr"> 9687 </span> 68/push 0/imm32/outputs +<span id="L9688" class="LineNr"> 9688 </span> 56/push-esi/inouts +<span id="L9689" class="LineNr"> 9689 </span> 68/push <span class="Constant">"add-to"</span>/imm32/operation +<span id="L9690" class="LineNr"> 9690 </span> 68/push 1/imm32 +<span id="L9691" class="LineNr"> 9691 </span> 89/<- %esi 4/r32/esp +<span id="L9692" class="LineNr"> 9692 </span> <span class="subxComment"># convert</span> +<span id="L9693" class="LineNr"> 9693 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 +<span id="L9694" class="LineNr"> 9694 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6979'>Primitives</a></span> 0) +<span id="L9695" class="LineNr"> 9695 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) +<span id="L9696" class="Folded"> 9696 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> +<span id="L9702" class="LineNr"> 9702 </span> <span class="subxComment"># check output</span> +<span id="L9703" class="LineNr"> 9703 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"01/add-to *(ebp+0x00000008) 0x00000001/r32"</span> <span class="Constant">"F - test-add-reg-to-mem"</span>) +<span id="L9704" class="LineNr"> 9704 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L9705" class="LineNr"> 9705 </span> 89/<- %esp 5/r32/ebp +<span id="L9706" class="LineNr"> 9706 </span> 5d/pop-to-ebp +<span id="L9707" class="LineNr"> 9707 </span> c3/return +<span id="L9708" class="LineNr"> 9708 </span> +<span id="L9709" class="LineNr"> 9709 </span><span class="subxTest">test-add-mem-to-reg</span>: +<span id="L9710" class="LineNr"> 9710 </span> <span class="subxComment"># var1/reg <- add var2</span> +<span id="L9711" class="LineNr"> 9711 </span> <span class="subxComment"># =></span> +<span id="L9712" class="LineNr"> 9712 </span> <span class="subxComment"># 03/add *(ebp+__) var1</span> +<span id="L9713" class="LineNr"> 9713 </span> <span class="subxComment">#</span> +<span id="L9714" class="LineNr"> 9714 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L9715" class="LineNr"> 9715 </span> 55/push-ebp +<span id="L9716" class="LineNr"> 9716 </span> 89/<- %ebp 4/r32/esp +<span id="L9717" class="LineNr"> 9717 </span> <span class="subxComment"># setup</span> +<span id="L9718" class="LineNr"> 9718 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) +<span id="L9719" class="LineNr"> 9719 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) +<span id="L9720" class="LineNr"> 9720 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> +<span id="L9721" class="LineNr"> 9721 </span> 68/push 0/imm32/right/null +<span id="L9722" class="LineNr"> 9722 </span> 68/push 1/imm32/left/int +<span id="L9723" class="LineNr"> 9723 </span> 89/<- %ecx 4/r32/esp +<span id="L9724" class="LineNr"> 9724 </span> <span class="subxComment"># var var-var1/ecx: var in eax</span> +<span id="L9725" class="LineNr"> 9725 </span> 68/push <span class="Constant">"eax"</span>/imm32/register +<span id="L9726" class="LineNr"> 9726 </span> 68/push 0/imm32/no-stack-offset +<span id="L9727" class="LineNr"> 9727 </span> 68/push 1/imm32/block-depth +<span id="L9728" class="LineNr"> 9728 </span> 51/push-ecx +<span id="L9729" class="LineNr"> 9729 </span> 68/push <span class="Constant">"var1"</span>/imm32 +<span id="L9730" class="LineNr"> 9730 </span> 89/<- %ecx 4/r32/esp +<span id="L9731" class="LineNr"> 9731 </span> <span class="subxComment"># var var-var2/edx: var</span> +<span id="L9732" class="LineNr"> 9732 </span> 68/push 0/imm32/no-register +<span id="L9733" class="LineNr"> 9733 </span> 68/push 8/imm32/stack-offset +<span id="L9734" class="LineNr"> 9734 </span> 68/push 1/imm32/block-depth +<span id="L9735" class="LineNr"> 9735 </span> ff 6/subop/push *(ecx+4) <span class="subxComment"># Var-type</span> +<span id="L9736" class="LineNr"> 9736 </span> 68/push <span class="Constant">"var2"</span>/imm32 +<span id="L9737" class="LineNr"> 9737 </span> 89/<- %edx 4/r32/esp +<span id="L9738" class="LineNr"> 9738 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var) = [var2]</span> +<span id="L9739" class="LineNr"> 9739 </span> 68/push 0/imm32/is-deref:false +<span id="L9740" class="LineNr"> 9740 </span> 68/push 0/imm32/next +<span id="L9741" class="LineNr"> 9741 </span> 52/push-edx/var-var2 +<span id="L9742" class="LineNr"> 9742 </span> 89/<- %esi 4/r32/esp +<span id="L9743" class="LineNr"> 9743 </span> <span class="subxComment"># var outputs/edi = (handle stmt-var) = [var1]</span> +<span id="L9744" class="LineNr"> 9744 </span> 68/push 0/imm32/is-deref:false +<span id="L9745" class="LineNr"> 9745 </span> 68/push 0/imm32/next +<span id="L9746" class="LineNr"> 9746 </span> 51/push-ecx/var-var1 +<span id="L9747" class="LineNr"> 9747 </span> 89/<- %edi 4/r32/esp +<span id="L9748" class="LineNr"> 9748 </span> <span class="subxComment"># var stmt/esi: statement</span> +<span id="L9749" class="LineNr"> 9749 </span> 68/push 0/imm32/next +<span id="L9750" class="LineNr"> 9750 </span> 57/push-edi/outputs +<span id="L9751" class="LineNr"> 9751 </span> 56/push-esi/inouts +<span id="L9752" class="LineNr"> 9752 </span> 68/push <span class="Constant">"add"</span>/imm32/operation +<span id="L9753" class="LineNr"> 9753 </span> 68/push 1/imm32 <span id="L9754" class="LineNr"> 9754 </span> 89/<- %esi 4/r32/esp -<span id="L9755" class="LineNr"> 9755 </span> <span class="subxComment"># var outputs/edi = (handle stmt-var) = [var1]</span> -<span id="L9756" class="LineNr"> 9756 </span> 68/push 0/imm32/is-deref:false -<span id="L9757" class="LineNr"> 9757 </span> 68/push 0/imm32/next -<span id="L9758" class="LineNr"> 9758 </span> 51/push-ecx/var-var1 -<span id="L9759" class="LineNr"> 9759 </span> 89/<- %edi 4/r32/esp -<span id="L9760" class="LineNr"> 9760 </span> <span class="subxComment"># var stmt/esi: statement</span> -<span id="L9761" class="LineNr"> 9761 </span> 68/push 0/imm32/next -<span id="L9762" class="LineNr"> 9762 </span> 57/push-edi/outputs -<span id="L9763" class="LineNr"> 9763 </span> 56/push-esi/inouts -<span id="L9764" class="LineNr"> 9764 </span> 68/push <span class="Constant">"add"</span>/imm32/operation -<span id="L9765" class="LineNr"> 9765 </span> 68/push 1/imm32 -<span id="L9766" class="LineNr"> 9766 </span> 89/<- %esi 4/r32/esp -<span id="L9767" class="LineNr"> 9767 </span> <span class="subxComment"># convert</span> -<span id="L9768" class="LineNr"> 9768 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 -<span id="L9769" class="LineNr"> 9769 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6983'>Primitives</a></span> 0) -<span id="L9770" class="LineNr"> 9770 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) -<span id="L9771" class="Folded"> 9771 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L9777" class="LineNr"> 9777 </span> <span class="subxComment"># check output</span> -<span id="L9778" class="LineNr"> 9778 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"03/add *(ebp+0x00000008) 0x00000000/r32"</span> <span class="Constant">"F - test-add-mem-to-reg"</span>) -<span id="L9779" class="LineNr"> 9779 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L9780" class="LineNr"> 9780 </span> 89/<- %esp 5/r32/ebp -<span id="L9781" class="LineNr"> 9781 </span> 5d/pop-to-ebp -<span id="L9782" class="LineNr"> 9782 </span> c3/return -<span id="L9783" class="LineNr"> 9783 </span> -<span id="L9784" class="LineNr"> 9784 </span><span class="subxTest">test-add-literal-to-eax</span>: -<span id="L9785" class="LineNr"> 9785 </span> <span class="subxComment"># var1/eax <- add 0x34</span> -<span id="L9786" class="LineNr"> 9786 </span> <span class="subxComment"># =></span> -<span id="L9787" class="LineNr"> 9787 </span> <span class="subxComment"># 05/add-to-eax 0x34/imm32</span> -<span id="L9788" class="LineNr"> 9788 </span> <span class="subxComment">#</span> -<span id="L9789" class="LineNr"> 9789 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L9790" class="LineNr"> 9790 </span> 55/push-ebp -<span id="L9791" class="LineNr"> 9791 </span> 89/<- %ebp 4/r32/esp -<span id="L9792" class="LineNr"> 9792 </span> <span class="subxComment"># setup</span> -<span id="L9793" class="LineNr"> 9793 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) -<span id="L9794" class="LineNr"> 9794 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) -<span id="L9795" class="LineNr"> 9795 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> -<span id="L9796" class="LineNr"> 9796 </span> 68/push 0/imm32/right/null -<span id="L9797" class="LineNr"> 9797 </span> 68/push 1/imm32/left/int -<span id="L9798" class="LineNr"> 9798 </span> 89/<- %ecx 4/r32/esp -<span id="L9799" class="LineNr"> 9799 </span> <span class="subxComment"># var var-var1/ecx: var in eax</span> -<span id="L9800" class="LineNr"> 9800 </span> 68/push <span class="Constant">"eax"</span>/imm32/register -<span id="L9801" class="LineNr"> 9801 </span> 68/push 0/imm32/no-stack-offset -<span id="L9802" class="LineNr"> 9802 </span> 68/push 1/imm32/block-depth -<span id="L9803" class="LineNr"> 9803 </span> 51/push-ecx -<span id="L9804" class="LineNr"> 9804 </span> 68/push <span class="Constant">"var1"</span>/imm32 -<span id="L9805" class="LineNr"> 9805 </span> 89/<- %ecx 4/r32/esp -<span id="L9806" class="LineNr"> 9806 </span> <span class="subxComment"># var type/edx: (handle tree type-id) = literal</span> -<span id="L9807" class="LineNr"> 9807 </span> 68/push 0/imm32/right/null -<span id="L9808" class="LineNr"> 9808 </span> 68/push 0/imm32/left/literal -<span id="L9809" class="LineNr"> 9809 </span> 89/<- %edx 4/r32/esp -<span id="L9810" class="LineNr"> 9810 </span> <span class="subxComment"># var var-var2/edx: var literal</span> -<span id="L9811" class="LineNr"> 9811 </span> 68/push 0/imm32/no-register -<span id="L9812" class="LineNr"> 9812 </span> 68/push 0/imm32/no-stack-offset -<span id="L9813" class="LineNr"> 9813 </span> 68/push 1/imm32/block-depth -<span id="L9814" class="LineNr"> 9814 </span> 52/push-edx -<span id="L9815" class="LineNr"> 9815 </span> 68/push <span class="Constant">"0x34"</span>/imm32 -<span id="L9816" class="LineNr"> 9816 </span> 89/<- %edx 4/r32/esp -<span id="L9817" class="LineNr"> 9817 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var) = [var2]</span> -<span id="L9818" class="LineNr"> 9818 </span> 68/push 0/imm32/is-deref:false -<span id="L9819" class="LineNr"> 9819 </span> 68/push 0/imm32/next -<span id="L9820" class="LineNr"> 9820 </span> 52/push-edx/var-var2 +<span id="L9755" class="LineNr"> 9755 </span> <span class="subxComment"># convert</span> +<span id="L9756" class="LineNr"> 9756 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 +<span id="L9757" class="LineNr"> 9757 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6979'>Primitives</a></span> 0) +<span id="L9758" class="LineNr"> 9758 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) +<span id="L9759" class="Folded"> 9759 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> +<span id="L9765" class="LineNr"> 9765 </span> <span class="subxComment"># check output</span> +<span id="L9766" class="LineNr"> 9766 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"03/add *(ebp+0x00000008) 0x00000000/r32"</span> <span class="Constant">"F - test-add-mem-to-reg"</span>) +<span id="L9767" class="LineNr"> 9767 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L9768" class="LineNr"> 9768 </span> 89/<- %esp 5/r32/ebp +<span id="L9769" class="LineNr"> 9769 </span> 5d/pop-to-ebp +<span id="L9770" class="LineNr"> 9770 </span> c3/return +<span id="L9771" class="LineNr"> 9771 </span> +<span id="L9772" class="LineNr"> 9772 </span><span class="subxTest">test-add-literal-to-eax</span>: +<span id="L9773" class="LineNr"> 9773 </span> <span class="subxComment"># var1/eax <- add 0x34</span> +<span id="L9774" class="LineNr"> 9774 </span> <span class="subxComment"># =></span> +<span id="L9775" class="LineNr"> 9775 </span> <span class="subxComment"># 05/add-to-eax 0x34/imm32</span> +<span id="L9776" class="LineNr"> 9776 </span> <span class="subxComment">#</span> +<span id="L9777" class="LineNr"> 9777 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L9778" class="LineNr"> 9778 </span> 55/push-ebp +<span id="L9779" class="LineNr"> 9779 </span> 89/<- %ebp 4/r32/esp +<span id="L9780" class="LineNr"> 9780 </span> <span class="subxComment"># setup</span> +<span id="L9781" class="LineNr"> 9781 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) +<span id="L9782" class="LineNr"> 9782 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) +<span id="L9783" class="LineNr"> 9783 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> +<span id="L9784" class="LineNr"> 9784 </span> 68/push 0/imm32/right/null +<span id="L9785" class="LineNr"> 9785 </span> 68/push 1/imm32/left/int +<span id="L9786" class="LineNr"> 9786 </span> 89/<- %ecx 4/r32/esp +<span id="L9787" class="LineNr"> 9787 </span> <span class="subxComment"># var var-var1/ecx: var in eax</span> +<span id="L9788" class="LineNr"> 9788 </span> 68/push <span class="Constant">"eax"</span>/imm32/register +<span id="L9789" class="LineNr"> 9789 </span> 68/push 0/imm32/no-stack-offset +<span id="L9790" class="LineNr"> 9790 </span> 68/push 1/imm32/block-depth +<span id="L9791" class="LineNr"> 9791 </span> 51/push-ecx +<span id="L9792" class="LineNr"> 9792 </span> 68/push <span class="Constant">"var1"</span>/imm32 +<span id="L9793" class="LineNr"> 9793 </span> 89/<- %ecx 4/r32/esp +<span id="L9794" class="LineNr"> 9794 </span> <span class="subxComment"># var type/edx: (handle tree type-id) = literal</span> +<span id="L9795" class="LineNr"> 9795 </span> 68/push 0/imm32/right/null +<span id="L9796" class="LineNr"> 9796 </span> 68/push 0/imm32/left/literal +<span id="L9797" class="LineNr"> 9797 </span> 89/<- %edx 4/r32/esp +<span id="L9798" class="LineNr"> 9798 </span> <span class="subxComment"># var var-var2/edx: var literal</span> +<span id="L9799" class="LineNr"> 9799 </span> 68/push 0/imm32/no-register +<span id="L9800" class="LineNr"> 9800 </span> 68/push 0/imm32/no-stack-offset +<span id="L9801" class="LineNr"> 9801 </span> 68/push 1/imm32/block-depth +<span id="L9802" class="LineNr"> 9802 </span> 52/push-edx +<span id="L9803" class="LineNr"> 9803 </span> 68/push <span class="Constant">"0x34"</span>/imm32 +<span id="L9804" class="LineNr"> 9804 </span> 89/<- %edx 4/r32/esp +<span id="L9805" class="LineNr"> 9805 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var) = [var2]</span> +<span id="L9806" class="LineNr"> 9806 </span> 68/push 0/imm32/is-deref:false +<span id="L9807" class="LineNr"> 9807 </span> 68/push 0/imm32/next +<span id="L9808" class="LineNr"> 9808 </span> 52/push-edx/var-var2 +<span id="L9809" class="LineNr"> 9809 </span> 89/<- %esi 4/r32/esp +<span id="L9810" class="LineNr"> 9810 </span> <span class="subxComment"># var outputs/edi: (handle stmt-var) = [var1]</span> +<span id="L9811" class="LineNr"> 9811 </span> 68/push 0/imm32/is-deref:false +<span id="L9812" class="LineNr"> 9812 </span> 68/push 0/imm32/next +<span id="L9813" class="LineNr"> 9813 </span> 51/push-ecx/var-var1 +<span id="L9814" class="LineNr"> 9814 </span> 89/<- %edi 4/r32/esp +<span id="L9815" class="LineNr"> 9815 </span> <span class="subxComment"># var stmt/esi: statement</span> +<span id="L9816" class="LineNr"> 9816 </span> 68/push 0/imm32/next +<span id="L9817" class="LineNr"> 9817 </span> 57/push-edi/outputs +<span id="L9818" class="LineNr"> 9818 </span> 56/push-esi/inouts +<span id="L9819" class="LineNr"> 9819 </span> 68/push <span class="Constant">"add"</span>/imm32/operation +<span id="L9820" class="LineNr"> 9820 </span> 68/push 1/imm32 <span id="L9821" class="LineNr"> 9821 </span> 89/<- %esi 4/r32/esp -<span id="L9822" class="LineNr"> 9822 </span> <span class="subxComment"># var outputs/edi: (handle stmt-var) = [var1]</span> -<span id="L9823" class="LineNr"> 9823 </span> 68/push 0/imm32/is-deref:false -<span id="L9824" class="LineNr"> 9824 </span> 68/push 0/imm32/next -<span id="L9825" class="LineNr"> 9825 </span> 51/push-ecx/var-var1 -<span id="L9826" class="LineNr"> 9826 </span> 89/<- %edi 4/r32/esp -<span id="L9827" class="LineNr"> 9827 </span> <span class="subxComment"># var stmt/esi: statement</span> -<span id="L9828" class="LineNr"> 9828 </span> 68/push 0/imm32/next -<span id="L9829" class="LineNr"> 9829 </span> 57/push-edi/outputs -<span id="L9830" class="LineNr"> 9830 </span> 56/push-esi/inouts -<span id="L9831" class="LineNr"> 9831 </span> 68/push <span class="Constant">"add"</span>/imm32/operation -<span id="L9832" class="LineNr"> 9832 </span> 68/push 1/imm32 -<span id="L9833" class="LineNr"> 9833 </span> 89/<- %esi 4/r32/esp -<span id="L9834" class="LineNr"> 9834 </span> <span class="subxComment"># convert</span> -<span id="L9835" class="LineNr"> 9835 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 -<span id="L9836" class="LineNr"> 9836 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6983'>Primitives</a></span> 0) -<span id="L9837" class="LineNr"> 9837 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) -<span id="L9838" class="Folded"> 9838 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L9844" class="LineNr"> 9844 </span> <span class="subxComment"># check output</span> -<span id="L9845" class="LineNr"> 9845 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"05/add-to-eax 0x34/imm32"</span> <span class="Constant">"F - test-add-literal-to-eax"</span>) -<span id="L9846" class="LineNr"> 9846 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L9847" class="LineNr"> 9847 </span> 89/<- %esp 5/r32/ebp -<span id="L9848" class="LineNr"> 9848 </span> 5d/pop-to-ebp -<span id="L9849" class="LineNr"> 9849 </span> c3/return -<span id="L9850" class="LineNr"> 9850 </span> -<span id="L9851" class="LineNr"> 9851 </span><span class="subxTest">test-add-literal-to-reg</span>: -<span id="L9852" class="LineNr"> 9852 </span> <span class="subxComment"># var1/ecx <- add 0x34</span> -<span id="L9853" class="LineNr"> 9853 </span> <span class="subxComment"># =></span> -<span id="L9854" class="LineNr"> 9854 </span> <span class="subxComment"># 81 0/subop/add %ecx 0x34/imm32</span> -<span id="L9855" class="LineNr"> 9855 </span> <span class="subxComment">#</span> -<span id="L9856" class="LineNr"> 9856 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L9857" class="LineNr"> 9857 </span> 55/push-ebp -<span id="L9858" class="LineNr"> 9858 </span> 89/<- %ebp 4/r32/esp -<span id="L9859" class="LineNr"> 9859 </span> <span class="subxComment"># setup</span> -<span id="L9860" class="LineNr"> 9860 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) -<span id="L9861" class="LineNr"> 9861 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) -<span id="L9862" class="LineNr"> 9862 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> -<span id="L9863" class="LineNr"> 9863 </span> 68/push 0/imm32/right/null -<span id="L9864" class="LineNr"> 9864 </span> 68/push 1/imm32/left/int -<span id="L9865" class="LineNr"> 9865 </span> 89/<- %ecx 4/r32/esp -<span id="L9866" class="LineNr"> 9866 </span> <span class="subxComment"># var var-var1/ecx: var in ecx</span> -<span id="L9867" class="LineNr"> 9867 </span> 68/push <span class="Constant">"ecx"</span>/imm32/register -<span id="L9868" class="LineNr"> 9868 </span> 68/push 0/imm32/no-stack-offset -<span id="L9869" class="LineNr"> 9869 </span> 68/push 1/imm32/block-depth -<span id="L9870" class="LineNr"> 9870 </span> 51/push-ecx -<span id="L9871" class="LineNr"> 9871 </span> 68/push <span class="Constant">"var1"</span>/imm32 -<span id="L9872" class="LineNr"> 9872 </span> 89/<- %ecx 4/r32/esp -<span id="L9873" class="LineNr"> 9873 </span> <span class="subxComment"># var type/edx: (handle tree type-id) = literal</span> -<span id="L9874" class="LineNr"> 9874 </span> 68/push 0/imm32/right/null -<span id="L9875" class="LineNr"> 9875 </span> 68/push 0/imm32/left/literal -<span id="L9876" class="LineNr"> 9876 </span> 89/<- %edx 4/r32/esp -<span id="L9877" class="LineNr"> 9877 </span> <span class="subxComment"># var var-var2/edx: var literal</span> -<span id="L9878" class="LineNr"> 9878 </span> 68/push 0/imm32/no-register -<span id="L9879" class="LineNr"> 9879 </span> 68/push 0/imm32/no-stack-offset -<span id="L9880" class="LineNr"> 9880 </span> 68/push 1/imm32/block-depth -<span id="L9881" class="LineNr"> 9881 </span> 52/push-edx -<span id="L9882" class="LineNr"> 9882 </span> 68/push <span class="Constant">"0x34"</span>/imm32 -<span id="L9883" class="LineNr"> 9883 </span> 89/<- %edx 4/r32/esp -<span id="L9884" class="LineNr"> 9884 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var) = [var2]</span> -<span id="L9885" class="LineNr"> 9885 </span> 68/push 0/imm32/is-deref:false -<span id="L9886" class="LineNr"> 9886 </span> 68/push 0/imm32/next -<span id="L9887" class="LineNr"> 9887 </span> 52/push-edx/var-var2 +<span id="L9822" class="LineNr"> 9822 </span> <span class="subxComment"># convert</span> +<span id="L9823" class="LineNr"> 9823 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 +<span id="L9824" class="LineNr"> 9824 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6979'>Primitives</a></span> 0) +<span id="L9825" class="LineNr"> 9825 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) +<span id="L9826" class="Folded"> 9826 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> +<span id="L9832" class="LineNr"> 9832 </span> <span class="subxComment"># check output</span> +<span id="L9833" class="LineNr"> 9833 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"05/add-to-eax 0x34/imm32"</span> <span class="Constant">"F - test-add-literal-to-eax"</span>) +<span id="L9834" class="LineNr"> 9834 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L9835" class="LineNr"> 9835 </span> 89/<- %esp 5/r32/ebp +<span id="L9836" class="LineNr"> 9836 </span> 5d/pop-to-ebp +<span id="L9837" class="LineNr"> 9837 </span> c3/return +<span id="L9838" class="LineNr"> 9838 </span> +<span id="L9839" class="LineNr"> 9839 </span><span class="subxTest">test-add-literal-to-reg</span>: +<span id="L9840" class="LineNr"> 9840 </span> <span class="subxComment"># var1/ecx <- add 0x34</span> +<span id="L9841" class="LineNr"> 9841 </span> <span class="subxComment"># =></span> +<span id="L9842" class="LineNr"> 9842 </span> <span class="subxComment"># 81 0/subop/add %ecx 0x34/imm32</span> +<span id="L9843" class="LineNr"> 9843 </span> <span class="subxComment">#</span> +<span id="L9844" class="LineNr"> 9844 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L9845" class="LineNr"> 9845 </span> 55/push-ebp +<span id="L9846" class="LineNr"> 9846 </span> 89/<- %ebp 4/r32/esp +<span id="L9847" class="LineNr"> 9847 </span> <span class="subxComment"># setup</span> +<span id="L9848" class="LineNr"> 9848 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) +<span id="L9849" class="LineNr"> 9849 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) +<span id="L9850" class="LineNr"> 9850 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> +<span id="L9851" class="LineNr"> 9851 </span> 68/push 0/imm32/right/null +<span id="L9852" class="LineNr"> 9852 </span> 68/push 1/imm32/left/int +<span id="L9853" class="LineNr"> 9853 </span> 89/<- %ecx 4/r32/esp +<span id="L9854" class="LineNr"> 9854 </span> <span class="subxComment"># var var-var1/ecx: var in ecx</span> +<span id="L9855" class="LineNr"> 9855 </span> 68/push <span class="Constant">"ecx"</span>/imm32/register +<span id="L9856" class="LineNr"> 9856 </span> 68/push 0/imm32/no-stack-offset +<span id="L9857" class="LineNr"> 9857 </span> 68/push 1/imm32/block-depth +<span id="L9858" class="LineNr"> 9858 </span> 51/push-ecx +<span id="L9859" class="LineNr"> 9859 </span> 68/push <span class="Constant">"var1"</span>/imm32 +<span id="L9860" class="LineNr"> 9860 </span> 89/<- %ecx 4/r32/esp +<span id="L9861" class="LineNr"> 9861 </span> <span class="subxComment"># var type/edx: (handle tree type-id) = literal</span> +<span id="L9862" class="LineNr"> 9862 </span> 68/push 0/imm32/right/null +<span id="L9863" class="LineNr"> 9863 </span> 68/push 0/imm32/left/literal +<span id="L9864" class="LineNr"> 9864 </span> 89/<- %edx 4/r32/esp +<span id="L9865" class="LineNr"> 9865 </span> <span class="subxComment"># var var-var2/edx: var literal</span> +<span id="L9866" class="LineNr"> 9866 </span> 68/push 0/imm32/no-register +<span id="L9867" class="LineNr"> 9867 </span> 68/push 0/imm32/no-stack-offset +<span id="L9868" class="LineNr"> 9868 </span> 68/push 1/imm32/block-depth +<span id="L9869" class="LineNr"> 9869 </span> 52/push-edx +<span id="L9870" class="LineNr"> 9870 </span> 68/push <span class="Constant">"0x34"</span>/imm32 +<span id="L9871" class="LineNr"> 9871 </span> 89/<- %edx 4/r32/esp +<span id="L9872" class="LineNr"> 9872 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var) = [var2]</span> +<span id="L9873" class="LineNr"> 9873 </span> 68/push 0/imm32/is-deref:false +<span id="L9874" class="LineNr"> 9874 </span> 68/push 0/imm32/next +<span id="L9875" class="LineNr"> 9875 </span> 52/push-edx/var-var2 +<span id="L9876" class="LineNr"> 9876 </span> 89/<- %esi 4/r32/esp +<span id="L9877" class="LineNr"> 9877 </span> <span class="subxComment"># var outputs/edi: (handle stmt-var) = [var1]</span> +<span id="L9878" class="LineNr"> 9878 </span> 68/push 0/imm32/is-deref:false +<span id="L9879" class="LineNr"> 9879 </span> 68/push 0/imm32/next +<span id="L9880" class="LineNr"> 9880 </span> 51/push-ecx/var-var1 +<span id="L9881" class="LineNr"> 9881 </span> 89/<- %edi 4/r32/esp +<span id="L9882" class="LineNr"> 9882 </span> <span class="subxComment"># var stmt/esi: statement</span> +<span id="L9883" class="LineNr"> 9883 </span> 68/push 0/imm32/next +<span id="L9884" class="LineNr"> 9884 </span> 57/push-edi/outputs +<span id="L9885" class="LineNr"> 9885 </span> 56/push-esi/inouts +<span id="L9886" class="LineNr"> 9886 </span> 68/push <span class="Constant">"add"</span>/imm32/operation +<span id="L9887" class="LineNr"> 9887 </span> 68/push 1/imm32 <span id="L9888" class="LineNr"> 9888 </span> 89/<- %esi 4/r32/esp -<span id="L9889" class="LineNr"> 9889 </span> <span class="subxComment"># var outputs/edi: (handle stmt-var) = [var1]</span> -<span id="L9890" class="LineNr"> 9890 </span> 68/push 0/imm32/is-deref:false -<span id="L9891" class="LineNr"> 9891 </span> 68/push 0/imm32/next -<span id="L9892" class="LineNr"> 9892 </span> 51/push-ecx/var-var1 -<span id="L9893" class="LineNr"> 9893 </span> 89/<- %edi 4/r32/esp -<span id="L9894" class="LineNr"> 9894 </span> <span class="subxComment"># var stmt/esi: statement</span> -<span id="L9895" class="LineNr"> 9895 </span> 68/push 0/imm32/next -<span id="L9896" class="LineNr"> 9896 </span> 57/push-edi/outputs -<span id="L9897" class="LineNr"> 9897 </span> 56/push-esi/inouts -<span id="L9898" class="LineNr"> 9898 </span> 68/push <span class="Constant">"add"</span>/imm32/operation -<span id="L9899" class="LineNr"> 9899 </span> 68/push 1/imm32 -<span id="L9900" class="LineNr"> 9900 </span> 89/<- %esi 4/r32/esp -<span id="L9901" class="LineNr"> 9901 </span> <span class="subxComment"># convert</span> -<span id="L9902" class="LineNr"> 9902 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 -<span id="L9903" class="LineNr"> 9903 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6983'>Primitives</a></span> 0) -<span id="L9904" class="LineNr"> 9904 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) -<span id="L9905" class="Folded"> 9905 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L9911" class="LineNr"> 9911 </span> <span class="subxComment"># check output</span> -<span id="L9912" class="LineNr"> 9912 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"81 0/subop/add %ecx 0x34/imm32"</span> <span class="Constant">"F - test-add-literal-to-reg"</span>) -<span id="L9913" class="LineNr"> 9913 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L9914" class="LineNr"> 9914 </span> 89/<- %esp 5/r32/ebp -<span id="L9915" class="LineNr"> 9915 </span> 5d/pop-to-ebp -<span id="L9916" class="LineNr"> 9916 </span> c3/return -<span id="L9917" class="LineNr"> 9917 </span> -<span id="L9918" class="LineNr"> 9918 </span><span class="subxTest">test-add-literal-to-mem</span>: -<span id="L9919" class="LineNr"> 9919 </span> <span class="subxComment"># add-to var1, 0x34</span> -<span id="L9920" class="LineNr"> 9920 </span> <span class="subxComment"># =></span> -<span id="L9921" class="LineNr"> 9921 </span> <span class="subxComment"># 81 0/subop/add %eax 0x34/imm32</span> -<span id="L9922" class="LineNr"> 9922 </span> <span class="subxComment">#</span> -<span id="L9923" class="LineNr"> 9923 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L9924" class="LineNr"> 9924 </span> 55/push-ebp -<span id="L9925" class="LineNr"> 9925 </span> 89/<- %ebp 4/r32/esp -<span id="L9926" class="LineNr"> 9926 </span> <span class="subxComment"># setup</span> -<span id="L9927" class="LineNr"> 9927 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) -<span id="L9928" class="LineNr"> 9928 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) -<span id="L9929" class="LineNr"> 9929 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> -<span id="L9930" class="LineNr"> 9930 </span> 68/push 0/imm32/right/null -<span id="L9931" class="LineNr"> 9931 </span> 68/push 1/imm32/left/int -<span id="L9932" class="LineNr"> 9932 </span> 89/<- %ecx 4/r32/esp -<span id="L9933" class="LineNr"> 9933 </span> <span class="subxComment"># var var-var1/ecx: var</span> -<span id="L9934" class="LineNr"> 9934 </span> 68/push 0/imm32/no-register -<span id="L9935" class="LineNr"> 9935 </span> 68/push 8/imm32/stack-offset -<span id="L9936" class="LineNr"> 9936 </span> 68/push 1/imm32/block-depth -<span id="L9937" class="LineNr"> 9937 </span> 51/push-ecx -<span id="L9938" class="LineNr"> 9938 </span> 68/push <span class="Constant">"var1"</span>/imm32 -<span id="L9939" class="LineNr"> 9939 </span> 89/<- %ecx 4/r32/esp -<span id="L9940" class="LineNr"> 9940 </span> <span class="subxComment"># var type/edx: (handle tree type-id) = literal</span> -<span id="L9941" class="LineNr"> 9941 </span> 68/push 0/imm32/right/null -<span id="L9942" class="LineNr"> 9942 </span> 68/push 0/imm32/left/literal -<span id="L9943" class="LineNr"> 9943 </span> 89/<- %edx 4/r32/esp -<span id="L9944" class="LineNr"> 9944 </span> <span class="subxComment"># var var-var2/edx: var literal</span> -<span id="L9945" class="LineNr"> 9945 </span> 68/push 0/imm32/no-register -<span id="L9946" class="LineNr"> 9946 </span> 68/push 0/imm32/no-stack-offset -<span id="L9947" class="LineNr"> 9947 </span> 68/push 1/imm32/block-depth -<span id="L9948" class="LineNr"> 9948 </span> 52/push-edx -<span id="L9949" class="LineNr"> 9949 </span> 68/push <span class="Constant">"0x34"</span>/imm32 -<span id="L9950" class="LineNr"> 9950 </span> 89/<- %edx 4/r32/esp -<span id="L9951" class="LineNr"> 9951 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var) = [var2]</span> -<span id="L9952" class="LineNr"> 9952 </span> 68/push 0/imm32/is-deref:false -<span id="L9953" class="LineNr"> 9953 </span> 68/push 0/imm32/next -<span id="L9954" class="LineNr"> 9954 </span> 52/push-edx/var-var2 +<span id="L9889" class="LineNr"> 9889 </span> <span class="subxComment"># convert</span> +<span id="L9890" class="LineNr"> 9890 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 +<span id="L9891" class="LineNr"> 9891 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6979'>Primitives</a></span> 0) +<span id="L9892" class="LineNr"> 9892 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) +<span id="L9893" class="Folded"> 9893 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> +<span id="L9899" class="LineNr"> 9899 </span> <span class="subxComment"># check output</span> +<span id="L9900" class="LineNr"> 9900 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"81 0/subop/add %ecx 0x34/imm32"</span> <span class="Constant">"F - test-add-literal-to-reg"</span>) +<span id="L9901" class="LineNr"> 9901 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L9902" class="LineNr"> 9902 </span> 89/<- %esp 5/r32/ebp +<span id="L9903" class="LineNr"> 9903 </span> 5d/pop-to-ebp +<span id="L9904" class="LineNr"> 9904 </span> c3/return +<span id="L9905" class="LineNr"> 9905 </span> +<span id="L9906" class="LineNr"> 9906 </span><span class="subxTest">test-add-literal-to-mem</span>: +<span id="L9907" class="LineNr"> 9907 </span> <span class="subxComment"># add-to var1, 0x34</span> +<span id="L9908" class="LineNr"> 9908 </span> <span class="subxComment"># =></span> +<span id="L9909" class="LineNr"> 9909 </span> <span class="subxComment"># 81 0/subop/add %eax 0x34/imm32</span> +<span id="L9910" class="LineNr"> 9910 </span> <span class="subxComment">#</span> +<span id="L9911" class="LineNr"> 9911 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L9912" class="LineNr"> 9912 </span> 55/push-ebp +<span id="L9913" class="LineNr"> 9913 </span> 89/<- %ebp 4/r32/esp +<span id="L9914" class="LineNr"> 9914 </span> <span class="subxComment"># setup</span> +<span id="L9915" class="LineNr"> 9915 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) +<span id="L9916" class="LineNr"> 9916 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) +<span id="L9917" class="LineNr"> 9917 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> +<span id="L9918" class="LineNr"> 9918 </span> 68/push 0/imm32/right/null +<span id="L9919" class="LineNr"> 9919 </span> 68/push 1/imm32/left/int +<span id="L9920" class="LineNr"> 9920 </span> 89/<- %ecx 4/r32/esp +<span id="L9921" class="LineNr"> 9921 </span> <span class="subxComment"># var var-var1/ecx: var</span> +<span id="L9922" class="LineNr"> 9922 </span> 68/push 0/imm32/no-register +<span id="L9923" class="LineNr"> 9923 </span> 68/push 8/imm32/stack-offset +<span id="L9924" class="LineNr"> 9924 </span> 68/push 1/imm32/block-depth +<span id="L9925" class="LineNr"> 9925 </span> 51/push-ecx +<span id="L9926" class="LineNr"> 9926 </span> 68/push <span class="Constant">"var1"</span>/imm32 +<span id="L9927" class="LineNr"> 9927 </span> 89/<- %ecx 4/r32/esp +<span id="L9928" class="LineNr"> 9928 </span> <span class="subxComment"># var type/edx: (handle tree type-id) = literal</span> +<span id="L9929" class="LineNr"> 9929 </span> 68/push 0/imm32/right/null +<span id="L9930" class="LineNr"> 9930 </span> 68/push 0/imm32/left/literal +<span id="L9931" class="LineNr"> 9931 </span> 89/<- %edx 4/r32/esp +<span id="L9932" class="LineNr"> 9932 </span> <span class="subxComment"># var var-var2/edx: var literal</span> +<span id="L9933" class="LineNr"> 9933 </span> 68/push 0/imm32/no-register +<span id="L9934" class="LineNr"> 9934 </span> 68/push 0/imm32/no-stack-offset +<span id="L9935" class="LineNr"> 9935 </span> 68/push 1/imm32/block-depth +<span id="L9936" class="LineNr"> 9936 </span> 52/push-edx +<span id="L9937" class="LineNr"> 9937 </span> 68/push <span class="Constant">"0x34"</span>/imm32 +<span id="L9938" class="LineNr"> 9938 </span> 89/<- %edx 4/r32/esp +<span id="L9939" class="LineNr"> 9939 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var) = [var2]</span> +<span id="L9940" class="LineNr"> 9940 </span> 68/push 0/imm32/is-deref:false +<span id="L9941" class="LineNr"> 9941 </span> 68/push 0/imm32/next +<span id="L9942" class="LineNr"> 9942 </span> 52/push-edx/var-var2 +<span id="L9943" class="LineNr"> 9943 </span> 89/<- %esi 4/r32/esp +<span id="L9944" class="LineNr"> 9944 </span> <span class="subxComment"># var inouts = (handle stmt-var) = [var1, var2]</span> +<span id="L9945" class="LineNr"> 9945 </span> 68/push 0/imm32/is-deref:false +<span id="L9946" class="LineNr"> 9946 </span> 56/push-esi/next +<span id="L9947" class="LineNr"> 9947 </span> 51/push-ecx/var-var1 +<span id="L9948" class="LineNr"> 9948 </span> 89/<- %esi 4/r32/esp +<span id="L9949" class="LineNr"> 9949 </span> <span class="subxComment"># var stmt/esi: statement</span> +<span id="L9950" class="LineNr"> 9950 </span> 68/push 0/imm32/next +<span id="L9951" class="LineNr"> 9951 </span> 68/push 0/imm32/outputs +<span id="L9952" class="LineNr"> 9952 </span> 56/push-esi/inouts +<span id="L9953" class="LineNr"> 9953 </span> 68/push <span class="Constant">"add-to"</span>/imm32/operation +<span id="L9954" class="LineNr"> 9954 </span> 68/push 1/imm32 <span id="L9955" class="LineNr"> 9955 </span> 89/<- %esi 4/r32/esp -<span id="L9956" class="LineNr"> 9956 </span> <span class="subxComment"># var inouts = (handle stmt-var) = [var1, var2]</span> -<span id="L9957" class="LineNr"> 9957 </span> 68/push 0/imm32/is-deref:false -<span id="L9958" class="LineNr"> 9958 </span> 56/push-esi/next -<span id="L9959" class="LineNr"> 9959 </span> 51/push-ecx/var-var1 -<span id="L9960" class="LineNr"> 9960 </span> 89/<- %esi 4/r32/esp -<span id="L9961" class="LineNr"> 9961 </span> <span class="subxComment"># var stmt/esi: statement</span> -<span id="L9962" class="LineNr"> 9962 </span> 68/push 0/imm32/next -<span id="L9963" class="LineNr"> 9963 </span> 68/push 0/imm32/outputs -<span id="L9964" class="LineNr"> 9964 </span> 56/push-esi/inouts -<span id="L9965" class="LineNr"> 9965 </span> 68/push <span class="Constant">"add-to"</span>/imm32/operation -<span id="L9966" class="LineNr"> 9966 </span> 68/push 1/imm32 -<span id="L9967" class="LineNr"> 9967 </span> 89/<- %esi 4/r32/esp -<span id="L9968" class="LineNr"> 9968 </span> <span class="subxComment"># convert</span> -<span id="L9969" class="LineNr"> 9969 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 -<span id="L9970" class="LineNr"> 9970 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6983'>Primitives</a></span> 0) -<span id="L9971" class="LineNr"> 9971 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) -<span id="L9972" class="Folded"> 9972 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L9978" class="LineNr"> 9978 </span> <span class="subxComment"># check output</span> -<span id="L9979" class="LineNr"> 9979 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"81 0/subop/add *(ebp+0x00000008) 0x34/imm32"</span> <span class="Constant">"F - test-add-literal-to-mem"</span>) -<span id="L9980" class="LineNr"> 9980 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L9981" class="LineNr"> 9981 </span> 89/<- %esp 5/r32/ebp -<span id="L9982" class="LineNr"> 9982 </span> 5d/pop-to-ebp -<span id="L9983" class="LineNr"> 9983 </span> c3/return -<span id="L9984" class="LineNr"> 9984 </span> -<span id="L9985" class="LineNr"> 9985 </span><span class="subxTest">test-compare-mem-with-reg</span>: -<span id="L9986" class="LineNr"> 9986 </span> <span class="subxComment"># compare var1, var2/eax</span> -<span id="L9987" class="LineNr"> 9987 </span> <span class="subxComment"># =></span> -<span id="L9988" class="LineNr"> 9988 </span> <span class="subxComment"># 39/compare *(ebp+___) 0/r32/eax</span> -<span id="L9989" class="LineNr"> 9989 </span> <span class="subxComment">#</span> -<span id="L9990" class="LineNr"> 9990 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L9991" class="LineNr"> 9991 </span> 55/push-ebp -<span id="L9992" class="LineNr"> 9992 </span> 89/<- %ebp 4/r32/esp -<span id="L9993" class="LineNr"> 9993 </span> <span class="subxComment"># setup</span> -<span id="L9994" class="LineNr"> 9994 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) -<span id="L9995" class="LineNr"> 9995 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) -<span id="L9996" class="LineNr"> 9996 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> -<span id="L9997" class="LineNr"> 9997 </span> 68/push 0/imm32/right/null -<span id="L9998" class="LineNr"> 9998 </span> 68/push 1/imm32/left/int -<span id="L9999" class="LineNr"> 9999 </span> 89/<- %ecx 4/r32/esp -<span id="L10000" class="LineNr">10000 </span> <span class="subxComment"># var var-var2/ecx: var in eax</span> -<span id="L10001" class="LineNr">10001 </span> 68/push <span class="Constant">"eax"</span>/imm32/register -<span id="L10002" class="LineNr">10002 </span> 68/push 0/imm32/no-stack-offset -<span id="L10003" class="LineNr">10003 </span> 68/push 1/imm32/block-depth -<span id="L10004" class="LineNr">10004 </span> 51/push-ecx -<span id="L10005" class="LineNr">10005 </span> 68/push <span class="Constant">"var2"</span>/imm32 -<span id="L10006" class="LineNr">10006 </span> 89/<- %ecx 4/r32/esp -<span id="L10007" class="LineNr">10007 </span> <span class="subxComment"># var var-var1/edx: var</span> -<span id="L10008" class="LineNr">10008 </span> 68/push 0/imm32/no-register -<span id="L10009" class="LineNr">10009 </span> 68/push 8/imm32/stack-offset -<span id="L10010" class="LineNr">10010 </span> 68/push 1/imm32/block-depth -<span id="L10011" class="LineNr">10011 </span> ff 6/subop/push *(ecx+4) <span class="subxComment"># Var-type</span> -<span id="L10012" class="LineNr">10012 </span> 68/push <span class="Constant">"var1"</span>/imm32 -<span id="L10013" class="LineNr">10013 </span> 89/<- %edx 4/r32/esp -<span id="L10014" class="LineNr">10014 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var) = [var2]</span> -<span id="L10015" class="LineNr">10015 </span> 68/push 0/imm32/is-deref:false -<span id="L10016" class="LineNr">10016 </span> 68/push 0/imm32/next -<span id="L10017" class="LineNr">10017 </span> 51/push-ecx/var-var2 +<span id="L9956" class="LineNr"> 9956 </span> <span class="subxComment"># convert</span> +<span id="L9957" class="LineNr"> 9957 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 +<span id="L9958" class="LineNr"> 9958 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6979'>Primitives</a></span> 0) +<span id="L9959" class="LineNr"> 9959 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) +<span id="L9960" class="Folded"> 9960 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> +<span id="L9966" class="LineNr"> 9966 </span> <span class="subxComment"># check output</span> +<span id="L9967" class="LineNr"> 9967 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"81 0/subop/add *(ebp+0x00000008) 0x34/imm32"</span> <span class="Constant">"F - test-add-literal-to-mem"</span>) +<span id="L9968" class="LineNr"> 9968 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L9969" class="LineNr"> 9969 </span> 89/<- %esp 5/r32/ebp +<span id="L9970" class="LineNr"> 9970 </span> 5d/pop-to-ebp +<span id="L9971" class="LineNr"> 9971 </span> c3/return +<span id="L9972" class="LineNr"> 9972 </span> +<span id="L9973" class="LineNr"> 9973 </span><span class="subxTest">test-compare-mem-with-reg</span>: +<span id="L9974" class="LineNr"> 9974 </span> <span class="subxComment"># compare var1, var2/eax</span> +<span id="L9975" class="LineNr"> 9975 </span> <span class="subxComment"># =></span> +<span id="L9976" class="LineNr"> 9976 </span> <span class="subxComment"># 39/compare *(ebp+___) 0/r32/eax</span> +<span id="L9977" class="LineNr"> 9977 </span> <span class="subxComment">#</span> +<span id="L9978" class="LineNr"> 9978 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L9979" class="LineNr"> 9979 </span> 55/push-ebp +<span id="L9980" class="LineNr"> 9980 </span> 89/<- %ebp 4/r32/esp +<span id="L9981" class="LineNr"> 9981 </span> <span class="subxComment"># setup</span> +<span id="L9982" class="LineNr"> 9982 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) +<span id="L9983" class="LineNr"> 9983 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) +<span id="L9984" class="LineNr"> 9984 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> +<span id="L9985" class="LineNr"> 9985 </span> 68/push 0/imm32/right/null +<span id="L9986" class="LineNr"> 9986 </span> 68/push 1/imm32/left/int +<span id="L9987" class="LineNr"> 9987 </span> 89/<- %ecx 4/r32/esp +<span id="L9988" class="LineNr"> 9988 </span> <span class="subxComment"># var var-var2/ecx: var in eax</span> +<span id="L9989" class="LineNr"> 9989 </span> 68/push <span class="Constant">"eax"</span>/imm32/register +<span id="L9990" class="LineNr"> 9990 </span> 68/push 0/imm32/no-stack-offset +<span id="L9991" class="LineNr"> 9991 </span> 68/push 1/imm32/block-depth +<span id="L9992" class="LineNr"> 9992 </span> 51/push-ecx +<span id="L9993" class="LineNr"> 9993 </span> 68/push <span class="Constant">"var2"</span>/imm32 +<span id="L9994" class="LineNr"> 9994 </span> 89/<- %ecx 4/r32/esp +<span id="L9995" class="LineNr"> 9995 </span> <span class="subxComment"># var var-var1/edx: var</span> +<span id="L9996" class="LineNr"> 9996 </span> 68/push 0/imm32/no-register +<span id="L9997" class="LineNr"> 9997 </span> 68/push 8/imm32/stack-offset +<span id="L9998" class="LineNr"> 9998 </span> 68/push 1/imm32/block-depth +<span id="L9999" class="LineNr"> 9999 </span> ff 6/subop/push *(ecx+4) <span class="subxComment"># Var-type</span> +<span id="L10000" class="LineNr">10000 </span> 68/push <span class="Constant">"var1"</span>/imm32 +<span id="L10001" class="LineNr">10001 </span> 89/<- %edx 4/r32/esp +<span id="L10002" class="LineNr">10002 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var) = [var2]</span> +<span id="L10003" class="LineNr">10003 </span> 68/push 0/imm32/is-deref:false +<span id="L10004" class="LineNr">10004 </span> 68/push 0/imm32/next +<span id="L10005" class="LineNr">10005 </span> 51/push-ecx/var-var2 +<span id="L10006" class="LineNr">10006 </span> 89/<- %esi 4/r32/esp +<span id="L10007" class="LineNr">10007 </span> <span class="subxComment"># inouts = [var1, var2]</span> +<span id="L10008" class="LineNr">10008 </span> 68/push 0/imm32/is-deref:false +<span id="L10009" class="LineNr">10009 </span> 56/push-esi +<span id="L10010" class="LineNr">10010 </span> 52/push-edx/var-var1 +<span id="L10011" class="LineNr">10011 </span> 89/<- %esi 4/r32/esp +<span id="L10012" class="LineNr">10012 </span> <span class="subxComment"># var stmt/esi: statement</span> +<span id="L10013" class="LineNr">10013 </span> 68/push 0/imm32/next +<span id="L10014" class="LineNr">10014 </span> 68/push 0/imm32/outputs +<span id="L10015" class="LineNr">10015 </span> 56/push-esi/inouts +<span id="L10016" class="LineNr">10016 </span> 68/push <span class="Constant">"compare"</span>/imm32/operation +<span id="L10017" class="LineNr">10017 </span> 68/push 1/imm32 <span id="L10018" class="LineNr">10018 </span> 89/<- %esi 4/r32/esp -<span id="L10019" class="LineNr">10019 </span> <span class="subxComment"># inouts = [var1, var2]</span> -<span id="L10020" class="LineNr">10020 </span> 68/push 0/imm32/is-deref:false -<span id="L10021" class="LineNr">10021 </span> 56/push-esi -<span id="L10022" class="LineNr">10022 </span> 52/push-edx/var-var1 -<span id="L10023" class="LineNr">10023 </span> 89/<- %esi 4/r32/esp -<span id="L10024" class="LineNr">10024 </span> <span class="subxComment"># var stmt/esi: statement</span> -<span id="L10025" class="LineNr">10025 </span> 68/push 0/imm32/next -<span id="L10026" class="LineNr">10026 </span> 68/push 0/imm32/outputs -<span id="L10027" class="LineNr">10027 </span> 56/push-esi/inouts -<span id="L10028" class="LineNr">10028 </span> 68/push <span class="Constant">"compare"</span>/imm32/operation -<span id="L10029" class="LineNr">10029 </span> 68/push 1/imm32 -<span id="L10030" class="LineNr">10030 </span> 89/<- %esi 4/r32/esp -<span id="L10031" class="LineNr">10031 </span> <span class="subxComment"># convert</span> -<span id="L10032" class="LineNr">10032 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 -<span id="L10033" class="LineNr">10033 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6983'>Primitives</a></span> 0) -<span id="L10034" class="LineNr">10034 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) -<span id="L10035" class="Folded">10035 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L10041" class="LineNr">10041 </span> <span class="subxComment"># check output</span> -<span id="L10042" class="LineNr">10042 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"39/compare-> *(ebp+0x00000008) 0x00000000/r32"</span> <span class="Constant">"F - test-compare-mem-with-reg"</span>) -<span id="L10043" class="LineNr">10043 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L10044" class="LineNr">10044 </span> 89/<- %esp 5/r32/ebp -<span id="L10045" class="LineNr">10045 </span> 5d/pop-to-ebp -<span id="L10046" class="LineNr">10046 </span> c3/return -<span id="L10047" class="LineNr">10047 </span> -<span id="L10048" class="LineNr">10048 </span><span class="subxTest">test-compare-reg-with-mem</span>: -<span id="L10049" class="LineNr">10049 </span> <span class="subxComment"># compare var1/eax, var2</span> -<span id="L10050" class="LineNr">10050 </span> <span class="subxComment"># =></span> -<span id="L10051" class="LineNr">10051 </span> <span class="subxComment"># 3b/compare *(ebp+___) 0/r32/eax</span> -<span id="L10052" class="LineNr">10052 </span> <span class="subxComment">#</span> -<span id="L10053" class="LineNr">10053 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L10054" class="LineNr">10054 </span> 55/push-ebp -<span id="L10055" class="LineNr">10055 </span> 89/<- %ebp 4/r32/esp -<span id="L10056" class="LineNr">10056 </span> <span class="subxComment"># setup</span> -<span id="L10057" class="LineNr">10057 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) -<span id="L10058" class="LineNr">10058 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) -<span id="L10059" class="LineNr">10059 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> -<span id="L10060" class="LineNr">10060 </span> 68/push 0/imm32/right/null -<span id="L10061" class="LineNr">10061 </span> 68/push 1/imm32/left/int -<span id="L10062" class="LineNr">10062 </span> 89/<- %ecx 4/r32/esp -<span id="L10063" class="LineNr">10063 </span> <span class="subxComment"># var var-var1/ecx: var in eax</span> -<span id="L10064" class="LineNr">10064 </span> 68/push <span class="Constant">"eax"</span>/imm32/register -<span id="L10065" class="LineNr">10065 </span> 68/push 0/imm32/no-stack-offset -<span id="L10066" class="LineNr">10066 </span> 68/push 1/imm32/block-depth -<span id="L10067" class="LineNr">10067 </span> 51/push-ecx -<span id="L10068" class="LineNr">10068 </span> 68/push <span class="Constant">"var1"</span>/imm32 -<span id="L10069" class="LineNr">10069 </span> 89/<- %ecx 4/r32/esp -<span id="L10070" class="LineNr">10070 </span> <span class="subxComment"># var var-var2/edx: var</span> -<span id="L10071" class="LineNr">10071 </span> 68/push 0/imm32/no-register -<span id="L10072" class="LineNr">10072 </span> 68/push 8/imm32/stack-offset -<span id="L10073" class="LineNr">10073 </span> 68/push 1/imm32/block-depth -<span id="L10074" class="LineNr">10074 </span> ff 6/subop/push *(ecx+4) <span class="subxComment"># Var-type</span> -<span id="L10075" class="LineNr">10075 </span> 68/push <span class="Constant">"var2"</span>/imm32 -<span id="L10076" class="LineNr">10076 </span> 89/<- %edx 4/r32/esp -<span id="L10077" class="LineNr">10077 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var) = [var2]</span> -<span id="L10078" class="LineNr">10078 </span> 68/push 0/imm32/is-deref:false -<span id="L10079" class="LineNr">10079 </span> 68/push 0/imm32/next -<span id="L10080" class="LineNr">10080 </span> 52/push-edx/var-var2 +<span id="L10019" class="LineNr">10019 </span> <span class="subxComment"># convert</span> +<span id="L10020" class="LineNr">10020 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 +<span id="L10021" class="LineNr">10021 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6979'>Primitives</a></span> 0) +<span id="L10022" class="LineNr">10022 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) +<span id="L10023" class="Folded">10023 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> +<span id="L10029" class="LineNr">10029 </span> <span class="subxComment"># check output</span> +<span id="L10030" class="LineNr">10030 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"39/compare-> *(ebp+0x00000008) 0x00000000/r32"</span> <span class="Constant">"F - test-compare-mem-with-reg"</span>) +<span id="L10031" class="LineNr">10031 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L10032" class="LineNr">10032 </span> 89/<- %esp 5/r32/ebp +<span id="L10033" class="LineNr">10033 </span> 5d/pop-to-ebp +<span id="L10034" class="LineNr">10034 </span> c3/return +<span id="L10035" class="LineNr">10035 </span> +<span id="L10036" class="LineNr">10036 </span><span class="subxTest">test-compare-reg-with-mem</span>: +<span id="L10037" class="LineNr">10037 </span> <span class="subxComment"># compare var1/eax, var2</span> +<span id="L10038" class="LineNr">10038 </span> <span class="subxComment"># =></span> +<span id="L10039" class="LineNr">10039 </span> <span class="subxComment"># 3b/compare *(ebp+___) 0/r32/eax</span> +<span id="L10040" class="LineNr">10040 </span> <span class="subxComment">#</span> +<span id="L10041" class="LineNr">10041 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L10042" class="LineNr">10042 </span> 55/push-ebp +<span id="L10043" class="LineNr">10043 </span> 89/<- %ebp 4/r32/esp +<span id="L10044" class="LineNr">10044 </span> <span class="subxComment"># setup</span> +<span id="L10045" class="LineNr">10045 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) +<span id="L10046" class="LineNr">10046 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) +<span id="L10047" class="LineNr">10047 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> +<span id="L10048" class="LineNr">10048 </span> 68/push 0/imm32/right/null +<span id="L10049" class="LineNr">10049 </span> 68/push 1/imm32/left/int +<span id="L10050" class="LineNr">10050 </span> 89/<- %ecx 4/r32/esp +<span id="L10051" class="LineNr">10051 </span> <span class="subxComment"># var var-var1/ecx: var in eax</span> +<span id="L10052" class="LineNr">10052 </span> 68/push <span class="Constant">"eax"</span>/imm32/register +<span id="L10053" class="LineNr">10053 </span> 68/push 0/imm32/no-stack-offset +<span id="L10054" class="LineNr">10054 </span> 68/push 1/imm32/block-depth +<span id="L10055" class="LineNr">10055 </span> 51/push-ecx +<span id="L10056" class="LineNr">10056 </span> 68/push <span class="Constant">"var1"</span>/imm32 +<span id="L10057" class="LineNr">10057 </span> 89/<- %ecx 4/r32/esp +<span id="L10058" class="LineNr">10058 </span> <span class="subxComment"># var var-var2/edx: var</span> +<span id="L10059" class="LineNr">10059 </span> 68/push 0/imm32/no-register +<span id="L10060" class="LineNr">10060 </span> 68/push 8/imm32/stack-offset +<span id="L10061" class="LineNr">10061 </span> 68/push 1/imm32/block-depth +<span id="L10062" class="LineNr">10062 </span> ff 6/subop/push *(ecx+4) <span class="subxComment"># Var-type</span> +<span id="L10063" class="LineNr">10063 </span> 68/push <span class="Constant">"var2"</span>/imm32 +<span id="L10064" class="LineNr">10064 </span> 89/<- %edx 4/r32/esp +<span id="L10065" class="LineNr">10065 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var) = [var2]</span> +<span id="L10066" class="LineNr">10066 </span> 68/push 0/imm32/is-deref:false +<span id="L10067" class="LineNr">10067 </span> 68/push 0/imm32/next +<span id="L10068" class="LineNr">10068 </span> 52/push-edx/var-var2 +<span id="L10069" class="LineNr">10069 </span> 89/<- %esi 4/r32/esp +<span id="L10070" class="LineNr">10070 </span> <span class="subxComment"># inouts = [var1, var2]</span> +<span id="L10071" class="LineNr">10071 </span> 68/push 0/imm32/is-deref:false +<span id="L10072" class="LineNr">10072 </span> 56/push-esi +<span id="L10073" class="LineNr">10073 </span> 51/push-ecx/var-var1 +<span id="L10074" class="LineNr">10074 </span> 89/<- %esi 4/r32/esp +<span id="L10075" class="LineNr">10075 </span> <span class="subxComment"># var stmt/esi: statement</span> +<span id="L10076" class="LineNr">10076 </span> 68/push 0/imm32/next +<span id="L10077" class="LineNr">10077 </span> 68/push 0/imm32/outputs +<span id="L10078" class="LineNr">10078 </span> 56/push-esi/inouts +<span id="L10079" class="LineNr">10079 </span> 68/push <span class="Constant">"compare"</span>/imm32/operation +<span id="L10080" class="LineNr">10080 </span> 68/push 1/imm32 <span id="L10081" class="LineNr">10081 </span> 89/<- %esi 4/r32/esp -<span id="L10082" class="LineNr">10082 </span> <span class="subxComment"># inouts = [var1, var2]</span> -<span id="L10083" class="LineNr">10083 </span> 68/push 0/imm32/is-deref:false -<span id="L10084" class="LineNr">10084 </span> 56/push-esi -<span id="L10085" class="LineNr">10085 </span> 51/push-ecx/var-var1 -<span id="L10086" class="LineNr">10086 </span> 89/<- %esi 4/r32/esp -<span id="L10087" class="LineNr">10087 </span> <span class="subxComment"># var stmt/esi: statement</span> -<span id="L10088" class="LineNr">10088 </span> 68/push 0/imm32/next -<span id="L10089" class="LineNr">10089 </span> 68/push 0/imm32/outputs -<span id="L10090" class="LineNr">10090 </span> 56/push-esi/inouts -<span id="L10091" class="LineNr">10091 </span> 68/push <span class="Constant">"compare"</span>/imm32/operation -<span id="L10092" class="LineNr">10092 </span> 68/push 1/imm32 -<span id="L10093" class="LineNr">10093 </span> 89/<- %esi 4/r32/esp -<span id="L10094" class="LineNr">10094 </span> <span class="subxComment"># convert</span> -<span id="L10095" class="LineNr">10095 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 -<span id="L10096" class="LineNr">10096 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6983'>Primitives</a></span> 0) -<span id="L10097" class="LineNr">10097 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) -<span id="L10098" class="Folded">10098 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L10104" class="LineNr">10104 </span> <span class="subxComment"># check output</span> -<span id="L10105" class="LineNr">10105 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"3b/compare<- *(ebp+0x00000008) 0x00000000/r32"</span> <span class="Constant">"F - test-compare-reg-with-mem"</span>) -<span id="L10106" class="LineNr">10106 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L10107" class="LineNr">10107 </span> 89/<- %esp 5/r32/ebp -<span id="L10108" class="LineNr">10108 </span> 5d/pop-to-ebp -<span id="L10109" class="LineNr">10109 </span> c3/return -<span id="L10110" class="LineNr">10110 </span> -<span id="L10111" class="LineNr">10111 </span><span class="subxTest">test-compare-mem-with-literal</span>: -<span id="L10112" class="LineNr">10112 </span> <span class="subxComment"># compare var1, 0x34</span> -<span id="L10113" class="LineNr">10113 </span> <span class="subxComment"># =></span> -<span id="L10114" class="LineNr">10114 </span> <span class="subxComment"># 81 7/subop/compare *(ebp+___) 0x34/imm32</span> -<span id="L10115" class="LineNr">10115 </span> <span class="subxComment">#</span> -<span id="L10116" class="LineNr">10116 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L10117" class="LineNr">10117 </span> 55/push-ebp -<span id="L10118" class="LineNr">10118 </span> 89/<- %ebp 4/r32/esp -<span id="L10119" class="LineNr">10119 </span> <span class="subxComment"># setup</span> -<span id="L10120" class="LineNr">10120 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) -<span id="L10121" class="LineNr">10121 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) -<span id="L10122" class="LineNr">10122 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> -<span id="L10123" class="LineNr">10123 </span> 68/push 0/imm32/right/null -<span id="L10124" class="LineNr">10124 </span> 68/push 1/imm32/left/int -<span id="L10125" class="LineNr">10125 </span> 89/<- %ecx 4/r32/esp -<span id="L10126" class="LineNr">10126 </span> <span class="subxComment"># var var-var1/ecx: var</span> -<span id="L10127" class="LineNr">10127 </span> 68/push 0/imm32/no-register -<span id="L10128" class="LineNr">10128 </span> 68/push 8/imm32/stack-offset -<span id="L10129" class="LineNr">10129 </span> 68/push 1/imm32/block-depth -<span id="L10130" class="LineNr">10130 </span> 51/push-ecx -<span id="L10131" class="LineNr">10131 </span> 68/push <span class="Constant">"var1"</span>/imm32 -<span id="L10132" class="LineNr">10132 </span> 89/<- %ecx 4/r32/esp -<span id="L10133" class="LineNr">10133 </span> <span class="subxComment"># var type/edx: (handle tree type-id) = literal</span> -<span id="L10134" class="LineNr">10134 </span> 68/push 0/imm32/right/null -<span id="L10135" class="LineNr">10135 </span> 68/push 0/imm32/left/literal -<span id="L10136" class="LineNr">10136 </span> 89/<- %edx 4/r32/esp -<span id="L10137" class="LineNr">10137 </span> <span class="subxComment"># var var-var2/edx: var literal</span> -<span id="L10138" class="LineNr">10138 </span> 68/push 0/imm32/no-register -<span id="L10139" class="LineNr">10139 </span> 68/push 0/imm32/no-stack-offset -<span id="L10140" class="LineNr">10140 </span> 68/push 1/imm32/block-depth -<span id="L10141" class="LineNr">10141 </span> 52/push-edx -<span id="L10142" class="LineNr">10142 </span> 68/push <span class="Constant">"0x34"</span>/imm32 -<span id="L10143" class="LineNr">10143 </span> 89/<- %edx 4/r32/esp -<span id="L10144" class="LineNr">10144 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var) = [var2]</span> -<span id="L10145" class="LineNr">10145 </span> 68/push 0/imm32/is-deref:false -<span id="L10146" class="LineNr">10146 </span> 68/push 0/imm32/next -<span id="L10147" class="LineNr">10147 </span> 52/push-edx/var-var2 +<span id="L10082" class="LineNr">10082 </span> <span class="subxComment"># convert</span> +<span id="L10083" class="LineNr">10083 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 +<span id="L10084" class="LineNr">10084 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6979'>Primitives</a></span> 0) +<span id="L10085" class="LineNr">10085 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) +<span id="L10086" class="Folded">10086 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> +<span id="L10092" class="LineNr">10092 </span> <span class="subxComment"># check output</span> +<span id="L10093" class="LineNr">10093 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"3b/compare<- *(ebp+0x00000008) 0x00000000/r32"</span> <span class="Constant">"F - test-compare-reg-with-mem"</span>) +<span id="L10094" class="LineNr">10094 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L10095" class="LineNr">10095 </span> 89/<- %esp 5/r32/ebp +<span id="L10096" class="LineNr">10096 </span> 5d/pop-to-ebp +<span id="L10097" class="LineNr">10097 </span> c3/return +<span id="L10098" class="LineNr">10098 </span> +<span id="L10099" class="LineNr">10099 </span><span class="subxTest">test-compare-mem-with-literal</span>: +<span id="L10100" class="LineNr">10100 </span> <span class="subxComment"># compare var1, 0x34</span> +<span id="L10101" class="LineNr">10101 </span> <span class="subxComment"># =></span> +<span id="L10102" class="LineNr">10102 </span> <span class="subxComment"># 81 7/subop/compare *(ebp+___) 0x34/imm32</span> +<span id="L10103" class="LineNr">10103 </span> <span class="subxComment">#</span> +<span id="L10104" class="LineNr">10104 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L10105" class="LineNr">10105 </span> 55/push-ebp +<span id="L10106" class="LineNr">10106 </span> 89/<- %ebp 4/r32/esp +<span id="L10107" class="LineNr">10107 </span> <span class="subxComment"># setup</span> +<span id="L10108" class="LineNr">10108 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) +<span id="L10109" class="LineNr">10109 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) +<span id="L10110" class="LineNr">10110 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> +<span id="L10111" class="LineNr">10111 </span> 68/push 0/imm32/right/null +<span id="L10112" class="LineNr">10112 </span> 68/push 1/imm32/left/int +<span id="L10113" class="LineNr">10113 </span> 89/<- %ecx 4/r32/esp +<span id="L10114" class="LineNr">10114 </span> <span class="subxComment"># var var-var1/ecx: var</span> +<span id="L10115" class="LineNr">10115 </span> 68/push 0/imm32/no-register +<span id="L10116" class="LineNr">10116 </span> 68/push 8/imm32/stack-offset +<span id="L10117" class="LineNr">10117 </span> 68/push 1/imm32/block-depth +<span id="L10118" class="LineNr">10118 </span> 51/push-ecx +<span id="L10119" class="LineNr">10119 </span> 68/push <span class="Constant">"var1"</span>/imm32 +<span id="L10120" class="LineNr">10120 </span> 89/<- %ecx 4/r32/esp +<span id="L10121" class="LineNr">10121 </span> <span class="subxComment"># var type/edx: (handle tree type-id) = literal</span> +<span id="L10122" class="LineNr">10122 </span> 68/push 0/imm32/right/null +<span id="L10123" class="LineNr">10123 </span> 68/push 0/imm32/left/literal +<span id="L10124" class="LineNr">10124 </span> 89/<- %edx 4/r32/esp +<span id="L10125" class="LineNr">10125 </span> <span class="subxComment"># var var-var2/edx: var literal</span> +<span id="L10126" class="LineNr">10126 </span> 68/push 0/imm32/no-register +<span id="L10127" class="LineNr">10127 </span> 68/push 0/imm32/no-stack-offset +<span id="L10128" class="LineNr">10128 </span> 68/push 1/imm32/block-depth +<span id="L10129" class="LineNr">10129 </span> 52/push-edx +<span id="L10130" class="LineNr">10130 </span> 68/push <span class="Constant">"0x34"</span>/imm32 +<span id="L10131" class="LineNr">10131 </span> 89/<- %edx 4/r32/esp +<span id="L10132" class="LineNr">10132 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var) = [var2]</span> +<span id="L10133" class="LineNr">10133 </span> 68/push 0/imm32/is-deref:false +<span id="L10134" class="LineNr">10134 </span> 68/push 0/imm32/next +<span id="L10135" class="LineNr">10135 </span> 52/push-edx/var-var2 +<span id="L10136" class="LineNr">10136 </span> 89/<- %esi 4/r32/esp +<span id="L10137" class="LineNr">10137 </span> <span class="subxComment"># inouts = [var1, var2]</span> +<span id="L10138" class="LineNr">10138 </span> 68/push 0/imm32/is-deref:false +<span id="L10139" class="LineNr">10139 </span> 56/push-esi/next +<span id="L10140" class="LineNr">10140 </span> 51/push-ecx/var-var1 +<span id="L10141" class="LineNr">10141 </span> 89/<- %esi 4/r32/esp +<span id="L10142" class="LineNr">10142 </span> <span class="subxComment"># var stmt/esi: statement</span> +<span id="L10143" class="LineNr">10143 </span> 68/push 0/imm32/next +<span id="L10144" class="LineNr">10144 </span> 68/push 0/imm32/outputs +<span id="L10145" class="LineNr">10145 </span> 56/push-esi/inouts +<span id="L10146" class="LineNr">10146 </span> 68/push <span class="Constant">"compare"</span>/imm32/operation +<span id="L10147" class="LineNr">10147 </span> 68/push 1/imm32 <span id="L10148" class="LineNr">10148 </span> 89/<- %esi 4/r32/esp -<span id="L10149" class="LineNr">10149 </span> <span class="subxComment"># inouts = [var1, var2]</span> -<span id="L10150" class="LineNr">10150 </span> 68/push 0/imm32/is-deref:false -<span id="L10151" class="LineNr">10151 </span> 56/push-esi/next -<span id="L10152" class="LineNr">10152 </span> 51/push-ecx/var-var1 -<span id="L10153" class="LineNr">10153 </span> 89/<- %esi 4/r32/esp -<span id="L10154" class="LineNr">10154 </span> <span class="subxComment"># var stmt/esi: statement</span> -<span id="L10155" class="LineNr">10155 </span> 68/push 0/imm32/next -<span id="L10156" class="LineNr">10156 </span> 68/push 0/imm32/outputs -<span id="L10157" class="LineNr">10157 </span> 56/push-esi/inouts -<span id="L10158" class="LineNr">10158 </span> 68/push <span class="Constant">"compare"</span>/imm32/operation -<span id="L10159" class="LineNr">10159 </span> 68/push 1/imm32 -<span id="L10160" class="LineNr">10160 </span> 89/<- %esi 4/r32/esp -<span id="L10161" class="LineNr">10161 </span> <span class="subxComment"># convert</span> -<span id="L10162" class="LineNr">10162 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 -<span id="L10163" class="LineNr">10163 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6983'>Primitives</a></span> 0) -<span id="L10164" class="LineNr">10164 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) -<span id="L10165" class="Folded">10165 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L10171" class="LineNr">10171 </span> <span class="subxComment"># check output</span> -<span id="L10172" class="LineNr">10172 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"81 7/subop/compare *(ebp+0x00000008) 0x34/imm32"</span> <span class="Constant">"F - test-compare-mem-with-literal"</span>) -<span id="L10173" class="LineNr">10173 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L10174" class="LineNr">10174 </span> 89/<- %esp 5/r32/ebp -<span id="L10175" class="LineNr">10175 </span> 5d/pop-to-ebp -<span id="L10176" class="LineNr">10176 </span> c3/return -<span id="L10177" class="LineNr">10177 </span> -<span id="L10178" class="LineNr">10178 </span><span class="subxTest">test-compare-eax-with-literal</span>: -<span id="L10179" class="LineNr">10179 </span> <span class="subxComment"># compare var1/eax 0x34</span> -<span id="L10180" class="LineNr">10180 </span> <span class="subxComment"># =></span> -<span id="L10181" class="LineNr">10181 </span> <span class="subxComment"># 3d/compare-eax-with 0x34/imm32</span> -<span id="L10182" class="LineNr">10182 </span> <span class="subxComment">#</span> -<span id="L10183" class="LineNr">10183 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L10184" class="LineNr">10184 </span> 55/push-ebp -<span id="L10185" class="LineNr">10185 </span> 89/<- %ebp 4/r32/esp -<span id="L10186" class="LineNr">10186 </span> <span class="subxComment"># setup</span> -<span id="L10187" class="LineNr">10187 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) -<span id="L10188" class="LineNr">10188 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) -<span id="L10189" class="LineNr">10189 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> -<span id="L10190" class="LineNr">10190 </span> 68/push 0/imm32/right/null -<span id="L10191" class="LineNr">10191 </span> 68/push 1/imm32/left/int -<span id="L10192" class="LineNr">10192 </span> 89/<- %ecx 4/r32/esp -<span id="L10193" class="LineNr">10193 </span> <span class="subxComment"># var var-var1/ecx: var in eax</span> -<span id="L10194" class="LineNr">10194 </span> 68/push <span class="Constant">"eax"</span>/imm32/register -<span id="L10195" class="LineNr">10195 </span> 68/push 0/imm32/no-stack-offset -<span id="L10196" class="LineNr">10196 </span> 68/push 1/imm32/block-depth -<span id="L10197" class="LineNr">10197 </span> 51/push-ecx -<span id="L10198" class="LineNr">10198 </span> 68/push <span class="Constant">"var1"</span>/imm32 -<span id="L10199" class="LineNr">10199 </span> 89/<- %ecx 4/r32/esp -<span id="L10200" class="LineNr">10200 </span> <span class="subxComment"># var type/edx: (handle tree type-id) = literal</span> -<span id="L10201" class="LineNr">10201 </span> 68/push 0/imm32/right/null -<span id="L10202" class="LineNr">10202 </span> 68/push 0/imm32/left/literal -<span id="L10203" class="LineNr">10203 </span> 89/<- %edx 4/r32/esp -<span id="L10204" class="LineNr">10204 </span> <span class="subxComment"># var var-var2/edx: var literal</span> -<span id="L10205" class="LineNr">10205 </span> 68/push 0/imm32/no-register -<span id="L10206" class="LineNr">10206 </span> 68/push 0/imm32/no-stack-offset -<span id="L10207" class="LineNr">10207 </span> 68/push 1/imm32/block-depth -<span id="L10208" class="LineNr">10208 </span> 52/push-edx -<span id="L10209" class="LineNr">10209 </span> 68/push <span class="Constant">"0x34"</span>/imm32 -<span id="L10210" class="LineNr">10210 </span> 89/<- %edx 4/r32/esp -<span id="L10211" class="LineNr">10211 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var) = [var2]</span> -<span id="L10212" class="LineNr">10212 </span> 68/push 0/imm32/is-deref:false -<span id="L10213" class="LineNr">10213 </span> 68/push 0/imm32/next -<span id="L10214" class="LineNr">10214 </span> 52/push-edx/var-var2 +<span id="L10149" class="LineNr">10149 </span> <span class="subxComment"># convert</span> +<span id="L10150" class="LineNr">10150 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 +<span id="L10151" class="LineNr">10151 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6979'>Primitives</a></span> 0) +<span id="L10152" class="LineNr">10152 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) +<span id="L10153" class="Folded">10153 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> +<span id="L10159" class="LineNr">10159 </span> <span class="subxComment"># check output</span> +<span id="L10160" class="LineNr">10160 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"81 7/subop/compare *(ebp+0x00000008) 0x34/imm32"</span> <span class="Constant">"F - test-compare-mem-with-literal"</span>) +<span id="L10161" class="LineNr">10161 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L10162" class="LineNr">10162 </span> 89/<- %esp 5/r32/ebp +<span id="L10163" class="LineNr">10163 </span> 5d/pop-to-ebp +<span id="L10164" class="LineNr">10164 </span> c3/return +<span id="L10165" class="LineNr">10165 </span> +<span id="L10166" class="LineNr">10166 </span><span class="subxTest">test-compare-eax-with-literal</span>: +<span id="L10167" class="LineNr">10167 </span> <span class="subxComment"># compare var1/eax 0x34</span> +<span id="L10168" class="LineNr">10168 </span> <span class="subxComment"># =></span> +<span id="L10169" class="LineNr">10169 </span> <span class="subxComment"># 3d/compare-eax-with 0x34/imm32</span> +<span id="L10170" class="LineNr">10170 </span> <span class="subxComment">#</span> +<span id="L10171" class="LineNr">10171 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L10172" class="LineNr">10172 </span> 55/push-ebp +<span id="L10173" class="LineNr">10173 </span> 89/<- %ebp 4/r32/esp +<span id="L10174" class="LineNr">10174 </span> <span class="subxComment"># setup</span> +<span id="L10175" class="LineNr">10175 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) +<span id="L10176" class="LineNr">10176 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) +<span id="L10177" class="LineNr">10177 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> +<span id="L10178" class="LineNr">10178 </span> 68/push 0/imm32/right/null +<span id="L10179" class="LineNr">10179 </span> 68/push 1/imm32/left/int +<span id="L10180" class="LineNr">10180 </span> 89/<- %ecx 4/r32/esp +<span id="L10181" class="LineNr">10181 </span> <span class="subxComment"># var var-var1/ecx: var in eax</span> +<span id="L10182" class="LineNr">10182 </span> 68/push <span class="Constant">"eax"</span>/imm32/register +<span id="L10183" class="LineNr">10183 </span> 68/push 0/imm32/no-stack-offset +<span id="L10184" class="LineNr">10184 </span> 68/push 1/imm32/block-depth +<span id="L10185" class="LineNr">10185 </span> 51/push-ecx +<span id="L10186" class="LineNr">10186 </span> 68/push <span class="Constant">"var1"</span>/imm32 +<span id="L10187" class="LineNr">10187 </span> 89/<- %ecx 4/r32/esp +<span id="L10188" class="LineNr">10188 </span> <span class="subxComment"># var type/edx: (handle tree type-id) = literal</span> +<span id="L10189" class="LineNr">10189 </span> 68/push 0/imm32/right/null +<span id="L10190" class="LineNr">10190 </span> 68/push 0/imm32/left/literal +<span id="L10191" class="LineNr">10191 </span> 89/<- %edx 4/r32/esp +<span id="L10192" class="LineNr">10192 </span> <span class="subxComment"># var var-var2/edx: var literal</span> +<span id="L10193" class="LineNr">10193 </span> 68/push 0/imm32/no-register +<span id="L10194" class="LineNr">10194 </span> 68/push 0/imm32/no-stack-offset +<span id="L10195" class="LineNr">10195 </span> 68/push 1/imm32/block-depth +<span id="L10196" class="LineNr">10196 </span> 52/push-edx +<span id="L10197" class="LineNr">10197 </span> 68/push <span class="Constant">"0x34"</span>/imm32 +<span id="L10198" class="LineNr">10198 </span> 89/<- %edx 4/r32/esp +<span id="L10199" class="LineNr">10199 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var) = [var2]</span> +<span id="L10200" class="LineNr">10200 </span> 68/push 0/imm32/is-deref:false +<span id="L10201" class="LineNr">10201 </span> 68/push 0/imm32/next +<span id="L10202" class="LineNr">10202 </span> 52/push-edx/var-var2 +<span id="L10203" class="LineNr">10203 </span> 89/<- %esi 4/r32/esp +<span id="L10204" class="LineNr">10204 </span> <span class="subxComment"># inouts = [var1, var2]</span> +<span id="L10205" class="LineNr">10205 </span> 68/push 0/imm32/is-deref:false +<span id="L10206" class="LineNr">10206 </span> 56/push-esi/next +<span id="L10207" class="LineNr">10207 </span> 51/push-ecx/var-var1 +<span id="L10208" class="LineNr">10208 </span> 89/<- %esi 4/r32/esp +<span id="L10209" class="LineNr">10209 </span> <span class="subxComment"># var stmt/esi: statement</span> +<span id="L10210" class="LineNr">10210 </span> 68/push 0/imm32/next +<span id="L10211" class="LineNr">10211 </span> 68/push 0/imm32/outputs +<span id="L10212" class="LineNr">10212 </span> 56/push-esi/inouts +<span id="L10213" class="LineNr">10213 </span> 68/push <span class="Constant">"compare"</span>/imm32/operation +<span id="L10214" class="LineNr">10214 </span> 68/push 1/imm32/regular-stmt <span id="L10215" class="LineNr">10215 </span> 89/<- %esi 4/r32/esp -<span id="L10216" class="LineNr">10216 </span> <span class="subxComment"># inouts = [var1, var2]</span> -<span id="L10217" class="LineNr">10217 </span> 68/push 0/imm32/is-deref:false -<span id="L10218" class="LineNr">10218 </span> 56/push-esi/next -<span id="L10219" class="LineNr">10219 </span> 51/push-ecx/var-var1 -<span id="L10220" class="LineNr">10220 </span> 89/<- %esi 4/r32/esp -<span id="L10221" class="LineNr">10221 </span> <span class="subxComment"># var stmt/esi: statement</span> -<span id="L10222" class="LineNr">10222 </span> 68/push 0/imm32/next -<span id="L10223" class="LineNr">10223 </span> 68/push 0/imm32/outputs -<span id="L10224" class="LineNr">10224 </span> 56/push-esi/inouts -<span id="L10225" class="LineNr">10225 </span> 68/push <span class="Constant">"compare"</span>/imm32/operation -<span id="L10226" class="LineNr">10226 </span> 68/push 1/imm32/regular-stmt -<span id="L10227" class="LineNr">10227 </span> 89/<- %esi 4/r32/esp -<span id="L10228" class="LineNr">10228 </span> <span class="subxComment"># convert</span> -<span id="L10229" class="LineNr">10229 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 -<span id="L10230" class="LineNr">10230 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6983'>Primitives</a></span> 0) -<span id="L10231" class="LineNr">10231 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) -<span id="L10232" class="Folded">10232 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L10238" class="LineNr">10238 </span> <span class="subxComment"># check output</span> -<span id="L10239" class="LineNr">10239 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"3d/compare-eax-with 0x34/imm32"</span> <span class="Constant">"F - test-compare-eax-with-literal"</span>) -<span id="L10240" class="LineNr">10240 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L10241" class="LineNr">10241 </span> 89/<- %esp 5/r32/ebp -<span id="L10242" class="LineNr">10242 </span> 5d/pop-to-ebp -<span id="L10243" class="LineNr">10243 </span> c3/return -<span id="L10244" class="LineNr">10244 </span> -<span id="L10245" class="LineNr">10245 </span><span class="subxTest">test-compare-reg-with-literal</span>: -<span id="L10246" class="LineNr">10246 </span> <span class="subxComment"># compare var1/ecx 0x34</span> -<span id="L10247" class="LineNr">10247 </span> <span class="subxComment"># =></span> -<span id="L10248" class="LineNr">10248 </span> <span class="subxComment"># 81 7/subop/compare %ecx 0x34/imm32</span> -<span id="L10249" class="LineNr">10249 </span> <span class="subxComment">#</span> -<span id="L10250" class="LineNr">10250 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L10251" class="LineNr">10251 </span> 55/push-ebp -<span id="L10252" class="LineNr">10252 </span> 89/<- %ebp 4/r32/esp -<span id="L10253" class="LineNr">10253 </span> <span class="subxComment"># setup</span> -<span id="L10254" class="LineNr">10254 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) -<span id="L10255" class="LineNr">10255 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) -<span id="L10256" class="LineNr">10256 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> -<span id="L10257" class="LineNr">10257 </span> 68/push 0/imm32/right/null -<span id="L10258" class="LineNr">10258 </span> 68/push 1/imm32/left/int -<span id="L10259" class="LineNr">10259 </span> 89/<- %ecx 4/r32/esp -<span id="L10260" class="LineNr">10260 </span> <span class="subxComment"># var var-var1/ecx: var in ecx</span> -<span id="L10261" class="LineNr">10261 </span> 68/push <span class="Constant">"ecx"</span>/imm32/register -<span id="L10262" class="LineNr">10262 </span> 68/push 0/imm32/no-stack-offset -<span id="L10263" class="LineNr">10263 </span> 68/push 1/imm32/block-depth -<span id="L10264" class="LineNr">10264 </span> 51/push-ecx -<span id="L10265" class="LineNr">10265 </span> 68/push <span class="Constant">"var1"</span>/imm32 -<span id="L10266" class="LineNr">10266 </span> 89/<- %ecx 4/r32/esp -<span id="L10267" class="LineNr">10267 </span> <span class="subxComment"># var type/edx: (handle tree type-id) = literal</span> -<span id="L10268" class="LineNr">10268 </span> 68/push 0/imm32/right/null -<span id="L10269" class="LineNr">10269 </span> 68/push 0/imm32/left/literal -<span id="L10270" class="LineNr">10270 </span> 89/<- %edx 4/r32/esp -<span id="L10271" class="LineNr">10271 </span> <span class="subxComment"># var var-var2/edx: var literal</span> -<span id="L10272" class="LineNr">10272 </span> 68/push 0/imm32/no-register -<span id="L10273" class="LineNr">10273 </span> 68/push 0/imm32/no-stack-offset -<span id="L10274" class="LineNr">10274 </span> 68/push 1/imm32/block-depth -<span id="L10275" class="LineNr">10275 </span> 52/push-edx -<span id="L10276" class="LineNr">10276 </span> 68/push <span class="Constant">"0x34"</span>/imm32 -<span id="L10277" class="LineNr">10277 </span> 89/<- %edx 4/r32/esp -<span id="L10278" class="LineNr">10278 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var) = [var2]</span> -<span id="L10279" class="LineNr">10279 </span> 68/push 0/imm32/is-deref:false -<span id="L10280" class="LineNr">10280 </span> 68/push 0/imm32/next -<span id="L10281" class="LineNr">10281 </span> 52/push-edx/var-var2 +<span id="L10216" class="LineNr">10216 </span> <span class="subxComment"># convert</span> +<span id="L10217" class="LineNr">10217 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 +<span id="L10218" class="LineNr">10218 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6979'>Primitives</a></span> 0) +<span id="L10219" class="LineNr">10219 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) +<span id="L10220" class="Folded">10220 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> +<span id="L10226" class="LineNr">10226 </span> <span class="subxComment"># check output</span> +<span id="L10227" class="LineNr">10227 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"3d/compare-eax-with 0x34/imm32"</span> <span class="Constant">"F - test-compare-eax-with-literal"</span>) +<span id="L10228" class="LineNr">10228 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L10229" class="LineNr">10229 </span> 89/<- %esp 5/r32/ebp +<span id="L10230" class="LineNr">10230 </span> 5d/pop-to-ebp +<span id="L10231" class="LineNr">10231 </span> c3/return +<span id="L10232" class="LineNr">10232 </span> +<span id="L10233" class="LineNr">10233 </span><span class="subxTest">test-compare-reg-with-literal</span>: +<span id="L10234" class="LineNr">10234 </span> <span class="subxComment"># compare var1/ecx 0x34</span> +<span id="L10235" class="LineNr">10235 </span> <span class="subxComment"># =></span> +<span id="L10236" class="LineNr">10236 </span> <span class="subxComment"># 81 7/subop/compare %ecx 0x34/imm32</span> +<span id="L10237" class="LineNr">10237 </span> <span class="subxComment">#</span> +<span id="L10238" class="LineNr">10238 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L10239" class="LineNr">10239 </span> 55/push-ebp +<span id="L10240" class="LineNr">10240 </span> 89/<- %ebp 4/r32/esp +<span id="L10241" class="LineNr">10241 </span> <span class="subxComment"># setup</span> +<span id="L10242" class="LineNr">10242 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) +<span id="L10243" class="LineNr">10243 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) +<span id="L10244" class="LineNr">10244 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> +<span id="L10245" class="LineNr">10245 </span> 68/push 0/imm32/right/null +<span id="L10246" class="LineNr">10246 </span> 68/push 1/imm32/left/int +<span id="L10247" class="LineNr">10247 </span> 89/<- %ecx 4/r32/esp +<span id="L10248" class="LineNr">10248 </span> <span class="subxComment"># var var-var1/ecx: var in ecx</span> +<span id="L10249" class="LineNr">10249 </span> 68/push <span class="Constant">"ecx"</span>/imm32/register +<span id="L10250" class="LineNr">10250 </span> 68/push 0/imm32/no-stack-offset +<span id="L10251" class="LineNr">10251 </span> 68/push 1/imm32/block-depth +<span id="L10252" class="LineNr">10252 </span> 51/push-ecx +<span id="L10253" class="LineNr">10253 </span> 68/push <span class="Constant">"var1"</span>/imm32 +<span id="L10254" class="LineNr">10254 </span> 89/<- %ecx 4/r32/esp +<span id="L10255" class="LineNr">10255 </span> <span class="subxComment"># var type/edx: (handle tree type-id) = literal</span> +<span id="L10256" class="LineNr">10256 </span> 68/push 0/imm32/right/null +<span id="L10257" class="LineNr">10257 </span> 68/push 0/imm32/left/literal +<span id="L10258" class="LineNr">10258 </span> 89/<- %edx 4/r32/esp +<span id="L10259" class="LineNr">10259 </span> <span class="subxComment"># var var-var2/edx: var literal</span> +<span id="L10260" class="LineNr">10260 </span> 68/push 0/imm32/no-register +<span id="L10261" class="LineNr">10261 </span> 68/push 0/imm32/no-stack-offset +<span id="L10262" class="LineNr">10262 </span> 68/push 1/imm32/block-depth +<span id="L10263" class="LineNr">10263 </span> 52/push-edx +<span id="L10264" class="LineNr">10264 </span> 68/push <span class="Constant">"0x34"</span>/imm32 +<span id="L10265" class="LineNr">10265 </span> 89/<- %edx 4/r32/esp +<span id="L10266" class="LineNr">10266 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var) = [var2]</span> +<span id="L10267" class="LineNr">10267 </span> 68/push 0/imm32/is-deref:false +<span id="L10268" class="LineNr">10268 </span> 68/push 0/imm32/next +<span id="L10269" class="LineNr">10269 </span> 52/push-edx/var-var2 +<span id="L10270" class="LineNr">10270 </span> 89/<- %esi 4/r32/esp +<span id="L10271" class="LineNr">10271 </span> <span class="subxComment"># inouts = [var1, var2]</span> +<span id="L10272" class="LineNr">10272 </span> 68/push 0/imm32/is-deref:false +<span id="L10273" class="LineNr">10273 </span> 56/push-esi/next +<span id="L10274" class="LineNr">10274 </span> 51/push-ecx/var-var1 +<span id="L10275" class="LineNr">10275 </span> 89/<- %esi 4/r32/esp +<span id="L10276" class="LineNr">10276 </span> <span class="subxComment"># var stmt/esi: statement</span> +<span id="L10277" class="LineNr">10277 </span> 68/push 0/imm32/next +<span id="L10278" class="LineNr">10278 </span> 68/push 0/imm32/outputs +<span id="L10279" class="LineNr">10279 </span> 56/push-esi/inouts +<span id="L10280" class="LineNr">10280 </span> 68/push <span class="Constant">"compare"</span>/imm32/operation +<span id="L10281" class="LineNr">10281 </span> 68/push 1/imm32/regular-stmt <span id="L10282" class="LineNr">10282 </span> 89/<- %esi 4/r32/esp -<span id="L10283" class="LineNr">10283 </span> <span class="subxComment"># inouts = [var1, var2]</span> -<span id="L10284" class="LineNr">10284 </span> 68/push 0/imm32/is-deref:false -<span id="L10285" class="LineNr">10285 </span> 56/push-esi/next -<span id="L10286" class="LineNr">10286 </span> 51/push-ecx/var-var1 -<span id="L10287" class="LineNr">10287 </span> 89/<- %esi 4/r32/esp -<span id="L10288" class="LineNr">10288 </span> <span class="subxComment"># var stmt/esi: statement</span> -<span id="L10289" class="LineNr">10289 </span> 68/push 0/imm32/next -<span id="L10290" class="LineNr">10290 </span> 68/push 0/imm32/outputs -<span id="L10291" class="LineNr">10291 </span> 56/push-esi/inouts -<span id="L10292" class="LineNr">10292 </span> 68/push <span class="Constant">"compare"</span>/imm32/operation -<span id="L10293" class="LineNr">10293 </span> 68/push 1/imm32/regular-stmt -<span id="L10294" class="LineNr">10294 </span> 89/<- %esi 4/r32/esp -<span id="L10295" class="LineNr">10295 </span> <span class="subxComment"># convert</span> -<span id="L10296" class="LineNr">10296 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 -<span id="L10297" class="LineNr">10297 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6983'>Primitives</a></span> 0) -<span id="L10298" class="LineNr">10298 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) -<span id="L10299" class="Folded">10299 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L10305" class="LineNr">10305 </span> <span class="subxComment"># check output</span> -<span id="L10306" class="LineNr">10306 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"81 7/subop/compare %ecx 0x34/imm32"</span> <span class="Constant">"F - test-compare-reg-with-literal"</span>) -<span id="L10307" class="LineNr">10307 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L10308" class="LineNr">10308 </span> 89/<- %esp 5/r32/ebp -<span id="L10309" class="LineNr">10309 </span> 5d/pop-to-ebp -<span id="L10310" class="LineNr">10310 </span> c3/return -<span id="L10311" class="LineNr">10311 </span> -<span id="L10312" class="LineNr">10312 </span><span class="subxTest">test-emit-subx-stmt-function-call</span>: -<span id="L10313" class="LineNr">10313 </span> <span class="subxComment"># Call a function on a variable on the stack.</span> -<span id="L10314" class="LineNr">10314 </span> <span class="subxComment"># f foo</span> -<span id="L10315" class="LineNr">10315 </span> <span class="subxComment"># =></span> -<span id="L10316" class="LineNr">10316 </span> <span class="subxComment"># (f2 *(ebp-8))</span> -<span id="L10317" class="LineNr">10317 </span> <span class="subxComment"># (Changing the function name supports overloading in general, but here it</span> -<span id="L10318" class="LineNr">10318 </span> <span class="subxComment"># just serves to help disambiguate things.)</span> +<span id="L10283" class="LineNr">10283 </span> <span class="subxComment"># convert</span> +<span id="L10284" class="LineNr">10284 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 +<span id="L10285" class="LineNr">10285 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi <span class="SpecialChar"><a href='mu.subx.html#L6979'>Primitives</a></span> 0) +<span id="L10286" class="LineNr">10286 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) +<span id="L10287" class="Folded">10287 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> +<span id="L10293" class="LineNr">10293 </span> <span class="subxComment"># check output</span> +<span id="L10294" class="LineNr">10294 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"81 7/subop/compare %ecx 0x34/imm32"</span> <span class="Constant">"F - test-compare-reg-with-literal"</span>) +<span id="L10295" class="LineNr">10295 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L10296" class="LineNr">10296 </span> 89/<- %esp 5/r32/ebp +<span id="L10297" class="LineNr">10297 </span> 5d/pop-to-ebp +<span id="L10298" class="LineNr">10298 </span> c3/return +<span id="L10299" class="LineNr">10299 </span> +<span id="L10300" class="LineNr">10300 </span><span class="subxTest">test-emit-subx-stmt-function-call</span>: +<span id="L10301" class="LineNr">10301 </span> <span class="subxComment"># Call a function on a variable on the stack.</span> +<span id="L10302" class="LineNr">10302 </span> <span class="subxComment"># f foo</span> +<span id="L10303" class="LineNr">10303 </span> <span class="subxComment"># =></span> +<span id="L10304" class="LineNr">10304 </span> <span class="subxComment"># (f2 *(ebp-8))</span> +<span id="L10305" class="LineNr">10305 </span> <span class="subxComment"># (Changing the function name supports overloading in general, but here it</span> +<span id="L10306" class="LineNr">10306 </span> <span class="subxComment"># just serves to help disambiguate things.)</span> +<span id="L10307" class="LineNr">10307 </span> <span class="subxComment">#</span> +<span id="L10308" class="LineNr">10308 </span> <span class="subxComment"># There's a variable on the var stack as follows:</span> +<span id="L10309" class="LineNr">10309 </span> <span class="subxComment"># name: 'foo'</span> +<span id="L10310" class="LineNr">10310 </span> <span class="subxComment"># type: int</span> +<span id="L10311" class="LineNr">10311 </span> <span class="subxComment"># stack-offset: -8</span> +<span id="L10312" class="LineNr">10312 </span> <span class="subxComment">#</span> +<span id="L10313" class="LineNr">10313 </span> <span class="subxComment"># There's nothing in primitives.</span> +<span id="L10314" class="LineNr">10314 </span> <span class="subxComment">#</span> +<span id="L10315" class="LineNr">10315 </span> <span class="subxComment"># There's a function with this info:</span> +<span id="L10316" class="LineNr">10316 </span> <span class="subxComment"># name: 'f'</span> +<span id="L10317" class="LineNr">10317 </span> <span class="subxComment"># inout: int/mem</span> +<span id="L10318" class="LineNr">10318 </span> <span class="subxComment"># value: 'f2'</span> <span id="L10319" class="LineNr">10319 </span> <span class="subxComment">#</span> -<span id="L10320" class="LineNr">10320 </span> <span class="subxComment"># There's a variable on the var stack as follows:</span> -<span id="L10321" class="LineNr">10321 </span> <span class="subxComment"># name: 'foo'</span> -<span id="L10322" class="LineNr">10322 </span> <span class="subxComment"># type: int</span> -<span id="L10323" class="LineNr">10323 </span> <span class="subxComment"># stack-offset: -8</span> -<span id="L10324" class="LineNr">10324 </span> <span class="subxComment">#</span> -<span id="L10325" class="LineNr">10325 </span> <span class="subxComment"># There's nothing in primitives.</span> -<span id="L10326" class="LineNr">10326 </span> <span class="subxComment">#</span> -<span id="L10327" class="LineNr">10327 </span> <span class="subxComment"># There's a function with this info:</span> -<span id="L10328" class="LineNr">10328 </span> <span class="subxComment"># name: 'f'</span> -<span id="L10329" class="LineNr">10329 </span> <span class="subxComment"># inout: int/mem</span> -<span id="L10330" class="LineNr">10330 </span> <span class="subxComment"># value: 'f2'</span> -<span id="L10331" class="LineNr">10331 </span> <span class="subxComment">#</span> -<span id="L10332" class="LineNr">10332 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L10333" class="LineNr">10333 </span> 55/push-ebp -<span id="L10334" class="LineNr">10334 </span> 89/<- %ebp 4/r32/esp -<span id="L10335" class="LineNr">10335 </span> <span class="subxComment"># setup</span> -<span id="L10336" class="LineNr">10336 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) -<span id="L10337" class="LineNr">10337 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) -<span id="L10338" class="LineNr">10338 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> -<span id="L10339" class="LineNr">10339 </span> 68/push 0/imm32/right/null -<span id="L10340" class="LineNr">10340 </span> 68/push 1/imm32/left/int -<span id="L10341" class="LineNr">10341 </span> 89/<- %ecx 4/r32/esp -<span id="L10342" class="LineNr">10342 </span> <span class="subxComment"># var var-foo/ecx: var</span> -<span id="L10343" class="LineNr">10343 </span> 68/push 0/imm32/no-register -<span id="L10344" class="LineNr">10344 </span> 68/push -8/imm32/stack-offset -<span id="L10345" class="LineNr">10345 </span> 68/push 0/imm32/block-depth -<span id="L10346" class="LineNr">10346 </span> 51/push-ecx -<span id="L10347" class="LineNr">10347 </span> 68/push <span class="Constant">"foo"</span>/imm32 -<span id="L10348" class="LineNr">10348 </span> 89/<- %ecx 4/r32/esp -<span id="L10349" class="LineNr">10349 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var)</span> -<span id="L10350" class="LineNr">10350 </span> 68/push 0/imm32/is-deref:false -<span id="L10351" class="LineNr">10351 </span> 68/push 0/imm32/next -<span id="L10352" class="LineNr">10352 </span> 51/push-ecx/var-foo -<span id="L10353" class="LineNr">10353 </span> 89/<- %esi 4/r32/esp -<span id="L10354" class="LineNr">10354 </span> <span class="subxComment"># var stmt/esi: statement</span> -<span id="L10355" class="LineNr">10355 </span> 68/push 0/imm32/next -<span id="L10356" class="LineNr">10356 </span> 68/push 0/imm32/outputs -<span id="L10357" class="LineNr">10357 </span> 56/push-esi/inouts -<span id="L10358" class="LineNr">10358 </span> 68/push <span class="Constant">"f"</span>/imm32/operation -<span id="L10359" class="LineNr">10359 </span> 68/push 1/imm32 -<span id="L10360" class="LineNr">10360 </span> 89/<- %esi 4/r32/esp -<span id="L10361" class="LineNr">10361 </span> <span class="subxComment"># var functions/ebx: function</span> -<span id="L10362" class="LineNr">10362 </span> 68/push 0/imm32/next -<span id="L10363" class="LineNr">10363 </span> 68/push 0/imm32/body -<span id="L10364" class="LineNr">10364 </span> 68/push 0/imm32/outputs -<span id="L10365" class="LineNr">10365 </span> 51/push-ecx/inouts <span class="subxComment"># hack; in practice we won't have the same var in function definition and call</span> -<span id="L10366" class="LineNr">10366 </span> 68/push <span class="Constant">"f2"</span>/imm32/subx-name -<span id="L10367" class="LineNr">10367 </span> 68/push <span class="Constant">"f"</span>/imm32/name -<span id="L10368" class="LineNr">10368 </span> 89/<- %ebx 4/r32/esp -<span id="L10369" class="LineNr">10369 </span> <span class="subxComment"># convert</span> -<span id="L10370" class="LineNr">10370 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 -<span id="L10371" class="LineNr">10371 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi 0 %ebx) -<span id="L10372" class="LineNr">10372 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) -<span id="L10373" class="Folded">10373 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L10379" class="LineNr">10379 </span> <span class="subxComment"># check output</span> -<span id="L10380" class="LineNr">10380 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"(f2 *(ebp+0xfffffff8))"</span> <span class="Constant">"F - test-emit-subx-stmt-function-call"</span>) -<span id="L10381" class="LineNr">10381 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L10382" class="LineNr">10382 </span> 89/<- %esp 5/r32/ebp -<span id="L10383" class="LineNr">10383 </span> 5d/pop-to-ebp -<span id="L10384" class="LineNr">10384 </span> c3/return -<span id="L10385" class="LineNr">10385 </span> -<span id="L10386" class="LineNr">10386 </span><span class="subxTest">test-emit-subx-stmt-function-call-with-literal-arg</span>: -<span id="L10387" class="LineNr">10387 </span> <span class="subxComment"># Call a function on a literal.</span> -<span id="L10388" class="LineNr">10388 </span> <span class="subxComment"># f 34</span> -<span id="L10389" class="LineNr">10389 </span> <span class="subxComment"># =></span> -<span id="L10390" class="LineNr">10390 </span> <span class="subxComment"># (f2 34)</span> -<span id="L10391" class="LineNr">10391 </span> <span class="subxComment">#</span> -<span id="L10392" class="LineNr">10392 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L10393" class="LineNr">10393 </span> 55/push-ebp -<span id="L10394" class="LineNr">10394 </span> 89/<- %ebp 4/r32/esp -<span id="L10395" class="LineNr">10395 </span> <span class="subxComment"># setup</span> -<span id="L10396" class="LineNr">10396 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) -<span id="L10397" class="LineNr">10397 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) -<span id="L10398" class="LineNr">10398 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = literal</span> -<span id="L10399" class="LineNr">10399 </span> 68/push 0/imm32/right/null -<span id="L10400" class="LineNr">10400 </span> 68/push 0/imm32/left/literal -<span id="L10401" class="LineNr">10401 </span> 89/<- %ecx 4/r32/esp -<span id="L10402" class="LineNr">10402 </span> <span class="subxComment"># var var-foo/ecx: var literal</span> -<span id="L10403" class="LineNr">10403 </span> 68/push 0/imm32/no-register -<span id="L10404" class="LineNr">10404 </span> 68/push 0/imm32/no-stack-offset -<span id="L10405" class="LineNr">10405 </span> 68/push 0/imm32/block-depth -<span id="L10406" class="LineNr">10406 </span> 51/push-ecx -<span id="L10407" class="LineNr">10407 </span> 68/push <span class="Constant">"34"</span>/imm32 -<span id="L10408" class="LineNr">10408 </span> 89/<- %ecx 4/r32/esp -<span id="L10409" class="LineNr">10409 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var)</span> -<span id="L10410" class="LineNr">10410 </span> 68/push 0/imm32/is-deref:false -<span id="L10411" class="LineNr">10411 </span> 68/push 0/imm32/next -<span id="L10412" class="LineNr">10412 </span> 51/push-ecx/var-foo -<span id="L10413" class="LineNr">10413 </span> 89/<- %esi 4/r32/esp -<span id="L10414" class="LineNr">10414 </span> <span class="subxComment"># var stmt/esi: statement</span> -<span id="L10415" class="LineNr">10415 </span> 68/push 0/imm32/next -<span id="L10416" class="LineNr">10416 </span> 68/push 0/imm32/outputs -<span id="L10417" class="LineNr">10417 </span> 56/push-esi/inouts -<span id="L10418" class="LineNr">10418 </span> 68/push <span class="Constant">"f"</span>/imm32/operation -<span id="L10419" class="LineNr">10419 </span> 68/push 1/imm32 -<span id="L10420" class="LineNr">10420 </span> 89/<- %esi 4/r32/esp -<span id="L10421" class="LineNr">10421 </span> <span class="subxComment"># var functions/ebx: function</span> -<span id="L10422" class="LineNr">10422 </span> 68/push 0/imm32/next -<span id="L10423" class="LineNr">10423 </span> 68/push 0/imm32/body -<span id="L10424" class="LineNr">10424 </span> 68/push 0/imm32/outputs -<span id="L10425" class="LineNr">10425 </span> 51/push-ecx/inouts <span class="subxComment"># hack; in practice we won't have the same var in function definition and call</span> -<span id="L10426" class="LineNr">10426 </span> 68/push <span class="Constant">"f2"</span>/imm32/subx-name -<span id="L10427" class="LineNr">10427 </span> 68/push <span class="Constant">"f"</span>/imm32/name -<span id="L10428" class="LineNr">10428 </span> 89/<- %ebx 4/r32/esp -<span id="L10429" class="LineNr">10429 </span> <span class="subxComment"># convert</span> -<span id="L10430" class="LineNr">10430 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 -<span id="L10431" class="LineNr">10431 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi 0 %ebx) -<span id="L10432" class="LineNr">10432 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) -<span id="L10433" class="Folded">10433 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> -<span id="L10439" class="LineNr">10439 </span> <span class="subxComment"># check output</span> -<span id="L10440" class="LineNr">10440 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"(f2 34)"</span> <span class="Constant">"F - test-emit-subx-stmt-function-call-with-literal-arg"</span>) -<span id="L10441" class="LineNr">10441 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L10442" class="LineNr">10442 </span> 89/<- %esp 5/r32/ebp -<span id="L10443" class="LineNr">10443 </span> 5d/pop-to-ebp -<span id="L10444" class="LineNr">10444 </span> c3/return -<span id="L10445" class="LineNr">10445 </span> -<span id="L10446" class="LineNr">10446 </span><span class="subxFunction">emit-indent</span>: <span class="subxComment"># out: (addr buffered-file), n: int</span> -<span id="L10447" class="LineNr">10447 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L10448" class="LineNr">10448 </span> 55/push-ebp -<span id="L10449" class="LineNr">10449 </span> 89/<- %ebp 4/r32/esp -<span id="L10450" class="LineNr">10450 </span> <span class="subxS1Comment"># . save registers</span> -<span id="L10451" class="LineNr">10451 </span> 50/push-eax -<span id="L10452" class="LineNr">10452 </span> <span class="subxComment"># var i/eax: int = n</span> -<span id="L10453" class="LineNr">10453 </span> 8b/-> *(ebp+0xc) 0/r32/eax -<span id="L10454" class="LineNr">10454 </span> { -<span id="L10455" class="LineNr">10455 </span> <span class="subxComment"># if (i <= 0) break</span> -<span id="L10456" class="LineNr">10456 </span> 3d/compare-eax-with 0/imm32 -<span id="L10457" class="LineNr">10457 </span> 7e/jump-if-<= <span class="Constant">break</span>/disp8 -<span id="L10458" class="LineNr">10458 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" "</span>) -<span id="L10459" class="LineNr">10459 </span> 48/decrement-eax -<span id="L10460" class="LineNr">10460 </span> eb/jump <span class="Constant">loop</span>/disp8 -<span id="L10461" class="LineNr">10461 </span> } -<span id="L10462" class="LineNr">10462 </span><span class="Constant">$emit-indent:end</span>: -<span id="L10463" class="LineNr">10463 </span> <span class="subxS1Comment"># . restore registers</span> -<span id="L10464" class="LineNr">10464 </span> 58/pop-to-eax -<span id="L10465" class="LineNr">10465 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L10466" class="LineNr">10466 </span> 89/<- %esp 5/r32/ebp -<span id="L10467" class="LineNr">10467 </span> 5d/pop-to-ebp -<span id="L10468" class="LineNr">10468 </span> c3/return -<span id="L10469" class="LineNr">10469 </span> -<span id="L10470" class="LineNr">10470 </span><span class="subxFunction">emit-subx-prologue</span>: <span class="subxComment"># out: (addr buffered-file)</span> -<span id="L10471" class="LineNr">10471 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L10472" class="LineNr">10472 </span> 55/push-ebp -<span id="L10473" class="LineNr">10473 </span> 89/<- %ebp 4/r32/esp -<span id="L10474" class="LineNr">10474 </span> <span class="subxComment">#</span> -<span id="L10475" class="LineNr">10475 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" # . prologue\n"</span>) -<span id="L10476" class="LineNr">10476 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" 55/push-ebp\n"</span>) -<span id="L10477" class="LineNr">10477 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" 89/<- %ebp 4/r32/esp\n"</span>) -<span id="L10478" class="LineNr">10478 </span><span class="Constant">$emit-subx-prologue:end</span>: -<span id="L10479" class="LineNr">10479 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L10480" class="LineNr">10480 </span> 89/<- %esp 5/r32/ebp -<span id="L10481" class="LineNr">10481 </span> 5d/pop-to-ebp -<span id="L10482" class="LineNr">10482 </span> c3/return -<span id="L10483" class="LineNr">10483 </span> -<span id="L10484" class="LineNr">10484 </span><span class="subxFunction">emit-subx-epilogue</span>: <span class="subxComment"># out: (addr buffered-file)</span> -<span id="L10485" class="LineNr">10485 </span> <span class="subxS1Comment"># . prologue</span> -<span id="L10486" class="LineNr">10486 </span> 55/push-ebp -<span id="L10487" class="LineNr">10487 </span> 89/<- %ebp 4/r32/esp -<span id="L10488" class="LineNr">10488 </span> <span class="subxComment">#</span> -<span id="L10489" class="LineNr">10489 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" # . epilogue\n"</span>) -<span id="L10490" class="LineNr">10490 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" 89/<- %esp 5/r32/ebp\n"</span>) -<span id="L10491" class="LineNr">10491 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" 5d/pop-to-ebp\n"</span>) -<span id="L10492" class="LineNr">10492 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" c3/return\n"</span>) -<span id="L10493" class="LineNr">10493 </span><span class="Constant">$emit-subx-epilogue:end</span>: -<span id="L10494" class="LineNr">10494 </span> <span class="subxS1Comment"># . epilogue</span> -<span id="L10495" class="LineNr">10495 </span> 89/<- %esp 5/r32/ebp -<span id="L10496" class="LineNr">10496 </span> 5d/pop-to-ebp -<span id="L10497" class="LineNr">10497 </span> c3/return +<span id="L10320" class="LineNr">10320 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L10321" class="LineNr">10321 </span> 55/push-ebp +<span id="L10322" class="LineNr">10322 </span> 89/<- %ebp 4/r32/esp +<span id="L10323" class="LineNr">10323 </span> <span class="subxComment"># setup</span> +<span id="L10324" class="LineNr">10324 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) +<span id="L10325" class="LineNr">10325 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) +<span id="L10326" class="LineNr">10326 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = int</span> +<span id="L10327" class="LineNr">10327 </span> 68/push 0/imm32/right/null +<span id="L10328" class="LineNr">10328 </span> 68/push 1/imm32/left/int +<span id="L10329" class="LineNr">10329 </span> 89/<- %ecx 4/r32/esp +<span id="L10330" class="LineNr">10330 </span> <span class="subxComment"># var var-foo/ecx: var</span> +<span id="L10331" class="LineNr">10331 </span> 68/push 0/imm32/no-register +<span id="L10332" class="LineNr">10332 </span> 68/push -8/imm32/stack-offset +<span id="L10333" class="LineNr">10333 </span> 68/push 0/imm32/block-depth +<span id="L10334" class="LineNr">10334 </span> 51/push-ecx +<span id="L10335" class="LineNr">10335 </span> 68/push <span class="Constant">"foo"</span>/imm32 +<span id="L10336" class="LineNr">10336 </span> 89/<- %ecx 4/r32/esp +<span id="L10337" class="LineNr">10337 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var)</span> +<span id="L10338" class="LineNr">10338 </span> 68/push 0/imm32/is-deref:false +<span id="L10339" class="LineNr">10339 </span> 68/push 0/imm32/next +<span id="L10340" class="LineNr">10340 </span> 51/push-ecx/var-foo +<span id="L10341" class="LineNr">10341 </span> 89/<- %esi 4/r32/esp +<span id="L10342" class="LineNr">10342 </span> <span class="subxComment"># var stmt/esi: statement</span> +<span id="L10343" class="LineNr">10343 </span> 68/push 0/imm32/next +<span id="L10344" class="LineNr">10344 </span> 68/push 0/imm32/outputs +<span id="L10345" class="LineNr">10345 </span> 56/push-esi/inouts +<span id="L10346" class="LineNr">10346 </span> 68/push <span class="Constant">"f"</span>/imm32/operation +<span id="L10347" class="LineNr">10347 </span> 68/push 1/imm32 +<span id="L10348" class="LineNr">10348 </span> 89/<- %esi 4/r32/esp +<span id="L10349" class="LineNr">10349 </span> <span class="subxComment"># var functions/ebx: function</span> +<span id="L10350" class="LineNr">10350 </span> 68/push 0/imm32/next +<span id="L10351" class="LineNr">10351 </span> 68/push 0/imm32/body +<span id="L10352" class="LineNr">10352 </span> 68/push 0/imm32/outputs +<span id="L10353" class="LineNr">10353 </span> 51/push-ecx/inouts <span class="subxComment"># hack; in practice we won't have the same var in function definition and call</span> +<span id="L10354" class="LineNr">10354 </span> 68/push <span class="Constant">"f2"</span>/imm32/subx-name +<span id="L10355" class="LineNr">10355 </span> 68/push <span class="Constant">"f"</span>/imm32/name +<span id="L10356" class="LineNr">10356 </span> 89/<- %ebx 4/r32/esp +<span id="L10357" class="LineNr">10357 </span> <span class="subxComment"># convert</span> +<span id="L10358" class="LineNr">10358 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 +<span id="L10359" class="LineNr">10359 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi 0 %ebx) +<span id="L10360" class="LineNr">10360 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) +<span id="L10361" class="Folded">10361 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> +<span id="L10367" class="LineNr">10367 </span> <span class="subxComment"># check output</span> +<span id="L10368" class="LineNr">10368 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"(f2 *(ebp+0xfffffff8))"</span> <span class="Constant">"F - test-emit-subx-stmt-function-call"</span>) +<span id="L10369" class="LineNr">10369 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L10370" class="LineNr">10370 </span> 89/<- %esp 5/r32/ebp +<span id="L10371" class="LineNr">10371 </span> 5d/pop-to-ebp +<span id="L10372" class="LineNr">10372 </span> c3/return +<span id="L10373" class="LineNr">10373 </span> +<span id="L10374" class="LineNr">10374 </span><span class="subxTest">test-emit-subx-stmt-function-call-with-literal-arg</span>: +<span id="L10375" class="LineNr">10375 </span> <span class="subxComment"># Call a function on a literal.</span> +<span id="L10376" class="LineNr">10376 </span> <span class="subxComment"># f 34</span> +<span id="L10377" class="LineNr">10377 </span> <span class="subxComment"># =></span> +<span id="L10378" class="LineNr">10378 </span> <span class="subxComment"># (f2 34)</span> +<span id="L10379" class="LineNr">10379 </span> <span class="subxComment">#</span> +<span id="L10380" class="LineNr">10380 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L10381" class="LineNr">10381 </span> 55/push-ebp +<span id="L10382" class="LineNr">10382 </span> 89/<- %ebp 4/r32/esp +<span id="L10383" class="LineNr">10383 </span> <span class="subxComment"># setup</span> +<span id="L10384" class="LineNr">10384 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a>) +<span id="L10385" class="LineNr">10385 </span> (<a href='../055stream.subx.html#L17'>clear-stream</a> $_test-output-buffered-file->buffer) +<span id="L10386" class="LineNr">10386 </span> <span class="subxComment"># var type/ecx: (handle tree type-id) = literal</span> +<span id="L10387" class="LineNr">10387 </span> 68/push 0/imm32/right/null +<span id="L10388" class="LineNr">10388 </span> 68/push 0/imm32/left/literal +<span id="L10389" class="LineNr">10389 </span> 89/<- %ecx 4/r32/esp +<span id="L10390" class="LineNr">10390 </span> <span class="subxComment"># var var-foo/ecx: var literal</span> +<span id="L10391" class="LineNr">10391 </span> 68/push 0/imm32/no-register +<span id="L10392" class="LineNr">10392 </span> 68/push 0/imm32/no-stack-offset +<span id="L10393" class="LineNr">10393 </span> 68/push 0/imm32/block-depth +<span id="L10394" class="LineNr">10394 </span> 51/push-ecx +<span id="L10395" class="LineNr">10395 </span> 68/push <span class="Constant">"34"</span>/imm32 +<span id="L10396" class="LineNr">10396 </span> 89/<- %ecx 4/r32/esp +<span id="L10397" class="LineNr">10397 </span> <span class="subxComment"># var inouts/esi: (handle stmt-var)</span> +<span id="L10398" class="LineNr">10398 </span> 68/push 0/imm32/is-deref:false +<span id="L10399" class="LineNr">10399 </span> 68/push 0/imm32/next +<span id="L10400" class="LineNr">10400 </span> 51/push-ecx/var-foo +<span id="L10401" class="LineNr">10401 </span> 89/<- %esi 4/r32/esp +<span id="L10402" class="LineNr">10402 </span> <span class="subxComment"># var stmt/esi: statement</span> +<span id="L10403" class="LineNr">10403 </span> 68/push 0/imm32/next +<span id="L10404" class="LineNr">10404 </span> 68/push 0/imm32/outputs +<span id="L10405" class="LineNr">10405 </span> 56/push-esi/inouts +<span id="L10406" class="LineNr">10406 </span> 68/push <span class="Constant">"f"</span>/imm32/operation +<span id="L10407" class="LineNr">10407 </span> 68/push 1/imm32 +<span id="L10408" class="LineNr">10408 </span> 89/<- %esi 4/r32/esp +<span id="L10409" class="LineNr">10409 </span> <span class="subxComment"># var functions/ebx: function</span> +<span id="L10410" class="LineNr">10410 </span> 68/push 0/imm32/next +<span id="L10411" class="LineNr">10411 </span> 68/push 0/imm32/body +<span id="L10412" class="LineNr">10412 </span> 68/push 0/imm32/outputs +<span id="L10413" class="LineNr">10413 </span> 51/push-ecx/inouts <span class="subxComment"># hack; in practice we won't have the same var in function definition and call</span> +<span id="L10414" class="LineNr">10414 </span> 68/push <span class="Constant">"f2"</span>/imm32/subx-name +<span id="L10415" class="LineNr">10415 </span> 68/push <span class="Constant">"f"</span>/imm32/name +<span id="L10416" class="LineNr">10416 </span> 89/<- %ebx 4/r32/esp +<span id="L10417" class="LineNr">10417 </span> <span class="subxComment"># convert</span> +<span id="L10418" class="LineNr">10418 </span> c7 0/subop/copy *<span class="SpecialChar"><a href='mu.subx.html#L3989'>Curr-block-depth</a></span> 0/imm32 +<span id="L10419" class="LineNr">10419 </span> (<a href='mu.subx.html#L6659'>emit-subx-stmt</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a> %esi 0 %ebx) +<span id="L10420" class="LineNr">10420 </span> (<a href='../064write-byte.subx.html#L81'>flush</a> <a href='../064write-byte.subx.html#L360'>_test-output-buffered-file</a>) +<span id="L10421" class="Folded">10421 </span><span class="Folded">+-- 6 lines: #? # dump _test-output-stream -----------------------------------------------------------------------------------------------------------------------------------------</span> +<span id="L10427" class="LineNr">10427 </span> <span class="subxComment"># check output</span> +<span id="L10428" class="LineNr">10428 </span> (<a href='../058stream-equal.subx.html#L565'>check-next-stream-line-equal</a> <a href='../064write-byte.subx.html#L286'>_test-output-stream</a> <span class="Constant">"(f2 34)"</span> <span class="Constant">"F - test-emit-subx-stmt-function-call-with-literal-arg"</span>) +<span id="L10429" class="LineNr">10429 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L10430" class="LineNr">10430 </span> 89/<- %esp 5/r32/ebp +<span id="L10431" class="LineNr">10431 </span> 5d/pop-to-ebp +<span id="L10432" class="LineNr">10432 </span> c3/return +<span id="L10433" class="LineNr">10433 </span> +<span id="L10434" class="LineNr">10434 </span><span class="subxFunction">emit-indent</span>: <span class="subxComment"># out: (addr buffered-file), n: int</span> +<span id="L10435" class="LineNr">10435 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L10436" class="LineNr">10436 </span> 55/push-ebp +<span id="L10437" class="LineNr">10437 </span> 89/<- %ebp 4/r32/esp +<span id="L10438" class="LineNr">10438 </span> <span class="subxS1Comment"># . save registers</span> +<span id="L10439" class="LineNr">10439 </span> 50/push-eax +<span id="L10440" class="LineNr">10440 </span> <span class="subxComment"># var i/eax: int = n</span> +<span id="L10441" class="LineNr">10441 </span> 8b/-> *(ebp+0xc) 0/r32/eax +<span id="L10442" class="LineNr">10442 </span> { +<span id="L10443" class="LineNr">10443 </span> <span class="subxComment"># if (i <= 0) break</span> +<span id="L10444" class="LineNr">10444 </span> 3d/compare-eax-with 0/imm32 +<span id="L10445" class="LineNr">10445 </span> 7e/jump-if-<= <span class="Constant">break</span>/disp8 +<span id="L10446" class="LineNr">10446 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" "</span>) +<span id="L10447" class="LineNr">10447 </span> 48/decrement-eax +<span id="L10448" class="LineNr">10448 </span> eb/jump <span class="Constant">loop</span>/disp8 +<span id="L10449" class="LineNr">10449 </span> } +<span id="L10450" class="LineNr">10450 </span><span class="Constant">$emit-indent:end</span>: +<span id="L10451" class="LineNr">10451 </span> <span class="subxS1Comment"># . restore registers</span> +<span id="L10452" class="LineNr">10452 </span> 58/pop-to-eax +<span id="L10453" class="LineNr">10453 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L10454" class="LineNr">10454 </span> 89/<- %esp 5/r32/ebp +<span id="L10455" class="LineNr">10455 </span> 5d/pop-to-ebp +<span id="L10456" class="LineNr">10456 </span> c3/return +<span id="L10457" class="LineNr">10457 </span> +<span id="L10458" class="LineNr">10458 </span><span class="subxFunction">emit-subx-prologue</span>: <span class="subxComment"># out: (addr buffered-file)</span> +<span id="L10459" class="LineNr">10459 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L10460" class="LineNr">10460 </span> 55/push-ebp +<span id="L10461" class="LineNr">10461 </span> 89/<- %ebp 4/r32/esp +<span id="L10462" class="LineNr">10462 </span> <span class="subxComment">#</span> +<span id="L10463" class="LineNr">10463 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" # . prologue\n"</span>) +<span id="L10464" class="LineNr">10464 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" 55/push-ebp\n"</span>) +<span id="L10465" class="LineNr">10465 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" 89/<- %ebp 4/r32/esp\n"</span>) +<span id="L10466" class="LineNr">10466 </span><span class="Constant">$emit-subx-prologue:end</span>: +<span id="L10467" class="LineNr">10467 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L10468" class="LineNr">10468 </span> 89/<- %esp 5/r32/ebp +<span id="L10469" class="LineNr">10469 </span> 5d/pop-to-ebp +<span id="L10470" class="LineNr">10470 </span> c3/return +<span id="L10471" class="LineNr">10471 </span> +<span id="L10472" class="LineNr">10472 </span><span class="subxFunction">emit-subx-epilogue</span>: <span class="subxComment"># out: (addr buffered-file)</span> +<span id="L10473" class="LineNr">10473 </span> <span class="subxS1Comment"># . prologue</span> +<span id="L10474" class="LineNr">10474 </span> 55/push-ebp +<span id="L10475" class="LineNr">10475 </span> 89/<- %ebp 4/r32/esp +<span id="L10476" class="LineNr">10476 </span> <span class="subxComment">#</span> +<span id="L10477" class="LineNr">10477 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" # . epilogue\n"</span>) +<span id="L10478" class="LineNr">10478 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" 89/<- %esp 5/r32/ebp\n"</span>) +<span id="L10479" class="LineNr">10479 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" 5d/pop-to-ebp\n"</span>) +<span id="L10480" class="LineNr">10480 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+8) <span class="Constant">" c3/return\n"</span>) +<span id="L10481" class="LineNr">10481 </span><span class="Constant">$emit-subx-epilogue:end</span>: +<span id="L10482" class="LineNr">10482 </span> <span class="subxS1Comment"># . epilogue</span> +<span id="L10483" class="LineNr">10483 </span> 89/<- %esp 5/r32/ebp +<span id="L10484" class="LineNr">10484 </span> 5d/pop-to-ebp +<span id="L10485" class="LineNr">10485 </span> c3/return </pre> </body> </html> diff --git a/html/apps/pack.subx.html b/html/apps/pack.subx.html index 7bf6cc71..a01556fc 100644 --- a/html/apps/pack.subx.html +++ b/html/apps/pack.subx.html @@ -65,8 +65,8 @@ if ('onhashchange' in window) { <span id="L3" class="LineNr"> 3 </span><span class="subxComment"># uses are left untouched.</span> <span id="L4" class="LineNr"> 4 </span><span class="subxComment">#</span> <span id="L5" class="LineNr"> 5 </span><span class="subxComment"># To run:</span> -<span id="L6" class="LineNr"> 6 </span><span class="subxComment"># $ ./subx translate init.linux 0*.subx apps/subx-params.subx apps/pack.subx -o apps/pack</span> -<span id="L7" class="LineNr"> 7 </span><span class="subxComment"># $ echo '05/add-to-eax 0x20/imm32' |./subx run apps/pack</span> +<span id="L6" class="LineNr"> 6 </span><span class="subxComment"># $ ./bootstrap translate init.linux 0*.subx apps/subx-params.subx apps/pack.subx -o apps/pack</span> +<span id="L7" class="LineNr"> 7 </span><span class="subxComment"># $ echo '05/add-to-eax 0x20/imm32' |./bootstrap run apps/pack</span> <span id="L8" class="LineNr"> 8 </span><span class="subxComment"># Expected output:</span> <span id="L9" class="LineNr"> 9 </span><span class="subxComment"># 05 20 00 00 00 # 05/add-to-eax 0x20/imm32</span> <span id="L10" class="LineNr"> 10 </span><span class="subxComment"># The original instruction gets included as a comment at the end of each</span> @@ -4721,7 +4721,7 @@ if ('onhashchange' in window) { <span id="L5864" class="LineNr">5864 </span> <span class="subxS2Comment"># . . push args</span> <span id="L5865" class="LineNr">5865 </span> 51/push-ecx <span id="L5866" class="LineNr">5866 </span> <span class="subxS2Comment"># . . call</span> -<span id="L5867" class="LineNr">5867 </span> e8/call <a href='../067parse-hex.subx.html#L354'>parse-hex-int-from-slice</a>/disp32 +<span id="L5867" class="LineNr">5867 </span> e8/call <a href='../067parse-hex.subx.html#L387'>parse-hex-int-from-slice</a>/disp32 <span id="L5868" class="LineNr">5868 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L5869" class="LineNr">5869 </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="L5870" class="LineNr">5870 </span><span class="Constant">$parse-datum-of-word:end</span>: diff --git a/html/apps/random.subx.html b/html/apps/random.subx.html index 25db616e..882ce5d4 100644 --- a/html/apps/random.subx.html +++ b/html/apps/random.subx.html @@ -59,8 +59,8 @@ if ('onhashchange' in window) { <span id="L1" class="LineNr"> 1 </span><span class="subxComment"># Repeatedly read 32-bit numbers from /dev/random, print them to stdout.</span> <span id="L2" class="LineNr"> 2 </span><span class="subxComment">#</span> <span id="L3" class="LineNr"> 3 </span><span class="subxComment"># To run:</span> -<span id="L4" class="LineNr"> 4 </span><span class="subxComment"># $ ./subx translate init.linux 0*.subx apps/random.subx -o apps/random</span> -<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./subx run apps/random</span> +<span id="L4" class="LineNr"> 4 </span><span class="subxComment"># $ ./bootstrap translate init.linux 0*.subx apps/random.subx -o apps/random</span> +<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./bootstrap run apps/random</span> <span id="L6" class="LineNr"> 6 </span> <span id="L7" class="LineNr"> 7 </span>== code 0x09000000 <span id="L8" class="LineNr"> 8 </span><span class="subxComment"># instruction effective address register displacement immediate</span> diff --git a/html/apps/sigils.subx.html b/html/apps/sigils.subx.html index 6bec4179..6d3f9f23 100644 --- a/html/apps/sigils.subx.html +++ b/html/apps/sigils.subx.html @@ -64,36 +64,36 @@ if ('onhashchange' in window) { <span id="L2" class="LineNr"> 2 </span><span class="subxComment"># other related arguments.</span> <span id="L3" class="LineNr"> 3 </span><span class="subxComment">#</span> <span id="L4" class="LineNr"> 4 </span><span class="subxComment"># To run:</span> -<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./subx translate init.linux 0*.subx apps/subx-params.subx apps/sigils.subx -o apps/sigils</span> +<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./bootstrap translate init.linux 0*.subx apps/subx-params.subx apps/sigils.subx -o apps/sigils</span> <span id="L6" class="LineNr"> 6 </span><span class="subxComment">#</span> <span id="L7" class="LineNr"> 7 </span><span class="subxComment"># We currently support the following notations:</span> <span id="L8" class="LineNr"> 8 </span><span class="subxComment">#</span> <span id="L9" class="LineNr"> 9 </span><span class="subxComment"># 1.</span> -<span id="L10" class="LineNr"> 10 </span><span class="subxComment"># $ echo '%eax' | ./subx run apps/sigils</span> +<span id="L10" class="LineNr"> 10 </span><span class="subxComment"># $ echo '%eax' | ./bootstrap run apps/sigils</span> <span id="L11" class="LineNr"> 11 </span><span class="subxComment"># 3/mod 0/rm32</span> <span id="L12" class="LineNr"> 12 </span><span class="subxComment">#</span> <span id="L13" class="LineNr"> 13 </span><span class="subxComment"># 2.</span> -<span id="L14" class="LineNr"> 14 </span><span class="subxComment"># $ echo '*eax' | ./subx run apps/sigils</span> +<span id="L14" class="LineNr"> 14 </span><span class="subxComment"># $ echo '*eax' | ./bootstrap run apps/sigils</span> <span id="L15" class="LineNr"> 15 </span><span class="subxComment"># 0/mod 0/rm32</span> <span id="L16" class="LineNr"> 16 </span><span class="subxComment">#</span> <span id="L17" class="LineNr"> 17 </span><span class="subxComment"># 3.</span> -<span id="L18" class="LineNr"> 18 </span><span class="subxComment"># $ echo '*(eax+4)' | ./subx run apps/sigils</span> +<span id="L18" class="LineNr"> 18 </span><span class="subxComment"># $ echo '*(eax+4)' | ./bootstrap run apps/sigils</span> <span id="L19" class="LineNr"> 19 </span><span class="subxComment"># 2/mod 0/rm32 4/disp32</span> <span id="L20" class="LineNr"> 20 </span><span class="subxComment">#</span> <span id="L21" class="LineNr"> 21 </span><span class="subxComment"># 4.</span> -<span id="L22" class="LineNr"> 22 </span><span class="subxComment"># $ echo '*(eax+ecx)' | ./subx run apps/sigils</span> +<span id="L22" class="LineNr"> 22 </span><span class="subxComment"># $ echo '*(eax+ecx)' | ./bootstrap run apps/sigils</span> <span id="L23" class="LineNr"> 23 </span><span class="subxComment"># 0/mod 4/rm32 0/base 1/index 0/scale</span> <span id="L24" class="LineNr"> 24 </span><span class="subxComment">#</span> <span id="L25" class="LineNr"> 25 </span><span class="subxComment"># 5.</span> -<span id="L26" class="LineNr"> 26 </span><span class="subxComment"># $ echo '*(eax+ecx+4)' | ./subx run apps/sigils</span> +<span id="L26" class="LineNr"> 26 </span><span class="subxComment"># $ echo '*(eax+ecx+4)' | ./bootstrap run apps/sigils</span> <span id="L27" class="LineNr"> 27 </span><span class="subxComment"># 2/mod 4/rm32 0/base 1/index 0/scale 4/disp32</span> <span id="L28" class="LineNr"> 28 </span><span class="subxComment">#</span> <span id="L29" class="LineNr"> 29 </span><span class="subxComment"># 6.</span> -<span id="L30" class="LineNr"> 30 </span><span class="subxComment"># $ echo '*(eax+ecx<<2+4)' | ./subx run apps/sigils</span> +<span id="L30" class="LineNr"> 30 </span><span class="subxComment"># $ echo '*(eax+ecx<<2+4)' | ./bootstrap run apps/sigils</span> <span id="L31" class="LineNr"> 31 </span><span class="subxComment"># 2/mod 4/rm32 0/base 1/index 2/scale 4/disp32</span> <span id="L32" class="LineNr"> 32 </span><span class="subxComment">#</span> <span id="L33" class="LineNr"> 33 </span><span class="subxComment"># 7.</span> -<span id="L34" class="LineNr"> 34 </span><span class="subxComment"># $ echo '*Foo' | ./subx run apps/sigils</span> +<span id="L34" class="LineNr"> 34 </span><span class="subxComment"># $ echo '*Foo' | ./bootstrap run apps/sigils</span> <span id="L35" class="LineNr"> 35 </span><span class="subxComment"># 0/mod 5/rm32/.disp32 Foo/disp32</span> <span id="L36" class="LineNr"> 36 </span><span class="subxComment">#</span> <span id="L37" class="LineNr"> 37 </span><span class="subxComment"># Addition isn't commutative here. Template must always be (base+index<<scale+disp),</span> @@ -3650,7 +3650,7 @@ if ('onhashchange' in window) { <span id="L4052" class="LineNr">4052 </span> <span class="subxS2Comment"># . . push args</span> <span id="L4053" class="LineNr">4053 </span> 50/push-eax <span id="L4054" class="LineNr">4054 </span> <span class="subxS2Comment"># . . call</span> -<span id="L4055" class="LineNr">4055 </span> e8/call <a href='../067parse-hex.subx.html#L640'>is-hex-digit?</a>/disp32 +<span id="L4055" class="LineNr">4055 </span> e8/call <a href='../067parse-hex.subx.html#L701'>is-hex-digit?</a>/disp32 <span id="L4056" class="LineNr">4056 </span> <span class="subxS2Comment"># . . discard args</span> <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> @@ -3660,7 +3660,7 @@ if ('onhashchange' in window) { <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> <span id="L4064" class="LineNr">4064 </span> <span class="subxS2Comment"># . . call</span> -<span id="L4065" class="LineNr">4065 </span> e8/call <a href='../067parse-hex.subx.html#L803'>from-hex-char</a>/disp32 +<span id="L4065" class="LineNr">4065 </span> e8/call <a href='../067parse-hex.subx.html#L864'>from-hex-char</a>/disp32 <span id="L4066" class="LineNr">4066 </span> <span class="subxComment"># result = result * 16 + eax</span> <span id="L4067" class="LineNr">4067 </span> c1/shift 4/subop/left 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> 4/imm8 <span class="subxComment"># shift edi left by 4 bits</span> <span id="L4068" class="LineNr">4068 </span> 01/add 3/mod/direct 7/rm32/edi <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"># add eax to edi</span> @@ -4033,7 +4033,7 @@ if ('onhashchange' in window) { <span id="L4435" class="LineNr">4435 </span> <span class="subxS2Comment"># . . push args</span> <span id="L4436" class="LineNr">4436 </span> 50/push-eax <span id="L4437" class="LineNr">4437 </span> <span class="subxS2Comment"># . . call</span> -<span id="L4438" class="LineNr">4438 </span> e8/call <a href='../067parse-hex.subx.html#L640'>is-hex-digit?</a>/disp32 +<span id="L4438" class="LineNr">4438 </span> e8/call <a href='../067parse-hex.subx.html#L701'>is-hex-digit?</a>/disp32 <span id="L4439" class="LineNr">4439 </span> <span class="subxS2Comment"># . . discard args</span> <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> @@ -4043,7 +4043,7 @@ if ('onhashchange' in window) { <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> <span id="L4447" class="LineNr">4447 </span> <span class="subxS2Comment"># . . call</span> -<span id="L4448" class="LineNr">4448 </span> e8/call <a href='../067parse-hex.subx.html#L803'>from-hex-char</a>/disp32 +<span id="L4448" class="LineNr">4448 </span> e8/call <a href='../067parse-hex.subx.html#L864'>from-hex-char</a>/disp32 <span id="L4449" class="LineNr">4449 </span> <span class="subxComment"># result = result * 16 + eax</span> <span id="L4450" class="LineNr">4450 </span> c1/shift 4/subop/left 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> 4/imm8 <span class="subxComment"># shift edi left by 4 bits</span> <span id="L4451" class="LineNr">4451 </span> 01/add 3/mod/direct 7/rm32/edi <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"># add eax to edi</span> diff --git a/html/apps/survey.subx.html b/html/apps/survey.subx.html index 9acf8ac9..70952749 100644 --- a/html/apps/survey.subx.html +++ b/html/apps/survey.subx.html @@ -68,7 +68,7 @@ if ('onhashchange' in window) { <span id="L5" class="LineNr"> 5 </span><span class="subxComment"># b) add segment headers with addresses and offsets correctly filled in</span> <span id="L6" class="LineNr"> 6 </span><span class="subxComment">#</span> <span id="L7" class="LineNr"> 7 </span><span class="subxComment"># To build:</span> -<span id="L8" class="LineNr"> 8 </span><span class="subxComment"># $ ./subx translate init.linux 0*.subx apps/subx-params.subx apps/survey.subx -o apps/survey</span> +<span id="L8" class="LineNr"> 8 </span><span class="subxComment"># $ ./bootstrap translate init.linux 0*.subx apps/subx-params.subx apps/survey.subx -o apps/survey</span> <span id="L9" class="LineNr"> 9 </span><span class="subxComment">#</span> <span id="L10" class="LineNr"> 10 </span><span class="subxComment"># The expected input is a stream of bytes with segment headers, comments and</span> <span id="L11" class="LineNr"> 11 </span><span class="subxComment"># some interspersed labels.</span> @@ -86,7 +86,7 @@ if ('onhashchange' in window) { <span id="L23" class="LineNr"> 23 </span><span class="subxComment"># The output is the stream of bytes without segment headers or label definitions,</span> <span id="L24" class="LineNr"> 24 </span><span class="subxComment"># and with label references replaced with numeric values/displacements.</span> <span id="L25" class="LineNr"> 25 </span><span class="subxComment">#</span> -<span id="L26" class="LineNr"> 26 </span><span class="subxComment"># $ cat x |./subx run apps/survey</span> +<span id="L26" class="LineNr"> 26 </span><span class="subxComment"># $ cat x |./bootstrap run apps/survey</span> <span id="L27" class="LineNr"> 27 </span><span class="subxComment"># ...ELF header bytes...</span> <span id="L28" class="LineNr"> 28 </span><span class="subxComment"># # ELF header above will specify that code segment begins at this offset</span> <span id="L29" class="LineNr"> 29 </span><span class="subxComment"># aa bb nn # some computed address</span> @@ -672,7 +672,7 @@ if ('onhashchange' in window) { <span id="L990" class="LineNr"> 990 </span> <span class="subxComment"># seg->address = parse-hex-int-from-slice(segment-tmp)</span> <span id="L991" class="LineNr"> 991 </span> <span class="subxS1Comment"># . eax = parse-hex-int-from-slice(segment-tmp)</span> <span id="L992" class="LineNr"> 992 </span> 68/push <a href='survey.subx.html#L621'>compute-offsets</a>:segment-tmp/imm32 -<span id="L993" class="LineNr"> 993 </span> e8/call <a href='../067parse-hex.subx.html#L354'>parse-hex-int-from-slice</a>/disp32 +<span id="L993" class="LineNr"> 993 </span> e8/call <a href='../067parse-hex.subx.html#L387'>parse-hex-int-from-slice</a>/disp32 <span id="L994" class="LineNr"> 994 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L995" class="LineNr"> 995 </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="L996" class="LineNr"> 996 </span> <span class="subxS1Comment"># . seg->address = eax</span> diff --git a/html/apps/tests.subx.html b/html/apps/tests.subx.html index 2335bbb3..fa2ae715 100644 --- a/html/apps/tests.subx.html +++ b/html/apps/tests.subx.html @@ -62,7 +62,7 @@ if ('onhashchange' in window) { <span id="L2" class="LineNr"> 2 </span><span class="subxComment"># all functions starting with 'test-'.</span> <span id="L3" class="LineNr"> 3 </span><span class="subxComment">#</span> <span id="L4" class="LineNr"> 4 </span><span class="subxComment"># To build:</span> -<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./subx translate init.linux 0*.subx apps/subx-params.subx apps/tests.subx -o apps/tests</span> +<span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ ./bootstrap translate init.linux 0*.subx apps/subx-params.subx apps/tests.subx -o apps/tests</span> <span id="L6" class="LineNr"> 6 </span> <span id="L7" class="LineNr"> 7 </span>== code <span id="L8" class="LineNr"> 8 </span><span class="subxComment"># instruction effective address register displacement immediate</span> |