mirror of
https://github.com/ganelson/inform.git
synced 2024-07-02 23:14:57 +03:00
Passed ArithmeticOperations test in C
This commit is contained in:
parent
3b80fb56e1
commit
b9dd4b657d
|
@ -233,16 +233,29 @@ is 20. We instead compile this as
|
|||
<span class="string-syntax"> } else {</span>
|
||||
<span class="string-syntax"> CodeGen::Targets::begin_array(gen, CodeGen::CL::name(con_name), format);</span>
|
||||
<span class="string-syntax"> if (hang_one) CodeGen::Targets::array_entry(gen, I"</span><span class="constant-syntax">1</span><span class="string-syntax">", format);</span>
|
||||
<span class="string-syntax"> for (int i=DATA_CONST_IFLD; i<P->W.extent; i=i+2) {</span>
|
||||
<span class="string-syntax"> if (P->W.data[i] != DIVIDER_IVAL) {</span>
|
||||
<span class="string-syntax"> TEMPORARY_TEXT(entry)</span>
|
||||
<span class="string-syntax"> CodeGen::select_temporary(gen, entry);</span>
|
||||
<span class="string-syntax"> </span><span class="comment-syntax"> if ((do_not_bracket == FALSE) && (P->W.data[i] != DIVIDER_IVAL)) WRITE("(");</span>
|
||||
<span class="string-syntax"> CodeGen::CL::literal(gen, con_name, Inter::Packages::scope_of(P), P->W.data[i], P->W.data[i+1], unsub);</span>
|
||||
<span class="string-syntax"> </span><span class="comment-syntax"> if ((do_not_bracket == FALSE) && (P->W.data[i] != DIVIDER_IVAL)) WRITE(")");</span>
|
||||
<span class="string-syntax"> CodeGen::deselect_temporary(gen);</span>
|
||||
<span class="string-syntax"> CodeGen::Targets::array_entry(gen, entry, format);</span>
|
||||
<span class="string-syntax"> DISCARD_TEXT(entry)</span>
|
||||
<span class="string-syntax"> int entry_count = 0;</span>
|
||||
<span class="string-syntax"> for (int i=DATA_CONST_IFLD; i<P->W.extent; i=i+2)</span>
|
||||
<span class="string-syntax"> if (P->W.data[i] != DIVIDER_IVAL)</span>
|
||||
<span class="string-syntax"> entry_count++;</span>
|
||||
<span class="string-syntax"> if (hang_one) entry_count++;</span>
|
||||
<span class="string-syntax"> inter_ti e = 0; int ips = FALSE;</span>
|
||||
<span class="string-syntax"> if ((entry_count == 1) && (Inter::Symbols::read_annotation(con_name, ASSIMILATED_IANN) >= 0)) {</span>
|
||||
<span class="string-syntax"> inter_ti val1 = P->W.data[DATA_CONST_IFLD], val2 = P->W.data[DATA_CONST_IFLD+1];</span>
|
||||
<span class="string-syntax"> e = CodeGen::CL::evaluate(gen, Inter::Packages::scope_of(P), val1, val2, &ips);</span>
|
||||
<span class="string-syntax"> }</span>
|
||||
<span class="string-syntax"> if (e > 1) {</span>
|
||||
<span class="string-syntax"> LOG("</span><span class="identifier-syntax">Entry</span><span class="plain-syntax"> </span><span class="identifier-syntax">count</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> </span><span class="identifier-syntax">on</span><span class="plain-syntax"> %</span><span class="identifier-syntax">S</span><span class="plain-syntax"> </span><span class="identifier-syntax">masks</span><span class="plain-syntax"> %</span><span class="identifier-syntax">d</span><span class="plain-syntax"> </span><span class="identifier-syntax">blanks</span><span class="plain-syntax">\</span><span class="identifier-syntax">n</span><span class="string-syntax">", CodeGen::CL::name(con_name), e);</span>
|
||||
<span class="string-syntax"> CodeGen::Targets::array_entries(gen, (int) e, ips, format);</span>
|
||||
<span class="string-syntax"> } else {</span>
|
||||
<span class="string-syntax"> for (int i=DATA_CONST_IFLD; i<P->W.extent; i=i+2) {</span>
|
||||
<span class="string-syntax"> if (P->W.data[i] != DIVIDER_IVAL) {</span>
|
||||
<span class="string-syntax"> TEMPORARY_TEXT(entry)</span>
|
||||
<span class="string-syntax"> CodeGen::select_temporary(gen, entry);</span>
|
||||
<span class="string-syntax"> CodeGen::CL::literal(gen, con_name, Inter::Packages::scope_of(P), P->W.data[i], P->W.data[i+1], unsub);</span>
|
||||
<span class="string-syntax"> CodeGen::deselect_temporary(gen);</span>
|
||||
<span class="string-syntax"> CodeGen::Targets::array_entry(gen, entry, format);</span>
|
||||
<span class="string-syntax"> DISCARD_TEXT(entry)</span>
|
||||
<span class="string-syntax"> }</span>
|
||||
<span class="string-syntax"> }</span>
|
||||
<span class="string-syntax"> }</span>
|
||||
<span class="string-syntax"> CodeGen::Targets::end_array(gen, format);</span>
|
||||
|
@ -396,6 +409,47 @@ is 20. We instead compile this as
|
|||
<span class="string-syntax"> printing_mode = FALSE;</span>
|
||||
<span class="string-syntax">}</span>
|
||||
|
||||
<span class="string-syntax">inter_ti CodeGen::CL::evaluate(code_generation *gen, inter_symbols_table *T, inter_ti val1, inter_ti val2, int *ips) {</span>
|
||||
<span class="string-syntax"> if (val1 == LITERAL_IVAL) return val2;</span>
|
||||
<span class="string-syntax"> if (Inter::Symbols::is_stored_in_data(val1, val2)) {</span>
|
||||
<span class="string-syntax"> inter_symbol *aliased = InterSymbolsTables::symbol_from_data_pair_and_table(val1, val2, T);</span>
|
||||
<span class="string-syntax"> if (aliased == NULL) internal_error("</span><span class="identifier-syntax">bad</span><span class="plain-syntax"> </span><span class="identifier-syntax">aliased</span><span class="plain-syntax"> </span><span class="identifier-syntax">symbol</span><span class="string-syntax">");</span>
|
||||
<span class="string-syntax"> inter_tree_node *D = aliased->definition;</span>
|
||||
<span class="string-syntax"> if (D == NULL) internal_error("</span><span class="identifier-syntax">undefined</span><span class="plain-syntax"> </span><span class="identifier-syntax">symbol</span><span class="string-syntax">");</span>
|
||||
<span class="string-syntax"> switch (D->W.data[FORMAT_CONST_IFLD]) {</span>
|
||||
<span class="string-syntax"> case CONSTANT_DIRECT: {</span>
|
||||
<span class="string-syntax"> inter_ti dval1 = D->W.data[DATA_CONST_IFLD];</span>
|
||||
<span class="string-syntax"> inter_ti dval2 = D->W.data[DATA_CONST_IFLD + 1];</span>
|
||||
<span class="string-syntax"> inter_ti e = CodeGen::CL::evaluate(gen, Inter::Packages::scope_of(D), dval1, dval2, ips);</span>
|
||||
<span class="string-syntax"> if (e == 0) {</span>
|
||||
<span class="string-syntax"> text_stream *S = CodeGen::CL::name(aliased);</span>
|
||||
<span class="string-syntax"> if (Str::eq(S, I"</span><span class="identifier-syntax">INDIV_PROP_START</span><span class="string-syntax">")) *ips = TRUE;</span>
|
||||
<span class="string-syntax"> }</span>
|
||||
<span class="string-syntax"> LOG("</span><span class="identifier-syntax">Eval</span><span class="plain-syntax"> </span><span class="reserved-syntax">const</span><span class="plain-syntax"> $3 = %</span><span class="identifier-syntax">d</span><span class="plain-syntax">\</span><span class="identifier-syntax">n</span><span class="string-syntax">", aliased, e);</span>
|
||||
<span class="string-syntax"> return e;</span>
|
||||
<span class="string-syntax"> }</span>
|
||||
<span class="string-syntax"> case CONSTANT_SUM_LIST:</span>
|
||||
<span class="string-syntax"> case CONSTANT_PRODUCT_LIST:</span>
|
||||
<span class="string-syntax"> case CONSTANT_DIFFERENCE_LIST:</span>
|
||||
<span class="string-syntax"> case CONSTANT_QUOTIENT_LIST: {</span>
|
||||
<span class="string-syntax"> inter_ti result = 0;</span>
|
||||
<span class="string-syntax"> for (int i=DATA_CONST_IFLD; i<D->W.extent; i=i+2) {</span>
|
||||
<span class="string-syntax"> inter_ti extra = CodeGen::CL::evaluate(gen, Inter::Packages::scope_of(D), D->W.data[i], D->W.data[i+1], ips);</span>
|
||||
<span class="string-syntax"> if (i == DATA_CONST_IFLD) result = extra;</span>
|
||||
<span class="string-syntax"> else {</span>
|
||||
<span class="string-syntax"> if (D->W.data[FORMAT_CONST_IFLD] == CONSTANT_SUM_LIST) result = result + extra;</span>
|
||||
<span class="string-syntax"> if (D->W.data[FORMAT_CONST_IFLD] == CONSTANT_PRODUCT_LIST) result = result * extra;</span>
|
||||
<span class="string-syntax"> if (D->W.data[FORMAT_CONST_IFLD] == CONSTANT_DIFFERENCE_LIST) result = result - extra;</span>
|
||||
<span class="string-syntax"> if (D->W.data[FORMAT_CONST_IFLD] == CONSTANT_QUOTIENT_LIST) result = result / extra;</span>
|
||||
<span class="string-syntax"> }</span>
|
||||
<span class="string-syntax"> }</span>
|
||||
<span class="string-syntax"> return result;</span>
|
||||
<span class="string-syntax"> }</span>
|
||||
<span class="string-syntax"> }</span>
|
||||
<span class="string-syntax"> }</span>
|
||||
<span class="string-syntax"> return 0;</span>
|
||||
<span class="string-syntax">}</span>
|
||||
|
||||
<span class="string-syntax">void CodeGen::CL::literal(code_generation *gen, inter_symbol *con_name, inter_symbols_table *T, inter_ti val1, inter_ti val2, int unsub) {</span>
|
||||
<span class="string-syntax"> inter_tree *I = gen->from;</span>
|
||||
<span class="string-syntax"> text_stream *OUT = CodeGen::current(gen);</span>
|
||||
|
@ -461,11 +515,11 @@ is 20. We instead compile this as
|
|||
<span class="string-syntax"> return symb->symbol_name;</span>
|
||||
<span class="string-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The function CodeGen::CL::constant_depth appears nowhere else.</li><li>The function CodeGen::CL::constant_depth_inner appears nowhere else.</li><li>The function CodeGen::CL::literal_text_at is used in Frame Control (<a href="2-fc.html#SP1">§1</a>).</li><li>The function CodeGen::CL::compare_tlh appears nowhere else.</li><li>The function CodeGen::CL::sort_literals is used in Code Generation (<a href="2-cg.html#SP8_3">§8.3</a>).</li><li>The function CodeGen::CL::enter_box_mode is used in Frame Control (<a href="2-fc.html#SP3">§3</a>).</li><li>The function CodeGen::CL::exit_box_mode is used in Frame Control (<a href="2-fc.html#SP3">§3</a>).</li><li>The function CodeGen::CL::enter_print_mode is used in Frame Control (<a href="2-fc.html#SP3">§3</a>).</li><li>The function CodeGen::CL::exit_print_mode is used in Frame Control (<a href="2-fc.html#SP3">§3</a>).</li><li>The function CodeGen::CL::literal is used in Frame Control (<a href="2-fc.html#SP2">§2</a>), Instances and Properties (<a href="2-iap.html#SP5_8_5_1_1">§5.8.5.1.1</a>, <a href="2-iap.html#SP8">§8</a>), Generating Inform 6 (<a href="4-fi6.html#SP8">§8</a>), C Global Variables (<a href="5-cgv.html#SP2">§2</a>).</li><li>The function CodeGen::CL::name is used in Frame Control (<a href="2-fc.html#SP2">§2</a>), Instances and Properties (<a href="2-iap.html#SP4_5">§4.5</a>, <a href="2-iap.html#SP4_6">§4.6</a>, <a href="2-iap.html#SP5_5">§5.5</a>, <a href="2-iap.html#SP5_7">§5.7</a>, <a href="2-iap.html#SP5_8_4">§5.8.4</a>, <a href="2-iap.html#SP5_9">§5.9</a>, <a href="2-iap.html#SP5_11">§5.11</a>, <a href="2-iap.html#SP5_11_2">§5.11.2</a>, <a href="2-iap.html#SP5_11_2_1">§5.11.2.1</a>, <a href="2-iap.html#SP5_11_2_2">§5.11.2.2</a>, <a href="2-iap.html#SP6">§6</a>, <a href="2-iap.html#SP8">§8</a>), Generating Inform 6 (<a href="4-fi6.html#SP7">§7</a>, <a href="4-fi6.html#SP8">§8</a>), C Object Model (<a href="5-com.html#SP6">§6</a>), C Function Model (<a href="5-cfm.html#SP1">§1</a>), C Global Variables (<a href="5-cgv.html#SP2">§2</a>).</li><li>The structure text_literal_holder is private to this section.</li></ul>
|
||||
<ul class="endnotetexts"><li>The function CodeGen::CL::constant_depth appears nowhere else.</li><li>The function CodeGen::CL::constant_depth_inner appears nowhere else.</li><li>The function CodeGen::CL::literal_text_at is used in Frame Control (<a href="2-fc.html#SP1">§1</a>).</li><li>The function CodeGen::CL::compare_tlh appears nowhere else.</li><li>The function CodeGen::CL::sort_literals is used in Code Generation (<a href="2-cg.html#SP8_3">§8.3</a>).</li><li>The function CodeGen::CL::enter_box_mode is used in Frame Control (<a href="2-fc.html#SP3">§3</a>).</li><li>The function CodeGen::CL::exit_box_mode is used in Frame Control (<a href="2-fc.html#SP3">§3</a>).</li><li>The function CodeGen::CL::enter_print_mode is used in Frame Control (<a href="2-fc.html#SP3">§3</a>).</li><li>The function CodeGen::CL::exit_print_mode is used in Frame Control (<a href="2-fc.html#SP3">§3</a>).</li><li>The function CodeGen::CL::evaluate appears nowhere else.</li><li>The function CodeGen::CL::literal is used in Frame Control (<a href="2-fc.html#SP2">§2</a>), Instances and Properties (<a href="2-iap.html#SP5_8_5_1_1">§5.8.5.1.1</a>, <a href="2-iap.html#SP8">§8</a>), Generating Inform 6 (<a href="4-fi6.html#SP8">§8</a>), C Global Variables (<a href="5-cgv.html#SP2">§2</a>).</li><li>The function CodeGen::CL::name is used in Frame Control (<a href="2-fc.html#SP2">§2</a>), Instances and Properties (<a href="2-iap.html#SP4_5">§4.5</a>, <a href="2-iap.html#SP4_6">§4.6</a>, <a href="2-iap.html#SP5_5">§5.5</a>, <a href="2-iap.html#SP5_7">§5.7</a>, <a href="2-iap.html#SP5_8_4">§5.8.4</a>, <a href="2-iap.html#SP5_9">§5.9</a>, <a href="2-iap.html#SP5_11">§5.11</a>, <a href="2-iap.html#SP5_11_2">§5.11.2</a>, <a href="2-iap.html#SP5_11_2_1">§5.11.2.1</a>, <a href="2-iap.html#SP5_11_2_2">§5.11.2.2</a>, <a href="2-iap.html#SP6">§6</a>, <a href="2-iap.html#SP8">§8</a>), Generating Inform 6 (<a href="4-fi6.html#SP7">§7</a>, <a href="4-fi6.html#SP8">§8</a>), C Object Model (<a href="5-com.html#SP6">§6</a>), C Function Model (<a href="5-cfm.html#SP1">§1</a>), C Global Variables (<a href="5-cgv.html#SP2">§2</a>).</li><li>The structure text_literal_holder is private to this section.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::CL::node_is_ref_to</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">CodeGen::CL::node_is_ref_to</span></span>:<br/>C Memory Model - <a href="5-cmm.html#SP10">§10</a><br/>C Object Model - <a href="5-com.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</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="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">seek_bip</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::CL::node_is_ref_to</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">CodeGen::CL::node_is_ref_to</span></span>:<br/>C Memory Model - <a href="5-cmm.html#SP11">§11</a><br/>C Object Model - <a href="5-com.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</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="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">seek_bip</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">reffed</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">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">P</span><span class="plain-syntax">-></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="identifier-syntax">REFERENCE_IST</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterTree::first_child</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -201,7 +201,7 @@ always be done in a way which is then undone, restoring the previous state:
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">generated_segment</span><span class="plain-syntax"> *</span><span class="function-syntax">CodeGen::select</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">CodeGen::select</span></span>:<br/>Frame Control - <a href="2-fc.html#SP1">§1</a><br/>Constants and Literals - <a href="2-cal.html#SP2">§2</a><br/>Instances and Properties - <a href="2-iap.html#SP1">§1</a>, <a href="2-iap.html#SP4_5">§4.5</a>, <a href="2-iap.html#SP4_6">§4.6</a>, <a href="2-iap.html#SP5">§5</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3">§3</a>, <a href="4-fi6.html#SP7">§7</a>, <a href="4-fi6.html#SP8">§8</a><br/>Generating C - <a href="5-fnc.html#SP5">§5</a>, <a href="5-fnc.html#SP6">§6</a><br/>C Memory Model - <a href="5-cmm.html#SP3">§3</a>, <a href="5-cmm.html#SP4">§4</a>, <a href="5-cmm.html#SP7_2">§7.2</a>, <a href="5-cmm.html#SP8">§8</a>, <a href="5-cmm.html#SP9">§9</a><br/>C Object Model - <a href="5-com.html#SP1_3">§1.3</a>, <a href="5-com.html#SP4">§4</a>, <a href="5-com.html#SP7">§7</a>, <a href="5-com.html#SP8">§8</a>, <a href="5-com.html#SP1_4">§1.4</a>, <a href="5-com.html#SP1_5">§1.5</a>, <a href="5-com.html#SP1_6">§1.6</a>, <a href="5-com.html#SP9">§9</a><br/>C Function Model - <a href="5-cfm.html#SP1">§1</a><br/>C Global Variables - <a href="5-cgv.html#SP2">§2</a><br/>C Literals - <a href="5-clt.html#SP1">§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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">generated_segment</span><span class="plain-syntax"> *</span><span class="function-syntax">CodeGen::select</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">CodeGen::select</span></span>:<br/>Frame Control - <a href="2-fc.html#SP1">§1</a><br/>Constants and Literals - <a href="2-cal.html#SP2">§2</a><br/>Instances and Properties - <a href="2-iap.html#SP1">§1</a>, <a href="2-iap.html#SP4_5">§4.5</a>, <a href="2-iap.html#SP4_6">§4.6</a>, <a href="2-iap.html#SP5">§5</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3">§3</a>, <a href="4-fi6.html#SP7">§7</a>, <a href="4-fi6.html#SP8">§8</a><br/>Generating C - <a href="5-fnc.html#SP5">§5</a>, <a href="5-fnc.html#SP6">§6</a><br/>C Memory Model - <a href="5-cmm.html#SP3">§3</a>, <a href="5-cmm.html#SP4">§4</a>, <a href="5-cmm.html#SP7_2">§7.2</a>, <a href="5-cmm.html#SP8">§8</a>, <a href="5-cmm.html#SP10">§10</a><br/>C Object Model - <a href="5-com.html#SP1_3">§1.3</a>, <a href="5-com.html#SP4">§4</a>, <a href="5-com.html#SP7">§7</a>, <a href="5-com.html#SP8">§8</a>, <a href="5-com.html#SP1_4">§1.4</a>, <a href="5-com.html#SP1_5">§1.5</a>, <a href="5-com.html#SP1_6">§1.6</a>, <a href="5-com.html#SP9">§9</a><br/>C Function Model - <a href="5-cfm.html#SP1">§1</a><br/>C Global Variables - <a href="5-cgv.html#SP2">§2</a><br/>C Literals - <a href="5-clt.html#SP1">§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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">generated_segment</span><span class="plain-syntax"> *</span><span class="identifier-syntax">saved</span><span class="plain-syntax"> = </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">current_segment</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">i</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">i</span><span class="plain-syntax"> >= </span><span class="constant-syntax">MAX_CG_SEGMENTS</span><span class="plain-syntax">)) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"out of range"</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">-></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">"poorly timed selection"</span><span class="plain-syntax">);</span>
|
||||
|
@ -209,7 +209,7 @@ always be done in a way which is then undone, restoring the previous state:
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">saved</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</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">CodeGen::deselect</span></span>:<br/>Frame Control - <a href="2-fc.html#SP1">§1</a><br/>Constants and Literals - <a href="2-cal.html#SP2">§2</a><br/>Instances and Properties - <a href="2-iap.html#SP1">§1</a>, <a href="2-iap.html#SP4_5">§4.5</a>, <a href="2-iap.html#SP4_6">§4.6</a>, <a href="2-iap.html#SP5">§5</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3">§3</a>, <a href="4-fi6.html#SP7">§7</a>, <a href="4-fi6.html#SP8">§8</a><br/>Generating C - <a href="5-fnc.html#SP5">§5</a>, <a href="5-fnc.html#SP6">§6</a><br/>C Memory Model - <a href="5-cmm.html#SP3">§3</a>, <a href="5-cmm.html#SP4">§4</a>, <a href="5-cmm.html#SP7_2">§7.2</a>, <a href="5-cmm.html#SP8">§8</a>, <a href="5-cmm.html#SP9">§9</a><br/>C Object Model - <a href="5-com.html#SP1_3">§1.3</a>, <a href="5-com.html#SP4">§4</a>, <a href="5-com.html#SP7">§7</a>, <a href="5-com.html#SP8">§8</a>, <a href="5-com.html#SP1_4">§1.4</a>, <a href="5-com.html#SP1_5">§1.5</a>, <a href="5-com.html#SP1_6">§1.6</a>, <a href="5-com.html#SP9">§9</a><br/>C Function Model - <a href="5-cfm.html#SP1">§1</a><br/>C Global Variables - <a href="5-cgv.html#SP2">§2</a><br/>C Literals - <a href="5-clt.html#SP1">§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="reserved-syntax">generated_segment</span><span class="plain-syntax"> *</span><span class="identifier-syntax">saved</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::deselect</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">CodeGen::deselect</span></span>:<br/>Frame Control - <a href="2-fc.html#SP1">§1</a><br/>Constants and Literals - <a href="2-cal.html#SP2">§2</a><br/>Instances and Properties - <a href="2-iap.html#SP1">§1</a>, <a href="2-iap.html#SP4_5">§4.5</a>, <a href="2-iap.html#SP4_6">§4.6</a>, <a href="2-iap.html#SP5">§5</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3">§3</a>, <a href="4-fi6.html#SP7">§7</a>, <a href="4-fi6.html#SP8">§8</a><br/>Generating C - <a href="5-fnc.html#SP5">§5</a>, <a href="5-fnc.html#SP6">§6</a><br/>C Memory Model - <a href="5-cmm.html#SP3">§3</a>, <a href="5-cmm.html#SP4">§4</a>, <a href="5-cmm.html#SP7_2">§7.2</a>, <a href="5-cmm.html#SP8">§8</a>, <a href="5-cmm.html#SP10">§10</a><br/>C Object Model - <a href="5-com.html#SP1_3">§1.3</a>, <a href="5-com.html#SP4">§4</a>, <a href="5-com.html#SP7">§7</a>, <a href="5-com.html#SP8">§8</a>, <a href="5-com.html#SP1_4">§1.4</a>, <a href="5-com.html#SP1_5">§1.5</a>, <a href="5-com.html#SP1_6">§1.6</a>, <a href="5-com.html#SP9">§9</a><br/>C Function Model - <a href="5-cfm.html#SP1">§1</a><br/>C Global Variables - <a href="5-cgv.html#SP2">§2</a><br/>C Literals - <a href="5-clt.html#SP1">§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="reserved-syntax">generated_segment</span><span class="plain-syntax"> *</span><span class="identifier-syntax">saved</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">-></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">"poorly timed deselection"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">current_segment</span><span class="plain-syntax"> = </span><span class="identifier-syntax">saved</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -238,7 +238,7 @@ we also have to direct it to a given text.
|
|||
</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('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">CodeGen::current</span></span>:<br/>Frame Control - <a href="2-fc.html#SP2">§2</a>, <a href="2-fc.html#SP3">§3</a><br/>Constants and Literals - <a href="2-cal.html#SP2">§2</a><br/>Instances and Properties - <a href="2-iap.html#SP1">§1</a>, <a href="2-iap.html#SP4_6">§4.6</a>, <a href="2-iap.html#SP5">§5</a>, <a href="2-iap.html#SP6">§6</a>, <a href="2-iap.html#SP8">§8</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3">§3</a>, <a href="4-fi6.html#SP4">§4</a>, <a href="4-fi6.html#SP5">§5</a>, <a href="4-fi6.html#SP6">§6</a>, <a href="4-fi6.html#SP7">§7</a>, <a href="4-fi6.html#SP8">§8</a><br/>Generating C - <a href="5-fnc.html#SP5">§5</a>, <a href="5-fnc.html#SP6">§6</a><br/>C Namespace - <a href="5-cnm.html#SP3">§3</a><br/>C References - <a href="5-crf.html#SP4">§4</a><br/>C Memory Model - <a href="5-cmm.html#SP3">§3</a>, <a href="5-cmm.html#SP4">§4</a>, <a href="5-cmm.html#SP7_2">§7.2</a>, <a href="5-cmm.html#SP8">§8</a>, <a href="5-cmm.html#SP9">§9</a>, <a href="5-cmm.html#SP10">§10</a><br/>C Assembly - <a href="5-cas.html#SP3">§3</a><br/>C Program Control - <a href="5-cpc.html#SP1">§1</a>, <a href="5-cpc.html#SP2">§2</a><br/>C Arithmetic - <a href="5-car.html#SP1">§1</a><br/>C Conditions - <a href="5-ccn.html#SP1">§1</a>, <a href="5-ccn.html#SP2">§2</a><br/>C Object Model - <a href="5-com.html#SP1_3">§1.3</a>, <a href="5-com.html#SP4">§4</a>, <a href="5-com.html#SP7">§7</a>, <a href="5-com.html#SP8">§8</a>, <a href="5-com.html#SP1_4">§1.4</a>, <a href="5-com.html#SP1_5">§1.5</a>, <a href="5-com.html#SP1_6">§1.6</a>, <a href="5-com.html#SP9">§9</a>, <a href="5-com.html#SP10">§10</a><br/>C Function Model - <a href="5-cfm.html#SP1">§1</a><br/>C Global Variables - <a href="5-cgv.html#SP2">§2</a><br/>C Literals - <a href="5-clt.html#SP1">§1</a>, <a href="5-clt.html#SP2">§2</a>, <a href="5-clt.html#SP3">§3</a>, <a href="5-clt.html#SP4">§4</a><br/>C Input-Output Model - <a href="5-cim.html#SP2">§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('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">CodeGen::current</span></span>:<br/>Frame Control - <a href="2-fc.html#SP2">§2</a>, <a href="2-fc.html#SP3">§3</a><br/>Constants and Literals - <a href="2-cal.html#SP2">§2</a><br/>Instances and Properties - <a href="2-iap.html#SP1">§1</a>, <a href="2-iap.html#SP4_6">§4.6</a>, <a href="2-iap.html#SP5">§5</a>, <a href="2-iap.html#SP6">§6</a>, <a href="2-iap.html#SP8">§8</a><br/>Generating Inform 6 - <a href="4-fi6.html#SP3">§3</a>, <a href="4-fi6.html#SP4">§4</a>, <a href="4-fi6.html#SP5">§5</a>, <a href="4-fi6.html#SP6">§6</a>, <a href="4-fi6.html#SP7">§7</a>, <a href="4-fi6.html#SP8">§8</a>, <a href="4-fi6.html#SP9">§9</a><br/>Generating C - <a href="5-fnc.html#SP5">§5</a>, <a href="5-fnc.html#SP6">§6</a><br/>C Namespace - <a href="5-cnm.html#SP3">§3</a><br/>C References - <a href="5-crf.html#SP4">§4</a><br/>C Memory Model - <a href="5-cmm.html#SP3">§3</a>, <a href="5-cmm.html#SP4">§4</a>, <a href="5-cmm.html#SP7_2">§7.2</a>, <a href="5-cmm.html#SP8">§8</a>, <a href="5-cmm.html#SP10">§10</a>, <a href="5-cmm.html#SP11">§11</a><br/>C Assembly - <a href="5-cas.html#SP3">§3</a><br/>C Program Control - <a href="5-cpc.html#SP1">§1</a>, <a href="5-cpc.html#SP2">§2</a><br/>C Arithmetic - <a href="5-car.html#SP1">§1</a><br/>C Conditions - <a href="5-ccn.html#SP1">§1</a>, <a href="5-ccn.html#SP2">§2</a><br/>C Object Model - <a href="5-com.html#SP1_3">§1.3</a>, <a href="5-com.html#SP4">§4</a>, <a href="5-com.html#SP7">§7</a>, <a href="5-com.html#SP8">§8</a>, <a href="5-com.html#SP1_4">§1.4</a>, <a href="5-com.html#SP1_5">§1.5</a>, <a href="5-com.html#SP1_6">§1.6</a>, <a href="5-com.html#SP9">§9</a>, <a href="5-com.html#SP10">§10</a><br/>C Function Model - <a href="5-cfm.html#SP1">§1</a><br/>C Global Variables - <a href="5-cgv.html#SP2">§2</a><br/>C Literals - <a href="5-clt.html#SP1">§1</a>, <a href="5-clt.html#SP2">§2</a>, <a href="5-clt.html#SP3">§3</a>, <a href="5-clt.html#SP4">§4</a><br/>C Input-Output Model - <a href="5-cim.html#SP2">§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">-></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">-></span><span class="element-syntax">segments</span><span class="plain-syntax">[</span><span class="constant-syntax">temporary_I7CGS</span><span class="plain-syntax">]-></span><span class="element-syntax">generated_code</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">-></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>
|
||||
|
|
|
@ -401,6 +401,7 @@ function togglePopup(material_id) {
|
|||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">BEGIN_ARRAY_MTID</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">ARRAY_ENTRY_MTID</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">ARRAY_ENTRIES_MTID</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">END_ARRAY_MTID</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">BYTE_ARRAY_FORMAT</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span>
|
||||
|
@ -410,6 +411,7 @@ function togglePopup(material_id) {
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">BEGIN_ARRAY_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation_target</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="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">const_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">ARRAY_ENTRY_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation_target</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="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">ARRAY_ENTRIES_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation_target</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">how_many</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plus_ips</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">END_ARRAY_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation_target</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">)</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::Targets::begin_array</span><button class="popup" onclick="togglePopup('usagePopup40')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup40">Usage of <span class="code-font"><span class="function-syntax">CodeGen::Targets::begin_array</span></span>:<br/>Constants and Literals - <a href="2-cal.html#SP2">§2</a><br/>Instances and Properties - <a href="2-iap.html#SP5_7">§5.7</a>, <a href="2-iap.html#SP5_8_3">§5.8.3</a>, <a href="2-iap.html#SP5_8_5_1">§5.8.5.1</a>, <a href="2-iap.html#SP5_11">§5.11</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">const_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">target</span><span class="plain-syntax">, </span><span class="constant-syntax">BEGIN_ARRAY_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">const_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">format</span><span class="plain-syntax">);</span>
|
||||
|
@ -417,13 +419,16 @@ function togglePopup(material_id) {
|
|||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::Targets::array_entry</span><button class="popup" onclick="togglePopup('usagePopup41')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup41">Usage of <span class="code-font"><span class="function-syntax">CodeGen::Targets::array_entry</span></span>:<br/>Constants and Literals - <a href="2-cal.html#SP2">§2</a><br/>Instances and Properties - <a href="2-iap.html#SP5_7">§5.7</a>, <a href="2-iap.html#SP5_8_3">§5.8.3</a>, <a href="2-iap.html#SP5_8_5_1">§5.8.5.1</a>, <a href="2-iap.html#SP5_8_5_1_1">§5.8.5.1.1</a>, <a href="2-iap.html#SP5_11_1">§5.11.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">entry</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">target</span><span class="plain-syntax">, </span><span class="constant-syntax">ARRAY_ENTRY_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">format</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::Targets::mangled_array_entry</span><button class="popup" onclick="togglePopup('usagePopup42')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup42">Usage of <span class="code-font"><span class="function-syntax">CodeGen::Targets::mangled_array_entry</span></span>:<br/>Instances and Properties - <a href="2-iap.html#SP5_7">§5.7</a>, <a href="2-iap.html#SP5_8_3">§5.8.3</a>, <a href="2-iap.html#SP5_11">§5.11</a>, <a href="2-iap.html#SP5_11_2_1">§5.11.2.1</a>, <a href="2-iap.html#SP5_11_2_2">§5.11.2.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="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::Targets::array_entries</span><button class="popup" onclick="togglePopup('usagePopup42')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup42">Usage of <span class="code-font"><span class="function-syntax">CodeGen::Targets::array_entries</span></span>:<br/>Constants and Literals - <a href="2-cal.html#SP2">§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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">how_many</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plus_ips</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">target</span><span class="plain-syntax">, </span><span class="constant-syntax">ARRAY_ENTRIES_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">how_many</span><span class="plain-syntax">, </span><span class="identifier-syntax">plus_ips</span><span class="plain-syntax">, </span><span class="identifier-syntax">format</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::Targets::mangled_array_entry</span><button class="popup" onclick="togglePopup('usagePopup43')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup43">Usage of <span class="code-font"><span class="function-syntax">CodeGen::Targets::mangled_array_entry</span></span>:<br/>Instances and Properties - <a href="2-iap.html#SP5_7">§5.7</a>, <a href="2-iap.html#SP5_8_3">§5.8.3</a>, <a href="2-iap.html#SP5_11">§5.11</a>, <a href="2-iap.html#SP5_11_2_1">§5.11.2.1</a>, <a href="2-iap.html#SP5_11_2_2">§5.11.2.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="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</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">mangled</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ft.html#SP5" class="function-link"><span class="function-syntax">CodeGen::Targets::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">mangled</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">target</span><span class="plain-syntax">, </span><span class="constant-syntax">ARRAY_ENTRY_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">mangled</span><span class="plain-syntax">, </span><span class="identifier-syntax">format</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">mangled</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::Targets::end_array</span><button class="popup" onclick="togglePopup('usagePopup43')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup43">Usage of <span class="code-font"><span class="function-syntax">CodeGen::Targets::end_array</span></span>:<br/>Constants and Literals - <a href="2-cal.html#SP2">§2</a><br/>Instances and Properties - <a href="2-iap.html#SP5_7">§5.7</a>, <a href="2-iap.html#SP5_8_3">§5.8.3</a>, <a href="2-iap.html#SP5_8_5_1">§5.8.5.1</a>, <a href="2-iap.html#SP5_11">§5.11</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::Targets::end_array</span><button class="popup" onclick="togglePopup('usagePopup44')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup44">Usage of <span class="code-font"><span class="function-syntax">CodeGen::Targets::end_array</span></span>:<br/>Constants and Literals - <a href="2-cal.html#SP2">§2</a><br/>Instances and Properties - <a href="2-iap.html#SP5_7">§5.7</a>, <a href="2-iap.html#SP5_8_3">§5.8.3</a>, <a href="2-iap.html#SP5_8_5_1">§5.8.5.1</a>, <a href="2-iap.html#SP5_11">§5.11</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">target</span><span class="plain-syntax">, </span><span class="constant-syntax">END_ARRAY_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">format</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -433,7 +438,7 @@ function togglePopup(material_id) {
|
|||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">NEW_FAKE_ACTION_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">code_generation_target</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="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">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::Targets::new_fake_action</span><button class="popup" onclick="togglePopup('usagePopup44')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup44">Usage of <span class="code-font"><span class="function-syntax">CodeGen::Targets::new_fake_action</span></span>:<br/>Constants and Literals - <a href="2-cal.html#SP2">§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="identifier-syntax">name</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::Targets::new_fake_action</span><button class="popup" onclick="togglePopup('usagePopup45')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup45">Usage of <span class="code-font"><span class="function-syntax">CodeGen::Targets::new_fake_action</span></span>:<br/>Constants and Literals - <a href="2-cal.html#SP2">§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="identifier-syntax">name</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">target</span><span class="plain-syntax">, </span><span class="constant-syntax">NEW_FAKE_ACTION_MTID</span><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">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
|
|
@ -177,10 +177,11 @@ function togglePopup(material_id) {
|
|||
<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">END_OPCODE_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP8" class="function-link"><span class="function-syntax">CodeGen::I6::end_opcode</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">BEGIN_ARRAY_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP8" class="function-link"><span class="function-syntax">CodeGen::I6::begin_array</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">ARRAY_ENTRY_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP8" class="function-link"><span class="function-syntax">CodeGen::I6::array_entry</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">END_ARRAY_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP8" class="function-link"><span class="function-syntax">CodeGen::I6::end_array</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">ARRAY_ENTRIES_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP9" class="function-link"><span class="function-syntax">CodeGen::I6::array_entries</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">END_ARRAY_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP9" class="function-link"><span class="function-syntax">CodeGen::I6::end_array</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">OFFER_PRAGMA_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP3" class="function-link"><span class="function-syntax">CodeGen::I6::offer_pragma</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">END_GENERATION_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP3" class="function-link"><span class="function-syntax">CodeGen::I6::end_generation</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">NEW_FAKE_ACTION_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP8" class="function-link"><span class="function-syntax">CodeGen::I6::new_fake_action</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">NEW_FAKE_ACTION_MTID</span><span class="plain-syntax">, </span><a href="4-fi6.html#SP9" class="function-link"><span class="function-syntax">CodeGen::I6::new_fake_action</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inform6_target</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
|
@ -943,13 +944,25 @@ trick called "stubbing", these being "stub definitions".)
|
|||
<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#SP7" 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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" (%S)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. </b>Alternatively, we can just specify how many entries there will be: they will
|
||||
then be initialised to 0.
|
||||
</p>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::I6::end_array</span><button class="popup" onclick="togglePopup('usagePopup41')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup41">Usage of <span class="code-font"><span class="function-syntax">CodeGen::I6::end_array</span></span>:<br/><a href="4-fi6.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">) {</span>
|
||||
<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::I6::array_entries</span><button class="popup" onclick="togglePopup('usagePopup41')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup41">Usage of <span class="code-font"><span class="function-syntax">CodeGen::I6::array_entries</span></span>:<br/><a href="4-fi6.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">how_many</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plus_ips</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</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#SP7" 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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">plus_ips</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" (%d + INDIV_PROP_START)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">how_many</span><span class="plain-syntax">, </span><span class="identifier-syntax">plus_ips</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">" (%d)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">how_many</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::I6::end_array</span><button class="popup" onclick="togglePopup('usagePopup42')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup42">Usage of <span class="code-font"><span class="function-syntax">CodeGen::I6::end_array</span></span>:<br/><a href="4-fi6.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</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#SP7" 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="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>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::I6::new_fake_action</span><button class="popup" onclick="togglePopup('usagePopup42')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup42">Usage of <span class="code-font"><span class="function-syntax">CodeGen::I6::new_fake_action</span></span>:<br/><a href="4-fi6.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</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="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">void</span><span class="plain-syntax"> </span><span class="function-syntax">CodeGen::I6::new_fake_action</span><button class="popup" onclick="togglePopup('usagePopup43')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup43">Usage of <span class="code-font"><span class="function-syntax">CodeGen::I6::new_fake_action</span></span>:<br/><a href="4-fi6.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</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="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="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#SP7" 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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Fake_Action %S;\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
|
|
@ -85,9 +85,19 @@ easy.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PLUS_BIP:</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="constant-syntax">INV_A1</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="constant-syntax">INV_A2</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="reserved-syntax">break</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">MINUS_BIP:</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="constant-syntax">INV_A1</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="constant-syntax">INV_A2</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="reserved-syntax">break</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">UNARYMINUS_BIP:</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="constant-syntax">INV_A1</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="reserved-syntax">break</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">TIMES_BIP:</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="constant-syntax">INV_A1</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="constant-syntax">INV_A2</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="reserved-syntax">break</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">DIVIDE_BIP:</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="constant-syntax">INV_A1</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="constant-syntax">INV_A2</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="reserved-syntax">break</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">MODULO_BIP:</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="constant-syntax">INV_A1</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="constant-syntax">INV_A2</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="reserved-syntax">break</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">TIMES_BIP:</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="constant-syntax">INV_A1</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="constant-syntax">INV_A2</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="reserved-syntax">break</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">DIVIDE_BIP:</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-cfm.html#SP1" class="function-link"><span class="function-syntax">CFunctionModel::inside_function</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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"glulx_div_r("</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</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="constant-syntax">INV_A2</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">else</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">"("</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</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="constant-syntax">INV_A2</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="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</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">MODULO_BIP:</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-cfm.html#SP1" class="function-link"><span class="function-syntax">CFunctionModel::inside_function</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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"glulx_mod_r("</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</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="constant-syntax">INV_A2</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">else</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">"("</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</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="constant-syntax">INV_A2</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="plain-syntax"> </span><span class="reserved-syntax">break</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">BITWISEAND_BIP:</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="constant-syntax">INV_A1</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="constant-syntax">INV_A2</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="reserved-syntax">break</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">BITWISEOR_BIP:</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="constant-syntax">INV_A1</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="constant-syntax">INV_A2</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="reserved-syntax">break</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">BITWISENOT_BIP:</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="constant-syntax">INV_A1</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="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
|
@ -131,105 +141,277 @@ storing <span class="extract"><span class="Extracts-extract-syntax">float</span>
|
|||
</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_exp</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_exp</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_add</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) *</span><span class="Extracts-identifier-syntax">z</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">y</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_fadd</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_fadd</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_sub</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) *</span><span class="Extracts-identifier-syntax">z</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">y</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_fdiv</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_fdiv</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_neg</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> = -</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_floor</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_floor</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_mul</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) *</span><span class="Extracts-identifier-syntax">z</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">y</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_fmod</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">w</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_fmod</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_div</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Division</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> %</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">by</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</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">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax">; }</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">ax</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">ay</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> /* </span><span class="Extracts-identifier-syntax">Since</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">C</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">doesn</span><span class="Extracts-plain-syntax">'</span><span class="Extracts-identifier-syntax">t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">guarantee</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">the</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">results</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">division</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">negative</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">numbers</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">we</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">carefully</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">convert</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">everything</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">to</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">positive</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">values</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">first</span><span class="Extracts-plain-syntax">. </span><span class="Extracts-identifier-syntax">They</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">have</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">to</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">be</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">unsigned</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">values</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">too</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">otherwise</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">the</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x80000000</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">goes</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">wonky</span><span class="Extracts-plain-syntax">. */</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax"> < </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ax</span><span class="Extracts-plain-syntax"> = (-</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> < </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ay</span><span class="Extracts-plain-syntax"> = (-</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">ax</span><span class="Extracts-plain-syntax"> / </span><span class="Extracts-identifier-syntax">ay</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ay</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = -(</span><span class="Extracts-identifier-syntax">ax</span><span class="Extracts-plain-syntax"> / </span><span class="Extracts-identifier-syntax">ay</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> }</span>
|
||||
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ax</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> < </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ay</span><span class="Extracts-plain-syntax"> = (-</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = -(</span><span class="Extracts-identifier-syntax">ax</span><span class="Extracts-plain-syntax"> / </span><span class="Extracts-identifier-syntax">ay</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ay</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">ax</span><span class="Extracts-plain-syntax"> / </span><span class="Extracts-identifier-syntax">ay</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> }</span>
|
||||
<span class="Extracts-plain-syntax"> }</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_fmul</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_fmul</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_div_r</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_div</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">y</span><span class="Extracts-plain-syntax">, &</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_fsub</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_fsub</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_mod</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Division</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> %</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">by</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</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">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax">; }</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">ax</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">ay</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> < </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ay</span><span class="Extracts-plain-syntax"> = -</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ay</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> }</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax"> < </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ax</span><span class="Extracts-plain-syntax"> = (-</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = -(</span><span class="Extracts-identifier-syntax">ax</span><span class="Extracts-plain-syntax"> % </span><span class="Extracts-identifier-syntax">ay</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ax</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">ax</span><span class="Extracts-plain-syntax"> % </span><span class="Extracts-identifier-syntax">ay</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> }</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_ftonumn</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_ftonumn</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_mod_r</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_mod</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">y</span><span class="Extracts-plain-syntax">, &</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_ftonumz</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_ftonumz</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-identifier-syntax">typedef</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">float</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">gfloat32</span><span class="Extracts-plain-syntax">;</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">gfloat32</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">val</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">res</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> *(</span><span class="Extracts-identifier-syntax">gfloat32</span><span class="Extracts-plain-syntax"> *)(&</span><span class="Extracts-identifier-syntax">res</span><span class="Extracts-plain-syntax">) = </span><span class="Extracts-identifier-syntax">val</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">res</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">gfloat32</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">val</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">gfloat32</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">res</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> *(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *)(&</span><span class="Extracts-identifier-syntax">res</span><span class="Extracts-plain-syntax">) = </span><span class="Extracts-identifier-syntax">val</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">res</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_exp</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">expf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">)));</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_fadd</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</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">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">));</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_fdiv</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</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">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">));</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_floor</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">floorf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">)));</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_fmod</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">w</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">float</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">float</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fy</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">float</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fquot</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">fmodf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">fy</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">quot</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fquot</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rem</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">((</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">-</span><span class="Extracts-identifier-syntax">fquot</span><span class="Extracts-plain-syntax">) / </span><span class="Extracts-identifier-syntax">fy</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">rem</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x0</span><span class="Extracts-plain-syntax"> || </span><span class="Extracts-identifier-syntax">rem</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x80000000</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> /* </span><span class="Extracts-identifier-syntax">When</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">the</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">quotient</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">is</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">zero</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">the</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">sign</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">has</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">been</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">lost</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">in</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">the</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">shuffle</span><span class="Extracts-plain-syntax">. </span><span class="Extracts-identifier-syntax">We</span><span class="Extracts-plain-syntax">'</span><span class="Extracts-identifier-syntax">ll</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">set</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">that</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">by</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">hand</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">based</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">on</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">the</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">original</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">arguments</span><span class="Extracts-plain-syntax">. */</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rem</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">y</span><span class="Extracts-plain-syntax">) & </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x80000000</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> }</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">quot</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">w</span><span class="Extracts-plain-syntax">) *</span><span class="Extracts-identifier-syntax">w</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">rem</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_fmul</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</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">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">));</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_fsub</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</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">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">));</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_ftonumn</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">float</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (!</span><span class="Extracts-identifier-syntax">signbit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">)) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">isnan</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">) || </span><span class="Extracts-identifier-syntax">isinf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> > </span><span class="Extracts-constant-syntax">2147483647</span><span class="Extracts-plain-syntax">.0))</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x7FFFFFFF</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">else</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = (</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax">) (</span><span class="Extracts-identifier-syntax">roundf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">));</span>
|
||||
<span class="Extracts-plain-syntax"> }</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">isnan</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">) || </span><span class="Extracts-identifier-syntax">isinf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> < -2147483647.0))</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x80000000</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">else</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = (</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax">) (</span><span class="Extracts-identifier-syntax">roundf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">));</span>
|
||||
<span class="Extracts-plain-syntax"> }</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_ftonumz</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">float</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (!</span><span class="Extracts-identifier-syntax">signbit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">)) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">isnan</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">) || </span><span class="Extracts-identifier-syntax">isinf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> > </span><span class="Extracts-constant-syntax">2147483647</span><span class="Extracts-plain-syntax">.0))</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x7FFFFFFF</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">else</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = (</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax">) (</span><span class="Extracts-identifier-syntax">truncf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">));</span>
|
||||
<span class="Extracts-plain-syntax"> }</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">isnan</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">) || </span><span class="Extracts-identifier-syntax">isinf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> < -2147483647.0))</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x80000000</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">else</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = (</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax">) (</span><span class="Extracts-identifier-syntax">truncf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax">));</span>
|
||||
<span class="Extracts-plain-syntax"> }</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_numtof</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">((</span><span class="Extracts-identifier-syntax">float</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_jfeq</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_jfeq</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> & </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x7F800000</span><span class="Extracts-plain-syntax">) == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x7F800000</span><span class="Extracts-plain-syntax"> && (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> & </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x007FFFFF</span><span class="Extracts-plain-syntax">) != </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> /* </span><span class="Extracts-identifier-syntax">The</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">delta</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">is</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">NaN</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">which</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">can</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">never</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">match</span><span class="Extracts-plain-syntax">. */</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x7F800000</span><span class="Extracts-plain-syntax"> || </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xFF800000</span><span class="Extracts-plain-syntax">)</span>
|
||||
<span class="Extracts-plain-syntax"> && (</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x7F800000</span><span class="Extracts-plain-syntax"> || </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xFF800000</span><span class="Extracts-plain-syntax">)) {</span>
|
||||
<span class="Extracts-plain-syntax"> /* </span><span class="Extracts-identifier-syntax">Both</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">are</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">infinite</span><span class="Extracts-plain-syntax">. </span><span class="Extracts-identifier-syntax">Opposite</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">infinities</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">are</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">never</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">equal</span><span class="Extracts-plain-syntax">,</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">even</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">the</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">difference</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">is</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">infinite</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">so</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">this</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">is</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">easy</span><span class="Extracts-plain-syntax">. */</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</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">y</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">float</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) - </span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">float</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fy</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">fabs</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">));</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = (</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> <= </span><span class="Extracts-identifier-syntax">fy</span><span class="Extracts-plain-syntax"> && </span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> >= -</span><span class="Extracts-identifier-syntax">fy</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> }</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (!</span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_jfne</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> & </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x7F800000</span><span class="Extracts-plain-syntax">) == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x7F800000</span><span class="Extracts-plain-syntax"> && (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> & </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x007FFFFF</span><span class="Extracts-plain-syntax">) != </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> /* </span><span class="Extracts-identifier-syntax">The</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">delta</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">is</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">NaN</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">which</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">can</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">never</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">match</span><span class="Extracts-plain-syntax">. */</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x7F800000</span><span class="Extracts-plain-syntax"> || </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xFF800000</span><span class="Extracts-plain-syntax">)</span>
|
||||
<span class="Extracts-plain-syntax"> && (</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x7F800000</span><span class="Extracts-plain-syntax"> || </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xFF800000</span><span class="Extracts-plain-syntax">)) {</span>
|
||||
<span class="Extracts-plain-syntax"> /* </span><span class="Extracts-identifier-syntax">Both</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">are</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">infinite</span><span class="Extracts-plain-syntax">. </span><span class="Extracts-identifier-syntax">Opposite</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">infinities</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">are</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">never</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">equal</span><span class="Extracts-plain-syntax">,</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">even</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">the</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">difference</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">is</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">infinite</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">so</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">this</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">is</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">easy</span><span class="Extracts-plain-syntax">. */</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</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">y</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">float</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) - </span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">float</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fy</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">fabs</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">));</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> = (</span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> <= </span><span class="Extracts-identifier-syntax">fy</span><span class="Extracts-plain-syntax"> && </span><span class="Extracts-identifier-syntax">fx</span><span class="Extracts-plain-syntax"> >= -</span><span class="Extracts-identifier-syntax">fy</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> }</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (!</span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_jfge</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_jfge</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">isgreaterequal</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</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">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">))) </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_jflt</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_jflt</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">isless</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</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">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">))) </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_jisinf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_jisinf</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">isinf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</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">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_jisnan</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_jisnan</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">isnan</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</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">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_log</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_log</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_log</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">logf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">)));</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_acos</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_acos</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">acosf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">)));</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_asin</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_asin</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">asinf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">)));</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_atan</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_atan</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">atanf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">)));</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_ceil</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_ceil</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">ceilf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">)));</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_cos</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_cos</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">cosf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">)));</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_pow</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_pow</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) == </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">.0</span><span class="Extracts-identifier-syntax">f</span><span class="Extracts-plain-syntax">)</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(1.0</span><span class="Extracts-identifier-syntax">f</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">.0</span><span class="Extracts-identifier-syntax">f</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) == -0.0</span><span class="Extracts-identifier-syntax">f</span><span class="Extracts-plain-syntax">))</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(1.0</span><span class="Extracts-identifier-syntax">f</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) == -1.0</span><span class="Extracts-identifier-syntax">f</span><span class="Extracts-plain-syntax">) && </span><span class="Extracts-identifier-syntax">isinf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">)))</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(1.0</span><span class="Extracts-identifier-syntax">f</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">else</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">powf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</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">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">)));</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_sin</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_sin</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">sinf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">)));</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_sqrt</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_sqrt</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">sqrtf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">)));</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_tan</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_tan</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">encode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">tanf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">decode_float</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">)));</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
|
||||
|
|
|
@ -87,14 +87,17 @@ function togglePopup(material_id) {
|
|||
<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="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">operand_branches</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">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">operand_label</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">pointer_on_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">pointer_on_operand</span><span class="plain-syntax">[16];</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="plain-syntax">} </span><span class="reserved-syntax">C_generation_assembly_data</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/>Generating C - <a href="5-fnc.html#SP4">§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>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_count</span><span class="plain-syntax">) = </span><span class="constant-syntax">0</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">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_branches</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">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_label</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">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = -1;</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"><16; </span><span class="identifier-syntax">i</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">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-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">void</span><span class="plain-syntax"> </span><span class="function-syntax">CAssembly::begin</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">CAssembly::begin</span></span>:<br/>Generating C - <a href="5-fnc.html#SP5">§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>
|
||||
|
@ -109,14 +112,18 @@ function togglePopup(material_id) {
|
|||
|
||||
<pre class="Extracts-displayed-code all-displayed-code code-font">
|
||||
<span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_sp</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">I7_ASM_STACK_CAPACITY</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">128</span>
|
||||
<span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_asm_stack</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">I7_ASM_STACK_CAPACITY</span><span class="Extracts-plain-syntax">];</span>
|
||||
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_asm_stack_pointer</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_pull</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">i7_pull</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7_asm_stack_pointer</span><span class="Extracts-plain-syntax"> <= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Stack</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">underflow</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; }</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_asm_stack</span><span class="Extracts-plain-syntax">[--</span><span class="Extracts-identifier-syntax">i7_asm_stack_pointer</span><span class="Extracts-plain-syntax">];</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_push</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">i7_push</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7_asm_stack_pointer</span><span class="Extracts-plain-syntax"> >= </span><span class="Extracts-identifier-syntax">I7_ASM_STACK_CAPACITY</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Stack</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">overflow</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax">; }</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_asm_stack</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i7_asm_stack_pointer</span><span class="Extracts-plain-syntax">++] = </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
|
||||
|
@ -126,6 +133,7 @@ function togglePopup(material_id) {
|
|||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CAssembly::begin_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::begin_opcode</span></span>:<br/><a href="5-cas.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</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="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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP7" 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="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_branches</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">asmdata</span><span class="plain-syntax">.</span><span class="element-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="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_label</span><span class="plain-syntax">) = </span><span class="identifier-syntax">NULL</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_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">opcode</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">) == </span><span class="character-syntax">'j'</span><span class="plain-syntax">) { </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_branches</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">"@return"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"return "</span><span class="plain-syntax">);</span>
|
||||
|
@ -134,23 +142,44 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><a href="5-cnm.html#SP1" class="function-link"><span class="function-syntax">CNamespace::mangle_opcode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">opcode</span><span class="plain-syntax">);</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">"("</span><span class="plain-syntax">); </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_count</span><span class="plain-syntax">) = </span><span class="constant-syntax">0</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">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</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">"@acos"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">2</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">3</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">3</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">3</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">2</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">2</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">8</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">2</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">2</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">3</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="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">3</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">3</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">3</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">2</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">2</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">) = </span><span class="constant-syntax">2</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"><16; </span><span class="identifier-syntax">i</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">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">"@log"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">"@shiftl"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_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">void</span><span class="plain-syntax"> </span><span class="function-syntax">CAssembly::supply_operand</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::supply_operand</span></span>:<br/><a href="5-cas.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</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="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">is_label</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#SP7" 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>
|
||||
|
@ -158,17 +187,19 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_label</span><span class="plain-syntax">) = </span><span class="identifier-syntax">F</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="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">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_count</span><span class="plain-syntax">)++ > </span><span class="constant-syntax">0</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_count</span><span class="plain-syntax">) == </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</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#SP6" 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-fc.html#SP1" class="function-link"><span class="function-syntax">CodeGen::FC::frame</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cg.html#SP6" 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">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="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#SP6" 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-fc.html#SP1" class="function-link"><span class="function-syntax">CodeGen::FC::frame</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cg.html#SP6" 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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pointer_on_operand</span><span class="plain-syntax">[</span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_count</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">"&%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">write_to</span><span class="plain-syntax">); </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-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">"&%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">write_to</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">write_to</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><a href="2-fc.html#SP1" class="function-link"><span class="function-syntax">CodeGen::FC::frame</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</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">"i7_pull()"</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">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">write_to</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">write_to</span><span class="plain-syntax">)</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">CAssembly::end_opcode</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::end_opcode</span></span>:<br/><a href="5-cas.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</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>
|
||||
|
@ -180,6 +211,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">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_label</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no branch label"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-fc.html#SP1" class="function-link"><span class="function-syntax">CodeGen::FC::frame</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">operand_label</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">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">asmdata</span><span class="plain-syntax">.</span><span class="element-syntax">pushed_result</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"; i7_push(i7_mgl_sp)"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b></p>
|
||||
|
@ -201,10 +233,6 @@ function togglePopup(material_id) {
|
|||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_copy</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_div</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_div</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_gestalt</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
@ -238,7 +266,7 @@ function togglePopup(material_id) {
|
|||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_jeq</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_jeq</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</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">y</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
|
@ -248,12 +276,12 @@ function togglePopup(material_id) {
|
|||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_jnz</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_jnz</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax"> != </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_jz</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_jz</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
|
@ -269,17 +297,6 @@ function togglePopup(material_id) {
|
|||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_mfree</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_mod</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_mod</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_neg</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_neg</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_numtof</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_numtof</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_quit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_quit</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
|
@ -293,12 +310,14 @@ function togglePopup(material_id) {
|
|||
<span class="Extracts-plain-syntax"> // </span><span class="Extracts-identifier-syntax">Deliberately</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ignored</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">we</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">are</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">using</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">stdout</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">not</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glk</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_char</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_streamchar</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("%</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">", (</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_char</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_decimal</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_streamnum</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_streamnum</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_decimal</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_streamstr</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) {</span>
|
||||
|
@ -306,11 +325,7 @@ function togglePopup(material_id) {
|
|||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_streamunichar</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("%</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">", (</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_sub</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">glulx_sub</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_char</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glulx_ushiftr</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</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">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">y</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
|
||||
|
|
|
@ -92,12 +92,14 @@ function togglePopup(material_id) {
|
|||
<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">prototype</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">argument_count</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">final_c_function</span><span class="plain-syntax"> *</span><span class="identifier-syntax">current_fcf</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">compiling_function</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">C_generation_function_model_data</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CFunctionModel::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">CFunctionModel::initialise_data</span></span>:<br/>Generating C - <a href="5-fnc.html#SP4">§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>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">fndata</span><span class="plain-syntax">.</span><span class="element-syntax">prototype</span><span class="plain-syntax">) = </span><span class="identifier-syntax">Str::new</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">fndata</span><span class="plain-syntax">.</span><span class="element-syntax">argument_count</span><span class="plain-syntax">) = </span><span class="constant-syntax">0</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">fndata</span><span class="plain-syntax">.</span><span class="element-syntax">current_fcf</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">fndata</span><span class="plain-syntax">.</span><span class="element-syntax">compiling_function</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">CFunctionModel::begin</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">CFunctionModel::begin</span></span>:<br/>Generating C - <a href="5-fnc.html#SP5">§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>
|
||||
|
@ -137,6 +139,43 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"#endif\n"</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">"#endif\n"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::deselect</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">saved</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::select</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">c_fundamental_types_I7CGS</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP7" 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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7val i7_gen_call(i7val fn_ref, i7val *args, int argc, int call_message);\n"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::deselect</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">saved</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::select</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">c_stubs_at_eof_I7CGS</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP7" 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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7val i7_gen_call(i7val fn_ref, i7val *args, int argc, int call_message) {\n"</span><span class="plain-syntax">); </span><span class="identifier-syntax">INDENT</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">"switch (fn_ref) {\n"</span><span class="plain-syntax">); </span><span class="identifier-syntax">INDENT</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">final_c_function</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fcf</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">fcf</span><span class="plain-syntax">, </span><span class="reserved-syntax">final_c_function</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">"case "</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cnm.html#SP1" class="function-link"><span class="function-syntax">CNamespace::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">fcf</span><span class="plain-syntax">-></span><span class="element-syntax">identifier_as_constant</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">": return fn_"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cnm.html#SP1" class="function-link"><span class="function-syntax">CNamespace::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">fcf</span><span class="plain-syntax">-></span><span class="element-syntax">identifier_as_constant</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">"("</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">fcf</span><span class="plain-syntax">-></span><span class="element-syntax">uses_vararg_model</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">"2, argc, (i7varargs) { "</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"><10; </span><span class="identifier-syntax">i</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">i</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"args[%d]"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</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">" }"</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="function-syntax"><fcf-></span><span class="identifier-syntax">max_arity</span><span class="plain-syntax"> - </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</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">", 0"</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"argc"</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="function-syntax"><fcf-></span><span class="identifier-syntax">max_arity</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</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">", args[%d]"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</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">");\n"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">OUTDENT</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><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"printf(\"function not found\\n\");\n"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">OUTDENT</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><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::deselect</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</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">final_c_function</span><span class="plain-syntax"> {</span>
|
||||
|
@ -165,6 +204,7 @@ function togglePopup(material_id) {
|
|||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CFunctionModel::make_veneer_fcf</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="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">unmangled_name</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">final_c_function</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fcf</span><span class="plain-syntax"> = </span><a href="5-cfm.html#SP1" class="function-link"><span class="function-syntax">CFunctionModel::new_fcf</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">unmangled_name</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">fcf</span><span class="plain-syntax">-></span><span class="element-syntax">max_arity</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</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::declare_fcf</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">fcf</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
|
@ -196,6 +236,7 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"printf(\"called %S\\n\");\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">fndata</span><span class="plain-syntax">.</span><span class="element-syntax">current_fcf</span><span class="plain-syntax">)-></span><span class="element-syntax">identifier_as_constant</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</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">fndata</span><span class="plain-syntax">.</span><span class="element-syntax">compiling_function</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">CFunctionModel::place_label</span><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</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="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">label_name</span><span class="plain-syntax">) {</span>
|
||||
|
@ -222,9 +263,15 @@ function togglePopup(material_id) {
|
|||
<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#SP7" 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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"return 1;\n"</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">"\n}\n"</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">fndata</span><span class="plain-syntax">.</span><span class="element-syntax">compiling_function</span><span class="plain-syntax">) = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CFunctionModel::inside_function</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">CFunctionModel::inside_function</span></span>:<br/>C Arithmetic - <a href="5-car.html#SP1">§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="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">fndata</span><span class="plain-syntax">.</span><span class="element-syntax">compiling_function</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</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">return</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">CFunctionModel::begin_function_call</span><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</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="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fn</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">argc</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">D</span><span class="plain-syntax"> = </span><span class="identifier-syntax">fn</span><span class="plain-syntax">-></span><span class="identifier-syntax">definition</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">D</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">D</span><span class="plain-syntax">-></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="identifier-syntax">CONSTANT_IST</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">D</span><span class="plain-syntax">-></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">FORMAT_CONST_IFLD</span><span class="plain-syntax">] == </span><span class="identifier-syntax">CONSTANT_DIRECT</span><span class="plain-syntax">)) {</span>
|
||||
|
@ -323,11 +370,6 @@ function togglePopup(material_id) {
|
|||
|
||||
<span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_self</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_gen_call</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fn_ref</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">argc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">call_message</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">i7_gen_call</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_call_0</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fn_ref</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[10]; </span><span class="Extracts-identifier-syntax">for</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">=0; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax"><10; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">++) </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_gen_call</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">fn_ref</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
|
||||
|
|
|
@ -139,7 +139,7 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><a href="5-cmm.html#SP8" class="function-link"><span class="function-syntax">CMemoryModel::array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><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">"0"</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cmm.html#SP8" class="function-link"><span class="function-syntax">CMemoryModel::array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><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">"0"</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cmm.html#SP9" class="function-link"><span class="function-syntax">CMemoryModel::end_array</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cmm.html#SP10" class="function-link"><span class="function-syntax">CMemoryModel::end_array</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">WORD_ARRAY_FORMAT</span><span class="plain-syntax">);</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">k</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -110,7 +110,7 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PRINTNAME_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_name("</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</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="reserved-syntax">break</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">PRINTOBJ_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_object("</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</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="reserved-syntax">break</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">PRINTPROPERTY_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_property("</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</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="reserved-syntax">break</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">PRINTNUMBER_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"printf(\"%%d\", (int) "</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</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="reserved-syntax">break</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">PRINTNUMBER_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_decimal("</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</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="reserved-syntax">break</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">PRINTNLNUMBER_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_number("</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</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="reserved-syntax">break</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">PRINTDEF_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_def_art("</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</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="reserved-syntax">break</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">PRINTCDEF_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_cdef_art("</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</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="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
|
@ -138,6 +138,10 @@ function togglePopup(material_id) {
|
|||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_font</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">what</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_decimal</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("%</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax">", (</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_char</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("%</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">", (</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
|
|
@ -74,7 +74,7 @@ function togglePopup(material_id) {
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inter Modules</a></li><li><a href="index.html">final</a></li><li><a href="index.html#5">Chapter 5: C</a></li><li><b>C Memory Model</b></li></ul></div>
|
||||
<p class="purpose">How arrays of all kinds are stored in C.</p>
|
||||
|
||||
<ul class="toc"><li><a href="5-cmm.html#SP1">§1. Setting up the model</a></li><li><a href="5-cmm.html#SP2">§2. Byte-addressable memory</a></li><li><a href="5-cmm.html#SP5">§5. Reading and writing memory</a></li><li><a href="5-cmm.html#SP7">§7. Populating memory with arrays</a></li><li><a href="5-cmm.html#SP10">§10. Primitives for byte and word lookup</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="5-cmm.html#SP1">§1. Setting up the model</a></li><li><a href="5-cmm.html#SP2">§2. Byte-addressable memory</a></li><li><a href="5-cmm.html#SP5">§5. Reading and writing memory</a></li><li><a href="5-cmm.html#SP7">§7. Populating memory with arrays</a></li><li><a href="5-cmm.html#SP11">§11. Primitives for byte and word lookup</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Setting up the model. </b></p>
|
||||
|
||||
|
@ -82,7 +82,8 @@ function togglePopup(material_id) {
|
|||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::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">CMemoryModel::initialise</span></span>:<br/>Generating C - <a href="5-fnc.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</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">BEGIN_ARRAY_MTID</span><span class="plain-syntax">, </span><a href="5-cmm.html#SP7" class="function-link"><span class="function-syntax">CMemoryModel::begin_array</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">ARRAY_ENTRY_MTID</span><span class="plain-syntax">, </span><a href="5-cmm.html#SP8" class="function-link"><span class="function-syntax">CMemoryModel::array_entry</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">END_ARRAY_MTID</span><span class="plain-syntax">, </span><a href="5-cmm.html#SP9" class="function-link"><span class="function-syntax">CMemoryModel::end_array</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">ARRAY_ENTRIES_MTID</span><span class="plain-syntax">, </span><a href="5-cmm.html#SP9" class="function-link"><span class="function-syntax">CMemoryModel::array_entries</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">END_ARRAY_MTID</span><span class="plain-syntax">, </span><a href="5-cmm.html#SP10" class="function-link"><span class="function-syntax">CMemoryModel::end_array</span></a><span class="plain-syntax">);</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_generation_memory_model_data</span><span class="plain-syntax"> {</span>
|
||||
|
@ -282,7 +283,7 @@ predefine when the array ends.
|
|||
</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">CMemoryModel::array_entry</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">CMemoryModel::array_entry</span></span>:<br/><a href="5-cmm.html#SP1">§1</a>, <a href="5-cmm.html#SP7_3">§7.3</a><br/>C Global Variables - <a href="5-cgv.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::array_entry</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">CMemoryModel::array_entry</span></span>:<br/><a href="5-cmm.html#SP1">§1</a>, <a href="5-cmm.html#SP7_3">§7.3</a>, <a href="5-cmm.html#SP9">§9</a><br/>C Global Variables - <a href="5-cgv.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</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">entry</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">generated_segment</span><span class="plain-syntax"> *</span><span class="identifier-syntax">saved</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::select</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">c_mem_I7CGS</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#SP7" 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>
|
||||
|
@ -298,7 +299,7 @@ predefine when the array ends.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" (i7byte) %S,\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</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">" (i7byte) %S, /* %d */\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">memdata</span><span class="plain-syntax">.</span><span class="element-syntax">himem</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">memdata</span><span class="plain-syntax">.</span><span class="element-syntax">himem</span><span class="plain-syntax">) += </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP8">§8</a>.</li></ul>
|
||||
|
@ -312,17 +313,28 @@ and therefore if <span class="extract"><span class="extract-syntax">X</span></sp
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" I7BYTE_0(%S), I7BYTE_1(%S), I7BYTE_2(%S), I7BYTE_3(%S),\n"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</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">" I7BYTE_0(%S), I7BYTE_1(%S), I7BYTE_2(%S), I7BYTE_3(%S), /* %d */\n"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">memdata</span><span class="plain-syntax">.</span><span class="element-syntax">himem</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">memdata</span><span class="plain-syntax">.</span><span class="element-syntax">himem</span><span class="plain-syntax">) += </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP8">§8</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. </b>When all the entries have been placed, the following is called. It does nothing
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. </b>Alternatively, we can just specify how many entries there will be: they will
|
||||
then be initialised to 0.
|
||||
</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">CMemoryModel::array_entries</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">CMemoryModel::array_entries</span></span>:<br/><a href="5-cmm.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">how_many</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plus_ips</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</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">plus_ips</span><span class="plain-syntax">) </span><span class="identifier-syntax">how_many</span><span class="plain-syntax"> += </span><span class="constant-syntax">64</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"><</span><span class="identifier-syntax">how_many</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><a href="5-cmm.html#SP8" class="function-link"><span class="function-syntax">CMemoryModel::array_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><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">"0"</span><span class="plain-syntax">, </span><span class="identifier-syntax">format</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. </b>When all the entries have been placed, the following is called. It does nothing
|
||||
except to predeclare the extent constant, if one was used.
|
||||
</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">CMemoryModel::end_array</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">CMemoryModel::end_array</span></span>:<br/><a href="5-cmm.html#SP1">§1</a><br/>C Global Variables - <a href="5-cgv.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::end_array</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">CMemoryModel::end_array</span></span>:<br/><a href="5-cmm.html#SP1">§1</a><br/>C Global Variables - <a href="5-cgv.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation_target</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">format</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">format</span><span class="plain-syntax"> == </span><span class="constant-syntax">TABLE_ARRAY_FORMAT</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">format</span><span class="plain-syntax"> == </span><span class="constant-syntax">BUFFER_ARRAY_FORMAT</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">generated_segment</span><span class="plain-syntax"> *</span><span class="identifier-syntax">saved</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::select</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">c_predeclarations_I7CGS</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#SP7" 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>
|
||||
|
@ -332,7 +344,7 @@ except to predeclare the extent constant, if one was used.
|
|||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. Primitives for byte and word lookup. </b>The signatures here are:
|
||||
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. Primitives for byte and word lookup. </b>The signatures here are:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -340,44 +352,44 @@ except to predeclare the extent constant, if one was used.
|
|||
<span class="plain-syntax">primitive !lookupbyte val val -> val</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::handle_store_by_ref</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">CMemoryModel::handle_store_by_ref</span></span>:<br/>C References - <a href="5-crf.html#SP4_1">§4.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">ref</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::handle_store_by_ref</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">CMemoryModel::handle_store_by_ref</span></span>:<br/>C References - <a href="5-crf.html#SP4_1">§4.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">ref</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-cal.html#SP3" class="function-link"><span class="function-syntax">CodeGen::CL::node_is_ref_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">ref</span><span class="plain-syntax">, </span><span class="identifier-syntax">LOOKUP_BIP</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</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">return</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="function-syntax">CMemoryModel::compile_primitive</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">CMemoryModel::compile_primitive</span></span>:<br/>C Program Control - <a href="5-cpc.html#SP1">§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_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">bip</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">int</span><span class="plain-syntax"> </span><span class="function-syntax">CMemoryModel::compile_primitive</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">CMemoryModel::compile_primitive</span></span>:<br/>C Program Control - <a href="5-cpc.html#SP1">§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_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">bip</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="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#SP7" 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">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bip</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">LOOKUP_BIP:</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-crf.html#SP3" class="function-link"><span class="function-syntax">CReferences::am_I_a_ref</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP10_2" class="named-paragraph-link"><span class="named-paragraph">Word value as reference</span><span class="named-paragraph-number">10.2</span></a></span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP10_1" class="named-paragraph-link"><span class="named-paragraph">Word value as value</span><span class="named-paragraph-number">10.1</span></a></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">LOOKUP_BIP:</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-crf.html#SP3" class="function-link"><span class="function-syntax">CReferences::am_I_a_ref</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP11_2" class="named-paragraph-link"><span class="named-paragraph">Word value as reference</span><span class="named-paragraph-number">11.2</span></a></span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP11_1" class="named-paragraph-link"><span class="named-paragraph">Word value as value</span><span class="named-paragraph-number">11.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</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">LOOKUPBYTE_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP10_3" class="named-paragraph-link"><span class="named-paragraph">Byte value as value</span><span class="named-paragraph-number">10.3</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</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">LOOKUPBYTE_BIP:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cmm.html#SP11_3" class="named-paragraph-link"><span class="named-paragraph">Byte value as value</span><span class="named-paragraph-number">11.3</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOT_APPLICABLE</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">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP10_1" class="paragraph-anchor"></a><b>§10.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Word value as value</span><span class="named-paragraph-number">10.1</span></span><span class="comment-syntax"> =</span>
|
||||
<p class="commentary firstcommentary"><a id="SP11_1" class="paragraph-anchor"></a><b>§11.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Word value as value</span><span class="named-paragraph-number">11.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_read_word(i7mem, "</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</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="constant-syntax">INV_A2</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>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP10">§10</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10_2" class="paragraph-anchor"></a><b>§10.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Word value as reference</span><span class="named-paragraph-number">10.2</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP11">§11</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11_2" class="paragraph-anchor"></a><b>§11.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Word value as reference</span><span class="named-paragraph-number">11.2</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_write_word(i7mem, "</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</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="constant-syntax">INV_A2</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>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP10">§10</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10_3" class="paragraph-anchor"></a><b>§10.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Byte value as value</span><span class="named-paragraph-number">10.3</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP11">§11</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11_3" class="paragraph-anchor"></a><b>§11.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Byte value as value</span><span class="named-paragraph-number">11.3</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7mem["</span><span class="plain-syntax">); </span><span class="constant-syntax">INV_A1</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="constant-syntax">INV_A2</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>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP10">§10</a>.</li></ul>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cmm.html#SP11">§11</a>.</li></ul>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-crf.html">❮</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresscurrent">cmm</li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progressnext"><a href="5-cas.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
|
|
@ -206,14 +206,14 @@ overlap.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"#define i7_max_objects %d\n"</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">owner_id_count</span><span class="plain-syntax">) + </span><span class="constant-syntax">1</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">"i7val i7_metaclass_of[] = { 0"</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">=1; </span><span class="identifier-syntax">i</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">owner_id_count</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</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">=1; </span><span class="identifier-syntax">i</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">owner_id_count</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</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">objdata</span><span class="plain-syntax">.</span><span class="element-syntax">owners</span><span class="plain-syntax">)[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="element-syntax">is_class</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">", i7_mgl_Class"</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">", i7_mgl_Object"</span><span class="plain-syntax">);</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">" };\n"</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">"i7val i7_class_of[] = { 0"</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">=1; </span><span class="identifier-syntax">i</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">owner_id_count</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</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">=1; </span><span class="identifier-syntax">i</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">owner_id_count</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</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">", "</span><span class="plain-syntax">); </span><a href="5-cnm.html#SP1" class="function-link"><span class="function-syntax">CNamespace::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</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">owners</span><span class="plain-syntax">)[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="element-syntax">class</span><span class="plain-syntax">);</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">" };\n"</span><span class="plain-syntax">);</span>
|
||||
|
@ -345,17 +345,18 @@ only need to be unique, so the order is not significant.
|
|||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CObjectModel::declare_property_by_name</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">CObjectModel::declare_property_by_name</span></span>:<br/><a href="5-com.html#SP1">§1</a>, <a href="5-com.html#SP6">§6</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">used</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">generated_segment</span><span class="plain-syntax"> *</span><span class="identifier-syntax">saved</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::select</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">c_predeclarations_I7CGS</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#SP7" 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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">used</span><span class="plain-syntax">) {</span>
|
||||
<span class="comment-syntax"> if (used) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"#define "</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cnm.html#SP1" class="function-link"><span class="function-syntax">CNamespace::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" %d\n"</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">property_id_counter</span><span class="plain-syntax">)++);</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="comment-syntax"> } else {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"#ifndef "</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cnm.html#SP1" class="function-link"><span class="function-syntax">CNamespace::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"\n#define "</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cnm.html#SP1" class="function-link"><span class="function-syntax">CNamespace::mangle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" 0\n#endif\n"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">*/</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::deselect</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -413,6 +414,11 @@ By fiat, that will be 0.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">OUTDENT</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">"}\n"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::deselect</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">saved</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::select</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">c_fundamental_types_I7CGS</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP7" 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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7val fn_i7_mgl_CreatePropertyOffsets(int argc);\n"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::deselect</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">saved</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-com.html#SP1">§1</a>.</li></ul>
|
||||
|
@ -542,8 +548,9 @@ property values are not stored in the memory map.
|
|||
<span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_read_prop_value</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">owner_id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7val</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">prop_id</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">owner_id</span><span class="Extracts-plain-syntax"> <= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">owner_id</span><span class="Extracts-plain-syntax"> >= </span><span class="Extracts-identifier-syntax">i7_max_objects</span><span class="Extracts-plain-syntax">) ||</span>
|
||||
<span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">prop_id</span><span class="Extracts-plain-syntax"> < </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">prop_id</span><span class="Extracts-plain-syntax"> >= </span><span class="Extracts-identifier-syntax">i7_no_property_ids</span><span class="Extracts-plain-syntax">)) </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">while</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7_properties</span><span class="Extracts-plain-syntax">[(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">owner_id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">value_set</span><span class="Extracts-plain-syntax">[(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">prop_id</span><span class="Extracts-plain-syntax">] == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">)</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">while</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7_properties</span><span class="Extracts-plain-syntax">[(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">owner_id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">value_set</span><span class="Extracts-plain-syntax">[(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">prop_id</span><span class="Extracts-plain-syntax">] == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">owner_id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_class_of</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">owner_id</span><span class="Extracts-plain-syntax">];</span>
|
||||
<span class="Extracts-plain-syntax"> }</span>
|
||||
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_properties</span><span class="Extracts-plain-syntax">[(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">owner_id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">value</span><span class="Extracts-plain-syntax">[(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">prop_id</span><span class="Extracts-plain-syntax">];</span>
|
||||
<span class="Extracts-plain-syntax">}</span>
|
||||
|
||||
|
|
|
@ -89,7 +89,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">r</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax"> = </span><a href="5-car.html#SP1" class="function-link"><span class="function-syntax">CArithmetic::compile_primitive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">bip</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">r</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax"> = </span><a href="5-cmm.html#SP10" class="function-link"><span class="function-syntax">CMemoryModel::compile_primitive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">bip</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax"> = </span><a href="5-cmm.html#SP11" class="function-link"><span class="function-syntax">CMemoryModel::compile_primitive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">bip</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">r</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax"> = </span><a href="5-com.html#SP10" class="function-link"><span class="function-syntax">CObjectModel::compile_primitive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">bip</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">r</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -139,7 +139,7 @@ correct.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CReferences::am_I_a_ref</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">CReferences::am_I_a_ref</span></span>:<br/>C Memory Model - <a href="5-cmm.html#SP10">§10</a><br/>C Object Model - <a href="5-com.html#SP10">§10</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">int</span><span class="plain-syntax"> </span><span class="function-syntax">CReferences::am_I_a_ref</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">CReferences::am_I_a_ref</span></span>:<br/>C Memory Model - <a href="5-cmm.html#SP11">§11</a><br/>C Object Model - <a href="5-com.html#SP10">§10</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">answer</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C_GEN_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">memdata</span><span class="plain-syntax">.</span><span class="element-syntax">next_node_is_a_ref</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">memdata</span><span class="plain-syntax">.</span><span class="element-syntax">next_node_is_a_ref</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">answer</span><span class="plain-syntax">;</span>
|
||||
|
@ -185,7 +185,7 @@ That's what is done by the "A1 as ref" mode set up above.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ref</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InterTree::first_child</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">if</span><span class="plain-syntax"> ((</span><a href="5-cmm.html#SP10" class="function-link"><span class="function-syntax">CMemoryModel::handle_store_by_ref</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">ref</span><span class="plain-syntax">)) ||</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="5-cmm.html#SP11" class="function-link"><span class="function-syntax">CMemoryModel::handle_store_by_ref</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">ref</span><span class="plain-syntax">)) ||</span>
|
||||
<span class="plain-syntax"> (</span><a href="5-com.html#SP10" class="function-link"><span class="function-syntax">CObjectModel::handle_store_by_ref</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">ref</span><span class="plain-syntax">))) {</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-crf.html#SP4_1_1" class="named-paragraph-link"><span class="named-paragraph">Handle the ref using the incomplete-function mode</span><span class="named-paragraph-number">4.1.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
|
|
|
@ -123,6 +123,7 @@ first of those:
|
|||
|
||||
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">include</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-function-syntax"><stdlib.h></span>
|
||||
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">include</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-function-syntax"><stdio.h></span>
|
||||
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">include</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-function-syntax"><math.h></span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Segmentation. </b></p>
|
||||
|
|
|
@ -130,7 +130,6 @@ like variables. That's what makes them intermediate.)
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">kc</span><span class="plain-syntax">-></span><span class="identifier-syntax">explicit_identifier</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">invented</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</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">invented</span><span class="plain-syntax">, </span><span class="string-syntax">"WEAK_ID_%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">kc</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">);</span>
|
||||
<span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"I did make %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">invented</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">invented</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Total memory consumption was 399122K = 390 MB
|
||||
Total memory consumption was 398325K = 389 MB
|
||||
|
||||
60.3% was used for 1996022 objects, in 371151 frames in 301 x 800K = 240800K = 235 MB:
|
||||
60.2% was used for 1996024 objects, in 371153 frames in 300 x 800K = 240000K = 234 MB:
|
||||
|
||||
10.2% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
|
||||
7.0% text_stream_array 5133 x 100 = 513300 objects, 28909056 bytes
|
||||
|
@ -96,7 +96,7 @@ Total memory consumption was 399122K = 390 MB
|
|||
---- nonlocal_variable 93 objects, 20088 bytes
|
||||
---- property 146 objects, 19856 bytes
|
||||
---- timed_rules_rfd_data 400 objects, 19200 bytes
|
||||
---- method 390 objects, 18720 bytes
|
||||
---- method 392 objects, 18816 bytes
|
||||
---- pcalc_prop_deferral 86 objects, 17888 bytes
|
||||
---- instance 167 objects, 17368 bytes
|
||||
---- parse_node_tree 20 objects, 17280 bytes
|
||||
|
@ -236,9 +236,9 @@ Total memory consumption was 399122K = 390 MB
|
|||
---- loop_over_scope 1 object, 40 bytes
|
||||
---- I6_generation_data 1 object, 24 bytes
|
||||
|
||||
39.6% was used for memory not allocated for objects:
|
||||
39.7% was used for memory not allocated for objects:
|
||||
|
||||
21.1% text stream storage 86271368 bytes in 531005 claims
|
||||
21.1% text stream storage 86274752 bytes in 531041 claims
|
||||
4.4% dictionary storage 18157056 bytes in 33232 claims
|
||||
---- sorting 744 bytes in 3 claims
|
||||
1.7% source text 7200000 bytes in 3 claims
|
||||
|
@ -256,5 +256,5 @@ Total memory consumption was 399122K = 390 MB
|
|||
---- code generation workspace for objects 9648 bytes in 9 claims
|
||||
---- emitter array storage 161920 bytes in 2064 claims
|
||||
|
||||
18.7% was overhead - 76729480 bytes = 74931K = 73 MB
|
||||
18.6% was overhead - 75910184 bytes = 74131K = 72 MB
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
100.0% in inform7 run
|
||||
55.3% in compilation to Inter
|
||||
40.1% in //Sequence::undertake_queued_tasks//
|
||||
55.4% in compilation to Inter
|
||||
40.4% in //Sequence::undertake_queued_tasks//
|
||||
3.5% in //MajorNodes::pre_pass//
|
||||
2.5% in //MajorNodes::pass_1//
|
||||
1.5% 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
|
||||
11.0% in step preparation
|
||||
9.7% in inter step 7/14: consolidate-text
|
||||
8.1% in inter step 14/14: generate inform6 -> auto.inf
|
||||
42.5% in running Inter pipeline
|
||||
10.8% in step preparation
|
||||
9.6% in inter step 7/14: consolidate-text
|
||||
8.2% in inter step 14/14: generate inform6 -> auto.inf
|
||||
8.0% in inter step 2/14: link
|
||||
1.5% in inter step 10/14: make-identifiers-unique
|
||||
0.4% in inter step 11/14: reconcile-verbs
|
||||
|
@ -29,9 +29,8 @@
|
|||
0.2% in inter step 8/14: resolve-external-symbols
|
||||
0.2% in inter step 9/14: inspect-plugs
|
||||
0.1% in inter step 12/14: eliminate-redundant-labels
|
||||
0.1% in inter step 3/14: merge-template <- none
|
||||
0.1% in inter step 4/14: parse-linked-matter
|
||||
0.1% in inter step 5/14: resolve-conditional-compilation
|
||||
2.0% not specifically accounted for
|
||||
1.7% in supervisor
|
||||
2.2% not specifically accounted for
|
||||
1.6% in supervisor
|
||||
0.3% not specifically accounted for
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
|
||||
#define i7_mgl_Grammar__Version 2
|
||||
i7val i7_mgl_debug_flag = 0;
|
||||
|
@ -99,14 +100,18 @@ i7val i7_write_word(i7byte data[], i7val array_address, i7val array_index, i7val
|
|||
return return_val;
|
||||
}
|
||||
i7val i7_mgl_sp = 0;
|
||||
#define I7_ASM_STACK_CAPACITY 128
|
||||
i7val i7_asm_stack[I7_ASM_STACK_CAPACITY];
|
||||
int i7_asm_stack_pointer = 0;
|
||||
|
||||
i7val i7_pull(void) {
|
||||
printf("Unimplemented: i7_pull.\n");
|
||||
return (i7val) 0;
|
||||
if (i7_asm_stack_pointer <= 0) { printf("Stack underflow\n"); return (i7val) 0; }
|
||||
return i7_asm_stack[--i7_asm_stack_pointer];
|
||||
}
|
||||
|
||||
void i7_push(i7val x) {
|
||||
printf("Unimplemented: i7_push.\n");
|
||||
if (i7_asm_stack_pointer >= I7_ASM_STACK_CAPACITY) { printf("Stack overflow\n"); return; }
|
||||
i7_asm_stack[i7_asm_stack_pointer++] = x;
|
||||
}
|
||||
void glulx_accelfunc(i7val x, i7val y) {
|
||||
printf("Unimplemented: glulx_accelfunc.\n");
|
||||
|
@ -124,10 +129,6 @@ void glulx_copy(i7val x, i7val y) {
|
|||
printf("Unimplemented: glulx_copy.\n");
|
||||
}
|
||||
|
||||
void glulx_div(i7val x, i7val y, i7val z) {
|
||||
printf("Unimplemented: glulx_div.\n");
|
||||
}
|
||||
|
||||
void glulx_gestalt(i7val x, i7val y, i7val *z) {
|
||||
*z = 1;
|
||||
}
|
||||
|
@ -161,7 +162,7 @@ void glulx_glk(i7val glk_api_selector, i7val i7varargc, i7val *z) {
|
|||
}
|
||||
|
||||
int glulx_jeq(i7val x, i7val y) {
|
||||
printf("Unimplemented: glulx_jeq.\n");
|
||||
if (x == y) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -171,12 +172,12 @@ int glulx_jleu(i7val x, i7val y) {
|
|||
}
|
||||
|
||||
int glulx_jnz(i7val x) {
|
||||
printf("Unimplemented: glulx_jnz.\n");
|
||||
if (x != 0) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int glulx_jz(i7val x) {
|
||||
printf("Unimplemented: glulx_jz.\n");
|
||||
if (x == 0) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -192,17 +193,6 @@ void glulx_mfree(i7val x) {
|
|||
printf("Unimplemented: glulx_mfree.\n");
|
||||
}
|
||||
|
||||
void glulx_mod(i7val x, i7val y, i7val z) {
|
||||
printf("Unimplemented: glulx_mod.\n");
|
||||
}
|
||||
|
||||
void glulx_neg(i7val x, i7val y) {
|
||||
printf("Unimplemented: glulx_neg.\n");
|
||||
}
|
||||
|
||||
void glulx_numtof(i7val x, i7val y) {
|
||||
printf("Unimplemented: glulx_numtof.\n");
|
||||
}
|
||||
|
||||
void glulx_quit(void) {
|
||||
printf("Unimplemented: glulx_quit.\n");
|
||||
|
@ -216,12 +206,14 @@ void glulx_setiosys(i7val x, i7val y) {
|
|||
// Deliberately ignored: we are using stdout, not glk
|
||||
}
|
||||
|
||||
void i7_print_char(i7val x);
|
||||
void glulx_streamchar(i7val x) {
|
||||
printf("%c", (int) x);
|
||||
i7_print_char(x);
|
||||
}
|
||||
|
||||
void i7_print_decimal(i7val x);
|
||||
void glulx_streamnum(i7val x) {
|
||||
printf("Unimplemented: glulx_streamnum.\n");
|
||||
i7_print_decimal(x);
|
||||
}
|
||||
|
||||
void glulx_streamstr(i7val x) {
|
||||
|
@ -229,11 +221,7 @@ void glulx_streamstr(i7val x) {
|
|||
}
|
||||
|
||||
void glulx_streamunichar(i7val x) {
|
||||
printf("%c", (int) x);
|
||||
}
|
||||
|
||||
void glulx_sub(i7val x, i7val y, i7val z) {
|
||||
printf("Unimplemented: glulx_sub.\n");
|
||||
i7_print_char(x);
|
||||
}
|
||||
|
||||
void glulx_ushiftr(i7val x, i7val y, i7val z) {
|
||||
|
@ -270,105 +258,277 @@ i7val fn_i7_mgl_random(int n, i7val v) {
|
|||
void glulx_setrandom(i7val x) {
|
||||
i7_seed = (int) x;
|
||||
}
|
||||
void glulx_exp(i7val x, i7val y) {
|
||||
printf("Unimplemented: glulx_exp.\n");
|
||||
void glulx_add(i7val x, i7val y, i7val *z) {
|
||||
if (z) *z = x + y;
|
||||
}
|
||||
|
||||
void glulx_fadd(i7val x, i7val y, i7val z) {
|
||||
printf("Unimplemented: glulx_fadd.\n");
|
||||
void glulx_sub(i7val x, i7val y, i7val *z) {
|
||||
if (z) *z = x - y;
|
||||
}
|
||||
|
||||
void glulx_fdiv(i7val x, i7val y, i7val z) {
|
||||
printf("Unimplemented: glulx_fdiv.\n");
|
||||
void glulx_neg(i7val x, i7val *y) {
|
||||
if (y) *y = -x;
|
||||
}
|
||||
|
||||
void glulx_floor(i7val x, i7val y) {
|
||||
printf("Unimplemented: glulx_floor.\n");
|
||||
void glulx_mul(i7val x, i7val y, i7val *z) {
|
||||
if (z) *z = x * y;
|
||||
}
|
||||
|
||||
void glulx_fmod(i7val x, i7val y, i7val z, i7val w) {
|
||||
printf("Unimplemented: glulx_fmod.\n");
|
||||
void glulx_div(i7val x, i7val y, i7val *z) {
|
||||
if (y == 0) { printf("Division of %d by 0\n", x); if (z) *z = 1; return; }
|
||||
int result, ax, ay;
|
||||
/* Since C doesn't guarantee the results of division of negative
|
||||
numbers, we carefully convert everything to positive values
|
||||
first. They have to be unsigned values, too, otherwise the
|
||||
0x80000000 case goes wonky. */
|
||||
if (x < 0) {
|
||||
ax = (-x);
|
||||
if (y < 0) {
|
||||
ay = (-y);
|
||||
result = ax / ay;
|
||||
} else {
|
||||
ay = y;
|
||||
result = -(ax / ay);
|
||||
}
|
||||
} else {
|
||||
ax = x;
|
||||
if (y < 0) {
|
||||
ay = (-y);
|
||||
result = -(ax / ay);
|
||||
} else {
|
||||
ay = y;
|
||||
result = ax / ay;
|
||||
}
|
||||
}
|
||||
if (z) *z = result;
|
||||
}
|
||||
|
||||
void glulx_fmul(i7val x, i7val y, i7val z) {
|
||||
printf("Unimplemented: glulx_fmul.\n");
|
||||
i7val glulx_div_r(i7val x, i7val y) {
|
||||
i7val z;
|
||||
glulx_div(x, y, &z);
|
||||
return z;
|
||||
}
|
||||
|
||||
void glulx_fsub(i7val x, i7val y, i7val z) {
|
||||
printf("Unimplemented: glulx_fsub.\n");
|
||||
void glulx_mod(i7val x, i7val y, i7val *z) {
|
||||
if (y == 0) { printf("Division of %d by 0\n", x); if (z) *z = 0; return; }
|
||||
int result, ax, ay;
|
||||
if (y < 0) {
|
||||
ay = -y;
|
||||
} else {
|
||||
ay = y;
|
||||
}
|
||||
if (x < 0) {
|
||||
ax = (-x);
|
||||
result = -(ax % ay);
|
||||
} else {
|
||||
ax = x;
|
||||
result = ax % ay;
|
||||
}
|
||||
if (z) *z = result;
|
||||
}
|
||||
|
||||
void glulx_ftonumn(i7val x, i7val y) {
|
||||
printf("Unimplemented: glulx_ftonumn.\n");
|
||||
i7val glulx_mod_r(i7val x, i7val y) {
|
||||
i7val z;
|
||||
glulx_mod(x, y, &z);
|
||||
return z;
|
||||
}
|
||||
|
||||
void glulx_ftonumz(i7val x, i7val y) {
|
||||
printf("Unimplemented: glulx_ftonumz.\n");
|
||||
typedef float gfloat32;
|
||||
|
||||
i7val encode_float(gfloat32 val) {
|
||||
i7val res;
|
||||
*(gfloat32 *)(&res) = val;
|
||||
return res;
|
||||
}
|
||||
|
||||
gfloat32 decode_float(i7val val) {
|
||||
gfloat32 res;
|
||||
*(i7val *)(&res) = val;
|
||||
return res;
|
||||
}
|
||||
|
||||
void glulx_exp(i7val x, i7val *y) {
|
||||
*y = encode_float(expf(decode_float(x)));
|
||||
}
|
||||
|
||||
void glulx_fadd(i7val x, i7val y, i7val *z) {
|
||||
*z = encode_float(decode_float(x) + decode_float(y));
|
||||
}
|
||||
|
||||
void glulx_fdiv(i7val x, i7val y, i7val *z) {
|
||||
*z = encode_float(decode_float(x) / decode_float(y));
|
||||
}
|
||||
|
||||
void glulx_floor(i7val x, i7val *y) {
|
||||
*y = encode_float(floorf(decode_float(x)));
|
||||
}
|
||||
|
||||
void glulx_fmod(i7val x, i7val y, i7val *z, i7val *w) {
|
||||
float fx = decode_float(x);
|
||||
float fy = decode_float(y);
|
||||
float fquot = fmodf(fx, fy);
|
||||
i7val quot = encode_float(fquot);
|
||||
i7val rem = encode_float((fx-fquot) / fy);
|
||||
if (rem == 0x0 || rem == 0x80000000) {
|
||||
/* When the quotient is zero, the sign has been lost in the
|
||||
shuffle. We'll set that by hand, based on the original
|
||||
arguments. */
|
||||
rem = (x ^ y) & 0x80000000;
|
||||
}
|
||||
if (z) *z = quot;
|
||||
if (w) *w = rem;
|
||||
}
|
||||
|
||||
void glulx_fmul(i7val x, i7val y, i7val *z) {
|
||||
*z = encode_float(decode_float(x) * decode_float(y));
|
||||
}
|
||||
|
||||
void glulx_fsub(i7val x, i7val y, i7val *z) {
|
||||
*z = encode_float(decode_float(x) - decode_float(y));
|
||||
}
|
||||
|
||||
void glulx_ftonumn(i7val x, i7val *y) {
|
||||
float fx = decode_float(x);
|
||||
i7val result;
|
||||
if (!signbit(fx)) {
|
||||
if (isnan(fx) || isinf(fx) || (fx > 2147483647.0))
|
||||
result = 0x7FFFFFFF;
|
||||
else
|
||||
result = (i7val) (roundf(fx));
|
||||
}
|
||||
else {
|
||||
if (isnan(fx) || isinf(fx) || (fx < -2147483647.0))
|
||||
result = 0x80000000;
|
||||
else
|
||||
result = (i7val) (roundf(fx));
|
||||
}
|
||||
*y = result;
|
||||
}
|
||||
|
||||
void glulx_ftonumz(i7val x, i7val *y) {
|
||||
float fx = decode_float(x);
|
||||
i7val result;
|
||||
if (!signbit(fx)) {
|
||||
if (isnan(fx) || isinf(fx) || (fx > 2147483647.0))
|
||||
result = 0x7FFFFFFF;
|
||||
else
|
||||
result = (i7val) (truncf(fx));
|
||||
}
|
||||
else {
|
||||
if (isnan(fx) || isinf(fx) || (fx < -2147483647.0))
|
||||
result = 0x80000000;
|
||||
else
|
||||
result = (i7val) (truncf(fx));
|
||||
}
|
||||
*y = result;
|
||||
}
|
||||
|
||||
void glulx_numtof(i7val x, i7val *y) {
|
||||
*y = encode_float((float) x);
|
||||
}
|
||||
|
||||
int glulx_jfeq(i7val x, i7val y, i7val z) {
|
||||
printf("Unimplemented: glulx_jfeq.\n");
|
||||
int result;
|
||||
if ((z & 0x7F800000) == 0x7F800000 && (z & 0x007FFFFF) != 0) {
|
||||
/* The delta is NaN, which can never match. */
|
||||
result = 0;
|
||||
} else if ((x == 0x7F800000 || x == 0xFF800000)
|
||||
&& (y == 0x7F800000 || y == 0xFF800000)) {
|
||||
/* Both are infinite. Opposite infinities are never equal,
|
||||
even if the difference is infinite, so this is easy. */
|
||||
result = (x == y);
|
||||
} else {
|
||||
float fx = decode_float(y) - decode_float(x);
|
||||
float fy = fabs(decode_float(z));
|
||||
result = (fx <= fy && fx >= -fy);
|
||||
}
|
||||
if (!result) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int glulx_jfne(i7val x, i7val y, i7val z) {
|
||||
int result;
|
||||
if ((z & 0x7F800000) == 0x7F800000 && (z & 0x007FFFFF) != 0) {
|
||||
/* The delta is NaN, which can never match. */
|
||||
result = 0;
|
||||
} else if ((x == 0x7F800000 || x == 0xFF800000)
|
||||
&& (y == 0x7F800000 || y == 0xFF800000)) {
|
||||
/* Both are infinite. Opposite infinities are never equal,
|
||||
even if the difference is infinite, so this is easy. */
|
||||
result = (x == y);
|
||||
} else {
|
||||
float fx = decode_float(y) - decode_float(x);
|
||||
float fy = fabs(decode_float(z));
|
||||
result = (fx <= fy && fx >= -fy);
|
||||
}
|
||||
if (!result) return 1;
|
||||
}
|
||||
|
||||
int glulx_jfge(i7val x, i7val y) {
|
||||
printf("Unimplemented: glulx_jfge.\n");
|
||||
if (isgreaterequal(decode_float(x), decode_float(y))) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int glulx_jflt(i7val x, i7val y) {
|
||||
printf("Unimplemented: glulx_jflt.\n");
|
||||
if (isless(decode_float(x), decode_float(y))) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int glulx_jisinf(i7val x) {
|
||||
printf("Unimplemented: glulx_jisinf.\n");
|
||||
if (isinf(decode_float(x))) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int glulx_jisnan(i7val x) {
|
||||
printf("Unimplemented: glulx_jisnan.\n");
|
||||
if (isnan(decode_float(x))) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void glulx_log(i7val x, i7val y) {
|
||||
printf("Unimplemented: glulx_log.\n");
|
||||
void glulx_log(i7val x, i7val *y) {
|
||||
*y = encode_float(logf(decode_float(x)));
|
||||
}
|
||||
|
||||
void glulx_acos(i7val x, i7val *y) {
|
||||
printf("Unimplemented: glulx_acos\n");
|
||||
*y = encode_float(acosf(decode_float(x)));
|
||||
}
|
||||
|
||||
void glulx_asin(i7val x, i7val *y) {
|
||||
printf("Unimplemented: glulx_asin\n");
|
||||
*y = encode_float(asinf(decode_float(x)));
|
||||
}
|
||||
|
||||
void glulx_atan(i7val x, i7val *y) {
|
||||
printf("Unimplemented: glulx_atan\n");
|
||||
*y = encode_float(atanf(decode_float(x)));
|
||||
}
|
||||
|
||||
void glulx_ceil(i7val x, i7val *y) {
|
||||
printf("Unimplemented: glulx_ceil\n");
|
||||
*y = encode_float(ceilf(decode_float(x)));
|
||||
}
|
||||
|
||||
void glulx_cos(i7val x, i7val *y) {
|
||||
printf("Unimplemented: glulx_cos\n");
|
||||
*y = encode_float(cosf(decode_float(x)));
|
||||
}
|
||||
|
||||
void glulx_pow(i7val x, i7val y, i7val *z) {
|
||||
printf("Unimplemented: glulx_pow\n");
|
||||
if (decode_float(x) == 1.0f)
|
||||
*z = encode_float(1.0f);
|
||||
else if ((decode_float(y) == 0.0f) || (decode_float(y) == -0.0f))
|
||||
*z = encode_float(1.0f);
|
||||
else if ((decode_float(x) == -1.0f) && isinf(decode_float(y)))
|
||||
*z = encode_float(1.0f);
|
||||
else
|
||||
*z = encode_float(powf(decode_float(x), decode_float(y)));
|
||||
}
|
||||
|
||||
void glulx_sin(i7val x, i7val *y) {
|
||||
printf("Unimplemented: glulx_sin\n");
|
||||
*y = encode_float(sinf(decode_float(x)));
|
||||
}
|
||||
|
||||
void glulx_sqrt(i7val x, i7val *y) {
|
||||
printf("Unimplemented: glulx_sqrt\n");
|
||||
*y = encode_float(sqrtf(decode_float(x)));
|
||||
}
|
||||
|
||||
void glulx_tan(i7val x, i7val *y) {
|
||||
printf("Unimplemented: glulx_tan\n");
|
||||
*y = encode_float(tanf(decode_float(x)));
|
||||
}
|
||||
i7val fn_i7_mgl_metaclass(int n, i7val id) {
|
||||
if (id <= 0) return 0;
|
||||
|
@ -415,8 +575,9 @@ void i7_write_prop_value(i7val owner_id, i7val prop_id, i7val val) {
|
|||
i7val i7_read_prop_value(i7val owner_id, i7val prop_id) {
|
||||
if ((owner_id <= 0) || (owner_id >= i7_max_objects) ||
|
||||
(prop_id < 0) || (prop_id >= i7_no_property_ids)) return 0;
|
||||
while (i7_properties[(int) owner_id].value_set[(int) prop_id] == 0)
|
||||
while (i7_properties[(int) owner_id].value_set[(int) prop_id] == 0) {
|
||||
owner_id = i7_class_of[owner_id];
|
||||
}
|
||||
return i7_properties[(int) owner_id].value[(int) prop_id];
|
||||
}
|
||||
|
||||
|
@ -477,11 +638,6 @@ typedef struct i7varargs {
|
|||
|
||||
i7val i7_mgl_self = 0;
|
||||
|
||||
i7val i7_gen_call(i7val fn_ref, i7val *args, int argc, int call_message) {
|
||||
printf("Unimplemented: i7_gen_call.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
i7val i7_call_0(i7val fn_ref) {
|
||||
i7val args[10]; for (int i=0; i<10; i++) args[i] = 0;
|
||||
return i7_gen_call(fn_ref, args, 0, 0);
|
||||
|
@ -554,6 +710,10 @@ void i7_style(int what) {
|
|||
void i7_font(int what) {
|
||||
}
|
||||
|
||||
void i7_print_decimal(i7val x) {
|
||||
printf("%d", (int) x);
|
||||
}
|
||||
|
||||
void i7_print_char(i7val x) {
|
||||
printf("%c", (int) x);
|
||||
}
|
||||
|
|
83
inform7/Tests/Test Basic/BIP-ArithmeticOperations-C.txt
Normal file
83
inform7/Tests/Test Basic/BIP-ArithmeticOperations-C.txt
Normal file
|
@ -0,0 +1,83 @@
|
|||
A fruit is a kind of object.
|
||||
|
||||
An apple, a pear and an orange are fruits. An fruit has a number called size.
|
||||
|
||||
The size of a fruit is usually 4. The size of the apple is 7.
|
||||
|
||||
A length is a kind of value. 1m specifies a length. 1km specifies a length scaled up by 1000.
|
||||
An area is a kind of value. 10 sq m specifies an area.
|
||||
|
||||
A length times a length specifies an area.
|
||||
|
||||
A fruit has a length. An apple has length 1m. A pear has length 6m. An orange has length 3m.
|
||||
|
||||
To begin:
|
||||
showme 2 + 3;
|
||||
showme 2 plus -3;
|
||||
showme 2 - 3;
|
||||
showme 2 minus -3;
|
||||
showme 4 * 5;
|
||||
showme -4 times 5;
|
||||
showme 7 multiplied by 9;
|
||||
showme 256 / 4;
|
||||
showme 440 divided by -10;
|
||||
showme the remainder after dividing 17 by 3;
|
||||
showme 93 to the nearest 10;
|
||||
showme 99 to the nearest 10;
|
||||
showme the square root of 144;
|
||||
showme the cube root of 64;
|
||||
showme the total size of the fruits;
|
||||
showme 2m + 3m;
|
||||
showme 2m plus -3m;
|
||||
showme 2m - 3m;
|
||||
showme 2m minus -3m;
|
||||
showme 4m * 5m;
|
||||
showme -4m times 5m;
|
||||
showme 7m multiplied by 9m;
|
||||
showme 256m / 4m;
|
||||
showme 440 sq m divided by 10m;
|
||||
showme the remainder after dividing 17m by 3;
|
||||
showme 93m to the nearest 10m;
|
||||
showme 99m to the nearest 10m;
|
||||
showme the square root of 144 sq m;
|
||||
showme the total length of the fruits;
|
||||
showme 3 divided by 2;
|
||||
showme 3 divided by 2.0;
|
||||
showme 3.0 divided by 2;
|
||||
showme 3.0 divided by 2.0;
|
||||
showme 3 + 3;
|
||||
showme pi + pi;
|
||||
showme pi + 3;
|
||||
showme 3 + pi;
|
||||
showme 3 - 3;
|
||||
showme pi - pi;
|
||||
showme pi - 3;
|
||||
showme 3 - pi;
|
||||
showme 3 * 3;
|
||||
showme pi * pi;
|
||||
showme pi * 3;
|
||||
showme 3 * pi;
|
||||
showme 3 / 3;
|
||||
showme pi / pi;
|
||||
showme pi / 3;
|
||||
showme 3 / pi;
|
||||
showme the remainder after dividing pi by 3;
|
||||
showme the remainder after dividing 3.3 by 1;
|
||||
showme the remainder after dividing 3.7 by 1;
|
||||
showme the remainder after dividing -3.3 by 1;
|
||||
showme the remainder after dividing -3.7 by 1;
|
||||
showme 2 to the power 4;
|
||||
showme 100 to the power 0.5;
|
||||
showme 7 to the power -1;
|
||||
showme pi to the power 0;
|
||||
showme reciprocal of -2;
|
||||
showme reciprocal of 0.1;
|
||||
showme reciprocal of 7;
|
||||
showme reciprocal of plus infinity;
|
||||
showme real square root of 2;
|
||||
showme 1.4 to the nearest whole number;
|
||||
showme 1.6 to the nearest whole number;
|
||||
showme -1.6 to the nearest whole number;
|
||||
showme 6 x 10^23 to the nearest whole number;
|
||||
showme pi to the power 4;
|
||||
showme pi * pi * pi * pi;
|
|
@ -0,0 +1,70 @@
|
|||
|
||||
"2 + 3" = number: 5
|
||||
"2 plus -3" = number: -1
|
||||
"2 - 3" = number: -1
|
||||
"2 minus -3" = number: 5
|
||||
"4 * 5" = number: 20
|
||||
"-4 times 5" = number: -20
|
||||
"7 multiplied by 9" = number: 63
|
||||
"256 / 4" = number: 64
|
||||
"440 divided by -10" = number: -44
|
||||
"remainder after dividing 17 by 3" = number: 2
|
||||
"93 to the nearest 10" = number: 90
|
||||
"99 to the nearest 10" = number: 100
|
||||
"square root of 144" = number: 12
|
||||
"cube root of 64" = number: 4
|
||||
"total size of the fruits" = number: 15
|
||||
"2m + 3m" = length: 5m
|
||||
"2m plus -3m" = length: -1m
|
||||
"2m - 3m" = length: -1m
|
||||
"2m minus -3m" = length: 5m
|
||||
"4m * 5m" = area: 20 sq m
|
||||
"-4m times 5m" = area: -20 sq m
|
||||
"7m multiplied by 9m" = area: 63 sq m
|
||||
"256m / 4m" = number: 64
|
||||
"440 sq m divided by 10m" = length: 44m
|
||||
"remainder after dividing 17m by 3" = length: 2m
|
||||
"93m to the nearest 10m" = length: 90m
|
||||
"99m to the nearest 10m" = length: 100m
|
||||
"square root of 144 sq m" = length: 12m
|
||||
"total length of the fruits" = length: 10m
|
||||
"3 divided by 2" = number: 1
|
||||
"3 divided by 2.0" = real number: 1.5
|
||||
"3.0 divided by 2" = real number: 1.5
|
||||
"3.0 divided by 2.0" = real number: 1.5
|
||||
"3 + 3" = number: 6
|
||||
"pi + pi" = real number: 6.28319
|
||||
"pi + 3" = real number: 6.14159
|
||||
"3 + pi" = real number: 6.14159
|
||||
"3 - 3" = number: 0
|
||||
"pi - pi" = real number: 0.0
|
||||
"pi - 3" = real number: 0.14159
|
||||
"3 - pi" = real number: -0.14159
|
||||
"3 * 3" = number: 9
|
||||
"pi * pi" = real number: 9.8696
|
||||
"pi * 3" = real number: 9.42478
|
||||
"3 * pi" = real number: 9.42478
|
||||
"3 / 3" = number: 1
|
||||
"pi / pi" = real number: 1.0
|
||||
"pi / 3" = real number: 1.0472
|
||||
"3 / pi" = real number: 0.95493
|
||||
"remainder after dividing pi by 3" = real number: 0.14159
|
||||
"remainder after dividing 3.3 by 1" = real number: 0.3
|
||||
"remainder after dividing 3.7 by 1" = real number: 0.7
|
||||
"remainder after dividing -3.3 by 1" = real number: -0.3
|
||||
"remainder after dividing -3.7 by 1" = real number: -0.7
|
||||
"2 to the power 4" = real number: 16.0
|
||||
"100 to the power 0.5" = real number: 10.0
|
||||
"7 to the power -1" = real number: 0.14286
|
||||
"pi to the power 0" = real number: 1.0
|
||||
"reciprocal of -2" = real number: -0.5
|
||||
"reciprocal of 0.1" = real number: 10.0
|
||||
"reciprocal of 7" = real number: 0.14286
|
||||
"reciprocal of plus infinity" = real number: 0.0
|
||||
"real square root of 2" = real number: 1.41421
|
||||
"1.4 to the nearest whole number" = number: 1
|
||||
"1.6 to the nearest whole number" = number: 2
|
||||
"-1.6 to the nearest whole number" = number: -2
|
||||
"6 x 10^23 to the nearest whole number" = number: 2147483647
|
||||
"pi to the power 4" = real number: 97.4091
|
||||
"pi * pi * pi * pi" = real number: 97.4091
|
|
@ -38,7 +38,6 @@ text_stream *RTKindIDs::identifier_for_weak_ID(kind_constructor *kc) {
|
|||
return kc->explicit_identifier;
|
||||
text_stream *invented = Str::new();
|
||||
WRITE_TO(invented, "WEAK_ID_%d", kc->allocation_id);
|
||||
LOG("I did make %S\n", invented);
|
||||
return invented;
|
||||
}
|
||||
|
||||
|
|
|
@ -159,16 +159,29 @@ void CodeGen::CL::constant(code_generation *gen, inter_tree_node *P) {
|
|||
} else {
|
||||
CodeGen::Targets::begin_array(gen, CodeGen::CL::name(con_name), format);
|
||||
if (hang_one) CodeGen::Targets::array_entry(gen, I"1", format);
|
||||
for (int i=DATA_CONST_IFLD; i<P->W.extent; i=i+2) {
|
||||
if (P->W.data[i] != DIVIDER_IVAL) {
|
||||
TEMPORARY_TEXT(entry)
|
||||
CodeGen::select_temporary(gen, entry);
|
||||
// if ((do_not_bracket == FALSE) && (P->W.data[i] != DIVIDER_IVAL)) WRITE("(");
|
||||
CodeGen::CL::literal(gen, con_name, Inter::Packages::scope_of(P), P->W.data[i], P->W.data[i+1], unsub);
|
||||
// if ((do_not_bracket == FALSE) && (P->W.data[i] != DIVIDER_IVAL)) WRITE(")");
|
||||
CodeGen::deselect_temporary(gen);
|
||||
CodeGen::Targets::array_entry(gen, entry, format);
|
||||
DISCARD_TEXT(entry)
|
||||
int entry_count = 0;
|
||||
for (int i=DATA_CONST_IFLD; i<P->W.extent; i=i+2)
|
||||
if (P->W.data[i] != DIVIDER_IVAL)
|
||||
entry_count++;
|
||||
if (hang_one) entry_count++;
|
||||
inter_ti e = 0; int ips = FALSE;
|
||||
if ((entry_count == 1) && (Inter::Symbols::read_annotation(con_name, ASSIMILATED_IANN) >= 0)) {
|
||||
inter_ti val1 = P->W.data[DATA_CONST_IFLD], val2 = P->W.data[DATA_CONST_IFLD+1];
|
||||
e = CodeGen::CL::evaluate(gen, Inter::Packages::scope_of(P), val1, val2, &ips);
|
||||
}
|
||||
if (e > 1) {
|
||||
LOG("Entry count 1 on %S masks %d blanks\n", CodeGen::CL::name(con_name), e);
|
||||
CodeGen::Targets::array_entries(gen, (int) e, ips, format);
|
||||
} else {
|
||||
for (int i=DATA_CONST_IFLD; i<P->W.extent; i=i+2) {
|
||||
if (P->W.data[i] != DIVIDER_IVAL) {
|
||||
TEMPORARY_TEXT(entry)
|
||||
CodeGen::select_temporary(gen, entry);
|
||||
CodeGen::CL::literal(gen, con_name, Inter::Packages::scope_of(P), P->W.data[i], P->W.data[i+1], unsub);
|
||||
CodeGen::deselect_temporary(gen);
|
||||
CodeGen::Targets::array_entry(gen, entry, format);
|
||||
DISCARD_TEXT(entry)
|
||||
}
|
||||
}
|
||||
}
|
||||
CodeGen::Targets::end_array(gen, format);
|
||||
|
@ -322,6 +335,47 @@ void CodeGen::CL::exit_print_mode(void) {
|
|||
printing_mode = FALSE;
|
||||
}
|
||||
|
||||
inter_ti CodeGen::CL::evaluate(code_generation *gen, inter_symbols_table *T, inter_ti val1, inter_ti val2, int *ips) {
|
||||
if (val1 == LITERAL_IVAL) return val2;
|
||||
if (Inter::Symbols::is_stored_in_data(val1, val2)) {
|
||||
inter_symbol *aliased = InterSymbolsTables::symbol_from_data_pair_and_table(val1, val2, T);
|
||||
if (aliased == NULL) internal_error("bad aliased symbol");
|
||||
inter_tree_node *D = aliased->definition;
|
||||
if (D == NULL) internal_error("undefined symbol");
|
||||
switch (D->W.data[FORMAT_CONST_IFLD]) {
|
||||
case CONSTANT_DIRECT: {
|
||||
inter_ti dval1 = D->W.data[DATA_CONST_IFLD];
|
||||
inter_ti dval2 = D->W.data[DATA_CONST_IFLD + 1];
|
||||
inter_ti e = CodeGen::CL::evaluate(gen, Inter::Packages::scope_of(D), dval1, dval2, ips);
|
||||
if (e == 0) {
|
||||
text_stream *S = CodeGen::CL::name(aliased);
|
||||
if (Str::eq(S, I"INDIV_PROP_START")) *ips = TRUE;
|
||||
}
|
||||
LOG("Eval const $3 = %d\n", aliased, e);
|
||||
return e;
|
||||
}
|
||||
case CONSTANT_SUM_LIST:
|
||||
case CONSTANT_PRODUCT_LIST:
|
||||
case CONSTANT_DIFFERENCE_LIST:
|
||||
case CONSTANT_QUOTIENT_LIST: {
|
||||
inter_ti result = 0;
|
||||
for (int i=DATA_CONST_IFLD; i<D->W.extent; i=i+2) {
|
||||
inter_ti extra = CodeGen::CL::evaluate(gen, Inter::Packages::scope_of(D), D->W.data[i], D->W.data[i+1], ips);
|
||||
if (i == DATA_CONST_IFLD) result = extra;
|
||||
else {
|
||||
if (D->W.data[FORMAT_CONST_IFLD] == CONSTANT_SUM_LIST) result = result + extra;
|
||||
if (D->W.data[FORMAT_CONST_IFLD] == CONSTANT_PRODUCT_LIST) result = result * extra;
|
||||
if (D->W.data[FORMAT_CONST_IFLD] == CONSTANT_DIFFERENCE_LIST) result = result - extra;
|
||||
if (D->W.data[FORMAT_CONST_IFLD] == CONSTANT_QUOTIENT_LIST) result = result / extra;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void CodeGen::CL::literal(code_generation *gen, inter_symbol *con_name, inter_symbols_table *T, inter_ti val1, inter_ti val2, int unsub) {
|
||||
inter_tree *I = gen->from;
|
||||
text_stream *OUT = CodeGen::current(gen);
|
||||
|
|
|
@ -326,6 +326,7 @@ void CodeGen::Targets::end_opcode(code_generation *gen) {
|
|||
|
||||
@e BEGIN_ARRAY_MTID
|
||||
@e ARRAY_ENTRY_MTID
|
||||
@e ARRAY_ENTRIES_MTID
|
||||
@e END_ARRAY_MTID
|
||||
|
||||
@d WORD_ARRAY_FORMAT 1
|
||||
|
@ -336,6 +337,7 @@ void CodeGen::Targets::end_opcode(code_generation *gen) {
|
|||
=
|
||||
VOID_METHOD_TYPE(BEGIN_ARRAY_MTID, code_generation_target *cgt, code_generation *gen, text_stream *const_name, int format)
|
||||
VOID_METHOD_TYPE(ARRAY_ENTRY_MTID, code_generation_target *cgt, code_generation *gen, text_stream *entry, int format)
|
||||
VOID_METHOD_TYPE(ARRAY_ENTRIES_MTID, code_generation_target *cgt, code_generation *gen, int how_many, int plus_ips, int format)
|
||||
VOID_METHOD_TYPE(END_ARRAY_MTID, code_generation_target *cgt, code_generation *gen, int format)
|
||||
void CodeGen::Targets::begin_array(code_generation *gen, text_stream *const_name, int format) {
|
||||
VOID_METHOD_CALL(gen->target, BEGIN_ARRAY_MTID, gen, const_name, format);
|
||||
|
@ -343,6 +345,9 @@ void CodeGen::Targets::begin_array(code_generation *gen, text_stream *const_name
|
|||
void CodeGen::Targets::array_entry(code_generation *gen, text_stream *entry, int format) {
|
||||
VOID_METHOD_CALL(gen->target, ARRAY_ENTRY_MTID, gen, entry, format);
|
||||
}
|
||||
void CodeGen::Targets::array_entries(code_generation *gen, int how_many, int plus_ips, int format) {
|
||||
VOID_METHOD_CALL(gen->target, ARRAY_ENTRIES_MTID, gen, how_many, plus_ips, format);
|
||||
}
|
||||
void CodeGen::Targets::mangled_array_entry(code_generation *gen, text_stream *entry, int format) {
|
||||
TEMPORARY_TEXT(mangled)
|
||||
CodeGen::Targets::mangle(gen, mangled, entry);
|
||||
|
|
|
@ -104,6 +104,7 @@ void CodeGen::I6::create_target(void) {
|
|||
METHOD_ADD(cgt, END_OPCODE_MTID, CodeGen::I6::end_opcode);
|
||||
METHOD_ADD(cgt, BEGIN_ARRAY_MTID, CodeGen::I6::begin_array);
|
||||
METHOD_ADD(cgt, ARRAY_ENTRY_MTID, CodeGen::I6::array_entry);
|
||||
METHOD_ADD(cgt, ARRAY_ENTRIES_MTID, CodeGen::I6::array_entries);
|
||||
METHOD_ADD(cgt, END_ARRAY_MTID, CodeGen::I6::end_array);
|
||||
METHOD_ADD(cgt, OFFER_PRAGMA_MTID, CodeGen::I6::offer_pragma)
|
||||
METHOD_ADD(cgt, END_GENERATION_MTID, CodeGen::I6::end_generation);
|
||||
|
@ -803,6 +804,17 @@ void CodeGen::I6::array_entry(code_generation_target *cgt, code_generation *gen,
|
|||
WRITE(" (%S)", entry);
|
||||
}
|
||||
|
||||
@ Alternatively, we can just specify how many entries there will be: they will
|
||||
then be initialised to 0.
|
||||
|
||||
=
|
||||
void CodeGen::I6::array_entries(code_generation_target *cgt, code_generation *gen,
|
||||
int how_many, int plus_ips, int format) {
|
||||
text_stream *OUT = CodeGen::current(gen);
|
||||
if (plus_ips) WRITE(" (%d + INDIV_PROP_START)", how_many, plus_ips);
|
||||
else WRITE(" (%d)", how_many);
|
||||
}
|
||||
|
||||
void CodeGen::I6::end_array(code_generation_target *cgt, code_generation *gen, int format) {
|
||||
text_stream *OUT = CodeGen::current(gen);
|
||||
WRITE(";\n");
|
||||
|
|
|
@ -12,9 +12,19 @@ int CArithmetic::compile_primitive(code_generation *gen, inter_ti bip, inter_tre
|
|||
case PLUS_BIP: WRITE("("); INV_A1; WRITE(" + "); INV_A2; WRITE(")"); break;
|
||||
case MINUS_BIP: WRITE("("); INV_A1; WRITE(" - "); INV_A2; WRITE(")"); break;
|
||||
case UNARYMINUS_BIP: WRITE("(-("); INV_A1; WRITE("))"); break;
|
||||
case TIMES_BIP: WRITE("("); INV_A1; WRITE("*"); INV_A2; WRITE(")"); break;
|
||||
case DIVIDE_BIP: WRITE("("); INV_A1; WRITE("/"); INV_A2; WRITE(")"); break;
|
||||
case MODULO_BIP: WRITE("("); INV_A1; WRITE("%%"); INV_A2; WRITE(")"); break;
|
||||
case TIMES_BIP: WRITE("("); INV_A1; WRITE(" * "); INV_A2; WRITE(")"); break;
|
||||
case DIVIDE_BIP: if (CFunctionModel::inside_function(gen)) {
|
||||
WRITE("glulx_div_r("); INV_A1; WRITE(", "); INV_A2; WRITE(")");
|
||||
} else {
|
||||
WRITE("("); INV_A1; WRITE(" / "); INV_A2; WRITE(")"); break;
|
||||
}
|
||||
break;
|
||||
case MODULO_BIP: if (CFunctionModel::inside_function(gen)) {
|
||||
WRITE("glulx_mod_r("); INV_A1; WRITE(", "); INV_A2; WRITE(")");
|
||||
} else {
|
||||
WRITE("("); INV_A1; WRITE(" %% "); INV_A2; WRITE(")");
|
||||
}
|
||||
break;
|
||||
case BITWISEAND_BIP: WRITE("(("); INV_A1; WRITE(")&("); INV_A2; WRITE("))"); break;
|
||||
case BITWISEOR_BIP: WRITE("(("); INV_A1; WRITE(")|("); INV_A2; WRITE("))"); break;
|
||||
case BITWISENOT_BIP: WRITE("(~("); INV_A1; WRITE("))"); break;
|
||||
|
@ -54,104 +64,276 @@ Note that floating-point numbers are stored in |i7val| values at runtime by
|
|||
storing |float| (not, alas, |double|) values as if they were four-byte integers.
|
||||
|
||||
= (text to inform7_clib.h)
|
||||
void glulx_exp(i7val x, i7val y) {
|
||||
printf("Unimplemented: glulx_exp.\n");
|
||||
void glulx_add(i7val x, i7val y, i7val *z) {
|
||||
if (z) *z = x + y;
|
||||
}
|
||||
|
||||
void glulx_fadd(i7val x, i7val y, i7val z) {
|
||||
printf("Unimplemented: glulx_fadd.\n");
|
||||
void glulx_sub(i7val x, i7val y, i7val *z) {
|
||||
if (z) *z = x - y;
|
||||
}
|
||||
|
||||
void glulx_fdiv(i7val x, i7val y, i7val z) {
|
||||
printf("Unimplemented: glulx_fdiv.\n");
|
||||
void glulx_neg(i7val x, i7val *y) {
|
||||
if (y) *y = -x;
|
||||
}
|
||||
|
||||
void glulx_floor(i7val x, i7val y) {
|
||||
printf("Unimplemented: glulx_floor.\n");
|
||||
void glulx_mul(i7val x, i7val y, i7val *z) {
|
||||
if (z) *z = x * y;
|
||||
}
|
||||
|
||||
void glulx_fmod(i7val x, i7val y, i7val z, i7val w) {
|
||||
printf("Unimplemented: glulx_fmod.\n");
|
||||
void glulx_div(i7val x, i7val y, i7val *z) {
|
||||
if (y == 0) { printf("Division of %d by 0\n", x); if (z) *z = 1; return; }
|
||||
int result, ax, ay;
|
||||
/* Since C doesn't guarantee the results of division of negative
|
||||
numbers, we carefully convert everything to positive values
|
||||
first. They have to be unsigned values, too, otherwise the
|
||||
0x80000000 case goes wonky. */
|
||||
if (x < 0) {
|
||||
ax = (-x);
|
||||
if (y < 0) {
|
||||
ay = (-y);
|
||||
result = ax / ay;
|
||||
} else {
|
||||
ay = y;
|
||||
result = -(ax / ay);
|
||||
}
|
||||
} else {
|
||||
ax = x;
|
||||
if (y < 0) {
|
||||
ay = (-y);
|
||||
result = -(ax / ay);
|
||||
} else {
|
||||
ay = y;
|
||||
result = ax / ay;
|
||||
}
|
||||
}
|
||||
if (z) *z = result;
|
||||
}
|
||||
|
||||
void glulx_fmul(i7val x, i7val y, i7val z) {
|
||||
printf("Unimplemented: glulx_fmul.\n");
|
||||
i7val glulx_div_r(i7val x, i7val y) {
|
||||
i7val z;
|
||||
glulx_div(x, y, &z);
|
||||
return z;
|
||||
}
|
||||
|
||||
void glulx_fsub(i7val x, i7val y, i7val z) {
|
||||
printf("Unimplemented: glulx_fsub.\n");
|
||||
void glulx_mod(i7val x, i7val y, i7val *z) {
|
||||
if (y == 0) { printf("Division of %d by 0\n", x); if (z) *z = 0; return; }
|
||||
int result, ax, ay;
|
||||
if (y < 0) {
|
||||
ay = -y;
|
||||
} else {
|
||||
ay = y;
|
||||
}
|
||||
if (x < 0) {
|
||||
ax = (-x);
|
||||
result = -(ax % ay);
|
||||
} else {
|
||||
ax = x;
|
||||
result = ax % ay;
|
||||
}
|
||||
if (z) *z = result;
|
||||
}
|
||||
|
||||
void glulx_ftonumn(i7val x, i7val y) {
|
||||
printf("Unimplemented: glulx_ftonumn.\n");
|
||||
i7val glulx_mod_r(i7val x, i7val y) {
|
||||
i7val z;
|
||||
glulx_mod(x, y, &z);
|
||||
return z;
|
||||
}
|
||||
|
||||
void glulx_ftonumz(i7val x, i7val y) {
|
||||
printf("Unimplemented: glulx_ftonumz.\n");
|
||||
typedef float gfloat32;
|
||||
|
||||
i7val encode_float(gfloat32 val) {
|
||||
i7val res;
|
||||
*(gfloat32 *)(&res) = val;
|
||||
return res;
|
||||
}
|
||||
|
||||
gfloat32 decode_float(i7val val) {
|
||||
gfloat32 res;
|
||||
*(i7val *)(&res) = val;
|
||||
return res;
|
||||
}
|
||||
|
||||
void glulx_exp(i7val x, i7val *y) {
|
||||
*y = encode_float(expf(decode_float(x)));
|
||||
}
|
||||
|
||||
void glulx_fadd(i7val x, i7val y, i7val *z) {
|
||||
*z = encode_float(decode_float(x) + decode_float(y));
|
||||
}
|
||||
|
||||
void glulx_fdiv(i7val x, i7val y, i7val *z) {
|
||||
*z = encode_float(decode_float(x) / decode_float(y));
|
||||
}
|
||||
|
||||
void glulx_floor(i7val x, i7val *y) {
|
||||
*y = encode_float(floorf(decode_float(x)));
|
||||
}
|
||||
|
||||
void glulx_fmod(i7val x, i7val y, i7val *z, i7val *w) {
|
||||
float fx = decode_float(x);
|
||||
float fy = decode_float(y);
|
||||
float fquot = fmodf(fx, fy);
|
||||
i7val quot = encode_float(fquot);
|
||||
i7val rem = encode_float((fx-fquot) / fy);
|
||||
if (rem == 0x0 || rem == 0x80000000) {
|
||||
/* When the quotient is zero, the sign has been lost in the
|
||||
shuffle. We'll set that by hand, based on the original
|
||||
arguments. */
|
||||
rem = (x ^ y) & 0x80000000;
|
||||
}
|
||||
if (z) *z = quot;
|
||||
if (w) *w = rem;
|
||||
}
|
||||
|
||||
void glulx_fmul(i7val x, i7val y, i7val *z) {
|
||||
*z = encode_float(decode_float(x) * decode_float(y));
|
||||
}
|
||||
|
||||
void glulx_fsub(i7val x, i7val y, i7val *z) {
|
||||
*z = encode_float(decode_float(x) - decode_float(y));
|
||||
}
|
||||
|
||||
void glulx_ftonumn(i7val x, i7val *y) {
|
||||
float fx = decode_float(x);
|
||||
i7val result;
|
||||
if (!signbit(fx)) {
|
||||
if (isnan(fx) || isinf(fx) || (fx > 2147483647.0))
|
||||
result = 0x7FFFFFFF;
|
||||
else
|
||||
result = (i7val) (roundf(fx));
|
||||
}
|
||||
else {
|
||||
if (isnan(fx) || isinf(fx) || (fx < -2147483647.0))
|
||||
result = 0x80000000;
|
||||
else
|
||||
result = (i7val) (roundf(fx));
|
||||
}
|
||||
*y = result;
|
||||
}
|
||||
|
||||
void glulx_ftonumz(i7val x, i7val *y) {
|
||||
float fx = decode_float(x);
|
||||
i7val result;
|
||||
if (!signbit(fx)) {
|
||||
if (isnan(fx) || isinf(fx) || (fx > 2147483647.0))
|
||||
result = 0x7FFFFFFF;
|
||||
else
|
||||
result = (i7val) (truncf(fx));
|
||||
}
|
||||
else {
|
||||
if (isnan(fx) || isinf(fx) || (fx < -2147483647.0))
|
||||
result = 0x80000000;
|
||||
else
|
||||
result = (i7val) (truncf(fx));
|
||||
}
|
||||
*y = result;
|
||||
}
|
||||
|
||||
void glulx_numtof(i7val x, i7val *y) {
|
||||
*y = encode_float((float) x);
|
||||
}
|
||||
|
||||
int glulx_jfeq(i7val x, i7val y, i7val z) {
|
||||
printf("Unimplemented: glulx_jfeq.\n");
|
||||
int result;
|
||||
if ((z & 0x7F800000) == 0x7F800000 && (z & 0x007FFFFF) != 0) {
|
||||
/* The delta is NaN, which can never match. */
|
||||
result = 0;
|
||||
} else if ((x == 0x7F800000 || x == 0xFF800000)
|
||||
&& (y == 0x7F800000 || y == 0xFF800000)) {
|
||||
/* Both are infinite. Opposite infinities are never equal,
|
||||
even if the difference is infinite, so this is easy. */
|
||||
result = (x == y);
|
||||
} else {
|
||||
float fx = decode_float(y) - decode_float(x);
|
||||
float fy = fabs(decode_float(z));
|
||||
result = (fx <= fy && fx >= -fy);
|
||||
}
|
||||
if (!result) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int glulx_jfne(i7val x, i7val y, i7val z) {
|
||||
int result;
|
||||
if ((z & 0x7F800000) == 0x7F800000 && (z & 0x007FFFFF) != 0) {
|
||||
/* The delta is NaN, which can never match. */
|
||||
result = 0;
|
||||
} else if ((x == 0x7F800000 || x == 0xFF800000)
|
||||
&& (y == 0x7F800000 || y == 0xFF800000)) {
|
||||
/* Both are infinite. Opposite infinities are never equal,
|
||||
even if the difference is infinite, so this is easy. */
|
||||
result = (x == y);
|
||||
} else {
|
||||
float fx = decode_float(y) - decode_float(x);
|
||||
float fy = fabs(decode_float(z));
|
||||
result = (fx <= fy && fx >= -fy);
|
||||
}
|
||||
if (!result) return 1;
|
||||
}
|
||||
|
||||
int glulx_jfge(i7val x, i7val y) {
|
||||
printf("Unimplemented: glulx_jfge.\n");
|
||||
if (isgreaterequal(decode_float(x), decode_float(y))) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int glulx_jflt(i7val x, i7val y) {
|
||||
printf("Unimplemented: glulx_jflt.\n");
|
||||
if (isless(decode_float(x), decode_float(y))) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int glulx_jisinf(i7val x) {
|
||||
printf("Unimplemented: glulx_jisinf.\n");
|
||||
if (isinf(decode_float(x))) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int glulx_jisnan(i7val x) {
|
||||
printf("Unimplemented: glulx_jisnan.\n");
|
||||
if (isnan(decode_float(x))) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void glulx_log(i7val x, i7val y) {
|
||||
printf("Unimplemented: glulx_log.\n");
|
||||
void glulx_log(i7val x, i7val *y) {
|
||||
*y = encode_float(logf(decode_float(x)));
|
||||
}
|
||||
|
||||
void glulx_acos(i7val x, i7val *y) {
|
||||
printf("Unimplemented: glulx_acos\n");
|
||||
*y = encode_float(acosf(decode_float(x)));
|
||||
}
|
||||
|
||||
void glulx_asin(i7val x, i7val *y) {
|
||||
printf("Unimplemented: glulx_asin\n");
|
||||
*y = encode_float(asinf(decode_float(x)));
|
||||
}
|
||||
|
||||
void glulx_atan(i7val x, i7val *y) {
|
||||
printf("Unimplemented: glulx_atan\n");
|
||||
*y = encode_float(atanf(decode_float(x)));
|
||||
}
|
||||
|
||||
void glulx_ceil(i7val x, i7val *y) {
|
||||
printf("Unimplemented: glulx_ceil\n");
|
||||
*y = encode_float(ceilf(decode_float(x)));
|
||||
}
|
||||
|
||||
void glulx_cos(i7val x, i7val *y) {
|
||||
printf("Unimplemented: glulx_cos\n");
|
||||
*y = encode_float(cosf(decode_float(x)));
|
||||
}
|
||||
|
||||
void glulx_pow(i7val x, i7val y, i7val *z) {
|
||||
printf("Unimplemented: glulx_pow\n");
|
||||
if (decode_float(x) == 1.0f)
|
||||
*z = encode_float(1.0f);
|
||||
else if ((decode_float(y) == 0.0f) || (decode_float(y) == -0.0f))
|
||||
*z = encode_float(1.0f);
|
||||
else if ((decode_float(x) == -1.0f) && isinf(decode_float(y)))
|
||||
*z = encode_float(1.0f);
|
||||
else
|
||||
*z = encode_float(powf(decode_float(x), decode_float(y)));
|
||||
}
|
||||
|
||||
void glulx_sin(i7val x, i7val *y) {
|
||||
printf("Unimplemented: glulx_sin\n");
|
||||
*y = encode_float(sinf(decode_float(x)));
|
||||
}
|
||||
|
||||
void glulx_sqrt(i7val x, i7val *y) {
|
||||
printf("Unimplemented: glulx_sqrt\n");
|
||||
*y = encode_float(sqrtf(decode_float(x)));
|
||||
}
|
||||
|
||||
void glulx_tan(i7val x, i7val *y) {
|
||||
printf("Unimplemented: glulx_tan\n");
|
||||
*y = encode_float(tanf(decode_float(x)));
|
||||
}
|
||||
=
|
||||
|
|
|
@ -15,14 +15,17 @@ typedef struct C_generation_assembly_data {
|
|||
int operand_count;
|
||||
int operand_branches;
|
||||
struct inter_tree_node *operand_label;
|
||||
int pointer_on_operand;
|
||||
int pointer_on_operand[16];
|
||||
int pushed_result;
|
||||
} C_generation_assembly_data;
|
||||
|
||||
void CAssembly::initialise_data(code_generation *gen) {
|
||||
C_GEN_DATA(asmdata.operand_count) = 0;
|
||||
C_GEN_DATA(asmdata.operand_branches) = FALSE;
|
||||
C_GEN_DATA(asmdata.operand_label) = NULL;
|
||||
C_GEN_DATA(asmdata.pointer_on_operand) = -1;
|
||||
for (int i=0; i<16; i++)
|
||||
C_GEN_DATA(asmdata.pointer_on_operand[i]) = FALSE;
|
||||
C_GEN_DATA(asmdata.pushed_result) = FALSE;
|
||||
}
|
||||
|
||||
void CAssembly::begin(code_generation *gen) {
|
||||
|
@ -37,14 +40,18 @@ void CAssembly::end(code_generation *gen) {
|
|||
|
||||
= (text to inform7_clib.h)
|
||||
i7val i7_mgl_sp = 0;
|
||||
#define I7_ASM_STACK_CAPACITY 128
|
||||
i7val i7_asm_stack[I7_ASM_STACK_CAPACITY];
|
||||
int i7_asm_stack_pointer = 0;
|
||||
|
||||
i7val i7_pull(void) {
|
||||
printf("Unimplemented: i7_pull.\n");
|
||||
return (i7val) 0;
|
||||
if (i7_asm_stack_pointer <= 0) { printf("Stack underflow\n"); return (i7val) 0; }
|
||||
return i7_asm_stack[--i7_asm_stack_pointer];
|
||||
}
|
||||
|
||||
void i7_push(i7val x) {
|
||||
printf("Unimplemented: i7_push.\n");
|
||||
if (i7_asm_stack_pointer >= I7_ASM_STACK_CAPACITY) { printf("Stack overflow\n"); return; }
|
||||
i7_asm_stack[i7_asm_stack_pointer++] = x;
|
||||
}
|
||||
=
|
||||
|
||||
|
@ -54,6 +61,7 @@ void i7_push(i7val x) {
|
|||
void CAssembly::begin_opcode(code_generation_target *cgt, code_generation *gen, text_stream *opcode) {
|
||||
text_stream *OUT = CodeGen::current(gen);
|
||||
C_GEN_DATA(asmdata.operand_branches) = FALSE;
|
||||
C_GEN_DATA(asmdata.pushed_result) = FALSE;
|
||||
C_GEN_DATA(asmdata.operand_label) = NULL;
|
||||
if (Str::get_at(opcode, 1) == 'j') { C_GEN_DATA(asmdata.operand_branches) = TRUE; }
|
||||
if (Str::eq(opcode, I"@return")) WRITE("return ");
|
||||
|
@ -62,23 +70,44 @@ void CAssembly::begin_opcode(code_generation_target *cgt, code_generation *gen,
|
|||
CNamespace::mangle_opcode(cgt, OUT, opcode);
|
||||
}
|
||||
WRITE("("); C_GEN_DATA(asmdata.operand_count) = 0;
|
||||
C_GEN_DATA(asmdata.pointer_on_operand) = -1;
|
||||
if (Str::eq(opcode, I"@acos")) C_GEN_DATA(asmdata.pointer_on_operand) = 2;
|
||||
if (Str::eq(opcode, I"@aload")) C_GEN_DATA(asmdata.pointer_on_operand) = 3;
|
||||
if (Str::eq(opcode, I"@aloadb")) C_GEN_DATA(asmdata.pointer_on_operand) = 3;
|
||||
if (Str::eq(opcode, I"@aloads")) C_GEN_DATA(asmdata.pointer_on_operand) = 3;
|
||||
if (Str::eq(opcode, I"@asin")) C_GEN_DATA(asmdata.pointer_on_operand) = 2;
|
||||
if (Str::eq(opcode, I"@atan")) C_GEN_DATA(asmdata.pointer_on_operand) = 2;
|
||||
if (Str::eq(opcode, I"@binarysearch")) C_GEN_DATA(asmdata.pointer_on_operand) = 8;
|
||||
if (Str::eq(opcode, I"@ceil")) C_GEN_DATA(asmdata.pointer_on_operand) = 2;
|
||||
if (Str::eq(opcode, I"@cos")) C_GEN_DATA(asmdata.pointer_on_operand) = 2;
|
||||
if (Str::eq(opcode, I"@gestalt")) C_GEN_DATA(asmdata.pointer_on_operand) = 3;
|
||||
if (Str::eq(opcode, I"@glk")) C_GEN_DATA(asmdata.pointer_on_operand) = 3;
|
||||
if (Str::eq(opcode, I"@pow")) C_GEN_DATA(asmdata.pointer_on_operand) = 3;
|
||||
if (Str::eq(opcode, I"@shiftl")) C_GEN_DATA(asmdata.pointer_on_operand) = 3;
|
||||
if (Str::eq(opcode, I"@sin")) C_GEN_DATA(asmdata.pointer_on_operand) = 2;
|
||||
if (Str::eq(opcode, I"@sqrt")) C_GEN_DATA(asmdata.pointer_on_operand) = 2;
|
||||
if (Str::eq(opcode, I"@tan")) C_GEN_DATA(asmdata.pointer_on_operand) = 2;
|
||||
for (int i=0; i<16; i++)
|
||||
C_GEN_DATA(asmdata.pointer_on_operand[i]) = FALSE;
|
||||
if (Str::eq(opcode, I"@acos")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
|
||||
if (Str::eq(opcode, I"@add")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
|
||||
if (Str::eq(opcode, I"@aload")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
|
||||
if (Str::eq(opcode, I"@aloadb")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
|
||||
if (Str::eq(opcode, I"@aloads")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
|
||||
if (Str::eq(opcode, I"@asin")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
|
||||
if (Str::eq(opcode, I"@atan")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
|
||||
if (Str::eq(opcode, I"@binarysearch")) C_GEN_DATA(asmdata.pointer_on_operand[8]) = TRUE;
|
||||
if (Str::eq(opcode, I"@ceil")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
|
||||
if (Str::eq(opcode, I"@cos")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
|
||||
if (Str::eq(opcode, I"@div")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
|
||||
if (Str::eq(opcode, I"@exp")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
|
||||
if (Str::eq(opcode, I"@fadd")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
|
||||
if (Str::eq(opcode, I"@fdiv")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
|
||||
if (Str::eq(opcode, I"@floor")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
|
||||
if (Str::eq(opcode, I"@fmod")) {
|
||||
C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
|
||||
C_GEN_DATA(asmdata.pointer_on_operand[4]) = TRUE;
|
||||
}
|
||||
if (Str::eq(opcode, I"@fmul")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
|
||||
if (Str::eq(opcode, I"@fsub")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
|
||||
if (Str::eq(opcode, I"@ftonumn")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
|
||||
if (Str::eq(opcode, I"@ftonumz")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
|
||||
if (Str::eq(opcode, I"@gestalt")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
|
||||
if (Str::eq(opcode, I"@glk")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
|
||||
if (Str::eq(opcode, I"@log")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
|
||||
if (Str::eq(opcode, I"@mod")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
|
||||
if (Str::eq(opcode, I"@mul")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
|
||||
if (Str::eq(opcode, I"@neg")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
|
||||
if (Str::eq(opcode, I"@numtof")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
|
||||
if (Str::eq(opcode, I"@pow")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
|
||||
if (Str::eq(opcode, I"@shiftl")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
|
||||
if (Str::eq(opcode, I"@sin")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
|
||||
if (Str::eq(opcode, I"@sqrt")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
|
||||
if (Str::eq(opcode, I"@sub")) C_GEN_DATA(asmdata.pointer_on_operand[3]) = TRUE;
|
||||
if (Str::eq(opcode, I"@tan")) C_GEN_DATA(asmdata.pointer_on_operand[2]) = TRUE;
|
||||
}
|
||||
void CAssembly::supply_operand(code_generation_target *cgt, code_generation *gen, inter_tree_node *F, int is_label) {
|
||||
text_stream *OUT = CodeGen::current(gen);
|
||||
|
@ -86,17 +115,19 @@ void CAssembly::supply_operand(code_generation_target *cgt, code_generation *gen
|
|||
C_GEN_DATA(asmdata.operand_label) = F;
|
||||
} else {
|
||||
if (C_GEN_DATA(asmdata.operand_count)++ > 0) WRITE(", ");
|
||||
if (C_GEN_DATA(asmdata.operand_count) == C_GEN_DATA(asmdata.pointer_on_operand)) {
|
||||
TEMPORARY_TEXT(write_to)
|
||||
CodeGen::select_temporary(gen, write_to);
|
||||
CodeGen::FC::frame(gen, F);
|
||||
CodeGen::deselect_temporary(gen);
|
||||
if (Str::eq(write_to, I"0")) WRITE("NULL");
|
||||
TEMPORARY_TEXT(write_to)
|
||||
CodeGen::select_temporary(gen, write_to);
|
||||
CodeGen::FC::frame(gen, F);
|
||||
CodeGen::deselect_temporary(gen);
|
||||
if (C_GEN_DATA(asmdata.pointer_on_operand[C_GEN_DATA(asmdata.operand_count)])) {
|
||||
if (Str::eq(write_to, I"i7_mgl_sp")) { WRITE("&%S", write_to); C_GEN_DATA(asmdata.pushed_result) = TRUE; }
|
||||
else if (Str::eq(write_to, I"0")) WRITE("NULL");
|
||||
else WRITE("&%S", write_to);
|
||||
DISCARD_TEXT(write_to)
|
||||
} else {
|
||||
CodeGen::FC::frame(gen, F);
|
||||
if (Str::eq(write_to, I"i7_mgl_sp")) { WRITE("i7_pull()"); }
|
||||
else WRITE("%S", write_to);
|
||||
}
|
||||
DISCARD_TEXT(write_to)
|
||||
}
|
||||
}
|
||||
void CAssembly::end_opcode(code_generation_target *cgt, code_generation *gen) {
|
||||
|
@ -108,6 +139,7 @@ void CAssembly::end_opcode(code_generation_target *cgt, code_generation *gen) {
|
|||
if (C_GEN_DATA(asmdata.operand_label) == NULL) internal_error("no branch label");
|
||||
CodeGen::FC::frame(gen, C_GEN_DATA(asmdata.operand_label));
|
||||
}
|
||||
if (C_GEN_DATA(asmdata.pushed_result)) WRITE("; i7_push(i7_mgl_sp)");
|
||||
}
|
||||
|
||||
@
|
||||
|
@ -129,10 +161,6 @@ void glulx_copy(i7val x, i7val y) {
|
|||
printf("Unimplemented: glulx_copy.\n");
|
||||
}
|
||||
|
||||
void glulx_div(i7val x, i7val y, i7val z) {
|
||||
printf("Unimplemented: glulx_div.\n");
|
||||
}
|
||||
|
||||
void glulx_gestalt(i7val x, i7val y, i7val *z) {
|
||||
*z = 1;
|
||||
}
|
||||
|
@ -166,7 +194,7 @@ void glulx_glk(i7val glk_api_selector, i7val i7varargc, i7val *z) {
|
|||
}
|
||||
|
||||
int glulx_jeq(i7val x, i7val y) {
|
||||
printf("Unimplemented: glulx_jeq.\n");
|
||||
if (x == y) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -176,12 +204,12 @@ int glulx_jleu(i7val x, i7val y) {
|
|||
}
|
||||
|
||||
int glulx_jnz(i7val x) {
|
||||
printf("Unimplemented: glulx_jnz.\n");
|
||||
if (x != 0) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int glulx_jz(i7val x) {
|
||||
printf("Unimplemented: glulx_jz.\n");
|
||||
if (x == 0) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -197,17 +225,6 @@ void glulx_mfree(i7val x) {
|
|||
printf("Unimplemented: glulx_mfree.\n");
|
||||
}
|
||||
|
||||
void glulx_mod(i7val x, i7val y, i7val z) {
|
||||
printf("Unimplemented: glulx_mod.\n");
|
||||
}
|
||||
|
||||
void glulx_neg(i7val x, i7val y) {
|
||||
printf("Unimplemented: glulx_neg.\n");
|
||||
}
|
||||
|
||||
void glulx_numtof(i7val x, i7val y) {
|
||||
printf("Unimplemented: glulx_numtof.\n");
|
||||
}
|
||||
|
||||
void glulx_quit(void) {
|
||||
printf("Unimplemented: glulx_quit.\n");
|
||||
|
@ -221,12 +238,14 @@ void glulx_setiosys(i7val x, i7val y) {
|
|||
// Deliberately ignored: we are using stdout, not glk
|
||||
}
|
||||
|
||||
void i7_print_char(i7val x);
|
||||
void glulx_streamchar(i7val x) {
|
||||
printf("%c", (int) x);
|
||||
i7_print_char(x);
|
||||
}
|
||||
|
||||
void i7_print_decimal(i7val x);
|
||||
void glulx_streamnum(i7val x) {
|
||||
printf("Unimplemented: glulx_streamnum.\n");
|
||||
i7_print_decimal(x);
|
||||
}
|
||||
|
||||
void glulx_streamstr(i7val x) {
|
||||
|
@ -234,11 +253,7 @@ void glulx_streamstr(i7val x) {
|
|||
}
|
||||
|
||||
void glulx_streamunichar(i7val x) {
|
||||
printf("%c", (int) x);
|
||||
}
|
||||
|
||||
void glulx_sub(i7val x, i7val y, i7val z) {
|
||||
printf("Unimplemented: glulx_sub.\n");
|
||||
i7_print_char(x);
|
||||
}
|
||||
|
||||
void glulx_ushiftr(i7val x, i7val y, i7val z) {
|
||||
|
|
|
@ -20,12 +20,14 @@ typedef struct C_generation_function_model_data {
|
|||
struct text_stream *prototype;
|
||||
int argument_count;
|
||||
struct final_c_function *current_fcf;
|
||||
int compiling_function;
|
||||
} C_generation_function_model_data;
|
||||
|
||||
void CFunctionModel::initialise_data(code_generation *gen) {
|
||||
C_GEN_DATA(fndata.prototype) = Str::new();
|
||||
C_GEN_DATA(fndata.argument_count) = 0;
|
||||
C_GEN_DATA(fndata.current_fcf) = NULL;
|
||||
C_GEN_DATA(fndata.compiling_function) = FALSE;
|
||||
}
|
||||
|
||||
void CFunctionModel::begin(code_generation *gen) {
|
||||
|
@ -65,6 +67,43 @@ void CFunctionModel::end(code_generation *gen) {
|
|||
WRITE("#endif\n");
|
||||
WRITE("#endif\n");
|
||||
CodeGen::deselect(gen, saved);
|
||||
|
||||
saved = CodeGen::select(gen, c_fundamental_types_I7CGS);
|
||||
OUT = CodeGen::current(gen);
|
||||
WRITE("i7val i7_gen_call(i7val fn_ref, i7val *args, int argc, int call_message);\n");
|
||||
CodeGen::deselect(gen, saved);
|
||||
|
||||
saved = CodeGen::select(gen, c_stubs_at_eof_I7CGS);
|
||||
OUT = CodeGen::current(gen);
|
||||
WRITE("i7val i7_gen_call(i7val fn_ref, i7val *args, int argc, int call_message) {\n"); INDENT;
|
||||
WRITE("switch (fn_ref) {\n"); INDENT;
|
||||
final_c_function *fcf;
|
||||
LOOP_OVER(fcf, final_c_function) {
|
||||
WRITE("case ");
|
||||
CNamespace::mangle(NULL, OUT, fcf->identifier_as_constant);
|
||||
WRITE(": return fn_");
|
||||
CNamespace::mangle(NULL, OUT, fcf->identifier_as_constant);
|
||||
WRITE("(");
|
||||
if (fcf->uses_vararg_model) {
|
||||
WRITE("2, argc, (i7varargs) { ");
|
||||
for (int i=0; i<10; i++) {
|
||||
if (i > 0) WRITE(", ");
|
||||
WRITE("args[%d]", i);
|
||||
}
|
||||
WRITE(" }");
|
||||
for (int i=0; i<fcf->max_arity - 1; i++)
|
||||
WRITE(", 0");
|
||||
} else {
|
||||
WRITE("argc");
|
||||
for (int i=0; i<fcf->max_arity; i++)
|
||||
WRITE(", args[%d]", i);
|
||||
}
|
||||
WRITE(");\n");
|
||||
}
|
||||
OUTDENT; WRITE("}\n");
|
||||
WRITE("printf(\"function not found\\n\");\n");
|
||||
OUTDENT; WRITE("}\n");
|
||||
CodeGen::deselect(gen, saved);
|
||||
}
|
||||
|
||||
typedef struct final_c_function {
|
||||
|
@ -93,6 +132,7 @@ void CFunctionModel::declare_fcf(code_generation *gen, final_c_function *fcf) {
|
|||
|
||||
void CFunctionModel::make_veneer_fcf(code_generation *gen, text_stream *unmangled_name) {
|
||||
final_c_function *fcf = CFunctionModel::new_fcf(unmangled_name);
|
||||
fcf->max_arity = 1;
|
||||
CFunctionModel::declare_fcf(gen, fcf);
|
||||
}
|
||||
|
||||
|
@ -124,6 +164,7 @@ void CFunctionModel::begin_function_code(code_generation_target *cgt, code_gener
|
|||
WRITE("printf(\"called %S\\n\");\n", C_GEN_DATA(fndata.current_fcf)->identifier_as_constant);
|
||||
}
|
||||
}
|
||||
C_GEN_DATA(fndata.compiling_function) = TRUE;
|
||||
}
|
||||
|
||||
void CFunctionModel::place_label(code_generation_target *cgt, code_generation *gen, text_stream *label_name) {
|
||||
|
@ -150,9 +191,15 @@ void CFunctionModel::end_function(code_generation_target *cgt, int pass, code_ge
|
|||
text_stream *OUT = CodeGen::current(gen);
|
||||
WRITE("return 1;\n");
|
||||
WRITE("\n}\n");
|
||||
C_GEN_DATA(fndata.compiling_function) = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
int CFunctionModel::inside_function(code_generation *gen) {
|
||||
if (C_GEN_DATA(fndata.compiling_function)) return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void CFunctionModel::begin_function_call(code_generation_target *cgt, code_generation *gen, inter_symbol *fn, int argc) {
|
||||
inter_tree_node *D = fn->definition;
|
||||
if ((D) && (D->W.data[ID_IFLD] == CONSTANT_IST) && (D->W.data[FORMAT_CONST_IFLD] == CONSTANT_DIRECT)) {
|
||||
|
@ -250,11 +297,6 @@ typedef struct i7varargs {
|
|||
|
||||
i7val i7_mgl_self = 0;
|
||||
|
||||
i7val i7_gen_call(i7val fn_ref, i7val *args, int argc, int call_message) {
|
||||
printf("Unimplemented: i7_gen_call.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
i7val i7_call_0(i7val fn_ref) {
|
||||
i7val args[10]; for (int i=0; i<10; i++) args[i] = 0;
|
||||
return i7_gen_call(fn_ref, args, 0, 0);
|
||||
|
|
|
@ -36,7 +36,7 @@ int CInputOutputModel::compile_primitive(code_generation *gen, inter_ti bip, int
|
|||
case PRINTNAME_BIP: WRITE("i7_print_name("); INV_A1; WRITE(")"); break;
|
||||
case PRINTOBJ_BIP: WRITE("i7_print_object("); INV_A1; WRITE(")"); break;
|
||||
case PRINTPROPERTY_BIP: WRITE("i7_print_property("); INV_A1; WRITE(")"); break;
|
||||
case PRINTNUMBER_BIP: WRITE("printf(\"%%d\", (int) "); INV_A1; WRITE(")"); break;
|
||||
case PRINTNUMBER_BIP: WRITE("i7_print_decimal("); INV_A1; WRITE(")"); break;
|
||||
case PRINTNLNUMBER_BIP: WRITE("i7_print_number("); INV_A1; WRITE(")"); break;
|
||||
case PRINTDEF_BIP: WRITE("i7_print_def_art("); INV_A1; WRITE(")"); break;
|
||||
case PRINTCDEF_BIP: WRITE("i7_print_cdef_art("); INV_A1; WRITE(")"); break;
|
||||
|
@ -64,6 +64,10 @@ void i7_style(int what) {
|
|||
void i7_font(int what) {
|
||||
}
|
||||
|
||||
void i7_print_decimal(i7val x) {
|
||||
printf("%d", (int) x);
|
||||
}
|
||||
|
||||
void i7_print_char(i7val x) {
|
||||
printf("%c", (int) x);
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ How arrays of all kinds are stored in C.
|
|||
void CMemoryModel::initialise(code_generation_target *cgt) {
|
||||
METHOD_ADD(cgt, BEGIN_ARRAY_MTID, CMemoryModel::begin_array);
|
||||
METHOD_ADD(cgt, ARRAY_ENTRY_MTID, CMemoryModel::array_entry);
|
||||
METHOD_ADD(cgt, ARRAY_ENTRIES_MTID, CMemoryModel::array_entries);
|
||||
METHOD_ADD(cgt, END_ARRAY_MTID, CMemoryModel::end_array);
|
||||
}
|
||||
|
||||
|
@ -198,7 +199,7 @@ void CMemoryModel::array_entry(code_generation_target *cgt, code_generation *gen
|
|||
}
|
||||
|
||||
@<This is a byte entry@> =
|
||||
WRITE(" (i7byte) %S,\n", entry);
|
||||
WRITE(" (i7byte) %S, /* %d */\n", entry, C_GEN_DATA(memdata.himem));
|
||||
C_GEN_DATA(memdata.himem) += 1;
|
||||
|
||||
@ Now we see why it was important for |I7BYTE_0| and so on to be macros: they
|
||||
|
@ -207,10 +208,20 @@ and therefore if |X| is a valid constant-context expression in C then so is
|
|||
|I7BYTE_0(X)|.
|
||||
|
||||
@<This is a word entry@> =
|
||||
WRITE(" I7BYTE_0(%S), I7BYTE_1(%S), I7BYTE_2(%S), I7BYTE_3(%S),\n",
|
||||
entry, entry, entry, entry);
|
||||
WRITE(" I7BYTE_0(%S), I7BYTE_1(%S), I7BYTE_2(%S), I7BYTE_3(%S), /* %d */\n",
|
||||
entry, entry, entry, entry, C_GEN_DATA(memdata.himem));
|
||||
C_GEN_DATA(memdata.himem) += 4;
|
||||
|
||||
@ Alternatively, we can just specify how many entries there will be: they will
|
||||
then be initialised to 0.
|
||||
|
||||
=
|
||||
void CMemoryModel::array_entries(code_generation_target *cgt, code_generation *gen,
|
||||
int how_many, int plus_ips, int format) {
|
||||
if (plus_ips) how_many += 64;
|
||||
for (int i=0; i<how_many; i++) CMemoryModel::array_entry(cgt, gen, I"0", format);
|
||||
}
|
||||
|
||||
@ When all the entries have been placed, the following is called. It does nothing
|
||||
except to predeclare the extent constant, if one was used.
|
||||
|
||||
|
|
|
@ -124,14 +124,14 @@ overlap.
|
|||
WRITE("#define i7_max_objects %d\n", C_GEN_DATA(objdata.owner_id_count) + 1);
|
||||
|
||||
WRITE("i7val i7_metaclass_of[] = { 0");
|
||||
for (int i=1; i<C_GEN_DATA(objdata.owner_id_count); i++) {
|
||||
for (int i=1; i<=C_GEN_DATA(objdata.owner_id_count); i++) {
|
||||
if (C_GEN_DATA(objdata.owners)[i].is_class) WRITE(", i7_mgl_Class");
|
||||
else WRITE(", i7_mgl_Object");
|
||||
}
|
||||
WRITE(" };\n");
|
||||
|
||||
WRITE("i7val i7_class_of[] = { 0");
|
||||
for (int i=1; i<C_GEN_DATA(objdata.owner_id_count); i++) {
|
||||
for (int i=1; i<=C_GEN_DATA(objdata.owner_id_count); i++) {
|
||||
WRITE(", "); CNamespace::mangle(NULL, OUT, C_GEN_DATA(objdata.owners)[i].class);
|
||||
}
|
||||
WRITE(" };\n");
|
||||
|
@ -256,17 +256,18 @@ only need to be unique, so the order is not significant.
|
|||
void CObjectModel::declare_property_by_name(code_generation *gen, text_stream *name, int used) {
|
||||
generated_segment *saved = CodeGen::select(gen, c_predeclarations_I7CGS);
|
||||
text_stream *OUT = CodeGen::current(gen);
|
||||
if (used) {
|
||||
// if (used) {
|
||||
WRITE("#define ");
|
||||
CNamespace::mangle(NULL, OUT, name);
|
||||
WRITE(" %d\n", C_GEN_DATA(objdata.property_id_counter)++);
|
||||
} else {
|
||||
/* } else {
|
||||
WRITE("#ifndef ");
|
||||
CNamespace::mangle(NULL, OUT, name);
|
||||
WRITE("\n#define ");
|
||||
CNamespace::mangle(NULL, OUT, name);
|
||||
WRITE(" 0\n#endif\n");
|
||||
}
|
||||
*/
|
||||
CodeGen::deselect(gen, saved);
|
||||
}
|
||||
|
||||
|
@ -315,6 +316,11 @@ By fiat, that will be 0.
|
|||
OUTDENT;
|
||||
WRITE("}\n");
|
||||
CodeGen::deselect(gen, saved);
|
||||
|
||||
saved = CodeGen::select(gen, c_fundamental_types_I7CGS);
|
||||
OUT = CodeGen::current(gen);
|
||||
WRITE("i7val fn_i7_mgl_CreatePropertyOffsets(int argc);\n");
|
||||
CodeGen::deselect(gen, saved);
|
||||
}
|
||||
|
||||
@h Property-value initialiser function.
|
||||
|
@ -432,8 +438,9 @@ void i7_write_prop_value(i7val owner_id, i7val prop_id, i7val val) {
|
|||
i7val i7_read_prop_value(i7val owner_id, i7val prop_id) {
|
||||
if ((owner_id <= 0) || (owner_id >= i7_max_objects) ||
|
||||
(prop_id < 0) || (prop_id >= i7_no_property_ids)) return 0;
|
||||
while (i7_properties[(int) owner_id].value_set[(int) prop_id] == 0)
|
||||
while (i7_properties[(int) owner_id].value_set[(int) prop_id] == 0) {
|
||||
owner_id = i7_class_of[owner_id];
|
||||
}
|
||||
return i7_properties[(int) owner_id].value[(int) prop_id];
|
||||
}
|
||||
|
||||
|
|
|
@ -48,6 +48,7 @@ first of those:
|
|||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
=
|
||||
|
||||
@h Segmentation.
|
||||
|
|
Loading…
Reference in a new issue