OLD | NEW |
1 {{+bindTo:partials.standard_nacl_article}} | 1 {{+bindTo:partials.standard_nacl_article}} |
2 | 2 |
3 <section id="pnacl-bitcode-reference-manual"> | 3 <section id="pnacl-bitcode-reference-manual"> |
4 <h1 id="pnacl-bitcode-reference-manual">PNaCl Bitcode Reference Manual</h1> | 4 <h1 id="pnacl-bitcode-reference-manual">PNaCl Bitcode Reference Manual</h1> |
5 <div class="contents local" id="contents" style="display: none"> | 5 <div class="contents local" id="contents" style="display: none"> |
6 <ul class="small-gap"> | 6 <ul class="small-gap"> |
7 <li><a class="reference internal" href="#introduction" id="id1">Introduction</a>
</li> | 7 <li><a class="reference internal" href="#introduction" id="id1">Introduction</a>
</li> |
8 <li><p class="first"><a class="reference internal" href="#high-level-structure"
id="id2">High Level Structure</a></p> | 8 <li><p class="first"><a class="reference internal" href="#high-level-structure"
id="id2">High Level Structure</a></p> |
9 <ul class="small-gap"> | 9 <ul class="small-gap"> |
10 <li><a class="reference internal" href="#data-model" id="id3">Data Model</a></li
> | 10 <li><a class="reference internal" href="#data-model" id="id3">Data Model</a></li
> |
11 <li><a class="reference internal" href="#linkage-types" id="id4">Linkage Types</
a></li> | 11 <li><a class="reference internal" href="#linkage-types" id="id4">Linkage Types</
a></li> |
12 <li><a class="reference internal" href="#calling-conventions" id="id5">Calling C
onventions</a></li> | 12 <li><a class="reference internal" href="#calling-conventions" id="id5">Calling C
onventions</a></li> |
13 <li><a class="reference internal" href="#visibility-styles" id="id6">Visibility
Styles</a></li> | 13 <li><a class="reference internal" href="#visibility-styles" id="id6">Visibility
Styles</a></li> |
14 <li><a class="reference internal" href="#global-variables" id="id7">Global Varia
bles</a></li> | 14 <li><a class="reference internal" href="#global-variables" id="id7">Global Varia
bles</a></li> |
15 <li><a class="reference internal" href="#functions" id="id8">Functions</a></li> | 15 <li><a class="reference internal" href="#functions" id="id8">Functions</a></li> |
16 <li><a class="reference internal" href="#aliases" id="id9">Aliases</a></li> | 16 <li><a class="reference internal" href="#aliases" id="id9">Aliases</a></li> |
17 <li><a class="reference internal" href="#named-metadata" id="id10">Named Metadat
a</a></li> | 17 <li><a class="reference internal" href="#named-metadata" id="id10">Named Metadat
a</a></li> |
18 <li><a class="reference internal" href="#module-level-inline-assembly" id="id11"
>Module-Level Inline Assembly</a></li> | 18 <li><a class="reference internal" href="#module-level-inline-assembly" id="id11"
>Module-Level Inline Assembly</a></li> |
19 <li><a class="reference internal" href="#volatile-memory-accesses" id="id12">Vol
atile Memory Accesses</a></li> | 19 <li><a class="reference internal" href="#volatile-memory-accesses" id="id12">Vol
atile Memory Accesses</a></li> |
20 <li><a class="reference internal" href="#memory-model-for-concurrent-operations"
id="id13">Memory Model for Concurrent Operations</a></li> | 20 <li><a class="reference internal" href="#memory-model-for-concurrent-operations"
id="id13">Memory Model for Concurrent Operations</a></li> |
21 <li><a class="reference internal" href="#fast-math-flags" id="id14">Fast-Math Fl
ags</a></li> | 21 <li><a class="reference internal" href="#fast-math-flags" id="id14">Fast-Math Fl
ags</a></li> |
22 </ul> | 22 </ul> |
23 </li> | 23 </li> |
24 <li><p class="first"><a class="reference internal" href="#type-system" id="id15"
>Type System</a></p> | 24 <li><p class="first"><a class="reference internal" href="#type-system" id="id15"
>Type System</a></p> |
25 <ul class="small-gap"> | 25 <ul class="small-gap"> |
26 <li><a class="reference internal" href="#scalar-types" id="id16">Scalar types</a
></li> | 26 <li><a class="reference internal" href="#scalar-types" id="id16">Scalar types</a
></li> |
27 <li><a class="reference internal" href="#array-and-struct-types" id="id17">Array
and struct types</a></li> | 27 <li><a class="reference internal" href="#vector-types" id="id17">Vector types</a
></li> |
28 <li><a class="reference internal" href="#pointer-types" id="id18">Pointer types<
/a></li> | 28 <li><a class="reference internal" href="#array-and-struct-types" id="id18">Array
and struct types</a></li> |
29 <li><a class="reference internal" href="#undefined-values" id="id19">Undefined V
alues</a></li> | 29 <li><a class="reference internal" href="#pointer-types" id="id19">Pointer types<
/a></li> |
30 <li><a class="reference internal" href="#constant-expressions" id="id20">Constan
t Expressions</a></li> | 30 <li><a class="reference internal" href="#undefined-values" id="id20">Undefined V
alues</a></li> |
| 31 <li><a class="reference internal" href="#constant-expressions" id="id21">Constan
t Expressions</a></li> |
31 </ul> | 32 </ul> |
32 </li> | 33 </li> |
33 <li><p class="first"><a class="reference internal" href="#other-values" id="id21
">Other Values</a></p> | 34 <li><p class="first"><a class="reference internal" href="#other-values" id="id22
">Other Values</a></p> |
34 <ul class="small-gap"> | 35 <ul class="small-gap"> |
35 <li><a class="reference internal" href="#metadata-nodes-and-metadata-strings" id
="id22">Metadata Nodes and Metadata Strings</a></li> | 36 <li><a class="reference internal" href="#metadata-nodes-and-metadata-strings" id
="id23">Metadata Nodes and Metadata Strings</a></li> |
36 </ul> | 37 </ul> |
37 </li> | 38 </li> |
38 <li><a class="reference internal" href="#intrinsic-global-variables" id="id23">I
ntrinsic Global Variables</a></li> | 39 <li><a class="reference internal" href="#intrinsic-global-variables" id="id24">I
ntrinsic Global Variables</a></li> |
39 <li><a class="reference internal" href="#errno-and-errors-in-arithmetic-instruct
ions" id="id24">Errno and errors in arithmetic instructions</a></li> | 40 <li><a class="reference internal" href="#errno-and-errors-in-arithmetic-instruct
ions" id="id25">Errno and errors in arithmetic instructions</a></li> |
40 <li><p class="first"><a class="reference internal" href="#instruction-reference"
id="id25">Instruction Reference</a></p> | 41 <li><p class="first"><a class="reference internal" href="#instruction-reference"
id="id26">Instruction Reference</a></p> |
41 <ul class="small-gap"> | 42 <ul class="small-gap"> |
42 <li><a class="reference internal" href="#list-of-allowed-instructions" id="id26"
>List of allowed instructions</a></li> | 43 <li><a class="reference internal" href="#list-of-allowed-instructions" id="id27"
>List of allowed instructions</a></li> |
43 <li><a class="reference internal" href="#alloca" id="id27"><code>alloca</code></
a></li> | 44 <li><a class="reference internal" href="#alloca" id="id28"><code>alloca</code></
a></li> |
44 </ul> | 45 </ul> |
45 </li> | 46 </li> |
46 <li><p class="first"><a class="reference internal" href="#intrinsic-functions" i
d="id28">Intrinsic Functions</a></p> | 47 <li><p class="first"><a class="reference internal" href="#intrinsic-functions" i
d="id29">Intrinsic Functions</a></p> |
47 <ul class="small-gap"> | 48 <ul class="small-gap"> |
48 <li><a class="reference internal" href="#list-of-allowed-intrinsics" id="id29">L
ist of allowed intrinsics</a></li> | 49 <li><a class="reference internal" href="#list-of-allowed-intrinsics" id="id30">L
ist of allowed intrinsics</a></li> |
49 <li><a class="reference internal" href="#thread-pointer-related-intrinsics" id="
id30">Thread pointer related intrinsics</a></li> | 50 <li><a class="reference internal" href="#thread-pointer-related-intrinsics" id="
id31">Thread pointer related intrinsics</a></li> |
50 <li><a class="reference internal" href="#setjmp-and-longjmp" id="id31">Setjmp an
d Longjmp</a></li> | 51 <li><a class="reference internal" href="#setjmp-and-longjmp" id="id32">Setjmp an
d Longjmp</a></li> |
51 <li><a class="reference internal" href="#atomic-intrinsics" id="id32">Atomic int
rinsics</a></li> | 52 <li><a class="reference internal" href="#atomic-intrinsics" id="id33">Atomic int
rinsics</a></li> |
52 </ul> | 53 </ul> |
53 </li> | 54 </li> |
54 </ul> | 55 </ul> |
55 | 56 |
56 </div><section id="introduction"> | 57 </div><section id="introduction"> |
57 <h2 id="introduction">Introduction</h2> | 58 <h2 id="introduction">Introduction</h2> |
58 <p>This document is a reference manual for the PNaCl bitcode format. It describe
s | 59 <p>This document is a reference manual for the PNaCl bitcode format. It describe
s |
59 the bitcode on a <em>semantic</em> level; the physical encoding level will be de
scribed | 60 the bitcode on a <em>semantic</em> level; the physical encoding level will be de
scribed |
60 elsewhere. For the purpose of this document, the textual form of LLVM IR is | 61 elsewhere. For the purpose of this document, the textual form of LLVM IR is |
61 used to describe instructions and other bitcode constructs.</p> | 62 used to describe instructions and other bitcode constructs.</p> |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 <ul class="small-gap"> | 176 <ul class="small-gap"> |
176 <li><p class="first">The only scalar types allowed are integer, float (32-bit fl
oating point), | 177 <li><p class="first">The only scalar types allowed are integer, float (32-bit fl
oating point), |
177 double (64-bit floating point) and void.</p> | 178 double (64-bit floating point) and void.</p> |
178 <ul class="small-gap"> | 179 <ul class="small-gap"> |
179 <li>The only integer sizes allowed are i1, i8, i16, i32 and i64.</li> | 180 <li>The only integer sizes allowed are i1, i8, i16, i32 and i64.</li> |
180 <li>The only integer sizes allowed for function arguments and function return | 181 <li>The only integer sizes allowed for function arguments and function return |
181 values are i32 and i64.</li> | 182 values are i32 and i64.</li> |
182 </ul> | 183 </ul> |
183 </li> | 184 </li> |
184 </ul> | 185 </ul> |
| 186 </section><section id="vector-types"> |
| 187 <h3 id="vector-types">Vector types</h3> |
| 188 <p>The only vector types allowed are 128-bit vectors integers of elements |
| 189 size i8, i16, i32, and float. Vectors of i1 type are allowed with |
| 190 element counts corresponding to the allowed element counts listed |
| 191 previously (their width is therefore not 128-bits).</p> |
185 </section><section id="array-and-struct-types"> | 192 </section><section id="array-and-struct-types"> |
186 <h3 id="array-and-struct-types">Array and struct types</h3> | 193 <h3 id="array-and-struct-types">Array and struct types</h3> |
187 <p>Array and struct types are only allowed in | 194 <p>Array and struct types are only allowed in |
188 <a class="reference internal" href="#bitcode-globalvariables"><em>global variabl
e initializers</em></a>.</p> | 195 <a class="reference internal" href="#bitcode-globalvariables"><em>global variabl
e initializers</em></a>.</p> |
189 </section><section id="pointer-types"> | 196 </section><section id="pointer-types"> |
190 <span id="bitcode-pointertypes"></span><h3 id="pointer-types"><span id="bitcode-
pointertypes"></span>Pointer types</h3> | 197 <span id="bitcode-pointertypes"></span><h3 id="pointer-types"><span id="bitcode-
pointertypes"></span>Pointer types</h3> |
191 <p>Only the following pointer types are allowed:</p> | 198 <p>Only the following pointer types are allowed:</p> |
192 <ul class="small-gap"> | 199 <ul class="small-gap"> |
193 <li>Pointers to valid PNaCl bitcode scalar types, as specified above.</li> | 200 <li>Pointers to valid PNaCl bitcode scalar types, as specified above.</li> |
194 <li>Pointers to functions.</li> | 201 <li>Pointers to functions.</li> |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
301 <li><p class="first"><code>bitcast</code></p> | 308 <li><p class="first"><code>bitcast</code></p> |
302 <p>The pointer argument of a <code>bitcast</code> instruction must be a <em>inhe
rent</em> pointer | 309 <p>The pointer argument of a <code>bitcast</code> instruction must be a <em>inhe
rent</em> pointer |
303 (see <a class="reference internal" href="#bitcode-pointertypes"><em>pointer type
s</em></a>).</p> | 310 (see <a class="reference internal" href="#bitcode-pointertypes"><em>pointer type
s</em></a>).</p> |
304 </li> | 311 </li> |
305 <li><code>icmp</code></li> | 312 <li><code>icmp</code></li> |
306 <li><code>fcmp</code></li> | 313 <li><code>fcmp</code></li> |
307 <li><code>phi</code></li> | 314 <li><code>phi</code></li> |
308 <li><code>select</code></li> | 315 <li><code>select</code></li> |
309 <li><code>call</code></li> | 316 <li><code>call</code></li> |
310 <li><code>unreachable</code></li> | 317 <li><code>unreachable</code></li> |
| 318 <li><code>insertelement</code></li> |
| 319 <li><code>extractelement</code></li> |
311 </ul> | 320 </ul> |
312 </section><section id="alloca"> | 321 </section><section id="alloca"> |
313 <span id="bitcode-allocainst"></span><h3 id="alloca"><span id="bitcode-allocains
t"></span><code>alloca</code></h3> | 322 <span id="bitcode-allocainst"></span><h3 id="alloca"><span id="bitcode-allocains
t"></span><code>alloca</code></h3> |
314 <p>The only allowed type for <code>alloca</code> instructions in PNaCl bitcode i
s i8. The | 323 <p>The only allowed type for <code>alloca</code> instructions in PNaCl bitcode i
s i8. The |
315 size argument must be an i32. For example:</p> | 324 size argument must be an i32. For example:</p> |
316 <pre> | 325 <pre> |
317 %buf = alloca i8, i32 8, align 4 | 326 %buf = alloca i8, i32 8, align 4 |
318 </pre> | 327 </pre> |
319 </section></section><section id="intrinsic-functions"> | 328 </section></section><section id="intrinsic-functions"> |
320 <h2 id="intrinsic-functions">Intrinsic Functions</h2> | 329 <h2 id="intrinsic-functions">Intrinsic Functions</h2> |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
447 <p>The <code>llvm.nacl.atomic.is.lock.free</code> intrinsic is designed to | 456 <p>The <code>llvm.nacl.atomic.is.lock.free</code> intrinsic is designed to |
448 determine at translation time whether atomic operations of a certain | 457 determine at translation time whether atomic operations of a certain |
449 <code>byte_size</code> (a compile-time constant), at a particular <code>address<
/code>, | 458 <code>byte_size</code> (a compile-time constant), at a particular <code>address<
/code>, |
450 are lock-free or not. This reflects the C11 <code>atomic_is_lock_free</code> | 459 are lock-free or not. This reflects the C11 <code>atomic_is_lock_free</code> |
451 function from header <code><stdatomic.h></code> and the C++11 <code>is_loc
k_free</code> | 460 function from header <code><stdatomic.h></code> and the C++11 <code>is_loc
k_free</code> |
452 member function in header <code><atomic></code>. It can be used through th
e | 461 member function in header <code><atomic></code>. It can be used through th
e |
453 <code>__nacl_atomic_is_lock_free</code> builtin.</p> | 462 <code>__nacl_atomic_is_lock_free</code> builtin.</p> |
454 </section></section></section> | 463 </section></section></section> |
455 | 464 |
456 {{/partials.standard_nacl_article}} | 465 {{/partials.standard_nacl_article}} |
OLD | NEW |