Changes between Version 16 and Version 17 of SemiTagging
- Timestamp:
- 11/03/06 09:19:43 (7 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SemiTagging
v16 v17 66 66 67 67 Under this scheme, the entry code for the {{{not}}} function would look as follows: 68 {{{69 if(R2 & 1 == 1) goto tagged70 <stack check omitted>71 R1 = R2;72 I64[Sp + (-8)] = sej_info;73 Sp = Sp + (-8);74 jump I64[R1];75 tagged:76 R1 = R2 & ~1; // mask pointer tag out77 <extract constructor tag from pointer>78 if(tag==0) goto sej_0_alt79 goto sej_1_alt80 }}}81 68 82 69 == Tagging the LSB of an evaluated closure == … … 96 83 97 84 (Simon, thanks for the example. I was hoping to not have to enter constructor closures but the second bullet example shows why entering constructors can still happen. However, can't the example just be {{{f xs = head xs}}}? --Alexey) 85 86 {{{ 87 if(R2 & 1 == 1) goto tagged 88 <stack check omitted> 89 R1 = R2; 90 I64[Sp + (-8)] = sej_info; 91 Sp = Sp + (-8); 92 jump I64[R1]; 93 tagged: 94 R1 = R2 & ~1; // mask pointer tag out 95 <extract constructor tag from pointer> 96 if(tag==0) goto sej_0_alt 97 goto sej_1_alt 98 }}} 99 98 100 99 101 == Using more than one bit ==
