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