1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-06-02 16:38:08 +03:00

Started on assembly

This commit is contained in:
Graham Nelson 2021-10-29 23:57:15 +01:00
parent ad76073090
commit 2f7624de54
14 changed files with 299 additions and 168 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
v10.1.0-alpha.1+6T60 'Krypton' (28 October 2021)
v10.1.0-alpha.1+6T61 'Krypton' (29 October 2021)
## About Inform 7

View file

@ -1,3 +1,3 @@
Prerelease: alpha.1
Build Date: 28 October 2021
Build Number: 6T60
Build Date: 29 October 2021
Build Number: 6T61

View file

@ -85,6 +85,7 @@ which use this module:
<span class="definition-keyword">enum</span> <span class="constant-syntax">C_property_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">C_pv_pair_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">C_property_owner_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">C_supported_opcode_CLASS</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">code_generator</span><span class="plain-syntax">)</span>
@ -97,6 +98,7 @@ which use this module:
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">C_property</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">C_pv_pair</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">C_property_owner</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">C_supported_opcode</span><span class="plain-syntax">)</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>Like all modules, this one must define a <span class="extract"><span class="extract-syntax">start</span></span> and <span class="extract"><span class="extract-syntax">end</span></span> function:
</p>

View file

@ -441,13 +441,13 @@ some temporary stream somewhere. For that, use the following pair:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::select_temporary</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">CodeGen::select_temporary</span></span>:<br/><a href="2-cg.html#SP4">&#167;4</a><br/>Vanilla Constants - <a href="2-vc.html#SP1_8">&#167;1.8</a><br/>Vanilla Objects - <a href="2-vo.html#SP2_2_1_2">&#167;2.2.1.2</a>, <a href="2-vo.html#SP4_1_1_1_1_1_1">&#167;4.1.1.1.1.1.1</a><br/>Inform 6 Objects - <a href="4-i6o.html#SP11">&#167;11</a><br/>C Assembly - <a href="5-cas.html#SP2">&#167;2</a><br/>C Object Model - <a href="5-com.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::select_temporary</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">CodeGen::select_temporary</span></span>:<br/><a href="2-cg.html#SP4">&#167;4</a><br/>Vanilla Constants - <a href="2-vc.html#SP1_8">&#167;1.8</a><br/>Vanilla Objects - <a href="2-vo.html#SP2_2_1_2">&#167;2.2.1.2</a>, <a href="2-vo.html#SP4_1_1_1_1_1_1">&#167;4.1.1.1.1.1.1</a><br/>Inform 6 Objects - <a href="4-i6o.html#SP11">&#167;11</a><br/>C Assembly - <a href="5-cas.html#SP3">&#167;3</a><br/>C Object Model - <a href="5-com.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">temporarily_diverted</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"nested temporary segments"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">temporarily_diverted_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">T</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">temporarily_diverted</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::deselect_temporary</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">CodeGen::deselect_temporary</span></span>:<br/><a href="2-cg.html#SP4">&#167;4</a><br/>Vanilla Constants - <a href="2-vc.html#SP1_8">&#167;1.8</a><br/>Vanilla Objects - <a href="2-vo.html#SP2_2_1_2">&#167;2.2.1.2</a>, <a href="2-vo.html#SP4_1_1_1_1_1_1">&#167;4.1.1.1.1.1.1</a><br/>Inform 6 Objects - <a href="4-i6o.html#SP11">&#167;11</a><br/>C Assembly - <a href="5-cas.html#SP2">&#167;2</a><br/>C Object Model - <a href="5-com.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::deselect_temporary</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">CodeGen::deselect_temporary</span></span>:<br/><a href="2-cg.html#SP4">&#167;4</a><br/>Vanilla Constants - <a href="2-vc.html#SP1_8">&#167;1.8</a><br/>Vanilla Objects - <a href="2-vo.html#SP2_2_1_2">&#167;2.2.1.2</a>, <a href="2-vo.html#SP4_1_1_1_1_1_1">&#167;4.1.1.1.1.1.1</a><br/>Inform 6 Objects - <a href="4-i6o.html#SP11">&#167;11</a><br/>C Assembly - <a href="5-cas.html#SP3">&#167;3</a><br/>C Object Model - <a href="5-com.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">temporarily_diverted_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">temporarily_diverted</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -457,7 +457,7 @@ if it has been "temporarily diverted" then the regiular selection is ignored.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">CodeGen::current</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">CodeGen::current</span></span>:<br/><a href="2-cg.html#SP16_1">&#167;16.1</a><br/>Vanilla - <a href="2-vnl.html#SP4">&#167;4</a><br/>Vanilla Constants - <a href="2-vc.html#SP2">&#167;2</a><br/>Vanilla Objects - <a href="2-vo.html#SP5">&#167;5</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP4_1">&#167;4.1</a>, <a href="4-fi6.html#SP4_2">&#167;4.2</a>, <a href="4-fi6.html#SP5">&#167;5</a><br/>Inform 6 Constants - <a href="4-i6c.html#SP2">&#167;2</a>, <a href="4-i6c.html#SP3_1">&#167;3.1</a>, <a href="4-i6c.html#SP3_2">&#167;3.2</a>, <a href="4-i6c.html#SP4">&#167;4</a>, <a href="4-i6c.html#SP5">&#167;5</a>, <a href="4-i6c.html#SP6">&#167;6</a>, <a href="4-i6c.html#SP7">&#167;7</a>, <a href="4-i6c.html#SP8">&#167;8</a>, <a href="4-i6c.html#SP9">&#167;9</a>, <a href="4-i6c.html#SP10">&#167;10</a><br/>Inform 6 Global Variables - <a href="4-i6gv.html#SP2_1">&#167;2.1</a>, <a href="4-i6gv.html#SP2_2">&#167;2.2</a>, <a href="4-i6gv.html#SP2_3">&#167;2.3</a>, <a href="4-i6gv.html#SP2_4">&#167;2.4</a>, <a href="4-i6gv.html#SP3">&#167;3</a><br/>Inform 6 Objects - <a href="4-i6o.html#SP4_3">&#167;4.3</a>, <a href="4-i6o.html#SP4_4">&#167;4.4</a>, <a href="4-i6o.html#SP4_5">&#167;4.5</a>, <a href="4-i6o.html#SP4_6">&#167;4.6</a>, <a href="4-i6o.html#SP5_1">&#167;5.1</a>, <a href="4-i6o.html#SP6">&#167;6</a>, <a href="4-i6o.html#SP9">&#167;9</a>, <a href="4-i6o.html#SP10">&#167;10</a>, <a href="4-i6o.html#SP11">&#167;11</a>, <a href="4-i6o.html#SP13_1">&#167;13.1</a>, <a href="4-i6o.html#SP13_2">&#167;13.2</a>, <a href="4-i6o.html#SP13_3">&#167;13.3</a><br/>Inform 6 Code - <a href="4-i6c2.html#SP2">&#167;2</a>, <a href="4-i6c2.html#SP2_2">&#167;2.2</a>, <a href="4-i6c2.html#SP3">&#167;3</a>, <a href="4-i6c2.html#SP4">&#167;4</a>, <a href="4-i6c2.html#SP5">&#167;5</a>, <a href="4-i6c2.html#SP6">&#167;6</a>, <a href="4-i6c2.html#SP6_4">&#167;6.4</a>, <a href="4-i6c2.html#SP9">&#167;9</a><br/>Final C - <a href="5-fnc.html#SP5_2">&#167;5.2</a>, <a href="5-fnc.html#SP5_3">&#167;5.3</a>, <a href="5-fnc.html#SP6_1">&#167;6.1</a><br/>C Namespace - <a href="5-cnm.html#SP7">&#167;7</a><br/>C References - <a href="5-crf.html#SP2">&#167;2</a><br/>C Global Variables - <a href="5-cgv.html#SP2">&#167;2</a>, <a href="5-cgv.html#SP3">&#167;3</a>, <a href="5-cgv.html#SP3_1">&#167;3.1</a>, <a href="5-cgv.html#SP3_2">&#167;3.2</a>, <a href="5-cgv.html#SP3_3">&#167;3.3</a>, <a href="5-cgv.html#SP3_4">&#167;3.4</a>, <a href="5-cgv.html#SP4">&#167;4</a><br/>C Memory Model - <a href="5-cmm.html#SP2">&#167;2</a>, <a href="5-cmm.html#SP3">&#167;3</a>, <a href="5-cmm.html#SP4_2_2">&#167;4.2.2</a>, <a href="5-cmm.html#SP5">&#167;5</a>, <a href="5-cmm.html#SP7">&#167;7</a>, <a href="5-cmm.html#SP8">&#167;8</a><br/>C Assembly - <a href="5-cas.html#SP2">&#167;2</a><br/>C Program Control - <a href="5-cpc.html#SP1">&#167;1</a>, <a href="5-cpc.html#SP2">&#167;2</a><br/>C Arithmetic - <a href="5-car.html#SP1">&#167;1</a><br/>C Conditions - <a href="5-ccn.html#SP1">&#167;1</a>, <a href="5-ccn.html#SP2">&#167;2</a><br/>C Object Model - <a href="5-com.html#SP1_5">&#167;1.5</a>, <a href="5-com.html#SP4">&#167;4</a>, <a href="5-com.html#SP7">&#167;7</a>, <a href="5-com.html#SP1_6">&#167;1.6</a>, <a href="5-com.html#SP1_7">&#167;1.7</a>, <a href="5-com.html#SP1_8">&#167;1.8</a>, <a href="5-com.html#SP8">&#167;8</a>, <a href="5-com.html#SP9">&#167;9</a><br/>C Function Model - <a href="5-cfm.html#SP1">&#167;1</a><br/>C Literals - <a href="5-clt.html#SP1">&#167;1</a>, <a href="5-clt.html#SP2">&#167;2</a>, <a href="5-clt.html#SP4">&#167;4</a>, <a href="5-clt.html#SP5">&#167;5</a>, <a href="5-clt.html#SP6">&#167;6</a><br/>C Input-Output Model - <a href="5-cim.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">CodeGen::current</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">CodeGen::current</span></span>:<br/><a href="2-cg.html#SP16_1">&#167;16.1</a><br/>Vanilla - <a href="2-vnl.html#SP4">&#167;4</a><br/>Vanilla Constants - <a href="2-vc.html#SP2">&#167;2</a><br/>Vanilla Objects - <a href="2-vo.html#SP5">&#167;5</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP4_1">&#167;4.1</a>, <a href="4-fi6.html#SP4_2">&#167;4.2</a>, <a href="4-fi6.html#SP5">&#167;5</a><br/>Inform 6 Constants - <a href="4-i6c.html#SP2">&#167;2</a>, <a href="4-i6c.html#SP3_1">&#167;3.1</a>, <a href="4-i6c.html#SP3_2">&#167;3.2</a>, <a href="4-i6c.html#SP4">&#167;4</a>, <a href="4-i6c.html#SP5">&#167;5</a>, <a href="4-i6c.html#SP6">&#167;6</a>, <a href="4-i6c.html#SP7">&#167;7</a>, <a href="4-i6c.html#SP8">&#167;8</a>, <a href="4-i6c.html#SP9">&#167;9</a>, <a href="4-i6c.html#SP10">&#167;10</a><br/>Inform 6 Global Variables - <a href="4-i6gv.html#SP2_1">&#167;2.1</a>, <a href="4-i6gv.html#SP2_2">&#167;2.2</a>, <a href="4-i6gv.html#SP2_3">&#167;2.3</a>, <a href="4-i6gv.html#SP2_4">&#167;2.4</a>, <a href="4-i6gv.html#SP3">&#167;3</a><br/>Inform 6 Objects - <a href="4-i6o.html#SP4_3">&#167;4.3</a>, <a href="4-i6o.html#SP4_4">&#167;4.4</a>, <a href="4-i6o.html#SP4_5">&#167;4.5</a>, <a href="4-i6o.html#SP4_6">&#167;4.6</a>, <a href="4-i6o.html#SP5_1">&#167;5.1</a>, <a href="4-i6o.html#SP6">&#167;6</a>, <a href="4-i6o.html#SP9">&#167;9</a>, <a href="4-i6o.html#SP10">&#167;10</a>, <a href="4-i6o.html#SP11">&#167;11</a>, <a href="4-i6o.html#SP13_1">&#167;13.1</a>, <a href="4-i6o.html#SP13_2">&#167;13.2</a>, <a href="4-i6o.html#SP13_3">&#167;13.3</a><br/>Inform 6 Code - <a href="4-i6c2.html#SP2">&#167;2</a>, <a href="4-i6c2.html#SP2_2">&#167;2.2</a>, <a href="4-i6c2.html#SP3">&#167;3</a>, <a href="4-i6c2.html#SP4">&#167;4</a>, <a href="4-i6c2.html#SP5">&#167;5</a>, <a href="4-i6c2.html#SP6">&#167;6</a>, <a href="4-i6c2.html#SP6_4">&#167;6.4</a>, <a href="4-i6c2.html#SP9">&#167;9</a><br/>Final C - <a href="5-fnc.html#SP5_2">&#167;5.2</a>, <a href="5-fnc.html#SP5_3">&#167;5.3</a>, <a href="5-fnc.html#SP6_1">&#167;6.1</a><br/>C Namespace - <a href="5-cnm.html#SP7">&#167;7</a><br/>C References - <a href="5-crf.html#SP2">&#167;2</a><br/>C Global Variables - <a href="5-cgv.html#SP2">&#167;2</a>, <a href="5-cgv.html#SP3">&#167;3</a>, <a href="5-cgv.html#SP3_1">&#167;3.1</a>, <a href="5-cgv.html#SP3_2">&#167;3.2</a>, <a href="5-cgv.html#SP3_3">&#167;3.3</a>, <a href="5-cgv.html#SP3_4">&#167;3.4</a>, <a href="5-cgv.html#SP4">&#167;4</a><br/>C Memory Model - <a href="5-cmm.html#SP2">&#167;2</a>, <a href="5-cmm.html#SP3">&#167;3</a>, <a href="5-cmm.html#SP4_2_2">&#167;4.2.2</a>, <a href="5-cmm.html#SP5">&#167;5</a>, <a href="5-cmm.html#SP7">&#167;7</a>, <a href="5-cmm.html#SP8">&#167;8</a><br/>C Assembly - <a href="5-cas.html#SP3">&#167;3</a><br/>C Program Control - <a href="5-cpc.html#SP1">&#167;1</a>, <a href="5-cpc.html#SP2">&#167;2</a><br/>C Arithmetic - <a href="5-car.html#SP1">&#167;1</a><br/>C Conditions - <a href="5-ccn.html#SP1">&#167;1</a>, <a href="5-ccn.html#SP2">&#167;2</a><br/>C Object Model - <a href="5-com.html#SP1_5">&#167;1.5</a>, <a href="5-com.html#SP4">&#167;4</a>, <a href="5-com.html#SP7">&#167;7</a>, <a href="5-com.html#SP1_6">&#167;1.6</a>, <a href="5-com.html#SP1_7">&#167;1.7</a>, <a href="5-com.html#SP1_8">&#167;1.8</a>, <a href="5-com.html#SP8">&#167;8</a>, <a href="5-com.html#SP9">&#167;9</a><br/>C Function Model - <a href="5-cfm.html#SP1">&#167;1</a><br/>C Literals - <a href="5-clt.html#SP1">&#167;1</a>, <a href="5-clt.html#SP2">&#167;2</a>, <a href="5-clt.html#SP4">&#167;4</a>, <a href="5-clt.html#SP5">&#167;5</a>, <a href="5-clt.html#SP6">&#167;6</a><br/>C Input-Output Model - <a href="5-cim.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">temporarily_diverted</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="identifier-syntax">temporarily_diverted_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">segmentation</span><span class="plain-syntax">.</span><span class="element-syntax">pos</span><span class="plain-syntax">.</span><span class="element-syntax">current_segment</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>

View file

@ -197,7 +197,7 @@ well the entire tree by the end.
<span class="definition-keyword">define</span> <span class="constant-syntax">VNODE_ALLC</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_INTER_CHILDREN</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">) </span><a href="2-vnl.html#SP3" class="function-link"><span class="function-syntax">Vanilla::node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">)</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Vanilla::node</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Vanilla::node</span></span>:<br/><a href="2-vnl.html#SP2">&#167;2</a><br/>Inform 6 Code - <a href="4-i6c2.html#SP2">&#167;2</a>, <a href="4-i6c2.html#SP4">&#167;4</a>, <a href="4-i6c2.html#SP5">&#167;5</a>, <a href="4-i6c2.html#SP6_2_1_2">&#167;6.2.1.2</a>, <a href="4-i6c2.html#SP6_4">&#167;6.4</a>, <a href="4-i6c2.html#SP6_6_1">&#167;6.6.1</a>, <a href="4-i6c2.html#SP6_6_8">&#167;6.6.8</a><br/>C References - <a href="5-crf.html#SP2_1_1">&#167;2.1.1</a>, <a href="5-crf.html#SP2_1_2">&#167;2.1.2</a>, <a href="5-crf.html#SP2_1_3">&#167;2.1.3</a><br/>C Assembly - <a href="5-cas.html#SP2">&#167;2</a><br/>C Program Control - <a href="5-cpc.html#SP1_1">&#167;1.1</a>, <a href="5-cpc.html#SP1_8">&#167;1.8</a>, <a href="5-cpc.html#SP2">&#167;2</a><br/>C Conditions - <a href="5-ccn.html#SP2">&#167;2</a>, <a href="5-ccn.html#SP2_1">&#167;2.1</a>, <a href="5-ccn.html#SP2_2">&#167;2.2</a><br/>C Function Model - <a href="5-cfm.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Vanilla::node</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Vanilla::node</span></span>:<br/><a href="2-vnl.html#SP2">&#167;2</a><br/>Inform 6 Code - <a href="4-i6c2.html#SP2">&#167;2</a>, <a href="4-i6c2.html#SP4">&#167;4</a>, <a href="4-i6c2.html#SP5">&#167;5</a>, <a href="4-i6c2.html#SP6_2_1_2">&#167;6.2.1.2</a>, <a href="4-i6c2.html#SP6_4">&#167;6.4</a>, <a href="4-i6c2.html#SP6_6_1">&#167;6.6.1</a>, <a href="4-i6c2.html#SP6_6_8">&#167;6.6.8</a><br/>C References - <a href="5-crf.html#SP2_1_1">&#167;2.1.1</a>, <a href="5-crf.html#SP2_1_2">&#167;2.1.2</a>, <a href="5-crf.html#SP2_1_3">&#167;2.1.3</a><br/>C Assembly - <a href="5-cas.html#SP3">&#167;3</a><br/>C Program Control - <a href="5-cpc.html#SP1_1">&#167;1.1</a>, <a href="5-cpc.html#SP1_8">&#167;1.8</a>, <a href="5-cpc.html#SP2">&#167;2</a><br/>C Conditions - <a href="5-ccn.html#SP2">&#167;2</a>, <a href="5-ccn.html#SP2_1">&#167;2.1</a>, <a href="5-ccn.html#SP2_2">&#167;2.2</a><br/>C Function Model - <a href="5-cfm.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">data</span><span class="plain-syntax">[</span><span class="identifier-syntax">ID_IFLD</span><span class="plain-syntax">]) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONSTANT_IST:</span><span class="plain-syntax"> </span><a href="2-vc.html#SP1" class="function-link"><span class="function-syntax">VanillaConstants::constant</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>

View file

@ -80,7 +80,7 @@ opcodes.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CAssembly::initialise</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">CAssembly::initialise</span></span>:<br/>Final C - <a href="5-fnc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">INVOKE_OPCODE_MTID</span><span class="plain-syntax">, </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::assembly</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">INVOKE_OPCODE_MTID</span><span class="plain-syntax">, </span><a href="5-cas.html#SP3" class="function-link"><span class="function-syntax">CAssembly::assembly</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CAssembly::initialise_data</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">CAssembly::initialise_data</span></span>:<br/>Final C - <a href="5-fnc.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span>
@ -96,76 +96,141 @@ opcodes.
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CAssembly::assembly</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">CAssembly::assembly</span></span>:<br/><a href="5-cas.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">C_supported_opcode</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_OPERANDS_IN_INTER_ASSEMBLY</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">vararg_operand</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">speculative</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">C_supported_opcode</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">C_supported_opcode</span><span class="plain-syntax"> *</span><span class="function-syntax">CAssembly::new_opcode</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">CAssembly::new_opcode</span></span>:<br/><a href="5-cas.html#SP2_1">&#167;2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">s1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">s2</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">va</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">C_supported_opcode</span><span class="plain-syntax"> *</span><span class="identifier-syntax">opc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">C_supported_opcode</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">opc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">speculative</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">opc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;16; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">opc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">store_this_operand</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">] = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">s1</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">opc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">store_this_operand</span><span class="plain-syntax">[</span><span class="identifier-syntax">s1</span><span class="plain-syntax">] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">s2</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">opc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">store_this_operand</span><span class="plain-syntax">[</span><span class="identifier-syntax">s2</span><span class="plain-syntax">] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">opc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vararg_operand</span><span class="plain-syntax"> = </span><span class="identifier-syntax">va</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Dictionaries::create</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_supported_opcodes</span><span class="plain-syntax">), </span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Dictionaries::write_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_supported_opcodes</span><span class="plain-syntax">), </span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">opc</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">opc</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">C_supported_opcode</span><span class="plain-syntax"> *</span><span class="function-syntax">CAssembly::find_opcode</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">CAssembly::find_opcode</span></span>:<br/><a href="5-cas.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_supported_opcodes</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_supported_opcodes</span><span class="plain-syntax">) = </span><span class="identifier-syntax">Dictionaries::new</span><span class="plain-syntax">(256, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cas.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Stock with the basics</span><span class="named-paragraph-number">2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">C_supported_opcode</span><span class="plain-syntax"> *</span><span class="identifier-syntax">opc</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Dictionaries::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_supported_opcodes</span><span class="plain-syntax">), </span><span class="identifier-syntax">name</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">opc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Dictionaries::read_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_supported_opcodes</span><span class="plain-syntax">), </span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">opc</span><span class="plain-syntax"> = </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">opc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">speculative</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">STDERR</span><span class="plain-syntax">, </span><span class="string-syntax">"Speculative %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"zap"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">opc</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure C_supported_opcode is accessed in 5/com and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1" class="paragraph-anchor"></a><b>&#167;2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Stock with the basics</span><span class="named-paragraph-number">2.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@read_gprop"</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@write_gprop"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@acos"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@add"</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@aload"</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@aloadb"</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@aloads"</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@asin"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@atan"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@binarysearch"</span><span class="plain-syntax">, </span><span class="constant-syntax">8</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@call"</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">, -1, </span><span class="constant-syntax">2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@ceil"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@copy"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@cos"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@div"</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@exp"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@fadd"</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@fdiv"</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@floor"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@fmod"</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@fmul"</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@fsub"</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@ftonumn"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@ftonumz"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@gestalt"</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@glk"</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">, -1, </span><span class="constant-syntax">2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@hasundo"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@jeq"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@jfeq"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@jfge"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@jflt"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@jisinf"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@jisnan"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@jleu"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@jnz"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@jz"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@log"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@malloc"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@mcopy"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@mfree"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@mod"</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@mul"</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@neg"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@nop"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@numtof"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@pow"</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@quit"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@random"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@restart"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@restore"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@restoreundo"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@return"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@save"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@saveundo"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@setiosys"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@setrandom"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@shiftl"</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@sin"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@sqrt"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@streamchar"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@streamnum"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@streamunichar"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@sub"</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@tan"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@ushiftr"</span><span class="plain-syntax">, -1, -1, -1);</span>
<span class="plain-syntax"> </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::new_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@verify"</span><span class="plain-syntax">, -1, -1, -1);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-cas.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CAssembly::assembly</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">CAssembly::assembly</span></span>:<br/><a href="5-cas.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">operand_count</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> **</span><span class="identifier-syntax">operands</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">label</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">label_sense</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">void_context</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP12" class="function-link"><span class="function-syntax">CodeGen::current</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">C_supported_opcode</span><span class="plain-syntax"> *</span><span class="identifier-syntax">opc</span><span class="plain-syntax"> = </span><a href="5-cas.html#SP2" class="function-link"><span class="function-syntax">CAssembly::find_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">opcode</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">vararg_operands_from</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">vararg_operands_to</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">hacky_extras</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_OPERANDS_IN_INTER_ASSEMBLY</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;16; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">] = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">opc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vararg_operand</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">vararg_operands_from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">opc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">vararg_operand</span><span class="plain-syntax">; </span><span class="identifier-syntax">vararg_operands_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">operand_count</span><span class="plain-syntax">-1; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@read_gprop"</span><span class="plain-syntax">)) { </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[4] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="identifier-syntax">hacky_extras</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@read_gprop"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">hacky_extras</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">objdata</span><span class="plain-syntax">.</span><span class="element-syntax">value_property_holders_needed</span><span class="plain-syntax">) = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@write_gprop"</span><span class="plain-syntax">)) { </span><span class="identifier-syntax">hacky_extras</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@write_gprop"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">hacky_extras</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">objdata</span><span class="plain-syntax">.</span><span class="element-syntax">value_property_holders_needed</span><span class="plain-syntax">) = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@acos"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[2] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@add"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[3] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@aload"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[3] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@aloadb"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[3] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@aloads"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[3] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@asin"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[2] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@atan"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[2] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@binarysearch"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[8] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@ceil"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[2] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@call"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[3] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vararg_operands_from</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">; </span><span class="identifier-syntax">vararg_operands_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">operand_count</span><span class="plain-syntax">-1;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@copy"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[2] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@cos"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[2] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@div"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[3] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@exp"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[2] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@fadd"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[3] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@fdiv"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[3] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@floor"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[2] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@fmod"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[3] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[4] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@fmul"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[3] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@fsub"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[3] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@ftonumn"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[2] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@ftonumz"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[2] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@gestalt"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[3] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@glk"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[3] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vararg_operands_from</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">; </span><span class="identifier-syntax">vararg_operands_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">operand_count</span><span class="plain-syntax">-1;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@hasundo"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[1] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@log"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[2] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@mod"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[3] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@mul"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[3] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@neg"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[2] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@numtof"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[2] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@pow"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[3] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@random"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[2] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@restoreundo"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[1] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@saveundo"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[1] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@shiftl"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[3] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@sin"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[2] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@sqrt"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[2] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@sub"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[3] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@tan"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[2] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@xfunction"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[3] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">vararg_operands_from</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">; </span><span class="identifier-syntax">vararg_operands_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">operand_count</span><span class="plain-syntax">-1;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pushed_result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">num</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"@return"</span><span class="plain-syntax">)) {</span>
@ -177,13 +242,13 @@ opcodes.
<span class="plain-syntax"> </span><span class="identifier-syntax">num</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">opc</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="identifier-syntax">opc</span><span class="plain-syntax"> &lt;= </span><span class="identifier-syntax">operand_count</span><span class="plain-syntax">; </span><span class="identifier-syntax">opc</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">opc</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">num</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">operand</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="identifier-syntax">operand</span><span class="plain-syntax"> &lt;= </span><span class="identifier-syntax">operand_count</span><span class="plain-syntax">; </span><span class="identifier-syntax">operand</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">operand</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">num</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">write_to</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="2-cg.html#SP11" class="function-link"><span class="function-syntax">CodeGen::select_temporary</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">write_to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-vnl.html#SP3" class="function-link"><span class="function-syntax">Vanilla::node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">operands</span><span class="plain-syntax">[</span><span class="identifier-syntax">opc</span><span class="plain-syntax">-1]);</span>
<span class="plain-syntax"> </span><a href="2-vnl.html#SP3" class="function-link"><span class="function-syntax">Vanilla::node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">operands</span><span class="plain-syntax">[</span><span class="identifier-syntax">operand</span><span class="plain-syntax">-1]);</span>
<span class="plain-syntax"> </span><a href="2-cg.html#SP11" class="function-link"><span class="function-syntax">CodeGen::deselect_temporary</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">store_this_operand</span><span class="plain-syntax">[</span><span class="identifier-syntax">opc</span><span class="plain-syntax">]) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">opc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">store_this_operand</span><span class="plain-syntax">[</span><span class="identifier-syntax">operand</span><span class="plain-syntax">]) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">write_to</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"i7_mgl_sp"</span><span class="plain-syntax">)) { </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;(proc-&gt;state.tmp)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">write_to</span><span class="plain-syntax">); </span><span class="identifier-syntax">pushed_result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">write_to</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"0"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"NULL"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">write_to</span><span class="plain-syntax">);</span>
@ -206,7 +271,7 @@ opcodes.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">void_context</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">";\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_provides_gprop</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">K</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">p</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">val</span><span class="Extracts-plain-syntax">,</span>
@ -297,7 +362,7 @@ opcodes.
<span class="Extracts-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.c.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b></p>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_accelfunc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">);</span>

View file

@ -129,7 +129,7 @@ example:
<span class="plain-syntax"> @streamnum glulx_streamnum</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CNamespace::mangle_opcode</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">CNamespace::mangle_opcode</span></span>:<br/>C Assembly - <a href="5-cas.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CNamespace::mangle_opcode</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">CNamespace::mangle_opcode</span></span>:<br/>C Assembly - <a href="5-cas.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generator</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"glulx_"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">opcode</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">) != </span><span class="character-syntax">'@'</span><span class="plain-syntax">)</span>

View file

@ -146,7 +146,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">objdata</span><span class="plain-syntax">.</span><span class="element-syntax">value_property_holders_needed</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="5-com.html#SP1_2" class="named-paragraph-link"><span class="named-paragraph">Make the value property holders</span><span class="named-paragraph-number">1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure C_generation_object_model_data is accessed in 4/fi6, 5/cas, 5/ccn and here.</li><li>The structure C_property_owner is accessed in 5/clt and here.</li></ul>
<ul class="endnotetexts"><li>The structure C_generation_object_model_data is accessed in 4/fi6, 5/cas, 5/ccn and here.</li><li>The structure C_property_owner is accessed in 5/cas, 5/clt and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP1_1" class="paragraph-anchor"></a><b>&#167;1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make the value ranges</span><span class="named-paragraph-number">1.1</span></span><span class="comment-syntax"> =</span>
</p>
@ -641,7 +641,7 @@ only need to be unique, so the order is not significant.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">cp</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure C_property is private to this section.</li></ul>
<ul class="endnotetexts"><li>The structure C_property is accessed in 5/cas and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP_1" class="paragraph-anchor"></a><b>&#167;.1. </b>This function is created only if properties actually exist to have offsets;
that avoids a meaningless function being created in small test runs of <span class="extract"><span class="extract-syntax">inter</span></span>
not deriving from an Inform program.

View file

@ -179,6 +179,7 @@ code can interface with it. Both are divided into segments. The main file thus:
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">C_generation_data</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">compile_main</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">compile_symbols</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">dictionary</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C_supported_opcodes</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">C_generation_memory_model_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">memdata</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">C_generation_function_model_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">fndata</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">C_generation_object_model_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">objdata</span><span class="plain-syntax">;</span>
@ -190,6 +191,7 @@ code can interface with it. Both are divided into segments. The main file thus:
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CTarget::initialise_data</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">CTarget::initialise_data</span></span>:<br/><a href="5-fnc.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">compile_main</span><span class="plain-syntax">) = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">compile_symbols</span><span class="plain-syntax">) = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">C_supported_opcodes</span><span class="plain-syntax">) = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="5-cmm.html#SP1" class="function-link"><span class="function-syntax">CMemoryModel::initialise_data</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-cfm.html#SP1" class="function-link"><span class="function-syntax">CFunctionModel::initialise_data</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-com.html#SP1" class="function-link"><span class="function-syntax">CObjectModel::initialise_data</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">);</span>

View file

@ -1,10 +1,10 @@
Total memory consumption was 394242K = 385 MB
Total memory consumption was 394247K = 385 MB
60.6% was used for 2004193 objects, in 372152 frames in 299 x 800K = 239200K = 233 MB:
60.6% was used for 2004293 objects, in 372153 frames in 299 x 800K = 239200K = 233 MB:
10.3% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
7.2% text_stream_array 5182 x 100 = 518200 objects, 29185024 bytes
4.3% linked_list 30999 objects, 17359440 bytes
4.2% linked_list 30999 objects, 17359440 bytes
3.9% inter_symbol_array 140 x 1024 = 143360 objects, 16060800 bytes
2.5% parse_node 129462 objects, 10356960 bytes
1.8% verb_conjugation 160 objects, 7425280 bytes
@ -21,7 +21,7 @@ Total memory consumption was 394242K = 385 MB
0.3% dictionary 33274 objects, 1597152 bytes
0.3% match_trie_array 11 x 1000 = 11000 objects, 1496352 bytes
0.3% i6_schema_array 23 x 100 = 2300 objects, 1380736 bytes
0.3% dict_entry_array 396 x 100 = 39600 objects, 1279872 bytes
0.3% dict_entry_array 397 x 100 = 39700 objects, 1283104 bytes
0.2% map_data 670 objects, 1125600 bytes
0.2% id_body 941 objects, 1076504 bytes
0.2% adjective_meaning 202 objects, 1000304 bytes
@ -83,8 +83,8 @@ Total memory consumption was 394242K = 385 MB
---- parsing_data 670 objects, 37520 bytes
---- heading 198 objects, 36432 bytes
---- production_list 617 objects, 34552 bytes
---- counting_data 670 objects, 32160 bytes
---- regions_data 670 objects, 32160 bytes
---- counting_data 670 objects, 32160 bytes
---- linked_list_item_array 2 x 1000 = 2000 objects, 32064 bytes
---- HTML_tag_array 1 x 1000 objects, 32032 bytes
---- property_permission 96 objects, 31488 bytes
@ -103,8 +103,8 @@ Total memory consumption was 394242K = 385 MB
---- parse_node_tree 20 objects, 17280 bytes
---- understanding_reference_array 2 x 100 = 200 objects, 16064 bytes
---- to_phrase_request 59 objects, 16048 bytes
---- match_avinue_array 1 x 1000 objects, 16032 bytes
---- action_name_list_array 1 x 1000 objects, 16032 bytes
---- match_avinue_array 1 x 1000 objects, 16032 bytes
---- adjective 137 objects, 15344 bytes
---- generated_segment 14 objects, 14784 bytes
---- booking_list 407 objects, 13024 bytes
@ -140,12 +140,12 @@ Total memory consumption was 394242K = 385 MB
---- compatibility_specification 65 objects, 3120 bytes
---- either_or_property_data 62 objects, 2976 bytes
---- use_option 29 objects, 2552 bytes
---- part_of_inference_data 79 objects, 2528 bytes
---- parentage_inference_data 79 objects, 2528 bytes
---- part_of_inference_data 79 objects, 2528 bytes
---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes
---- kind_constructor_instance_array 1 x 100 objects, 2432 bytes
---- inter_construct 30 objects, 2400 bytes
---- equation_symbol 30 objects, 2400 bytes
---- inter_construct 30 objects, 2400 bytes
---- pipeline_step 16 objects, 2304 bytes
---- semver_range 22 objects, 2288 bytes
---- scene 1 object, 2096 bytes
@ -157,8 +157,8 @@ Total memory consumption was 394242K = 385 MB
---- inter_tree_location_list 34 objects, 1360 bytes
---- special_meaning_holder 33 objects, 1320 bytes
---- inter_annotation_form 33 objects, 1320 bytes
---- constant_phrase 20 objects, 1280 bytes
---- table_column 16 objects, 1280 bytes
---- constant_phrase 20 objects, 1280 bytes
---- build_script 39 objects, 1248 bytes
---- invocation_options_array 1 x 100 objects, 1224 bytes
---- direction_inference_data 30 objects, 1200 bytes
@ -176,9 +176,9 @@ Total memory consumption was 394242K = 385 MB
---- inter_data_type 14 objects, 784 bytes
---- internal_test 15 objects, 720 bytes
---- inform_language 6 objects, 672 bytes
---- I6T_intervention 8 objects, 640 bytes
---- relation_guard 5 objects, 640 bytes
---- inter_warehouse_room 10 objects, 640 bytes
---- relation_guard 5 objects, 640 bytes
---- I6T_intervention 8 objects, 640 bytes
---- inbuild_search_result 15 objects, 600 bytes
---- rulebook_outcome 17 objects, 544 bytes
---- small_word_set 11 objects, 528 bytes
@ -193,30 +193,30 @@ Total memory consumption was 394242K = 385 MB
---- bp_family 12 objects, 384 bytes
---- source_file 5 objects, 360 bytes
---- inbuild_genre 7 objects, 336 bytes
---- pronoun 8 objects, 320 bytes
---- grammatical_category 8 objects, 320 bytes
---- door_dir_notice 5 objects, 320 bytes
---- pronoun 8 objects, 320 bytes
---- tree_inventory 1 object, 312 bytes
---- up_family 9 objects, 288 bytes
---- build_step 4 objects, 288 bytes
---- contents_entry 7 objects, 280 bytes
---- explicit_bp_data 5 objects, 280 bytes
---- compilation_unit 5 objects, 280 bytes
---- up_family 9 objects, 288 bytes
---- door_to_notice 5 objects, 280 bytes
---- explicit_bp_data 5 objects, 280 bytes
---- contents_entry 7 objects, 280 bytes
---- compilation_unit 5 objects, 280 bytes
---- verb_usage_tier 5 objects, 240 bytes
---- adjective_meaning_family 7 objects, 224 bytes
---- test_scenario 1 object, 216 bytes
---- release_instructions 1 object, 208 bytes
---- build_skill 5 objects, 200 bytes
---- code_generator 5 objects, 200 bytes
---- build_skill 5 objects, 200 bytes
---- inform_pipeline 3 objects, 192 bytes
---- plural_dictionary_entry 4 objects, 192 bytes
---- inform_project 1 object, 192 bytes
---- kit_dependency 4 objects, 192 bytes
---- plural_dictionary_entry 4 objects, 192 bytes
---- inference_subject_family 5 objects, 160 bytes
---- inter_architecture 4 objects, 160 bytes
---- link_instruction 4 objects, 160 bytes
---- inter_architecture 4 objects, 160 bytes
---- imperative_defn_family 4 objects, 160 bytes
---- inference_subject_family 5 objects, 160 bytes
---- element_activation 4 objects, 128 bytes
---- codegen_pipeline 1 object, 128 bytes
---- inbuild_nest 3 objects, 120 bytes
@ -228,16 +228,16 @@ Total memory consumption was 394242K = 385 MB
---- build_methodology 1 object, 56 bytes
---- figures_data 1 object, 56 bytes
---- inter_warehouse 1 object, 56 bytes
---- star_invention 1 object, 48 bytes
---- HTML_file_state 1 object, 48 bytes
---- star_invention 1 object, 48 bytes
---- kind_template_definition 1 object, 40 bytes
---- by_function_bp_data 1 object, 40 bytes
---- loop_over_scope 1 object, 40 bytes
---- I6_generation_data 1 object, 40 bytes
---- loop_over_scope 1 object, 40 bytes
39.3% was used for memory not allocated for objects:
20.5% text stream storage 82795652 bytes in 536181 claims
20.5% text stream storage 82800144 bytes in 536227 claims
4.5% dictionary storage 18277376 bytes in 33274 claims
---- sorting 736 bytes in 3 claims
1.7% source text 7200000 bytes in 3 claims
@ -255,5 +255,5 @@ Total memory consumption was 394242K = 385 MB
---- code generation workspace for objects 1336 bytes in 4 claims
---- emitter array storage 161792 bytes in 2062 claims
18.4% was overhead - 74476488 bytes = 72730K = 71 MB
18.4% was overhead - 74473256 bytes = 72727K = 71 MB

View file

@ -1,6 +1,6 @@
100.0% in inform7 run
55.4% in compilation to Inter
40.0% in //Sequence::undertake_queued_tasks//
39.9% in //Sequence::undertake_queued_tasks//
3.5% in //MajorNodes::pre_pass//
2.5% in //MajorNodes::pass_1//
2.0% in //RTPhrasebook::compile_entries//
@ -17,10 +17,10 @@
0.1% in //Task::make_built_in_kind_constructors//
0.1% in //World::stages_II_and_III//
1.9% not specifically accounted for
42.6% in running Inter pipeline
12.4% in step preparation
42.5% in running Inter pipeline
12.0% in step preparation
9.6% in inter step 7/16: consolidate-text
7.8% in inter step 2/16: link
7.9% in inter step 2/16: link
6.3% in inter step 16/16: generate inform6 -> auto.inf
1.4% in inter step 11/16: make-identifiers-unique
0.4% in inter step 12/16: reconcile-verbs
@ -33,6 +33,6 @@
0.1% in inter step 3/16: merge-template <- none
0.1% in inter step 4/16: parse-linked-matter
0.1% in inter step 5/16: resolve-conditional-compilation
2.5% not specifically accounted for
2.7% not specifically accounted for
1.7% in supervisor
0.2% not specifically accounted for
0.3% not specifically accounted for

View file

@ -20,6 +20,7 @@ which use this module:
@e C_property_CLASS
@e C_pv_pair_CLASS
@e C_property_owner_CLASS
@e C_supported_opcode_CLASS
=
DECLARE_CLASS(code_generator)
@ -32,6 +33,7 @@ DECLARE_CLASS(C_dword)
DECLARE_CLASS(C_property)
DECLARE_CLASS(C_pv_pair)
DECLARE_CLASS(C_property_owner)
DECLARE_CLASS(C_supported_opcode)
@ Like all modules, this one must define a |start| and |end| function:

View file

@ -24,76 +24,134 @@ void CAssembly::end(code_generation *gen) {
@
=
typedef struct C_supported_opcode {
struct text_stream *name;
int store_this_operand[MAX_OPERANDS_IN_INTER_ASSEMBLY];
int vararg_operand;
int speculative;
CLASS_DEFINITION
} C_supported_opcode;
C_supported_opcode *CAssembly::new_opcode(code_generation *gen, text_stream *name, int s1, int s2, int va) {
C_supported_opcode *opc = CREATE(C_supported_opcode);
opc->speculative = FALSE;
opc->name = Str::duplicate(name);
for (int i=0; i<16; i++) opc->store_this_operand[i] = FALSE;
if (s1 >= 1) opc->store_this_operand[s1] = TRUE;
if (s2 >= 1) opc->store_this_operand[s2] = TRUE;
opc->vararg_operand = va;
Dictionaries::create(C_GEN_DATA(C_supported_opcodes), name);
Dictionaries::write_value(C_GEN_DATA(C_supported_opcodes), name, opc);
return opc;
}
C_supported_opcode *CAssembly::find_opcode(code_generation *gen, text_stream *name) {
if (C_GEN_DATA(C_supported_opcodes) == NULL) {
C_GEN_DATA(C_supported_opcodes) = Dictionaries::new(256, FALSE);
@<Stock with the basics@>;
}
C_supported_opcode *opc;
if (Dictionaries::find(C_GEN_DATA(C_supported_opcodes), name)) {
opc = Dictionaries::read_value(C_GEN_DATA(C_supported_opcodes), name);
} else {
opc = CAssembly::new_opcode(gen, name, -1, -1, -1);
opc->speculative = TRUE;
WRITE_TO(STDERR, "Speculative %S\n", name);
internal_error("zap");
}
return opc;
}
@<Stock with the basics@> =
CAssembly::new_opcode(gen, I"@read_gprop", 4, -1, -1);
CAssembly::new_opcode(gen, I"@write_gprop", -1, -1, -1);
CAssembly::new_opcode(gen, I"@acos", 2, -1, -1);
CAssembly::new_opcode(gen, I"@add", 3, -1, -1);
CAssembly::new_opcode(gen, I"@aload", 3, -1, -1);
CAssembly::new_opcode(gen, I"@aloadb", 3, -1, -1);
CAssembly::new_opcode(gen, I"@aloads", 3, -1, -1);
CAssembly::new_opcode(gen, I"@asin", 2, -1, -1);
CAssembly::new_opcode(gen, I"@atan", 2, -1, -1);
CAssembly::new_opcode(gen, I"@binarysearch", 8, -1, -1);
CAssembly::new_opcode(gen, I"@call", 3, -1, 2);
CAssembly::new_opcode(gen, I"@ceil", 2, -1, -1);
CAssembly::new_opcode(gen, I"@copy", 2, -1, -1);
CAssembly::new_opcode(gen, I"@cos", 2, -1, -1);
CAssembly::new_opcode(gen, I"@div", 3, -1, -1);
CAssembly::new_opcode(gen, I"@exp", 2, -1, -1);
CAssembly::new_opcode(gen, I"@fadd", 3, -1, -1);
CAssembly::new_opcode(gen, I"@fdiv", 3, -1, -1);
CAssembly::new_opcode(gen, I"@floor", 2, -1, -1);
CAssembly::new_opcode(gen, I"@fmod", 3, 4, -1);
CAssembly::new_opcode(gen, I"@fmul", 3, -1, -1);
CAssembly::new_opcode(gen, I"@fsub", 3, -1, -1);
CAssembly::new_opcode(gen, I"@ftonumn", 2, -1, -1);
CAssembly::new_opcode(gen, I"@ftonumz", 2, -1, -1);
CAssembly::new_opcode(gen, I"@gestalt", 3, -1, -1);
CAssembly::new_opcode(gen, I"@glk", 3, -1, 2);
CAssembly::new_opcode(gen, I"@hasundo", 1, -1, -1);
CAssembly::new_opcode(gen, I"@jeq", -1, -1, -1);
CAssembly::new_opcode(gen, I"@jfeq", -1, -1, -1);
CAssembly::new_opcode(gen, I"@jfge", -1, -1, -1);
CAssembly::new_opcode(gen, I"@jflt", -1, -1, -1);
CAssembly::new_opcode(gen, I"@jisinf", -1, -1, -1);
CAssembly::new_opcode(gen, I"@jisnan", -1, -1, -1);
CAssembly::new_opcode(gen, I"@jleu", -1, -1, -1);
CAssembly::new_opcode(gen, I"@jnz", -1, -1, -1);
CAssembly::new_opcode(gen, I"@jz", -1, -1, -1);
CAssembly::new_opcode(gen, I"@log", 2, -1, -1);
CAssembly::new_opcode(gen, I"@malloc", -1, -1, -1);
CAssembly::new_opcode(gen, I"@mcopy", -1, -1, -1);
CAssembly::new_opcode(gen, I"@mfree", -1, -1, -1);
CAssembly::new_opcode(gen, I"@mod", 3, -1, -1);
CAssembly::new_opcode(gen, I"@mul", 3, -1, -1);
CAssembly::new_opcode(gen, I"@neg", 2, -1, -1);
CAssembly::new_opcode(gen, I"@nop", -1, -1, -1);
CAssembly::new_opcode(gen, I"@numtof", 2, -1, -1);
CAssembly::new_opcode(gen, I"@pow", 3, -1, -1);
CAssembly::new_opcode(gen, I"@quit", -1, -1, -1);
CAssembly::new_opcode(gen, I"@random", 2, -1, -1);
CAssembly::new_opcode(gen, I"@restart", -1, -1, -1);
CAssembly::new_opcode(gen, I"@restore", -1, -1, -1);
CAssembly::new_opcode(gen, I"@restoreundo", 1, -1, -1);
CAssembly::new_opcode(gen, I"@return", -1, -1, -1);
CAssembly::new_opcode(gen, I"@save", -1, -1, -1);
CAssembly::new_opcode(gen, I"@saveundo", 1, -1, -1);
CAssembly::new_opcode(gen, I"@setiosys", -1, -1, -1);
CAssembly::new_opcode(gen, I"@setrandom", -1, -1, -1);
CAssembly::new_opcode(gen, I"@shiftl", 3, -1, -1);
CAssembly::new_opcode(gen, I"@sin", 2, -1, -1);
CAssembly::new_opcode(gen, I"@sqrt", 2, -1, -1);
CAssembly::new_opcode(gen, I"@streamchar", -1, -1, -1);
CAssembly::new_opcode(gen, I"@streamnum", -1, -1, -1);
CAssembly::new_opcode(gen, I"@streamunichar", -1, -1, -1);
CAssembly::new_opcode(gen, I"@sub", 3, -1, -1);
CAssembly::new_opcode(gen, I"@tan", 2, -1, -1);
CAssembly::new_opcode(gen, I"@ushiftr", -1, -1, -1);
CAssembly::new_opcode(gen, I"@verify", -1, -1, -1);
@ =
void CAssembly::assembly(code_generator *cgt, code_generation *gen,
text_stream *opcode, int operand_count, inter_tree_node **operands,
inter_tree_node *label, int label_sense, int void_context) {
text_stream *OUT = CodeGen::current(gen);
C_supported_opcode *opc = CAssembly::find_opcode(gen, opcode);
int vararg_operands_from = 0, vararg_operands_to = 0, hacky_extras = FALSE;
int store_this_operand[MAX_OPERANDS_IN_INTER_ASSEMBLY];
for (int i=0; i<16; i++) store_this_operand[i] = FALSE;
if (opc->vararg_operand >= 0) { vararg_operands_from = opc->vararg_operand; vararg_operands_to = operand_count-1; }
if (Str::eq(opcode, I"@read_gprop")) { store_this_operand[4] = TRUE; hacky_extras = TRUE;
if (Str::eq(opcode, I"@read_gprop")) {
hacky_extras = TRUE;
C_GEN_DATA(objdata.value_property_holders_needed) = TRUE;
}
if (Str::eq(opcode, I"@write_gprop")) { hacky_extras = TRUE;
if (Str::eq(opcode, I"@write_gprop")) {
hacky_extras = TRUE;
C_GEN_DATA(objdata.value_property_holders_needed) = TRUE;
}
if (Str::eq(opcode, I"@acos")) store_this_operand[2] = TRUE;
if (Str::eq(opcode, I"@add")) store_this_operand[3] = TRUE;
if (Str::eq(opcode, I"@aload")) store_this_operand[3] = TRUE;
if (Str::eq(opcode, I"@aloadb")) store_this_operand[3] = TRUE;
if (Str::eq(opcode, I"@aloads")) store_this_operand[3] = TRUE;
if (Str::eq(opcode, I"@asin")) store_this_operand[2] = TRUE;
if (Str::eq(opcode, I"@atan")) store_this_operand[2] = TRUE;
if (Str::eq(opcode, I"@binarysearch")) store_this_operand[8] = TRUE;
if (Str::eq(opcode, I"@ceil")) store_this_operand[2] = TRUE;
if (Str::eq(opcode, I"@call")) {
store_this_operand[3] = TRUE;
vararg_operands_from = 2; vararg_operands_to = operand_count-1;
}
if (Str::eq(opcode, I"@copy")) store_this_operand[2] = TRUE;
if (Str::eq(opcode, I"@cos")) store_this_operand[2] = TRUE;
if (Str::eq(opcode, I"@div")) store_this_operand[3] = TRUE;
if (Str::eq(opcode, I"@exp")) store_this_operand[2] = TRUE;
if (Str::eq(opcode, I"@fadd")) store_this_operand[3] = TRUE;
if (Str::eq(opcode, I"@fdiv")) store_this_operand[3] = TRUE;
if (Str::eq(opcode, I"@floor")) store_this_operand[2] = TRUE;
if (Str::eq(opcode, I"@fmod")) {
store_this_operand[3] = TRUE;
store_this_operand[4] = TRUE;
}
if (Str::eq(opcode, I"@fmul")) store_this_operand[3] = TRUE;
if (Str::eq(opcode, I"@fsub")) store_this_operand[3] = TRUE;
if (Str::eq(opcode, I"@ftonumn")) store_this_operand[2] = TRUE;
if (Str::eq(opcode, I"@ftonumz")) store_this_operand[2] = TRUE;
if (Str::eq(opcode, I"@gestalt")) store_this_operand[3] = TRUE;
if (Str::eq(opcode, I"@glk")) {
store_this_operand[3] = TRUE;
vararg_operands_from = 2; vararg_operands_to = operand_count-1;
}
if (Str::eq(opcode, I"@hasundo")) store_this_operand[1] = TRUE;
if (Str::eq(opcode, I"@log")) store_this_operand[2] = TRUE;
if (Str::eq(opcode, I"@mod")) store_this_operand[3] = TRUE;
if (Str::eq(opcode, I"@mul")) store_this_operand[3] = TRUE;
if (Str::eq(opcode, I"@neg")) store_this_operand[2] = TRUE;
if (Str::eq(opcode, I"@numtof")) store_this_operand[2] = TRUE;
if (Str::eq(opcode, I"@pow")) store_this_operand[3] = TRUE;
if (Str::eq(opcode, I"@random")) store_this_operand[2] = TRUE;
if (Str::eq(opcode, I"@restoreundo")) store_this_operand[1] = TRUE;
if (Str::eq(opcode, I"@saveundo")) store_this_operand[1] = TRUE;
if (Str::eq(opcode, I"@shiftl")) store_this_operand[3] = TRUE;
if (Str::eq(opcode, I"@sin")) store_this_operand[2] = TRUE;
if (Str::eq(opcode, I"@sqrt")) store_this_operand[2] = TRUE;
if (Str::eq(opcode, I"@sub")) store_this_operand[3] = TRUE;
if (Str::eq(opcode, I"@tan")) store_this_operand[2] = TRUE;
if (Str::eq(opcode, I"@xfunction")) {
store_this_operand[3] = TRUE;
vararg_operands_from = 2; vararg_operands_to = operand_count-1;
}
int pushed_result = FALSE;
int num = 1;
if (Str::eq(opcode, I"@return")) {
@ -105,13 +163,13 @@ void CAssembly::assembly(code_generator *cgt, code_generation *gen,
num = 0;
}
for (int opc = 1; opc <= operand_count; opc++) {
if (opc > num) WRITE(", ");
for (int operand = 1; operand <= operand_count; operand++) {
if (operand > num) WRITE(", ");
TEMPORARY_TEXT(write_to)
CodeGen::select_temporary(gen, write_to);
Vanilla::node(gen, operands[opc-1]);
Vanilla::node(gen, operands[operand-1]);
CodeGen::deselect_temporary(gen);
if (store_this_operand[opc]) {
if (opc->store_this_operand[operand]) {
if (Str::eq(write_to, I"i7_mgl_sp")) { WRITE("&(proc->state.tmp)", write_to); pushed_result = TRUE; }
else if (Str::eq(write_to, I"0")) WRITE("NULL");
else WRITE("&%S", write_to);

View file

@ -103,6 +103,7 @@ int C_symbols_header_segments[] = {
typedef struct C_generation_data {
int compile_main;
int compile_symbols;
struct dictionary *C_supported_opcodes;
struct C_generation_memory_model_data memdata;
struct C_generation_function_model_data fndata;
struct C_generation_object_model_data objdata;
@ -114,6 +115,7 @@ typedef struct C_generation_data {
void CTarget::initialise_data(code_generation *gen) {
C_GEN_DATA(compile_main) = TRUE;
C_GEN_DATA(compile_symbols) = FALSE;
C_GEN_DATA(C_supported_opcodes) = NULL;
CMemoryModel::initialise_data(gen);
CFunctionModel::initialise_data(gen);
CObjectModel::initialise_data(gen);