X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fdocs%2FNOTES.arbitary-ints;fp=ghc%2Fdocs%2FNOTES.arbitary-ints;h=964a2cf5be22246c407d73ce990824e9a079d7fa;hb=e7d21ee4f8ac907665a7e170c71d59e13a01da09;hp=0000000000000000000000000000000000000000;hpb=e48474bff05e6cfb506660420f025f694c870d38;p=ghc-hetmet.git diff --git a/ghc/docs/NOTES.arbitary-ints b/ghc/docs/NOTES.arbitary-ints new file mode 100644 index 0000000..964a2cf --- /dev/null +++ b/ghc/docs/NOTES.arbitary-ints @@ -0,0 +1,54 @@ + +Boxed structure of BigInts + + +----> Info1 Pointer + | Pointer passed to BigNum package + | | + \/ \/ + Info2 Size Integer .... + + (size excludes info ptr & size field) + +Unboxed (Compiler must place on pointer stack not data stack + Must also tell GC if it is in a register when GC invoked) + +----> Info2 Size Integer + + + +Info1: + SPEC_INFO_TABLE(Info1, BigNum_entry, 1, 1); (Min Size 2 ?) + + Entering this returns the BigNum using agreed return convention + +Info2: + DATA_INFO_TABLE(Info2, Dummy_entry); + + This never actually entered -- just required for GC. + +------------------------------------------------------------------------------ + +Boxed structure of BigInts (the alternative one) + + Pointer passed to BigNum package + | + \/ +----> Info Size Integer .... + + (size excludes info ptr & size field) + +Unboxed (Compiler must place on pointer stack not data stack + Must also tell GC if it is in a register when GC invoked) + + +Info: + DATA_INFO_TABLE(Info, BigNum_entry); + + Entering this returns the BigNum using agreed return convention + + + +Note that the Boxed and Unboxed representation are identical !!! + +(unboxing represents evaluationhood, not pointerhood)