Add SSE opcodes MOVQ, PMOVMSKB, MINPS, MAXPS, XORPS, CVTSI2SD, and CVTSD2SI to OpCodes.DD.

Add some comments in OptPass789A.CC.
This commit is contained in:
TomAwezome 2021-10-09 05:00:13 -04:00
parent 9aa9e44ea6
commit dc581ddad2
13 changed files with 7113 additions and 7078 deletions

File diff suppressed because it is too large Load Diff

View File

@ -132,7 +132,7 @@ body {background-color:#1f1f1f;}
<a name="l105"></a> </span><span class=cF1>start</span><span class=cF0>:
<a name="l106"></a> </span><span class=cF1>start</span><span class=cF0>:
<a name="l107"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_ABS_ADDR</span><span class=cF0>:
<a name="l108"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0xB848</span><span class=cF0>);
<a name="l108"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0xB848</span><span class=cF0>); </span><span class=cF2>// MOV U64 RAX, U64</span><span class=cF0>
<a name="l109"></a> </span><span class=cFD>ICU64</span><span class=cF0>(tmpi, tmpi-&gt;ic_data);
<a name="l110"></a> </span><span class=cF1>if</span><span class=cF0> (buf &amp;&amp; cc-&gt;flags &amp; </span><span class=cF3>CCF_AOT_COMPILE</span><span class=cF0> &amp;&amp; !</span><span class=cF7>(</span><span class=cF0>cc-&gt;flags &amp; (</span><span class=cF3>CCF_NO_ABSS</span><span class=cF0> | </span><span class=cF3>CCF_ASM_EXPRESSIONS</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0>)
<a name="l111"></a> {
@ -145,8 +145,8 @@ body {background-color:#1f1f1f;}
<a name="l118"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l119"></a>
<a name="l120"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_HEAP_GLOBAL</span><span class=cF0>:
<a name="l121"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0xB848</span><span class=cF0>);
<a name="l122"></a> </span><span class=cFD>ICU64</span><span class=cF0>(tmpi, </span><span class=cFE>0</span><span class=cF0>);
<a name="l121"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0xB848</span><span class=cF0>); </span><span class=cF2>//</span><span class=cF0>
<a name="l122"></a> </span><span class=cFD>ICU64</span><span class=cF0>(tmpi, </span><span class=cFE>0</span><span class=cF0>); </span><span class=cF2>// MOV U64 RAX, U64 0x0</span><span class=cF0>
<a name="l123"></a> tmphg = tmpi-&gt;ic_data;
<a name="l124"></a> </span><span class=cF1>if</span><span class=cF0> (buf &amp;&amp; cc-&gt;flags &amp; </span><span class=cF3>CCF_AOT_COMPILE</span><span class=cF0> &amp;&amp; !</span><span class=cF7>(</span><span class=cF0>cc-&gt;flags &amp; (</span><span class=cF3>CCF_NO_ABSS</span><span class=cF0> | </span><span class=cF3>CCF_ASM_EXPRESSIONS</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0>)
<a name="l125"></a> {</span><span class=cF2>//TODO:is this necessary--flags?</span><span class=cF0>
@ -173,7 +173,7 @@ body {background-color:#1f1f1f;}
<a name="l146"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l147"></a>
<a name="l148"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_RIP</span><span class=cF0>:
<a name="l149"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0xB848</span><span class=cF0>);
<a name="l149"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0xB848</span><span class=cF0>); </span><span class=cF2>// MOV U64 RAX, U64</span><span class=cF0>
<a name="l150"></a> </span><span class=cFD>ICU64</span><span class=cF0>(tmpi, rip2 + tmpi-&gt;ic_count - </span><span class=cFE>2</span><span class=cF0>);
<a name="l151"></a> </span><span class=cF1>if</span><span class=cF0> (cc-&gt;flags &amp; </span><span class=cF3>CCF_AOT_COMPILE</span><span class=cF0> &amp;&amp; buf &amp;&amp;!</span><span class=cF7>(</span><span class=cF0>cc-&gt;flags &amp; </span><span class=cF3>CCF_NO_ABSS</span><span class=cF7>)</span><span class=cF0>)
<a name="l152"></a> {
@ -388,20 +388,20 @@ body {background-color:#1f1f1f;}
<a name="l361"></a> i = tmpi-&gt;ic_data - (rip2 + </span><span class=cFE>5</span><span class=cF0>);
<a name="l362"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF3>I32_MIN</span><span class=cF0> &lt;= i &lt;= </span><span class=cF3>I32_MAX</span><span class=cF7>)</span><span class=cF0> &amp;&amp; !</span><span class=cF7>(</span><span class=cF0>cc-&gt;flags &amp; </span><span class=cF3>CCF_AOT_COMPILE</span><span class=cF7>)</span><span class=cF0>)
<a name="l363"></a> {
<a name="l364"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0xBB48</span><span class=cF0>);
<a name="l364"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0xBB48</span><span class=cF0>); </span><span class=cF2>// MOV U64 RBX, U64</span><span class=cF0>
<a name="l365"></a> </span><span class=cFD>ICU64</span><span class=cF0>(tmpi, tmpi-&gt;ic_data);
<a name="l366"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0xD3FF</span><span class=cF0>);
<a name="l366"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0xD3FF</span><span class=cF0>); </span><span class=cF2>// CALL U64 RBX</span><span class=cF0>
<a name="l367"></a> }
<a name="l368"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l369"></a> {
<a name="l370"></a> </span><span class=cFD>ICU8</span><span class=cF0>(tmpi, </span><span class=cFE>0xE8</span><span class=cF0>);
<a name="l370"></a> </span><span class=cFD>ICU8</span><span class=cF0>(tmpi, </span><span class=cFE>0xE8</span><span class=cF0>); </span><span class=cF2>// CALL</span><span class=cF0>
<a name="l371"></a> </span><span class=cFD>ICU32</span><span class=cF0>(tmpi, i);
<a name="l372"></a> }
<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>IC_CALL_EXTERN</span><span class=cF0>: </span><span class=cF2>//Only for static modules</span><span class=cF0>
<a name="l376"></a> </span><span class=cFD>ICU8</span><span class=cF0>(tmpi, </span><span class=cFE>0xE8</span><span class=cF0>);
<a name="l377"></a> </span><span class=cFD>ICU32</span><span class=cF0>(tmpi, </span><span class=cFE>0</span><span class=cF0>);
<a name="l376"></a> </span><span class=cFD>ICU8</span><span class=cF0>(tmpi, </span><span class=cFE>0xE8</span><span class=cF0>); </span><span class=cF2>//</span><span class=cF0>
<a name="l377"></a> </span><span class=cFD>ICU32</span><span class=cF0>(tmpi, </span><span class=cFE>0</span><span class=cF0>); </span><span class=cF2>// CALL I32 0x5</span><span class=cF0>
<a name="l378"></a> </span><span class=cF1>if</span><span class=cF0> (buf)
<a name="l379"></a> {
<a name="l380"></a> tmpf = tmpi-&gt;ic_data;
@ -413,11 +413,11 @@ body {background-color:#1f1f1f;}
<a name="l386"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l387"></a>
<a name="l388"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_CALL_INDIRECT2</span><span class=cF0>:
<a name="l389"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0xBB48</span><span class=cF0>);
<a name="l389"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0xBB48</span><span class=cF0>); </span><span class=cF2>// MOV U64 RBX, U64</span><span class=cF0>
<a name="l390"></a> </span><span class=cF1>if</span><span class=cF0> (cc-&gt;flags &amp; </span><span class=cF3>CCF_AOT_COMPILE</span><span class=cF0>)
<a name="l391"></a> i = rip2 + tmpi-&gt;ic_count;
<a name="l392"></a> </span><span class=cFD>ICU64</span><span class=cF0>(tmpi, tmpi-&gt;ic_data);
<a name="l393"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0x13FF</span><span class=cF0>);
<a name="l393"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0x13FF</span><span class=cF0>); </span><span class=cF2>// CALL U64 [RBX]</span><span class=cF0>
<a name="l394"></a> </span><span class=cF1>if</span><span class=cF0> (buf &amp;&amp; cc-&gt;flags &amp; </span><span class=cF3>CCF_AOT_COMPILE</span><span class=cF0> &amp;&amp; !</span><span class=cF7>(</span><span class=cF0>cc-&gt;flags &amp; </span><span class=cF3>CCF_NO_ABSS</span><span class=cF7>)</span><span class=cF0>)
<a name="l395"></a> {
<a name="l396"></a> tmpa = </span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CAOTAbsAddr</span><span class=cF7>)</span><span class=cF0>);
@ -431,8 +431,8 @@ body {background-color:#1f1f1f;}
<a name="l404"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_CALL_IMPORT</span><span class=cF0>:
<a name="l405"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>OptionGet</span><span class=cF7>(</span><span class=cF3>OPTf_USE_IMM64</span><span class=cF7>)</span><span class=cF0>)
<a name="l406"></a> {
<a name="l407"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0xBB48</span><span class=cF0>);
<a name="l408"></a> </span><span class=cFD>ICU64</span><span class=cF0>(tmpi, </span><span class=cFE>0</span><span class=cF0>);
<a name="l407"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0xBB48</span><span class=cF0>); </span><span class=cF2>// </span><span class=cF0>
<a name="l408"></a> </span><span class=cFD>ICU64</span><span class=cF0>(tmpi, </span><span class=cFE>0</span><span class=cF0>); </span><span class=cF2>// MOV U64 RBX, U64 0x0</span><span class=cF0>
<a name="l409"></a> </span><span class=cF1>if</span><span class=cF0> (buf)
<a name="l410"></a> </span><span class=cF7>{</span><span class=cF0>
<a name="l411"></a> tmpf = tmpi-&gt;ic_data;
@ -442,12 +442,12 @@ body {background-color:#1f1f1f;}
<a name="l415"></a> tmpie-&gt;next = tmpf-&gt;ie_list;
<a name="l416"></a> tmpf-&gt;ie_list = tmpie;
<a name="l417"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l418"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0xD3FF</span><span class=cF0>);
<a name="l418"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0xD3FF</span><span class=cF0>); </span><span class=cF2>// CALL U64 RBX</span><span class=cF0>
<a name="l419"></a> }
<a name="l420"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l421"></a> {
<a name="l422"></a> </span><span class=cFD>ICU8</span><span class=cF0>(tmpi, </span><span class=cFE>0xE8</span><span class=cF0>);
<a name="l423"></a> </span><span class=cFD>ICU32</span><span class=cF0>(tmpi, </span><span class=cFE>0</span><span class=cF0>);
<a name="l422"></a> </span><span class=cFD>ICU8</span><span class=cF0>(tmpi, </span><span class=cFE>0xE8</span><span class=cF0>); </span><span class=cF2>//</span><span class=cF0>
<a name="l423"></a> </span><span class=cFD>ICU32</span><span class=cF0>(tmpi, </span><span class=cFE>0</span><span class=cF0>); </span><span class=cF2>// CALL I32 0x5</span><span class=cF0>
<a name="l424"></a> </span><span class=cF1>if</span><span class=cF0> (buf)
<a name="l425"></a> </span><span class=cF7>{</span><span class=cF0>
<a name="l426"></a> tmpf = tmpi-&gt;ic_data;
@ -488,31 +488,31 @@ body {background-color:#1f1f1f;}
<a name="l461"></a> {
<a name="l462"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&amp;cc-&gt;htc.fun-&gt;flags, </span><span class=cF3>Ff_HASERRCODE</span><span class=cF7>)</span><span class=cF0>)
<a name="l463"></a> </span><span class=cFD>ICAddRSP</span><span class=cF0>(tmpi, </span><span class=cFE>8</span><span class=cF0>);
<a name="l464"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0xCF48</span><span class=cF0>);
<a name="l464"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0xCF48</span><span class=cF0>); </span><span class=cF2>// IRET</span><span class=cF0>
<a name="l465"></a> }
<a name="l466"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (cc-&gt;htc.fun &amp;&amp; cc-&gt;htc.fun-&gt;arg_count &amp;&amp;
<a name="l467"></a> </span><span class=cF7>(</span><span class=cF5>Bt</span><span class=cF0>(&amp;cc-&gt;htc.fun-&gt;flags, </span><span class=cF3>Ff_RET1</span><span class=cF0>) || </span><span class=cF5>Bt</span><span class=cF0>(&amp;cc-&gt;htc.fun-&gt;flags, </span><span class=cF3>Ff_ARGPOP</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0> &amp;&amp;
<a name="l468"></a> !</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&amp;cc-&gt;htc.fun-&gt;flags, </span><span class=cF3>Ff_NOARGPOP</span><span class=cF7>)</span><span class=cF0>)
<a name="l469"></a> {
<a name="l470"></a> </span><span class=cFD>ICU8</span><span class=cF0>(tmpi, </span><span class=cFE>0xC2</span><span class=cF0>);
<a name="l470"></a> </span><span class=cFD>ICU8</span><span class=cF0>(tmpi, </span><span class=cFE>0xC2</span><span class=cF0>); </span><span class=cF2>// RET1 I16</span><span class=cF0>
<a name="l471"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, cc-&gt;htc.fun-&gt;arg_count &lt;&lt; </span><span class=cFE>3</span><span class=cF0>);
<a name="l472"></a> }
<a name="l473"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l474"></a> </span><span class=cFD>ICU8</span><span class=cF0>(tmpi, </span><span class=cFE>0xC3</span><span class=cF0>);
<a name="l474"></a> </span><span class=cFD>ICU8</span><span class=cF0>(tmpi, </span><span class=cFE>0xC3</span><span class=cF0>); </span><span class=cF2>// RET</span><span class=cF0>
<a name="l475"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l476"></a>
<a name="l477"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_RET</span><span class=cF0>:
<a name="l478"></a> </span><span class=cFD>ICU8</span><span class=cF0>(tmpi, </span><span class=cFE>0xC3</span><span class=cF0>);
<a name="l478"></a> </span><span class=cFD>ICU8</span><span class=cF0>(tmpi, </span><span class=cFE>0xC3</span><span class=cF0>); </span><span class=cF2>// RET</span><span class=cF0>
<a name="l479"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l480"></a>
<a name="l481"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_FS</span><span class=cF0>:
<a name="l482"></a> </span><span class=cFD>ICZero</span><span class=cF0>(tmpi, </span><span class=cF3>REG_RAX</span><span class=cF0>);
<a name="l483"></a> </span><span class=cFD>ICU32</span><span class=cF0>(tmpi, </span><span class=cFE>0x8B4864</span><span class=cF0>);
<a name="l483"></a> </span><span class=cFD>ICU32</span><span class=cF0>(tmpi, </span><span class=cFE>0x8B4864</span><span class=cF0>); </span><span class=cF2>// MOV U64 RBP, U64 FS:RSP</span><span class=cF0>
<a name="l484"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l485"></a>
<a name="l486"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_GS</span><span class=cF0>:
<a name="l487"></a> </span><span class=cFD>ICZero</span><span class=cF0>(tmpi, </span><span class=cF3>REG_RAX</span><span class=cF0>);
<a name="l488"></a> </span><span class=cFD>ICU32</span><span class=cF0>(tmpi, </span><span class=cFE>0x8B4865</span><span class=cF0>);
<a name="l488"></a> </span><span class=cFD>ICU32</span><span class=cF0>(tmpi, </span><span class=cFE>0x8B4865</span><span class=cF0>); </span><span class=cF2>// MOV U64 RBP, U64 GS:RSP</span><span class=cF0>
<a name="l489"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l490"></a>
<a name="l491"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_MOV_FS</span><span class=cF0>:
@ -831,7 +831,7 @@ body {background-color:#1f1f1f;}
<a name="l804"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l805"></a>
<a name="l806"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_ENTER</span><span class=cF0>:
<a name="l807"></a> </span><span class=cFD>ICU32</span><span class=cF0>(tmpi, </span><span class=cFE>0xEC8B4855</span><span class=cF0>);
<a name="l807"></a> </span><span class=cFD>ICU32</span><span class=cF0>(tmpi, </span><span class=cFE>0xEC8B4855</span><span class=cF0>); </span><span class=cF2>// PUSH U64 RBP // MOV U64 RBP, U64 RSP</span><span class=cF0>
<a name="l808"></a> </span><span class=cF1>if</span><span class=cF0> (tmpi-&gt;ic_data)
<a name="l809"></a> </span><span class=cFD>ICAddRSP</span><span class=cF0>(tmpi, -tmpi-&gt;ic_data, </span><span class=cF3>FALSE</span><span class=cF0>);
<a name="l810"></a> </span><span class=cF1>if</span><span class=cF0> (cc-&gt;htc.fun)
@ -862,12 +862,12 @@ body {background-color:#1f1f1f;}
<a name="l835"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_CALL_INDIRECT</span><span class=cF0>:
<a name="l836"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF3>I8_MIN</span><span class=cF0> &lt;= tmpi-&gt;ic_data &lt;= </span><span class=cF3>I8_MAX</span><span class=cF0>)
<a name="l837"></a> {
<a name="l838"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0x2454FF</span><span class=cF0>); </span><span class=cF2>//CALL disp[RSP]</span><span class=cF0>
<a name="l838"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0x2454FF</span><span class=cF0>); </span><span class=cF2>// CALL disp[RSP]</span><span class=cF0>
<a name="l839"></a> </span><span class=cFD>ICU8</span><span class=cF0>(tmpi, tmpi-&gt;ic_data);
<a name="l840"></a> }
<a name="l841"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l842"></a> {
<a name="l843"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0x2494FF</span><span class=cF0>); </span><span class=cF2>//CALL disp[RSP]</span><span class=cF0>
<a name="l843"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0x2494FF</span><span class=cF0>); </span><span class=cF2>// CALL disp[RSP]</span><span class=cF0>
<a name="l844"></a> </span><span class=cFD>ICU32</span><span class=cF0>(tmpi, tmpi-&gt;ic_data);
<a name="l845"></a> }
<a name="l846"></a> </span><span class=cF1>break</span><span class=cF0>;
@ -877,17 +877,17 @@ body {background-color:#1f1f1f;}
<a name="l850"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l851"></a>
<a name="l852"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_POP</span><span class=cF0>:
<a name="l853"></a> </span><span class=cFD>ICU8</span><span class=cF0>(tmpi, </span><span class=cFE>0x58</span><span class=cF0>);
<a name="l853"></a> </span><span class=cFD>ICU8</span><span class=cF0>(tmpi, </span><span class=cFE>0x58</span><span class=cF0>); </span><span class=cF2>// POP U64 RAX</span><span class=cF0>
<a name="l854"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l855"></a>
<a name="l856"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_INVLPG</span><span class=cF0>:
<a name="l857"></a> </span><span class=cFD>ICMov</span><span class=cF0>(tmpi, </span><span class=cF3>MDF_REG</span><span class=cF0> + </span><span class=cF3>RT_I64</span><span class=cF0>, </span><span class=cF3>REG_RAX</span><span class=cF0>, </span><span class=cFE>0</span><span class=cF0>, tmpi-&gt;arg1.type, tmpi-&gt;arg1.</span><span class=cF1>reg</span><span class=cF0>, tmpi-&gt;arg1.disp, rip2);
<a name="l858"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0x38010F</span><span class=cF0>);
<a name="l858"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0x38010F</span><span class=cF0>); </span><span class=cF2>// INVLPG U8 [RAX]</span><span class=cF0>
<a name="l859"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l860"></a>
<a name="l861"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_CLFLUSH</span><span class=cF0>:
<a name="l862"></a> </span><span class=cFD>ICMov</span><span class=cF0>(tmpi, </span><span class=cF3>MDF_REG</span><span class=cF0> + </span><span class=cF3>RT_I64</span><span class=cF0>, </span><span class=cF3>REG_RAX</span><span class=cF0>, </span><span class=cFE>0</span><span class=cF0>, tmpi-&gt;arg1.type, tmpi-&gt;arg1.</span><span class=cF1>reg</span><span class=cF0>, tmpi-&gt;arg1.disp, rip2);
<a name="l863"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0x38AE0F</span><span class=cF0>);
<a name="l863"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0x38AE0F</span><span class=cF0>); </span><span class=cF2>// CLFLUSH U8 [RAX]</span><span class=cF0>
<a name="l864"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l865"></a>
<a name="l866"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_RFLAGS_GET</span><span class=cF0>:
@ -896,8 +896,8 @@ body {background-color:#1f1f1f;}
<a name="l869"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l870"></a>
<a name="l871"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_CARRY</span><span class=cF0>:
<a name="l872"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0xC0920F</span><span class=cF0>); </span><span class=cF2>//SETC AL</span><span class=cF0>
<a name="l873"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0x01E083</span><span class=cF0>); </span><span class=cF2>//AND EAX,1</span><span class=cF0>
<a name="l872"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0xC0920F</span><span class=cF0>); </span><span class=cF2>// SETB U8 AL</span><span class=cF0>
<a name="l873"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0x01E083</span><span class=cF0>); </span><span class=cF2>// AND U32 EAX, I8 0x01</span><span class=cF0>
<a name="l874"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l875"></a>
<a name="l876"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_RDTSC</span><span class=cF0>:
@ -955,22 +955,22 @@ body {background-color:#1f1f1f;}
<a name="l928"></a>
<a name="l929"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_BSF</span><span class=cF0>:
<a name="l930"></a> </span><span class=cFD>ICMov</span><span class=cF0>(tmpi, </span><span class=cF3>MDF_REG</span><span class=cF0> + </span><span class=cF3>RT_I64</span><span class=cF0>, </span><span class=cF3>REG_RAX</span><span class=cF0>, </span><span class=cFE>0</span><span class=cF0>, tmpi-&gt;arg1.type, tmpi-&gt;arg1.</span><span class=cF1>reg</span><span class=cF0>, tmpi-&gt;arg1.disp, rip2);
<a name="l931"></a> </span><span class=cFD>ICU32</span><span class=cF0>(tmpi, </span><span class=cFE>0xC0BC0F48</span><span class=cF0>);
<a name="l932"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0x0375</span><span class=cF0>);
<a name="l933"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0xD0F748</span><span class=cF0>);
<a name="l931"></a> </span><span class=cFD>ICU32</span><span class=cF0>(tmpi, </span><span class=cFE>0xC0BC0F48</span><span class=cF0>); </span><span class=cF2>// BSF U64 RAX, U64 RAX</span><span class=cF0>
<a name="l932"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0x0375</span><span class=cF0>); </span><span class=cF2>// JNE I8 0x9</span><span class=cF0>
<a name="l933"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0xD0F748</span><span class=cF0>); </span><span class=cF2>// NOT U64 RAX</span><span class=cF0>
<a name="l934"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l935"></a>
<a name="l936"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_BSR</span><span class=cF0>:
<a name="l937"></a> </span><span class=cFD>ICMov</span><span class=cF0>(tmpi, </span><span class=cF3>MDF_REG</span><span class=cF0> + </span><span class=cF3>RT_I64</span><span class=cF0>, </span><span class=cF3>REG_RAX</span><span class=cF0>, </span><span class=cFE>0</span><span class=cF0>, tmpi-&gt;arg1.type, tmpi-&gt;arg1.</span><span class=cF1>reg</span><span class=cF0>, tmpi-&gt;arg1.disp, rip2);
<a name="l938"></a> </span><span class=cFD>ICU32</span><span class=cF0>(tmpi, </span><span class=cFE>0xC0BD0F48</span><span class=cF0>);
<a name="l939"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0x0375</span><span class=cF0>);
<a name="l940"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0xD0F748</span><span class=cF0>);
<a name="l938"></a> </span><span class=cFD>ICU32</span><span class=cF0>(tmpi, </span><span class=cFE>0xC0BD0F48</span><span class=cF0>); </span><span class=cF2>// BSR U64 RAX, U64 RAX</span><span class=cF0>
<a name="l939"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0x0375</span><span class=cF0>); </span><span class=cF2>// JNE I8 0x9</span><span class=cF0>
<a name="l940"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0xD0F748</span><span class=cF0>); </span><span class=cF2>// NOT U64 RAX</span><span class=cF0>
<a name="l941"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l942"></a>
<a name="l943"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_POPCNT</span><span class=cF0>:
<a name="l944"></a> </span><span class=cFD>ICMov</span><span class=cF0>(tmpi, </span><span class=cF3>MDF_REG</span><span class=cF0> + </span><span class=cF3>RT_I64</span><span class=cF0>, </span><span class=cF3>REG_RAX</span><span class=cF0>, </span><span class=cFE>0</span><span class=cF0>, tmpi-&gt;arg1.type, tmpi-&gt;arg1.</span><span class=cF1>reg</span><span class=cF0>, tmpi-&gt;arg1.disp, rip2);
<a name="l945"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0xF348</span><span class=cF0>);
<a name="l946"></a> </span><span class=cFD>ICU32</span><span class=cF0>(tmpi, </span><span class=cFE>0xC0B80F48</span><span class=cF0>);
<a name="l945"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0xF348</span><span class=cF0>); </span><span class=cF2>// </span><span class=cF0>
<a name="l946"></a> </span><span class=cFD>ICU32</span><span class=cF0>(tmpi, </span><span class=cFE>0xC0B80F48</span><span class=cF0>); </span><span class=cF2>// POPCNT U64 RAX, U64 RAX </span><span class=cF0>
<a name="l947"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l948"></a>
<a name="l949"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_SIGN_I64</span><span class=cF0>:
@ -1024,9 +1024,9 @@ body {background-color:#1f1f1f;}
<a name="l997"></a>
<a name="l998"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_ABS_I64</span><span class=cF0>:
<a name="l999"></a> </span><span class=cFD>ICMov</span><span class=cF0>(tmpi, </span><span class=cF3>MDF_REG</span><span class=cF0> + </span><span class=cF3>RT_I64</span><span class=cF0>, </span><span class=cF3>REG_RAX</span><span class=cF0>, </span><span class=cFE>0</span><span class=cF0>, tmpi-&gt;arg1.type, tmpi-&gt;arg1.</span><span class=cF1>reg</span><span class=cF0>, tmpi-&gt;arg1.disp, rip2);
<a name="l1000"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0xC08548</span><span class=cF0>);
<a name="l1001"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0x0379</span><span class=cF0>);
<a name="l1002"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0xD8F748</span><span class=cF0>);
<a name="l1000"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0xC08548</span><span class=cF0>); </span><span class=cF2>// TEST U64 RAX, U64 RAX</span><span class=cF0>
<a name="l1001"></a> </span><span class=cFD>ICU16</span><span class=cF0>(tmpi, </span><span class=cFE>0x0379</span><span class=cF0>); </span><span class=cF2>// JNS I8 0x8</span><span class=cF0>
<a name="l1002"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0xD8F748</span><span class=cF0>); </span><span class=cF2>// NEG U64 RAX</span><span class=cF0>
<a name="l1003"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l1004"></a>
<a name="l1005"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IC_MIN_I64</span><span class=cF0>:
@ -1250,8 +1250,8 @@ body {background-color:#1f1f1f;}
<a name="l1223"></a> {
<a name="l1224"></a> </span><span class=cF1>if</span><span class=cF0> (tmpi-&gt;ic_code == </span><span class=cF3>IC_PUSH_CMP</span><span class=cF0>)
<a name="l1225"></a> </span><span class=cF7>{</span><span class=cF0>
<a name="l1226"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0x242CDF</span><span class=cF0>); </span><span class=cF2>//FILD U64 [RSP]</span><span class=cF0>
<a name="l1227"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0x241CDD</span><span class=cF0>); </span><span class=cF2>//FSTP U64 [RSP]</span><span class=cF0>
<a name="l1226"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0x242CDF</span><span class=cF0>); </span><span class=cF2>// FILD U64 [RSP]</span><span class=cF0>
<a name="l1227"></a> </span><span class=cFD>ICU24</span><span class=cF0>(tmpi, </span><span class=cFE>0x241CDD</span><span class=cF0>); </span><span class=cF2>// FSTP U64 [RSP]</span><span class=cF0>
<a name="l1228"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l1229"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l1230"></a> </span><span class=cF7>{</span><span class=cF0>

View File

@ -36,7 +36,7 @@ body {background-color:#1f1f1f;}
<a name="l9"></a> </span><span class=cF5>WinToTop</span><span class=cF0>;
<a name="l10"></a> </span><span class=cF5>WinZBufUpdate</span><span class=cF0>;
<a name="l11"></a> </span><span class=cF5>Dir</span><span class=cF0>;
<a name="l12"></a> </span><span class=cF6>&quot;\n94,826 LOC, &quot;</span><span class=cF0>;
<a name="l12"></a> </span><span class=cF6>&quot;\n94,836 LOC, &quot;</span><span class=cF0>;
<a name="l13"></a> </span><span class=cF6>&quot;%d MB RAM, &quot;</span><span class=cF0>, </span><span class=cF5>MemBIOSTotal</span><span class=cF0> / </span><span class=cFE>1024</span><span class=cF0> / </span><span class=cFE>1024</span><span class=cF0>;
<a name="l14"></a> </span><span class=cF5>CPURep</span><span class=cF0>;
<a name="l15"></a> </span><span class=cF6>&quot;\n&quot;</span><span class=cF0>;

View File

@ -163,7 +163,7 @@ body {background-color:#1f1f1f;}
<a name="l136"></a>
<a name="l137"></a></span><span class=cF9>I64</span><span class=cF0> Parse(</span><span class=cF1>U8</span><span class=cF0> **_src, </span><span class=cF1>U8</span><span class=cF0> **_dst)
<a name="l138"></a>{</span><span class=cF2>//See </span><a href="https://zeal-operating-system.github.io/ZealOS/Compiler/ParseExp.CC.html#l302"><span class=cF4>ParseExpression</span></a><span class=cF2>().</span><span class=cF0>
<a name="l139"></a></span><span class=cF2>//See </span><a href="https://zeal-operating-system.github.io/ZealOS/Compiler/OpCodes.DD.html#l760"><span class=cF4>Opcode Formats</span></a><span class=cF2> for details on asm insts.</span><span class=cF0>
<a name="l139"></a></span><span class=cF2>//See </span><a href="https://zeal-operating-system.github.io/ZealOS/Compiler/OpCodes.DD.html#l770"><span class=cF4>Opcode Formats</span></a><span class=cF2> for details on asm insts.</span><span class=cF0>
<a name="l140"></a> </span><span class=cF9>I64</span><span class=cF0> i;
<a name="l141"></a> </span><span class=cF1>U8</span><span class=cF0> *dst = *_dst;
<a name="l142"></a>

File diff suppressed because it is too large Load Diff

View File

@ -38,7 +38,7 @@ body {background-color:#1f1f1f;}
<a name="l11"></a>* Low line count and code complexity is the highest good, so it is easy to learn the whole thing. Users should see the light
<a name="l12"></a>at the end of the tunnel. One file system, for example, is better than many file systems.
<a name="l13"></a>
<a name="l14"></a>* There is a limit of 100,000 lines of code for all time, not including applications and demos. Currently, there are 94,826
<a name="l14"></a>* There is a limit of 100,000 lines of code for all time, not including applications and demos. Currently, there are 94,836
<a name="l15"></a>lines of code. </span><span class=cF4>3rd party libraries are banned</span><span class=cF0> because they circumvent the intent of this limit. The vision is a Commodore 64
<a name="l16"></a>ROM -- a fixed core API that is the only dependency of applications. Dependency on components and libraries creates a hell
<a name="l17"></a>that is no longer blissful.

View File

@ -37,7 +37,7 @@ body {background-color:#1f1f1f;}
<a name="l10"></a>
<a name="l11"></a>Simplicity is a goal to </span><a href="https://zeal-operating-system.github.io/ZealOS/Doc/Strategy.DD.html#l1"><span class=cF4>keep the line count down</span></a><span class=cF0>, so it's easy to tinker with. As it turns-out, simplicity makes it faster in
<a name="l12"></a>some ways, too. It never switches privilege levels, never changes address maps, tends to load whole contiguous files and
<a name="l13"></a>other, similar things which boost speed. It's only 94,826 lines of code including the kernel, the 64-bit compiler, the
<a name="l13"></a>other, similar things which boost speed. It's only 94,836 lines of code including the kernel, the 64-bit compiler, the
<a name="l14"></a>graphics library and all the tools. More importantly, it's designed to keep the user's line count down -- you can do a </span><span class=cF4>
<a name="l15"></a></span><a href="https://zeal-operating-system.github.io/ZealOS/Doc/HelloWorld.DD.html#l1"><span class=cF4>Hello World</span></a><span class=cF0> application in one line of code and can put graphics on the screen with a three line program!
<a name="l16"></a>

File diff suppressed because it is too large Load Diff

View File

@ -273,6 +273,11 @@ OPCODE MOVSS
OPCODE MOVSD_SSE
0xF2 0x0F 0x10,/R XMM XMM64
0xF2 0x0F 0x11,/R XMM64 XMM;
OPCODE MOVQ
0x66 0x48 0x0F 0x6E,/R `XMM RM64
0x66 0x48 0x0F 0x7E,/R `RM64 XMM
0xF3 0x0F 0x7E,/R XMM XMM64;
OPCODE PMOVMSKB 0x66 0x0F 0xD7,/R `R64 XMM;
OPCODE MOVNTDQ 0x66 0x0F 0xE7,/R XMM128 XMM;
OPCODE ADDSS 0xF3 0x0F 0x58,/R XMM XMM32;
OPCODE SUBSS 0xF3 0x0F 0x5C,/R XMM XMM32;
@ -286,6 +291,9 @@ OPCODE ADDPS 0x0F 0x58,/R XMM XMM128;
OPCODE SUBPS 0x0F 0x5C,/R XMM XMM128;
OPCODE MULPS 0x0F 0x59,/R XMM XMM128;
OPCODE DIVPS 0x0F 0x5E,/R XMM XMM128;
OPCODE MINPS 0x0F 0x5D,/R XMM XMM128;
OPCODE MAXPS 0x0F 0x5F,/R XMM XMM128;
OPCODE XORPS 0x0F 0x57,/R XMM XMM128;
OPCODE ADDPD 0x66 0x0F 0x58,/R XMM XMM128;
OPCODE SUBPD 0x66 0x0F 0x5C,/R XMM XMM128;
OPCODE MULPD 0x66 0x0F 0x59,/R XMM XMM128;
@ -295,6 +303,8 @@ OPCODE SQRTSS 0xF3 0x0F 0x51,/R XMM XMM32;
OPCODE SQRTSD 0xF2 0x0F 0x51,/R XMM XMM64;
OPCODE CVTSD2SS 0xF2 0x0F 0x5A,/R XMM XMM64;
OPCODE CVTSS2SD 0xF3 0x0F 0x5A,/R XMM XMM32;
OPCODE CVTSI2SD 0xF2 0x48 0x0F 0x2A,/R `XMM RM64;
OPCODE CVTSD2SI 0xF2 0x48 0x0F 0x2D,/R `R64 XMM64;
OPCODE CVTPD2PS 0x0F 0x5A,/R 16 XMM XMM128;
OPCODE CVTPS2PD 0x0F 0x5A,/R 16 XMM XMM128;
OPCODE MOVLHPS 0x0F 0x16,/R XMM XMM128;

View File

@ -105,7 +105,7 @@ cc->pass == 10 is final pass, code is placed into buf.
start:
start:
case IC_ABS_ADDR:
ICU16(tmpi, 0xB848);
ICU16(tmpi, 0xB848); // MOV U64 RAX, U64
ICU64(tmpi, tmpi->ic_data);
if (buf && cc->flags & CCF_AOT_COMPILE && !(cc->flags & (CCF_NO_ABSS | CCF_ASM_EXPRESSIONS)))
{
@ -118,8 +118,8 @@ cc->pass == 10 is final pass, code is placed into buf.
break;
case IC_HEAP_GLOBAL:
ICU16(tmpi, 0xB848);
ICU64(tmpi, 0);
ICU16(tmpi, 0xB848); //
ICU64(tmpi, 0); // MOV U64 RAX, U64 0x0
tmphg = tmpi->ic_data;
if (buf && cc->flags & CCF_AOT_COMPILE && !(cc->flags & (CCF_NO_ABSS | CCF_ASM_EXPRESSIONS)))
{//TODO:is this necessary--flags?
@ -146,7 +146,7 @@ cc->pass == 10 is final pass, code is placed into buf.
break;
case IC_RIP:
ICU16(tmpi, 0xB848);
ICU16(tmpi, 0xB848); // MOV U64 RAX, U64
ICU64(tmpi, rip2 + tmpi->ic_count - 2);
if (cc->flags & CCF_AOT_COMPILE && buf &&!(cc->flags & CCF_NO_ABSS))
{
@ -361,20 +361,20 @@ cc->pass == 10 is final pass, code is placed into buf.
i = tmpi->ic_data - (rip2 + 5);
if (!(I32_MIN <= i <= I32_MAX) && !(cc->flags & CCF_AOT_COMPILE))
{
ICU16(tmpi, 0xBB48);
ICU16(tmpi, 0xBB48); // MOV U64 RBX, U64
ICU64(tmpi, tmpi->ic_data);
ICU16(tmpi, 0xD3FF);
ICU16(tmpi, 0xD3FF); // CALL U64 RBX
}
else
{
ICU8(tmpi, 0xE8);
ICU8(tmpi, 0xE8); // CALL
ICU32(tmpi, i);
}
break;
case IC_CALL_EXTERN: //Only for static modules
ICU8(tmpi, 0xE8);
ICU32(tmpi, 0);
ICU8(tmpi, 0xE8); //
ICU32(tmpi, 0); // CALL I32 0x5
if (buf)
{
tmpf = tmpi->ic_data;
@ -386,11 +386,11 @@ cc->pass == 10 is final pass, code is placed into buf.
break;
case IC_CALL_INDIRECT2:
ICU16(tmpi, 0xBB48);
ICU16(tmpi, 0xBB48); // MOV U64 RBX, U64
if (cc->flags & CCF_AOT_COMPILE)
i = rip2 + tmpi->ic_count;
ICU64(tmpi, tmpi->ic_data);
ICU16(tmpi, 0x13FF);
ICU16(tmpi, 0x13FF); // CALL U64 [RBX]
if (buf && cc->flags & CCF_AOT_COMPILE && !(cc->flags & CCF_NO_ABSS))
{
tmpa = CAlloc(sizeof(CAOTAbsAddr));
@ -404,8 +404,8 @@ cc->pass == 10 is final pass, code is placed into buf.
case IC_CALL_IMPORT:
if (OptionGet(OPTf_USE_IMM64))
{
ICU16(tmpi, 0xBB48);
ICU64(tmpi, 0);
ICU16(tmpi, 0xBB48); //
ICU64(tmpi, 0); // MOV U64 RBX, U64 0x0
if (buf)
{
tmpf = tmpi->ic_data;
@ -415,12 +415,12 @@ cc->pass == 10 is final pass, code is placed into buf.
tmpie->next = tmpf->ie_list;
tmpf->ie_list = tmpie;
}
ICU16(tmpi, 0xD3FF);
ICU16(tmpi, 0xD3FF); // CALL U64 RBX
}
else
{
ICU8(tmpi, 0xE8);
ICU32(tmpi, 0);
ICU8(tmpi, 0xE8); //
ICU32(tmpi, 0); // CALL I32 0x5
if (buf)
{
tmpf = tmpi->ic_data;
@ -461,31 +461,31 @@ cc->pass == 10 is final pass, code is placed into buf.
{
if (Bt(&cc->htc.fun->flags, Ff_HASERRCODE))
ICAddRSP(tmpi, 8);
ICU16(tmpi, 0xCF48);
ICU16(tmpi, 0xCF48); // IRET
}
else if (cc->htc.fun && cc->htc.fun->arg_count &&
(Bt(&cc->htc.fun->flags, Ff_RET1) || Bt(&cc->htc.fun->flags, Ff_ARGPOP)) &&
!Bt(&cc->htc.fun->flags, Ff_NOARGPOP))
{
ICU8(tmpi, 0xC2);
ICU8(tmpi, 0xC2); // RET1 I16
ICU16(tmpi, cc->htc.fun->arg_count << 3);
}
else
ICU8(tmpi, 0xC3);
ICU8(tmpi, 0xC3); // RET
break;
case IC_RET:
ICU8(tmpi, 0xC3);
ICU8(tmpi, 0xC3); // RET
break;
case IC_FS:
ICZero(tmpi, REG_RAX);
ICU32(tmpi, 0x8B4864);
ICU32(tmpi, 0x8B4864); // MOV U64 RBP, U64 FS:RSP
break;
case IC_GS:
ICZero(tmpi, REG_RAX);
ICU32(tmpi, 0x8B4865);
ICU32(tmpi, 0x8B4865); // MOV U64 RBP, U64 GS:RSP
break;
case IC_MOV_FS:
@ -804,7 +804,7 @@ cc->pass == 10 is final pass, code is placed into buf.
break;
case IC_ENTER:
ICU32(tmpi, 0xEC8B4855);
ICU32(tmpi, 0xEC8B4855); // PUSH U64 RBP // MOV U64 RBP, U64 RSP
if (tmpi->ic_data)
ICAddRSP(tmpi, -tmpi->ic_data, FALSE);
if (cc->htc.fun)
@ -835,12 +835,12 @@ cc->pass == 10 is final pass, code is placed into buf.
case IC_CALL_INDIRECT:
if (I8_MIN <= tmpi->ic_data <= I8_MAX)
{
ICU24(tmpi, 0x2454FF); //CALL disp[RSP]
ICU24(tmpi, 0x2454FF); // CALL disp[RSP]
ICU8(tmpi, tmpi->ic_data);
}
else
{
ICU24(tmpi, 0x2494FF); //CALL disp[RSP]
ICU24(tmpi, 0x2494FF); // CALL disp[RSP]
ICU32(tmpi, tmpi->ic_data);
}
break;
@ -850,17 +850,17 @@ cc->pass == 10 is final pass, code is placed into buf.
break;
case IC_POP:
ICU8(tmpi, 0x58);
ICU8(tmpi, 0x58); // POP U64 RAX
break;
case IC_INVLPG:
ICMov(tmpi, MDF_REG + RT_I64, REG_RAX, 0, tmpi->arg1.type, tmpi->arg1.reg, tmpi->arg1.disp, rip2);
ICU24(tmpi, 0x38010F);
ICU24(tmpi, 0x38010F); // INVLPG U8 [RAX]
break;
case IC_CLFLUSH:
ICMov(tmpi, MDF_REG + RT_I64, REG_RAX, 0, tmpi->arg1.type, tmpi->arg1.reg, tmpi->arg1.disp, rip2);
ICU24(tmpi, 0x38AE0F);
ICU24(tmpi, 0x38AE0F); // CLFLUSH U8 [RAX]
break;
case IC_RFLAGS_GET:
@ -869,8 +869,8 @@ cc->pass == 10 is final pass, code is placed into buf.
break;
case IC_CARRY:
ICU24(tmpi, 0xC0920F); //SETC AL
ICU24(tmpi, 0x01E083); //AND EAX,1
ICU24(tmpi, 0xC0920F); // SETB U8 AL
ICU24(tmpi, 0x01E083); // AND U32 EAX, I8 0x01
break;
case IC_RDTSC:
@ -928,22 +928,22 @@ cc->pass == 10 is final pass, code is placed into buf.
case IC_BSF:
ICMov(tmpi, MDF_REG + RT_I64, REG_RAX, 0, tmpi->arg1.type, tmpi->arg1.reg, tmpi->arg1.disp, rip2);
ICU32(tmpi, 0xC0BC0F48);
ICU16(tmpi, 0x0375);
ICU24(tmpi, 0xD0F748);
ICU32(tmpi, 0xC0BC0F48); // BSF U64 RAX, U64 RAX
ICU16(tmpi, 0x0375); // JNE I8 0x9
ICU24(tmpi, 0xD0F748); // NOT U64 RAX
break;
case IC_BSR:
ICMov(tmpi, MDF_REG + RT_I64, REG_RAX, 0, tmpi->arg1.type, tmpi->arg1.reg, tmpi->arg1.disp, rip2);
ICU32(tmpi, 0xC0BD0F48);
ICU16(tmpi, 0x0375);
ICU24(tmpi, 0xD0F748);
ICU32(tmpi, 0xC0BD0F48); // BSR U64 RAX, U64 RAX
ICU16(tmpi, 0x0375); // JNE I8 0x9
ICU24(tmpi, 0xD0F748); // NOT U64 RAX
break;
case IC_POPCNT:
ICMov(tmpi, MDF_REG + RT_I64, REG_RAX, 0, tmpi->arg1.type, tmpi->arg1.reg, tmpi->arg1.disp, rip2);
ICU16(tmpi, 0xF348);
ICU32(tmpi, 0xC0B80F48);
ICU16(tmpi, 0xF348); //
ICU32(tmpi, 0xC0B80F48); // POPCNT U64 RAX, U64 RAX
break;
case IC_SIGN_I64:
@ -997,9 +997,9 @@ cc->pass == 10 is final pass, code is placed into buf.
case IC_ABS_I64:
ICMov(tmpi, MDF_REG + RT_I64, REG_RAX, 0, tmpi->arg1.type, tmpi->arg1.reg, tmpi->arg1.disp, rip2);
ICU24(tmpi, 0xC08548);
ICU16(tmpi, 0x0379);
ICU24(tmpi, 0xD8F748);
ICU24(tmpi, 0xC08548); // TEST U64 RAX, U64 RAX
ICU16(tmpi, 0x0379); // JNS I8 0x8
ICU24(tmpi, 0xD8F748); // NEG U64 RAX
break;
case IC_MIN_I64:
@ -1223,8 +1223,8 @@ cc->pass == 10 is final pass, code is placed into buf.
{
if (tmpi->ic_code == IC_PUSH_CMP)
{
ICU24(tmpi, 0x242CDF); //FILD U64 [RSP]
ICU24(tmpi, 0x241CDD); //FSTP U64 [RSP]
ICU24(tmpi, 0x242CDF); // FILD U64 [RSP]
ICU24(tmpi, 0x241CDD); // FSTP U64 [RSP]
}
else
{

View File

@ -1,4 +1,7 @@
$WW,1$$FG,5$$TX+CX,"ChangeLog"$$FG$
$IV,1$----10/09/21 04:05:32----$IV,0$
* Add MOVQ, PMOVMSKB, MINPS, MAXPS, XORPS, CVTSI2SD, and CVTSD2SI assembly opcodes to OpCodes.DD. $TX+IV,"Note"$: Assembler adds extra REX 0x48 byte to SSE instructions using 64bit registers. Using ` opcode flag only disables prefixing REX 0x48 when using lower registers; TODO modify assembler to fix this for SSE instructions, or make new OpCodes flag to never prefix REX 0x48.
$IV,1$----10/07/21 18:06:15----$IV,0$
* Raised version number to 1.02.
* Fix Std Font characters after char 128.

View File

@ -15,7 +15,7 @@ U0 LoadDocDefines()
//$LK,"DD_BOOT_HIGH_LOC_DVD",A="FF:::/System/Boot/BootDVD.CC,DD_BOOT_HIGH_LOC_DVD"$
$TR,"LineRep"$
$ID,2$DefinePrint("DD_ZEALOS_LOC","94,826");
$ID,2$DefinePrint("DD_ZEALOS_LOC","94,836");
$ID,-2$
DefinePrint("DD_MP_VECT", "%08X", MP_VECT_ADDR);
DefinePrint("DD_MP_VECT_END", "%08X", MP_VECT_ADDR + COREAP_16BIT_INIT_END - COREAP_16BIT_INIT - 1);