|
@@ -4357,7 +4357,11 @@ The problem of distinguishing between pointers and other kinds of data
|
|
|
also arises inside of each tuple. We solve this problem by attaching a
|
|
|
tag, an extra 64-bits, to each tuple. Figure~\ref{fig:tuple-rep} zooms
|
|
|
in on the tags for two of the tuples in the example from
|
|
|
-Figure~\ref{fig:copying-collector}. Part of each tag is dedicated to
|
|
|
+Figure~\ref{fig:copying-collector}. Note that we have drawn the bits
|
|
|
+in a big-endian way, from right-to-left, with bit location 0 (the
|
|
|
+least significant bit) on the far right, which corresponds to the
|
|
|
+directionality of the x86 shifting instructions \key{salq} (shift
|
|
|
+left) and \key{sarq} (shift right). Part of each tag is dedicated to
|
|
|
specifying which elements of the tuple are pointers, the part labeled
|
|
|
``pointer mask''. Within the pointer mask, a 1 bit indicates there is
|
|
|
a pointer and a 0 bit indicates some other kind of data. The pointer
|
|
@@ -4366,10 +4370,10 @@ size of 50 elements, so we just need 50 bits for the pointer mask. The
|
|
|
tag also contains two other pieces of information. The length of the
|
|
|
tuple (number of elements) is stored in bits location 1 through
|
|
|
6. Finally, the bit at location 0 indicates whether the tuple has yet
|
|
|
-to be copied to the ToSpace. If the bit has value 1, then this
|
|
|
-tuple has not yet been copied. If the bit has value 0 then the entire
|
|
|
-tag is in fact a forwarding pointer. (The lower 3 bits of an pointer
|
|
|
-are always zero anyways because our tuples are 8-byte aligned.)
|
|
|
+to be copied to the ToSpace. If the bit has value 1, then this tuple
|
|
|
+has not yet been copied. If the bit has value 0 then the entire tag
|
|
|
+is in fact a forwarding pointer. (The lower 3 bits of an pointer are
|
|
|
+always zero anyways because our tuples are 8-byte aligned.)
|
|
|
|
|
|
\begin{figure}[tbp]
|
|
|
\centering \includegraphics[width=0.8\textwidth]{figs/tuple-rep}
|