diff options
author | Kartik Agaram <vc@akkartik.com> | 2020-05-24 22:43:18 -0700 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2020-05-24 22:43:18 -0700 |
commit | fcc161e70502caf34bc0206d2c428e8341e97fa6 (patch) | |
tree | 8648c7b0de7dcf76d566e8ff1165d152325e756e /html/033check_operands.cc.html | |
parent | f92836550b68fa7df077ea8cedbe7aa35a1095f4 (diff) | |
download | mu-fcc161e70502caf34bc0206d2c428e8341e97fa6.tar.gz |
6397
Drop '---' section boundaries from filenames. I noticed them confusing tab-completion for certain advanced shell setups.
Diffstat (limited to 'html/033check_operands.cc.html')
-rw-r--r-- | html/033check_operands.cc.html | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/html/033check_operands.cc.html b/html/033check_operands.cc.html index c362b050..b657f740 100644 --- a/html/033check_operands.cc.html +++ b/html/033check_operands.cc.html @@ -334,7 +334,7 @@ if ('onhashchange' in window) { <span id="L273" class="LineNr">273 </span><span class="Comment">//: Many instructions can be checked just by comparing bitvectors.</span> <span id="L274" class="LineNr">274 </span> <span id="L275" class="LineNr">275 </span><span class="Normal">void</span> <a href='033check_operands.cc.html#L275'>compare_bitvector</a><span class="Delimiter">(</span><span class="Normal">const</span> line& inst<span class="Delimiter">,</span> <span class="Normal">uint8_t</span> expected<span class="Delimiter">,</span> <span class="Normal">const</span> string& maybe_op_name<span class="Delimiter">)</span> <span class="Delimiter">{</span> -<span id="L276" class="LineNr">276 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='032---operands.cc.html#L430'>all_hex_bytes</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> && <a href='033check_operands.cc.html#L311'>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="L276" class="LineNr">276 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='032operands.cc.html#L430'>all_hex_bytes</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> && <a href='033check_operands.cc.html#L311'>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="L277" class="LineNr">277 </span> <span class="Normal">uint8_t</span> bitvector = <a href='033check_operands.cc.html#L301'>compute_expected_operand_bitvector</a><span class="Delimiter">(</span>inst<span class="Delimiter">);</span> <span id="L278" class="LineNr">278 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L264'>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="L279" class="LineNr">279 </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> @@ -353,9 +353,9 @@ if ('onhashchange' in window) { <span id="L292" class="LineNr">292 </span> <span id="L293" class="LineNr">293 </span>string <a href='033check_operands.cc.html#L293'>maybe_name</a><span class="Delimiter">(</span><span class="Normal">const</span> word& op<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L294" class="LineNr">294 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_hex_byte<span class="Delimiter">(</span>op<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">""</span><span class="Delimiter">;</span> -<span id="L295" class="LineNr">295 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L342'>Name</a></span><span class="Delimiter">,</span> op<span class="Delimiter">.</span>data<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">""</span><span class="Delimiter">;</span> +<span id="L295" class="LineNr">295 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span><span class="Special"><a href='010vm.cc.html#L342'>Name</a></span><span class="Delimiter">,</span> op<span class="Delimiter">.</span>data<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">""</span><span class="Delimiter">;</span> <span id="L296" class="LineNr">296 </span> <span class="Comment">// strip stuff in parens from the name</span> -<span id="L297" class="LineNr">297 </span> <span class="Normal">const</span> string& s = get<span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L342'>Name</a></span><span class="Delimiter">,</span> op<span class="Delimiter">.</span>data<span class="Delimiter">);</span> +<span id="L297" class="LineNr">297 </span> <span class="Normal">const</span> string& s = get<span class="Delimiter">(</span><span class="Special"><a href='010vm.cc.html#L342'>Name</a></span><span class="Delimiter">,</span> op<span class="Delimiter">.</span>data<span class="Delimiter">);</span> <span id="L298" class="LineNr">298 </span> <span class="Identifier">return</span> <span class="Constant">" ("</span>+s<span class="Delimiter">.</span>substr<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">,</span> s<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">" ("</span><span class="Delimiter">))</span>+<span class="Constant">')'</span><span class="Delimiter">;</span> <span id="L299" class="LineNr">299 </span><span class="Delimiter">}</span> <span id="L300" class="LineNr">300 </span> @@ -436,7 +436,7 @@ if ('onhashchange' in window) { <span id="L375" class="LineNr">375 </span><span class="Delimiter">}</span> <span id="L376" class="LineNr">376 </span> <span id="L377" class="LineNr">377 </span><span class="Normal">void</span> <a href='033check_operands.cc.html#L377'>check_operands_modrm</a><span class="Delimiter">(</span><span class="Normal">const</span> line& inst<span class="Delimiter">,</span> <span class="Normal">const</span> word& op<span class="Delimiter">)</span> <span class="Delimiter">{</span> -<span id="L378" class="LineNr">378 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='032---operands.cc.html#L430'>all_hex_bytes</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="L378" class="LineNr">378 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='032operands.cc.html#L430'>all_hex_bytes</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="L379" class="LineNr">379 </span> <a href='033check_operands.cc.html#L437'>check_operand_metadata_present</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"mod"</span><span class="Delimiter">,</span> op<span class="Delimiter">);</span> <span id="L380" class="LineNr">380 </span> <a href='033check_operands.cc.html#L437'>check_operand_metadata_present</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"rm32"</span><span class="Delimiter">,</span> op<span class="Delimiter">);</span> <span id="L381" class="LineNr">381 </span> <span class="Comment">// no check for r32; some instructions don't use it; just assume it's 0 if missing</span> @@ -462,15 +462,15 @@ if ('onhashchange' in window) { <span id="L401" class="LineNr">401 </span><span class="Comment">// same as compare_bitvector, with one additional exception for modrm-based</span> <span id="L402" class="LineNr">402 </span><span class="Comment">// instructions: they may use an extra displacement on occasion</span> <span id="L403" class="LineNr">403 </span><span class="Normal">void</span> <a href='033check_operands.cc.html#L403'>compare_bitvector_modrm</a><span class="Delimiter">(</span><span class="Normal">const</span> line& inst<span class="Delimiter">,</span> <span class="Normal">uint8_t</span> expected<span class="Delimiter">,</span> <span class="Normal">const</span> string& maybe_op_name<span class="Delimiter">)</span> <span class="Delimiter">{</span> -<span id="L404" class="LineNr">404 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='032---operands.cc.html#L430'>all_hex_bytes</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> && <a href='033check_operands.cc.html#L311'>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="L404" class="LineNr">404 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='032operands.cc.html#L430'>all_hex_bytes</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> && <a href='033check_operands.cc.html#L311'>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="L405" class="LineNr">405 </span> <span class="Normal">uint8_t</span> bitvector = <a href='033check_operands.cc.html#L301'>compute_expected_operand_bitvector</a><span class="Delimiter">(</span>inst<span class="Delimiter">);</span> <span id="L406" class="LineNr">406 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L264'>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="L407" class="LineNr">407 </span> <span class="Comment">// update 'expected' bitvector for the additional exception</span> <span id="L408" class="LineNr">408 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>has_operand_metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"mod"</span><span class="Delimiter">))</span> <span class="Delimiter">{</span> -<span id="L409" class="LineNr">409 </span> <span class="Normal">int32_t</span> mod = <a href='032---operands.cc.html#L507'>parse_int</a><span class="Delimiter">(</span>metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"mod"</span><span class="Delimiter">).</span>data<span class="Delimiter">);</span> +<span id="L409" class="LineNr">409 </span> <span class="Normal">int32_t</span> mod = <a href='032operands.cc.html#L507'>parse_int</a><span class="Delimiter">(</span>metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"mod"</span><span class="Delimiter">).</span>data<span class="Delimiter">);</span> <span id="L410" class="LineNr">410 </span> <span class="Normal">switch</span> <span class="Delimiter">(</span>mod<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L411" class="LineNr">411 </span> <span class="Normal">case</span> <span class="Constant">0</span>: -<span id="L412" class="LineNr">412 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>has_operand_metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"rm32"</span><span class="Delimiter">)</span> && <a href='032---operands.cc.html#L507'>parse_int</a><span class="Delimiter">(</span>metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"rm32"</span><span class="Delimiter">).</span>data<span class="Delimiter">)</span> == <span class="Constant">5</span><span class="Delimiter">)</span> +<span id="L412" class="LineNr">412 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>has_operand_metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"rm32"</span><span class="Delimiter">)</span> && <a href='032operands.cc.html#L507'>parse_int</a><span class="Delimiter">(</span>metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">"rm32"</span><span class="Delimiter">).</span>data<span class="Delimiter">)</span> == <span class="Constant">5</span><span class="Delimiter">)</span> <span id="L413" class="LineNr">413 </span> expected |= <span class="Delimiter">(</span><span class="Constant">1</span><<DISP32<span class="Delimiter">);</span> <span id="L414" class="LineNr">414 </span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span id="L415" class="LineNr">415 </span> <span class="Normal">case</span> <span class="Constant">1</span>: @@ -506,7 +506,7 @@ if ('onhashchange' in window) { <span id="L445" class="LineNr">445 </span><span class="Delimiter">}</span> <span id="L446" class="LineNr">446 </span> <span id="L447" class="LineNr">447 </span><span class="Normal">void</span> <a href='033check_operands.cc.html#L447'>test_modrm_with_displacement</a><span class="Delimiter">()</span> <span class="Delimiter">{</span> -<span id="L448" class="LineNr">448 </span> <span class="Special"><a href='010---vm.cc.html#L25'>Reg</a></span>[EAX]<span class="Delimiter">.</span>u = <span class="Constant">0x1</span><span class="Delimiter">;</span> +<span id="L448" class="LineNr">448 </span> <span class="Special"><a href='010vm.cc.html#L25'>Reg</a></span>[EAX]<span class="Delimiter">.</span>u = <span class="Constant">0x1</span><span class="Delimiter">;</span> <span id="L449" class="LineNr">449 </span> transform<span class="Delimiter">(</span> <span id="L450" class="LineNr">450 </span> <span class="Constant">"== code 0x1\n"</span> <span id="L451" class="LineNr">451 </span> <span class="Comment">// just avoid null pointer</span> @@ -533,7 +533,7 @@ if ('onhashchange' in window) { <span id="L472" class="LineNr">472 </span> <span class="Constant">"8b/copy 0/mod/indirect 5/rm32/.disp32 2/r32/EDX\n"</span> <span class="Comment">// missing disp32</span> <span id="L473" class="LineNr">473 </span> <span class="Delimiter">);</span> <span id="L474" class="LineNr">474 </span> <a href='003trace.cc.html#L292'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span> -<span id="L475" class="LineNr">475 </span> <span class="Constant">"error: '8b/copy 0/mod/indirect 5/rm32/.disp32 2/r32/EDX' (copy rm32 to r32): missing <a href='040---tests.cc.html#L82'>disp32</a> operand\n"</span> +<span id="L475" class="LineNr">475 </span> <span class="Constant">"error: '8b/copy 0/mod/indirect 5/rm32/.disp32 2/r32/EDX' (copy rm32 to r32): missing <a href='040tests.cc.html#L82'>disp32</a> operand\n"</span> <span id="L476" class="LineNr">476 </span> <span class="Delimiter">);</span> <span id="L477" class="LineNr">477 </span><span class="Delimiter">}</span> <span id="L478" class="LineNr">478 </span> @@ -651,7 +651,7 @@ if ('onhashchange' in window) { <span id="L590" class="LineNr">590 </span> <span class="Constant">"59/pop-to-ECX 3/mod/direct 1/rm32/ECX 4/r32/ESP\n"</span> <span id="L591" class="LineNr">591 </span> <span class="Delimiter">);</span> <span id="L592" class="LineNr">592 </span> <a href='003trace.cc.html#L292'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span> -<span id="L593" class="LineNr">593 </span> <span class="Constant">"error: '59/pop-to-ECX 3/mod/direct 1/rm32/ECX 4/r32/ESP' (<a href='013direct_addressing.cc.html#L1270'>pop</a> top of stack to <a href='010---vm.cc.html#L11'>ECX</a>): unexpected modrm operand\n"</span> +<span id="L593" class="LineNr">593 </span> <span class="Constant">"error: '59/pop-to-ECX 3/mod/direct 1/rm32/ECX 4/r32/ESP' (<a href='013direct_addressing.cc.html#L1270'>pop</a> top of stack to <a href='010vm.cc.html#L11'>ECX</a>): unexpected modrm operand\n"</span> <span id="L594" class="LineNr">594 </span> <span class="Delimiter">);</span> <span id="L595" class="LineNr">595 </span><span class="Delimiter">}</span> <span id="L596" class="LineNr">596 </span> @@ -664,7 +664,7 @@ if ('onhashchange' in window) { <span id="L603" class="LineNr">603 </span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span id="L604" class="LineNr">604 </span> <span class="Delimiter">}</span> <span id="L605" class="LineNr">605 </span> <a href='011run.cc.html#L127'>word</a> op = <a href='033check_operands.cc.html#L41'>preprocess_op</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L122'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">));</span> -<span id="L606" class="LineNr">606 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L343'>Name_0f</a></span><span class="Delimiter">,</span> op<span class="Delimiter">.</span>data<span class="Delimiter">))</span> <span class="Delimiter">{</span> +<span id="L606" class="LineNr">606 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span><span class="Special"><a href='010vm.cc.html#L343'>Name_0f</a></span><span class="Delimiter">,</span> op<span class="Delimiter">.</span>data<span class="Delimiter">))</span> <span class="Delimiter">{</span> <span id="L607" class="LineNr">607 </span> <a href='003trace.cc.html#L228'>raise</a> << <span class="Constant">"unknown 2-byte opcode '0f "</span> << op<span class="Delimiter">.</span>data << <span class="Constant">"'\n"</span> << end<span class="Delimiter">();</span> <span id="L608" class="LineNr">608 </span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span id="L609" class="LineNr">609 </span> <span class="Delimiter">}</span> @@ -682,7 +682,7 @@ if ('onhashchange' in window) { <span id="L621" class="LineNr">621 </span> <span class="Constant">" 0f 84 # jmp if ZF to ??\n"</span> <span id="L622" class="LineNr">622 </span> <span class="Delimiter">);</span> <span id="L623" class="LineNr">623 </span> <a href='003trace.cc.html#L292'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span> -<span id="L624" class="LineNr">624 </span> <span class="Constant">"error: '0f 84' (jump <a href='040---tests.cc.html#L82'>disp32</a> bytes away if equal, if <a href='010---vm.cc.html#L80'>ZF</a> is set): missing <a href='040---tests.cc.html#L82'>disp32</a> operand\n"</span> +<span id="L624" class="LineNr">624 </span> <span class="Constant">"error: '0f 84' (jump <a href='040tests.cc.html#L82'>disp32</a> bytes away if equal, if <a href='010vm.cc.html#L80'>ZF</a> is set): missing <a href='040tests.cc.html#L82'>disp32</a> operand\n"</span> <span id="L625" class="LineNr">625 </span> <span class="Delimiter">);</span> <span id="L626" class="LineNr">626 </span><span class="Delimiter">}</span> <span id="L627" class="LineNr">627 </span> @@ -741,9 +741,9 @@ if ('onhashchange' in window) { <span id="L680" class="LineNr">680 </span> <span id="L681" class="LineNr">681 </span>string <a href='033check_operands.cc.html#L681'>maybe_name_0f</a><span class="Delimiter">(</span><span class="Normal">const</span> word& op<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L682" class="LineNr">682 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_hex_byte<span class="Delimiter">(</span>op<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">""</span><span class="Delimiter">;</span> -<span id="L683" class="LineNr">683 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L343'>Name_0f</a></span><span class="Delimiter">,</span> op<span class="Delimiter">.</span>data<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">""</span><span class="Delimiter">;</span> +<span id="L683" class="LineNr">683 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span><span class="Special"><a href='010vm.cc.html#L343'>Name_0f</a></span><span class="Delimiter">,</span> op<span class="Delimiter">.</span>data<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">""</span><span class="Delimiter">;</span> <span id="L684" class="LineNr">684 </span> <span class="Comment">// strip stuff in parens from the name</span> -<span id="L685" class="LineNr">685 </span> <span class="Normal">const</span> string& s = get<span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L343'>Name_0f</a></span><span class="Delimiter">,</span> op<span class="Delimiter">.</span>data<span class="Delimiter">);</span> +<span id="L685" class="LineNr">685 </span> <span class="Normal">const</span> string& s = get<span class="Delimiter">(</span><span class="Special"><a href='010vm.cc.html#L343'>Name_0f</a></span><span class="Delimiter">,</span> op<span class="Delimiter">.</span>data<span class="Delimiter">);</span> <span id="L686" class="LineNr">686 </span> <span class="Identifier">return</span> <span class="Constant">" ("</span>+s<span class="Delimiter">.</span>substr<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">,</span> s<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">" ("</span><span class="Delimiter">))</span>+<span class="Constant">')'</span><span class="Delimiter">;</span> <span id="L687" class="LineNr">687 </span><span class="Delimiter">}</span> <span id="L688" class="LineNr">688 </span> |