<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                      "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <title>Stacker: An Example Of Using LLVM</title>
  <link rel="stylesheet" href="llvm.css" type="text/css">
</head>
<body>

<div class="doc_title">Stacker: An Example Of Using LLVM</div>

<ol>
  <li><a href="#abstract">Abstract</a></li>
  <li><a href="#introduction">Introduction</a></li>
  <li><a href="#lessons">Lessons I Learned About LLVM</a>
    <ol>
      <li><a href="#value">Everything's a Value!</a></li>
      <li><a href="#terminate">Terminate Those Blocks!</a></li>
      <li><a href="#blocks">Concrete Blocks</a></li>
      <li><a href="#push_back">push_back Is Your Friend</a></li>
      <li><a href="#gep">The Wily GetElementPtrInst</a></li>
      <li><a href="#linkage">Getting Linkage Types Right</a></li>
      <li><a href="#constants">Constants Are Easier Than That!</a></li>
    </ol></li>
  <li><a href="#lexicon">The Stacker Lexicon</a>
    <ol>
      <li><a href="#stack">The Stack</a></li>
      <li><a href="#punctuation">Punctuation</a></li>
      <li><a href="#comments">Comments</a></li>
      <li><a href="#literals">Literals</a></li>
      <li><a href="#words">Words</a></li>
      <li><a href="#style">Standard Style</a></li>
      <li><a href="#builtins">Built-Ins</a></li>
    </ol></li>
  <li><a href="#example">Prime: A Complete Example</a></li>
  <li><a href="#internal">Internal Code Details</a>
    <ol>
      <li><a href="#directory">The Directory Structure </a></li>
      <li><a href="#lexer">The Lexer</a></li>
      <li><a href="#parser">The Parser</a></li>
      <li><a href="#compiler">The Compiler</a></li>
      <li><a href="#runtime">The Runtime</a></li>
      <li><a href="#driver">Compiler Driver</a></li>
      <li><a href="#tests">Test Programs</a></li>
      <li><a href="#exercise">Exercise</a></li>
      <li><a href="#todo">Things Remaining To Be Done</a></li>
    </ol></li>
</ol>

<div class="doc_author">
  <p>Written by <a href="mailto:rspencer@x10sys.com">Reid Spencer</a></p>
</div>

<!-- ======================================================================= -->
<div class="doc_section"><a name="abstract">Abstract</a></div>
<div class="doc_text">
<p>This document is another way to learn about LLVM. Unlike the 
<a href="LangRef.html">LLVM Reference Manual</a> or 
<a href="ProgrammersManual.html">LLVM Programmer's Manual</a>, here we learn
about LLVM through the experience of creating a simple programming language
named Stacker.  Stacker was invented specifically as a demonstration of
LLVM. The emphasis in this document is not on describing the
intricacies of LLVM itself but on how to use it to build your own
compiler system.</p>
</div>
<!-- ======================================================================= -->
<div class="doc_section"> <a name="introduction">Introduction</a> </div>
<div class="doc_text">
<p>Amongst other things, LLVM is a platform for compiler writers.
Because of its exceptionally clean and small IR (intermediate
representation), compiler writing with LLVM is much easier than with
other system. As proof, I wrote the entire compiler (language definition, 
lexer, parser, code generator, etc.) in about <em>four days</em>! 
That's important to know because it shows how quickly you can get a new
language running when using LLVM. Furthermore, this was the <em >first</em> 
language the author ever created using LLVM. The learning curve is 
included in that four days.</p>
<p>The language described here, Stacker, is Forth-like. Programs
are simple collections of word definitions, and the only thing definitions
can do is manipulate a stack or generate I/O.  Stacker is not a "real" 
programming language; it's very simple.  Although it is computationally 
complete, you wouldn't use it for your next big project. However, 
the fact that it is complete, it's simple, and it <em>doesn't</em> have 
a C-like syntax make it useful for demonstration purposes. It shows
that LLVM could be applied to a wide variety of languages.</p>
<p>The basic notions behind stacker is very simple. There's a stack of 
integers (or character pointers) that the program manipulates. Pretty 
much the only thing the program can do is manipulate the stack and do 
some limited I/O operations. The language provides you with several 
built-in words that manipulate the stack in interesting ways. To get 
your feet wet, here's how you write the traditional "Hello, World" 
program in Stacker:</p>
<p><code>: hello_world "Hello, World!" &gt;s DROP CR ;<br>
: MAIN hello_world ;<br></code></p>
<p>This has two "definitions" (Stacker manipulates words, not
functions and words have definitions): <code>MAIN</code> and <code>
hello_world</code>. The <code>MAIN</code> definition is standard; it
tells Stacker where to start. Here, <code>MAIN</code> is defined to 
simply invoke the word <code>hello_world</code>. The
<code>hello_world</code> definition tells stacker to push the 
<code>"Hello, World!"</code> string on to the stack, print it out 
(<code>&gt;s</code>), pop it off the stack (<code>DROP</code>), and
finally print a carriage return (<code>CR</code>). Although 
<code>hello_world</code> uses the stack, its net effect is null. Well
written Stacker definitions have that characteristic. </p>
<p>Exercise for the reader: how could you make this a one line program?</p>
</div>
<!-- ======================================================================= -->
<div class="doc_section"><a name="lessons"></a>Lessons I Learned About LLVM</div>
<div class="doc_text">
<p>Stacker was written for two purposes: </p>
<ol>
    <li>to get the author over the learning curve, and</li>
    <li>to provide a simple example of how to write a compiler using LLVM.</li>
</ol>
<p>During the development of Stacker, many lessons about LLVM were
learned. Those lessons are described in the following subsections.<p>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection"><a name="value"></a>Everything's a Value!</div>
<div class="doc_text">
<p>Although I knew that LLVM uses a Single Static Assignment (SSA) format, 
it wasn't obvious to me how prevalent this idea was in LLVM until I really
started using it.  Reading the <a href="ProgrammersManual.html">
Programmer's Manual</a> and <a href="LangRef.html">Language Reference</a>,
I noted that most of the important LLVM IR (Intermediate Representation) C++ 
classes were derived from the Value class. The full power of that simple
design only became fully understood once I started constructing executable
expressions for Stacker.</p>

<p>This really makes your programming go faster. Think about compiling code
for the following C/C++ expression: <code>(a|b)*((x+1)/(y+1))</code>. Assuming
the values are on the stack in the order a, b, x, y, this could be
expressed in stacker as: <code>1 + SWAP 1 + / ROT2 OR *</code>.
You could write a function using LLVM that computes this expression like 
this: </p>

<div class="doc_code"><pre>
Value* 
expression(BasicBlock* bb, Value* a, Value* b, Value* x, Value* y )
{
    ConstantSInt* one = ConstantSInt::get(Type::IntTy, 1);
    BinaryOperator* or1 = BinaryOperator::createOr(a, b, "", bb);
    BinaryOperator* add1 = BinaryOperator::createAdd(x, one, "", bb);
    BinaryOperator* add2 = BinaryOperator::createAdd(y, one, "", bb);
    BinaryOperator* div1 = BinaryOperator::createDiv(add1, add2, "", bb);
    BinaryOperator* mult1 = BinaryOperator::createMul(or1, div1, "", bb);
    return mult1;
}
</pre></div>

<p>"Okay, big deal," you say?  It is a big deal. Here's why. Note that I didn't
have to tell this function which kinds of Values are being passed in. They could be
<code>Instruction</code>s, <code>Constant</code>s, <code>GlobalVariable</code>s, or
any of the other subclasses of <code>Value</code> that LLVM supports.
Furthermore, if you specify Values that are incorrect for this sequence of 
operations, LLVM will either notice right away (at compilation time) or the LLVM 
Verifier will pick up the inconsistency when the compiler runs. In either case 
LLVM prevents you from making a type error that gets passed through to the 
generated program.  This <em>really</em> helps you write a compiler that 
always generates correct code!<p>
<p>The second point is that we don't have to worry about branching, registers,
stack variables, saving partial results, etc. The instructions we create 
<em>are</em> the values we use. Note that all that was created in the above
code is a Constant value and five operators. Each of the instructions <em>is</em> 
the resulting value of that instruction. This saves a lot of time.</p>
<p>The lesson is this: <em>SSA form is very powerful: there is no difference
between a value and the instruction that created it.</em> This is fully
enforced by the LLVM IR. Use it to your best advantage.</p>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection"><a name="terminate"></a>Terminate Those Blocks!</div>
<div class="doc_text">
<p>I had to learn about terminating blocks the hard way: using the debugger 
to figure out what the LLVM verifier was trying to tell me and begging for
help on the LLVMdev mailing list. I hope you avoid this experience.</p>
<p>Emblazon this rule in your mind:</p>
<ul>
    <li><em>All</em> <code>BasicBlock</code>s in your compiler <b>must</b> be
	terminated with a terminating instruction (branch, return, etc.).
    </li>
</ul>
<p>Terminating instructions are a semantic requirement of the LLVM IR. There
is no facility for implicitly chaining together blocks placed into a function
in the order they occur. Indeed, in the general case, blocks will not be
added to the function in the order of execution because of the recursive
way compilers are written.</p>
<p>Furthermore, if you don't terminate your blocks, your compiler code will 
compile just fine. You won't find out about the problem until you're running 
the compiler and the module you just created fails on the LLVM Verifier.</p>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection"><a name="blocks"></a>Concrete Blocks</div>
<div class="doc_text">
<p>After a little initial fumbling around, I quickly caught on to how blocks
should be constructed. In general, here's what I learned:
<ol>
    <li><em>Create your blocks early.</em> While writing your compiler, you 
    will encounter several situations where you know apriori that you will
    need several blocks. For example, if-then-else, switch, while, and for
    statements in C/C++ all need multiple blocks for expression in LVVM. 
    The rule is, create them early.</li>
    <li><em>Terminate your blocks early.</em> This just reduces the chances 
    that you forget to terminate your blocks which is required (go 
    <a href="#terminate">here</a> for more). 
    <li><em>Use getTerminator() for instruction insertion.</em> I noticed early on
    that many of the constructors for the Instruction classes take an optional
    <code>insert_before</code> argument. At first, I thought this was a mistake
    because clearly the normal mode of inserting instructions would be one at
    a time <em>after</em> some other instruction, not <em>before</em>. However,
    if you hold on to your terminating instruction (or use the handy dandy
    <code>getTerminator()</code> method on a <code>BasicBlock</code>), it can
    always be used as the <code>insert_before</code> argument to your instruction
    constructors. This causes the instruction to automatically be inserted in 
    the RightPlace&trade; place, just before the terminating instruction. The 
    nice thing about this design is that you can pass blocks around and insert 
    new instructions into them without ever knowing what instructions came 
    before. This makes for some very clean compiler design.</li>
</ol>
<p>The foregoing is such an important principal, its worth making an idiom:</p>
<pre>
BasicBlock* bb = new BasicBlock();
bb->getInstList().push_back( new Branch( ... ) );
new Instruction(..., bb->getTerminator() );
</pre>
<p>To make this clear, consider the typical if-then-else statement
(see StackerCompiler::handle_if() method).  We can set this up
in a single function using LLVM in the following way: </p>
<pre>
using namespace llvm;
BasicBlock*
MyCompiler::handle_if( BasicBlock* bb, SetCondInst* condition )
{
    // Create the blocks to contain code in the structure of if/then/else
    BasicBlock* then_bb = new BasicBlock(); 
    BasicBlock* else_bb = new BasicBlock();
    BasicBlock* exit_bb = new BasicBlock();

    // Insert the branch instruction for the "if"
    bb->getInstList().push_back( new BranchInst( then_bb, else_bb, condition ) );

    // Set up the terminating instructions
    then->getInstList().push_back( new BranchInst( exit_bb ) );
    else->getInstList().push_back( new BranchInst( exit_bb ) );

    // Fill in the then part .. details excised for brevity
    this->fill_in( then_bb );

    // Fill in the else part .. details excised for brevity
    this->fill_in( else_bb );

    // Return a block to the caller that can be filled in with the code
    // that follows the if/then/else construct.
    return exit_bb;
}
</pre>
<p>Presumably in the foregoing, the calls to the "fill_in" method would add 
the instructions for the "then" and "else" parts. They would use the third part
of the idiom almost exclusively (inserting new instructions before the 
terminator). Furthermore, they could even recurse back to <code>handle_if</code> 
should they encounter another if/then/else statement, and it will just work.</p>
<p>Note how cleanly this all works out. In particular, the push_back methods on
the <code>BasicBlock</code>'s instruction list. These are lists of type 
<code>Instruction</code> (which is also of type <code>Value</code>). To create 
the "if" branch we merely instantiate a <code>BranchInst</code> that takes as 
arguments the blocks to branch to and the condition to branch on. The 
<code>BasicBlock</code> objects act like branch labels! This new 
<code>BranchInst</code> terminates the <code>BasicBlock</code> provided 
as an argument. To give the caller a way to keep inserting after calling 
<code>handle_if</code>, we create an <code>exit_bb</code> block which is
returned 
to the caller.  Note that the <code>exit_bb</code> block is used as the 
terminator for both the <code>then_bb</code> and the <code>else_bb</code>
blocks. This guarantees that no matter what else <code>handle_if</code>
or <code>fill_in</code> does, they end up at the <code>exit_bb</code> block.
</p>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection"><a name="push_back"></a>push_back Is Your Friend</div>
<div class="doc_text">
<p>
One of the first things I noticed is the frequent use of the "push_back"
method on the various lists. This is so common that it is worth mentioning.
The "push_back" inserts a value into an STL list, vector, array, etc. at the
end. The method might have also been named "insert_tail" or "append".
Although I've used STL quite frequently, my use of push_back wasn't very
high in other programs. In LLVM, you'll use it all the time.
</p>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection"><a name="gep"></a>The Wily GetElementPtrInst</div>
<div class="doc_text">
<p>
It took a little getting used to and several rounds of postings to the LLVM
mailing list to wrap my head around this instruction correctly. Even though I had
read the Language Reference and Programmer's Manual a couple times each, I still
missed a few <em>very</em> key points:
</p>
<ul>
<li>GetElementPtrInst gives you back a Value for the last thing indexed.</li>
<li>All global variables in LLVM  are <em>pointers</em>.</li>
<li>Pointers must also be dereferenced with the GetElementPtrInst
instruction.</li>
</ul>
<p>This means that when you look up an element in the global variable (assuming
it's a struct or array), you <em>must</em> deference the pointer first! For many
things, this leads to the idiom:
</p>
<pre>
std::vector&lt;Value*&gt; index_vector;
index_vector.push_back( ConstantSInt::get( Type::LongTy, 0 );
// ... push other indices ...
GetElementPtrInst* gep = new GetElementPtrInst( ptr, index_vector );
</pre>
<p>For example, suppose we have a global variable whose type is [24 x int]. The
variable itself represents a <em>pointer</em> to that array. To subscript the
array, we need two indices, not just one. The first index (0) dereferences the
pointer. The second index subscripts the array. If you're a "C" programmer, this
will run against your grain because you'll naturally think of the global array
variable and the address of its first element as the same. That tripped me up
for a while until I realized that they really do differ .. by <em>type</em>.
Remember that LLVM is strongly typed. Everything has a type.  
The "type" of the global variable is [24 x int]*. That is, it's
a pointer to an array of 24 ints.  When you dereference that global variable with
a single (0) index, you now have a "[24 x int]" type.  Although
the pointer value of the dereferenced global and the address of the zero'th element
in the array will be the same, they differ in their type. The zero'th element has
type "int" while the pointer value has type "[24 x int]".</p>
<p>Get this one aspect of LLVM right in your head, and you'll save yourself
a lot of compiler writing headaches down the road.</p>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection"><a name="linkage"></a>Getting Linkage Types Right</div>
<div class="doc_text">
<p>Linkage types in LLVM can be a little confusing, especially if your compiler
writing mind has affixed firm concepts to particular words like "weak",
"external", "global", "linkonce", etc. LLVM does <em>not</em> use the precise
definitions of, say, ELF or GCC, even though they share common terms. To be fair,
the concepts are related and similar but not precisely the same. This can lead
you to think you know what a linkage type represents but in fact it is slightly
different. I recommend you read the 
<a href="LangRef.html#linkage"> Language Reference on this topic</a> very 
carefully. Then, read it again.<p>
<p>Here are some handy tips that I discovered along the way:</p>
<ul>
    <li><em>Uninitialized means external.</em> That is, the symbol is declared in the current
    module and can be used by that module, but it is not defined by that module.</li>
    <li><em>Setting an initializer changes a global' linkage type.</em> Setting an 
    initializer changes a global's linkage type from whatever it was to a normal, 
    defined global (not external). You'll need to call the setLinkage() method to 
    reset it if you specify the initializer after the GlobalValue has been constructed. 
    This is important for LinkOnce and Weak linkage types.</li> 
    <li><em>Appending linkage can keep track of things.</em> Appending linkage can 
    be used to keep track of compilation information at runtime. It could be used, 
    for example, to build a full table of all the C++ virtual tables or hold the 
    C++ RTTI data, or whatever. Appending linkage can only be applied to arrays. 
    All arrays with the same name in each module are concatenated together at link 
    time.</li>
</ul>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection"><a name="constants"></a>Constants Are Easier Than That!</div>
<div class="doc_text">
<p>
Constants in LLVM took a little getting used to until I discovered a few utility
functions in the LLVM IR that make things easier. Here's what I learned: </p>
<ul>
 <li>Constants are Values like anything else and can be operands of instructions</li>
 <li>Integer constants, frequently needed, can be created using the static "get"
 methods of the ConstantInt, ConstantSInt, and ConstantUInt classes. The nice thing
 about these is that you can "get" any kind of integer quickly.</li>
 <li>There's a special method on Constant class which allows you to get the null 
 constant for <em>any</em> type. This is really handy for initializing large 
 arrays or structures, etc.</li>
</ul>
</div>
<!-- ======================================================================= -->
<div class="doc_section"> <a name="lexicon">The Stacker Lexicon</a></div>
<div class="doc_text"><p>This section describes the Stacker language</p></div>
<div class="doc_subsection"><a name="stack"></a>The Stack</div>
<div class="doc_text">
<p>Stacker definitions define what they do to the global stack. Before
proceeding, a few words about the stack are in order. The stack is simply
a global array of 32-bit integers or pointers. A global index keeps track
of the location of the top of the stack. All of this is hidden from the 
programmer, but it needs to be noted because it is the foundation of the 
conceptual programming model for Stacker. When you write a definition,
you are, essentially, saying how you want that definition to manipulate
the global stack.</p>
<p>Manipulating the stack can be quite hazardous. There is no distinction
given and no checking for the various types of values that can be placed
on the stack. Automatic coercion between types is performed. In many 
cases, this is useful. For example, a boolean value placed on the stack
can be interpreted as an integer with good results. However, using a
word that interprets that boolean value as a pointer to a string to
print out will almost always yield a crash. Stacker simply leaves it
to the programmer to get it right without any interference or hindering
on interpretation of the stack values. You've been warned. :) </p>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection"> <a name="punctuation"></a>Punctuation</div>
<div class="doc_text">
<p>Punctuation in Stacker is very simple. The colon and semi-colon 
characters are used to introduce and terminate a definition
(respectively). Except for <em>FORWARD</em> declarations, definitions 
are all you can specify in Stacker.  Definitions are read left to right. 
Immediately after the colon comes the name of the word being defined. 
The remaining words in the definition specify what the word does. The definition
is terminated by a semi-colon.</p>
<p>So, your typical definition will have the form:</p>
<pre><code>: name ... ;</code></pre>
<p>The <code>name</code> is up to you but it must start with a letter and contain
only letters, numbers, and underscore. Names are case sensitive and must not be
the same as the name of a built-in word. The <code>...</code> is replaced by
the stack manipulating words that you wish to define <code>name</code> as. <p>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection"><a name="comments"></a>Comments</div>
<div class="doc_text">
    <p>Stacker supports two types of comments. A hash mark (#) starts a comment
    that extends to the end of the line. It is identical to the kind of comments
    commonly used in shell scripts. A pair of parentheses also surround a comment.
    In both cases, the content of the comment is ignored by the Stacker compiler. The
    following does nothing in Stacker.
    </p>
<pre><code>
# This is a comment to end of line
( This is an enclosed comment )
</code></pre>
<p>See the <a href="#example">example</a> program to see comments in use in 
a real program.</p>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection"><a name="literals"></a>Literals</div>
<div class="doc_text">
    <p>There are three kinds of literal values in Stacker: Integers, Strings,
    and Booleans. In each case, the stack operation is to simply push the
    value on to the stack. So, for example:<br/>
    <code> 42 " is the answer." TRUE </code><br/>
    will push three values on to the stack: the integer 42, the
    string " is the answer.", and the boolean TRUE.</p>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection"><a name="words"></a>Words</div>
<div class="doc_text">
<p>Each definition in Stacker is composed of a set of words. Words are
read and executed in order from left to right. There is very little
checking in Stacker to make sure you're doing the right thing with 
the stack. It is assumed that the programmer knows how the stack 
transformation he applies will affect the program.</p>
<p>Words in a definition come in two flavors: built-in and programmer
defined. Simply mentioning the name of a previously defined or declared
programmer-defined word causes that word's stack actions to be invoked. It
is somewhat like a function call in other languages. The built-in
words have various effects, described <a href="#builtins">below</a>.</p>
<p>Sometimes you need to call a word before it is defined. For this, you can
use the <code>FORWARD</code> declaration. It looks like this:</p>
<p><code>FORWARD name ;</code></p>
<p>This simply states to Stacker that "name" is the name of a definition
that is defined elsewhere. Generally it means the definition can be found
"forward" in the file. But, it doesn't have to be in the current compilation
unit. Anything declared with <code>FORWARD</code> is an external symbol for
linking.</p>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection"><a name="style"></a>Standard Style</div>
<div class="doc_text">
<p>TODO</p>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection"><a name="builtins"></a>Built In Words</div>
<div class="doc_text">
<p>The built-in words of the Stacker language are put in several groups 
depending on what they do. The groups are as follows:</p>
<ol> 
    <li><em>Logical</em>: These words provide the logical operations for
    comparing stack operands.<br/>The words are: &lt; &gt; &lt;= &gt;= 
    = &lt;&gt; true false.</li>
    <li><em>Bitwise</em>: These words perform bitwise computations on 
    their operands. <br/> The words are: &lt;&lt; &gt;&gt; XOR AND NOT</li>
    <li><em>Arithmetic</em>: These words perform arithmetic computations on
    their operands. <br/> The words are: ABS NEG + - * / MOD */ ++ -- MIN MAX</li>
    <li><em>Stack</em>These words manipulate the stack directly by moving
    its elements around.<br/> The words are: DROP DROP2 NIP NIP2 DUP DUP2 
    SWAP SWAP2 OVER OVER2 ROT ROT2 RROT RROT2 TUCK TUCK2 PICK SELECT ROLL</li>
    <li><em>Memory</em>These words allocate, free, and manipulate memory
    areas outside the stack.<br/>The words are: MALLOC FREE GET PUT</li>
    <li><em>Control</em>: These words alter the normal left to right flow
    of execution.<br/>The words are: IF ELSE ENDIF WHILE END RETURN EXIT RECURSE</li>
    <li><em>I/O</em>: These words perform output on the standard output
    and input on the standard input. No other I/O is possible in Stacker.
    <br/>The words are: SPACE TAB CR &gt;s &gt;d &gt;c &lt;s &lt;d &lt;c.</li>
</ol>
<p>While you may be familiar with many of these operations from other
programming languages, a careful review of their semantics is important
for correct programming in Stacker. Of most importance is the effect 
that each of these built-in words has on the global stack. The effect is
not always intuitive. To better describe the effects, we'll borrow from Forth the idiom of
describing the effect on the stack with:</p>
<p><code> BEFORE -- AFTER </code></p> 
<p>That is, to the left of the -- is a representation of the stack before
the operation. To the right of the -- is a representation of the stack
after the operation. In the table below that describes the operation of
each of the built in words, we will denote the elements of the stack 
using the following construction:</p>
<ol>
    <li><em>b</em> - a boolean truth value</li>
    <li><em>w</em> - a normal integer valued word.</li>
    <li><em>s</em> - a pointer to a string value</li>
    <li><em>p</em> - a pointer to a malloc'd memory block</li>
</ol>
</div>
<div class="doc_text" >
    <table>
<tr><th colspan="4">Definition Of Operation Of Built In Words</th></tr>
<tr><th colspan="4"><b>LOGICAL OPERATIONS</b></th></tr>
<tr>
    <td>Word</td>
    <td>Name</td>
    <td>Operation</td>
    <td>Description</td>
</tr>
<tr>
    <td>&lt;</td>
    <td>LT</td>
    <td>w1 w2 -- b</td>
    <td>Two values (w1 and w2) are popped off the stack and
    compared. If w1 is less than w2, TRUE is pushed back on
    the stack, otherwise FALSE is pushed back on the stack.</td>
</tr>
<tr><td>&gt;</td>
    <td>GT</td>
    <td>w1 w2 -- b</td>
    <td>Two values (w1 and w2) are popped off the stack and
    compared. If w1 is greater than w2, TRUE is pushed back on
    the stack, otherwise FALSE is pushed back on the stack.</td>
</tr>
<tr><td>&gt;=</td>
    <td>GE</td>
    <td>w1 w2 -- b</td>
    <td>Two values (w1 and w2) are popped off the stack and
    compared. If w1 is greater than or equal to w2, TRUE is 
    pushed back on the stack, otherwise FALSE is pushed back 
    on the stack.</td>
</tr>
<tr><td>&lt;=</td>
    <td>LE</td>
    <td>w1 w2 -- b</td>
    <td>Two values (w1 and w2) are popped off the stack and
    compared. If w1 is less than or equal to w2, TRUE is 
    pushed back on the stack, otherwise FALSE is pushed back 
    on the stack.</td>
</tr>
<tr><td>=</td>
    <td>EQ</td>
    <td>w1 w2 -- b</td>
    <td>Two values (w1 and w2) are popped off the stack and
    compared. If w1 is equal to w2, TRUE is 
    pushed back on the stack, otherwise FALSE is pushed back 
    </td>
</tr>
<tr><td>&lt;&gt;</td>
    <td>NE</td>
    <td>w1 w2 -- b</td>
    <td>Two values (w1 and w2) are popped off the stack and
    compared. If w1 is equal to w2, TRUE is 
    pushed back on the stack, otherwise FALSE is pushed back 
    </td>
</tr>
<tr><td>FALSE</td>
    <td>FALSE</td>
    <td> -- b</td>
    <td>The boolean value FALSE (0) is pushed on to the stack.</td>
</tr>
<tr><td>TRUE</td>
    <td>TRUE</td>
    <td> -- b</td>
    <td>The boolean value TRUE (-1) is pushed on to the stack.</td>
</tr>
<tr><th colspan="4"><b>BITWISE OPERATORS</b></th></tr>
<tr>
    <td>Word</td>
    <td>Name</td>
    <td>Operation</td>
    <td>Description</td>
</tr>
<tr><td>&lt;&lt;</td>
    <td>SHL</td>
    <td>w1 w2 -- w1&lt;&lt;w2</td>
    <td>Two values (w1 and w2) are popped off the stack. The w2
    operand is shifted left by the number of bits given by the
    w1 operand. The result is pushed back to the stack.</td>
</tr>
<tr><td>&gt;&gt;</td>
    <td>SHR</td>
    <td>w1 w2 -- w1&gt;&gt;w2</td>
    <td>Two values (w1 and w2) are popped off the stack. The w2
    operand is shifted right by the number of bits given by the
    w1 operand. The result is pushed back to the stack.</td>
</tr>
<tr><td>OR</td>
    <td>OR</td>
    <td>w1 w2 -- w2|w1</td>
    <td>Two values (w1 and w2) are popped off the stack. The values
    are bitwise OR'd together and pushed back on the stack. This is 
    not a logical OR. The sequence 1 2 OR yields 3 not 1.</td>
</tr>
<tr><td>AND</td>
    <td>AND</td>
    <td>w1 w2 -- w2&amp;w1</td>
    <td>Two values (w1 and w2) are popped off the stack. The values
    are bitwise AND'd together and pushed back on the stack. This is 
    not a logical AND. The sequence 1 2 AND yields 0 not 1.</td>
</tr>
<tr><td>XOR</td>
    <td>XOR</td>
    <td>w1 w2 -- w2^w1</td>
    <td>Two values (w1 and w2) are popped off the stack. The values
    are bitwise exclusive OR'd together and pushed back on the stack. 
    For example, The sequence 1 3 XOR yields 2.</td>
</tr>
<tr><th colspan="4"><b>ARITHMETIC OPERATORS</b></th></tr>
<tr>
    <td>Word</td>
    <td>Name</td>
    <td>Operation</td>
    <td>Description</td>
</tr>
<tr><td>ABS</td>
    <td>ABS</td>
    <td>w -- |w|</td>
    <td>One value s popped off the stack; its absolute value is computed
    and then pushed on to the stack. If w1 is -1 then w2 is 1. If w1 is
    1 then w2 is also 1.</td>
</tr>
<tr><td>NEG</td>
    <td>NEG</td>
    <td>w -- -w</td>
    <td>One value is popped off the stack which is negated and then
    pushed back on to the stack. If w1 is -1 then w2 is 1. If w1 is
    1 then w2 is -1.</td>
</tr>
<tr><td> + </td>
    <td>ADD</td>
    <td>w1 w2 -- w2+w1</td>
    <td>Two values are popped off the stack. Their sum is pushed back
    on to the stack</td>
</tr>
<tr><td> - </td>
    <td>SUB</td>
    <td>w1 w2 -- w2-w1</td>
    <td>Two values are popped off the stack. Their difference is pushed back
    on to the stack</td>
</tr>
<tr><td> * </td>
    <td>MUL</td>
    <td>w1 w2 -- w2*w1</td>
    <td>Two values are popped off the stack. Their product is pushed back
    on to the stack</td>
</tr>
<tr><td> / </td>
    <td>DIV</td>
    <td>w1 w2 -- w2/w1</td>
    <td>Two values are popped off the stack. Their quotient is pushed back
    on to the stack</td>
</tr>
<tr><td>MOD</td>
    <td>MOD</td>
    <td>w1 w2 -- w2%w1</td>
    <td>Two values are popped off the stack. Their remainder after division
    of w1 by w2 is pushed back on to the stack</td>
</tr>
<tr><td> */ </td>
    <td>STAR_SLAH</td>
    <td>w1 w2 w3 -- (w3*w2)/w1</td>
    <td>Three values are popped off the stack. The product of w1 and w2 is
    divided by w3. The result is pushed back on to the stack.</td>
</tr>
<tr><td> ++ </td>
    <td>INCR</td>
    <td>w -- w+1</td>
    <td>One value is popped off the stack. It is incremented by one and then
    pushed back on to the stack.</td>
</tr>
<tr><td> -- </td>
    <td>DECR</td>
    <td>w -- w-1</td>
    <td>One value is popped off the stack. It is decremented by one and then
    pushed back on to the stack.</td>
</tr>
<tr><td>MIN</td>
    <td>MIN</td>
    <td>w1 w2 -- (w2&lt;w1?w2:w1)</td>
    <td>Two values are popped off the stack. The larger one is pushed back
    on to the stack.</td>
</tr>
<tr><td>MAX</td>
    <td>MAX</td>
    <td>w1 w2 -- (w2&gt;w1?w2:w1)</td>
    <td>Two values are popped off the stack. The larger value is pushed back
	on to the stack.</td>
</tr>
<tr><th colspan="4"><b>STACK MANIPULATION OPERATORS</b></th></tr>
<tr>
    <td>Word</td>
    <td>Name</td>
    <td>Operation</td>
    <td>Description</td>
</tr>
<tr><td>DROP</td>
    <td>DROP</td>
    <td>w -- </td>
    <td>One value is popped off the stack.</td>
</tr>
<tr><td>DROP2</td>
    <td>DROP2</td>
    <td>w1 w2 -- </td>
    <td>Two values are popped off the stack.</td>
</tr>
<tr><td>NIP</td>
    <td>NIP</td>
    <td>w1 w2 -- w2</td>
    <td>The second value on the stack is removed from the stack. That is,
	a value is popped off the stack and retained. Then a second value is
	popped and the retained value is pushed.</td>
</tr>
<tr><td>NIP2</td>
    <td>NIP2</td>
    <td>w1 w2 w3 w4 -- w3 w4</td>
    <td>The third and fourth values on the stack are removed from it. That is,
	two values are popped and retained. Then two more values are popped and
	the two retained values are pushed back on.</td>
</tr>
<tr><td>DUP</td>
    <td>DUP</td>
    <td>w1 -- w1 w1</td>
    <td>One value is popped off the stack. That value is then pushed on to
	the stack twice to duplicate the top stack vaue.</td>
</tr>
<tr><td>DUP2</td>
    <td>DUP2</td>
    <td>w1 w2 -- w1 w2 w1 w2</td>
    <td>The top two values on the stack are duplicated. That is, two vaues
	are popped off the stack. They are alternately pushed back on the
	stack twice each.</td>
</tr>
<tr><td>SWAP</td>
    <td>SWAP</td>
    <td>w1 w2 -- w2 w1</td>
    <td>The top two stack items are reversed in their order. That is, two
	values are popped off the stack and pushed back on to the stack in
	the opposite order they were popped.</td>
</tr>
<tr><td>SWAP2</td>
    <td>SWAP2</td>
    <td>w1 w2 w3 w4 -- w3 w4 w2 w1</td>
    <td>The top four stack items are swapped in pairs. That is, two values
	are popped and retained. Then, two more values are popped and retained.
	The values are pushed back on to the stack in the reverse order but
	in pairs.</td>
</tr>
<tr><td>OVER</td>
    <td>OVER</td>
    <td>w1 w2-- w1 w2 w1</td>
    <td>Two values are popped from the stack. They are pushed back
	on to the stack in the order w1 w2 w1. This seems to cause the
	top stack element to be duplicated "over" the next value.</td>
</tr>
<tr><td>OVER2</td>
    <td>OVER2</td>
    <td>w1 w2 w3 w4 -- w1 w2 w3 w4 w1 w2</td>
    <td>The third and fourth values on the stack are replicated on to the
	top of the stack</td>
</tr>
<tr><td>ROT</td>
    <td>ROT</td>
    <td>w1 w2 w3 -- w2 w3 w1</td>
    <td>The top three values are rotated. That is, three value are popped
	off the stack. They are pushed back on to the stack in the order
	w1 w3 w2.</td>
</tr>
<tr><td>ROT2</td>
    <td>ROT2</td>
    <td>w1 w2 w3 w4 w5 w6 -- w3 w4 w5 w6 w1 w2</td>
    <td>Like ROT but the rotation is done using three pairs instead of
	three singles.</td>
</tr>
<tr><td>RROT</td>
    <td>RROT</td>
    <td>w1 w2 w3 -- w3 w1 w2</td>
    <td>Reverse rotation. Like ROT, but it rotates the other way around.
	Essentially, the third element on the stack is moved to the top
	of the stack.</td>
</tr>
<tr><td>RROT2</td>
    <td>RROT2</td>
    <td>w1 w2 w3 w4 w5 w6 -- w3 w4 w5 w6 w1 w2</td>
    <td>Double reverse rotation. Like RROT but the rotation is done using 
	three pairs instead of three singles. The fifth and sixth stack 
	elements are moved to the first and second positions</td>
</tr>
<tr><td>TUCK</td>
    <td>TUCK</td>
    <td>w1 w2 -- w2 w1 w2</td>
    <td>Similar to OVER except that the second operand is being 
	replicated. Essentially, the first operand is being "tucked"
	in between two instances of the second operand. Logically, two
	values are popped off the stack. They are placed back on the
	stack in the order w2 w1 w2.</td>
</tr>
<tr><td>TUCK2</td>
    <td>TUCK2</td>
    <td>w1 w2 w3 w4 -- w3 w4 w1 w2 w3 w4</td>
    <td>Like TUCK but a pair of elements is tucked over two pairs.
	That is, the top two elements of the stack are duplicated and
	inserted into the stack at the fifth and positions.</td>
</tr>
<tr><td>PICK</td>
    <td>PICK</td>
    <td>x0 ... Xn n -- x0 ... Xn x0</td>
    <td>The top of the stack is used as an index into the remainder of
	the stack. The element at the nth position replaces the index 
	(top of stack). This is useful for cycling through a set of 
	values. Note that indexing is zero based. So, if n=0 then you
	get the second item on the stack. If n=1 you get the third, etc.
	Note also that the index is replaced by the n'th value. </td>
</tr>
<tr><td>SELECT</td>
    <td>SELECT</td>
    <td>m n X0..Xm Xm+1 .. Xn -- Xm</td>
    <td>This is like PICK but the list is removed and you need to specify
	both the index and the size of the list. Careful with this one,
	the wrong value for n can blow away a huge amount of the stack.</td>
</tr>
<tr><td>ROLL</td>
    <td>ROLL</td>
    <td>x0 x1 .. xn n -- x1 .. xn x0</td>
    <td><b>Not Implemented</b>. This one has been left as an exercise to
	the student. See <a href="#exercise">Exercise</a>. ROLL requires 
    a value, "n", to be on the top of the stack. This value specifies how 
    far into the stack to "roll". The n'th value is <em>moved</em> (not
    copied) from its location and replaces the "n" value on the top of the
    stack. In this way, all the values between "n" and x0 roll up the stack.
    The operation of ROLL is a generalized ROT.  The "n" value specifies 
    how much to rotate. That is, ROLL with n=1 is the same as ROT and 
    ROLL with n=2 is the same as ROT2.</td>
</tr>
<tr><th colspan="4"><b>MEMORY OPERATORS</b></th></tr>
<tr>
    <td>Word</td>
    <td>Name</td>
    <td>Operation</td>
    <td>Description</td>
</tr>
<tr><td>MALLOC</td>
    <td>MALLOC</td>
    <td>w1 -- p</td>
    <td>One value is popped off the stack. The value is used as the size
	of a memory block to allocate. The size is in bytes, not words.
        The memory allocation is completed and the address of the memory
	block is pushed on to the stack.</td>
</tr>
<tr><td>FREE</td>
    <td>FREE</td>
    <td>p -- </td>
    <td>One pointer value is popped off the stack. The value should be
	the address of a memory block created by the MALLOC operation. The
	associated memory block is freed. Nothing is pushed back on the
	stack. Many bugs can be created by attempting to FREE something
	that isn't a pointer to a MALLOC allocated memory block. Make
	sure you know what's on the stack.  One way to do this is with
	the following idiom:<br/>
	<code>64 MALLOC DUP DUP (use ptr) DUP (use ptr) ...  FREE</code>
	<br/>This ensures that an extra copy of the pointer is placed on
	the stack (for the FREE at the end) and that every use of the
	pointer is preceded by a DUP to retain the copy for FREE.</td>
</tr>
<tr><td>GET</td>
    <td>GET</td>
    <td>w1 p -- w2 p</td>
    <td>An integer index and a pointer to a memory block are popped of
	the block. The index is used to index one byte from the memory
	block. That byte value is retained, the pointer is pushed again
	and the retained value is pushed. Note that the pointer value
	s essentially retained in its position so this doesn't count
	as a "use ptr" in the FREE idiom.</td>
</tr>
<tr><td>PUT</td>
    <td>PUT</td>
    <td>w1 w2 p -- p </td>
    <td>An integer value is popped of the stack. This is the value to
	be put into a memory block. Another integer value is popped of
	the stack. This is the indexed byte in the memory block. A
	pointer to the memory block is popped off the stack. The
	first value (w1) is then converted to a byte and written
	to the element of the memory block(p) at the index given
	by the second value (w2). The pointer to the memory block is
	pushed back on the stack so this doesn't count as a "use ptr"
	in the FREE idiom.</td>
</tr>
<tr><th colspan="4"><b>CONTROL FLOW OPERATORS</b></th></tr>
<tr>
    <td>Word</td>
    <td>Name</td>
    <td>Operation</td>
    <td>Description</td>
</tr>
<tr><td>RETURN</td>
    <td>RETURN</td>
    <td> --  </td>
    <td>The currently executing definition returns immediately to its caller.
	Note that there is an implicit <code>RETURN</code> at the end of each
	definition, logically located at the semi-colon. The sequence 
	<code>RETURN ;</code>  is valid but redundant.</td>
</tr>
<tr><td>EXIT</td>
    <td>EXIT</td>
    <td>w1 -- </td>
    <td>A return value for the program is popped off the stack. The program is
	then immediately terminated. This is normally an abnormal exit from the
	program. For a normal exit (when <code>MAIN</code> finishes), the exit
	code will always be zero in accordance with UNIX conventions.</td>
</tr>
<tr><td>RECURSE</td>
    <td>RECURSE</td>
    <td> -- </td>
    <td>The currently executed definition is called again. This operation is 
	needed since the definition of a word doesn't exist until the semi colon
	is reacher. Attempting something like:<br/>
	<code> : recurser recurser ; </code><br/> will yield and error saying that 
	"recurser" is not defined yet. To accomplish the same thing, change this
	to:<br/>
	<code> : recurser RECURSE ; </code></td>
</tr>
<tr><td>IF (words...) ENDIF</td>
    <td>IF (words...) ENDIF</td>
    <td>b -- </td>
    <td>A boolean value is popped of the stack. If it is non-zero then the "words..." 
	are executed. Otherwise, execution continues immediately following the ENDIF.</td>
</tr>
<tr><td>IF (words...) ELSE (words...) ENDIF</td>
    <td>IF (words...) ELSE (words...) ENDIF</td>
    <td>b -- </td>
    <td>A boolean value is popped of the stack. If it is non-zero then the "words..."
	between IF and ELSE are executed. Otherwise the words between ELSE and ENDIF are
	executed. In either case, after the (words....) have executed, execution continues
        immediately following the ENDIF. </td>
</tr>
<tr><td>WHILE word END</td>
    <td>WHILE word END</td>
    <td>b -- b </td>
    <td>The boolean value on the top of the stack is examined (not popped). If 
      it is non-zero then the "word" between WHILE and END is executed. 
      Execution then begins again at the WHILE where the boolean on the top of 
      the stack is examined again. The stack is not modified by the WHILE...END 
      loop, only examined. It is imperative that the "word" in the body of the
      loop ensure that the top of the stack contains the next boolean to examine
      when it completes.  Note that since booleans and integers can be coerced 
      you can use the following "for loop" idiom:<br/>
	<code>(push count) WHILE word -- END</code><br/>
	For example:<br/>
	<code>10 WHILE &gt;d -- END</code><br/>
        This will print the numbers from 10 down to 1. 10 is pushed on the 
        stack. Since that is non-zero, the while loop is entered. The top of 
        the stack (10) is printed out with &gt;d. The top of the stack is 
        decremented, yielding 9 and control is transfered back to the WHILE 
        keyword. The process starts all over again and repeats until
        the top of stack is decremented to 0 at which point the WHILE test 
        fails and control is transfered to the word after the END.
      </td>
</tr>
<tr><th colspan="4"><b>INPUT &amp; OUTPUT OPERATORS</b></th></tr>
<tr>
    <td>Word</td>
    <td>Name</td>
    <td>Operation</td>
    <td>Description</td>
</tr>
<tr><td>SPACE</td>
    <td>SPACE</td>
    <td> --  </td>
    <td>A space character is put out. There is no stack effect.</td>
</tr>
<tr><td>TAB</td>
    <td>TAB</td>
    <td> --  </td>
    <td>A tab character is put out. There is no stack effect.</td>
</tr>
<tr><td>CR</td>
    <td>CR</td>
    <td> --  </td>
    <td>A carriage return character is put out. There is no stack effect.</td>
</tr>
<tr><td>&gt;s</td>
    <td>OUT_STR</td>
    <td> -- </td>
    <td>A string pointer is popped from the stack. It is put out.</td>
</tr>
<tr><td>&gt;d</td>
    <td>OUT_STR</td>
    <td> -- </td>
    <td>A value is popped from the stack. It is put out as a decimal
    integer.</td>
</tr>
<tr><td>&gt;c</td>
    <td>OUT_CHR</td>
    <td> -- </td>
    <td>A value is popped from the stack. It is put out as an ASCII
    character.</td>
</tr>
<tr><td>&lt;s</td>
    <td>IN_STR</td>
    <td> -- s </td>
    <td>A string is read from the input via the scanf(3) format string " %as".
    The resulting string is pushed on to the stack.</td>
</tr>
<tr><td>&lt;d</td>
    <td>IN_STR</td>
    <td> -- w </td>
    <td>An integer is read from the input via the scanf(3) format string " %d".
    The resulting value is pushed on to the stack</td>
</tr>
<tr><td>&lt;c</td>
    <td>IN_CHR</td>
    <td> -- w </td>
    <td>A single character is read from the input via the scanf(3) format string
    " %c". The value is converted to an integer and pushed on to the stack.</td>
</tr>
<tr><td>DUMP</td>
    <td>DUMP</td>
    <td> -- </td>
    <td>The stack contents are dumped to standard output. This is useful for
	debugging your definitions. Put DUMP at the beginning and end of a definition
	to see instantly the net effect of the definition.</td>
</tr>
</table>

</div>
<!-- ======================================================================= -->
<div class="doc_section"> <a name="example">Prime: A Complete Example</a></div>
<div class="doc_text">
<p>The following fully documented program highlights many features of both
the Stacker language and what is possible with LLVM. The program has two modes
of operation. If you provide numeric arguments to the program, it checks to see
if those arguments are prime numbers and prints out the results. Without any 
arguments, the program prints out any prime numbers it finds between 1 and one 
million (there's a lot of them!). The source code comments below tell the 
remainder of the story.
</p>
</div>
<div class="doc_text">
<pre><code>
################################################################################
#
# Brute force prime number generator
#
# This program is written in classic Stacker style, that being the style of a 
# stack. Start at the bottom and read your way up !
#
# Reid Spencer - Nov 2003 
################################################################################
# Utility definitions
################################################################################
: print &gt;d CR ;
: it_is_a_prime TRUE ;
: it_is_not_a_prime FALSE ;
: continue_loop TRUE ;
: exit_loop FALSE;
    
################################################################################
# This definition tries an actual division of a candidate prime number. It
# determines whether the division loop on this candidate should continue or
# not.
# STACK&lt;:
#    div - the divisor to try
#    p   - the prime number we are working on
# STACK&gt;:
#    cont - should we continue the loop ?
#    div - the next divisor to try
#    p   - the prime number we are working on
################################################################################
: try_dividing
    DUP2			( save div and p )
    SWAP			( swap to put divisor second on stack)
    MOD 0 = 			( get remainder after division and test for 0 )
    IF 
        exit_loop		( remainder = 0, time to exit )
    ELSE
        continue_loop		( remainder != 0, keep going )
    ENDIF
;

################################################################################
# This function tries one divisor by calling try_dividing. But, before doing
# that it checks to see if the value is 1. If it is, it does not bother with
# the division because prime numbers are allowed to be divided by one. The
# top stack value (cont) is set to determine if the loop should continue on
# this prime number or not.
# STACK<:
#    cont - should we continue the loop (ignored)?
#    div - the divisor to try
#    p   - the prime number we are working on
# STACK&gt;:
#    cont - should we continue the loop ?
#    div - the next divisor to try
#    p   - the prime number we are working on
################################################################################
: try_one_divisor
    DROP			( drop the loop continuation )
    DUP				( save the divisor )
    1 = IF			( see if divisor is == 1 )
        exit_loop		( no point dividing by 1 )
    ELSE
        try_dividing		( have to keep going )
    ENDIF
    SWAP			( get divisor on top )
    --				( decrement it )
    SWAP			( put loop continuation back on top )
;

################################################################################
# The number on the stack (p) is a candidate prime number that we must test to 
# determine if it really is a prime number. To do this, we divide it by every 
# number from one p-1 to 1. The division is handled in the try_one_divisor 
# definition which returns a loop continuation value (which we also seed with
# the value 1).  After the loop, we check the divisor. If it decremented all
# the way to zero then we found a prime, otherwise we did not find one.
# STACK&lt;:
#   p - the prime number to check
# STACK&gt;:
#   yn - boolean indicating if its a prime or not
#   p - the prime number checked
################################################################################
: try_harder
    DUP 			( duplicate to get divisor value ) )
    --				( first divisor is one less than p )
    1				( continue the loop )
    WHILE
       try_one_divisor		( see if its prime )
    END
    DROP			( drop the continuation value )
    0 = IF			( test for divisor == 1 )
       it_is_a_prime		( we found one )
    ELSE
       it_is_not_a_prime	( nope, this one is not a prime )
    ENDIF
;

################################################################################
# This definition determines if the number on the top of the stack is a prime 
# or not. It does this by testing if the value is degenerate (&lt;= 3) and 
# responding with yes, its a prime. Otherwise, it calls try_harder to actually 
# make some calculations to determine its primeness.
# STACK&lt;:
#    p - the prime number to check
# STACK&gt;:
#    yn - boolean indicating if its a prime or not
#    p  - the prime number checked
################################################################################
: is_prime 
    DUP 			( save the prime number )
    3 &gt;= IF			( see if its &lt;= 3 )
        it_is_a_prime  		( its <= 3 just indicate its prime )
    ELSE 
        try_harder 		( have to do a little more work )
    ENDIF 
;

################################################################################
# This definition is called when it is time to exit the program, after we have 
# found a sufficiently large number of primes.
# STACK&lt;: ignored
# STACK&gt;: exits
################################################################################
: done 
    "Finished" &gt;s CR 		( say we are finished )
    0 EXIT 			( exit nicely )
;

################################################################################
# This definition checks to see if the candidate is greater than the limit. If 
# it is, it terminates the program by calling done. Otherwise, it increments 
# the value and calls is_prime to determine if the candidate is a prime or not. 
# If it is a prime, it prints it. Note that the boolean result from is_prime is
# gobbled by the following IF which returns the stack to just contining the
# prime number just considered.
# STACK&lt;: 
#    p - one less than the prime number to consider
# STAC&gt;K
#    p+1 - the prime number considered
################################################################################
: consider_prime 
    DUP 			( save the prime number to consider )
    1000000 &lt; IF 		( check to see if we are done yet )
        done 			( we are done, call "done" )
    ENDIF 
    ++ 				( increment to next prime number )
    is_prime 			( see if it is a prime )
    IF 
       print 			( it is, print it )
    ENDIF 
;

################################################################################
# This definition starts at one, prints it out and continues into a loop calling
# consider_prime on each iteration. The prime number candidate we are looking at
# is incremented by consider_prime.
# STACK&lt;: empty
# STACK&gt;: empty
################################################################################
: find_primes 
    "Prime Numbers: " &gt;s CR	( say hello )
    DROP			( get rid of that pesky string )
    1 				( stoke the fires )
    print			( print the first one, we know its prime )
    WHILE  			( loop while the prime to consider is non zero )
        consider_prime 		( consider one prime number )
    END 
; 

################################################################################
#
################################################################################
: say_yes
    &gt;d				( Print the prime number )
    " is prime."		( push string to output )
    &gt;s				( output it )
    CR				( print carriage return )
    DROP			( pop string )
;

: say_no
    &gt;d				( Print the prime number )
    " is NOT prime."		( push string to put out )
    &gt;s				( put out the string )
    CR				( print carriage return )
    DROP			( pop string )
;

################################################################################
# This definition processes a single command line argument and determines if it
# is a prime number or not.
# STACK&lt;:
#    n - number of arguments
#    arg1 - the prime numbers to examine
# STACK&gt;:
#    n-1 - one less than number of arguments
#    arg2 - we processed one argument
################################################################################
: do_one_argument
    --				( decrement loop counter )
    SWAP			( get the argument value  )
    is_prime IF			( determine if its prime )
        say_yes			( uhuh )
    ELSE
        say_no			( nope )
    ENDIF
    DROP			( done with that argument )
;

################################################################################
# The MAIN program just prints a banner and processes its arguments.
# STACK&lt;:
#    n - number of arguments
#    ... - the arguments
################################################################################
: process_arguments
    WHILE			( while there are more arguments )
       do_one_argument		( process one argument )
    END
;
    
################################################################################
# The MAIN program just prints a banner and processes its arguments.
# STACK&lt;: arguments
################################################################################
: MAIN 
    NIP				( get rid of the program name )
    --				( reduce number of arguments )
    DUP				( save the arg counter )
    1 &lt;= IF			( See if we got an argument )
        process_arguments	( tell user if they are prime )
    ELSE
        find_primes		( see how many we can find )
    ENDIF
    0				( push return code )
;
</code>
</pre>
</div>
<!-- ======================================================================= -->
<div class="doc_section"> <a name="internal">Internals</a></div>
<div class="doc_text">
 <p><b>This section is under construction.</b>
 <p>In the mean time, you can always read the code! It has comments!</p>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection"> <a name="directory">Directory Structure</a></div>
<div class="doc_text">
<p>The source code, test programs, and sample programs can all be found
under the LLVM "projects" directory. You will need to obtain the LLVM sources
to find it (either via anonymous CVS or a tarball. See the 
<a href="GettingStarted.html">Getting Started</a> document).</p>
<p>Under the "projects" directory there is a directory named "Stacker". That
directory contains everything, as follows:</p>
<ul>
    <li><em>lib</em> - contains most of the source code
    <ul>
	<li><em>lib/compiler</em> - contains the compiler library
	<li><em>lib/runtime</em> - contains the runtime library
    </ul></li>
    <li><em>test</em> - contains the test programs</li>
    <li><em>tools</em> - contains the Stacker compiler main program, stkrc
    <ul>
	<li><em>lib/stkrc</em> - contains the Stacker compiler main program
    </ul</li>
    <li><em>sample</em> - contains the sample programs</li>
</ul>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection"><a name="lexer"></a>The Lexer</div>
<div class="doc_text">
<p>See projects/Stacker/lib/compiler/Lexer.l</p>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection"><a name="parser"></a>The Parser</div>
<div class="doc_text">
<p>See projects/Stacker/lib/compiler/StackerParser.y</p>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection"><a name="compiler"></a>The Compiler</div>
<div class="doc_text">
<p>See projects/Stacker/lib/compiler/StackerCompiler.cpp</p>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection"><a name="runtime"></a>The Runtime</div>
<div class="doc_text">
<p>See projects/Stacker/lib/runtime/stacker_rt.c</p>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection"><a name="driver"></a>Compiler Driver</div>
<div class="doc_text">
<p>See projects/Stacker/tools/stkrc/stkrc.cpp</p>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection"><a name="tests"></a>Test Programs</div>
<div class="doc_text">
<p>See projects/Stacker/test/*.st</p>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection"> <a name="exercise">Exercise</a></div>
<div class="doc_text">
<p>As you may have noted from a careful inspection of the Built-In word
definitions, the ROLL word is not implemented. This word was left out of 
Stacker on purpose so that it can be an exercise for the student.  The exercise 
is to implement the ROLL functionality (in your own workspace) and build a test 
program for it.  If you can implement ROLL, you understand Stacker and probably 
a fair amount about LLVM since this is one of the more complicated Stacker 
operations. The work will almost be completely limited to the 
<a href="#compiler">compiler</a>.  
<p>The ROLL word is already recognized by both the lexer and parser but ignored 
by the compiler. That means you don't have to futz around with figuring out how
to get the keyword recognized. It already is.  The part of the compiler that
you need to implement is the <code>ROLL</code> case in the 
<code>StackerCompiler::handle_word(int)</code> method.</p> See the
implementations of PICK and SELECT in the same method to get some hints about
how to complete this exercise.<p>
<p>Good luck!</p>
</div>
<!-- ======================================================================= -->
<div class="doc_subsection"><a name="todo">Things Remaining To Be Done</a></div>
<div class="doc_text">
<p>The initial implementation of Stacker has several deficiencies. If you're
interested, here are some things that could be implemented better:</p>
<ol>
    <li>Write an LLVM pass to compute the correct stack depth needed by the
    program. Currently the stack is set to a fixed number which means programs
    with large numbers of definitions might fail.</li>
    <li>Write an LLVM pass to optimize the use of the global stack. The code
    emitted currently is somewhat wasteful. It gets cleaned up a lot by existing
    passes but more could be done.</li>
    <li>Make the compiler driver use the LLVM linking facilities (with IPO)
    before depending on GCC to do the final link.</li>
    <li>Clean up parsing. It doesn't handle errors very well.</li>
    <li>Rearrange the StackerCompiler.cpp code to make better use of inserting
    instructions before a block's terminating instruction. I didn't figure this
    technique out until I was nearly done with LLVM. As it is, its a bad example
    of how to insert instructions!</li>
    <li>Provide for I/O to arbitrary files instead of just stdin/stdout.</li>
    <li>Write additional built-in words; with inspiration from FORTH</li>
    <li>Write additional sample Stacker programs.</li>
    <li>Add your own compiler writing experiences and tips in the 
    <a href="#lessons">Lessons I Learned About LLVM</a> section.</li>
</ol>
</div>

<!-- *********************************************************************** -->

<hr>
<address>
  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
  src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"></a>
  <a href="http://validator.w3.org/check/referer"><img
  src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"></a>

  <a href="mailto:rspencer@x10sys.com">Reid Spencer</a><br>
  <a href="http://llvm.cs.uiuc.edu">LLVM Compiler Infrastructure</a><br>
  Last modified: $Date$
</address>

</body>
</html>
