| 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 |