about summary refs log tree commit diff stats
path: root/html/subx/031check_operands.cc.html
diff options
context:
space:
mode:
Diffstat (limited to 'html/subx/031check_operands.cc.html')
-rw-r--r--html/subx/031check_operands.cc.html40
1 files changed, 20 insertions, 20 deletions
diff --git a/html/subx/031check_operands.cc.html b/html/subx/031check_operands.cc.html
index 69a00ea0..d53cc447 100644
--- a/html/subx/031check_operands.cc.html
+++ b/html/subx/031check_operands.cc.html
@@ -76,14 +76,14 @@ if ('onhashchange' in window) {
 <span id="L12" class="LineNr"> 12 </span>
 <span id="L13" class="LineNr"> 13 </span><span class="Delimiter">:(before &quot;Pack Operands(segment code)&quot;)</span>
 <span id="L14" class="LineNr"> 14 </span>check_operands<span class="Delimiter">(</span><a href='031check_operands.cc.html#L14'>code</a><span class="Delimiter">);</span>
-<span id="L15" class="LineNr"> 15 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L217'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L15" class="LineNr"> 15 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L225'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L16" class="LineNr"> 16 </span>
 <span id="L17" class="LineNr"> 17 </span><span class="Delimiter">:(code)</span>
 <span id="L18" class="LineNr"> 18 </span><span class="Normal">void</span> check_operands<span class="Delimiter">(</span><span class="Normal">const</span> segment&amp; <a href='031check_operands.cc.html#L14'>code</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L19" class="LineNr"> 19 </span>  <a href='003trace.cc.html#L196'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;-- check operands&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L19" class="LineNr"> 19 </span>  <a href='003trace.cc.html#L204'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;-- check operands&quot;</span> &lt;&lt; <a href='003trace.cc.html#L230'>end</a><span class="Delimiter">();</span>
 <span id="L20" class="LineNr"> 20 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span><a href='031check_operands.cc.html#L14'>code</a><span class="Delimiter">.</span><a href='011run.cc.html#L109'>lines</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L21" class="LineNr"> 21 </span>    check_operands<span class="Delimiter">(</span><a href='031check_operands.cc.html#L14'>code</a><span class="Delimiter">.</span><a href='011run.cc.html#L109'>lines</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
-<span id="L22" class="LineNr"> 22 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L217'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// stop at the first mal-formed instruction</span>
+<span id="L22" class="LineNr"> 22 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L225'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// stop at the first mal-formed instruction</span>
 <span id="L23" class="LineNr"> 23 </span>  <span class="Delimiter">}</span>
 <span id="L24" class="LineNr"> 24 </span><span class="Delimiter">}</span>
 <span id="L25" class="LineNr"> 25 </span>
@@ -324,16 +324,16 @@ if ('onhashchange' in window) {
 <span id="L260" class="LineNr">260 </span><span class="Normal">void</span> <a href='031check_operands.cc.html#L260'>compare_bitvector</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">,</span> <span class="Normal">uint8_t</span> expected<span class="Delimiter">,</span> <span class="Normal">const</span> word&amp; op<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L261" class="LineNr">261 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>all_hex_bytes<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &amp;&amp; <a href='031check_operands.cc.html#L293'>has_operands</a><span class="Delimiter">(</span>inst<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// deliberately programming in raw hex; we'll raise a warning elsewhere</span>
 <span id="L262" class="LineNr">262 </span>  <span class="Normal">uint8_t</span> bitvector = <a href='031check_operands.cc.html#L284'>compute_operand_bitvector</a><span class="Delimiter">(</span>inst<span class="Delimiter">);</span>
-<span id="L263" class="LineNr">263 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L217'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// duplicate operand type</span>
+<span id="L263" class="LineNr">263 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L225'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// duplicate operand type</span>
 <span id="L264" class="LineNr">264 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>bitvector == expected<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// all good with this instruction</span>
 <span id="L265" class="LineNr">265 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='031check_operands.cc.html#L69'>NUM_OPERAND_TYPES</a><span class="Delimiter">;</span>  ++i<span class="Delimiter">,</span> bitvector &gt;&gt;= <span class="Constant">1</span><span class="Delimiter">,</span> expected &gt;&gt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L266" class="LineNr">266 </span><span class="CommentedCode">//?     cerr &lt;&lt; &quot;comparing &quot; &lt;&lt; HEXBYTE &lt;&lt; NUM(bitvector) &lt;&lt; &quot; with &quot; &lt;&lt; NUM(expected) &lt;&lt; '\n';</span>
 <span id="L267" class="LineNr">267 </span>    <span class="Normal">if</span> <span class="Delimiter">((</span>bitvector &amp; <span class="Constant">0x1</span><span class="Delimiter">)</span> == <span class="Delimiter">(</span>expected &amp; <span class="Constant">0x1</span><span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// all good with this operand</span>
 <span id="L268" class="LineNr">268 </span>    <span class="Normal">const</span> string&amp; optype = <a href='031check_operands.cc.html#L72'>Operand_type_name</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
 <span id="L269" class="LineNr">269 </span>    <span class="Normal">if</span> <span class="Delimiter">((</span>bitvector &amp; <span class="Constant">0x1</span><span class="Delimiter">)</span> &gt; <span class="Delimiter">(</span>expected &amp; <span class="Constant">0x1</span><span class="Delimiter">))</span>
-<span id="L270" class="LineNr">270 </span>      <a href='003trace.cc.html#L203'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; <a href='031check_operands.cc.html#L278'>maybe_name</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;: unexpected &quot;</span> &lt;&lt; optype &lt;&lt; <span class="Constant">&quot; operand</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L270" class="LineNr">270 </span>      <a href='003trace.cc.html#L211'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; <a href='031check_operands.cc.html#L278'>maybe_name</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;: unexpected &quot;</span> &lt;&lt; optype &lt;&lt; <span class="Constant">&quot; operand</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L230'>end</a><span class="Delimiter">();</span>
 <span id="L271" class="LineNr">271 </span>    <span class="Normal">else</span>
-<span id="L272" class="LineNr">272 </span>      <a href='003trace.cc.html#L203'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; <a href='031check_operands.cc.html#L278'>maybe_name</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;: missing &quot;</span> &lt;&lt; optype &lt;&lt; <span class="Constant">&quot; operand</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L272" class="LineNr">272 </span>      <a href='003trace.cc.html#L211'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; <a href='031check_operands.cc.html#L278'>maybe_name</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;: missing &quot;</span> &lt;&lt; optype &lt;&lt; <span class="Constant">&quot; operand</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L230'>end</a><span class="Delimiter">();</span>
 <span id="L273" class="LineNr">273 </span>    <span class="Comment">// continue giving all errors for a single instruction</span>
 <span id="L274" class="LineNr">274 </span>  <span class="Delimiter">}</span>
 <span id="L275" class="LineNr">275 </span>  <span class="Comment">// ignore settings in any unused bits</span>
@@ -349,7 +349,7 @@ if ('onhashchange' in window) {
 <span id="L285" class="LineNr">285 </span>  <span class="Normal">uint32_t</span> bitvector = <span class="Constant">0</span><span class="Delimiter">;</span>
 <span id="L286" class="LineNr">286 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Comment">/*</span><span class="Comment">skip op</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L118'>words</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L287" class="LineNr">287 </span>    bitvector = bitvector | <a href='031check_operands.cc.html#L310'>bitvector_for_operand</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L118'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
-<span id="L288" class="LineNr">288 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L217'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span> <a href='031check_operands.cc.html#L93'>INVALID_OPERANDS</a><span class="Delimiter">;</span>  <span class="Comment">// duplicate operand type</span>
+<span id="L288" class="LineNr">288 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L225'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span> <a href='031check_operands.cc.html#L93'>INVALID_OPERANDS</a><span class="Delimiter">;</span>  <span class="Comment">// duplicate operand type</span>
 <span id="L289" class="LineNr">289 </span>  <span class="Delimiter">}</span>
 <span id="L290" class="LineNr">290 </span>  <span class="Identifier">return</span> bitvector<span class="Delimiter">;</span>
 <span id="L291" class="LineNr">291 </span><span class="Delimiter">}</span>
@@ -378,7 +378,7 @@ if ('onhashchange' in window) {
 <span id="L314" class="LineNr">314 </span>    <span class="Normal">const</span> string&amp; curr = w<span class="Delimiter">.</span>metadata<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
 <span id="L315" class="LineNr">315 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span><a href='031check_operands.cc.html#L73'>Operand_type</a><span class="Delimiter">,</span> curr<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// ignore unrecognized metadata</span>
 <span id="L316" class="LineNr">316 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>found<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L317" class="LineNr">317 </span>      <a href='003trace.cc.html#L203'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; w<span class="Delimiter">.</span>original &lt;&lt; <span class="Constant">&quot;' has conflicting operand types; it should have only one</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L317" class="LineNr">317 </span>      <a href='003trace.cc.html#L211'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; w<span class="Delimiter">.</span>original &lt;&lt; <span class="Constant">&quot;' has conflicting operand types; it should have only one</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L230'>end</a><span class="Delimiter">();</span>
 <span id="L318" class="LineNr">318 </span>      <span class="Identifier">return</span> <a href='031check_operands.cc.html#L93'>INVALID_OPERANDS</a><span class="Delimiter">;</span>
 <span id="L319" class="LineNr">319 </span>    <span class="Delimiter">}</span>
 <span id="L320" class="LineNr">320 </span>    bv = <span class="Delimiter">(</span><span class="Constant">1</span> &lt;&lt; get<span class="Delimiter">(</span><a href='031check_operands.cc.html#L73'>Operand_type</a><span class="Delimiter">,</span> curr<span class="Delimiter">));</span>
@@ -412,7 +412,7 @@ if ('onhashchange' in window) {
 <span id="L348" class="LineNr">348 </span>    <a href='031check_operands.cc.html#L389'>check_operand_metadata_present</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">&quot;subop&quot;</span><span class="Delimiter">,</span> op<span class="Delimiter">);</span>
 <span id="L349" class="LineNr">349 </span>    <a href='031check_operands.cc.html#L394'>check_operand_metadata_absent</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">&quot;r32&quot;</span><span class="Delimiter">,</span> op<span class="Delimiter">,</span> <span class="Constant">&quot;should be replaced by subop&quot;</span><span class="Delimiter">);</span>
 <span id="L350" class="LineNr">350 </span>  <span class="Delimiter">}</span>
-<span id="L351" class="LineNr">351 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L217'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L351" class="LineNr">351 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L225'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L352" class="LineNr">352 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">&quot;rm32&quot;</span><span class="Delimiter">).</span><a href='011run.cc.html#L125'>data</a> != <span class="Constant">&quot;4&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L353" class="LineNr">353 </span>  <span class="Comment">// SIB byte checks</span>
 <span id="L354" class="LineNr">354 </span>  <span class="Normal">uint8_t</span> mod = <a href='011run.cc.html#L245'>hex_byte</a><span class="Delimiter">(</span>metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">&quot;mod&quot;</span><span class="Delimiter">).</span><a href='011run.cc.html#L125'>data</a><span class="Delimiter">);</span>
@@ -433,7 +433,7 @@ if ('onhashchange' in window) {
 <span id="L369" class="LineNr">369 </span><span class="Normal">void</span> <a href='031check_operands.cc.html#L369'>compare_bitvector_modrm</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">,</span> <span class="Normal">uint8_t</span> expected<span class="Delimiter">,</span> <span class="Normal">const</span> word&amp; op<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L370" class="LineNr">370 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>all_hex_bytes<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &amp;&amp; <a href='031check_operands.cc.html#L293'>has_operands</a><span class="Delimiter">(</span>inst<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// deliberately programming in raw hex; we'll raise a warning elsewhere</span>
 <span id="L371" class="LineNr">371 </span>  <span class="Normal">uint8_t</span> bitvector = <a href='031check_operands.cc.html#L284'>compute_operand_bitvector</a><span class="Delimiter">(</span>inst<span class="Delimiter">);</span>
-<span id="L372" class="LineNr">372 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L217'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// duplicate operand type</span>
+<span id="L372" class="LineNr">372 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L225'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// duplicate operand type</span>
 <span id="L373" class="LineNr">373 </span>  expected = CLEAR<span class="Delimiter">(</span>expected<span class="Delimiter">,</span> <a href='031check_operands.cc.html#L62'>MODRM</a><span class="Delimiter">);</span>  <span class="Comment">// exception 1</span>
 <span id="L374" class="LineNr">374 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>bitvector == expected<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// all good with this instruction</span>
 <span id="L375" class="LineNr">375 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='031check_operands.cc.html#L69'>NUM_OPERAND_TYPES</a><span class="Delimiter">;</span>  ++i<span class="Delimiter">,</span> bitvector &gt;&gt;= <span class="Constant">1</span><span class="Delimiter">,</span> expected &gt;&gt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
@@ -442,9 +442,9 @@ if ('onhashchange' in window) {
 <span id="L378" class="LineNr">378 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>i == <a href='031check_operands.cc.html#L64'>DISP8</a> || i == <a href='031check_operands.cc.html#L66'>DISP32</a><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// exception 2</span>
 <span id="L379" class="LineNr">379 </span>    <span class="Normal">const</span> string&amp; optype = <a href='031check_operands.cc.html#L72'>Operand_type_name</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
 <span id="L380" class="LineNr">380 </span>    <span class="Normal">if</span> <span class="Delimiter">((</span>bitvector &amp; <span class="Constant">0x1</span><span class="Delimiter">)</span> &gt; <span class="Delimiter">(</span>expected &amp; <span class="Constant">0x1</span><span class="Delimiter">))</span>
-<span id="L381" class="LineNr">381 </span>      <a href='003trace.cc.html#L203'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; <a href='031check_operands.cc.html#L278'>maybe_name</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;: unexpected &quot;</span> &lt;&lt; optype &lt;&lt; <span class="Constant">&quot; operand</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L381" class="LineNr">381 </span>      <a href='003trace.cc.html#L211'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; <a href='031check_operands.cc.html#L278'>maybe_name</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;: unexpected &quot;</span> &lt;&lt; optype &lt;&lt; <span class="Constant">&quot; operand</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L230'>end</a><span class="Delimiter">();</span>
 <span id="L382" class="LineNr">382 </span>    <span class="Normal">else</span>
-<span id="L383" class="LineNr">383 </span>      <a href='003trace.cc.html#L203'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; <a href='031check_operands.cc.html#L278'>maybe_name</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;: missing &quot;</span> &lt;&lt; optype &lt;&lt; <span class="Constant">&quot; operand</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L383" class="LineNr">383 </span>      <a href='003trace.cc.html#L211'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; <a href='031check_operands.cc.html#L278'>maybe_name</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;: missing &quot;</span> &lt;&lt; optype &lt;&lt; <span class="Constant">&quot; operand</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L230'>end</a><span class="Delimiter">();</span>
 <span id="L384" class="LineNr">384 </span>    <span class="Comment">// continue giving all errors for a single instruction</span>
 <span id="L385" class="LineNr">385 </span>  <span class="Delimiter">}</span>
 <span id="L386" class="LineNr">386 </span>  <span class="Comment">// ignore settings in any unused bits</span>
@@ -452,12 +452,12 @@ if ('onhashchange' in window) {
 <span id="L388" class="LineNr">388 </span>
 <span id="L389" class="LineNr">389 </span><span class="Normal">void</span> <a href='031check_operands.cc.html#L389'>check_operand_metadata_present</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; type<span class="Delimiter">,</span> <span class="Normal">const</span> word&amp; op<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L390" class="LineNr">390 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!has_operand_metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> type<span class="Delimiter">))</span>
-<span id="L391" class="LineNr">391 </span>    <a href='003trace.cc.html#L203'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' (&quot;</span> &lt;&lt; get<span class="Delimiter">(</span><a href='010---vm.cc.html#L228'>name</a><span class="Delimiter">,</span> op<span class="Delimiter">.</span><a href='011run.cc.html#L125'>data</a><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;): missing &quot;</span> &lt;&lt; type &lt;&lt; <span class="Constant">&quot; operand</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L391" class="LineNr">391 </span>    <a href='003trace.cc.html#L211'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' (&quot;</span> &lt;&lt; get<span class="Delimiter">(</span><a href='010---vm.cc.html#L228'>name</a><span class="Delimiter">,</span> op<span class="Delimiter">.</span><a href='011run.cc.html#L125'>data</a><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;): missing &quot;</span> &lt;&lt; type &lt;&lt; <span class="Constant">&quot; operand</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L230'>end</a><span class="Delimiter">();</span>
 <span id="L392" class="LineNr">392 </span><span class="Delimiter">}</span>
 <span id="L393" class="LineNr">393 </span>
 <span id="L394" class="LineNr">394 </span><span class="Normal">void</span> <a href='031check_operands.cc.html#L394'>check_operand_metadata_absent</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; type<span class="Delimiter">,</span> <span class="Normal">const</span> word&amp; op<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; msg<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L395" class="LineNr">395 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>has_operand_metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> type<span class="Delimiter">))</span>
-<span id="L396" class="LineNr">396 </span>    <a href='003trace.cc.html#L203'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' (&quot;</span> &lt;&lt; get<span class="Delimiter">(</span><a href='010---vm.cc.html#L228'>name</a><span class="Delimiter">,</span> op<span class="Delimiter">.</span><a href='011run.cc.html#L125'>data</a><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;): unexpected &quot;</span> &lt;&lt; type &lt;&lt; <span class="Constant">&quot; operand (&quot;</span> &lt;&lt; msg &lt;&lt; <span class="Constant">&quot;)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L396" class="LineNr">396 </span>    <a href='003trace.cc.html#L211'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' (&quot;</span> &lt;&lt; get<span class="Delimiter">(</span><a href='010---vm.cc.html#L228'>name</a><span class="Delimiter">,</span> op<span class="Delimiter">.</span><a href='011run.cc.html#L125'>data</a><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;): unexpected &quot;</span> &lt;&lt; type &lt;&lt; <span class="Constant">&quot; operand (&quot;</span> &lt;&lt; msg &lt;&lt; <span class="Constant">&quot;)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L230'>end</a><span class="Delimiter">();</span>
 <span id="L397" class="LineNr">397 </span><span class="Delimiter">}</span>
 <span id="L398" class="LineNr">398 </span>
 <span id="L399" class="LineNr">399 </span><span class="Delimiter">:(scenarios transform)</span>
@@ -522,19 +522,19 @@ if ('onhashchange' in window) {
 <span id="L458" class="LineNr">458 </span><span class="Normal">void</span> <a href='031check_operands.cc.html#L504'>check_operands_0f</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L459" class="LineNr">459 </span>  assert<span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L118'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span><a href='011run.cc.html#L125'>data</a> == <span class="Constant">&quot;0f&quot;</span><span class="Delimiter">);</span>
 <span id="L460" class="LineNr">460 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L118'>words</a><span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L461" class="LineNr">461 </span>    <a href='003trace.cc.html#L203'>raise</a> &lt;&lt; <span class="Constant">&quot;opcode '0f' requires a second opcode</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L461" class="LineNr">461 </span>    <a href='003trace.cc.html#L211'>raise</a> &lt;&lt; <span class="Constant">&quot;opcode '0f' requires a second opcode</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L230'>end</a><span class="Delimiter">();</span>
 <span id="L462" class="LineNr">462 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L463" class="LineNr">463 </span>  <span class="Delimiter">}</span>
 <span id="L464" class="LineNr">464 </span>  <a href='011run.cc.html#L123'>word</a> op = <a href='031check_operands.cc.html#L39'>preprocess_op</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L118'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">));</span>
 <span id="L465" class="LineNr">465 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span><a href='010---vm.cc.html#L229'>name_0f</a><span class="Delimiter">,</span> op<span class="Delimiter">.</span><a href='011run.cc.html#L125'>data</a><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L466" class="LineNr">466 </span>    <a href='003trace.cc.html#L203'>raise</a> &lt;&lt; <span class="Constant">&quot;unknown 2-byte opcode '0f &quot;</span> &lt;&lt; op<span class="Delimiter">.</span>data &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L466" class="LineNr">466 </span>    <a href='003trace.cc.html#L211'>raise</a> &lt;&lt; <span class="Constant">&quot;unknown 2-byte opcode '0f &quot;</span> &lt;&lt; op<span class="Delimiter">.</span>data &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L230'>end</a><span class="Delimiter">();</span>
 <span id="L467" class="LineNr">467 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L468" class="LineNr">468 </span>  <span class="Delimiter">}</span>
 <span id="L469" class="LineNr">469 </span>  <a href='031check_operands.cc.html#L504'>check_operands_0f</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> op<span class="Delimiter">);</span>
 <span id="L470" class="LineNr">470 </span><span class="Delimiter">}</span>
 <span id="L471" class="LineNr">471 </span>
 <span id="L472" class="LineNr">472 </span><span class="Normal">void</span> <a href='031check_operands.cc.html#L472'>check_operands_f3</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; <span class="Comment">/*</span><span class="Comment">unused</span><span class="Comment">*/</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L473" class="LineNr">473 </span>  <a href='003trace.cc.html#L203'>raise</a> &lt;&lt; <span class="Constant">&quot;no supported opcodes starting with f3</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L473" class="LineNr">473 </span>  <a href='003trace.cc.html#L211'>raise</a> &lt;&lt; <span class="Constant">&quot;no supported opcodes starting with f3</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L230'>end</a><span class="Delimiter">();</span>
 <span id="L474" class="LineNr">474 </span><span class="Delimiter">}</span>
 <span id="L475" class="LineNr">475 </span>
 <span id="L476" class="LineNr">476 </span><span class="Delimiter">:(scenario check_missing_disp16_operand)</span>
@@ -575,16 +575,16 @@ if ('onhashchange' in window) {
 <span id="L511" class="LineNr">511 </span><span class="Normal">void</span> <a href='031check_operands.cc.html#L511'>compare_bitvector_0f</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">,</span> <span class="Normal">uint8_t</span> expected<span class="Delimiter">,</span> <span class="Normal">const</span> word&amp; op<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L512" class="LineNr">512 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>all_hex_bytes<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &amp;&amp; <a href='031check_operands.cc.html#L293'>has_operands</a><span class="Delimiter">(</span>inst<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// deliberately programming in raw hex; we'll raise a warning elsewhere</span>
 <span id="L513" class="LineNr">513 </span>  <span class="Normal">uint8_t</span> bitvector = <a href='031check_operands.cc.html#L284'>compute_operand_bitvector</a><span class="Delimiter">(</span>inst<span class="Delimiter">);</span>
-<span id="L514" class="LineNr">514 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L217'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// duplicate operand type</span>
+<span id="L514" class="LineNr">514 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L225'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// duplicate operand type</span>
 <span id="L515" class="LineNr">515 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>bitvector == expected<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// all good with this instruction</span>
 <span id="L516" class="LineNr">516 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='031check_operands.cc.html#L69'>NUM_OPERAND_TYPES</a><span class="Delimiter">;</span>  ++i<span class="Delimiter">,</span> bitvector &gt;&gt;= <span class="Constant">1</span><span class="Delimiter">,</span> expected &gt;&gt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L517" class="LineNr">517 </span><span class="CommentedCode">//?     cerr &lt;&lt; &quot;comparing &quot; &lt;&lt; HEXBYTE &lt;&lt; NUM(bitvector) &lt;&lt; &quot; with &quot; &lt;&lt; NUM(expected) &lt;&lt; '\n';</span>
 <span id="L518" class="LineNr">518 </span>    <span class="Normal">if</span> <span class="Delimiter">((</span>bitvector &amp; <span class="Constant">0x1</span><span class="Delimiter">)</span> == <span class="Delimiter">(</span>expected &amp; <span class="Constant">0x1</span><span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// all good with this operand</span>
 <span id="L519" class="LineNr">519 </span>    <span class="Normal">const</span> string&amp; optype = <a href='031check_operands.cc.html#L72'>Operand_type_name</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
 <span id="L520" class="LineNr">520 </span>    <span class="Normal">if</span> <span class="Delimiter">((</span>bitvector &amp; <span class="Constant">0x1</span><span class="Delimiter">)</span> &gt; <span class="Delimiter">(</span>expected &amp; <span class="Constant">0x1</span><span class="Delimiter">))</span>
-<span id="L521" class="LineNr">521 </span>      <a href='003trace.cc.html#L203'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' (&quot;</span> &lt;&lt; get<span class="Delimiter">(</span><a href='010---vm.cc.html#L229'>name_0f</a><span class="Delimiter">,</span> op<span class="Delimiter">.</span><a href='011run.cc.html#L125'>data</a><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;): unexpected &quot;</span> &lt;&lt; optype &lt;&lt; <span class="Constant">&quot; operand</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L521" class="LineNr">521 </span>      <a href='003trace.cc.html#L211'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' (&quot;</span> &lt;&lt; get<span class="Delimiter">(</span><a href='010---vm.cc.html#L229'>name_0f</a><span class="Delimiter">,</span> op<span class="Delimiter">.</span><a href='011run.cc.html#L125'>data</a><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;): unexpected &quot;</span> &lt;&lt; optype &lt;&lt; <span class="Constant">&quot; operand</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L230'>end</a><span class="Delimiter">();</span>
 <span id="L522" class="LineNr">522 </span>    <span class="Normal">else</span>
-<span id="L523" class="LineNr">523 </span>      <a href='003trace.cc.html#L203'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' (&quot;</span> &lt;&lt; get<span class="Delimiter">(</span><a href='010---vm.cc.html#L229'>name_0f</a><span class="Delimiter">,</span> op<span class="Delimiter">.</span><a href='011run.cc.html#L125'>data</a><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;): missing &quot;</span> &lt;&lt; optype &lt;&lt; <span class="Constant">&quot; operand</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L222'>end</a><span class="Delimiter">();</span>
+<span id="L523" class="LineNr">523 </span>      <a href='003trace.cc.html#L211'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' (&quot;</span> &lt;&lt; get<span class="Delimiter">(</span><a href='010---vm.cc.html#L229'>name_0f</a><span class="Delimiter">,</span> op<span class="Delimiter">.</span><a href='011run.cc.html#L125'>data</a><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;): missing &quot;</span> &lt;&lt; optype &lt;&lt; <span class="Constant">&quot; operand</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L230'>end</a><span class="Delimiter">();</span>
 <span id="L524" class="LineNr">524 </span>    <span class="Comment">// continue giving all errors for a single instruction</span>
 <span id="L525" class="LineNr">525 </span>  <span class="Delimiter">}</span>
 <span id="L526" class="LineNr">526 </span>  <span class="Comment">// ignore settings in any unused bits</span>