LispBM can encode values of 4 different types into the
cdr of a cons-cell. How this works can be found in the earler walkthrough of lispBM. The 4 types that can be encoded are,
unsigned integer. All of these types are 28Bit.
To be able to express computations on 32Bit values,
unsigned integer and
float as well as arrays, a set of boxed types were introduced.
The boxed values, except arrays, are stored in cons cells but have an extra level of indirection in the form of a typed pointer. Since the lisp heap is small there are unused bits on the most significant side. The 4 most significant bits are used to encode different typed pointers. Currently the following kinds of typed pointers are in use:
#define PTR_TYPE_CONS 0x10000000u
#define PTR_TYPE_BOXED_I 0x20000000u
#define PTR_TYPE_BOXED_U 0x30000000u
#define PTR_TYPE_BOXED_F 0x40000000u
#define PTR_TYPE_ARRAY 0xD0000000u
As an example, a float value is encoded as a cons cell where all the 32Bits of the
car are used for the floating point value. The
cdr of this cell contail a special symbol
DEF_REPR_BOXED_F_TYPE. The special symbols used in the
cdr position of boxed values are listed below.
#define DEF_REPR_ARRAY_TYPE 0x20FFFF
#define DEF_REPR_BOXED_I_TYPE 0x21FFFF
#define DEF_REPR_BOXED_U_TYPE 0x22FFFF
#define DEF_REPR_BOXED_F_TYPE 0x23FFFF
cdr field of a cons cell hold a GC bit so there is no problem in using all 32Bits of the
car if only it can be identified properly.
Arrays are a special case and not fully implemented yet. Currently the only thing that is an array in lispBM is a text string. Most of the plumbing is there for implementing arrays of any other lispBM value type, it just needs to be hacked up. Arrays are encoded in a very similar way to boxed values, just that instead of a 32Bit value in the
car slot there is an arbitrary pointer. The array storage itself is allocated using
malloc. When garbage collection frees a cons cell with the special symbol
DEF_REPR_ARRAY_TYPE, it also calls
free on the pointer in the
Please contact me with questions, suggestions or feedback at blog (dot) joel (dot) svensson (at) gmail (dot) com or join the google group .
© Copyright 2020 Bo Joel Svensson
This page was generated using Pandoc.