add note to am42
[fleet.git] / chips / f2 / doc / am42 / am42.tex
1 \documentclass[10pt]{article}
2 \usepackage{palatino}
3 \usepackage{amsmath}
4 \usepackage{epsfig}
5 \usepackage{color}
6 \usepackage{bytefield1}
7 \usepackage{comment}
8 \usepackage{fancyhdr}
9 \include{megacz}
10 \bibliographystyle{alpha}
11 \pagestyle{fancyplain}
12
13 \definecolor{light}{gray}{0.7}
14
15 \title{\vspace{-1cm}AM42: The F2 Dock
16 \\
17 {\normalsize
18 Adam Megacz
19 }}
20
21 \begin{document}
22
23 \maketitle
24
25 \begin{abstract}
26
27 To Do:
28 \\
29
30 \begin{verbatim}
31
32 Revisit the decision to have the dock include a word-wide latch?  If
33  it doesn't, then literals become trickier.
34
35 "Supertorpedo" for retrieving dock state.
36
37 THEREFORE: I propose that DockTwo only be able to load the counter from the data latch, not from the instruction word.  This gets rid of an entire instruction.  In exchange, I would like to propose that "data predecessor full is a condition of execution" and "drain data predecessor when you execute" be different opcode bits.
38
39
40   - debug capability?  ability to kick the dock in the head to get it
41     to spit out its state?
42
43   - tokenhood as address bit
44   - signal/path boundary/etc
45   - Rename EPI and OD to something more meaningful
46   - Get rid of OD?
47   - get rid of shadow latch
48   - single counter
49   - figure out C-flag / signal bit situation
50   - Suggestion that there should be a "T" flag
51   - Get rid of "shadow latch" for literals?
52   - unify flags and signal bit by saying that the dock can
53     see the upper X bits of a word?
54     - should have a way to set just the upper X bits of the word
55     - flags are actually part of the data latch!
56     - the signal bit(s) belong to the Destination (or is it the Path?)
57   - flushing situation
58   - How do you get a runtime count value to an input dock?
59   - Simplify the whole c-flag/signal-bit situation
60   - tokenhood should be LITERALLY an address bit!
61
62   - kinds of data:
63       - ship-to-ship data (words)
64       - dock-to-dock data (signal bits)
65       - ship-to-dock data (c-flag)
66       - dock-to-ship data (flushing/bonus bit)
67   - sources of these:
68       - instruction stream
69       - ship word (at output dock)
70       - ship extras
71       - packet word (at input dock)
72       - packet signal bit
73
74 \end{verbatim}
75
76 \begin{tabular}{rl}
77
78 29-Aug
79 &  Initial Version \\
80 \end{tabular}
81 \end{abstract}
82
83 \vfill
84
85 \pagebreak
86
87 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
88 \section{Overview of Fleet}
89
90 A Fleet processor is organized around a {\it switch fabric}, which is
91 a packet-switched network with reliable in-order delivery.  The switch
92 fabric is used to carry data between different functional units,
93 called {\it ships}.  Each ship is connected to the switch fabric by
94 one or more programmable elements known as {\it docks}.
95
96 A {\it path} specifies a route through the switch fabric from a
97 particular {\it source} to a particular {\it destination}.  The
98 combination of a path and a single word to be delivered is called a
99 {\it packet}.  The switch fabric carries packets from their sources to
100 their destinations.  Each dock has four\ 
101 destinations: one each for {\it instructions}, {\it
102   torpedoes}, {\it tokens},\ and {\it words}.  A Fleet is
103 programmed by depositing instruction packets into the switch fabric
104 with paths that will lead them to instruction destinations of the
105 docks at which they are to execute.
106
107 When a packet arrives at the instruction destination of a dock, it is
108 enqueued for execution.  Before the instruction executes, it may cause
109 the dock to wait for a packet to arrive at the dock's data destination
110 or for a value to be presented by the ship.  When an instruction
111 executes it may consume this data and may present a data value to the
112 ship or transmit a packet.
113
114 Packets sent to token and torpedo destinations carry no payload.  Such
115 packets consume less energy than instruction packets or word packets.
116
117
118 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
119 \pagebreak
120 \section{The FleetTwo Dock}
121
122 The diagram below represents a conceptual view of the interface
123 between ships and the switch fabric; actual implementation circuitry
124 may differ.
125
126 X
127
128 Each dock consists of a {\it data latch}, which is as wide as a single
129 machine word and a circular {\it instruction fifo} of
130 instruction-width latches.  The values in the instruction fifo control
131 the data latch.  The dock also includes a {\it path latch}, which
132 stores the path along which outgoing packets will be
133 sent.
134
135 Note that the instruction fifo in each dock has a destination of its
136 own; this is the {\it instruction destination} mentioned in the
137 previous section.  A token sent to an instruction destination is
138 called a {\it torpedo}; it does not enter the instruction fifo, but
139 rather is held in a waiting area where it may interrupt certain
140 instructions (see the section on the {\tt move} instruction for further
141 details).
142
143 From any source to any dock's data destination there are
144 two distinct paths which differ by a single bit.  This bit is known as
145 the ``signal'' bit, and the routing of a packet is not affected by it;
146 the signal bit is used to pass control values between docks.  Note that paths
147 terminating at an {\it instruction} destination need not have a signal
148 bit.
149
150
151 Source-sequence guarantee.  Shared across instruction/torpedo (?) and
152 token/word destinations.
153
154 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
155 \pagebreak
156 \section{Instructions}
157
158 In order to cause an instruction to execute, the programmer must first
159 arrange for that instruction word to arrive in the data latch of some
160 output dock.  For example, this might be the ``data read'' output dock
161 of the memory access ship or the output of a fifo ship.  Once an
162 instruction has arrived at this output dock, it is {\it dispatched} by
163 sending it to the {\it instruction destination} of the dock at which
164 it is to execute.
165
166 Each instruction is 25\ bits long, which makes
167 it possible for an instruction and an 12-bit
168 path to fit in a single word of memory.  This path is the path from
169 the {\it dispatching} dock to the {\it executing} dock.
170
171 \vspace{0.5cm}
172
173 \setlength{\bitwidth}{3.5mm}
174 {\tt \footnotesize
175 \begin{bytefield}{37}
176   \bitheader[b]{0,24,25,36}\\
177   \bitbox{12}{dispatch path} 
178   \bitbox{25}{instruction} 
179 \end{bytefield}}
180
181
182 Note that the 12\ bit {\tt dispatch path}
183 field is not the same width as the 13 bit {\tt Immediate} path field
184 in the {\tt move} instruction, which in turn may not be the same width
185 as the actual path latches in the switch fabric.
186
187 The algorithm for expanding a path to a wider width is specific to the
188 switch fabric implementation, and is not specified by this
189 document.\footnote{for the Marina experiment, the correct
190   algorithm is to sign-extend the path; the most significant bit of
191   the given path is used to fill the vacant bit of the latch} In
192 particular, because the {\tt dispatch path} field is always used to
193 specify a path which terminates at an instruction destination (never a
194 data destination), and because instruction destinations ignore the
195 signal bit, certain optimizations may be possible.
196
197
198 \subsection{Loop Counter}
199
200 A programmer can perform two types of loops: {\it inner} loops
201 consisting of only one {\tt move} instruction and {\it outer} loops of
202 multiple instructions of any type.  Inner loops may be nested within
203 an outer loop, but no other nesting of loops is allowed.
204
205 The dock has one loop counter, called {\tt LC}.  It is the
206 same width as a word carried through the switch fabric (37 bits).
207
208 \subsection{Flags}
209
210 The dock has four flags: {\tt A}, {\tt B}, {\tt C}, and {\tt Z}.
211
212 \begin{itemize}
213 \item The {\tt A} and {\tt B} flags are general-purpose flags which
214       may be set and cleared by the programmer.
215
216 \item The {\tt C} flag is known as the {\it control} flag, and may be
217       set by the {\tt move} instruction based on information from the
218       ship or from an inbound packet.  See the {\tt move} instruction
219       for further details.
220
221 \item The {\tt P} flag is used for predication; see the next section
222       for details.  When a torpedo strikes or the counter is
223       decremented from any value to zero, the {\tt P} flag is cleared.
224       The {\tt P} flag may also be set and cleared by the {\tt set}
225       instruction.
226
227 \item The {\tt Z} flag is known as the
228       {\it zero} flag.  The {\tt
229       Z}\ flag is {\it set} whenever the {\tt LC} is zero.
230       In an actual implementation the {\tt Z}\ 
231       flag might require an actual latch; it might simply be derived
232       from the ``zeroness'' of the {\tt LC}.
233
234 \end{itemize}
235
236 \subsection{Predication}
237
238 All instructions except for {\tt head} and {\tt tail} have a bit
239 marked {\tt U}, for {\it unconditional}.  An instruction with the {\tt
240   U} bit set always executes.  An instruction with the {\tt U} bit
241 cleared will execute {\it only if the {\tt P} flag is set}.
242
243 \begin{center}
244 \setlength{\bitwidth}{5mm}
245 {\tt{\footnotesize{
246 \begin{bytefield}{25}
247   \bitheader[b]{0,24}\\
248   \bitbox{1}{U} 
249   \bitbox[tbr]{24}{} 
250 \end{bytefield}}}}
251 \end{center}
252
253 \pagebreak
254 \subsection{The Requeue Stage}
255
256 The requeue stage has two inputs, which will be referred to as the
257 {\it enqueueing} input and the {\it recirculating} input.  It has a
258 single output which feeds into the instruction fifo.
259
260 The requeue stage has two states: {\sc Updating} and {\sc
261   Circulating}.
262
263 \subsubsection{The {\sc Updating} State}
264
265 On initialization, the dock is in the {\sc Updating} state.  In this
266 state the requeue stage is performing three tasks:
267 \begin{itemize}
268 \item it is draining the
269 previous loop's instructions (if any) from the fifo
270 \item it is executing any ``one
271 shot'' instructions which come between the previous loop's {\tt tail}
272 and the next loop's {\tt head}
273 \item it is loading the instructions of
274 the next loop into the fifo.
275 \end{itemize}
276
277 In the {\sc Updating} state, the requeue stage will accept any
278 instruction other than a {\tt tail} which arrives at its {\it
279   enqueueing} input, and pass this instruction to its output.  Any
280 instruction other than a {\tt head} which arrives at the {\it
281   recirculating} input will be discarded.
282
283 Note that when a {\tt tail} instruction arrives at the {\it
284   enqueueing} input, it ``gets stuck'' there.  Likewise, when a {\tt
285   head} instruction arrives at the {\it recirculating} input, it also
286 ``gets stuck''.  When the requeue stage finds {\it both} a {\tt tail}
287 instruction stuck at the {\it enqueueing} input and a {\tt head}
288 instruction stuck at the {\it recirculating} input, the requeue stage
289 discards both the {\tt head} and {\tt tail} and transitions to the
290 {\sc Circulating} state.
291
292 \subsubsection{The {\sc Circulating} State}
293
294 In the {\sc Circulating} state, the dock repeatedly executes the set
295 of instructions that are in the instruction fifo.
296
297 In the {\sc Circulating} state, the requeue stage will not accept
298 items from its {\it enqueueing} input.  Any item presented at the {\it
299   recirculating} input will be passed through to the requeue stage's
300 output.
301
302 When an {\tt abort} instruction is executed, the requeue stage
303 transitions back to the {\sc Updating} state.  Note that {\tt abort}
304 instructions include a {\tt U} bit -- an {\tt abort} instruction with that bit set
305 will not cause this transition when the {\tt P} flag is cleared.
306
307
308
309 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
310 \pagebreak
311 \section{Instructions}
312
313 \subsection{{\tt move}}
314
315 \newcommand{\bitsMove}{\setlength{\bitwidth}{5mm}
316 {\tt
317 \begin{bytefield}{25}
318   \bitheader[b]{14-21}\\
319 \color{light}
320   \bitbox{1}{U}
321   \bitbox{1}{}
322   \bitbox{1}{}
323 \color{black}
324   \bitbox{1}{0} 
325   \bitbox{1}{R} 
326   \bitbox{1}{I} 
327   \bitbox{1}{S}
328
329   \bitbox{1}{\tt Fi}
330   \bitbox{1}{\tt Sh}
331   \bitbox{1}{\tt Dc}
332   \bitbox{1}{\tt Fo}
333   \bitbox[l]{19}{}
334 \end{bytefield}}
335
336 \begin{bytefield}{25}
337   \bitheader[b]{0,12,13}\\
338   \bitbox[1]{10}{\raggedleft {\tt moveto} ({\tt Immediate$\to$ Path})}
339   \bitbox[r]{1}{}
340   \bitbox{1}{\tt 1}
341   \bitbox{13}{\tt Immediate}
342 \end{bytefield}
343
344 \begin{bytefield}{25}
345   \bitheader[b]{11,12,13}\\
346   \bitbox[1]{10}{\raggedleft {\tt dispatch} ({\footnotesize {\tt DataPredecessor[37:26]$\to$ Path}})\ \ }
347   \bitbox[r]{1}{}
348   \bitbox{1}{\tt 0}
349   \bitbox{1}{\tt 1}
350 \color{light}
351   \bitbox[trb]{12}{}
352 \end{bytefield}
353
354 \begin{bytefield}{25}
355   \bitheader[b]{11,12,13}\\
356   \bitbox[1]{10}{\raggedleft {\tt move} ({\tt Path} unchanged):}
357   \bitbox[r]{1}{}
358   \bitbox{1}{\tt 0}
359   \bitbox{1}{\tt 0}
360   \bitbox{1}{\tt 0}
361 \color{light}
362   \bitbox[trb]{11}{}
363 \end{bytefield}
364 }
365 \bitsMove
366
367 \begin{itemize}
368 \item {\tt Fi} - Fabric input: wait for  fabric predecessor to be full and drain it.
369 \item {\tt Fo} - Fabric output: wait for  fabric successor to be empty and fill it.
370 \item {\tt Dc} - Data Capture: pulse the data latch.
371 \item {\tt Sh} - Ship: at an input/output dock, wait for the ship successor/predecessor to be empty/full and fill/drain it.
372 \end{itemize}
373
374 Ability to await and capture, but not drain, data predecessor.
375
376 The fabric successor must be empty in order for a {\tt move}
377 instruction to attempt execution.
378
379 If the {\tt S} bit is set, the {\tt move} instruction will subtract
380 one from the {\tt LC} counter each time it executes.  An instruction
381 with only this bit set (and no other) takes the place of the dedicated
382 ``decrement OLC'' instruction in previous designs.
383
384 If the {\tt R} bit is set, the {\tt move} instruction will execute
385 repeatedly until its predicate no longer holds (or a torpedo strikes).
386 An ``infinite'' or ``standing'' move can be achieved by setting the
387 {\tt R} bit and clearing the {\tt S} bit.
388
389 The {\tt I} bit stands for {\tt Immune}, and indicates if the
390 instruction is immune to torpedoes.  If a {\tt move} instruction which
391 is not immune is waiting to execute and a torpedo is lying in wait,
392 the torpedo {\it strikes}.  When a torpedo strikes, the
393 {\tt move} instruction and the torpedo are both consumed and the {\tt
394   LC} is set to zero.
395
396 \subsection*{The C Flag}
397
398 Every time the {\tt move} instruction executes, the {\tt C} flag may
399 be set:
400
401 \begin{itemize}
402 \item At an {\it input} dock the {\tt C} flag is set to the signal bit
403       of the incoming packet.
404
405 \item At an {\it output} dock the {\tt C} flag is set to a value
406       provided by the ship if the {\tt Dc} bit is set.  If the {\tt
407       Dc} bit is not set, the {\tt C} flag is set to the signal bit of
408       the incoming packet.
409 \end{itemize}
410
411
412 \subsection*{Flushing}
413
414 The {\tt flush} instruction is a variant of {\tt move} which is valid
415 only at input docks.  It has the same effect as {\tt deliver}, except
416 that it sets a special ``flushing'' indicator along with the data
417 being delivered.
418
419 \newcommand{\bitsFlush}{\setlength{\bitwidth}{5mm}
420 {\tt
421 \begin{bytefield}{25}
422   \bitheader[b]{14-18}\\
423   \bitbox[r]{6}{\raggedleft{\tt flush\ \ }}
424   \bitbox{1}{\tt 0}
425   \bitbox{1}{\tt 0}
426   \bitbox{1}{\tt 1}
427   \bitbox{1}{\tt 0}
428   \bitbox{1}{\tt 0}
429
430   \bitbox{1}{\tt 0}
431   \bitbox{1}{\tt 0}
432   \bitbox{1}{\tt 1}
433
434   \bitbox{11}{}
435 \end{bytefield}}}
436 \bitsFlush
437
438 When a ship fires, it must examine the ``flushing'' indicators on the
439 input docks whose fullness was part of the firing condition.  If all
440 of the input docks' flushing indicators are set, the ship must drain
441 all of their data successors and take no action.  If some, but not
442 all, of the indicators are set, the ship must drain {\it only the data
443   successors of the docks whose indicators were {\bf not} set}, and
444 take no action.  If none of the flushing indicators was set, the ship
445 fires normally.
446
447
448
449 \pagebreak
450 \subsection{{\tt set}}
451
452 The {\tt set} command is used to set the data latch, the flags, or the
453 loop counter.
454
455 \newcommand{\bitsSet}{
456 {\tt\begin{bytefield}{25}
457   \bitheader[b]{19-21}\\
458 \color{light}
459   \bitbox{1}{U} 
460   \bitbox{1}{} 
461   \bitbox{1}{} 
462   \bitbox{1}{1}
463   \bitbox{1}{0} 
464   \bitbox{1}{1} 
465 \color{light}
466   \bitbox{4}{Dest} 
467   \bitbox{3}{Src} 
468   \bitbox{12}{} 
469 \end{bytefield}}
470
471 \begin{bytefield}{25}
472   \bitheader[b]{12-18}\\
473   \bitbox[1]{5}{\raggedleft {\tt Data Latch}$\to${\tt LC}}
474   \bitbox[r]{1}{}
475   \bitbox{4}{\tt 1000}
476   \bitbox{3}{\tt 010}
477   \bitbox{12}{}
478 \end{bytefield}
479
480 \begin{bytefield}{25}
481   \bitheader[b]{0,5,6,11,15-18}\\
482   \bitbox[1]{5}{\raggedleft {\tt Update Flags}}
483   \bitbox[r]{1}{}
484   \bitbox{4}{\tt 0001}
485   \bitbox{3}{}
486   \bitbox{6}{\tt nextA}
487   \bitbox{6}{\tt nextB}
488 \end{bytefield}
489
490 }
491 \bitsSet
492
493 The FleetTwo implementation is likely to have an unarchitected
494 ``literal latch'' at the on deck ({\tt OD}) stage, which is loaded
495 with the possibly-extended literal {\it at the time that the {\tt set}
496   instruction comes on deck}.  This latch is then copied into the data
497 latch when a {\tt set Data Latch} instruction
498 executes.
499
500 The {\tt Sign-Extended Immediate} instruction copies the {\tt
501 Immediate} field into the least significant bits of the data latch.
502 All other bits of the data latch are filled with a copy of the
503 bit marked ``{\tt Sign}.''
504
505
506 Each of the {\tt nextA} and {\tt nextB} fields has the following
507 structure, and indicates which old flag values should be logically
508 {\tt OR}ed together to produce the new flag value:
509
510 \begin{center}
511 {\tt
512 \begin{bytefield}{6}
513   \bitheader[b]{0-5}\\
514   \bitbox{1}{${\text{\tt A}}$}
515   \bitbox{1}{$\overline{\text{\tt A}}$}
516   \bitbox{1}{${\text{\tt B}}$}
517   \bitbox{1}{$\overline{\text{\tt B}}$}
518   \bitbox{1}{${\text{{\tt C}\ }}$}
519   \bitbox{1}{$\overline{\text{{\tt C}\ }}$}
520 \end{bytefield}}
521 \end{center}
522
523 Each bit corresponds to one possible input; all inputs whose bits are
524 set are {\tt OR}ed together, and the resulting value is assigned to
525 the flag.  Note that if none of the bits are set, the value assigned
526 is zero.  Note also that it is possible to produce a {\tt 1} by {\tt
527   OR}ing any flag with its complement, and that {\tt set Flags} can
528 be used to create a {\tt nop} (no-op) by setting each flag to itself.
529
530
531
532
533 \pagebreak
534 \subsection{{\tt literal}}
535
536 \newcommand{\literalImmediateSize}{19}
537
538 Each {\tt literal} instruction carries an immediate of
539 \literalImmediateSize\ bits.  When a {\tt literal} instruction is
540 executed, this immediate is copied into the least significant
541 \literalImmediateSize\ bits of the data latch, and the remaining most
542 significant bits of the data latch are loaded with the value formerly
543 in the least significant bits of the data latch.  In this manner,
544 large literals can be built up by ``shifting'' them into the data
545 latch \literalImmediateSize\ bits at a time.
546
547 \newcommand{\bitsLiteral}{
548 \setlength{\bitwidth}{5mm}
549 {\tt
550 \begin{bytefield}{25}
551   \bitheader[b]{0,18-21}\\
552 \color{light}
553   \bitbox{1}{U} 
554   \bitbox{1}{} 
555   \bitbox{1}{} 
556
557
558   \bitbox{1}{1} 
559   \bitbox{1}{0} 
560   \bitbox{1}{0} 
561
562   \bitbox{\literalImmediateSize}{Immediate} 
563 \end{bytefield}}
564 }
565 \bitsLiteral
566
567 Need two forms: one of them loads the bottom half and sign-extends it
568 into the top half.  The other form loads just the top half.
569
570
571 \subsection{{\tt abort}}
572 \newcommand{\bitsAbort}{\setlength{\bitwidth}{5mm}
573 {\tt
574 \begin{bytefield}{25}
575   \bitheader[b]{18-21}\\
576 \color{light}
577   \bitbox{1}{U} 
578   \bitbox{1}{} 
579   \bitbox{1}{} 
580
581
582   \bitbox{1}{1} 
583   \bitbox{1}{1} 
584   \bitbox{1}{0} 
585
586   \bitbox{1}{0} 
587 \color{light}
588   \bitbox[tbr]{18}{}
589 \end{bytefield}}}
590 \bitsAbort
591
592 An {\tt abort} instruction causes a loop to exit; see the section on
593 the Requeue Stage for further details.
594
595 \subsection{{\tt head}}
596 \newcommand{\bitsHead}{
597 \setlength{\bitwidth}{5mm}
598 {\tt
599 \begin{bytefield}{25}
600   \bitheader[b]{18-21}\\
601 \color{light}
602   \bitbox{3}{} 
603
604
605   \bitbox{1}{1}
606   \bitbox{1}{1}
607   \bitbox{1}{1}
608
609   \bitbox{1}{0}
610 \color{light}
611   \bitbox[tbr]{18}{} 
612 \end{bytefield}}}
613 \bitsHead
614
615 A {\tt head} instruction marks the start of a loop; see the section on
616 the Requeue Stage for further details.
617
618
619 \subsection{{\tt tail}}
620 \newcommand{\bitsTail}{
621 \setlength{\bitwidth}{5mm}
622 {\tt
623 \begin{bytefield}{25}
624   \bitheader[b]{18-21}\\
625 \color{light}
626   \bitbox{3}{} 
627
628
629   \bitbox{1}{1}
630   \bitbox{1}{1}
631   \bitbox{1}{1}
632
633   \bitbox{1}{1}
634 \color{light}
635   \bitbox[tbr]{18}{} 
636 \end{bytefield}}}
637 \bitsTail
638
639 A {\tt tail} instruction marks the end of a loop; see the section on
640 the Requeue Stage for further details.
641
642 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
643 \pagebreak
644 \section*{Instruction Encoding Map}
645
646
647 \vspace{3mm}\hspace{-1cm}{\tt move}\hspace{1cm}\vspace{-6mm}\\
648 \bitsMove
649 \bitsFlush
650
651 \vspace{3mm}\hspace{-1cm}{\tt shift}\hspace{1cm}\vspace{-6mm}\\
652 \bitsLiteral
653
654 \vspace{3mm}\hspace{-1cm}{\tt set}\hspace{1cm}\vspace{-6mm}\\
655 \bitsSet
656
657 \vspace{3mm}\hspace{-1cm}{\tt abort}\hspace{1cm}\vspace{-6mm}\\
658 \bitsAbort
659
660 \vspace{3mm}\hspace{-1cm}{\tt head}\hspace{1cm}\vspace{-6mm}\\
661 \bitsHead
662
663 \vspace{3mm}\hspace{-1cm}{\tt tail}\hspace{1cm}\vspace{-6mm}\\
664 \bitsTail
665
666
667 \end{document}