summary refs log tree commit diff stats
path: root/lib/system/inclrtl.nim
blob: aac8022293e4d1de2583446344a200a813999a09 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#
#
#            Nim's Runtime Library
#        (c) Copyright 2014 Andreas Rumpf
#
#    See the file "copying.txt", included in this
#    distribution, for details about the copyright.
#

# Pragmas for RTL generation. Has to be an include, because user-defined
# pragmas cannot be exported.

# There are 3 different usages:
# 1) Ordinary imported code.
# 2) Imported from nimrtl.
#    -> defined(useNimRtl) or appType == "lib" and not defined(createNimRtl)
# 3) Exported into nimrtl.
#    -> appType == "lib" and defined(createNimRtl)
when not defined(nimNewShared):
  {.pragma: gcsafe.}

when defined(createNimRtl):
  when defined(useNimRtl): 
    {.error: "Cannot create and use nimrtl at the same time!".}
  elif appType != "lib":
    {.error: "nimrtl must be built as a library!".}

when defined(createNimRtl): 
  {.pragma: rtl, exportc: "nimrtl_$1", dynlib, gcsafe.}
  {.pragma: inl.}
  {.pragma: compilerRtl, compilerproc, exportc: "nimrtl_$1", dynlib.}
elif defined(useNimRtl):
  when defined(windows): 
    const nimrtl* = "nimrtl.dll"
  elif defined(macosx):
    const nimrtl* = "nimrtl.dylib"
  else: 
    const nimrtl* = "libnimrtl.so"
  {.pragma: rtl, importc: "nimrtl_$1", dynlib: nimrtl, gcsafe.}
  {.pragma: inl.}
  {.pragma: compilerRtl, compilerproc, importc: "nimrtl_$1", dynlib: nimrtl.}
else:
  {.pragma: rtl, gcsafe.}
  {.pragma: inl, inline.}
  {.pragma: compilerRtl, compilerproc.}

when not defined(nimsuperops):
  {.pragma: operator.}

when defined(nimlocks):
  {.pragma: benign, gcsafe, locks: 0.}
else:
  {.pragma: benign, gcsafe.}
40'>440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470
<!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 - 017jump_disp8.cc</title>
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="cpp">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style type="text/css">
<!--
pre { white-space: pre-wrap; 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; }
.LineNr { }
.Normal { color: #000000; background-color: #c6c6c6; padding-bottom: 1px; }
.Comment { color: #005faf; }
.Delimiter { color: #c000c0; }
.Special { color: #d70000; }
.Identifier { color: #af5f00; }
.Constant { color: #008787; }
.SalientComment { color: #0000af; }
-->
</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/017jump_disp8.cc'>https://github.com/akkartik/mu/blob/master/017jump_disp8.cc</a>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr">  1 </span><span class="Comment">//: jump to 8-bit offset</span>
<span id="L2" class="LineNr">  2 </span>
<span id="L3" class="LineNr">  3 </span><span class="SalientComment">//:: jump</span>
<span id="L4" class="LineNr">  4 </span>
<span id="L5" class="LineNr">  5 </span><span class="Delimiter">:(before &quot;End Initialize Op Names&quot;)</span>
<span id="L6" class="LineNr">  6 </span><a href='001help.cc.html#L265'>put_new</a><span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L348'>Name</a></span><span class="Delimiter">,</span> <span class="Constant">&quot;eb&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp8 bytes away (jmp)&quot;</span><span class="Delimiter">);</span>
<span id="L7" class="LineNr">  7 </span>
<span id="L8" class="LineNr">  8 </span><span class="Delimiter">:(code)</span>
<span id="L9" class="LineNr">  9 </span><span class="Normal">void</span> <a href='017jump_disp8.cc.html#L9'>test_jump_disp8</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L10" class="LineNr"> 10 </span>  <a href='011run.cc.html#L83'>run</a><span class="Delimiter">(</span>
<span id="L11" class="LineNr"> 11 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L12" class="LineNr"> 12 </span>      <span class="Comment">// op     ModR/M  SIB   displacement  immediate</span>
<span id="L13" class="LineNr"> 13 </span>      <span class="Constant">&quot;  eb                   05                        \n&quot;</span>  <span class="Comment">// skip 1 instruction</span>
<span id="L14" class="LineNr"> 14 </span>      <span class="Constant">&quot;  05                                 00 00 00 01 \n&quot;</span>
<span id="L15" class="LineNr"> 15 </span>      <span class="Constant">&quot;  05                                 00 00 00 02 \n&quot;</span>
<span id="L16" class="LineNr"> 16 </span>  <span class="Delimiter">);</span>
<span id="L17" class="LineNr"> 17 </span>  <a href='003trace.cc.html#L292'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span>
<span id="L18" class="LineNr"> 18 </span>      <span class="Constant">&quot;run: 0x00000001 opcode: eb\n&quot;</span>
<span id="L19" class="LineNr"> 19 </span>      <span class="Constant">&quot;run: jump 5\n&quot;</span>
<span id="L20" class="LineNr"> 20 </span>      <span class="Constant">&quot;run: 0x00000008 opcode: 05\n&quot;</span>
<span id="L21" class="LineNr"> 21 </span>  <span class="Delimiter">);</span>
<span id="L22" class="LineNr"> 22 </span>  <a href='003trace.cc.html#L294'>CHECK_TRACE_DOESNT_CONTAIN</a><span class="Delimiter">(</span><span class="Constant">&quot;run: 0x00000003 opcode: 05&quot;</span><span class="Delimiter">);</span>
<span id="L23" class="LineNr"> 23 </span><span class="Delimiter">}</span>
<span id="L24" class="LineNr"> 24 </span>
<span id="L25" class="LineNr"> 25 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
<span id="L26" class="LineNr"> 26 </span><span class="Normal">case</span> <span class="Constant">0xeb</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump disp8</span>
<span id="L27" class="LineNr"> 27 </span>  <span class="Normal">int8_t</span> offset = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='010---vm.cc.html#L331'>next</a><span class="Delimiter">());</span>
<span id="L28" class="LineNr"> 28 </span>  <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Special">Callstack_depth</span>+<span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010---vm.cc.html#L403'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L29" class="LineNr"> 29 </span>  <a href='010---vm.cc.html#L32'>EIP</a> += offset<span class="Delimiter">;</span>
<span id="L30" class="LineNr"> 30 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L31" class="LineNr"> 31 </span><span class="Delimiter">}</span>
<span id="L32" class="LineNr"> 32 </span>
<span id="L33" class="LineNr"> 33 </span><span class="SalientComment">//:: jump if equal/zero</span>
<span id="L34" class="LineNr"> 34 </span>
<span id="L35" class="LineNr"> 35 </span><span class="Delimiter">:(before &quot;End Initialize Op Names&quot;)</span>
<span id="L36" class="LineNr"> 36 </span><a href='001help.cc.html#L265'>put_new</a><span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L348'>Name</a></span><span class="Delimiter">,</span> <span class="Constant">&quot;74&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp8 bytes away if equal, if <a href='010---vm.cc.html#L86'>ZF</a> is set (jcc/jz/je)&quot;</span><span class="Delimiter">);</span>
<span id="L37" class="LineNr"> 37 </span>
<span id="L38" class="LineNr"> 38 </span><span class="Delimiter">:(code)</span>
<span id="L39" class="LineNr"> 39 </span><span class="Normal">void</span> <a href='017jump_disp8.cc.html#L39'>test_je_disp8_success</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L40" class="LineNr"> 40 </span>  <a href='010---vm.cc.html#L86'>ZF</a> = <span class="Constant">true</span><span class="Delimiter">;</span>
<span id="L41" class="LineNr"> 41 </span>  <a href='011run.cc.html#L83'>run</a><span class="Delimiter">(</span>
<span id="L42" class="LineNr"> 42 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L43" class="LineNr"> 43 </span>      <span class="Comment">// op     ModR/M  SIB   displacement  immediate</span>
<span id="L44" class="LineNr"> 44 </span>      <span class="Constant">&quot;  74                   05                        \n&quot;</span>  <span class="Comment">// skip 1 instruction</span>
<span id="L45" class="LineNr"> 45 </span>      <span class="Constant">&quot;  05                                 00 00 00 01 \n&quot;</span>
<span id="L46" class="LineNr"> 46 </span>      <span class="Constant">&quot;  05                                 00 00 00 02 \n&quot;</span>
<span id="L47" class="LineNr"> 47 </span>  <span class="Delimiter">);</span>
<span id="L48" class="LineNr"> 48 </span>  <a href='003trace.cc.html#L292'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span>
<span id="L49" class="LineNr"> 49 </span>      <span class="Constant">&quot;run: 0x00000001 opcode: 74\n&quot;</span>
<span id="L50" class="LineNr"> 50 </span>      <span class="Constant">&quot;run: jump 5\n&quot;</span>
<span id="L51" class="LineNr"> 51 </span>      <span class="Constant">&quot;run: 0x00000008 opcode: 05\n&quot;</span>
<span id="L52" class="LineNr"> 52 </span>  <span class="Delimiter">);</span>
<span id="L53" class="LineNr"> 53 </span>  <a href='003trace.cc.html#L294'>CHECK_TRACE_DOESNT_CONTAIN</a><span class="Delimiter">(</span><span class="Constant">&quot;run: 0x00000003 opcode: 05&quot;</span><span class="Delimiter">);</span>
<span id="L54" class="LineNr"> 54 </span><span class="Delimiter">}</span>
<span id="L55" class="LineNr"> 55 </span>
<span id="L56" class="LineNr"> 56 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
<span id="L57" class="LineNr"> 57 </span><span class="Normal">case</span> <span class="Constant">0x74</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump disp8 if ZF</span>
<span id="L58" class="LineNr"> 58 </span>  <span class="Normal">const</span> <span class="Normal">int8_t</span> offset = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='010---vm.cc.html#L331'>next</a><span class="Delimiter">());</span>
<span id="L59" class="LineNr"> 59 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='010---vm.cc.html#L86'>ZF</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L60" class="LineNr"> 60 </span>    <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Special">Callstack_depth</span>+<span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010---vm.cc.html#L403'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L61" class="LineNr"> 61 </span>    <a href='010---vm.cc.html#L32'>EIP</a> += offset<span class="Delimiter">;</span>
<span id="L62" class="LineNr"> 62 </span>  <span class="Delimiter">}</span>
<span id="L63" class="LineNr"> 63 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L64" class="LineNr"> 64 </span><span class="Delimiter">}</span>
<span id="L65" class="LineNr"> 65 </span>
<span id="L66" class="LineNr"> 66 </span><span class="Delimiter">:(code)</span>
<span id="L67" class="LineNr"> 67 </span><span class="Normal">void</span> <a href='017jump_disp8.cc.html#L67'>test_je_disp8_fail</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L68" class="LineNr"> 68 </span>  <a href='010---vm.cc.html#L86'>ZF</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L69" class="LineNr"> 69 </span>  <a href='011run.cc.html#L83'>run</a><span class="Delimiter">(</span>
<span id="L70" class="LineNr"> 70 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L71" class="LineNr"> 71 </span>      <span class="Comment">// op     ModR/M  SIB   displacement  immediate</span>
<span id="L72" class="LineNr"> 72 </span>      <span class="Constant">&quot;  74                   05                        \n&quot;</span>  <span class="Comment">// skip 1 instruction</span>
<span id="L73" class="LineNr"> 73 </span>      <span class="Constant">&quot;  05                                 00 00 00 01 \n&quot;</span>
<span id="L74" class="LineNr"> 74 </span>      <span class="Constant">&quot;  05                                 00 00 00 02 \n&quot;</span>
<span id="L75" class="LineNr"> 75 </span>  <span class="Delimiter">);</span>
<span id="L76" class="LineNr"> 76 </span>  <a href='003trace.cc.html#L292'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span>
<span id="L77" class="LineNr"> 77 </span>      <span class="Constant">&quot;run: 0x00000001 opcode: 74\n&quot;</span>
<span id="L78" class="LineNr"> 78 </span>      <span class="Constant">&quot;run: 0x00000003 opcode: 05\n&quot;</span>
<span id="L79" class="LineNr"> 79 </span>      <span class="Constant">&quot;run: 0x00000008 opcode: 05\n&quot;</span>
<span id="L80" class="LineNr"> 80 </span>  <span class="Delimiter">);</span>
<span id="L81" class="LineNr"> 81 </span>  <a href='003trace.cc.html#L294'>CHECK_TRACE_DOESNT_CONTAIN</a><span class="Delimiter">(</span><span class="Constant">&quot;run: jump 5&quot;</span><span class="Delimiter">);</span>
<span id="L82" class="LineNr"> 82 </span><span class="Delimiter">}</span>
<span id="L83" class="LineNr"> 83 </span>
<span id="L84" class="LineNr"> 84 </span><span class="SalientComment">//:: jump if not equal/not zero</span>
<span id="L85" class="LineNr"> 85 </span>
<span id="L86" class="LineNr"> 86 </span><span class="Delimiter">:(before &quot;End Initialize Op Names&quot;)</span>
<span id="L87" class="LineNr"> 87 </span><a href='001help.cc.html#L265'>put_new</a><span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L348'>Name</a></span><span class="Delimiter">,</span> <span class="Constant">&quot;75&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp8 bytes away if not equal, if <a href='010---vm.cc.html#L86'>ZF</a> is not set (jcc/jnz/jne)&quot;</span><span class="Delimiter">);</span>
<span id="L88" class="LineNr"> 88 </span>
<span id="L89" class="LineNr"> 89 </span><span class="Delimiter">:(code)</span>
<span id="L90" class="LineNr"> 90 </span><span class="Normal">void</span> <a href='017jump_disp8.cc.html#L90'>test_jne_disp8_success</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L91" class="LineNr"> 91 </span>  <a href='010---vm.cc.html#L86'>ZF</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L92" class="LineNr"> 92 </span>  <a href='011run.cc.html#L83'>run</a><span class="Delimiter">(</span>
<span id="L93" class="LineNr"> 93 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L94" class="LineNr"> 94 </span>      <span class="Comment">// op     ModR/M  SIB   displacement  immediate</span>
<span id="L95" class="LineNr"> 95 </span>      <span class="Constant">&quot;  75                   05                        \n&quot;</span>  <span class="Comment">// skip 1 instruction</span>
<span id="L96" class="LineNr"> 96 </span>      <span class="Constant">&quot;  05                                 00 00 00 01 \n&quot;</span>
<span id="L97" class="LineNr"> 97 </span>      <span class="Constant">&quot;  05                                 00 00 00 02 \n&quot;</span>
<span id="L98" class="LineNr"> 98 </span>  <span class="Delimiter">);</span>
<span id="L99" class="LineNr"> 99 </span>  <a href='003trace.cc.html#L292'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span>
<span id="L100" class="LineNr">100 </span>      <span class="Constant">&quot;run: 0x00000001 opcode: 75\n&quot;</span>
<span id="L101" class="LineNr">101 </span>      <span class="Constant">&quot;run: jump 5\n&quot;</span>
<span id="L102" class="LineNr">102 </span>      <span class="Constant">&quot;run: 0x00000008 opcode: 05\n&quot;</span>
<span id="L103" class="LineNr">103 </span>  <span class="Delimiter">);</span>
<span id="L104" class="LineNr">104 </span>  <a href='003trace.cc.html#L294'>CHECK_TRACE_DOESNT_CONTAIN</a><span class="Delimiter">(</span><span class="Constant">&quot;run: 0x00000003 opcode: 05&quot;</span><span class="Delimiter">);</span>
<span id="L105" class="LineNr">105 </span><span class="Delimiter">}</span>
<span id="L106" class="LineNr">106 </span>
<span id="L107" class="LineNr">107 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
<span id="L108" class="LineNr">108 </span><span class="Normal">case</span> <span class="Constant">0x75</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump disp8 unless ZF</span>
<span id="L109" class="LineNr">109 </span>  <span class="Normal">const</span> <span class="Normal">int8_t</span> offset = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='010---vm.cc.html#L331'>next</a><span class="Delimiter">());</span>
<span id="L110" class="LineNr">110 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!ZF<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L111" class="LineNr">111 </span>    <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Special">Callstack_depth</span>+<span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010---vm.cc.html#L403'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L112" class="LineNr">112 </span>    <a href='010---vm.cc.html#L32'>EIP</a> += offset<span class="Delimiter">;</span>
<span id="L113" class="LineNr">113 </span>  <span class="Delimiter">}</span>
<span id="L114" class="LineNr">114 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L115" class="LineNr">115 </span><span class="Delimiter">}</span>
<span id="L116" class="LineNr">116 </span>
<span id="L117" class="LineNr">117 </span><span class="Delimiter">:(code)</span>
<span id="L118" class="LineNr">118 </span><span class="Normal">void</span> <a href='017jump_disp8.cc.html#L118'>test_jne_disp8_fail</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L119" class="LineNr">119 </span>  <a href='010---vm.cc.html#L86'>ZF</a> = <span class="Constant">true</span><span class="Delimiter">;</span>
<span id="L120" class="LineNr">120 </span>  <a href='011run.cc.html#L83'>run</a><span class="Delimiter">(</span>
<span id="L121" class="LineNr">121 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L122" class="LineNr">122 </span>      <span class="Comment">// op     ModR/M  SIB   displacement  immediate</span>
<span id="L123" class="LineNr">123 </span>      <span class="Constant">&quot;  75                   05                        \n&quot;</span>  <span class="Comment">// skip 1 instruction</span>
<span id="L124" class="LineNr">124 </span>      <span class="Constant">&quot;  05                                 00 00 00 01 \n&quot;</span>
<span id="L125" class="LineNr">125 </span>      <span class="Constant">&quot;  05                                 00 00 00 02 \n&quot;</span>
<span id="L126" class="LineNr">126 </span>  <span class="Delimiter">);</span>
<span id="L127" class="LineNr">127 </span>  <a href='003trace.cc.html#L292'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span>
<span id="L128" class="LineNr">128 </span>      <span class="Constant">&quot;run: 0x00000001 opcode: 75\n&quot;</span>
<span id="L129" class="LineNr">129 </span>      <span class="Constant">&quot;run: 0x00000003 opcode: 05\n&quot;</span>
<span id="L130" class="LineNr">130 </span>      <span class="Constant">&quot;run: 0x00000008 opcode: 05\n&quot;</span>
<span id="L131" class="LineNr">131 </span>  <span class="Delimiter">);</span>
<span id="L132" class="LineNr">132 </span>  <a href='003trace.cc.html#L294'>CHECK_TRACE_DOESNT_CONTAIN</a><span class="Delimiter">(</span><span class="Constant">&quot;run: jump 5&quot;</span><span class="Delimiter">);</span>
<span id="L133" class="LineNr">133 </span><span class="Delimiter">}</span>
<span id="L134" class="LineNr">134 </span>
<span id="L135" class="LineNr">135 </span><span class="SalientComment">//:: jump if greater</span>
<span id="L136" class="LineNr">136 </span>
<span id="L137" class="LineNr">137 </span><span class="Delimiter">:(before &quot;End Initialize Op Names&quot;)</span>
<span id="L138" class="LineNr">138 </span><a href='001help.cc.html#L265'>put_new</a><span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L348'>Name</a></span><span class="Delimiter">,</span> <span class="Constant">&quot;7f&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp8 bytes away if greater (signed), if <a href='010---vm.cc.html#L86'>ZF</a> is unset and SF == <a href='010---vm.cc.html#L88'>OF</a> (jcc/jg/jnle)&quot;</span><span class="Delimiter">);</span>
<span id="L139" class="LineNr">139 </span><a href='001help.cc.html#L265'>put_new</a><span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L348'>Name</a></span><span class="Delimiter">,</span> <span class="Constant">&quot;77&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp8 bytes away if greater (unsigned), if <a href='010---vm.cc.html#L86'>ZF</a> is unset and <a href='010---vm.cc.html#L87'>CF</a> is unset (jcc/ja/jnbe)&quot;</span><span class="Delimiter">);</span>
<span id="L140" class="LineNr">140 </span>
<span id="L141" class="LineNr">141 </span><span class="Delimiter">:(code)</span>
<span id="L142" class="LineNr">142 </span><span class="Normal">void</span> <a href='017jump_disp8.cc.html#L142'>test_jg_disp8_success</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L143" class="LineNr">143 </span>  <a href='010---vm.cc.html#L86'>ZF</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L144" class="LineNr">144 </span>  SF = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L145" class="LineNr">145 </span>  <a href='010---vm.cc.html#L88'>OF</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L146" class="LineNr">146 </span>  <a href='011run.cc.html#L83'>run</a><span class="Delimiter">(</span>
<span id="L147" class="LineNr">147 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L148" class="LineNr">148 </span>      <span class="Comment">// op     ModR/M  SIB   displacement  immediate</span>
<span id="L149" class="LineNr">149 </span>      <span class="Constant">&quot;  7f                   05                        \n&quot;</span>  <span class="Comment">// skip 1 instruction</span>
<span id="L150" class="LineNr">150 </span>      <span class="Constant">&quot;  05                                 00 00 00 01 \n&quot;</span>
<span id="L151" class="LineNr">151 </span>      <span class="Constant">&quot;  05                                 00 00 00 02 \n&quot;</span>
<span id="L152" class="LineNr">152 </span>  <span class="Delimiter">);</span>
<span id="L153" class="LineNr">153 </span>  <a href='003trace.cc.html#L292'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span>
<span id="L154" class="LineNr">154 </span>      <span class="Constant">&quot;run: 0x00000001 opcode: 7f\n&quot;</span>
<span id="L155" class="LineNr">155 </span>      <span class="Constant">&quot;run: jump 5\n&quot;</span>
<span id="L156" class="LineNr">156 </span>      <span class="Constant">&quot;run: 0x00000008 opcode: 05\n&quot;</span>
<span id="L157" class="LineNr">157 </span>  <span class="Delimiter">);</span>
<span id="L158" class="LineNr">158 </span>  <a href='003trace.cc.html#L294'>CHECK_TRACE_DOESNT_CONTAIN</a><span class="Delimiter">(</span><span class="Constant">&quot;run: 0x00000003 opcode: 05&quot;</span><span class="Delimiter">);</span>
<span id="L159" class="LineNr">159 </span><span class="Delimiter">}</span>
<span id="L160" class="LineNr">160 </span>
<span id="L161" class="LineNr">161 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
<span id="L162" class="LineNr">162 </span><span class="Normal">case</span> <span class="Constant">0x7f</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump disp8 if SF == OF and !ZF</span>
<span id="L163" class="LineNr">163 </span>  <span class="Normal">const</span> <span class="Normal">int8_t</span> offset = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='010---vm.cc.html#L331'>next</a><span class="Delimiter">());</span>
<span id="L164" class="LineNr">164 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>SF == <a href='010---vm.cc.html#L88'>OF</a> &amp;&amp; !ZF<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L165" class="LineNr">165 </span>    <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Special">Callstack_depth</span>+<span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010---vm.cc.html#L403'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L166" class="LineNr">166 </span>    <a href='010---vm.cc.html#L32'>EIP</a> += offset<span class="Delimiter">;</span>
<span id="L167" class="LineNr">167 </span>  <span class="Delimiter">}</span>
<span id="L168" class="LineNr">168 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L169" class="LineNr">169 </span><span class="Delimiter">}</span>
<span id="L170" class="LineNr">170 </span><span class="Normal">case</span> <span class="Constant">0x77</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump disp8 if !CF and !ZF</span>
<span id="L171" class="LineNr">171 </span>  <span class="Normal">const</span> <span class="Normal">int8_t</span> offset = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='010---vm.cc.html#L331'>next</a><span class="Delimiter">());</span>
<span id="L172" class="LineNr">172 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!CF &amp;&amp; !ZF<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L173" class="LineNr">173 </span>    <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Special">Callstack_depth</span>+<span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010---vm.cc.html#L403'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L174" class="LineNr">174 </span>    <a href='010---vm.cc.html#L32'>EIP</a> += offset<span class="Delimiter">;</span>
<span id="L175" class="LineNr">175 </span>  <span class="Delimiter">}</span>
<span id="L176" class="LineNr">176 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L177" class="LineNr">177 </span><span class="Delimiter">}</span>
<span id="L178" class="LineNr">178 </span>
<span id="L179" class="LineNr">179 </span><span class="Delimiter">:(code)</span>
<span id="L180" class="LineNr">180 </span><span class="Normal">void</span> <a href='017jump_disp8.cc.html#L180'>test_jg_disp8_fail</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L181" class="LineNr">181 </span>  <a href='010---vm.cc.html#L86'>ZF</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L182" class="LineNr">182 </span>  SF = <span class="Constant">true</span><span class="Delimiter">;</span>
<span id="L183" class="LineNr">183 </span>  <a href='010---vm.cc.html#L88'>OF</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L184" class="LineNr">184 </span>  <a href='011run.cc.html#L83'>run</a><span class="Delimiter">(</span>
<span id="L185" class="LineNr">185 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L186" class="LineNr">186 </span>      <span class="Comment">// op     ModR/M  SIB   displacement  immediate</span>
<span id="L187" class="LineNr">187 </span>      <span class="Constant">&quot;  7f                   05                        \n&quot;</span>  <span class="Comment">// skip 1 instruction</span>
<span id="L188" class="LineNr">188 </span>      <span class="Constant">&quot;  05                                 00 00 00 01 \n&quot;</span>
<span id="L189" class="LineNr">189 </span>      <span class="Constant">&quot;  05                                 00 00 00 02 \n&quot;</span>
<span id="L190" class="LineNr">190 </span>  <span class="Delimiter">);</span>
<span id="L191" class="LineNr">191 </span>  <a href='003trace.cc.html#L292'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span>
<span id="L192" class="LineNr">192 </span>      <span class="Constant">&quot;run: 0x00000001 opcode: 7f\n&quot;</span>
<span id="L193" class="LineNr">193 </span>      <span class="Constant">&quot;run: 0x00000003 opcode: 05\n&quot;</span>
<span id="L194" class="LineNr">194 </span>      <span class="Constant">&quot;run: 0x00000008 opcode: 05\n&quot;</span>
<span id="L195" class="LineNr">195 </span>  <span class="Delimiter">);</span>
<span id="L196" class="LineNr">196 </span>  <a href='003trace.cc.html#L294'>CHECK_TRACE_DOESNT_CONTAIN</a><span class="Delimiter">(</span><span class="Constant">&quot;run: jump 5&quot;</span><span class="Delimiter">);</span>
<span id="L197" class="LineNr">197 </span><span class="Delimiter">}</span>
<span id="L198" class="LineNr">198 </span>
<span id="L199" class="LineNr">199 </span><span class="SalientComment">//:: jump if greater or equal</span>
<span id="L200" class="LineNr">200 </span>
<span id="L201" class="LineNr">201 </span><span class="Delimiter">:(before &quot;End Initialize Op Names&quot;)</span>
<span id="L202" class="LineNr">202 </span><a href='001help.cc.html#L265'>put_new</a><span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L348'>Name</a></span><span class="Delimiter">,</span> <span class="Constant">&quot;7d&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp8 bytes away if greater or equal (signed), if SF == <a href='010---vm.cc.html#L88'>OF</a> (jcc/jge/jnl)&quot;</span><span class="Delimiter">);</span>
<span id="L203" class="LineNr">203 </span><a href='001help.cc.html#L265'>put_new</a><span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L348'>Name</a></span><span class="Delimiter">,</span> <span class="Constant">&quot;73&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp8 bytes away if greater or equal (unsigned), if <a href='010---vm.cc.html#L87'>CF</a> is unset (jcc/jae/jnb)&quot;</span><span class="Delimiter">);</span>
<span id="L204" class="LineNr">204 </span>
<span id="L205" class="LineNr">205 </span><span class="Delimiter">:(code)</span>
<span id="L206" class="LineNr">206 </span><span class="Normal">void</span> <a href='017jump_disp8.cc.html#L206'>test_jge_disp8_success</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L207" class="LineNr">207 </span>  SF = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L208" class="LineNr">208 </span>  <a href='010---vm.cc.html#L88'>OF</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L209" class="LineNr">209 </span>  <a href='011run.cc.html#L83'>run</a><span class="Delimiter">(</span>
<span id="L210" class="LineNr">210 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L211" class="LineNr">211 </span>      <span class="Comment">// op     ModR/M  SIB   displacement  immediate</span>
<span id="L212" class="LineNr">212 </span>      <span class="Constant">&quot;  7d                   05                        \n&quot;</span>  <span class="Comment">// skip 1 instruction</span>
<span id="L213" class="LineNr">213 </span>      <span class="Constant">&quot;  05                                 00 00 00 01 \n&quot;</span>
<span id="L214" class="LineNr">214 </span>      <span class="Constant">&quot;  05                                 00 00 00 02 \n&quot;</span>
<span id="L215" class="LineNr">215 </span>  <span class="Delimiter">);</span>
<span id="L216" class="LineNr">216 </span>  <a href='003trace.cc.html#L292'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span>
<span id="L217" class="LineNr">217 </span>      <span class="Constant">&quot;run: 0x00000001 opcode: 7d\n&quot;</span>
<span id="L218" class="LineNr">218 </span>      <span class="Constant">&quot;run: jump 5\n&quot;</span>
<span id="L219" class="LineNr">219 </span>      <span class="Constant">&quot;run: 0x00000008 opcode: 05\n&quot;</span>
<span id="L220" class="LineNr">220 </span>  <span class="Delimiter">);</span>
<span id="L221" class="LineNr">221 </span>  <a href='003trace.cc.html#L294'>CHECK_TRACE_DOESNT_CONTAIN</a><span class="Delimiter">(</span><span class="Constant">&quot;run: 0x00000003 opcode: 05&quot;</span><span class="Delimiter">);</span>
<span id="L222" class="LineNr">222 </span><span class="Delimiter">}</span>
<span id="L223" class="LineNr">223 </span>
<span id="L224" class="LineNr">224 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
<span id="L225" class="LineNr">225 </span><span class="Normal">case</span> <span class="Constant">0x7d</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump disp8 if SF == OF</span>
<span id="L226" class="LineNr">226 </span>  <span class="Normal">const</span> <span class="Normal">int8_t</span> offset = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='010---vm.cc.html#L331'>next</a><span class="Delimiter">());</span>
<span id="L227" class="LineNr">227 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>SF == <a href='010---vm.cc.html#L88'>OF</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L228" class="LineNr">228 </span>    <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Special">Callstack_depth</span>+<span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010---vm.cc.html#L403'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L229" class="LineNr">229 </span>    <a href='010---vm.cc.html#L32'>EIP</a> += offset<span class="Delimiter">;</span>
<span id="L230" class="LineNr">230 </span>  <span class="Delimiter">}</span>
<span id="L231" class="LineNr">231 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L232" class="LineNr">232 </span><span class="Delimiter">}</span>
<span id="L233" class="LineNr">233 </span><span class="Normal">case</span> <span class="Constant">0x73</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump disp8 if !CF</span>
<span id="L234" class="LineNr">234 </span>  <span class="Normal">const</span> <span class="Normal">int8_t</span> offset = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='010---vm.cc.html#L331'>next</a><span class="Delimiter">());</span>
<span id="L235" class="LineNr">235 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!CF<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L236" class="LineNr">236 </span>    <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Special">Callstack_depth</span>+<span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010---vm.cc.html#L403'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L237" class="LineNr">237 </span>    <a href='010---vm.cc.html#L32'>EIP</a> += offset<span class="Delimiter">;</span>
<span id="L238" class="LineNr">238 </span>  <span class="Delimiter">}</span>
<span id="L239" class="LineNr">239 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L240" class="LineNr">240 </span><span class="Delimiter">}</span>
<span id="L241" class="LineNr">241 </span>
<span id="L242" class="LineNr">242 </span><span class="Delimiter">:(code)</span>
<span id="L243" class="LineNr">243 </span><span class="Normal">void</span> <a href='017jump_disp8.cc.html#L243'>test_jge_disp8_fail</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L244" class="LineNr">244 </span>  SF = <span class="Constant">true</span><span class="Delimiter">;</span>
<span id="L245" class="LineNr">245 </span>  <a href='010---vm.cc.html#L88'>OF</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L246" class="LineNr">246 </span>  <a href='011run.cc.html#L83'>run</a><span class="Delimiter">(</span>
<span id="L247" class="LineNr">247 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L248" class="LineNr">248 </span>      <span class="Comment">// op     ModR/M  SIB   displacement  immediate</span>
<span id="L249" class="LineNr">249 </span>      <span class="Constant">&quot;  7d                   05                        \n&quot;</span>  <span class="Comment">// skip 1 instruction</span>
<span id="L250" class="LineNr">250 </span>      <span class="Constant">&quot;  05                                 00 00 00 01 \n&quot;</span>
<span id="L251" class="LineNr">251 </span>      <span class="Constant">&quot;  05                                 00 00 00 02 \n&quot;</span>
<span id="L252" class="LineNr">252 </span>  <span class="Delimiter">);</span>
<span id="L253" class="LineNr">253 </span>  <a href='003trace.cc.html#L292'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span>
<span id="L254" class="LineNr">254 </span>      <span class="Constant">&quot;run: 0x00000001 opcode: 7d\n&quot;</span>
<span id="L255" class="LineNr">255 </span>      <span class="Constant">&quot;run: 0x00000003 opcode: 05\n&quot;</span>
<span id="L256" class="LineNr">256 </span>      <span class="Constant">&quot;run: 0x00000008 opcode: 05\n&quot;</span>
<span id="L257" class="LineNr">257 </span>  <span class="Delimiter">);</span>
<span id="L258" class="LineNr">258 </span>  <a href='003trace.cc.html#L294'>CHECK_TRACE_DOESNT_CONTAIN</a><span class="Delimiter">(</span><span class="Constant">&quot;run: jump 5&quot;</span><span class="Delimiter">);</span>
<span id="L259" class="LineNr">259 </span><span class="Delimiter">}</span>
<span id="L260" class="LineNr">260 </span>
<span id="L261" class="LineNr">261 </span><span class="SalientComment">//:: jump if lesser</span>
<span id="L262" class="LineNr">262 </span>
<span id="L263" class="LineNr">263 </span><span class="Delimiter">:(before &quot;End Initialize Op Names&quot;)</span>
<span id="L264" class="LineNr">264 </span><a href='001help.cc.html#L265'>put_new</a><span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L348'>Name</a></span><span class="Delimiter">,</span> <span class="Constant">&quot;7c&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp8 bytes away if lesser (signed), if SF != <a href='010---vm.cc.html#L88'>OF</a> (jcc/jl/jnge)&quot;</span><span class="Delimiter">);</span>
<span id="L265" class="LineNr">265 </span><a href='001help.cc.html#L265'>put_new</a><span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L348'>Name</a></span><span class="Delimiter">,</span> <span class="Constant">&quot;72&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp8 bytes away if lesser (unsigned), if <a href='010---vm.cc.html#L87'>CF</a> is set (jcc/jb/jnae)&quot;</span><span class="Delimiter">);</span>
<span id="L266" class="LineNr">266 </span>
<span id="L267" class="LineNr">267 </span><span class="Delimiter">:(code)</span>
<span id="L268" class="LineNr">268 </span><span class="Normal">void</span> <a href='017jump_disp8.cc.html#L268'>test_jl_disp8_success</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L269" class="LineNr">269 </span>  <a href='010---vm.cc.html#L86'>ZF</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L270" class="LineNr">270 </span>  SF = <span class="Constant">true</span><span class="Delimiter">;</span>
<span id="L271" class="LineNr">271 </span>  <a href='010---vm.cc.html#L88'>OF</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L272" class="LineNr">272 </span>  <a href='011run.cc.html#L83'>run</a><span class="Delimiter">(</span>
<span id="L273" class="LineNr">273 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L274" class="LineNr">274 </span>      <span class="Comment">// op     ModR/M  SIB   displacement  immediate</span>
<span id="L275" class="LineNr">275 </span>      <span class="Constant">&quot;  7c                   05                        \n&quot;</span>  <span class="Comment">// skip 1 instruction</span>
<span id="L276" class="LineNr">276 </span>      <span class="Constant">&quot;  05                                 00 00 00 01 \n&quot;</span>
<span id="L277" class="LineNr">277 </span>      <span class="Constant">&quot;  05                                 00 00 00 02 \n&quot;</span>
<span id="L278" class="LineNr">278 </span>  <span class="Delimiter">);</span>
<span id="L279" class="LineNr">279 </span>  <a href='003trace.cc.html#L292'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span>
<span id="L280" class="LineNr">280 </span>      <span class="Constant">&quot;run: 0x00000001 opcode: 7c\n&quot;</span>
<span id="L281" class="LineNr">281 </span>      <span class="Constant">&quot;run: jump 5\n&quot;</span>
<span id="L282" class="LineNr">282 </span>      <span class="Constant">&quot;run: 0x00000008 opcode: 05\n&quot;</span>
<span id="L283" class="LineNr">283 </span>  <span class="Delimiter">);</span>
<span id="L284" class="LineNr">284 </span>  <a href='003trace.cc.html#L294'>CHECK_TRACE_DOESNT_CONTAIN</a><span class="Delimiter">(</span><span class="Constant">&quot;run: 0x00000003 opcode: 05&quot;</span><span class="Delimiter">);</span>
<span id="L285" class="LineNr">285 </span><span class="Delimiter">}</span>
<span id="L286" class="LineNr">286 </span>
<span id="L287" class="LineNr">287 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
<span id="L288" class="LineNr">288 </span><span class="Normal">case</span> <span class="Constant">0x7c</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump disp8 if SF != OF</span>
<span id="L289" class="LineNr">289 </span>  <span class="Normal">const</span> <span class="Normal">int8_t</span> offset = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='010---vm.cc.html#L331'>next</a><span class="Delimiter">());</span>
<span id="L290" class="LineNr">290 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>SF != <a href='010---vm.cc.html#L88'>OF</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L291" class="LineNr">291 </span>    <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Special">Callstack_depth</span>+<span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010---vm.cc.html#L403'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L292" class="LineNr">292 </span>    <a href='010---vm.cc.html#L32'>EIP</a> += offset<span class="Delimiter">;</span>
<span id="L293" class="LineNr">293 </span>  <span class="Delimiter">}</span>
<span id="L294" class="LineNr">294 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L295" class="LineNr">295 </span><span class="Delimiter">}</span>
<span id="L296" class="LineNr">296 </span><span class="Normal">case</span> <span class="Constant">0x72</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump disp8 if CF</span>
<span id="L297" class="LineNr">297 </span>  <span class="Normal">const</span> <span class="Normal">int8_t</span> offset = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='010---vm.cc.html#L331'>next</a><span class="Delimiter">());</span>
<span id="L298" class="LineNr">298 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='010---vm.cc.html#L87'>CF</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L299" class="LineNr">299 </span>    <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Special">Callstack_depth</span>+<span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010---vm.cc.html#L403'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L300" class="LineNr">300 </span>    <a href='010---vm.cc.html#L32'>EIP</a> += offset<span class="Delimiter">;</span>
<span id="L301" class="LineNr">301 </span>  <span class="Delimiter">}</span>
<span id="L302" class="LineNr">302 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L303" class="LineNr">303 </span><span class="Delimiter">}</span>
<span id="L304" class="LineNr">304 </span>
<span id="L305" class="LineNr">305 </span><span class="Delimiter">:(code)</span>
<span id="L306" class="LineNr">306 </span><span class="Normal">void</span> <a href='017jump_disp8.cc.html#L306'>test_jl_disp8_fail</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L307" class="LineNr">307 </span>  <a href='010---vm.cc.html#L86'>ZF</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L308" class="LineNr">308 </span>  SF = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L309" class="LineNr">309 </span>  <a href='010---vm.cc.html#L88'>OF</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L310" class="LineNr">310 </span>  <a href='011run.cc.html#L83'>run</a><span class="Delimiter">(</span>
<span id="L311" class="LineNr">311 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L312" class="LineNr">312 </span>      <span class="Comment">// op     ModR/M  SIB   displacement  immediate</span>
<span id="L313" class="LineNr">313 </span>      <span class="Constant">&quot;  7c                   05                        \n&quot;</span>  <span class="Comment">// skip 1 instruction</span>
<span id="L314" class="LineNr">314 </span>      <span class="Constant">&quot;  05                                 00 00 00 01 \n&quot;</span>
<span id="L315" class="LineNr">315 </span>      <span class="Constant">&quot;  05                                 00 00 00 02 \n&quot;</span>
<span id="L316" class="LineNr">316 </span>  <span class="Delimiter">);</span>
<span id="L317" class="LineNr">317 </span>  <a href='003trace.cc.html#L292'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span>
<span id="L318" class="LineNr">318 </span>      <span class="Constant">&quot;run: 0x00000001 opcode: 7c\n&quot;</span>
<span id="L319" class="LineNr">319 </span>      <span class="Constant">&quot;run: 0x00000003 opcode: 05\n&quot;</span>
<span id="L320" class="LineNr">320 </span>      <span class="Constant">&quot;run: 0x00000008 opcode: 05\n&quot;</span>
<span id="L321" class="LineNr">321 </span>  <span class="Delimiter">);</span>
<span id="L322" class="LineNr">322 </span>  <a href='003trace.cc.html#L294'>CHECK_TRACE_DOESNT_CONTAIN</a><span class="Delimiter">(</span><span class="Constant">&quot;run: jump 5&quot;</span><span class="Delimiter">);</span>
<span id="L323" class="LineNr">323 </span><span class="Delimiter">}</span>
<span id="L324" class="LineNr">324 </span>
<span id="L325" class="LineNr">325 </span><span class="SalientComment">//:: jump if lesser or equal</span>
<span id="L326" class="LineNr">326 </span>
<span id="L327" class="LineNr">327 </span><span class="Delimiter">:(before &quot;End Initialize Op Names&quot;)</span>
<span id="L328" class="LineNr">328 </span><a href='001help.cc.html#L265'>put_new</a><span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L348'>Name</a></span><span class="Delimiter">,</span> <span class="Constant">&quot;7e&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp8 bytes away if lesser or equal (signed), if <a href='010---vm.cc.html#L86'>ZF</a> is set or SF != <a href='010---vm.cc.html#L88'>OF</a> (jcc/jle/jng)&quot;</span><span class="Delimiter">);</span>
<span id="L329" class="LineNr">329 </span><a href='001help.cc.html#L265'>put_new</a><span class="Delimiter">(</span><span class="Special"><a href='010---vm.cc.html#L348'>Name</a></span><span class="Delimiter">,</span> <span class="Constant">&quot;76&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp8 bytes away if lesser or equal (unsigned), if <a href='010---vm.cc.html#L86'>ZF</a> is set or <a href='010---vm.cc.html#L87'>CF</a> is set (jcc/jbe/jna)&quot;</span><span class="Delimiter">);</span>
<span id="L330" class="LineNr">330 </span>
<span id="L331" class="LineNr">331 </span><span class="Delimiter">:(code)</span>
<span id="L332" class="LineNr">332 </span><span class="Normal">void</span> <a href='017jump_disp8.cc.html#L332'>test_jle_disp8_equal</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L333" class="LineNr">333 </span>  <a href='010---vm.cc.html#L86'>ZF</a> = <span class="Constant">true</span><span class="Delimiter">;</span>
<span id="L334" class="LineNr">334 </span>  SF = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L335" class="LineNr">335 </span>  <a href='010---vm.cc.html#L88'>OF</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L336" class="LineNr">336 </span>  <a href='011run.cc.html#L83'>run</a><span class="Delimiter">(</span>
<span id="L337" class="LineNr">337 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L338" class="LineNr">338 </span>      <span class="Comment">// op     ModR/M  SIB   displacement  immediate</span>
<span id="L339" class="LineNr">339 </span>      <span class="Constant">&quot;  7e                   05                        \n&quot;</span>  <span class="Comment">// skip 1 instruction</span>
<span id="L340" class="LineNr">340 </span>      <span class="Constant">&quot;  05                                 00 00 00 01 \n&quot;</span>
<span id="L341" class="LineNr">341 </span>      <span class="Constant">&quot;  05                                 00 00 00 02 \n&quot;</span>
<span id="L342" class="LineNr">342 </span>  <span class="Delimiter">);</span>
<span id="L343" class="LineNr">343 </span>  <a href='003trace.cc.html#L292'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span>
<span id="L344" class="LineNr">344 </span>      <span class="Constant">&quot;run: 0x00000001 opcode: 7e\n&quot;</span>
<span id="L345" class="LineNr">345 </span>      <span class="Constant">&quot;run: jump 5\n&quot;</span>
<span id="L346" class="LineNr">346 </span>      <span class="Constant">&quot;run: 0x00000008 opcode: 05\n&quot;</span>
<span id="L347" class="LineNr">347 </span>  <span class="Delimiter">);</span>
<span id="L348" class="LineNr">348 </span>  <a href='003trace.cc.html#L294'>CHECK_TRACE_DOESNT_CONTAIN</a><span class="Delimiter">(</span><span class="Constant">&quot;run: 0x00000003 opcode: 05&quot;</span><span class="Delimiter">);</span>
<span id="L349" class="LineNr">349 </span><span class="Delimiter">}</span>
<span id="L350" class="LineNr">350 </span>
<span id="L351" class="LineNr">351 </span><span class="Delimiter">:(code)</span>
<span id="L352" class="LineNr">352 </span><span class="Normal">void</span> <a href='017jump_disp8.cc.html#L352'>test_jle_disp8_lesser</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L353" class="LineNr">353 </span>  <a href='010---vm.cc.html#L86'>ZF</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L354" class="LineNr">354 </span>  SF = <span class="Constant">true</span><span class="Delimiter">;</span>
<span id="L355" class="LineNr">355 </span>  <a href='010---vm.cc.html#L88'>OF</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L356" class="LineNr">356 </span>  <a href='011run.cc.html#L83'>run</a><span class="Delimiter">(</span>
<span id="L357" class="LineNr">357 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L358" class="LineNr">358 </span>      <span class="Comment">// op     ModR/M  SIB   displacement  immediate</span>
<span id="L359" class="LineNr">359 </span>      <span class="Constant">&quot;  7e                   05                        \n&quot;</span>  <span class="Comment">// skip 1 instruction</span>
<span id="L360" class="LineNr">360 </span>      <span class="Constant">&quot;  05                                 00 00 00 01 \n&quot;</span>
<span id="L361" class="LineNr">361 </span>      <span class="Constant">&quot;  05                                 00 00 00 02 \n&quot;</span>
<span id="L362" class="LineNr">362 </span>  <span class="Delimiter">);</span>
<span id="L363" class="LineNr">363 </span>  <a href='003trace.cc.html#L292'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span>
<span id="L364" class="LineNr">364 </span>      <span class="Constant">&quot;run: 0x00000001 opcode: 7e\n&quot;</span>
<span id="L365" class="LineNr">365 </span>      <span class="Constant">&quot;run: jump 5\n&quot;</span>
<span id="L366" class="LineNr">366 </span>      <span class="Constant">&quot;run: 0x00000008 opcode: 05\n&quot;</span>
<span id="L367" class="LineNr">367 </span>  <span class="Delimiter">);</span>
<span id="L368" class="LineNr">368 </span>  <a href='003trace.cc.html#L294'>CHECK_TRACE_DOESNT_CONTAIN</a><span class="Delimiter">(</span><span class="Constant">&quot;run: 0x00000003 opcode: 05&quot;</span><span class="Delimiter">);</span>
<span id="L369" class="LineNr">369 </span><span class="Delimiter">}</span>
<span id="L370" class="LineNr">370 </span>
<span id="L371" class="LineNr">371 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
<span id="L372" class="LineNr">372 </span><span class="Normal">case</span> <span class="Constant">0x7e</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump disp8 if ZF or SF != OF</span>
<span id="L373" class="LineNr">373 </span>  <span class="Normal">const</span> <span class="Normal">int8_t</span> offset = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='010---vm.cc.html#L331'>next</a><span class="Delimiter">());</span>
<span id="L374" class="LineNr">374 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='010---vm.cc.html#L86'>ZF</a> || SF != <a href='010---vm.cc.html#L88'>OF</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L375" class="LineNr">375 </span>    <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Special">Callstack_depth</span>+<span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010---vm.cc.html#L403'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L376" class="LineNr">376 </span>    <a href='010---vm.cc.html#L32'>EIP</a> += offset<span class="Delimiter">;</span>
<span id="L377" class="LineNr">377 </span>  <span class="Delimiter">}</span>
<span id="L378" class="LineNr">378 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L379" class="LineNr">379 </span><span class="Delimiter">}</span>
<span id="L380" class="LineNr">380 </span><span class="Normal">case</span> <span class="Constant">0x76</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump disp8 if ZF or CF</span>
<span id="L381" class="LineNr">381 </span>  <span class="Normal">const</span> <span class="Normal">int8_t</span> offset = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='010---vm.cc.html#L331'>next</a><span class="Delimiter">());</span>
<span id="L382" class="LineNr">382 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='010---vm.cc.html#L86'>ZF</a> || <a href='010---vm.cc.html#L87'>CF</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L383" class="LineNr">383 </span>    <a href='003trace.cc.html#L96'>trace</a><span class="Delimiter">(</span><span class="Special">Callstack_depth</span>+<span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010---vm.cc.html#L403'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L384" class="LineNr">384 </span>    <a href='010---vm.cc.html#L32'>EIP</a> += offset<span class="Delimiter">;</span>
<span id="L385" class="LineNr">385 </span>  <span class="Delimiter">}</span>
<span id="L386" class="LineNr">386 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L387" class="LineNr">387 </span><span class="Delimiter">}</span>
<span id="L388" class="LineNr">388 </span>
<span id="L389" class="LineNr">389 </span><span class="Delimiter">:(code)</span>
<span id="L390" class="LineNr">390 </span><span class="Normal">void</span> <a href='017jump_disp8.cc.html#L390'>test_jle_disp8_greater</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L391" class="LineNr">391 </span>  <a href='010---vm.cc.html#L86'>ZF</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L392" class="LineNr">392 </span>  SF = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L393" class="LineNr">393 </span>  <a href='010---vm.cc.html#L88'>OF</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
<span id="L394" class="LineNr">394 </span>  <a href='011run.cc.html#L83'>run</a><span class="Delimiter">(</span>
<span id="L395" class="LineNr">395 </span>      <span class="Constant">&quot;== code 0x1\n&quot;</span>
<span id="L396" class="LineNr">396 </span>      <span class="Comment">// op     ModR/M  SIB   displacement  immediate</span>
<span id="L397" class="LineNr">397 </span>      <span class="Constant">&quot;  7e                   05                        \n&quot;</span>  <span class="Comment">// skip 1 instruction</span>
<span id="L398" class="LineNr">398 </span>      <span class="Constant">&quot;  05                                 00 00 00 01 \n&quot;</span>
<span id="L399" class="LineNr">399 </span>      <span class="Constant">&quot;  05                                 00 00 00 02 \n&quot;</span>
<span id="L400" class="LineNr">400 </span>  <span class="Delimiter">);</span>
<span id="L401" class="LineNr">401 </span>  <a href='003trace.cc.html#L292'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span>
<span id="L402" class="LineNr">402 </span>      <span class="Constant">&quot;run: 0x00000001 opcode: 7e\n&quot;</span>
<span id="L403" class="LineNr">403 </span>      <span class="Constant">&quot;run: 0x00000003 opcode: 05\n&quot;</span>
<span id="L404" class="LineNr">404 </span>      <span class="Constant">&quot;run: 0x00000008 opcode: 05\n&quot;</span>
<span id="L405" class="LineNr">405 </span>  <span class="Delimiter">);</span>
<span id="L406" class="LineNr">406 </span>  <a href='003trace.cc.html#L294'>CHECK_TRACE_DOESNT_CONTAIN</a><span class="Delimiter">(</span><span class="Constant">&quot;run: jump 5&quot;</span><span class="Delimiter">);</span>
<span id="L407" class="LineNr">407 </span><span class="Delimiter">}</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->