mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2024-12-28 08:16:31 +00:00
01e5d408fd
Fix unused var warning in OSUpgrade. Add Who() output to main generated HTML index file. Rename all 'inst' to 'instruction'. Change NetLog behaviour, remove window tiling. Change network stack to throw if no applicable driver can be loaded. Update line counts.
835 lines
96 KiB
HTML
Executable file
835 lines
96 KiB
HTML
Executable file
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html;charset=US-ASCII">
|
|
<meta name="generator" content="ZealOS V0.06">
|
|
<style type="text/css">
|
|
body {background-color:#000000;}
|
|
.cF0{color:#ffffff;background-color:#000000;}
|
|
.cF1{color:#3465a4;background-color:#000000;}
|
|
.cF2{color:#4e9a06;background-color:#000000;}
|
|
.cF3{color:#06989a;background-color:#000000;}
|
|
.cF4{color:#a24444;background-color:#000000;}
|
|
.cF5{color:#75507b;background-color:#000000;}
|
|
.cF6{color:#ce982f;background-color:#000000;}
|
|
.cF7{color:#bcc0b9;background-color:#000000;}
|
|
.cF8{color:#555753;background-color:#000000;}
|
|
.cF9{color:#729fcf;background-color:#000000;}
|
|
.cFA{color:#82bc49;background-color:#000000;}
|
|
.cFB{color:#34e2e2;background-color:#000000;}
|
|
.cFC{color:#ac3535;background-color:#000000;}
|
|
.cFD{color:#ad7fa8;background-color:#000000;}
|
|
.cFE{color:#fce94f;background-color:#000000;}
|
|
.cFF{color:#000000;background-color:#000000;}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<pre style="font-family:monospace;font-size:12pt">
|
|
<a name="l1"></a><span class=cF9>I64</span><span class=cF0> </span><span class=cFD>InstEntriesCompare</span><span class=cF0>(</span><span class=cF9>CInst</span><span class=cF0> *tmpins1, </span><span class=cF9>CInst</span><span class=cF0> *tmpins2)
|
|
<a name="l2"></a>{
|
|
<a name="l3"></a> </span><span class=cF9>I64</span><span class=cF0> i1, i2, j = </span><span class=cFE>0</span><span class=cF0>, res = </span><span class=cFE>0</span><span class=cF0>, oc_count1 = tmpins1->opcode_count, oc_count2 = tmpins2->opcode_count;
|
|
<a name="l4"></a>
|
|
<a name="l5"></a> </span><span class=cF1>if</span><span class=cF0> (tmpins1->flags & </span><span class=cF3>IEF_STI_LIKE</span><span class=cF0>)
|
|
<a name="l6"></a> oc_count1--;
|
|
<a name="l7"></a> </span><span class=cF1>if</span><span class=cF0> (tmpins2->flags & </span><span class=cF3>IEF_STI_LIKE</span><span class=cF0>)
|
|
<a name="l8"></a> oc_count2--;
|
|
<a name="l9"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>)
|
|
<a name="l10"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l11"></a> </span><span class=cF1>if</span><span class=cF0> (j < oc_count1 && j < oc_count2)
|
|
<a name="l12"></a> {
|
|
<a name="l13"></a> </span><span class=cF1>if</span><span class=cF0> (res = tmpins1->opcode[j] - tmpins2->opcode[j])
|
|
<a name="l14"></a> </span><span class=cF1>return</span><span class=cF0> res;
|
|
<a name="l15"></a> j++;
|
|
<a name="l16"></a> }
|
|
<a name="l17"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l18"></a> {
|
|
<a name="l19"></a> </span><span class=cF1>if</span><span class=cF0> (res = oc_count1 - oc_count2)
|
|
<a name="l20"></a> </span><span class=cF1>return</span><span class=cF0> res;
|
|
<a name="l21"></a>
|
|
<a name="l22"></a> </span><span class=cF1>if</span><span class=cF0> (tmpins1->flags & </span><span class=cF3>IEF_STI_LIKE</span><span class=cF0> && tmpins2->flags & </span><span class=cF3>IEF_STI_LIKE</span><span class=cF0>)
|
|
<a name="l23"></a> </span><span class=cF1>return</span><span class=cF0> tmpins1->opcode[j] - tmpins2->opcode[j];
|
|
<a name="l24"></a>
|
|
<a name="l25"></a> </span><span class=cF1>if</span><span class=cF0> (res = tmpins1->flags & </span><span class=cF3>IEF_STI_LIKE</span><span class=cF0> - tmpins2->flags & </span><span class=cF3>IEF_STI_LIKE</span><span class=cF0>)
|
|
<a name="l26"></a> </span><span class=cF1>return</span><span class=cF0> res;
|
|
<a name="l27"></a>
|
|
<a name="l28"></a> </span><span class=cF1>if</span><span class=cF0> (res = tmpins1->slash_val - tmpins2->slash_val)
|
|
<a name="l29"></a> </span><span class=cF1>return</span><span class=cF0> res;
|
|
<a name="l30"></a>
|
|
<a name="l31"></a> </span><span class=cF1>if</span><span class=cF0> (res = tmpins1->flags & </span><span class=cF3>IEF_OP_SIZE32</span><span class=cF0> - tmpins2->flags & </span><span class=cF3>IEF_OP_SIZE32</span><span class=cF0>)
|
|
<a name="l32"></a> </span><span class=cF1>return</span><span class=cF0> res;
|
|
<a name="l33"></a>
|
|
<a name="l34"></a> i1 = </span><span class=cF5>Bt</span><span class=cF0>(&</span><span class=cFB>uasm</span><span class=cF0>.ins64_arg_mask, tmpins1->arg1) || </span><span class=cF5>Bt</span><span class=cF0>(&</span><span class=cFB>uasm</span><span class=cF0>.ins64_arg_mask, tmpins1->arg2);
|
|
<a name="l35"></a> i2 = </span><span class=cF5>Bt</span><span class=cF0>(&</span><span class=cFB>uasm</span><span class=cF0>.ins64_arg_mask, tmpins2->arg1) || </span><span class=cF5>Bt</span><span class=cF0>(&</span><span class=cFB>uasm</span><span class=cF0>.ins64_arg_mask, tmpins2->arg2);
|
|
<a name="l36"></a> </span><span class=cF1>if</span><span class=cF0> (res = i1 - i2)
|
|
<a name="l37"></a> </span><span class=cF1>return</span><span class=cF0> res;
|
|
<a name="l38"></a>
|
|
<a name="l39"></a> </span><span class=cF1>if</span><span class=cF0> (res = tmpins1->flags & </span><span class=cF3>IEF_48_REX</span><span class=cF0> - tmpins2->flags & </span><span class=cF3>IEF_48_REX</span><span class=cF0>)
|
|
<a name="l40"></a> </span><span class=cF1>return</span><span class=cF0> res;
|
|
<a name="l41"></a>
|
|
<a name="l42"></a> i1 = tmpins1->arg2 == </span><span class=cF3>ARGT_IMM64</span><span class=cF0> || tmpins1->arg2 == </span><span class=cF3>ARGT_UIMM64</span><span class=cF0>;
|
|
<a name="l43"></a> i2 = tmpins2->arg2 == </span><span class=cF3>ARGT_IMM64</span><span class=cF0> || tmpins2->arg2 == </span><span class=cF3>ARGT_UIMM64</span><span class=cF0>;
|
|
<a name="l44"></a> </span><span class=cF1>return</span><span class=cF0> i1 - i2;
|
|
<a name="l45"></a> }
|
|
<a name="l46"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l47"></a>}
|
|
<a name="l48"></a>
|
|
<a name="l49"></a></span><span class=cF2>/*</span><span class=cF0>
|
|
<a name="l50"></a></span><span class=cF2>U0 DumpUAsmIns(CInst *tmpins)</span><span class=cF0>
|
|
<a name="l51"></a></span><span class=cF2>{</span><span class=cF0>
|
|
<a name="l52"></a> </span><span class=cF2>CHashOpcode *tmpo = tmpins(U8 *) - tmpins->ins_entry_num * sizeof(CInst) - offset(CHashOpcode.ins);</span><span class=cF0>
|
|
<a name="l53"></a> </span><span class=cF2>"%10s:%02d,%02d SV:%02d\n", tmpo->str, tmpins->arg1, tmpins->arg2, tmpins->slash_val;</span><span class=cF0>
|
|
<a name="l54"></a></span><span class=cF2>}</span><span class=cF0>
|
|
<a name="l55"></a></span><span class=cF2>U0 DumpUAsmTables()</span><span class=cF0>
|
|
<a name="l56"></a></span><span class=cF2>{</span><span class=cF0>
|
|
<a name="l57"></a> </span><span class=cF2>I64 k;</span><span class=cF0>
|
|
<a name="l58"></a> </span><span class=cF2>"16/32 Bit Table\n";</span><span class=cF0>
|
|
<a name="l59"></a> </span><span class=cF2>for (k = 0; k < uasm.table_16_32_entries; k++)</span><span class=cF0>
|
|
<a name="l60"></a> </span><span class=cF2>DumpUAsmIns(uasm.table_16_32[k]);</span><span class=cF0>
|
|
<a name="l61"></a> </span><span class=cF2>"\n\n\n\n64 Bit Table\n";</span><span class=cF0>
|
|
<a name="l62"></a> </span><span class=cF2>for (k = 0; k < uasm.table_64_entries; k++)</span><span class=cF0>
|
|
<a name="l63"></a> </span><span class=cF2>DumpUAsmIns(uasm.table_64[k]);</span><span class=cF0>
|
|
<a name="l64"></a></span><span class=cF2>}</span><span class=cF0>
|
|
<a name="l65"></a></span><span class=cF2>*/</span><span class=cF0>
|
|
<a name="l66"></a>
|
|
<a name="l67"></a></span><span class=cF9>CInst</span><span class=cF0> *</span><span class=cFD>InstEntryFind</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *rip, </span><span class=cF9>I64</span><span class=cF0> opsize, </span><span class=cF9>I64</span><span class=cF0> seg_size)
|
|
<a name="l68"></a>{</span><span class=cF2>//Binary Search</span><span class=cF0>
|
|
<a name="l69"></a> </span><span class=cF9>I64</span><span class=cF0> i, j, n, m, k, arg1, arg2, o1, o2, oc_count;
|
|
<a name="l70"></a> </span><span class=cF9>CInst</span><span class=cF0> *tmpins, **table;
|
|
<a name="l71"></a>
|
|
<a name="l72"></a> i = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l73"></a> </span><span class=cF1>if</span><span class=cF0> (seg_size == </span><span class=cFE>64</span><span class=cF0>)
|
|
<a name="l74"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l75"></a> table = </span><span class=cFB>uasm</span><span class=cF0>.table_64;
|
|
<a name="l76"></a> j = </span><span class=cFB>uasm</span><span class=cF0>.table_64_entries - </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l77"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l78"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l79"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l80"></a> table = </span><span class=cFB>uasm</span><span class=cF0>.table_16_32;
|
|
<a name="l81"></a> j = </span><span class=cFB>uasm</span><span class=cF0>.table_16_32_entries - </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l82"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l83"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>)
|
|
<a name="l84"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l85"></a> k = (i + j) >> </span><span class=cFE>1</span><span class=cF0>; </span><span class=cF2>//binary search</span><span class=cF0>
|
|
<a name="l86"></a> tmpins = table[k];
|
|
<a name="l87"></a></span><span class=cF2>//DumpUAsmIns(tmpins);</span><span class=cF0>
|
|
<a name="l88"></a> m = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l89"></a> n = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l90"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>)
|
|
<a name="l91"></a> { </span><span class=cF2>//ief_compare_start</span><span class=cF0>
|
|
<a name="l92"></a> arg1 = tmpins->arg1;
|
|
<a name="l93"></a> arg2 = tmpins->arg2;
|
|
<a name="l94"></a> oc_count = tmpins->opcode_count;
|
|
<a name="l95"></a> </span><span class=cF1>if</span><span class=cF0> (tmpins->flags & </span><span class=cF3>IEF_STI_LIKE</span><span class=cF0>)
|
|
<a name="l96"></a> oc_count--;
|
|
<a name="l97"></a> </span><span class=cF1>if</span><span class=cF0> (n < oc_count)
|
|
<a name="l98"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l99"></a> o1 = rip[n];
|
|
<a name="l100"></a> </span><span class=cF1>if</span><span class=cF0> (n == tmpins->opcode_count - </span><span class=cFE>1</span><span class=cF0> && tmpins->flags & </span><span class=cF3>IEF_PLUS_OPCODE</span><span class=cF0>)
|
|
<a name="l101"></a> o1 &= -</span><span class=cFE>8</span><span class=cF0>;
|
|
<a name="l102"></a> o2 = tmpins->opcode[n++];
|
|
<a name="l103"></a> </span><span class=cF1>if</span><span class=cF0> (m = o1 - o2)
|
|
<a name="l104"></a> </span><span class=cF1>goto</span><span class=cF0> ief_compare_done;
|
|
<a name="l105"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l106"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l107"></a> </span><span class=cF1>switch</span><span class=cF0> [tmpins->uasm_slash_val]
|
|
<a name="l108"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l109"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cFE>0</span><span class=cF0>...</span><span class=cFE>7</span><span class=cF0>:
|
|
<a name="l110"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>m = rip[n] >> </span><span class=cFE>3</span><span class=cF0> & </span><span class=cFE>7</span><span class=cF0> - tmpins->slash_val</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l111"></a> {
|
|
<a name="l112"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF7>(</span><span class=cF5>Bt</span><span class=cF0>(&</span><span class=cFB>uasm</span><span class=cF0>.mem_arg_mask, arg1) || </span><span class=cF5>Bt</span><span class=cF0>(&</span><span class=cFB>uasm</span><span class=cF0>.mem_arg_mask, arg2)</span><span class=cF7>)</span><span class=cF0> && rip[n] & </span><span class=cFE>0xC0</span><span class=cF0> == </span><span class=cFE>0xC0</span><span class=cF0>)
|
|
<a name="l113"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l114"></a> m = </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l115"></a> </span><span class=cF1>goto</span><span class=cF0> ief_compare_done;
|
|
<a name="l116"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l117"></a> </span><span class=cF1>if</span><span class=cF0> (opsize == </span><span class=cFE>16</span><span class=cF0>)
|
|
<a name="l118"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l119"></a> </span><span class=cF1>if</span><span class=cF0> (tmpins->flags & </span><span class=cF3>IEF_OP_SIZE32</span><span class=cF0>)
|
|
<a name="l120"></a> {
|
|
<a name="l121"></a> m = -</span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l122"></a> </span><span class=cF1>goto</span><span class=cF0> ief_compare_done;
|
|
<a name="l123"></a> }
|
|
<a name="l124"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l125"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l126"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l127"></a> </span><span class=cF1>if</span><span class=cF0> (tmpins->flags & </span><span class=cF3>IEF_OP_SIZE16</span><span class=cF0>)
|
|
<a name="l128"></a> {
|
|
<a name="l129"></a> m = </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l130"></a> </span><span class=cF1>goto</span><span class=cF0> ief_compare_done;
|
|
<a name="l131"></a> }
|
|
<a name="l132"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l133"></a> </span><span class=cF1>if</span><span class=cF0> (opsize == </span><span class=cFE>64</span><span class=cF0> || arg1 == </span><span class=cF3>ARGT_M64</span><span class=cF0> || arg2 == </span><span class=cF3>ARGT_M64</span><span class=cF0>)
|
|
<a name="l134"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l135"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&</span><span class=cFB>uasm</span><span class=cF0>.ins64_arg_mask, arg1</span><span class=cF7>)</span><span class=cF0> && !</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&</span><span class=cFB>uasm</span><span class=cF0>.ins64_arg_mask, arg2</span><span class=cF7>)</span><span class=cF0> &&
|
|
<a name="l136"></a> !</span><span class=cF7>(</span><span class=cF0>tmpins->flags & </span><span class=cF3>IEF_48_REX</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l137"></a> m = </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l138"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l139"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l140"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l141"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&</span><span class=cFB>uasm</span><span class=cF0>.ins64_arg_mask, arg1</span><span class=cF7>)</span><span class=cF0> || </span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&</span><span class=cFB>uasm</span><span class=cF0>.ins64_arg_mask, arg2</span><span class=cF7>)</span><span class=cF0> ||
|
|
<a name="l142"></a> tmpins->flags & </span><span class=cF3>IEF_48_REX</span><span class=cF0>)
|
|
<a name="l143"></a> m = -</span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l144"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l145"></a> }
|
|
<a name="l146"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF7>(</span><span class=cF5>Bt</span><span class=cF0>(&</span><span class=cFB>uasm</span><span class=cF0>.mem_arg_mask, arg1) || </span><span class=cF5>Bt</span><span class=cF0>(&</span><span class=cFB>uasm</span><span class=cF0>.mem_arg_mask, arg2)</span><span class=cF7>)</span><span class=cF0> && rip[n] & </span><span class=cFE>0xC0</span><span class=cF0> == </span><span class=cFE>0xC0</span><span class=cF0>)
|
|
<a name="l147"></a> m = </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l148"></a> </span><span class=cF1>goto</span><span class=cF0> ief_compare_done;
|
|
<a name="l149"></a>
|
|
<a name="l150"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>SV_I_REG</span><span class=cF0>:
|
|
<a name="l151"></a> m = rip[n] >> </span><span class=cFE>3</span><span class=cF0> - tmpins->opcode[tmpins->opcode_count - </span><span class=cFE>1</span><span class=cF0>] >> </span><span class=cFE>3</span><span class=cF0>;
|
|
<a name="l152"></a> </span><span class=cF1>goto</span><span class=cF0> ief_compare_done;
|
|
<a name="l153"></a>
|
|
<a name="l154"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>SV_STI_LIKE</span><span class=cF0>:
|
|
<a name="l155"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>m = rip[n] >> </span><span class=cFE>3</span><span class=cF0> - tmpins->opcode[tmpins->opcode_count - </span><span class=cFE>1</span><span class=cF0>] >> </span><span class=cFE>3</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l156"></a> m = rip[n] - tmpins->opcode[tmpins->opcode_count - </span><span class=cFE>1</span><span class=cF0>];
|
|
<a name="l157"></a> </span><span class=cF1>goto</span><span class=cF0> ief_compare_done;
|
|
<a name="l158"></a>
|
|
<a name="l159"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>SV_R_REG</span><span class=cF0>:
|
|
<a name="l160"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>SV_NONE</span><span class=cF0>:
|
|
<a name="l161"></a> m = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l162"></a> </span><span class=cF1>if</span><span class=cF0> (opsize == </span><span class=cFE>16</span><span class=cF0>)
|
|
<a name="l163"></a> {
|
|
<a name="l164"></a> </span><span class=cF1>if</span><span class=cF0> (tmpins->flags & </span><span class=cF3>IEF_OP_SIZE32</span><span class=cF0>)
|
|
<a name="l165"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l166"></a> m = -</span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l167"></a> </span><span class=cF1>goto</span><span class=cF0> ief_compare_done;
|
|
<a name="l168"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l169"></a> }
|
|
<a name="l170"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l171"></a> {
|
|
<a name="l172"></a> </span><span class=cF1>if</span><span class=cF0> (tmpins->flags & </span><span class=cF3>IEF_OP_SIZE16</span><span class=cF0>)
|
|
<a name="l173"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l174"></a> m = </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l175"></a> </span><span class=cF1>goto</span><span class=cF0> ief_compare_done;
|
|
<a name="l176"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l177"></a> }
|
|
<a name="l178"></a> </span><span class=cF1>if</span><span class=cF0> (opsize == </span><span class=cFE>64</span><span class=cF0> || arg1 == </span><span class=cF3>ARGT_M64</span><span class=cF0> || arg2 == </span><span class=cF3>ARGT_M64</span><span class=cF0>)
|
|
<a name="l179"></a> {
|
|
<a name="l180"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&</span><span class=cFB>uasm</span><span class=cF0>.ins64_arg_mask, arg1</span><span class=cF7>)</span><span class=cF0> && !</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&</span><span class=cFB>uasm</span><span class=cF0>.ins64_arg_mask, arg2</span><span class=cF7>)</span><span class=cF0> &&
|
|
<a name="l181"></a> !</span><span class=cF7>(</span><span class=cF0>tmpins->flags & </span><span class=cF3>IEF_48_REX</span><span class=cF7>)</span><span class=cF0> && !</span><span class=cF7>(</span><span class=cF0>arg2 == </span><span class=cF3>ARGT_NONE</span><span class=cF0> &&
|
|
<a name="l182"></a> (</span><span class=cF3>ARGT_UIMM8</span><span class=cF0> <= arg1 <= </span><span class=cF3>ARGT_UIMM64</span><span class=cF0> || </span><span class=cF3>ARGT_IMM8</span><span class=cF0> <= arg1 <= </span><span class=cF3>ARGT_IMM64</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l183"></a> m = </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l184"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (tmpins->arg2 == </span><span class=cF3>ARGT_IMM64</span><span class=cF0> || tmpins->arg2 == </span><span class=cF3>ARGT_UIMM64</span><span class=cF0>)
|
|
<a name="l185"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l186"></a> </span><span class=cF1>if</span><span class=cF0> (arg2 != </span><span class=cF3>ARGT_IMM64</span><span class=cF0> && arg2 != </span><span class=cF3>ARGT_UIMM64</span><span class=cF0>)
|
|
<a name="l187"></a> m = </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l188"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l189"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (arg2 == </span><span class=cF3>ARGT_IMM64</span><span class=cF0> || arg2 == </span><span class=cF3>ARGT_UIMM64</span><span class=cF0>)
|
|
<a name="l190"></a> m = -</span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l191"></a> }
|
|
<a name="l192"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l193"></a> {
|
|
<a name="l194"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&</span><span class=cFB>uasm</span><span class=cF0>.ins64_arg_mask, arg1</span><span class=cF7>)</span><span class=cF0> || </span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&</span><span class=cFB>uasm</span><span class=cF0>.ins64_arg_mask, arg2</span><span class=cF7>)</span><span class=cF0> ||
|
|
<a name="l195"></a> tmpins->flags & </span><span class=cF3>IEF_48_REX</span><span class=cF0>)
|
|
<a name="l196"></a> m = -</span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l197"></a> }
|
|
<a name="l198"></a> </span><span class=cF1>goto</span><span class=cF0> ief_compare_done;
|
|
<a name="l199"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l200"></a> }
|
|
<a name="l201"></a>ief_compare_done:
|
|
<a name="l202"></a> </span><span class=cF1>if</span><span class=cF0> (m > </span><span class=cFE>0</span><span class=cF0>)
|
|
<a name="l203"></a> {
|
|
<a name="l204"></a> </span><span class=cF1>if</span><span class=cF0> (k == i)
|
|
<a name="l205"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l206"></a> k = j;
|
|
<a name="l207"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l208"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l209"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l210"></a> i = k;
|
|
<a name="l211"></a> }
|
|
<a name="l212"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (m < </span><span class=cFE>0</span><span class=cF0>)
|
|
<a name="l213"></a> {
|
|
<a name="l214"></a> </span><span class=cF1>if</span><span class=cF0> (k - i <= </span><span class=cFE>1</span><span class=cF0>)
|
|
<a name="l215"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l216"></a> k = i;
|
|
<a name="l217"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l218"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l219"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l220"></a> j = k;
|
|
<a name="l221"></a> }
|
|
<a name="l222"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l223"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l224"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l225"></a> </span><span class=cF1>return</span><span class=cF0> table[k];
|
|
<a name="l226"></a>}
|
|
<a name="l227"></a>
|
|
<a name="l228"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cFD>UAsmHashLoad</span><span class=cF0>()
|
|
<a name="l229"></a>{
|
|
<a name="l230"></a> </span><span class=cF9>CHashOpcode</span><span class=cF0> *tmph;
|
|
<a name="l231"></a> </span><span class=cF9>CInst</span><span class=cF0> *tmpins;
|
|
<a name="l232"></a> </span><span class=cF9>I64</span><span class=cF0> i, j1, j2, k;
|
|
<a name="l233"></a>
|
|
<a name="l234"></a> </span><span class=cFB>uasm</span><span class=cF0>.ins64_arg_mask = </span><span class=cFE>0x0880888880</span><span class=cF0> + </span><span class=cFE>1</span><span class=cF0> << </span><span class=cF3>ARGT_ST0</span><span class=cF0> + </span><span class=cFE>1</span><span class=cF0> << </span><span class=cF3>ARGT_STI</span><span class=cF0>;
|
|
<a name="l235"></a> </span><span class=cFB>uasm</span><span class=cF0>.signed_arg_mask = </span><span class=cFE>1</span><span class=cF0> << </span><span class=cF3>ARGT_REL8</span><span class=cF0> + </span><span class=cFE>1</span><span class=cF0> << </span><span class=cF3>ARGT_REL16</span><span class=cF0> + </span><span class=cFE>1</span><span class=cF0> << </span><span class=cF3>ARGT_REL32</span><span class=cF0>+
|
|
<a name="l236"></a> </span><span class=cFE>1</span><span class=cF0> << </span><span class=cF3>ARGT_IMM8</span><span class=cF0> + </span><span class=cFE>1</span><span class=cF0> << </span><span class=cF3>ARGT_IMM16</span><span class=cF0> + </span><span class=cFE>1</span><span class=cF0> << </span><span class=cF3>ARGT_IMM32</span><span class=cF0> + </span><span class=cFE>1</span><span class=cF0> << </span><span class=cF3>ARGT_IMM64</span><span class=cF0>;
|
|
<a name="l237"></a> </span><span class=cFB>uasm</span><span class=cF0>.mem_arg_mask = </span><span class=cFE>1</span><span class=cF0> << </span><span class=cF3>ARGT_M8</span><span class=cF0> + </span><span class=cFE>1</span><span class=cF0> << </span><span class=cF3>ARGT_M16</span><span class=cF0> + </span><span class=cFE>1</span><span class=cF0> << </span><span class=cF3>ARGT_M32</span><span class=cF0> + </span><span class=cFE>1</span><span class=cF0> << </span><span class=cF3>ARGT_M64</span><span class=cF0>;
|
|
<a name="l238"></a>
|
|
<a name="l239"></a> </span><span class=cFB>uasm</span><span class=cF0>.table_16_32_entries = </span><span class=cFB>uasm</span><span class=cF0>.table_64_entries = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l240"></a> </span><span class=cF1>for</span><span class=cF0> (i = </span><span class=cFE>0</span><span class=cF0>; i <= </span><span class=cFB>cmp</span><span class=cF0>.asm_hash->mask; i++)
|
|
<a name="l241"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l242"></a> tmph = </span><span class=cFB>cmp</span><span class=cF0>.asm_hash->body[i];
|
|
<a name="l243"></a> </span><span class=cF1>while</span><span class=cF0> (tmph)
|
|
<a name="l244"></a> {
|
|
<a name="l245"></a> </span><span class=cF1>if</span><span class=cF0> (tmph->type == </span><span class=cF3>HTT_OPCODE</span><span class=cF0> && !</span><span class=cF7>(</span><span class=cF0>tmph->oc_flags & </span><span class=cF3>OCF_ALIAS</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l246"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l247"></a> tmpins = &tmph->ins;
|
|
<a name="l248"></a> </span><span class=cF1>for</span><span class=cF0> (k = </span><span class=cFE>0</span><span class=cF0>; k < tmph->inst_entry_count; k++)
|
|
<a name="l249"></a> {
|
|
<a name="l250"></a> </span><span class=cFB>uasm</span><span class=cF0>.table_16_32_entries++;
|
|
<a name="l251"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>tmpins->flags & </span><span class=cF3>IEF_NOT_IN_64_BIT</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l252"></a> </span><span class=cFB>uasm</span><span class=cF0>.table_64_entries++;
|
|
<a name="l253"></a> tmpins++;
|
|
<a name="l254"></a> }
|
|
<a name="l255"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l256"></a> tmph = tmph->next;
|
|
<a name="l257"></a> }
|
|
<a name="l258"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l259"></a>
|
|
<a name="l260"></a> j1 = j2 = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l261"></a> </span><span class=cFB>uasm</span><span class=cF0>.table_16_32 = </span><span class=cF5>MAlloc</span><span class=cF0>(</span><span class=cFB>uasm</span><span class=cF0>.table_16_32_entries * </span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l262"></a> </span><span class=cFB>uasm</span><span class=cF0>.table_64 = </span><span class=cF5>MAlloc</span><span class=cF0>(</span><span class=cFB>uasm</span><span class=cF0>.table_64_entries * </span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l263"></a> </span><span class=cF1>for</span><span class=cF0> (i = </span><span class=cFE>0</span><span class=cF0>; i <= </span><span class=cFB>cmp</span><span class=cF0>.asm_hash->mask; i++)
|
|
<a name="l264"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l265"></a> tmph = </span><span class=cFB>cmp</span><span class=cF0>.asm_hash->body[i];
|
|
<a name="l266"></a> </span><span class=cF1>while</span><span class=cF0> (tmph)
|
|
<a name="l267"></a> {
|
|
<a name="l268"></a> </span><span class=cF1>if</span><span class=cF0> (tmph->type == </span><span class=cF3>HTT_OPCODE</span><span class=cF0> && !</span><span class=cF7>(</span><span class=cF0>tmph->oc_flags & </span><span class=cF3>OCF_ALIAS</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l269"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l270"></a> tmpins = &tmph->ins;
|
|
<a name="l271"></a> </span><span class=cF1>for</span><span class=cF0> (k = </span><span class=cFE>0</span><span class=cF0>; k < tmph->inst_entry_count; k++)
|
|
<a name="l272"></a> {
|
|
<a name="l273"></a> </span><span class=cFB>uasm</span><span class=cF0>.table_16_32[j1++] = tmpins;
|
|
<a name="l274"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>tmpins->flags & </span><span class=cF3>IEF_NOT_IN_64_BIT</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l275"></a> </span><span class=cFB>uasm</span><span class=cF0>.table_64[j2++] = tmpins;
|
|
<a name="l276"></a> tmpins++;
|
|
<a name="l277"></a> }
|
|
<a name="l278"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l279"></a> tmph = tmph->next;
|
|
<a name="l280"></a> }
|
|
<a name="l281"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l282"></a> </span><span class=cF5>QuickSortI64</span><span class=cF0>(</span><span class=cFB>uasm</span><span class=cF0>.table_16_32, </span><span class=cFB>uasm</span><span class=cF0>.table_16_32_entries, &</span><span class=cFD>InstEntriesCompare</span><span class=cF0>);
|
|
<a name="l283"></a> </span><span class=cF5>QuickSortI64</span><span class=cF0>(</span><span class=cFB>uasm</span><span class=cF0>.table_64 , </span><span class=cFB>uasm</span><span class=cF0>.table_64_entries , &</span><span class=cFD>InstEntriesCompare</span><span class=cF0>);
|
|
<a name="l284"></a>}
|
|
<a name="l285"></a>
|
|
<a name="l286"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>Ui</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *buf, </span><span class=cF1>U8</span><span class=cF0> **_rip, </span><span class=cF9>I64</span><span class=cF0> seg_size=</span><span class=cFE>64</span><span class=cF0>, </span><span class=cF9>I64</span><span class=cF0> *_jmp_dst=</span><span class=cF3>NULL</span><span class=cF0>, </span><span class=cF1>Bool</span><span class=cF0> just_ins=</span><span class=cF3>FALSE</span><span class=cF0>)
|
|
<a name="l287"></a>{</span><span class=cF2>//Unassembles one instruction</span><span class=cF0>
|
|
<a name="l288"></a> </span><span class=cF9>I64</span><span class=cF0> i, disp, imm, opsize, opadd, arg1, arg2, reloced_arg1, reloced_arg2,
|
|
<a name="l289"></a> arg1_size = </span><span class=cFE>0</span><span class=cF0>, arg2_size = </span><span class=cFE>0</span><span class=cF0>, reloced_arg1_size, reloced_arg2_size,
|
|
<a name="l290"></a> ModrM = -</span><span class=cFE>1</span><span class=cF0>, SIB = -</span><span class=cFE>1</span><span class=cF0>, scale, r1, r2, Mod = -</span><span class=cFE>1</span><span class=cF0>, RM1 = -</span><span class=cFE>1</span><span class=cF0>, RM2 = -</span><span class=cFE>1</span><span class=cF0>, </span><span class=cF1>REX</span><span class=cF0> = -</span><span class=cFE>1</span><span class=cF0>, REX_r = </span><span class=cFE>0</span><span class=cF0>, REX_x = </span><span class=cFE>0</span><span class=cF0>, REX_b = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l291"></a> </span><span class=cF1>Bool</span><span class=cF0> cont;
|
|
<a name="l292"></a> </span><span class=cF9>CInst</span><span class=cF0> *tmpins, *tmpins2;
|
|
<a name="l293"></a> </span><span class=cF9>CHashOpcode</span><span class=cF0> *tmpo;
|
|
<a name="l294"></a> </span><span class=cF1>U8</span><span class=cF0> *rip = *_rip, *ptr, *reloced_arg1_st, *reloced_arg2_st, *bin_data_area1, *bin_data_area2,
|
|
<a name="l295"></a> line1[</span><span class=cFE>512</span><span class=cF0>], line2[</span><span class=cFE>512</span><span class=cF0>], buf2[</span><span class=cFE>512</span><span class=cF0>], arg1_st[</span><span class=cFE>512</span><span class=cF0>], arg2_st[</span><span class=cFE>512</span><span class=cF0>], seg_overrides[</span><span class=cFE>32</span><span class=cF0>];
|
|
<a name="l296"></a>
|
|
<a name="l297"></a> </span><span class=cF1>if</span><span class=cF0> (_jmp_dst)
|
|
<a name="l298"></a> *_jmp_dst = -</span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l299"></a> </span><span class=cF1>if</span><span class=cF0> (seg_size == </span><span class=cFE>16</span><span class=cF0>)
|
|
<a name="l300"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l301"></a> opsize = </span><span class=cFE>16</span><span class=cF0>;
|
|
<a name="l302"></a> opadd = </span><span class=cFE>16</span><span class=cF0>;
|
|
<a name="l303"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l304"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (seg_size == </span><span class=cFE>32</span><span class=cF0>)
|
|
<a name="l305"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l306"></a> opsize = </span><span class=cFE>32</span><span class=cF0>;
|
|
<a name="l307"></a> opadd = </span><span class=cFE>32</span><span class=cF0>;
|
|
<a name="l308"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l309"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l310"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l311"></a> opsize = </span><span class=cFE>32</span><span class=cF0>;
|
|
<a name="l312"></a> opadd = </span><span class=cFE>64</span><span class=cF0>;
|
|
<a name="l313"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l314"></a> *arg1_st = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l315"></a> *arg2_st = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l316"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>IsRaw</span><span class=cF0> && </span><span class=cF5>PutSrcLink</span><span class=cF7>(</span><span class=cF0>rip, </span><span class=cFE>1</span><span class=cF0>, line1</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l317"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(line1, </span><span class=cF6>"\n"</span><span class=cF0>);
|
|
<a name="l318"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l319"></a> *line1 = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l320"></a>
|
|
<a name="l321"></a> </span><span class=cF5>StrPrint</span><span class=cF0>(line1 + </span><span class=cF5>StrLen</span><span class=cF7>(</span><span class=cF0>line1</span><span class=cF7>)</span><span class=cF0>, </span><span class=cF6>"%24tp "</span><span class=cF0>, rip);
|
|
<a name="l322"></a> bin_data_area1 = line1 + </span><span class=cF5>StrLen</span><span class=cF0>(line1);
|
|
<a name="l323"></a> </span><span class=cF1>for</span><span class=cF0> (i = </span><span class=cFE>0</span><span class=cF0>; i < </span><span class=cFE>6</span><span class=cF0>; i++)
|
|
<a name="l324"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(line1, </span><span class=cF6>"%02X"</span><span class=cF0>, rip[i]);
|
|
<a name="l325"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(line1, </span><span class=cF6>" "</span><span class=cF0>);
|
|
<a name="l326"></a>
|
|
<a name="l327"></a> </span><span class=cF5>StrPrint</span><span class=cF0>(line2, </span><span class=cF6>"%24tp "</span><span class=cF0>, rip + </span><span class=cFE>6</span><span class=cF0>);
|
|
<a name="l328"></a> bin_data_area2 = line2 + </span><span class=cF5>StrLen</span><span class=cF0>(line2);
|
|
<a name="l329"></a> </span><span class=cF1>for</span><span class=cF0> (i = </span><span class=cFE>6</span><span class=cF0>; i < </span><span class=cFE>12</span><span class=cF0>; i++)
|
|
<a name="l330"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(line2, </span><span class=cF6>"%02X"</span><span class=cF0>, rip[i]);
|
|
<a name="l331"></a>
|
|
<a name="l332"></a> *seg_overrides = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l333"></a> cont = </span><span class=cF3>TRUE</span><span class=cF0>;
|
|
<a name="l334"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>)
|
|
<a name="l335"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l336"></a> </span><span class=cF1>switch</span><span class=cF0> (*rip)
|
|
<a name="l337"></a> {
|
|
<a name="l338"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cFE>0x2E</span><span class=cF0>:
|
|
<a name="l339"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>StrLen</span><span class=cF7>(</span><span class=cF0>seg_overrides</span><span class=cF7>)</span><span class=cF0> < </span><span class=cFE>24</span><span class=cF0>)
|
|
<a name="l340"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(seg_overrides, </span><span class=cF6>"CS:"</span><span class=cF0>);
|
|
<a name="l341"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l342"></a>
|
|
<a name="l343"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cFE>0x36</span><span class=cF0>:
|
|
<a name="l344"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>StrLen</span><span class=cF7>(</span><span class=cF0>seg_overrides</span><span class=cF7>)</span><span class=cF0> < </span><span class=cFE>24</span><span class=cF0>)
|
|
<a name="l345"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(seg_overrides, </span><span class=cF6>"SS:"</span><span class=cF0>);
|
|
<a name="l346"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l347"></a>
|
|
<a name="l348"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cFE>0x3E</span><span class=cF0>:
|
|
<a name="l349"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>StrLen</span><span class=cF7>(</span><span class=cF0>seg_overrides</span><span class=cF7>)</span><span class=cF0> < </span><span class=cFE>24</span><span class=cF0>)
|
|
<a name="l350"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(seg_overrides, </span><span class=cF6>"DS:"</span><span class=cF0>);
|
|
<a name="l351"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l352"></a>
|
|
<a name="l353"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cFE>0x26</span><span class=cF0>:
|
|
<a name="l354"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>StrLen</span><span class=cF7>(</span><span class=cF0>seg_overrides</span><span class=cF7>)</span><span class=cF0> < </span><span class=cFE>24</span><span class=cF0>)
|
|
<a name="l355"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(seg_overrides, </span><span class=cF6>"ES:"</span><span class=cF0>);
|
|
<a name="l356"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l357"></a>
|
|
<a name="l358"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cFE>0x64</span><span class=cF0>:
|
|
<a name="l359"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>StrLen</span><span class=cF7>(</span><span class=cF0>seg_overrides</span><span class=cF7>)</span><span class=cF0> < </span><span class=cFE>24</span><span class=cF0>)
|
|
<a name="l360"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(seg_overrides, </span><span class=cF6>"FS:"</span><span class=cF0>);
|
|
<a name="l361"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l362"></a>
|
|
<a name="l363"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cFE>0x65</span><span class=cF0>:
|
|
<a name="l364"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>StrLen</span><span class=cF7>(</span><span class=cF0>seg_overrides</span><span class=cF7>)</span><span class=cF0> < </span><span class=cFE>24</span><span class=cF0>)
|
|
<a name="l365"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(seg_overrides, </span><span class=cF6>"GS:"</span><span class=cF0>);
|
|
<a name="l366"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l367"></a>
|
|
<a name="l368"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>OC_OP_SIZE_PREFIX</span><span class=cF0>:
|
|
<a name="l369"></a> </span><span class=cF1>if</span><span class=cF0> (opsize == </span><span class=cFE>16</span><span class=cF0>)
|
|
<a name="l370"></a> opsize = </span><span class=cFE>32</span><span class=cF0>;
|
|
<a name="l371"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l372"></a> opsize = </span><span class=cFE>16</span><span class=cF0>;
|
|
<a name="l373"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l374"></a>
|
|
<a name="l375"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>OC_ADDR_SIZE_PREFIX</span><span class=cF0>:
|
|
<a name="l376"></a> </span><span class=cF1>if</span><span class=cF0> (opadd == </span><span class=cFE>16</span><span class=cF0>)
|
|
<a name="l377"></a> opadd = </span><span class=cFE>32</span><span class=cF0>;
|
|
<a name="l378"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l379"></a> opadd = </span><span class=cFE>16</span><span class=cF0>;
|
|
<a name="l380"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l381"></a>
|
|
<a name="l382"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cFE>0x40</span><span class=cF0>...</span><span class=cFE>0x4F</span><span class=cF0>:
|
|
<a name="l383"></a> </span><span class=cF1>if</span><span class=cF0> (seg_size == </span><span class=cFE>64</span><span class=cF0>)
|
|
<a name="l384"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l385"></a> </span><span class=cF1>REX</span><span class=cF0> = *rip;
|
|
<a name="l386"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF1>REX</span><span class=cF0> >= </span><span class=cFE>0x48</span><span class=cF0>)
|
|
<a name="l387"></a> opsize = </span><span class=cFE>64</span><span class=cF0>;
|
|
<a name="l388"></a> REX_b = </span><span class=cF5>Bt</span><span class=cF0>(&</span><span class=cF1>REX</span><span class=cF0>, </span><span class=cFE>0</span><span class=cF0>) << </span><span class=cFE>3</span><span class=cF0>;
|
|
<a name="l389"></a> REX_x = </span><span class=cF5>Bt</span><span class=cF0>(&</span><span class=cF1>REX</span><span class=cF0>, </span><span class=cFE>1</span><span class=cF0>) << </span><span class=cFE>3</span><span class=cF0>;
|
|
<a name="l390"></a> REX_r = </span><span class=cF5>Bt</span><span class=cF0>(&</span><span class=cF1>REX</span><span class=cF0>, </span><span class=cFE>2</span><span class=cF0>) << </span><span class=cFE>3</span><span class=cF0>;
|
|
<a name="l391"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l392"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF2>//Fall thru if !64</span><span class=cF0>
|
|
<a name="l393"></a> </span><span class=cF1>default</span><span class=cF0>:
|
|
<a name="l394"></a> cont = </span><span class=cF3>FALSE</span><span class=cF0>;
|
|
<a name="l395"></a> }
|
|
<a name="l396"></a> </span><span class=cF1>if</span><span class=cF0> (cont)
|
|
<a name="l397"></a> rip++;
|
|
<a name="l398"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l399"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l400"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l401"></a>
|
|
<a name="l402"></a> tmpins = </span><span class=cFD>InstEntryFind</span><span class=cF0>(rip, opsize, seg_size);
|
|
<a name="l403"></a> </span><span class=cF1>if</span><span class=cF0> (opsize == </span><span class=cFE>32</span><span class=cF0> && seg_size == </span><span class=cFE>64</span><span class=cF0>)
|
|
<a name="l404"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l405"></a> tmpins2 = </span><span class=cFD>InstEntryFind</span><span class=cF0>(rip, </span><span class=cFE>64</span><span class=cF0>, seg_size);
|
|
<a name="l406"></a> </span><span class=cF1>if</span><span class=cF0> (tmpins2 != tmpins && tmpins2->flags & </span><span class=cF3>IEF_REX_ONLY_R8_R15</span><span class=cF0> || tmpins2->flags & </span><span class=cF3>IEF_REX_XOR_LIKE</span><span class=cF0> &&
|
|
<a name="l407"></a> rip[</span><span class=cFE>1</span><span class=cF0>] >> </span><span class=cFE>3</span><span class=cF0> & </span><span class=cFE>7</span><span class=cF0> == rip[</span><span class=cFE>1</span><span class=cF0>] & </span><span class=cFE>7</span><span class=cF0>)
|
|
<a name="l408"></a> tmpins = tmpins2;
|
|
<a name="l409"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l410"></a>
|
|
<a name="l411"></a> rip += tmpins->opcode_count;
|
|
<a name="l412"></a> tmpo = tmpins(</span><span class=cF1>U8</span><span class=cF0> *) - tmpins->ins_entry_num * </span><span class=cF1>sizeof</span><span class=cF0>(</span><span class=cF9>CInst</span><span class=cF0>)
|
|
<a name="l413"></a> -</span><span class=cF1>offset</span><span class=cF0>(</span><span class=cF9>CHashOpcode</span><span class=cF0>.ins);
|
|
<a name="l414"></a> </span><span class=cF1>if</span><span class=cF0> (just_ins)
|
|
<a name="l415"></a> *line1 = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l416"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(line1, tmpo->str);
|
|
<a name="l417"></a>
|
|
<a name="l418"></a> arg1 = tmpins->arg1;
|
|
<a name="l419"></a> arg2 = tmpins->arg2;
|
|
<a name="l420"></a>
|
|
<a name="l421"></a> </span><span class=cF1>if</span><span class=cF0> (arg1_size = tmpins->size1)
|
|
<a name="l422"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l423"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&</span><span class=cFB>uasm</span><span class=cF0>.signed_arg_mask, arg1</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l424"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg1_st, </span><span class=cF6>"I%d "</span><span class=cF0>, arg1_size);
|
|
<a name="l425"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l426"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg1_st, </span><span class=cF6>"U%d "</span><span class=cF0>, arg1_size);
|
|
<a name="l427"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l428"></a>
|
|
<a name="l429"></a> </span><span class=cF1>if</span><span class=cF0> (arg2_size = tmpins->size2)
|
|
<a name="l430"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l431"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&</span><span class=cFB>uasm</span><span class=cF0>.signed_arg_mask, arg2</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l432"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg2_st, </span><span class=cF6>"I%d "</span><span class=cF0>, arg2_size);
|
|
<a name="l433"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l434"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg2_st, </span><span class=cF6>"U%d "</span><span class=cF0>, arg2_size);
|
|
<a name="l435"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l436"></a>
|
|
<a name="l437"></a> </span><span class=cF1>if</span><span class=cF0> (tmpins->flags & </span><span class=cF3>IEF_PLUS_OPCODE</span><span class=cF0>)
|
|
<a name="l438"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l439"></a> rip--;
|
|
<a name="l440"></a> RM1 = *rip++ - tmpins->opcode[tmpins->opcode_count - </span><span class=cFE>1</span><span class=cF0>] + REX_b;
|
|
<a name="l441"></a> ptr = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l442"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF3>ARGT_R8</span><span class=cF0> <= arg1 <= </span><span class=cF3>ARGT_R64</span><span class=cF0>)
|
|
<a name="l443"></a> {
|
|
<a name="l444"></a> </span><span class=cF1>if</span><span class=cF0> (arg1_size == </span><span class=cFE>8</span><span class=cF0>)
|
|
<a name="l445"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l446"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF1>REX</span><span class=cF0> != -</span><span class=cFE>1</span><span class=cF0>)
|
|
<a name="l447"></a> ptr = </span><span class=cF6>"ST_U8_REX_REGS"</span><span class=cF0>;
|
|
<a name="l448"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l449"></a> ptr = </span><span class=cF6>"ST_U8_REGS"</span><span class=cF0>;
|
|
<a name="l450"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l451"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (arg1_size == </span><span class=cFE>16</span><span class=cF0>)
|
|
<a name="l452"></a> ptr = </span><span class=cF6>"ST_U16_REGS"</span><span class=cF0>;
|
|
<a name="l453"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (arg1_size == </span><span class=cFE>32</span><span class=cF0>)
|
|
<a name="l454"></a> ptr=</span><span class=cF6>"ST_U32_REGS"</span><span class=cF0>;
|
|
<a name="l455"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (arg1_size == </span><span class=cFE>64</span><span class=cF0>)
|
|
<a name="l456"></a> ptr = </span><span class=cF6>"ST_U64_REGS"</span><span class=cF0>;
|
|
<a name="l457"></a> </span><span class=cF1>if</span><span class=cF0> (ptr)
|
|
<a name="l458"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg1_st, </span><span class=cF6>"%Z"</span><span class=cF0>, RM1, ptr);
|
|
<a name="l459"></a> }
|
|
<a name="l460"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l461"></a> {
|
|
<a name="l462"></a> </span><span class=cF1>if</span><span class=cF0> (arg2_size == </span><span class=cFE>8</span><span class=cF0>)
|
|
<a name="l463"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l464"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF1>REX</span><span class=cF0> != -</span><span class=cFE>1</span><span class=cF0>)
|
|
<a name="l465"></a> ptr = </span><span class=cF6>"ST_U8_REX_REGS"</span><span class=cF0>;
|
|
<a name="l466"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l467"></a> ptr = </span><span class=cF6>"ST_U8_REGS"</span><span class=cF0>;
|
|
<a name="l468"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l469"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (arg2_size == </span><span class=cFE>16</span><span class=cF0>)
|
|
<a name="l470"></a> ptr = </span><span class=cF6>"ST_U16_REGS"</span><span class=cF0>;
|
|
<a name="l471"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (arg2_size == </span><span class=cFE>32</span><span class=cF0>)
|
|
<a name="l472"></a> ptr = </span><span class=cF6>"ST_U32_REGS"</span><span class=cF0>;
|
|
<a name="l473"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (arg2_size == </span><span class=cFE>64</span><span class=cF0>)
|
|
<a name="l474"></a> ptr = </span><span class=cF6>"ST_U64_REGS"</span><span class=cF0>;
|
|
<a name="l475"></a> </span><span class=cF1>if</span><span class=cF0> (ptr)
|
|
<a name="l476"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg2_st, </span><span class=cF6>"%Z"</span><span class=cF0>, RM1, ptr);
|
|
<a name="l477"></a> }
|
|
<a name="l478"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l479"></a>
|
|
<a name="l480"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF3>ARGT_RM8</span><span class=cF0> <= arg1 <= </span><span class=cF3>ARGT_RM64</span><span class=cF0> || </span><span class=cF3>ARGT_M8</span><span class=cF0> <= arg1 <= </span><span class=cF3>ARGT_M64</span><span class=cF0> ||
|
|
<a name="l481"></a> </span><span class=cF3>ARGT_RM8</span><span class=cF0> <= arg2 <= </span><span class=cF3>ARGT_RM64</span><span class=cF0> || </span><span class=cF3>ARGT_M8</span><span class=cF0> <= arg2 <= </span><span class=cF3>ARGT_M64</span><span class=cF0>)
|
|
<a name="l482"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l483"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF3>ARGT_RM8</span><span class=cF0> <= arg2 <= </span><span class=cF3>ARGT_RM64</span><span class=cF0> || </span><span class=cF3>ARGT_M8</span><span class=cF0> <= arg2 <= </span><span class=cF3>ARGT_M64</span><span class=cF0>)
|
|
<a name="l484"></a> {
|
|
<a name="l485"></a> reloced_arg1 = arg2;
|
|
<a name="l486"></a> reloced_arg2 = arg1;
|
|
<a name="l487"></a> reloced_arg1_size = arg2_size;
|
|
<a name="l488"></a> reloced_arg2_size = arg1_size;
|
|
<a name="l489"></a> reloced_arg1_st = arg2_st;
|
|
<a name="l490"></a> reloced_arg2_st = arg1_st;
|
|
<a name="l491"></a> }
|
|
<a name="l492"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l493"></a> {
|
|
<a name="l494"></a> reloced_arg1 = arg1;
|
|
<a name="l495"></a> reloced_arg2 = arg2;
|
|
<a name="l496"></a> reloced_arg1_size = arg1_size;
|
|
<a name="l497"></a> reloced_arg2_size = arg2_size;
|
|
<a name="l498"></a> reloced_arg1_st = arg1_st;
|
|
<a name="l499"></a> reloced_arg2_st = arg2_st;
|
|
<a name="l500"></a> }
|
|
<a name="l501"></a>
|
|
<a name="l502"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(reloced_arg1_st, seg_overrides);
|
|
<a name="l503"></a> ModrM = *rip++;
|
|
<a name="l504"></a> Mod = ModrM >> </span><span class=cFE>6</span><span class=cF0> & </span><span class=cFE>3</span><span class=cF0>;
|
|
<a name="l505"></a> RM1 = ModrM & </span><span class=cFE>7</span><span class=cF0> + REX_b;
|
|
<a name="l506"></a> RM2 = ModrM >> </span><span class=cFE>3</span><span class=cF0> & </span><span class=cFE>7</span><span class=cF0> + REX_r;
|
|
<a name="l507"></a> </span><span class=cF1>if</span><span class=cF0> (Mod < </span><span class=cFE>3</span><span class=cF0> && RM1 & </span><span class=cFE>7</span><span class=cF0> == </span><span class=cFE>4</span><span class=cF0>)
|
|
<a name="l508"></a> SIB = *rip++;
|
|
<a name="l509"></a> </span><span class=cF1>if</span><span class=cF0> (Mod == </span><span class=cFE>1</span><span class=cF0>) {
|
|
<a name="l510"></a> disp = *rip(</span><span class=cF1>U8</span><span class=cF0> *)++;
|
|
<a name="l511"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(reloced_arg1_st, </span><span class=cF6>"%02X"</span><span class=cF0>, disp);
|
|
<a name="l512"></a> }
|
|
<a name="l513"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (Mod == </span><span class=cFE>2</span><span class=cF0>)
|
|
<a name="l514"></a> {
|
|
<a name="l515"></a> disp = *rip(</span><span class=cF9>U32</span><span class=cF0> *)++;
|
|
<a name="l516"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(reloced_arg1_st, </span><span class=cF6>"%08X"</span><span class=cF0>, disp);
|
|
<a name="l517"></a> }
|
|
<a name="l518"></a> </span><span class=cF1>if</span><span class=cF0> (tmpins->slash_val < </span><span class=cFE>8</span><span class=cF0>)
|
|
<a name="l519"></a> RM2 = -</span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l520"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l521"></a> {
|
|
<a name="l522"></a> ptr = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l523"></a> </span><span class=cF1>if</span><span class=cF0> (reloced_arg2 == </span><span class=cF3>ARGT_SREG</span><span class=cF0>)
|
|
<a name="l524"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l525"></a> </span><span class=cF1>if</span><span class=cF0> (RM2 <= </span><span class=cFE>5</span><span class=cF0>)
|
|
<a name="l526"></a> ptr = </span><span class=cF6>"ST_SEG_REGS"</span><span class=cF0>;
|
|
<a name="l527"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l528"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF3>ARGT_IMM8</span><span class=cF0> <= reloced_arg2 <= </span><span class=cF3>ARGT_IMM64</span><span class=cF7>)</span><span class=cF0> && !</span><span class=cF7>(</span><span class=cF3>ARGT_UIMM8</span><span class=cF0> <= reloced_arg2 <= </span><span class=cF3>ARGT_UIMM64</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l529"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l530"></a> </span><span class=cF1>if</span><span class=cF0> (reloced_arg2_size == </span><span class=cFE>8</span><span class=cF0>)
|
|
<a name="l531"></a> {
|
|
<a name="l532"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF1>REX</span><span class=cF0> != -</span><span class=cFE>1</span><span class=cF0>)
|
|
<a name="l533"></a> ptr = </span><span class=cF6>"ST_U8_REX_REGS"</span><span class=cF0>;
|
|
<a name="l534"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l535"></a> ptr = </span><span class=cF6>"ST_U8_REGS"</span><span class=cF0>;
|
|
<a name="l536"></a> }
|
|
<a name="l537"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (reloced_arg2_size == </span><span class=cFE>16</span><span class=cF0>)
|
|
<a name="l538"></a> ptr = </span><span class=cF6>"ST_U16_REGS"</span><span class=cF0>;
|
|
<a name="l539"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (reloced_arg2_size == </span><span class=cFE>32</span><span class=cF0>)
|
|
<a name="l540"></a> ptr = </span><span class=cF6>"ST_U32_REGS"</span><span class=cF0>;
|
|
<a name="l541"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (reloced_arg2_size == </span><span class=cFE>64</span><span class=cF0>)
|
|
<a name="l542"></a> ptr = </span><span class=cF6>"ST_U64_REGS"</span><span class=cF0>;
|
|
<a name="l543"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l544"></a> </span><span class=cF1>if</span><span class=cF0> (ptr)
|
|
<a name="l545"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(reloced_arg2_st, </span><span class=cF6>"%Z"</span><span class=cF0>, RM2, ptr);
|
|
<a name="l546"></a> }
|
|
<a name="l547"></a> </span><span class=cF1>if</span><span class=cF0> (RM1 & </span><span class=cFE>7</span><span class=cF0> == </span><span class=cFE>5</span><span class=cF0> && !Mod)
|
|
<a name="l548"></a> {
|
|
<a name="l549"></a> disp = *rip(</span><span class=cF9>I32</span><span class=cF0> *)++;
|
|
<a name="l550"></a> </span><span class=cF1>if</span><span class=cF0> (seg_size == </span><span class=cFE>64</span><span class=cF0>)
|
|
<a name="l551"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l552"></a> disp += rip;
|
|
<a name="l553"></a> </span><span class=cF1>if</span><span class=cF0> (reloced_arg2 == </span><span class=cF3>ARGT_IMM8</span><span class=cF0> || reloced_arg2 == </span><span class=cF3>ARGT_UIMM8</span><span class=cF0>)
|
|
<a name="l554"></a> disp++;
|
|
<a name="l555"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (reloced_arg2 == </span><span class=cF3>ARGT_IMM16</span><span class=cF0> || reloced_arg2 == </span><span class=cF3>ARGT_UIMM16</span><span class=cF0>)
|
|
<a name="l556"></a> disp += </span><span class=cFE>2</span><span class=cF0>;
|
|
<a name="l557"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (reloced_arg2 == </span><span class=cF3>ARGT_IMM32</span><span class=cF0> || reloced_arg2 == </span><span class=cF3>ARGT_UIMM32</span><span class=cF0>)
|
|
<a name="l558"></a> disp += </span><span class=cFE>4</span><span class=cF0>;
|
|
<a name="l559"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (reloced_arg2 == </span><span class=cF3>ARGT_IMM64</span><span class=cF0> || reloced_arg2 == </span><span class=cF3>ARGT_UIMM64</span><span class=cF0>)
|
|
<a name="l560"></a> disp += </span><span class=cFE>8</span><span class=cF0>;
|
|
<a name="l561"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l562"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(reloced_arg1_st, </span><span class=cF6>"[%X]"</span><span class=cF0>, disp);
|
|
<a name="l563"></a> RM1 = -</span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l564"></a> }
|
|
<a name="l565"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l566"></a> {
|
|
<a name="l567"></a> </span><span class=cF1>if</span><span class=cF0> (Mod < </span><span class=cFE>3</span><span class=cF0>)
|
|
<a name="l568"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l569"></a> </span><span class=cF1>if</span><span class=cF0> (RM1 & </span><span class=cFE>7</span><span class=cF0> == </span><span class=cFE>4</span><span class=cF0>)
|
|
<a name="l570"></a> {
|
|
<a name="l571"></a> RM1 = -</span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l572"></a> r1 = SIB & </span><span class=cFE>7</span><span class=cF0> + REX_b;
|
|
<a name="l573"></a> r2 = SIB >> </span><span class=cFE>3</span><span class=cF0> & </span><span class=cFE>7</span><span class=cF0> + REX_x;
|
|
<a name="l574"></a> scale = SIB >> </span><span class=cFE>6</span><span class=cF0> & </span><span class=cFE>3</span><span class=cF0>;
|
|
<a name="l575"></a> </span><span class=cF1>if</span><span class=cF0> (scale == </span><span class=cFE>3</span><span class=cF0>)
|
|
<a name="l576"></a> scale = </span><span class=cFE>8</span><span class=cF0>;
|
|
<a name="l577"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (scale == </span><span class=cFE>2</span><span class=cF0>)
|
|
<a name="l578"></a> scale = </span><span class=cFE>4</span><span class=cF0>;
|
|
<a name="l579"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (scale == </span><span class=cFE>1</span><span class=cF0>)
|
|
<a name="l580"></a> scale = </span><span class=cFE>2</span><span class=cF0>;
|
|
<a name="l581"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l582"></a> scale = </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l583"></a> </span><span class=cF1>if</span><span class=cF0> (seg_size == </span><span class=cFE>64</span><span class=cF0>)
|
|
<a name="l584"></a> ptr = </span><span class=cF6>"ST_U64_REGS"</span><span class=cF0>;
|
|
<a name="l585"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l586"></a> ptr = </span><span class=cF6>"ST_U32_REGS"</span><span class=cF0>;
|
|
<a name="l587"></a> </span><span class=cF1>if</span><span class=cF0> (r1 == </span><span class=cF3>REG_RBP</span><span class=cF0> && !Mod)
|
|
<a name="l588"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l589"></a> disp = *rip(</span><span class=cF9>U32</span><span class=cF0> *)++;
|
|
<a name="l590"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(reloced_arg1_st, </span><span class=cF6>"%08X[%Z*%d]"</span><span class=cF0>, disp, r2, ptr, scale);
|
|
<a name="l591"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l592"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (r2 == </span><span class=cFE>4</span><span class=cF0>)
|
|
<a name="l593"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(reloced_arg1_st, </span><span class=cF6>"[%Z]"</span><span class=cF0>, r1, ptr);
|
|
<a name="l594"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l595"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(reloced_arg1_st, </span><span class=cF6>"[%Z+%Z*%d]"</span><span class=cF0>, r1, ptr, r2, ptr, scale);
|
|
<a name="l596"></a> }
|
|
<a name="l597"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l598"></a> {
|
|
<a name="l599"></a> </span><span class=cF1>if</span><span class=cF0> (opadd == </span><span class=cFE>16</span><span class=cF0>)
|
|
<a name="l600"></a> ptr = </span><span class=cF6>"ST_U16_REGS"</span><span class=cF0>;
|
|
<a name="l601"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (opadd == </span><span class=cFE>32</span><span class=cF0>)
|
|
<a name="l602"></a> ptr = </span><span class=cF6>"ST_U32_REGS"</span><span class=cF0>;
|
|
<a name="l603"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l604"></a> ptr = </span><span class=cF6>"ST_U64_REGS"</span><span class=cF0>;
|
|
<a name="l605"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(reloced_arg1_st, </span><span class=cF6>"[%Z]"</span><span class=cF0>, RM1, ptr);
|
|
<a name="l606"></a> }
|
|
<a name="l607"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l608"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l609"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l610"></a> ptr = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l611"></a> </span><span class=cF1>if</span><span class=cF0> (reloced_arg1_size == </span><span class=cFE>8</span><span class=cF0>)
|
|
<a name="l612"></a> {
|
|
<a name="l613"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF1>REX</span><span class=cF0> != -</span><span class=cFE>1</span><span class=cF0>)
|
|
<a name="l614"></a> ptr = </span><span class=cF6>"ST_U8_REX_REGS"</span><span class=cF0>;
|
|
<a name="l615"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l616"></a> ptr = </span><span class=cF6>"ST_U8_REGS"</span><span class=cF0>;
|
|
<a name="l617"></a> }
|
|
<a name="l618"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (reloced_arg1_size == </span><span class=cFE>16</span><span class=cF0>)
|
|
<a name="l619"></a> ptr = </span><span class=cF6>"ST_U16_REGS"</span><span class=cF0>;
|
|
<a name="l620"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (reloced_arg1_size == </span><span class=cFE>32</span><span class=cF0>)
|
|
<a name="l621"></a> ptr = </span><span class=cF6>"ST_U32_REGS"</span><span class=cF0>;
|
|
<a name="l622"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (reloced_arg1_size == </span><span class=cFE>64</span><span class=cF0>)
|
|
<a name="l623"></a> ptr = </span><span class=cF6>"ST_U64_REGS"</span><span class=cF0>;
|
|
<a name="l624"></a> </span><span class=cF1>if</span><span class=cF0> (ptr)
|
|
<a name="l625"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(reloced_arg1_st, </span><span class=cF5>DefineSub</span><span class=cF7>(</span><span class=cF0>RM1, ptr</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l626"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l627"></a> }
|
|
<a name="l628"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l629"></a>
|
|
<a name="l630"></a> </span><span class=cF1>switch</span><span class=cF0> (arg1)
|
|
<a name="l631"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l632"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_IMM8</span><span class=cF0>:
|
|
<a name="l633"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_UIMM8</span><span class=cF0>:
|
|
<a name="l634"></a> imm = *rip(</span><span class=cF1>U8</span><span class=cF0> *)++;
|
|
<a name="l635"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg1_st, </span><span class=cF6>"%02X"</span><span class=cF0>, imm);
|
|
<a name="l636"></a> </span><span class=cF1>if</span><span class=cF0> (tmpins->opcode[</span><span class=cFE>0</span><span class=cF0>] == </span><span class=cFE>0xCD</span><span class=cF0> && </span><span class=cF7>(</span><span class=cF0>ptr = </span><span class=cF5>DefineSub</span><span class=cF0>(imm, </span><span class=cF6>"ST_INT_NAMES"</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l637"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg1_st, </span><span class=cF6>" %s"</span><span class=cF0>, ptr);
|
|
<a name="l638"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l639"></a>
|
|
<a name="l640"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_IMM16</span><span class=cF0>:
|
|
<a name="l641"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_UIMM16</span><span class=cF0>:
|
|
<a name="l642"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg1_st, </span><span class=cF6>"%04X"</span><span class=cF0>, *rip</span><span class=cF7>(</span><span class=cF9>U16</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>++);
|
|
<a name="l643"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l644"></a>
|
|
<a name="l645"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_IMM32</span><span class=cF0>:
|
|
<a name="l646"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_UIMM32</span><span class=cF0>:
|
|
<a name="l647"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg1_st, </span><span class=cF6>"%08X"</span><span class=cF0>, *rip</span><span class=cF7>(</span><span class=cF9>U32</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>++);
|
|
<a name="l648"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l649"></a>
|
|
<a name="l650"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_IMM64</span><span class=cF0>:
|
|
<a name="l651"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_UIMM64</span><span class=cF0>:
|
|
<a name="l652"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg1_st, </span><span class=cF6>"%016X"</span><span class=cF0>, *rip</span><span class=cF7>(</span><span class=cF9>I64</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>++);
|
|
<a name="l653"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l654"></a> </span><span class=cF1>start</span><span class=cF0>:
|
|
<a name="l655"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_REL8</span><span class=cF0>:
|
|
<a name="l656"></a> disp = *rip(</span><span class=cF1>I8</span><span class=cF0> *)++;
|
|
<a name="l657"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l658"></a>
|
|
<a name="l659"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_REL16</span><span class=cF0>:
|
|
<a name="l660"></a> disp = *rip(</span><span class=cF9>I16</span><span class=cF0> *)++;
|
|
<a name="l661"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l662"></a>
|
|
<a name="l663"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_REL32</span><span class=cF0>:
|
|
<a name="l664"></a> disp = *rip(</span><span class=cF9>I32</span><span class=cF0> *)++;
|
|
<a name="l665"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l666"></a> </span><span class=cF1>end</span><span class=cF0>:
|
|
<a name="l667"></a> disp += rip;
|
|
<a name="l668"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>IsDebugMode</span><span class=cF0>)
|
|
<a name="l669"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg1_st, </span><span class=cF6>"%p "</span><span class=cF0>, disp);
|
|
<a name="l670"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>PutSrcLink</span><span class=cF7>(</span><span class=cF0>disp, </span><span class=cFE>512</span><span class=cF0>, buf2</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l671"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg1_st, </span><span class=cF6>"%s "</span><span class=cF0>, buf2);
|
|
<a name="l672"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l673"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg1_st, </span><span class=cF6>"%P "</span><span class=cF0>, disp);
|
|
<a name="l674"></a> </span><span class=cF1>if</span><span class=cF0> (_jmp_dst)
|
|
<a name="l675"></a> *_jmp_dst = disp;
|
|
<a name="l676"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l677"></a>
|
|
<a name="l678"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_MOFFS8</span><span class=cF0>...</span><span class=cF3>ARGT_MOFFS64</span><span class=cF0>:
|
|
<a name="l679"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg1_st, seg_overrides);
|
|
<a name="l680"></a> </span><span class=cF1>if</span><span class=cF0> (arg1_size == </span><span class=cFE>8</span><span class=cF0>)
|
|
<a name="l681"></a> disp = *rip(</span><span class=cF1>U8</span><span class=cF0> *)++;
|
|
<a name="l682"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (opadd == </span><span class=cFE>16</span><span class=cF0>)
|
|
<a name="l683"></a> disp = *rip(</span><span class=cF9>U16</span><span class=cF0> *)++;
|
|
<a name="l684"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l685"></a> disp = *rip(</span><span class=cF9>U32</span><span class=cF0> *)++;
|
|
<a name="l686"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg1_st, </span><span class=cF6>"[%X]"</span><span class=cF0>,disp);
|
|
<a name="l687"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l688"></a>
|
|
<a name="l689"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_AL</span><span class=cF0> ... </span><span class=cF3>ARGT_DX</span><span class=cF0>:
|
|
<a name="l690"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_SS</span><span class=cF0> ... </span><span class=cF3>ARGT_ST0</span><span class=cF0>:
|
|
<a name="l691"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg1_st, </span><span class=cF6>"%z"</span><span class=cF0>, arg1 - </span><span class=cF3>ARGT_AL</span><span class=cF0>, </span><span class=cF6>"AL\0AX\0EAX\0RAX\0CL\0DX\0 \0 \0SS\0DS\0ES\0FS\0GS\0CS\0ST0\0"</span><span class=cF0>);
|
|
<a name="l692"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l693"></a>
|
|
<a name="l694"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_STI</span><span class=cF0>:
|
|
<a name="l695"></a> rip--;
|
|
<a name="l696"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg1_st, </span><span class=cF6>"%Z"</span><span class=cF0>, *rip++ - tmpins->opcode[tmpins->opcode_count - </span><span class=cFE>1</span><span class=cF0>], </span><span class=cF6>"ST_FSTACK_REGS"</span><span class=cF0>);
|
|
<a name="l697"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l698"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l699"></a>
|
|
<a name="l700"></a> </span><span class=cF1>switch</span><span class=cF0> (arg2)
|
|
<a name="l701"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l702"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_IMM8</span><span class=cF0>:
|
|
<a name="l703"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_UIMM8</span><span class=cF0>:
|
|
<a name="l704"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg2_st, </span><span class=cF6>"%02X"</span><span class=cF0>, *rip</span><span class=cF7>(</span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>++);
|
|
<a name="l705"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l706"></a>
|
|
<a name="l707"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_IMM16</span><span class=cF0>:
|
|
<a name="l708"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_UIMM16</span><span class=cF0>:
|
|
<a name="l709"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg2_st, </span><span class=cF6>"%04X"</span><span class=cF0>, *rip</span><span class=cF7>(</span><span class=cF9>U16</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>++);
|
|
<a name="l710"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l711"></a>
|
|
<a name="l712"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_IMM32</span><span class=cF0>:
|
|
<a name="l713"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_UIMM32</span><span class=cF0>:
|
|
<a name="l714"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg2_st, </span><span class=cF6>"%08X"</span><span class=cF0>, *rip</span><span class=cF7>(</span><span class=cF9>U32</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>++);
|
|
<a name="l715"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l716"></a>
|
|
<a name="l717"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_IMM64</span><span class=cF0>:
|
|
<a name="l718"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_UIMM64</span><span class=cF0>:
|
|
<a name="l719"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg2_st, </span><span class=cF6>"%016X"</span><span class=cF0>, *rip</span><span class=cF7>(</span><span class=cF9>I64</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>++);
|
|
<a name="l720"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l721"></a>
|
|
<a name="l722"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_MOFFS8</span><span class=cF0>...</span><span class=cF3>ARGT_MOFFS64</span><span class=cF0>:
|
|
<a name="l723"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg2_st, seg_overrides);
|
|
<a name="l724"></a> </span><span class=cF1>if</span><span class=cF0> (arg2_size == </span><span class=cFE>8</span><span class=cF0>)
|
|
<a name="l725"></a> disp = *rip(</span><span class=cF1>U8</span><span class=cF0> *)++;
|
|
<a name="l726"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (opadd == </span><span class=cFE>16</span><span class=cF0>)
|
|
<a name="l727"></a> disp = *rip(</span><span class=cF9>U16</span><span class=cF0> *)++;
|
|
<a name="l728"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l729"></a> disp = *rip(</span><span class=cF9>U32</span><span class=cF0> *)++;
|
|
<a name="l730"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg2_st, </span><span class=cF6>"[%X]"</span><span class=cF0>, disp);
|
|
<a name="l731"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l732"></a>
|
|
<a name="l733"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_AL</span><span class=cF0> ... </span><span class=cF3>ARGT_DX</span><span class=cF0>:
|
|
<a name="l734"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_SS</span><span class=cF0> ... </span><span class=cF3>ARGT_ST0</span><span class=cF0>:
|
|
<a name="l735"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg2_st, </span><span class=cF6>"%z"</span><span class=cF0>,arg2 - </span><span class=cF3>ARGT_AL</span><span class=cF0>, </span><span class=cF6>"AL\0AX\0EAX\0RAX\0CL\0DX\0 \0 \0SS\0DS\0ES\0FS\0GS\0CS\0ST0\0"</span><span class=cF0>);
|
|
<a name="l736"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l737"></a>
|
|
<a name="l738"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ARGT_STI</span><span class=cF0>:
|
|
<a name="l739"></a> rip--;
|
|
<a name="l740"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(arg2_st, </span><span class=cF6>"%Z"</span><span class=cF0>, *rip++ - tmpins->opcode[tmpins->opcode_count - </span><span class=cFE>1</span><span class=cF0>], </span><span class=cF6>"ST_FSTACK_REGS"</span><span class=cF0>);
|
|
<a name="l741"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l742"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l743"></a> </span><span class=cF1>if</span><span class=cF0> (tmpins->flags & </span><span class=cF3>IEF_ENDING_ZERO</span><span class=cF0>)
|
|
<a name="l744"></a> rip++;
|
|
<a name="l745"></a>
|
|
<a name="l746"></a> </span><span class=cF1>if</span><span class=cF0> (*arg1_st)
|
|
<a name="l747"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(line1, </span><span class=cF6>"\t%s"</span><span class=cF0>, arg1_st);
|
|
<a name="l748"></a> </span><span class=cF1>if</span><span class=cF0> (*arg2_st)
|
|
<a name="l749"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(line1, </span><span class=cF6>",%s"</span><span class=cF0>, arg2_st);
|
|
<a name="l750"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(line1, </span><span class=cF6>"\n"</span><span class=cF0>);
|
|
<a name="l751"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(line2, </span><span class=cF6>"\n"</span><span class=cF0>);
|
|
<a name="l752"></a> </span><span class=cF1>if</span><span class=cF0> (!just_ins)
|
|
<a name="l753"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l754"></a> </span><span class=cF1>for</span><span class=cF0> (i = rip - </span><span class=cF7>(</span><span class=cF0>*_rip</span><span class=cF7>)(</span><span class=cF9>I64</span><span class=cF7>)</span><span class=cF0>; i < </span><span class=cFE>6</span><span class=cF0>; i++)
|
|
<a name="l755"></a> {
|
|
<a name="l756"></a> bin_data_area1[i << </span><span class=cFE>1</span><span class=cF0>] = </span><span class=cF3>CH_SPACE</span><span class=cF0>;
|
|
<a name="l757"></a> bin_data_area1[i << </span><span class=cFE>1</span><span class=cF0> + </span><span class=cFE>1</span><span class=cF0>] = </span><span class=cF3>CH_SPACE</span><span class=cF0>;
|
|
<a name="l758"></a> }
|
|
<a name="l759"></a> </span><span class=cF1>for</span><span class=cF0> (i = rip - </span><span class=cF7>(</span><span class=cF0>*_rip</span><span class=cF7>)(</span><span class=cF9>I64</span><span class=cF7>)</span><span class=cF0>; i < </span><span class=cFE>12</span><span class=cF0>; i++)
|
|
<a name="l760"></a> {
|
|
<a name="l761"></a> bin_data_area2[(i - </span><span class=cFE>6</span><span class=cF0>) << </span><span class=cFE>1</span><span class=cF0>] = </span><span class=cF3>CH_SPACE</span><span class=cF0>;
|
|
<a name="l762"></a> bin_data_area2[(i - </span><span class=cFE>6</span><span class=cF0>) << </span><span class=cFE>1</span><span class=cF0> + </span><span class=cFE>1</span><span class=cF0>] = </span><span class=cF3>CH_SPACE</span><span class=cF0>;
|
|
<a name="l763"></a> }
|
|
<a name="l764"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l765"></a> </span><span class=cF5>StrCopy</span><span class=cF0>(buf, line1);
|
|
<a name="l766"></a> </span><span class=cF1>if</span><span class=cF0> (!just_ins && rip - </span><span class=cF7>(</span><span class=cF0>*_rip</span><span class=cF7>)(</span><span class=cF9>I64</span><span class=cF7>)</span><span class=cF0> > </span><span class=cFE>6</span><span class=cF0>)
|
|
<a name="l767"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(buf, line2);
|
|
<a name="l768"></a> *_rip = rip;
|
|
<a name="l769"></a>}
|
|
<a name="l770"></a>
|
|
<a name="l771"></a></span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF5>U</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *rip, </span><span class=cF9>I64</span><span class=cF0> count=</span><span class=cFE>20</span><span class=cF0>, </span><span class=cF9>I64</span><span class=cF0> seg_size=</span><span class=cFE>64</span><span class=cF0>)
|
|
<a name="l772"></a>{</span><span class=cF2>//Unassembles a num of insts.</span><span class=cF0>
|
|
<a name="l773"></a> </span><span class=cF9>I64</span><span class=cF0> i;
|
|
<a name="l774"></a> </span><span class=cF1>U8</span><span class=cF0> buf[</span><span class=cFE>1024</span><span class=cF0>];
|
|
<a name="l775"></a>
|
|
<a name="l776"></a> </span><span class=cF1>if</span><span class=cF0> (seg_size == </span><span class=cFE>16</span><span class=cF0>)
|
|
<a name="l777"></a> </span><span class=cF5>PrintWarn</span><span class=cF0>(</span><span class=cF6>"16-bit unassembly is not well supported.\n"</span><span class=cF0>);
|
|
<a name="l778"></a> </span><span class=cF6>"$HL,1$"</span><span class=cF0>;
|
|
<a name="l779"></a> </span><span class=cF1>for</span><span class=cF0> (i = </span><span class=cFE>0</span><span class=cF0>; i < count; i++)
|
|
<a name="l780"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l781"></a> </span><span class=cF5>Ui</span><span class=cF0>(buf, &rip, seg_size);
|
|
<a name="l782"></a> </span><span class=cF6>"%s"</span><span class=cF0>, buf;
|
|
<a name="l783"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l784"></a> </span><span class=cF6>"$HL,0$"</span><span class=cF0>;
|
|
<a name="l785"></a>
|
|
<a name="l786"></a> </span><span class=cF1>return</span><span class=cF0> rip;
|
|
<a name="l787"></a>}
|
|
<a name="l788"></a>
|
|
<a name="l789"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>Un</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *rip, </span><span class=cF9>I64</span><span class=cF0> count=</span><span class=cFE>0x80</span><span class=cF0>, </span><span class=cF9>I64</span><span class=cF0> seg_size=</span><span class=cFE>64</span><span class=cF0>)
|
|
<a name="l790"></a>{</span><span class=cF2>//Unassembles a num of bytes</span><span class=cF0>
|
|
<a name="l791"></a> </span><span class=cF9>I64</span><span class=cF0> i = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l792"></a> </span><span class=cF1>U8</span><span class=cF0> buf[</span><span class=cFE>1024</span><span class=cF0>], *end_rip = rip(</span><span class=cF9>I64</span><span class=cF0>) + count;
|
|
<a name="l793"></a>
|
|
<a name="l794"></a> </span><span class=cF1>if</span><span class=cF0> (seg_size == </span><span class=cFE>16</span><span class=cF0>)
|
|
<a name="l795"></a> </span><span class=cF5>PrintWarn</span><span class=cF0>(</span><span class=cF6>"16-bit unassembly is not well supported.\n"</span><span class=cF0>);
|
|
<a name="l796"></a> </span><span class=cF6>"$HL,1$"</span><span class=cF0>;
|
|
<a name="l797"></a> </span><span class=cF1>while</span><span class=cF0> (rip < end_rip)
|
|
<a name="l798"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l799"></a> </span><span class=cF5>Ui</span><span class=cF0>(buf, &rip, seg_size);
|
|
<a name="l800"></a> </span><span class=cF6>"%s"</span><span class=cF0>, buf;
|
|
<a name="l801"></a> i++;
|
|
<a name="l802"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l803"></a> </span><span class=cF6>"$HL,0$"</span><span class=cF0>;
|
|
<a name="l804"></a>
|
|
<a name="l805"></a> </span><span class=cF1>return</span><span class=cF0> i;
|
|
<a name="l806"></a>}
|
|
</span></pre></body>
|
|
</html>
|