Compare Revisions

Nanojit

Revision 53868:

Revision 53868 by paritosh1010 on

Revision 53869:

Revision 53869 by paritosh1010 on

Title:
Nanojit
Nanojit
Slug:
Nanojit
Nanojit
Tags:
SpiderMonkey, "Developing Mozilla"
SpiderMonkey, "Developing Mozilla"
Content:

Revision 53868
Revision 53869
nn145      <span style="font-family: Verdana;"><br></span>
146    </p>
147    <p style="text-align: left;">
145      <span><span>This upper half of this snippet includes code w148      This upper half of this snippet includes code where the raw
>here the raw LIR is first converted into machine code.(where comp> LIR is first converted into machine code.(where compile(fragment
>ile(fragmento-&gt;assm(), f); is called basically).<br>>o-&gt;assm(), f); is called basically).<br>
146      Then a pointer to a function is used, which takes an int as149      Then a pointer to a function is used, which takes an int as
> input and returns the sum of that parameter with two. (</span></> input and returns the sum of that parameter with two. (<span cla
>span><span><span class="keyword">typedef</span> <span>JS_FASTCALL>ss="keyword">typedef</span> JS_FASTCALL int32_t (*AddTwoFn)(int32
> int32_t (*AddTwoFn)(int32_t); )<br>>_t); )<br>
147      Then, printf is hardcoded to call it with a parameter 5, an150      Then, printf is hardcoded to call it with a parameter 5, an
>d on linking with nanojit library, the following program will dis>d on linking with nanojit library, the following program will dis
>play<br></span></span>>play
151    </p>
152    <p style="text-align: left;">
153      <span style="font-family: Helvetica;">&nbsp;</span>
154    </p>
155    <p style="text-align: left;">
156      <span style="font-family: Verdana;">&nbsp;</span>
n156      <span><span>Now, what I need to do is generate output for tn165      <span><span>Now, what I need to do is generate output for t
>his:<br></span></span>>his:</span></span>
n160        <span style="font-family: courier new;">&nbsp;&nbsp;</span169        <span><span style="font-family: Courier New;">start<br>
>n> <span style="font-size: small;"><span style="font-family: cour 
>ier new;">start</span><br> 
161        <span style="font-family: courier new;">&nbsp;&nbsp; two 170        two = int 2<br>
>= int 2</span><br> 
162        <span style="font-family: courier new;">&nbsp;&nbsp; twoP171        twoPlusTwo = add two, two<br>
>lusTwo = add two, two</span><br> 
163        <span style="font-family: courier new;">&nbsp;&nbsp; ret 172        ret twoPlusTwo</span></span>
>twoPlusTwo</span></span> 
t167      <span style="font-size: small;"><br>t176      <span style="font-family: Verdana;"><span style="font-size:
 > small;">This adds two and two in the most hardcoded way possible
 >. The conversion from LIR to a program like one shown above is th
 >e task of the parser.<br></span></span><span style="font-size: 10
 >0%;"><br></span>
168      <span style="font-family: lucida grande;">This adds two and
> two in the most hardcoded way possible. The conversion from LIR  
>to a program like one shown above is the task of the parser.<br> 
169      What the parser needs to generate for the above code will b
>e this(in a raw form)(changes only):</span></span><span style="fo 
>nt-size: 130%;"><br></span> 
170    </p>
171    <blockquote>
172      <p>
173        <span style="font-size: 100%;">writer.ins0(LIR_start);<br
>> 
174        LIns *two = writer.insImm(2);<br>
175        LIns *firstParam = writer.insImm(2);<br>
176        LIns *result = writer.ins2(LIR_add, firstParam, two);<br>
177        writer.ins1(LIR_ret, result);</span>
178      </p>177    </p>
179    </blockquote>
180    <p style="text-align: left;">
181      and
182    </p>
183    <blockquote style="text-align: left;">
184      <span style="font-family: courier new; font-size: 100%;">//
> Call the compiled function.</span><span style="font-size: 100%;" 
>><br></span><span style="font-family: courier new; font-size: 100 
>%;">typedef JS_FASTCALL int32_t (*AddTwoFn)();</span><span style= 
>"font-size: 100%;"><br></span><span style="font-family: courier n 
>ew; font-size: 100%;">AddTwoFn fn = reinterpret_cast</span><span  
>style="font-size: 100%;">&lt;addtwofn style="font-family: courier 
> new;"&gt;(f-&gt;code());<br> 
185      printf("2 + 2 = %d\n", fn());<br>
186      return 0;&lt;/addtwofn&gt;</span>
187    </blockquote>

Back to History