mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
1. Break long lines to 80 col limit
2. Fix indentation 3. Renumber the instruction opcodes after the Shift became a binary operator. llvm-svn: 33777
This commit is contained in:
parent
591bfa1e0b
commit
1b0dd17ea9
@ -248,8 +248,8 @@ variable bit rate encoding as described above.</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a name="uint64_vbr"><b>uint64_vbr</b></a></td>
|
||||
<td class="td_left">A 64-bit unsigned integer that occupies from one to ten
|
||||
bytes using variable bit rate encoding.</td>
|
||||
<td class="td_left">A 64-bit unsigned integer that occupies from one to
|
||||
ten bytes using variable bit rate encoding.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a name="int64_vbr"><b>int64_vbr</b></a></td>
|
||||
@ -262,58 +262,60 @@ variable bit rate encoding as described above.</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a name="bit"><b>bit(n-m)</b></a></td>
|
||||
<td class="td_left">A set of bit within some larger integer field. The values
|
||||
of <code>n</code> and <code>m</code> specify the inclusive range of bits
|
||||
that define the subfield. The value for <code>m</code> may be omitted if
|
||||
its the same as <code>n</code>.</td>
|
||||
<td class="td_left">A set of bit within some larger integer field. The
|
||||
values of <code>n</code> and <code>m</code> specify the inclusive range
|
||||
of bits that define the subfield. The value for <code>m</code> may be
|
||||
omitted if its the same as <code>n</code>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="vertical-align: top;"><b><a name="float"><b>float</b></a></b></td>
|
||||
<td style="vertical-align: top; text-align: left;">A floating point value encoded
|
||||
as a 32-bit IEEE value written in little-endian form.<br>
|
||||
<td style="vertical-align: top;"><b><a name="float"><b>float</b></a></b>
|
||||
</td>
|
||||
<td style="vertical-align: top; text-align: left;">A floating point
|
||||
value encoded as a 32-bit IEEE value written in little-endian form.<br>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="vertical-align: top;"><b><b><a name="double"><b>double</b></a></b></b></td>
|
||||
<td style="vertical-align: top; text-align: left;">A floating point value encoded
|
||||
as a64-bit IEEE value written in little-endian form</td>
|
||||
<td style="vertical-align: top;"><b><b><a name="double"><b>double</b></a>
|
||||
</b></b></td>
|
||||
<td style="vertical-align: top; text-align: left;">A floating point value
|
||||
encoded as a64-bit IEEE value written in little-endian form</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a name="string"><b>string</b></a></td>
|
||||
<td class="td_left">A uint32_vbr indicating the type of the
|
||||
constant string which also includes its length, immediately followed by
|
||||
the characters of the string. There is no terminating null byte in the
|
||||
string.</td>
|
||||
<td class="td_left">A uint32_vbr indicating the type of the constant
|
||||
string which also includes its length, immediately followed by the
|
||||
characters of the string. There is no terminating null byte in the
|
||||
string.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a name="data"><b>data</b></a></td>
|
||||
<td class="td_left">An arbitrarily long segment of data to which
|
||||
no interpretation is implied. This is used for constant initializers.<br>
|
||||
<td class="td_left">An arbitrarily long segment of data to which no
|
||||
interpretation is implied. This is used for constant initializers.<br>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a name="llist"><b>llist(x)</b></a></td>
|
||||
<td class="td_left">A length list of x. This means the list is
|
||||
encoded as an <a href="#uint32_vbr">uint32_vbr</a> providing the
|
||||
length of the list, followed by a sequence of that many "x" items. This
|
||||
implies that the reader should iterate the number of times provided by
|
||||
the length.</td>
|
||||
<td class="td_left">A length list of x. This means the list is encoded
|
||||
as an <a href="#uint32_vbr">uint32_vbr</a> providing the length of the
|
||||
list, followed by a sequence of that many "x" items. This implies that
|
||||
the reader should iterate the number of times provided by the length.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a name="zlist"><b>zlist(x)</b></a></td>
|
||||
<td class="td_left">A zero-terminated list of x. This means the
|
||||
list is encoded as a sequence of an indeterminate number of "x" items,
|
||||
followed by an <a href="#uint32_vbr">uint32_vbr</a> terminating value.
|
||||
This implies that none of the "x" items can have a zero value (or else
|
||||
the list terminates).</td>
|
||||
<td class="td_left">A zero-terminated list of x. This means the list is
|
||||
encoded as a sequence of an indeterminate number of "x" items, followed
|
||||
by an <a href="#uint32_vbr">uint32_vbr</a> terminating value. This
|
||||
implies that none of the "x" items can have a zero value (or else the
|
||||
list terminates).</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a name="block"><b>block</b></a></td>
|
||||
<td class="td_left">A block of data that is logically related. A
|
||||
block is an unsigned 32-bit integer that encodes the type of the block
|
||||
in the low 5 bits and the size of the block in the high 27 bits. The
|
||||
length does not include the block header or any alignment bytes at the
|
||||
end of the block. Blocks may compose other blocks. </td>
|
||||
<td class="td_left">A block of data that is logically related. A block
|
||||
is an unsigned 32-bit integer that encodes the type of the block in
|
||||
the low 5 bits and the size of the block in the high 27 bits. The
|
||||
length does not include the block header or any alignment bytes at the
|
||||
end of the block. Blocks may compose other blocks. </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@ -333,18 +335,18 @@ following table: </p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b><code>?</code></b></td>
|
||||
<td class="td_left">The question mark indicates 0 or 1
|
||||
occurrences of the thing preceding it.</td>
|
||||
<td class="td_left">The question mark indicates 0 or 1 occurrences of
|
||||
the thing preceding it.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b><code>*</code></b></td>
|
||||
<td class="td_left">The asterisk indicates 0 or more occurrences
|
||||
of the thing preceding it.</td>
|
||||
<td class="td_left">The asterisk indicates 0 or more occurrences of the
|
||||
thing preceding it.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b><code>+</code></b></td>
|
||||
<td class="td_left">The plus sign indicates 1 or more occurrences
|
||||
of the thing preceding it.</td>
|
||||
<td class="td_left">The plus sign indicates 1 or more occurrences of the
|
||||
thing preceding it.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b><code>()</code></b></td>
|
||||
@ -369,8 +371,8 @@ of the thing preceding it.</td>
|
||||
<ol>
|
||||
<li>An optional string. Matches either nothing or a single string</li>
|
||||
<li>One or more pairs of uint32_vbr.</li>
|
||||
<li>Zero or more occurrences of either an unsigned followed by a
|
||||
uint32_vbr or just a uint32_vbr.</li>
|
||||
<li>Zero or more occurrences of either an unsigned followed by a uint32_vbr
|
||||
or just a uint32_vbr.</li>
|
||||
<li>An optional length list of unsigned values.</li>
|
||||
</ol>
|
||||
</div>
|
||||
@ -380,13 +382,14 @@ uint32_vbr or just a uint32_vbr.</li>
|
||||
<p>The bytecode format uses the notion of a "slot" to reference Types
|
||||
and Values. Since the bytecode file is a <em>direct</em> representation of
|
||||
LLVM's intermediate representation, there is a need to represent pointers in
|
||||
the file. Slots are used for this purpose. For example, if one has the following
|
||||
assembly:
|
||||
the file. Slots are used for this purpose. For example, if one has the
|
||||
following assembly:
|
||||
</p>
|
||||
<div class="doc_code"><code> %MyType = type { int, sbyte }<br>
|
||||
%MyVar = external global %MyType
|
||||
</code></div>
|
||||
<p>there are two definitions. The definition of <tt>%MyVar</tt> uses <tt>%MyType</tt>.
|
||||
<p>there are two definitions. The definition of <tt>%MyVar</tt> uses
|
||||
<tt>%MyType</tt>.
|
||||
In the C++ IR this linkage between <tt>%MyVar</tt> and <tt>%MyType</tt>
|
||||
is explicit through the use of C++ pointers. In bytecode, however, there's no
|
||||
ability to store memory addresses. Instead, we compute and write out
|
||||
@ -501,8 +504,8 @@ type constant pool, and symbol table for the function.</td>
|
||||
<td>2</td>
|
||||
<td class="td_left"> <a
|
||||
href="#constantpool">Function Constant Pool</a></td>
|
||||
<td class="td_left">Any constants (including types) used solely
|
||||
within the function are emitted here in the function constant pool. </td>
|
||||
<td class="td_left">Any constants (including types) used solely within
|
||||
the function are emitted here in the function constant pool. </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x07</td>
|
||||
@ -512,9 +515,9 @@ within the function are emitted here in the function constant pool. </td>
|
||||
<td>2</td>
|
||||
<td class="td_left"> <a
|
||||
href="#instructionlist">Instruction List</a></td>
|
||||
<td class="td_left">This block contains all the instructions of
|
||||
the function. The basic blocks are inferred by terminating
|
||||
instructions. </td>
|
||||
<td class="td_left">This block contains all the instructions of the
|
||||
function. The basic blocks are inferred by terminating instructions.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x04</td>
|
||||
@ -524,8 +527,8 @@ instructions. </td>
|
||||
<td>2</td>
|
||||
<td class="td_left"> <a
|
||||
href="#symtab">Function Symbol Table</a></td>
|
||||
<td class="td_left">This symbol table provides the names for the
|
||||
function specific values used (basic block labels mostly).</td>
|
||||
<td class="td_left">This symbol table provides the names for the function
|
||||
specific values used (basic block labels mostly).</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x04</td>
|
||||
@ -534,9 +537,9 @@ function specific values used (basic block labels mostly).</td>
|
||||
<td>No</td>
|
||||
<td>1</td>
|
||||
<td class="td_left"> <a href="#symtab">Module Symbol Table</a></td>
|
||||
<td class="td_left">This symbol table provides the names for the
|
||||
various entries in the file that are not function specific (global
|
||||
vars, and functions mostly).</td>
|
||||
<td class="td_left">This symbol table provides the names for the various
|
||||
entries in the file that are not function specific (global vars, and
|
||||
functions mostly).</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@ -669,11 +672,11 @@ sections.</p>
|
||||
blocks in a bytecode file. Specifically, instead of encoding the type and size
|
||||
of the block into a 32-bit integer with 5-bits for type and 27-bits for size,
|
||||
the module block header uses two 32-bit unsigned values, one for type, and one
|
||||
for size. While the 2<sup>27</sup> byte limit on block size is sufficient for the blocks
|
||||
contained in the module, it isn't sufficient for the module block itself
|
||||
because we want to ensure that bytecode files as large as 2<sup>32</sup> bytes
|
||||
are possible. For this reason, the module block (and only the module block)
|
||||
uses a long format header.</p>
|
||||
for size. While the 2<sup>27</sup> byte limit on block size is sufficient
|
||||
for the blocks contained in the module, it isn't sufficient for the module
|
||||
block itself because we want to ensure that bytecode files as large as
|
||||
2<sup>32</sup> bytes are possible. For this reason, the module block (and
|
||||
only the module block) uses a long format header.</p>
|
||||
</div>
|
||||
|
||||
<!-- _______________________________________________________________________ -->
|
||||
@ -744,17 +747,16 @@ types. They are encoded simply as their TypeID.</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#uint24_vbr">uint24_vbr</a></td>
|
||||
<td class="td_left">Type ID for the primitive types (values 1 to
|
||||
11) <sup>1</sup></td>
|
||||
<td class="td_left">Type ID for the primitive types (values 1 to 11)
|
||||
<sup>1</sup></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
Notes:
|
||||
<ol>
|
||||
<li>The values for the Type IDs for the primitive types are provided
|
||||
by the definition of the <code>llvm::Type::TypeID</code> enumeration
|
||||
in <code>include/llvm/Type.h</code>. The enumeration gives the
|
||||
following mapping:
|
||||
<li>The values for the Type IDs for the primitive types are provided by the
|
||||
definition of the <code>llvm::Type::TypeID</code> enumeration in
|
||||
<code>include/llvm/Type.h</code>. The enumeration gives the following mapping:
|
||||
<ol>
|
||||
<li>bool</li>
|
||||
<li>ubyte</li>
|
||||
@ -791,8 +793,8 @@ following mapping:
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#uint32_vbr">uint32_vbr</a>?</td>
|
||||
<td class="td_left">Value 0 if this is a varargs function,
|
||||
missing otherwise.</td>
|
||||
<td class="td_left">Value 0 if this is a varargs function, missing
|
||||
otherwise.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@ -922,36 +924,36 @@ all functions. The format is shown in the table below:</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#zlist">zlist</a>(<a href="#globalvar">globalvar</a>)</td>
|
||||
<td class="td_left">A zero terminated list of global var
|
||||
definitions occurring in the module.</td>
|
||||
<td class="td_left">A zero terminated list of global var definitions
|
||||
occurring in the module.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#zlist">zlist</a>(<a href="#funcfield">funcfield</a>)</td>
|
||||
<td class="td_left">A zero terminated list of function definitions
|
||||
occurring in the module.</td>
|
||||
<td class="td_left">A zero terminated list of function definitions
|
||||
occurring in the module.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#llist">llist</a>(<a href="#string">string</a>)</td>
|
||||
<td class="td_left">A length list
|
||||
of strings that specify the names of the libraries that this module
|
||||
depends upon.</td>
|
||||
<td class="td_left">A length list of strings that specify the names of
|
||||
the libraries that this module depends upon.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#string">string</a></td>
|
||||
<td class="td_left">The target
|
||||
triple for the module (blank means no target triple specified, i.e. a
|
||||
platform-independent module).</td>
|
||||
<td class="td_left">The target triple for the module (blank means no
|
||||
target triple specified, i.e. a platform-independent module).</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#string">string</a></td>
|
||||
<td class="td_left">The data layout string describing the endianness, pointer size, and
|
||||
type alignments for which the module was written (blank means no data layout specified, i.e. a platform-independent module).</td>
|
||||
<td class="td_left">The data layout string describing the endianness,
|
||||
pointer size, and type alignments for which the module was written
|
||||
(blank means no data layout specified, i.e. a platform-independent
|
||||
module).</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#llist">llist</a>(<a href="#string">string</a>)</td>
|
||||
<td class="td_left">A length list
|
||||
of strings that defines a table of section strings for globals. A global's
|
||||
SectionID is an index into this table.</td>
|
||||
<td class="td_left">A length list of strings that defines a table of
|
||||
section strings for globals. A global's SectionID is an index into
|
||||
this table.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#string">string</a></td>
|
||||
@ -986,9 +988,8 @@ and a an optional initializers for the global var.</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#bit">bit(1)</a></td>
|
||||
<td class="td_left">Has initializer? Note that this bit
|
||||
determines whether the constant initializer field (described below)
|
||||
follows. </td>
|
||||
<td class="td_left">Has initializer? Note that this bit determines
|
||||
whether the constant initializer field (described below) follows.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#bit">bit(2-4)</a></td>
|
||||
@ -1056,9 +1057,9 @@ and can includes more information:</p>
|
||||
</td>
|
||||
<td class="td_left">An optional section ID number, specifying the string
|
||||
to use for the section of the global. This an index (+1) of an entry
|
||||
into the SectionID llist in the <a href="#globalinfo">Module Global
|
||||
Info</a> block. If this value is 0 or not present, the global has an
|
||||
empty section string.</td>
|
||||
into the SectionID llist in the
|
||||
<a href="#globalinfo">Module Global Info</a> block. If this value is
|
||||
0 or not present, the global has an empty section string.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@ -1108,11 +1109,11 @@ href="#uint32_vbr">uint32_vbr</a> that describes the function.</p>
|
||||
<tr>
|
||||
<td><a href="#bit">bit(4)</a></td>
|
||||
<td class="td_left">If this bit is set to 1, the indicated function is
|
||||
external, and there is no <a href="#functiondefs">Function Definiton
|
||||
Block</a> in the bytecode file for the function. If the function is
|
||||
external and has <tt>dllimport or extern_weak</tt> linkage additional
|
||||
field in the extension word is used to indicate the actual linkage
|
||||
type.</td>
|
||||
external, and there is no
|
||||
<a href="#functiondefs">Function Definiton Block</a> in the bytecode
|
||||
file for the function. If the function is external and has
|
||||
<tt>dllimport or extern_weak</tt> linkage additional field in the
|
||||
extension word is used to indicate the actual linkage type.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#bit">bit(5-30)</a></td>
|
||||
@ -1171,9 +1172,9 @@ follows with the following fields:</p>
|
||||
</td>
|
||||
<td class="td_left">An optional section ID number, specifying the string
|
||||
to use for the section of the function. This an index (+1) of an entry
|
||||
into the SectionID llist in the <a href="#globalinfo">Module Global
|
||||
Info</a> block. If this value is 0 or not present, the function has an
|
||||
empty section string.</td>
|
||||
into the SectionID llist in the
|
||||
<a href="#globalinfo">Module Global Info</a> block. If this value is
|
||||
0 or not present, the function has an empty section string.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@ -1218,15 +1219,15 @@ both function and module constant pools.</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#uint32_vbr">uint32_vbr</a></td>
|
||||
<td class="td_left">Zero. This identifies the following "plane"
|
||||
as containing the constant strings. This is needed to identify it
|
||||
uniquely from other constant planes that follow. </td>
|
||||
<td class="td_left">Zero. This identifies the following "plane" as
|
||||
containing the constant strings. This is needed to identify it uniquely
|
||||
from other constant planes that follow. </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#uint24_vbr">uint24_vbr</a>+</td>
|
||||
<td class="td_left">Type slot number of the constant string's type.
|
||||
Note that the constant string's type implicitly defines the length of
|
||||
the string. </td>
|
||||
<td class="td_left">Type slot number of the constant string's type. Note
|
||||
that the constant string's type implicitly defines the length of the
|
||||
string. </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@ -1272,21 +1273,20 @@ constant is solely determined by its type. In this case, we have the following
|
||||
field definitions, based on type:</p>
|
||||
|
||||
<ul>
|
||||
<li><b>Bool</b>. This is written as an <a href="#uint32_vbr">uint32_vbr</a>
|
||||
of value 1U or 0U.</li>
|
||||
<li><b>Signed Integers (sbyte,short,int,long)</b>. These are written
|
||||
as an <a href="#int64_vbr">int64_vbr</a> with the corresponding value.</li>
|
||||
<li><b>Unsigned Integers (ubyte,ushort,uint,ulong)</b>. These are
|
||||
written as an <a href="#uint64_vbr">uint64_vbr</a> with the
|
||||
corresponding value. </li>
|
||||
<li><b>Floating Point</b>. Both the float and double types are
|
||||
written literally in binary format.</li>
|
||||
<li><b>Arrays</b>. Arrays are written simply as a list of <a
|
||||
href="#uint32_vbr">uint32_vbr</a> encoded value slot numbers to the constant
|
||||
element values.</li>
|
||||
<li><b>Structures</b>. Structures are written simply as a list of <a
|
||||
href="#uint32_vbr">uint32_vbr</a> encoded value slot numbers to the constant
|
||||
field values of the structure.</li>
|
||||
<li><b>Bool</b>. This is written as an <a href="#uint32_vbr">uint32_vbr</a> of
|
||||
value 1U or 0U.</li>
|
||||
<li><b>Signed Integers (sbyte,short,int,long)</b>. These are written as an
|
||||
<a href="#int64_vbr">int64_vbr</a> with the corresponding value.</li>
|
||||
<li><b>Unsigned Integers (ubyte,ushort,uint,ulong)</b>. These are written as
|
||||
an <a href="#uint64_vbr">uint64_vbr</a> with the corresponding value. </li>
|
||||
<li><b>Floating Point</b>. Both the float and double types are written
|
||||
literally in binary format.</li>
|
||||
<li><b>Arrays</b>. Arrays are written simply as a list of
|
||||
<a href="#uint32_vbr">uint32_vbr</a> encoded value slot numbers to the
|
||||
constant element values.</li>
|
||||
<li><b>Structures</b>. Structures are written simply as a list of
|
||||
<a href="#uint32_vbr">uint32_vbr</a> encoded value slot numbers to the
|
||||
constant field values of the structure.</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
@ -1350,18 +1350,18 @@ number of operands+1.</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#uint32_vbr">uint32_vbr</a></td>
|
||||
<td class="td_left">Op code of the instruction for the constant
|
||||
expression.</td>
|
||||
<td class="td_left">Op code of the instruction for the constant
|
||||
expression.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#uint32_vbr">uint32_vbr</a></td>
|
||||
<td class="td_left">The value slot number of the constant value for an
|
||||
operand.<sup>1</sup></td>
|
||||
<td class="td_left">The value slot number of the constant value for an
|
||||
operand.<sup>1</sup></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#uint24_vbr">uint24_vbr</a></td>
|
||||
<td class="td_left">The type slot number for the type of the constant
|
||||
value for an operand.<sup>1</sup></td>
|
||||
<td class="td_left">The type slot number for the type of the constant
|
||||
value for an operand.<sup>1</sup></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@ -1391,24 +1391,25 @@ size<br>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#uint32_vbr">uint32_vbr</a></td>
|
||||
<td class="td_left"><a href="#funclinkage_and_visibility">The linkage and
|
||||
visibility</a> style field</td>
|
||||
<td class="td_left">
|
||||
<a href="#funclinkage_and_visibility">The linkage and visibility</a>
|
||||
style field</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#block">block</a></td>
|
||||
<td class="td_left">The <a href="#constantpool">constant pool</a>
|
||||
block for this function.<sup>2</sup></td>
|
||||
<td class="td_left">The <a href="#constantpool">constant pool</a> block
|
||||
for this function.<sup>2</sup></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#block">block</a></td>
|
||||
<td class="td_left">The <a href="#instructionlist">instruction
|
||||
list</a> for the function.</td>
|
||||
<td class="td_left">The <a href="#instructionlist">instruction list</a>
|
||||
for the function.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#block">block</a></td>
|
||||
<td class="td_left">The function's <a href="#symtab">symbol
|
||||
table</a> containing only those symbols pertinent to the function
|
||||
(mostly block labels).</td>
|
||||
<td class="td_left">The function's <a href="#symtab">symbol table</a>
|
||||
containing only those symbols pertinent to the function (mostly block
|
||||
labels).</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@ -1433,7 +1434,8 @@ other fields will be present as the function is defined elsewhere.</li>
|
||||
<tr>
|
||||
<td><a href="#bit">bit(0-15)</a></td>
|
||||
<td class="td_left">The linkage type of the function: 0=External, 1=Weak,
|
||||
2=Appending, 3=Internal, 4=LinkOnce, 5=DllImport, 6=DllExport<sup>1</sup></td>
|
||||
2=Appending, 3=Internal, 4=LinkOnce, 5=DllImport,
|
||||
6=DllExport<sup>1</sup></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#bit">bit(16-18)</a></td>
|
||||
@ -1467,8 +1469,8 @@ the block is given in the following table.</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#instruction">instruction</a>+</td>
|
||||
<td class="td_left">An instruction. Instructions have a variety
|
||||
of formats. See <a href="#instruction">Instructions</a> for details.</td>
|
||||
<td class="td_left">An instruction. Instructions have a variety of
|
||||
formats. See <a href="#instruction">Instructions</a> for details.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@ -1526,37 +1528,37 @@ possible. </p>
|
||||
<tr><td>SRem</td><td>14</td><td>6</td><td>1.9</td></tr>
|
||||
<tr><td>FRem</td><td>15</td><td>6</td><td>1.9</td></tr>
|
||||
<tr><td colspan="4"><b>Logical Operators</b></td></tr>
|
||||
<tr><td>And</td><td>16</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>Or</td><td>17</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>Xor</td><td>18</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>Shl</td><td>16</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>LShr</td><td>17</td><td>6</td><td>1.9</td></tr>
|
||||
<tr><td>AShr</td><td>18</td><td>6</td><td>1.9</td></tr>
|
||||
<tr><td>And</td><td>19</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>Or</td><td>20</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>Xor</td><td>21</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td colspan="4"><b>Memory Operators</b></td></tr>
|
||||
<tr><td>Malloc</td><td>19</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>Free</td><td>20</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>Alloca</td><td>21</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>Load</td><td>22</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>Store</td><td>23</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>GetElementPtr</td><td>24</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>Malloc</td><td>22</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>Free</td><td>23</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>Alloca</td><td>24</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>Load</td><td>25</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>Store</td><td>26</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>GetElementPtr</td><td>27</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td colspan="4"><b>Cast Operators</b></td></tr>
|
||||
<tr><td>Trunc</td><td>25</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>ZExt</td><td>26</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>SExt</td><td>27</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>FPToUI</td><td>28</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>FPToSI</td><td>29</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>UIToFP</td><td>30</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>SIToFP</td><td>31</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>FPTrunc</td><td>32</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>FPExt</td><td>33</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>PtrToInt</td><td>34</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>IntToPtr</td><td>35</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>BitCast</td><td>36</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>Trunc</td><td>28</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>ZExt</td><td>29</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>SExt</td><td>30</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>FPToUI</td><td>31</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>FPToSI</td><td>32</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>UIToFP</td><td>33</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>SIToFP</td><td>34</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>FPTrunc</td><td>35</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>FPExt</td><td>36</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>PtrToInt</td><td>37</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>IntToPtr</td><td>38</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>BitCast</td><td>39</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td colspan="4"><b>Other Operators</b></td></tr>
|
||||
<tr><td>ICmp</td><td>37</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>FCmp</td><td>38</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>PHI</td><td>39</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>Call</td><td>40</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>Shl</td><td>41</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>LShr</td><td>42</td><td>6</td><td>1.9</td></tr>
|
||||
<tr><td>AShr</td><td>43</td><td>6</td><td>1.9</td></tr>
|
||||
<tr><td>ICmp</td><td>40</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>FCmp</td><td>41</td><td>7</td><td>2.0</td></tr>
|
||||
<tr><td>PHI</td><td>42</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>Call</td><td>43</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>Select</td><td>44</td><td>2</td><td>1.2</td></tr>
|
||||
<tr><td>UserOp1</td><td>45</td><td>1</td><td>1.0</td></tr>
|
||||
<tr><td>UserOp2</td><td>46</td><td>1</td><td>1.0</td></tr>
|
||||
@ -1620,17 +1622,17 @@ encodes the value number of the operand, not the type.</p>
|
||||
those cases:</p>
|
||||
|
||||
<ul>
|
||||
<li>getelementptr: the slot numbers for sequential type indexes are shifted up
|
||||
two bits. This allows the low order bits will encode the type of index used,
|
||||
as follows: 0=uint, 1=int, 2=ulong, 3=long.</li>
|
||||
<li>cast: the result type number is encoded as the second operand.</li>
|
||||
<li>alloca/malloc: If the allocation has an explicit alignment, the log2 of the
|
||||
alignment is encoded as the second operand.</li>
|
||||
<li>call: If the tail marker and calling convention cannot be <a
|
||||
href="#pi_note">encoded into the opcode</a> of the call, it is passed as an
|
||||
additional operand. The low bit of the operand is a flag indicating whether
|
||||
the call is a tail call. The rest of the bits contain the calling
|
||||
convention number (shifted left by one bit).</li>
|
||||
<li>getelementptr: the slot numbers for sequential type indexes are shifted
|
||||
up two bits. This allows the low order bits will encode the type of index
|
||||
used, as follows: 0=uint, 1=int, 2=ulong, 3=long.</li>
|
||||
<li>cast: the result type number is encoded as the second operand.</li>
|
||||
<li>alloca/malloc: If the allocation has an explicit alignment, the log2 of
|
||||
the alignment is encoded as the second operand.</li>
|
||||
<li>call: If the tail marker and calling convention cannot be
|
||||
<a href="#pi_note">encoded into the opcode</a> of the call, it is passed as
|
||||
an additional operand. The low bit of the operand is a flag indicating
|
||||
whether the call is a tail call. The rest of the bits contain the calling
|
||||
convention number (shifted left by one bit).</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@ -1657,10 +1659,10 @@ successive fields.</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#uint32_vbr">uint32_vbr</a></td>
|
||||
<td class="td_left">Specifies the opcode of the instruction. Note
|
||||
that for compatibility with the other instruction formats, the opcode
|
||||
is shifted left by 2 bits. Bits 0 and 1 must have value zero for this
|
||||
format.</td>
|
||||
<td class="td_left">Specifies the opcode of the instruction. Note that
|
||||
for compatibility with the other instruction formats, the opcode is
|
||||
shifted left by 2 bits. Bits 0 and 1 must have value zero for this
|
||||
format.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#uint24_vbr">uint24_vbr</a></td>
|
||||
@ -1832,13 +1834,15 @@ table below. </p>
|
||||
<td class="td_left">Symbol Table Identifier (0x04)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#llist">llist</a>(<a href="#symtab_entry">type_entry</a>)</td>
|
||||
<td><a href="#llist">llist</a>(<a href="#symtab_entry">type_entry</a>)
|
||||
</td>
|
||||
<td class="td_left">A length list of symbol table entries for
|
||||
<tt>Type</tt>s
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#zlist">llist</a>(<a href="#symtab_plane">symtab_plane</a>)</td>
|
||||
<td><a href="#zlist">llist</a>(<a href="#symtab_plane">symtab_plane</a>)
|
||||
</td>
|
||||
<td class="td_left">A length list of "type planes" of symbol table
|
||||
entries for <tt>Value</tt>s</td>
|
||||
</tr>
|
||||
@ -1896,7 +1900,8 @@ values of a common type. The encoding is given in the following table:</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#uint32_vbr">uint32_vbr</a></td>
|
||||
<td class="td_left">Type slot number of type for all values in this plane..</td>
|
||||
<td class="td_left">Type slot number of type for all values in this plane.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#value_entry">value_entry</a>+</td>
|
||||
@ -1973,8 +1978,8 @@ describes the differences between that version and the one that <i>follows</i>.
|
||||
<div class="doc_subsubsection">Function Flags</div>
|
||||
<div class="doc_text">
|
||||
<p>LLVM bytecode versions prior to 1.4 did not include the 'undef' constant
|
||||
value, which affects the encoding of <a href="#constant">Constant
|
||||
Fields</a>.</p>
|
||||
value, which affects the encoding of <a href="#constant">Constant Fields</a>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user