Correct the description of srem. remainder follows the dividend not the
[oota-llvm.git] / docs / LangRef.html
index e9daca07e569a29e1c1bc7914345b2187b515dd9..c2e1c6c4cd94d18e9ca6fc39ddf6200ac5692b3c 100644 (file)
@@ -26,6 +26,7 @@
       <li><a href="#functionstructure">Functions</a></li>
       <li><a href="#paramattrs">Parameter Attributes</a></li>
       <li><a href="#moduleasm">Module-Level Inline Assembly</a></li>
+      <li><a href="#datalayout">Data Layout</a></li>
     </ol>
   </li>
   <li><a href="#typesystem">Type System</a>
@@ -42,7 +43,7 @@
           <li><a href="#t_pointer">Pointer Type</a></li>
           <li><a href="#t_struct">Structure Type</a></li>
           <li><a href="#t_pstruct">Packed Structure Type</a></li>
-          <li><a href="#t_packed">Packed Type</a></li>
+          <li><a href="#t_vector">Vector Type</a></li>
           <li><a href="#t_opaque">Opaque Type</a></li>
         </ol>
       </li>
       </li>
       <li><a href="#bitwiseops">Bitwise Binary Operations</a>
         <ol>
-          <li><a href="#i_and">'<tt>and</tt>' Instruction</a></li>
-          <li><a href="#i_or">'<tt>or</tt>'  Instruction</a></li>
-          <li><a href="#i_xor">'<tt>xor</tt>' Instruction</a></li>
           <li><a href="#i_shl">'<tt>shl</tt>' Instruction</a></li>
           <li><a href="#i_lshr">'<tt>lshr</tt>' Instruction</a></li>
           <li><a href="#i_ashr">'<tt>ashr</tt>' Instruction</a></li>
+          <li><a href="#i_and">'<tt>and</tt>' Instruction</a></li>
+          <li><a href="#i_or">'<tt>or</tt>'  Instruction</a></li>
+          <li><a href="#i_xor">'<tt>xor</tt>' Instruction</a></li>
         </ol>
       </li>
       <li><a href="#vectorops">Vector Operations</a>
         </ol>
       </li>
       <li><a href="#int_debugger">Debugger intrinsics</a></li>
+      <li><a href="#int_eh">Exception Handling intrinsics</a></li>
     </ol>
   </li>
 </ol>
@@ -275,7 +277,7 @@ purposes:</p>
   For example, %foo, %DivisionByZero, %a.really.long.identifier.  The actual
   regular expression used is '<tt>%[a-zA-Z$._][a-zA-Z$._0-9]*</tt>'.
   Identifiers which require other characters in their names can be surrounded
-  with quotes.  In this way, anything except a <tt>"</tt> character can be used
+  with quotes.  In this way, anything except a <tt>&quot;</tt> character can be used
   in a name.</li>
 
   <li>Unnamed values are represented as an unsigned numeric value with a '%'
@@ -424,23 +426,26 @@ All Global Variables and Functions have one of the following types of linkage:
   an internal global value may cause the internal to be renamed as necessary to
   avoid collisions.  Because the symbol is internal to the module, all
   references can be updated.  This corresponds to the notion of the
-  '<tt>static</tt>' keyword in C, or the idea of "anonymous namespaces" in C++.
+  '<tt>static</tt>' keyword in C.
   </dd>
 
   <dt><tt><b><a name="linkage_linkonce">linkonce</a></b></tt>: </dt>
 
-  <dd>"<tt>linkonce</tt>" linkage is similar to <tt>internal</tt> linkage, with
-  the twist that linking together two modules defining the same
-  <tt>linkonce</tt> globals will cause one of the globals to be discarded.  This
-  is typically used to implement inline functions.  Unreferenced
-  <tt>linkonce</tt> globals are allowed to be discarded.
+  <dd>Globals with "<tt>linkonce</tt>" linkage are merged with other globals of
+  the same name when linkage occurs.  This is typically used to implement 
+  inline functions, templates, or other code which must be generated in each 
+  translation unit that uses it.  Unreferenced <tt>linkonce</tt> globals are 
+  allowed to be discarded.
   </dd>
 
   <dt><tt><b><a name="linkage_weak">weak</a></b></tt>: </dt>
 
   <dd>"<tt>weak</tt>" linkage is exactly the same as <tt>linkonce</tt> linkage,
   except that unreferenced <tt>weak</tt> globals may not be discarded.  This is
-  used to implement constructs in C such as "<tt>i32 X;</tt>" at global scope.
+  used for globals that may be emitted in multiple translation units, but that
+  are not guaranteed to be emitted into every translation unit that uses them.
+  One example of this are common globals in C, such as "<tt>int X;</tt>" at 
+  global scope.
   </dd>
 
   <dt><tt><b><a name="linkage_appending">appending</a></b></tt>: </dt>
@@ -452,6 +457,13 @@ All Global Variables and Functions have one of the following types of linkage:
   "sections" with identical names when .o files are linked.
   </dd>
 
+  <dt><tt><b><a name="linkage_externweak">extern_weak</a></b></tt>: </dt>
+  <dd>The semantics of this linkage follow the ELF model: the symbol is weak
+    until linked, if not linked, the symbol becomes null instead of being an
+    undefined reference.
+  </dd>
+</dl>
+
   <dt><tt><b><a name="linkage_external">externally visible</a></b></tt>:</dt>
 
   <dd>If none of the above identifiers are used, the global is externally
@@ -459,17 +471,13 @@ All Global Variables and Functions have one of the following types of linkage:
   external symbol references.
   </dd>
 
-  <dt><tt><b><a name="linkage_externweak">extern_weak</a></b></tt>: </dt>
-
-  <dd>"<tt>extern_weak</tt>" TBD
-  </dd>
-
   <p>
   The next two types of linkage are targeted for Microsoft Windows platform
   only. They are designed to support importing (exporting) symbols from (to)
   DLLs.
   </p>
 
+  <dl>
   <dt><tt><b><a name="linkage_dllimport">dllimport</a></b></tt>: </dt>
 
   <dd>"<tt>dllimport</tt>" linkage causes the compiler to reference a function
@@ -489,7 +497,7 @@ All Global Variables and Functions have one of the following types of linkage:
 
 </dl>
 
-<p><a name="linkage_external">For example, since the "<tt>.LC0</tt>"
+<p><a name="linkage_external"></a>For example, since the "<tt>.LC0</tt>"
 variable is defined to be internal, if another module defined a "<tt>.LC0</tt>"
 variable and was linked with this one, one of the two would be renamed,
 preventing a collision.  Since "<tt>main</tt>" and "<tt>puts</tt>" are
@@ -497,7 +505,7 @@ external (i.e., lacking any linkage declarations), they are accessible
 outside of the current module.</p>
 <p>It is illegal for a function <i>declaration</i>
 to have any linkage type other than "externally visible", <tt>dllimport</tt>,
-or <tt>extern_weak</tt>.</a></p>
+or <tt>extern_weak</tt>.</p>
 
 </div>
 
@@ -524,19 +532,6 @@ the future:</p>
   prototype and implemented declaration of the function (as does normal C). 
   </dd>
 
-  <dt><b>"<tt>csretcc</tt>" - The C struct return calling convention</b>:</dt>
-
-  <dd>This calling convention matches the target C calling conventions, except
-  that functions with this convention are required to take a pointer as their
-  first argument, and the return type of the function must be void.  This is
-  used for C functions that return aggregates by-value.  In this case, the
-  function has been transformed to take a pointer to the struct as the first
-  argument to the function.  For targets where the ABI specifies specific
-  behavior for structure-return calls, the calling convention can be used to
-  distinguish between struct return functions and other functions that take a
-  pointer to a struct as the first argument.
-  </dd>
-
   <dt><b>"<tt>fastcc</tt>" - The fast calling convention</b>:</dt>
 
   <dd>This calling convention attempts to make calls as fast as possible
@@ -572,6 +567,40 @@ convention.</p>
 
 </div>
 
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="visibility">Visibility Styles</a>
+</div>
+
+<div class="doc_text">
+
+<p>
+All Global Variables and Functions have one of the following visibility styles:
+</p>
+
+<dl>
+  <dt><b>"<tt>default</tt>" - Default style</b>:</dt>
+
+  <dd>On ELF, default visibility means that the declaration is visible to other
+    modules and, in shared libraries, means that the declared entity may be
+    overridden. On Darwin, default visibility means that the declaration is
+    visible to other modules. Default visibility corresponds to "external
+    linkage" in the language.
+  </dd>
+
+  <dt><b>"<tt>hidden</tt>" - Hidden style</b>:</dt>
+
+  <dd>Two declarations of an object with hidden visibility refer to the same
+    object if they are in the same shared object. Usually, hidden visibility
+    indicates that the symbol will not be placed into the dynamic symbol table,
+    so no other module (executable or shared library) can reference it
+    directly.
+  </dd>
+
+</dl>
+
+</div>
+
 <!-- ======================================================================= -->
 <div class="doc_subsection">
   <a name="globalvars">Global Variables</a>
@@ -613,6 +642,13 @@ to whatever it feels convenient.  If an explicit alignment is specified, the
 global is forced to have at least that much alignment.  All alignments must be
 a power of 2.</p>
 
+<p>For example, the following defines a global with an initializer, section,
+   and alignment:</p>
+
+<pre>
+  %G = constant float 1.0, section "foo", align 4
+</pre>
+
 </div>
 
 
@@ -625,14 +661,18 @@ a power of 2.</p>
 
 <p>LLVM function definitions consist of the "<tt>define</tt>" keyord, 
 an optional <a href="#linkage">linkage type</a>, an optional 
+<a href="#visibility">visibility style</a>, an optional 
 <a href="#callingconv">calling convention</a>, a return type, an optional
 <a href="#paramattrs">parameter attribute</a> for the return type, a function 
 name, a (possibly empty) argument list (each with optional 
-<a href="#paramattrs">parameter attributes</a>), an optional section, an 
-optional alignment, an opening curly brace, a list of basic blocks, and a 
-closing curly brace.  LLVM function declarations
-consist of the "<tt>declare</tt>" keyword, an optional <a
-  href="#callingconv">calling convention</a>, a return type, an optional
+<a href="#paramattrs">parameter attributes</a>), an optional section, an
+optional alignment, an opening curly brace, a list of basic blocks, and a
+closing curly brace.  
+
+LLVM function declarations consist of the "<tt>declare</tt>" keyword, an
+optional <a href="#linkage">linkage type</a>, an optional
+<a href="#visibility">visibility style</a>, an optional 
+<a href="#callingconv">calling convention</a>, a return type, an optional
 <a href="#paramattrs">parameter attribute</a> for the return type, a function 
 name, a possibly empty list of arguments, and an optional alignment.</p>
 
@@ -674,30 +714,41 @@ a power of 2.</p>
   type so two functions types that differ only by the parameter attributes 
   are different function types.</p>
 
-  <p>Parameter attributes consist of an at sign (@) followed by either a single
-  keyword or a comma separate list of keywords enclosed in parentheses. For
-  example:<pre>
-    %someFunc = i16 @zext (i8 @(sext) %someParam)
-    %someFunc = i16 @zext (i8 @zext %someParam)</pre>
-  Note that the two function types above are unique because the parameter
-  has a different attribute (@sext in the first one, @zext in the second).</p>
-
-  <p>Currently, only the following parameter attributes are defined:
+  <p>Parameter attributes are simple keywords that follow the type specified. If
+  multiple parameter attributes are needed, they are space separated. For 
+  example:</p><pre>
+    %someFunc = i16 (i8 sext %someParam) zext
+    %someFunc = i16 (i8 zext %someParam) zext</pre>
+  <p>Note that the two function types above are unique because the parameter has
+  a different attribute (sext in the first one, zext in the second). Also note
+  that the attribute for the function result (zext) comes immediately after the
+  argument list.</p>
+
+  <p>Currently, only the following parameter attributes are defined:</p>
   <dl>
-    <dt><tt>@zext</tt></dt>
+    <dt><tt>zext</tt></dt>
     <dd>This indicates that the parameter should be zero extended just before
     a call to this function.</dd>
-    <dt><tt>@sext</tt></dt>
+    <dt><tt>sext</tt></dt>
     <dd>This indicates that the parameter should be sign extended just before
     a call to this function.</dd>
-  </dl></p>
+    <dt><tt>inreg</tt></dt>
+    <dd>This indicates that the parameter should be placed in register (if
+    possible) during assembling function call. Support for this attribute is
+    target-specific</dd>
+    <dt><tt>sret</tt></dt>
+    <dd>This indicates that the parameter specifies the address of a structure
+    that is the return value of the function in the source program.</dd>
+    <dt><tt>noreturn</tt></dt>
+    <dd>This function attribute indicates that the function never returns. This
+    indicates to LLVM that every call to this function should be treated as if
+    an <tt>unreachable</tt> instruction immediately followed the call.</dd> 
+    <dt><tt>nounwind</tt></dt>
+    <dd>This function attribute indicates that the function type does not use
+    the unwind instruction and does not allow stack unwinding to propagate
+    through it.</dd>
+  </dl>
 
-  <p>The current motivation for parameter attributes is to enable the sign and
-  zero extend information necessary for the C calling convention to be passed
-  from the front end to LLVM. The <tt>@zext</tt> and <tt>@sext</tt> attributes
-  are used by the code generator to perform the required extension. However, 
-  parameter attributes are an orthogonal feature to calling conventions and
-  may be used for other purposes in the future.</p>
 </div>
 
 <!-- ======================================================================= -->
@@ -729,6 +780,82 @@ desired.  The syntax is very simple:
 </p>
 </div>
 
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="datalayout">Data Layout</a>
+</div>
+
+<div class="doc_text">
+<p>A module may specify a target specific data layout string that specifies how
+data is to be laid out in memory. The syntax for the data layout is simply:<br/>
+<pre>    target datalayout = "<i>layout specification</i>"
+</pre>
+The <i>layout specification</i> consists of a list of specifications separated
+by the minus sign character ('-').  Each specification starts with a letter 
+and may include other information after the letter to define some aspect of the
+data layout.  The specifications accepted are as follows: </p>
+<dl>
+  <dt><tt>E</tt></dt>
+  <dd>Specifies that the target lays out data in big-endian form. That is, the
+  bits with the most significance have the lowest address location.</dd>
+  <dt><tt>e</tt></dt>
+  <dd>Specifies that hte target lays out data in little-endian form. That is,
+  the bits with the least significance have the lowest address location.</dd>
+  <dt><tt>p:<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
+  <dd>This specifies the <i>size</i> of a pointer and its <i>abi</i> and 
+  <i>preferred</i> alignments. All sizes are in bits. Specifying the <i>pref</i>
+  alignment is optional. If omitted, the preceding <tt>:</tt> should be omitted
+  too.</dd>
+  <dt><tt>i<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
+  <dd>This specifies the alignment for an integer type of a given bit
+  <i>size</i>. The value of <i>size</i> must be in the range [1,2^23).</dd>
+  <dt><tt>v<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
+  <dd>This specifies the alignment for a vector type of a given bit 
+  <i>size</i>.</dd>
+  <dt><tt>f<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
+  <dd>This specifies the alignment for a floating point type of a given bit 
+  <i>size</i>. The value of <i>size</i> must be either 32 (float) or 64
+  (double).</dd>
+  <dt><tt>a<i>size</i>:<i>abi</i>:<i>pref</i></tt></dt>
+  <dd>This specifies the alignment for an aggregate type of a given bit
+  <i>size</i>.</dd>
+</dl>
+<p>When constructing the data layout for a given target, LLVM starts with a
+default set of specifications which are then (possibly) overriden by the
+specifications in the <tt>datalayout</tt> keyword. The default specifications
+are given in this list:</p>
+<ul>
+  <li><tt>E</tt> - big endian</li>
+  <li><tt>p:32:64:64</tt> - 32-bit pointers with 64-bit alignment</li>
+  <li><tt>i1:8:8</tt> - i1 is 8-bit (byte) aligned</li>
+  <li><tt>i8:8:8</tt> - i8 is 8-bit (byte) aligned</li>
+  <li><tt>i16:16:16</tt> - i16 is 16-bit aligned</li>
+  <li><tt>i32:32:32</tt> - i32 is 32-bit aligned</li>
+  <li><tt>i64:32:64</tt> - i64 has abi alignment of 32-bits but preferred
+  alignment of 64-bits</li>
+  <li><tt>f32:32:32</tt> - float is 32-bit aligned</li>
+  <li><tt>f64:64:64</tt> - double is 64-bit aligned</li>
+  <li><tt>v64:64:64</tt> - 64-bit vector is 64-bit aligned</li>
+  <li><tt>v128:128:128</tt> - 128-bit vector is 128-bit aligned</li>
+  <li><tt>a0:0:1</tt> - aggregates are 8-bit aligned</li>
+</ul>
+<p>When llvm is determining the alignment for a given type, it uses the 
+following rules:
+<ol>
+  <li>If the type sought is an exact match for one of the specifications, that
+  specification is used.</li>
+  <li>If no match is found, and the type sought is an integer type, then the
+  smallest integer type that is larger than the bitwidth of the sought type is
+  used. If none of the specifications are larger than the bitwidth then the the
+  largest integer type is used. For example, given the default specifications
+  above, the i7 type will use the alignment of i8 (next largest) while both
+  i65 and i256 will use the alignment of i64 (largest specified).</li>
+  <li>If no match is found, and the type sought is a vector type, then the
+  largest vector type that is smaller than the sought vector type will be used
+  as a fall back.  This happens because <128 x double> can be implemented in 
+  terms of 64 <2 x double>, for example.</li>
+</ol>
+</div>
 
 <!-- *********************************************************************** -->
 <div class="doc_section"> <a name="typesystem">Type System</a> </div>
@@ -759,8 +886,8 @@ system. The current set of primitive types is as follows:</p>
         <tbody>
         <tr><th>Type</th><th>Description</th></tr>
         <tr><td><tt>void</tt></td><td>No value</td></tr>
-        <tr><td><tt>i8</tt></td><td>Signless 8-bit value</td></tr>
-        <tr><td><tt>i32</tt></td><td>Signless 32-bit value</td></tr>
+        <tr><td><tt>i8</tt></td><td>8-bit value</td></tr>
+        <tr><td><tt>i32</tt></td><td>32-bit value</td></tr>
         <tr><td><tt>float</tt></td><td>32-bit floating point value</td></tr>
         <tr><td><tt>label</tt></td><td>Branch destination</td></tr>
         </tbody>
@@ -771,8 +898,8 @@ system. The current set of primitive types is as follows:</p>
         <tbody>
           <tr><th>Type</th><th>Description</th></tr>
           <tr><td><tt>i1</tt></td><td>True or False value</td></tr>
-          <tr><td><tt>i16</tt></td><td>Signless 16-bit value</td></tr>
-          <tr><td><tt>i64</tt></td><td>Signless 64-bit value</td></tr>
+          <tr><td><tt>i16</tt></td><td>16-bit value</td></tr>
+          <tr><td><tt>i64</tt></td><td>64-bit value</td></tr>
          <tr><td><tt>double</tt></td><td>64-bit floating point value</td></tr>
         </tbody>
       </table>
@@ -793,12 +920,7 @@ classifications:</p>
     <tr><th>Classification</th><th>Types</th></tr>
     <tr>
       <td><a name="t_integer">integer</a></td>
-      <td><tt>i8, i16, i32, i64</tt></td>
-    </tr>
-    <tr>
-      <td><a name="t_integral">integral</a></td>
-      <td><tt>i1, i8, i16, i32, i64</tt>
-      </td>
+      <td><tt>i1, i8, i16, i32, i64</tt></td>
     </tr>
     <tr>
       <td><a name="t_floating">floating point</a></td>
@@ -807,7 +929,7 @@ classifications:</p>
     <tr>
       <td><a name="t_firstclass">first class</a></td>
       <td><tt>i1, i8, i16, i32, i64, float, double, <br/>
-          <a href="#t_pointer">pointer</a>,<a href="#t_packed">packed</a></tt>
+          <a href="#t_pointer">pointer</a>,<a href="#t_vector">vector</a></tt>
       </td>
     </tr>
   </tbody>
@@ -918,7 +1040,7 @@ Variable argument functions can access their arguments with the <a
     <td class="left">function taking an <tt>i32</tt>, returning an <tt>i32</tt>
     </td>
   </tr><tr class="layout">
-    <td class="left"><tt>float&nbsp;(i16&nbsp;@sext,&nbsp;i32&nbsp;*)&nbsp;*
+    <td class="left"><tt>float&nbsp;(i16&nbsp;sext,&nbsp;i32&nbsp;*)&nbsp;*
     </tt></td>
     <td class="left"><a href="#t_pointer">Pointer</a> to a function that takes 
       an <tt>i16</tt> that should be sign extended and a 
@@ -1026,17 +1148,17 @@ reference to another object, which must live in memory.</p>
 </div>
 
 <!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="t_packed">Packed Type</a> </div>
+<div class="doc_subsubsection"> <a name="t_vector">Vector Type</a> </div>
 <div class="doc_text">
 
 <h5>Overview:</h5>
 
-<p>A packed type is a simple derived type that represents a vector
-of elements.  Packed types are used when multiple primitive data 
+<p>A vector type is a simple derived type that represents a vector
+of elements.  Vector types are used when multiple primitive data 
 are operated in parallel using a single instruction (SIMD). 
-A packed type requires a size (number of
+A vector type requires a size (number of
 elements) and an underlying primitive data type.  Vectors must have a power
-of two length (1, 2, 4, 8, 16 ...).  Packed types are
+of two length (1, 2, 4, 8, 16 ...).  Vector types are
 considered <a href="#t_firstclass">first class</a>.</p>
 
 <h5>Syntax:</h5>
@@ -1046,7 +1168,7 @@ considered <a href="#t_firstclass">first class</a>.</p>
 </pre>
 
 <p>The number of elements is a constant integer value; elementtype may
-be any integral or floating point type.</p>
+be any integer or floating point type.</p>
 
 <h5>Examples:</h5>
 
@@ -1058,9 +1180,9 @@ be any integral or floating point type.</p>
       <tt>&lt;2 x i64&gt;</tt><br/>
     </td>
     <td class="left">
-      Packed vector of 4 32-bit integer values.<br/>
-      Packed vector of 8 floating-point values.<br/>
-      Packed vector of 2 64-bit integer values.<br/>
+      Vector of 4 32-bit integer values.<br/>
+      Vector of 8 floating-point values.<br/>
+      Vector of 2 64-bit integer values.<br/>
     </td>
   </tr>
 </table>
@@ -1182,13 +1304,13 @@ and smaller aggregate constants.</p>
   types of elements must match those specified by the type.
   </dd>
 
-  <dt><b>Packed constants</b></dt>
+  <dt><b>Vector constants</b></dt>
 
-  <dd>Packed constants are represented with notation similar to packed type
+  <dd>Vector constants are represented with notation similar to vector type
   definitions (a comma separated list of elements, surrounded by
   less-than/greater-than's (<tt>&lt;&gt;</tt>)).  For example: "<tt>&lt; i32 42,
-  i32 11, i32 74, i32 100 &gt;</tt>".  Packed constants must have <a
-  href="#t_packed">packed type</a>, and the number and types of elements must
+  i32 11, i32 74, i32 100 &gt;</tt>".  VEctor constants must have <a
+  href="#t_vector">vector type</a>, and the number and types of elements must
   match those specified by the type.
   </dd>
 
@@ -1253,15 +1375,15 @@ following is the syntax for constant expressions:</p>
 <dl>
   <dt><b><tt>trunc ( CST to TYPE )</tt></b></dt>
   <dd>Truncate a constant to another type. The bit size of CST must be larger 
-  than the bit size of TYPE. Both types must be integral.</dd>
+  than the bit size of TYPE. Both types must be integers.</dd>
 
   <dt><b><tt>zext ( CST to TYPE )</tt></b></dt>
   <dd>Zero extend a constant to another type. The bit size of CST must be 
-  smaller or equal to the bit size of TYPE.  Both types must be integral.</dd>
+  smaller or equal to the bit size of TYPE.  Both types must be integers.</dd>
 
   <dt><b><tt>sext ( CST to TYPE )</tt></b></dt>
   <dd>Sign extend a constant to another type. The bit size of CST must be 
-  smaller or equal to the bit size of TYPE.  Both types must be integral.</dd>
+  smaller or equal to the bit size of TYPE.  Both types must be integers.</dd>
 
   <dt><b><tt>fptrunc ( CST to TYPE )</tt></b></dt>
   <dd>Truncate a floating point constant to another floating point type. The 
@@ -1308,7 +1430,7 @@ following is the syntax for constant expressions:</p>
   identical (same number of bits). The conversion is done as if the CST value
   was stored to memory and read back as TYPE. In other words, no bits change 
   with this operator, just the type.  This can be used for conversion of
-  packed types to any other type, as long as they have the same bit width. For
+  vector types to any other type, as long as they have the same bit width. For
   pointers it is only valid to cast to another pointer type.
   </dd>
 
@@ -1490,8 +1612,8 @@ and an unconditional branch.</p>
 <h5>Arguments:</h5>
 <p>The conditional branch form of the '<tt>br</tt>' instruction takes a
 single '<tt>i1</tt>' value and two '<tt>label</tt>' values.  The
-unconditional form of the '<tt>br</tt>' instruction takes a single '<tt>label</tt>'
-value as a target.</p>
+unconditional form of the '<tt>br</tt>' instruction takes a single 
+'<tt>label</tt>' value as a target.</p>
 <h5>Semantics:</h5>
 <p>Upon execution of a conditional '<tt>br</tt>' instruction, the '<tt>i1</tt>'
 argument is evaluated.  If the value is <tt>true</tt>, control flows
@@ -1700,7 +1822,7 @@ no-return function cannot be reached, and other facts.</p>
 <p>Binary operators are used to do most of the computation in a
 program.  They require two operands, execute an operation on them, and
 produce a single value.  The operands might represent 
-multiple data, as is the case with the <a href="#t_packed">packed</a> data type. 
+multiple data, as is the case with the <a href="#t_vector">vector</a> data type. 
 The result value of a binary operator is not
 necessarily the same type as its operands.</p>
 <p>There are several different binary operators:</p>
@@ -1717,7 +1839,7 @@ Instruction</a> </div>
 <h5>Arguments:</h5>
 <p>The two arguments to the '<tt>add</tt>' instruction must be either <a
  href="#t_integer">integer</a> or <a href="#t_floating">floating point</a> values.
- This instruction can also take <a href="#t_packed">packed</a> versions of the values.
+ This instruction can also take <a href="#t_vector">vector</a> versions of the values.
 Both arguments must have identical types.</p>
 <h5>Semantics:</h5>
 <p>The value produced is the integer or floating point sum of the two
@@ -1742,7 +1864,7 @@ instruction present in most other intermediate representations.</p>
 <p>The two arguments to the '<tt>sub</tt>' instruction must be either <a
  href="#t_integer">integer</a> or <a href="#t_floating">floating point</a>
 values. 
-This instruction can also take <a href="#t_packed">packed</a> versions of the values.
+This instruction can also take <a href="#t_vector">vector</a> versions of the values.
 Both arguments must have identical types.</p>
 <h5>Semantics:</h5>
 <p>The value produced is the integer or floating point difference of
@@ -1766,7 +1888,7 @@ operands.</p>
 <p>The two arguments to the '<tt>mul</tt>' instruction must be either <a
  href="#t_integer">integer</a> or <a href="#t_floating">floating point</a>
 values. 
-This instruction can also take <a href="#t_packed">packed</a> versions of the values.
+This instruction can also take <a href="#t_vector">vector</a> versions of the values.
 Both arguments must have identical types.</p>
 <h5>Semantics:</h5>
 <p>The value produced is the integer or floating point product of the
@@ -1791,7 +1913,7 @@ operands.</p>
 <h5>Arguments:</h5>
 <p>The two arguments to the '<tt>udiv</tt>' instruction must be 
 <a href="#t_integer">integer</a> values. Both arguments must have identical 
-types. This instruction can also take <a href="#t_packed">packed</a> versions 
+types. This instruction can also take <a href="#t_vector">vector</a> versions 
 of the values in which case the elements must be integers.</p>
 <h5>Semantics:</h5>
 <p>The value produced is the unsigned integer quotient of the two operands. This
@@ -1814,7 +1936,7 @@ operands.</p>
 <h5>Arguments:</h5>
 <p>The two arguments to the '<tt>sdiv</tt>' instruction must be
 <a href="#t_integer">integer</a> values.  Both arguments must have identical 
-types. This instruction can also take <a href="#t_packed">packed</a> versions 
+types. This instruction can also take <a href="#t_vector">vector</a> versions 
 of the values in which case the elements must be integers.</p>
 <h5>Semantics:</h5>
 <p>The value produced is the signed integer quotient of the two operands. This
@@ -1837,7 +1959,7 @@ operands.</p>
 <h5>Arguments:</h5>
 <p>The two arguments to the '<tt>div</tt>' instruction must be
 <a href="#t_floating">floating point</a> values.  Both arguments must have
-identical types.  This instruction can also take <a href="#t_packed">packed</a>
+identical types.  This instruction can also take <a href="#t_vector">vector</a>
 versions of the values in which case the elements must be floating point.</p>
 <h5>Semantics:</h5>
 <p>The value produced is the floating point quotient of the two operands.</p>
@@ -1884,11 +2006,13 @@ signed division of its two operands.</p>
 types.</p>
 <h5>Semantics:</h5>
 <p>This instruction returns the <i>remainder</i> of a division (where the result
-has the same sign as the divisor), not the <i>modulus</i> (where the
-result has the same sign as the dividend) of a value.  For more
-information about the difference, see <a
+has the same sign as the dividend, <tt>var1</tt>), not the <i>modulo</i> 
+operator (where the result has the same sign as the divisor, <tt>var2</tt>) of 
+a value.  For more information about the difference, see <a
  href="http://mathforum.org/dr.math/problems/anne.4.28.99.html">The
-Math Forum</a>.</p>
+Math Forum</a>. For a table of how this is implemented in various languages,
+please see <a href="http://mathforum.org/dr.math/problems/anne.4.28.99.html">
+Wikipedia: modulo operation</a>.</p>
 <h5>Example:</h5>
 <pre>  &lt;result&gt; = srem i32 4, %var          <i>; yields {i32}:result = 4 % %var</i>
 </pre>
@@ -1926,6 +2050,89 @@ instructions.  They require two operands, execute an operation on them,
 and produce a single value.  The resulting value of the bitwise binary
 operators is always the same type as its first operand.</p>
 </div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="i_shl">'<tt>shl</tt>'
+Instruction</a> </div>
+<div class="doc_text">
+<h5>Syntax:</h5>
+<pre>  &lt;result&gt; = shl &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {ty}:result</i>
+</pre>
+<h5>Overview:</h5>
+<p>The '<tt>shl</tt>' instruction returns the first operand shifted to
+the left a specified number of bits.</p>
+<h5>Arguments:</h5>
+<p>Both arguments to the '<tt>shl</tt>' instruction must be the same <a
+ href="#t_integer">integer</a> type.</p>
+<h5>Semantics:</h5>
+<p>The value produced is <tt>var1</tt> * 2<sup><tt>var2</tt></sup>.</p>
+<h5>Example:</h5><pre>
+  &lt;result&gt; = shl i32 4, %var   <i>; yields {i32}: 4 &lt;&lt; %var</i>
+  &lt;result&gt; = shl i32 4, 2      <i>; yields {i32}: 16</i>
+  &lt;result&gt; = shl i32 1, 10     <i>; yields {i32}: 1024</i>
+</pre>
+</div>
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="i_lshr">'<tt>lshr</tt>'
+Instruction</a> </div>
+<div class="doc_text">
+<h5>Syntax:</h5>
+<pre>  &lt;result&gt; = lshr &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {ty}:result</i>
+</pre>
+
+<h5>Overview:</h5>
+<p>The '<tt>lshr</tt>' instruction (logical shift right) returns the first 
+operand shifted to the right a specified number of bits.</p>
+
+<h5>Arguments:</h5>
+<p>Both arguments to the '<tt>lshr</tt>' instruction must be the same 
+<a href="#t_integer">integer</a> type.</p>
+
+<h5>Semantics:</h5>
+<p>This instruction always performs a logical shift right operation. The most
+significant bits of the result will be filled with zero bits after the 
+shift.</p>
+
+<h5>Example:</h5>
+<pre>
+  &lt;result&gt; = lshr i32 4, 1   <i>; yields {i32}:result = 2</i>
+  &lt;result&gt; = lshr i32 4, 2   <i>; yields {i32}:result = 1</i>
+  &lt;result&gt; = lshr i8  4, 3   <i>; yields {i8}:result = 0</i>
+  &lt;result&gt; = lshr i8 -2, 1   <i>; yields {i8}:result = 0x7FFFFFFF </i>
+</pre>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"> <a name="i_ashr">'<tt>ashr</tt>'
+Instruction</a> </div>
+<div class="doc_text">
+
+<h5>Syntax:</h5>
+<pre>  &lt;result&gt; = ashr &lt;ty&gt; &lt;var1&gt;, &lt;var2&gt;   <i>; yields {ty}:result</i>
+</pre>
+
+<h5>Overview:</h5>
+<p>The '<tt>ashr</tt>' instruction (arithmetic shift right) returns the first 
+operand shifted to the right a specified number of bits.</p>
+
+<h5>Arguments:</h5>
+<p>Both arguments to the '<tt>ashr</tt>' instruction must be the same 
+<a href="#t_integer">integer</a> type.</p>
+
+<h5>Semantics:</h5>
+<p>This instruction always performs an arithmetic shift right operation, 
+The most significant bits of the result will be filled with the sign bit 
+of <tt>var1</tt>.</p>
+
+<h5>Example:</h5>
+<pre>
+  &lt;result&gt; = ashr i32 4, 1   <i>; yields {i32}:result = 2</i>
+  &lt;result&gt; = ashr i32 4, 2   <i>; yields {i32}:result = 1</i>
+  &lt;result&gt; = ashr i8  4, 3   <i>; yields {i8}:result = 0</i>
+  &lt;result&gt; = ashr i8 -2, 1   <i>; yields {i8}:result = -1</i>
+</pre>
+</div>
+
 <!-- _______________________________________________________________________ -->
 <div class="doc_subsubsection"> <a name="i_and">'<tt>and</tt>'
 Instruction</a> </div>
@@ -1938,7 +2145,7 @@ Instruction</a> </div>
 its two operands.</p>
 <h5>Arguments:</h5>
 <p>The two arguments to the '<tt>and</tt>' instruction must be <a
- href="#t_integral">integral</a> values.  Both arguments must have
+ href="#t_integer">integer</a> values.  Both arguments must have
 identical types.</p>
 <h5>Semantics:</h5>
 <p>The truth table used for the '<tt>and</tt>' instruction is:</p>
@@ -1991,7 +2198,7 @@ identical types.</p>
 or of its two operands.</p>
 <h5>Arguments:</h5>
 <p>The two arguments to the '<tt>or</tt>' instruction must be <a
- href="#t_integral">integral</a> values.  Both arguments must have
+ href="#t_integer">integer</a> values.  Both arguments must have
 identical types.</p>
 <h5>Semantics:</h5>
 <p>The truth table used for the '<tt>or</tt>' instruction is:</p>
@@ -2046,7 +2253,7 @@ or of its two operands.  The <tt>xor</tt> is used to implement the
 "one's complement" operation, which is the "~" operator in C.</p>
 <h5>Arguments:</h5>
 <p>The two arguments to the '<tt>xor</tt>' instruction must be <a
- href="#t_integral">integral</a> values.  Both arguments must have
+ href="#t_integer">integer</a> values.  Both arguments must have
 identical types.</p>
 <h5>Semantics:</h5>
 <p>The truth table used for the '<tt>xor</tt>' instruction is:</p>
@@ -2090,89 +2297,6 @@ identical types.</p>
   &lt;result&gt; = xor i32 %V, -1          <i>; yields {i32}:result = ~%V</i>
 </pre>
 </div>
-<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="i_shl">'<tt>shl</tt>'
-Instruction</a> </div>
-<div class="doc_text">
-<h5>Syntax:</h5>
-<pre>  &lt;result&gt; = shl &lt;ty&gt; &lt;var1&gt;, i8 &lt;var2&gt;   <i>; yields {ty}:result</i>
-</pre>
-<h5>Overview:</h5>
-<p>The '<tt>shl</tt>' instruction returns the first operand shifted to
-the left a specified number of bits.</p>
-<h5>Arguments:</h5>
-<p>The first argument to the '<tt>shl</tt>' instruction must be an <a
- href="#t_integer">integer</a> type.  The second argument must be an '<tt>i8</tt>'
-type.</p>
-<h5>Semantics:</h5>
-<p>The value produced is <tt>var1</tt> * 2<sup><tt>var2</tt></sup>.</p>
-<h5>Example:</h5>
-<pre>  &lt;result&gt; = shl i32 4, i8 %var   <i>; yields {i32}:result = 4 &lt;&lt; %var</i>
-  &lt;result&gt; = shl i32 4, i8 2      <i>; yields {i32}:result = 16</i>
-  &lt;result&gt; = shl i32 1, i8 10     <i>; yields {i32}:result = 1024</i>
-</pre>
-</div>
-<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="i_lshr">'<tt>lshr</tt>'
-Instruction</a> </div>
-<div class="doc_text">
-<h5>Syntax:</h5>
-<pre>  &lt;result&gt; = lshr &lt;ty&gt; &lt;var1&gt;, i8 &lt;var2&gt;   <i>; yields {ty}:result</i>
-</pre>
-
-<h5>Overview:</h5>
-<p>The '<tt>lshr</tt>' instruction (logical shift right) returns the first 
-operand shifted to the right a specified number of bits.</p>
-
-<h5>Arguments:</h5>
-<p>The first argument to the '<tt>lshr</tt>' instruction must be an <a
- href="#t_integer">integer</a> type.  The second argument must be an '<tt>i8</tt>' type.</p>
-
-<h5>Semantics:</h5>
-<p>This instruction always performs a logical shift right operation. The 
-<tt>var2</tt> most significant bits will be filled with zero bits after the 
-shift.</p>
-
-<h5>Example:</h5>
-<pre>
-  &lt;result&gt; = lshr i32 4, i8 1   <i>; yields {i32}:result = 2</i>
-  &lt;result&gt; = lshr i32 4, i8 2    <i>; yields {i32}:result = 1</i>
-  &lt;result&gt; = lshr i8  4, i8 3  <i>; yields {i8 }:result = 0</i>
-  &lt;result&gt; = lshr i8  -2, i8 1 <i>; yields {i8 }:result = 0x7FFFFFFF </i>
-</pre>
-</div>
-
-<!-- ======================================================================= -->
-<div class="doc_subsubsection"> <a name="i_ashr">'<tt>ashr</tt>'
-Instruction</a> </div>
-<div class="doc_text">
-
-<h5>Syntax:</h5>
-<pre>  &lt;result&gt; = ashr &lt;ty&gt; &lt;var1&gt;, i8 &lt;var2&gt;   <i>; yields {ty}:result</i>
-</pre>
-
-<h5>Overview:</h5>
-<p>The '<tt>ashr</tt>' instruction (arithmetic shift right) returns the first 
-operand shifted to the right a specified number of bits.</p>
-
-<h5>Arguments:</h5>
-<p>The first argument to the '<tt>ashr</tt>' instruction must be an 
-<a href="#t_integer">integer</a> type.  The second argument must be an
-'<tt>i8</tt>' type.</p>
-
-<h5>Semantics:</h5>
-<p>This instruction always performs an arithmetic shift right operation, 
-regardless of whether the arguments are signed or not. The <tt>var2</tt> most
-significant bits will be filled with the sign bit of <tt>var1</tt>.</p>
-
-<h5>Example:</h5>
-<pre>
-  &lt;result&gt; = ashr i32 4, i8 1    <i>; yields {i32}:result = 2</i>
-  &lt;result&gt; = ashr i32 4, i8 2      <i>; yields {i32}:result = 1</i>
-  &lt;result&gt; = ashr i8 4, i8 3    <i>; yields {i8}:result = 0</i>
-  &lt;result&gt; = ashr i8  -2, i8 1   <i>; yields {i8 }:result = -1</i>
-</pre>
-</div>
 
 <!-- ======================================================================= -->
 <div class="doc_subsection"> 
@@ -2207,7 +2331,7 @@ target.</p>
 
 <p>
 The '<tt>extractelement</tt>' instruction extracts a single scalar
-element from a packed vector at a specified index.
+element from a vector at a specified index.
 </p>
 
 
@@ -2215,7 +2339,7 @@ element from a packed vector at a specified index.
 
 <p>
 The first operand of an '<tt>extractelement</tt>' instruction is a
-value of <a href="#t_packed">packed</a> type.  The second operand is
+value of <a href="#t_vector">vector</a> type.  The second operand is
 an index indicating the position from which to extract the element.
 The index may be a variable.</p>
 
@@ -2253,7 +2377,7 @@ results are undefined.
 
 <p>
 The '<tt>insertelement</tt>' instruction inserts a scalar
-element into a packed vector at a specified index.
+element into a vector at a specified index.
 </p>
 
 
@@ -2261,7 +2385,7 @@ element into a packed vector at a specified index.
 
 <p>
 The first operand of an '<tt>insertelement</tt>' instruction is a
-value of <a href="#t_packed">packed</a> type.  The second operand is a
+value of <a href="#t_vector">vector</a> type.  The second operand is a
 scalar value whose type must equal the element type of the first
 operand.  The third operand is an index indicating the position at
 which to insert the value.  The index may be a variable.</p>
@@ -2269,7 +2393,7 @@ which to insert the value.  The index may be a variable.</p>
 <h5>Semantics:</h5>
 
 <p>
-The result is a packed vector of the same type as <tt>val</tt>.  Its
+The result is a vector of the same type as <tt>val</tt>.  Its
 element values are those of <tt>val</tt> except at position
 <tt>idx</tt>, where it gets the value <tt>elt</tt>.  If <tt>idx</tt>
 exceeds the length of <tt>val</tt>, the results are undefined.
@@ -2685,7 +2809,7 @@ The '<tt>trunc</tt>' instruction truncates its operand to the type <tt>ty2</tt>.
 <p>
 The '<tt>trunc</tt>' instruction takes a <tt>value</tt> to trunc, which must 
 be an <a href="#t_integer">integer</a> type, and a type that specifies the size 
-and type of the result, which must be an <a href="#t_integral">integral</a> 
+and type of the result, which must be an <a href="#t_integer">integer</a> 
 type. The bit size of <tt>value</tt> must be larger than the bit size of 
 <tt>ty2</tt>. Equal sized types are not allowed.</p>
 
@@ -2722,8 +2846,8 @@ It will always truncate bits.</p>
 
 <h5>Arguments:</h5>
 <p>The '<tt>zext</tt>' instruction takes a value to cast, which must be of 
-<a href="#t_integral">integral</a> type, and a type to cast it to, which must
-also be of <a href="#t_integral">integral</a> type. The bit size of the
+<a href="#t_integer">integer</a> type, and a type to cast it to, which must
+also be of <a href="#t_integer">integer</a> type. The bit size of the
 <tt>value</tt> must be smaller than the bit size of the destination type, 
 <tt>ty2</tt>.</p>
 
@@ -2760,8 +2884,8 @@ changes).</p>
 <h5>Arguments:</h5>
 <p>
 The '<tt>sext</tt>' instruction takes a value to cast, which must be of 
-<a href="#t_integral">integral</a> type, and a type to cast it to, which must
-also be of <a href="#t_integral">integral</a> type.  The bit size of the
+<a href="#t_integer">integer</a> type, and a type to cast it to, which must
+also be of <a href="#t_integer">integer</a> type.  The bit size of the
 <tt>value</tt> must be smaller than the bit size of the destination type, 
 <tt>ty2</tt>.</p>
 
@@ -2857,7 +2981,7 @@ used to make a <i>no-op cast</i> because it always changes bits. Use
 
 <!-- _______________________________________________________________________ -->
 <div class="doc_subsubsection">
-   <a name="i_fp2uint">'<tt>fptoui .. to</tt>' Instruction</a>
+   <a name="i_fptoui">'<tt>fptoui .. to</tt>' Instruction</a>
 </div>
 <div class="doc_text">
 
@@ -2874,7 +2998,7 @@ unsigned integer equivalent of type <tt>ty2</tt>.
 <h5>Arguments:</h5>
 <p>The '<tt>fp2uint</tt>' instruction takes a value to cast, which must be a 
 <a href="#t_floating">floating point</a> value, and a type to cast it to, which
-must be an <a href="#t_integral">integral</a> type.</p>
+must be an <a href="#t_integer">integer</a> type.</p>
 
 <h5>Semantics:</h5>
 <p> The '<tt>fp2uint</tt>' instruction converts its 
@@ -2914,7 +3038,7 @@ If the <tt>value</tt> was non-zero, the i1 result will be <tt>true</tt>.</p>
 <h5>Arguments:</h5>
 <p> The '<tt>fptosi</tt>' instruction takes a value to cast, which must be a 
 <a href="#t_floating">floating point</a> value, and a type to cast it to, which 
-must also be an <a href="#t_integral">integral</a> type.</p>
+must also be an <a href="#t_integer">integer</a> type.</p>
 
 <h5>Semantics:</h5>
 <p>The '<tt>fptosi</tt>' instruction converts its 
@@ -2952,7 +3076,7 @@ integer and converts that value to the <tt>ty2</tt> type.</p>
 
 <h5>Arguments:</h5>
 <p>The '<tt>uitofp</tt>' instruction takes a value to cast, which must be an
-<a href="#t_integral">integral</a> value, and a type to cast it to, which must 
+<a href="#t_integer">integer</a> value, and a type to cast it to, which must 
 be a <a href="#t_floating">floating point</a> type.</p>
 
 <h5>Semantics:</h5>
@@ -2985,7 +3109,7 @@ integer and converts that value to the <tt>ty2</tt> type.</p>
 
 <h5>Arguments:</h5>
 <p>The '<tt>sitofp</tt>' instruction takes a value to cast, which must be an
-<a href="#t_integral">integral</a> value, and a type to cast it to, which must be
+<a href="#t_integer">integer</a> value, and a type to cast it to, which must be
 a <a href="#t_floating">floating point</a> type.</p>
 
 <h5>Semantics:</h5>
@@ -3053,7 +3177,7 @@ a pointer type, <tt>ty2</tt>.</p>
 <h5>Arguments:</h5>
 <p>The '<tt>inttoptr</tt>' instruction takes an <a href="i_integer">integer</a>
 value to cast, and a type to cast it to, which must be a 
-<a href="#t_pointer">pointer</a> type. </tt>
+<a href="#t_pointer">pointer</a> type.
 
 <h5>Semantics:</h5>
 <p>The '<tt>inttoptr</tt>' instruction converts <tt>value</tt> to type
@@ -3144,7 +3268,7 @@ a value, just a keyword. The possibilities for the condition code are:
   <li><tt>slt</tt>: signed less than</li>
   <li><tt>sle</tt>: signed less or equal</li>
 </ol>
-<p>The remaining two arguments must be <a href="#t_integral">integral</a> or
+<p>The remaining two arguments must be <a href="#t_integer">integer</a> or
 <a href="#t_pointer">pointer</a> typed. They must also be identical types.</p>
 <h5>Semantics:</h5>
 <p>The '<tt>icmp</tt>' compares <tt>var1</tt> and <tt>var2</tt> according to 
@@ -3172,13 +3296,9 @@ yields a <a href="#t_primitive">i1</a> result, as follows:
   <tt>true</tt> if <tt>var1</tt> is less than <tt>var2</tt>.</li>
   <li><tt>sle</tt>: interprets the operands as signed values and yields
   <tt>true</tt> if <tt>var1</tt> is less than or equal to <tt>var2</tt>.</li>
-  </li>
 </ol>
 <p>If the operands are <a href="#t_pointer">pointer</a> typed, the pointer
 values are treated as integers and then compared.</p>
-<p>If the operands are <a href="#t_packed">packed</a> typed, the elements of 
-the vector are compared in turn and the predicate must hold for all
-elements.</p>
 
 <h5>Example:</h5>
 <pre>  &lt;result&gt; = icmp eq i32 4, 5          <i>; yields: result=false</i>
@@ -3264,9 +3384,6 @@ yields a <a href="#t_primitive">i1</a> result, as follows:
   <li><tt>uno</tt>: yields <tt>true</tt> if either operand is a QNAN.</li>
   <li><tt>true</tt>: always yields <tt>true</tt>, regardless of operands.</li>
 </ol>
-<p>If the operands are <a href="#t_packed">packed</a> typed, the elements of 
-the vector are compared in turn and the predicate must hold for all elements.
-</p>
 
 <h5>Example:</h5>
 <pre>  &lt;result&gt; = fcmp oeq float 4.0, 5.0    <i>; yields: result=false</i>
@@ -3519,11 +3636,11 @@ instruction and the variable argument handling intrinsic functions are
 used.</p>
 
 <pre>
-define i32 %test(i32 %X, ...) {
+define i32 @test(i32 %X, ...) {
   ; Initialize variable argument processing
   %ap = alloca i8 *
   %ap2 = bitcast i8** %ap to i8*
-  call void %<a href="#i_va_start">llvm.va_start</a>(i8* %ap2)
+  call void @llvm.va_start(i8* %ap2)
 
   ; Read a single integer argument
   %tmp = va_arg i8 ** %ap, i32
@@ -3531,13 +3648,17 @@ define i32 %test(i32 %X, ...) {
   ; Demonstrate usage of llvm.va_copy and llvm.va_end
   %aq = alloca i8 *
   %aq2 = bitcast i8** %aq to i8*
-  call void %<a href="#i_va_copy">llvm.va_copy</a>(i8 *%aq2, i8* %ap2)
-  call void %<a href="#i_va_end">llvm.va_end</a>(i8* %aq2)
+  call void @llvm.va_copy(i8 *%aq2, i8* %ap2)
+  call void @llvm.va_end(i8* %aq2)
 
   ; Stop processing of arguments.
-  call void %<a href="#i_va_end">llvm.va_end</a>(i8* %ap2)
+  call void @llvm.va_end(i8* %ap2)
   ret i32 %tmp
 }
+
+declare void @llvm.va_start(i8*)
+declare void @llvm.va_copy(i8*, i8*)
+declare void @llvm.va_end(i8*)
 </pre>
 </div>
 
@@ -3577,7 +3698,7 @@ last argument of the function, the compiler can figure that out.</p>
 
 <div class="doc_text">
 <h5>Syntax:</h5>
-<pre>  declare void %llvm.va_end(i8* &lt;arglist&gt;)<br></pre>
+<pre>  declare void @llvm.va_end(i8* &lt;arglist&gt;)<br></pre>
 <h5>Overview:</h5>
 
 <p>The '<tt>llvm.va_end</tt>' intrinsic destroys <tt>&lt;arglist&gt;</tt>
@@ -3608,7 +3729,7 @@ with calls to <tt>llvm.va_end</tt>.</p>
 <h5>Syntax:</h5>
 
 <pre>
-  declare void %llvm.va_copy(i8* &lt;destarglist&gt;, i8* &lt;srcarglist&gt;)
+  declare void @llvm.va_copy(i8* &lt;destarglist&gt;, i8* &lt;srcarglist&gt;)
 </pre>
 
 <h5>Overview:</h5>
@@ -3661,7 +3782,7 @@ href="GarbageCollection.html">Accurate Garbage Collection with LLVM</a>.
 <h5>Syntax:</h5>
 
 <pre>
-  declare void %llvm.gcroot(&lt;ty&gt;** %ptrloc, &lt;ty2&gt;* %metadata)
+  declare void @llvm.gcroot(&lt;ty&gt;** %ptrloc, &lt;ty2&gt;* %metadata)
 </pre>
 
 <h5>Overview:</h5>
@@ -3695,7 +3816,7 @@ the runtime to find the pointer at GC safe points.
 <h5>Syntax:</h5>
 
 <pre>
-  declare i8 * %llvm.gcread(i8 * %ObjPtr, i8 ** %Ptr)
+  declare i8 * @llvm.gcread(i8 * %ObjPtr, i8 ** %Ptr)
 </pre>
 
 <h5>Overview:</h5>
@@ -3730,7 +3851,7 @@ garbage collector runtime, as needed.</p>
 <h5>Syntax:</h5>
 
 <pre>
-  declare void %llvm.gcwrite(i8 * %P1, i8 * %Obj, i8 ** %P2)
+  declare void @llvm.gcwrite(i8 * %P1, i8 * %Obj, i8 ** %P2)
 </pre>
 
 <h5>Overview:</h5>
@@ -3778,7 +3899,7 @@ be implemented with code generator support.
 
 <h5>Syntax:</h5>
 <pre>
-  declare i8  *%llvm.returnaddress(i32 &lt;level&gt;)
+  declare i8  *@llvm.returnaddress(i32 &lt;level&gt;)
 </pre>
 
 <h5>Overview:</h5>
@@ -3823,7 +3944,7 @@ source-language caller.
 
 <h5>Syntax:</h5>
 <pre>
-  declare i8  *%llvm.frameaddress(i32 &lt;level&gt;)
+  declare i8  *@llvm.frameaddress(i32 &lt;level&gt;)
 </pre>
 
 <h5>Overview:</h5>
@@ -3866,7 +3987,7 @@ source-language caller.
 
 <h5>Syntax:</h5>
 <pre>
-  declare i8  *%llvm.stacksave()
+  declare i8  *@llvm.stacksave()
 </pre>
 
 <h5>Overview:</h5>
@@ -3901,7 +4022,7 @@ that were allocated after the <tt>llvm.stacksave</tt> was executed.
 
 <h5>Syntax:</h5>
 <pre>
-  declare void %llvm.stackrestore(i8 * %ptr)
+  declare void @llvm.stackrestore(i8 * %ptr)
 </pre>
 
 <h5>Overview:</h5>
@@ -3932,7 +4053,7 @@ See the description for <a href="#i_stacksave"><tt>llvm.stacksave</tt></a>.
 
 <h5>Syntax:</h5>
 <pre>
-  declare void %llvm.prefetch(i8  * &lt;address&gt;,
+  declare void @llvm.prefetch(i8  * &lt;address&gt;,
                                 i32 &lt;rw&gt;, i32 &lt;locality&gt;)
 </pre>
 
@@ -3977,7 +4098,7 @@ performance.
 
 <h5>Syntax:</h5>
 <pre>
-  declare void %llvm.pcmarker( i32 &lt;id&gt; )
+  declare void @llvm.pcmarker( i32 &lt;id&gt; )
 </pre>
 
 <h5>Overview:</h5>
@@ -4018,7 +4139,7 @@ support this intrinisic may ignore it.
 
 <h5>Syntax:</h5>
 <pre>
-  declare i64 %llvm.readcyclecounter( )
+  declare i64 @llvm.readcyclecounter( )
 </pre>
 
 <h5>Overview:</h5>
@@ -4066,9 +4187,9 @@ for more efficient code generation.
 
 <h5>Syntax:</h5>
 <pre>
-  declare void %llvm.memcpy.i32(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
+  declare void @llvm.memcpy.i32(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
                                 i32 &lt;len&gt;, i32 &lt;align&gt;)
-  declare void %llvm.memcpy.i64(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
+  declare void @llvm.memcpy.i64(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
                                 i64 &lt;len&gt;, i32 &lt;align&gt;)
 </pre>
 
@@ -4120,9 +4241,9 @@ be set to 0 or 1.
 
 <h5>Syntax:</h5>
 <pre>
-  declare void %llvm.memmove.i32(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
+  declare void @llvm.memmove.i32(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
                                  i32 &lt;len&gt;, i32 &lt;align&gt;)
-  declare void %llvm.memmove.i64(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
+  declare void @llvm.memmove.i64(i8 * &lt;dest&gt;, i8 * &lt;src&gt;,
                                  i64 &lt;len&gt;, i32 &lt;align&gt;)
 </pre>
 
@@ -4175,9 +4296,9 @@ be set to 0 or 1.
 
 <h5>Syntax:</h5>
 <pre>
-  declare void %llvm.memset.i32(i8 * &lt;dest&gt;, i8 &lt;val&gt;,
+  declare void @llvm.memset.i32(i8 * &lt;dest&gt;, i8 &lt;val&gt;,
                                 i32 &lt;len&gt;, i32 &lt;align&gt;)
-  declare void %llvm.memset.i64(i8 * &lt;dest&gt;, i8 &lt;val&gt;,
+  declare void @llvm.memset.i64(i8 * &lt;dest&gt;, i8 &lt;val&gt;,
                                 i64 &lt;len&gt;, i32 &lt;align&gt;)
 </pre>
 
@@ -4228,8 +4349,8 @@ this can be specified as the fourth argument, otherwise it should be set to 0 or
 
 <h5>Syntax:</h5>
 <pre>
-  declare float %llvm.sqrt.f32(float %Val)
-  declare double %llvm.sqrt.f64(double %Val)
+  declare float @llvm.sqrt.f32(float %Val)
+  declare double @llvm.sqrt.f64(double %Val)
 </pre>
 
 <h5>Overview:</h5>
@@ -4264,8 +4385,8 @@ floating point number.
 
 <h5>Syntax:</h5>
 <pre>
-  declare float  %llvm.powi.f32(float  %Val, i32 %power)
-  declare double %llvm.powi.f64(double %Val, i32 %power)
+  declare float  @llvm.powi.f32(float  %Val, i32 %power)
+  declare double @llvm.powi.f64(double %Val, i32 %power)
 </pre>
 
 <h5>Overview:</h5>
@@ -4313,9 +4434,9 @@ These allow efficient code generation for some algorithms.
 
 <h5>Syntax:</h5>
 <pre>
-  declare i16 %llvm.bswap.i16(i16 &lt;id&gt;)
-  declare i32 %llvm.bswap.i32(i32 &lt;id&gt;)
-  declare i64 %llvm.bswap.i64(i64 &lt;id&gt;)
+  declare i16 @llvm.bswap.i16(i16 &lt;id&gt;)
+  declare i32 @llvm.bswap.i32(i32 &lt;id&gt;)
+  declare i64 @llvm.bswap.i64(i64 &lt;id&gt;)
 </pre>
 
 <h5>Overview:</h5>
@@ -4348,10 +4469,10 @@ intrinsic extends this concept to 64 bits.
 
 <h5>Syntax:</h5>
 <pre>
-  declare i8  %llvm.ctpop.i8 (i8  &lt;src&gt;)
-  declare i16 %llvm.ctpop.i16(i16 &lt;src&gt;)
-  declare i32 %llvm.ctpop.i32(i32 &lt;src&gt;)
-  declare i64 %llvm.ctpop.i64(i64 &lt;src&gt;)
+  declare i8  @llvm.ctpop.i8 (i8  &lt;src&gt;)
+  declare i16 @llvm.ctpop.i16(i16 &lt;src&gt;)
+  declare i32 @llvm.ctpop.i32(i32 &lt;src&gt;)
+  declare i64 @llvm.ctpop.i64(i64 &lt;src&gt;)
 </pre>
 
 <h5>Overview:</h5>
@@ -4384,10 +4505,10 @@ The '<tt>llvm.ctpop</tt>' intrinsic counts the 1's in a variable.
 
 <h5>Syntax:</h5>
 <pre>
-  declare i8  %llvm.ctlz.i8 (i8  &lt;src&gt;)
-  declare i16 %llvm.ctlz.i16(i16 &lt;src&gt;)
-  declare i32 %llvm.ctlz.i32(i32 &lt;src&gt;)
-  declare i64 %llvm.ctlz.i64(i64 &lt;src&gt;)
+  declare i8  @llvm.ctlz.i8 (i8  &lt;src&gt;)
+  declare i16 @llvm.ctlz.i16(i16 &lt;src&gt;)
+  declare i32 @llvm.ctlz.i32(i32 &lt;src&gt;)
+  declare i64 @llvm.ctlz.i64(i64 &lt;src&gt;)
 </pre>
 
 <h5>Overview:</h5>
@@ -4424,10 +4545,10 @@ of src. For example, <tt>llvm.ctlz(i32 2) = 30</tt>.
 
 <h5>Syntax:</h5>
 <pre>
-  declare i8  %llvm.cttz.i8 (i8  &lt;src&gt;)
-  declare i16 %llvm.cttz.i16(i16 &lt;src&gt;)
-  declare i32 %llvm.cttz.i32(i32 &lt;src&gt;)
-  declare i64 %llvm.cttz.i64(i64 &lt;src&gt;)
+  declare i8  @llvm.cttz.i8 (i8  &lt;src&gt;)
+  declare i16 @llvm.cttz.i16(i16 &lt;src&gt;)
+  declare i32 @llvm.cttz.i32(i32 &lt;src&gt;)
+  declare i64 @llvm.cttz.i64(i64 &lt;src&gt;)
 </pre>
 
 <h5>Overview:</h5>
@@ -4468,6 +4589,19 @@ Debugging</a> document.
 </div>
 
 
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="int_eh">Exception Handling Intrinsics</a>
+</div>
+
+<div class="doc_text">
+<p> The LLVM exception handling intrinsics (which all start with
+<tt>llvm.eh.</tt> prefix), are described in the <a
+href="ExceptionHandling.html#format_common_intrinsics">LLVM Exception
+Handling</a> document. </p>
+</div>
+
+
 <!-- *********************************************************************** -->
 <hr>
 <address>