diff options
Diffstat (limited to 'ghc/docs/NOTES.arbitary-ints')
-rw-r--r-- | ghc/docs/NOTES.arbitary-ints | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/ghc/docs/NOTES.arbitary-ints b/ghc/docs/NOTES.arbitary-ints new file mode 100644 index 0000000000..964a2cf5be --- /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) |