OLD | NEW |
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 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
423 | 423 |
424 * ``llvm.bswap`` | 424 * ``llvm.bswap`` |
425 | 425 |
426 The overloaded ``llvm.bswap`` intrinsic is only supported with the following | 426 The overloaded ``llvm.bswap`` intrinsic is only supported with the following |
427 argument types: i16, i32, i64 (the types supported by C-style GCC builtins). | 427 argument types: i16, i32, i64 (the types supported by C-style GCC builtins). |
428 | 428 |
429 * ``llvm.ctlz`` | 429 * ``llvm.ctlz`` |
430 * ``llvm.cttz`` | 430 * ``llvm.cttz`` |
431 * ``llvm.ctpop`` | 431 * ``llvm.ctpop`` |
432 | 432 |
433 The overloaded llvm.ctlz, llvm.cttz, and llvm.ctpop intrinsics are only | 433 The overloaded ``llvm.ctlz``, ``llvm.cttz``, and ``llvm.ctpop`` intrinsics |
434 supported with the i32 and i64 argument types (the types supported by | 434 are only supported with the i32 and i64 argument types (the types |
435 C-style GCC builtins). | 435 supported by C-style GCC builtins). |
| 436 |
| 437 * ``llvm.fabs`` |
| 438 |
| 439 The overloaded ``llvm.fabs`` intrinsic is supported for float, double and |
| 440 ``<4 x float>`` argument types. It returns the absolute value of |
| 441 the argument. Some notable points: it returns ``+0.0`` when given ``-0.0``, |
| 442 ``+inf`` when given ``-inf``, and a positive ``NaN`` when given any |
| 443 signed ``NaN``. |
| 444 |
| 445 NOTE: This intrinsic was introduced in the pepper_42 SDK. |
436 | 446 |
437 * ``llvm.sqrt`` | 447 * ``llvm.sqrt`` |
438 | 448 |
439 The overloaded ``llvm.sqrt`` intrinsic is only supported for float | 449 The overloaded ``llvm.sqrt`` intrinsic is only supported for float |
440 and double arguments types. This has the same semantics as the libc | 450 and double arguments types. This has the same semantics as the libc |
441 sqrt function, returning NaN for values less than -0.0. However, this | 451 sqrt function, returning ``NaN`` for values less than ``-0.0``. |
442 does not set ``errno`` when the result is NaN (see the | 452 However, this does not set ``errno`` when the result is NaN (see the |
443 :ref:`instructions and errno <ir_and_errno>` section). | 453 :ref:`instructions and errno <ir_and_errno>` section). |
444 | 454 |
445 * ``llvm.stacksave`` | 455 * ``llvm.stacksave`` |
446 * ``llvm.stackrestore`` | 456 * ``llvm.stackrestore`` |
447 | 457 |
448 These intrinsics are used to implement language features like scoped automatic | 458 These intrinsics are used to implement language features like scoped automatic |
449 variable sized arrays in C99. ``llvm.stacksave`` returns a value that | 459 variable sized arrays in C99. ``llvm.stacksave`` returns a value that |
450 represents the current state of the stack. This value may only be used as the | 460 represents the current state of the stack. This value may only be used as the |
451 argument to ``llvm.stackrestore``, which restores the stack to the given | 461 argument to ``llvm.stackrestore``, which restores the stack to the given |
452 state. | 462 state. |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
567 | 577 |
568 declare i1 @llvm.nacl.atomic.is.lock.free(i32 <byte_size>, i8* <address>) | 578 declare i1 @llvm.nacl.atomic.is.lock.free(i32 <byte_size>, i8* <address>) |
569 | 579 |
570 The ``llvm.nacl.atomic.is.lock.free`` intrinsic is designed to | 580 The ``llvm.nacl.atomic.is.lock.free`` intrinsic is designed to |
571 determine at translation time whether atomic operations of a certain | 581 determine at translation time whether atomic operations of a certain |
572 ``byte_size`` (a compile-time constant), at a particular ``address``, | 582 ``byte_size`` (a compile-time constant), at a particular ``address``, |
573 are lock-free or not. This reflects the C11 ``atomic_is_lock_free`` | 583 are lock-free or not. This reflects the C11 ``atomic_is_lock_free`` |
574 function from header ``<stdatomic.h>`` and the C++11 ``is_lock_free`` | 584 function from header ``<stdatomic.h>`` and the C++11 ``is_lock_free`` |
575 member function in header ``<atomic>``. It can be used through the | 585 member function in header ``<atomic>``. It can be used through the |
576 ``__nacl_atomic_is_lock_free`` builtin. | 586 ``__nacl_atomic_is_lock_free`` builtin. |
OLD | NEW |