Changes between Version 17 and Version 18 of SemiTagging


Ignore:
Timestamp:
Nov 3, 2006 5:33:35 PM (7 years ago)
Author:
alexey
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SemiTagging

    v17 v18  
    3434 
    3535False_info: 
    36         jump [[Sp]+4] --address to False alternative>; 
     36        jump [[Sp]+4] --address to False alternative; 
    3737}}} 
    3838they just jump to the appropriate case alternative that is evaluating the closure. These addresses are calculated from the case frame that is on the top of the stack. In this case they select the alternatives from the jump table that is referred to by the {{{not}}} case frame. Below you see the {{{True}}} alternative 
     
    6767Under this scheme, the entry code for the {{{not}}} function would look as follows: 
    6868 
     69{{{ 
     70        <stack check omitted> 
     71        if([[R2]+tag_offset] == closure_info) goto tagged 
     72        R1 = R2; 
     73        I64[Sp + (-8)] = sej_info; 
     74        Sp = Sp + (-8); 
     75        jump I64[R1]; 
     76tagged: 
     77        R1 = R2 & ~1;  // mask pointer tag out 
     78        <extract constructor tag from pointer> 
     79        if(tag==0) goto sej_0_alt 
     80        goto sej_1_alt 
     81}}} 
     82 
    6983== Tagging the LSB of an evaluated closure == 
    7084 
     
    8599 
    86100{{{ 
     101        <stack check omitted> 
    87102        if(R2 & 1 == 1) goto tagged 
    88         <stack check omitted> 
    89103        R1 = R2; 
    90104        I64[Sp + (-8)] = sej_info;