mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2025-06-07 08:14:48 +00:00
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:
parent
9aa9e44ea6
commit
dc581ddad2
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -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->ic_data);
|
||||
<a name="l110"></a> </span><span class=cF1>if</span><span class=cF0> (buf && cc->flags & </span><span class=cF3>CCF_AOT_COMPILE</span><span class=cF0> && !</span><span class=cF7>(</span><span class=cF0>cc->flags & (</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->ic_data;
|
||||
<a name="l124"></a> </span><span class=cF1>if</span><span class=cF0> (buf && cc->flags & </span><span class=cF3>CCF_AOT_COMPILE</span><span class=cF0> && !</span><span class=cF7>(</span><span class=cF0>cc->flags & (</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->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->flags & </span><span class=cF3>CCF_AOT_COMPILE</span><span class=cF0> && buf &&!</span><span class=cF7>(</span><span class=cF0>cc->flags & </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->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> <= i <= </span><span class=cF3>I32_MAX</span><span class=cF7>)</span><span class=cF0> && !</span><span class=cF7>(</span><span class=cF0>cc->flags & </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->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->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->flags & </span><span class=cF3>CCF_AOT_COMPILE</span><span class=cF0>)
|
||||
<a name="l391"></a> i = rip2 + tmpi->ic_count;
|
||||
<a name="l392"></a> </span><span class=cFD>ICU64</span><span class=cF0>(tmpi, tmpi->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 && cc->flags & </span><span class=cF3>CCF_AOT_COMPILE</span><span class=cF0> && !</span><span class=cF7>(</span><span class=cF0>cc->flags & </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->ic_data;
|
||||
@ -442,12 +442,12 @@ body {background-color:#1f1f1f;}
|
||||
<a name="l415"></a> tmpie->next = tmpf->ie_list;
|
||||
<a name="l416"></a> tmpf->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->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>&cc->htc.fun->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->htc.fun && cc->htc.fun->arg_count &&
|
||||
<a name="l467"></a> </span><span class=cF7>(</span><span class=cF5>Bt</span><span class=cF0>(&cc->htc.fun->flags, </span><span class=cF3>Ff_RET1</span><span class=cF0>) || </span><span class=cF5>Bt</span><span class=cF0>(&cc->htc.fun->flags, </span><span class=cF3>Ff_ARGPOP</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0> &&
|
||||
<a name="l468"></a> !</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&cc->htc.fun->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->htc.fun->arg_count << </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->ic_data)
|
||||
<a name="l809"></a> </span><span class=cFD>ICAddRSP</span><span class=cF0>(tmpi, -tmpi->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->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> <= tmpi->ic_data <= </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->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->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->arg1.type, tmpi->arg1.</span><span class=cF1>reg</span><span class=cF0>, tmpi->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->arg1.type, tmpi->arg1.</span><span class=cF1>reg</span><span class=cF0>, tmpi->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->arg1.type, tmpi->arg1.</span><span class=cF1>reg</span><span class=cF0>, tmpi->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->arg1.type, tmpi->arg1.</span><span class=cF1>reg</span><span class=cF0>, tmpi->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->arg1.type, tmpi->arg1.</span><span class=cF1>reg</span><span class=cF0>, tmpi->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->arg1.type, tmpi->arg1.</span><span class=cF1>reg</span><span class=cF0>, tmpi->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->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>
|
||||
|
@ -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>"\n94,826 LOC, "</span><span class=cF0>;
|
||||
<a name="l12"></a> </span><span class=cF6>"\n94,836 LOC, "</span><span class=cF0>;
|
||||
<a name="l13"></a> </span><span class=cF6>"%d MB RAM, "</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>"\n"</span><span class=cF0>;
|
||||
|
@ -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
@ -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.
|
||||
|
@ -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>
|
||||
|
10083
docs/index.html
10083
docs/index.html
File diff suppressed because it is too large
Load Diff
@ -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;
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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.
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user