Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(318)

Side by Side Diff: native_client_sdk/src/doc/reference/pnacl-bitcode-abi.rst

Issue 169753005: [NaClDocs] Add note about errno in PNaCl ABI. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: reset some stuff Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « native_client_sdk/doc_generated/sitemap.html ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 ============================== 1 ==============================
2 PNaCl Bitcode Reference Manual 2 PNaCl Bitcode Reference Manual
3 ============================== 3 ==============================
4 4
5 .. contents:: 5 .. contents::
6 :local: 6 :local:
7 :backlinks: none 7 :backlinks: none
8 :depth: 3 8 :depth: 3
9 9
10 Introduction 10 Introduction
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 Other kinds of LLVM metadata are not supported. 258 Other kinds of LLVM metadata are not supported.
259 259
260 Intrinsic Global Variables 260 Intrinsic Global Variables
261 ========================== 261 ==========================
262 262
263 `LLVM LangRef: Intrinsic Global Variables 263 `LLVM LangRef: Intrinsic Global Variables
264 <http://llvm.org/releases/3.3/docs/LangRef.html#intrinsic-global-variables>`_ 264 <http://llvm.org/releases/3.3/docs/LangRef.html#intrinsic-global-variables>`_
265 265
266 PNaCl bitcode does not support intrinsic global variables. 266 PNaCl bitcode does not support intrinsic global variables.
267 267
268 .. _ir_and_errno:
269
270 Errno and errors in arithmetic instructions
271 ===========================================
272
273 Some arithmetic instructions and intrinsics have the similar semantics to
274 libc math functions, but differ in the treatment of ``errno``. While the
275 libc functions may set ``errno`` for domain errors, the instructions and
276 intrinsics do not. This is because the variable ``errno`` is not special
277 and is not required to be part of the program.
278
268 Instruction Reference 279 Instruction Reference
269 ===================== 280 =====================
270 281
271 List of allowed instructions 282 List of allowed instructions
272 ---------------------------- 283 ----------------------------
273 284
274 This is a list of LLVM instructions supported by PNaCl bitcode. Where 285 This is a list of LLVM instructions supported by PNaCl bitcode. Where
275 applicable, PNaCl-specific restrictions are provided. 286 applicable, PNaCl-specific restrictions are provided.
276 287
277 .. TODO: explain instructions or link in the future 288 .. TODO: explain instructions or link in the future
(...skipping 20 matching lines...) Expand all
298 guaranteed to trap in PNaCl bitcode. 309 guaranteed to trap in PNaCl bitcode.
299 310
300 * ``and`` 311 * ``and``
301 * ``or`` 312 * ``or``
302 * ``xor`` 313 * ``xor``
303 * ``fadd`` 314 * ``fadd``
304 * ``fsub`` 315 * ``fsub``
305 * ``fmul`` 316 * ``fmul``
306 * ``fdiv`` 317 * ``fdiv``
307 * ``frem`` 318 * ``frem``
319
320 The frem instruction has the semantics of the libc fmod function for
321 computing the floating point remainder. If the numerator is infinity, or
322 denominator is zero, or either are NaN, then the result is NaN.
323 Unlike the libc fmod function, this does not set ``errno`` when the
324 result is NaN (see the :ref:`instructions and errno <ir_and_errno>`
325 section).
326
308 * ``alloca`` 327 * ``alloca``
309 328
310 See :ref:`alloca instructions <bitcode_allocainst>`. 329 See :ref:`alloca instructions <bitcode_allocainst>`.
311 330
312 * ``load``, ``store`` 331 * ``load``, ``store``
313 332
314 The pointer argument of these instructions must be a *normalized* pointer (see 333 The pointer argument of these instructions must be a *normalized* pointer (see
315 :ref:`pointer types <bitcode_pointertypes>`). The ``volatile`` and ``atomic`` 334 :ref:`pointer types <bitcode_pointertypes>`). The ``volatile`` and ``atomic``
316 attributes are not supported. Loads and stores of the type ``i1`` are not 335 attributes are not supported. Loads and stores of the type ``i1`` are not
317 supported. 336 supported.
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 * ``llvm.cttz`` 408 * ``llvm.cttz``
390 * ``llvm.ctpop`` 409 * ``llvm.ctpop``
391 410
392 The overloaded llvm.ctlz, llvm.cttz, and llvm.ctpop intrinsics are only 411 The overloaded llvm.ctlz, llvm.cttz, and llvm.ctpop intrinsics are only
393 supported with the i32 and i64 argument types (the types supported by 412 supported with the i32 and i64 argument types (the types supported by
394 C-style GCC builtins). 413 C-style GCC builtins).
395 414
396 * ``llvm.sqrt`` 415 * ``llvm.sqrt``
397 416
398 The overloaded ``llvm.sqrt`` intrinsic is only supported for float 417 The overloaded ``llvm.sqrt`` intrinsic is only supported for float
399 and double arguments types. Unlike the standard LLVM intrinsic, 418 and double arguments types. This has the same semantics as the libc
400 PNaCl guarantees that llvm.sqrt returns a QNaN for values less than -0.0. 419 sqrt function, returning NaN for values less than -0.0. However, this
420 does not set ``errno`` when the result is NaN (see the
421 :ref:`instructions and errno <ir_and_errno>` section).
401 422
402 * ``llvm.stacksave`` 423 * ``llvm.stacksave``
403 * ``llvm.stackrestore`` 424 * ``llvm.stackrestore``
404 425
405 These intrinsics are used to implement language features like scoped automatic 426 These intrinsics are used to implement language features like scoped automatic
406 variable sized arrays in C99. ``llvm.stacksave`` returns a value that 427 variable sized arrays in C99. ``llvm.stacksave`` returns a value that
407 represents the current state of the stack. This value may only be used as the 428 represents the current state of the stack. This value may only be used as the
408 argument to ``llvm.stackrestore``, which restores the stack to the given 429 argument to ``llvm.stackrestore``, which restores the stack to the given
409 state. 430 state.
410 431
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 545
525 declare i1 @llvm.nacl.atomic.is.lock.free(i32 <byte_size>, i8* <address>) 546 declare i1 @llvm.nacl.atomic.is.lock.free(i32 <byte_size>, i8* <address>)
526 547
527 The ``llvm.nacl.atomic.is.lock.free`` intrinsic is designed to 548 The ``llvm.nacl.atomic.is.lock.free`` intrinsic is designed to
528 determine at translation time whether atomic operations of a certain 549 determine at translation time whether atomic operations of a certain
529 ``byte_size`` (a compile-time constant), at a particular ``address``, 550 ``byte_size`` (a compile-time constant), at a particular ``address``,
530 are lock-free or not. This reflects the C11 ``atomic_is_lock_free`` 551 are lock-free or not. This reflects the C11 ``atomic_is_lock_free``
531 function from header ``<stdatomic.h>`` and the C++11 ``is_lock_free`` 552 function from header ``<stdatomic.h>`` and the C++11 ``is_lock_free``
532 member function in header ``<atomic>``. It can be used through the 553 member function in header ``<atomic>``. It can be used through the
533 ``__nacl_atomic_is_lock_free`` builtin. 554 ``__nacl_atomic_is_lock_free`` builtin.
OLDNEW
« no previous file with comments | « native_client_sdk/doc_generated/sitemap.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698