| > | Yes and no. Tags may not be required, but the compiler still has to
| > | make sure the GC also knows it's a float. Tagging is an easy way to
| > | tell the GC what's what. It is probably not the best
| > | performance-wise, but GC without tags is not easy.
| >
| > You could use implied tags, where floats are put in one set of pages,
| > cons are put in another set (I forget what the generic name for this
| > is -- Bag of Bits is what is coming to mind).
|
| You probably mean BIBOP ("BIg Bags Of Pages" or somesuch)

Yep.

| PS: it's definitely a possibility, but it means you need a pointer to the
| float. The main problem was to find a scheme that allows to deal with
| immediate floats. BIBOP is actually a tagging scheme that tags some bits
| of your pointer, just like using the lower 2 bits. I'm not saying it's a bad
| scheme (all tagging scheme are highly dependent on the specific case) but it's
| not a solution to the "current" problem.

Most architectures don't put immediate fp constants in the instruction
anyway (of the machines I've worked on, the ns32k is the only that
comes to mind that does). The compiler puts the constant in
initialized memory somewhere, and builds the address, and does a load
floating operation. On object files such as ELF that allow you to
create multiple sections (or even a.out by putting the constants in
the .text section), you put the constants in a read-only section, and
the garbage collector doesn't bother garbage collecting such
sections. String literals can be handled the same way....