Hi All,

I pushed out a series of commits which support the "NaN boxing" scheme for dynamically typed value representation.

Under NaN boxing, floating-point values aren't heap allocated; they fit directly into the value word. Floating-point calculations stop consing memory.

TXR 281:

1> (pprof (+ 1.0 3 4 5 6 7))
malloc bytes: 0
gc heap bytes: 160
total: 160
milliseconds: 0
26.0

Current, built with NaN boxing:

1> (pprof (+ 1.0 3 4 5 6 7))
malloc bytes: 0
gc heap bytes: 0
total: 0
milliseconds: 0
26.0

NaN boxing is new and experimental; but TXR builds and all tests pass. It is enabled using:

./configure --nan-boxing

which will deposit a #define CONFIG_NAN_BOXING 1 into config.h.

Eventually it will be the default on 64 it platforms, possible to disable with --no-nan-boxing.

Under NaN boxing, we lose quite a bit of fixnum precision: fixnum integers are reduced from 62 bits to 50 bits. The run-time has more bit fiddling to deal with to decode values so code that doesn't benefit from NaN boxing may be slightly affected.