Changes between Version 25 and Version 26 of SemiTagging
- Timestamp:
- 11/03/06 10:05:49 (7 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SemiTagging
v25 v26 24 24 R1 = R2; 25 25 I64[Sp + (-8)] = notcont_info; 26 -- push not continuation on the stack 26 27 Sp = Sp + (-8); 27 28 jump I64[R1]; 29 -- enter x 28 30 }}} 29 31 … … 34 36 35 37 False_info: 36 jump [[Sp]+ 4] --address to False alternative;38 jump [[Sp]+8] --address to False alternative; 37 39 }}} 38 40 they 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 … … 46 48 R1 = False_closure; 47 49 Sp = Sp + 8; 48 jump <address to False alternative>;50 jump [[Sp]+8] --address to False alternative; 49 51 } 50 52 }}} … … 54 56 R1 = True_closure; 55 57 Sp = Sp + 8; 56 jump <address to True alternative>;58 jump [[Sp]] --address to True alternative; 57 59 } 58 60 }}} … … 71 73 if([[R2]+type_offset] == 0) goto unevaluated 72 74 if([[R2]+type_offset] > CONSTR_NOCAF_STATIC) goto unevaluated 73 -- If the closure is not a constructor, we enter it74 75 goto evaluated 75 -- otherwise we can access its tag 76 -- If the closure type is a constructor we can extract 77 -- the tag directly in label evaluated. 78 -- Otherwise we enter it as usual: 76 79 unevaluated: 77 80 R1 = R2; … … 110 113 tagged: 111 114 R1 = R2 & ~1; // mask pointer tag out 115 R2 = [[R1]+type_offset]; 112 116 -- extract constructor tag from pointer 113 if( tag==0) goto notcont_0_alt117 if(R2==0) goto notcont_0_alt 114 118 goto notcont_1_alt 115 119 }}}
