[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Tagged Architectures, a question

  I'm teaching a class on Lisp, and I wish to be accurate in my statements.
I'm not sure who knows this, so I'll just throw the question out & hope.

  There are machines that specifically tag all data words with type
information, and use this for dispatching to correct routines.  I believe
that a number of the big number crunchers did this.  CDC, Burroughs,
Cray ??

  When they encountered X+Y, the data was loaded into the registers, the
instruction + was called, and the hardware took care of deciding if it
should call the FP add, the integer add, etc.  Did these machines
tag anything more than numeric data?

  Some of the special purpose personal machines also have hardware tags:
the D-machines, the Lispms, etc.(?)  On the Lispms, however, it is the
POINTERS that are tagged with the type of the object pointed to, not
the actual data word.

  Taking the Symbolics I machine as an example (32 bit pointers with
8 more bits for tag + GC)...

  Now I understand that when I call (CAR FOO), the hardware does a
data type check (in parallel) of the pointer for FOO.  What happens,
however, when I call (+ X Y), when X and/or Y are either bignums or
large FP numbers?  Do I do the checking on the tag bits for the pointers
in X & Y?  If so, then when I do the indirection to the actual data
words, am I adding two 32 bits quantities whose tag bits are ignored, or
am I adding two 40 bit quantities (mod GC)? 

  In other words, is the data itself ever tagged on these machines?
If not, are the tag bits even used?  If so, what are they used for?

  And while we're at it, am I correct in calling the GC bits ``tag bits''?
CDR-coding bits are also tag bits?