Sophie

Sophie

distrib > Mageia > 6 > armv7hl > media > core-updates > by-pkgid > 4e2dbb669434a7691662cb2f0ad38972 > files > 5780

rust-doc-1.28.0-1.mga6.armv7hl.rpm

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `_mm_setcsr` fn in crate `core`."><meta name="keywords" content="rust, rustlang, rust-lang, _mm_setcsr"><title>core::arch::x86_64::_mm_setcsr - Rust</title><link rel="stylesheet" type="text/css" href="../../../normalize.css"><link rel="stylesheet" type="text/css" href="../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../../dark.css"><link rel="stylesheet" type="text/css" href="../../../light.css" id="themeStyle"><script src="../../../storage.js"></script><link rel="shortcut icon" href="https://doc.rust-lang.org/favicon.ico"></head><body class="rustdoc fn"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../../../core/index.html'><img src='https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png' alt='logo' width='100'></a><div class="sidebar-elems"><p class='location'><a href='../../index.html'>core</a>::<wbr><a href='../index.html'>arch</a>::<wbr><a href='index.html'>x86_64</a></p><script>window.sidebarCurrent = {name: '_mm_setcsr', ty: 'fn', relpath: ''};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!"><img src="../../../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices"></div></div><script src="../../../theme.js"></script><nav class="sub"><form class="search-form js-only"><div class="search-container"><input class="search-input" name="search" autocomplete="off" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><a id="settings-menu" href="../../../settings.html"><img src="../../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class='fqn'><span class='in-band'>Function <a href='../../index.html'>core</a>::<wbr><a href='../index.html'>arch</a>::<wbr><a href='index.html'>x86_64</a>::<wbr><a class="fn" href=''>_mm_setcsr</a></span><span class='out-of-band'><span class='since' title='Stable since Rust version 1.27.0'>1.27.0</span><span id='render-detail'><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class='inner'>&#x2212;</span>]</a></span><a class='srclink' href='../../../src/core/up/stdsimd/coresimd/x86/sse.rs.html#1664-1666' title='goto source code'>[src]</a></span></h1><pre class='rust fn'>pub unsafe fn _mm_setcsr(val: u32)</pre><div class='stability'><div class='stab portability'>This is supported on <strong>x86-64 and target feature <code>sse</code></strong> only.</div></div><div class='docblock'><p>Set the MXCSR register with the 32-bit unsigned integer value.</p>
<p>This register constrols how SIMD instructions handle floating point
operations. Modifying this register only affects the current thread.</p>
<p>It contains several groups of flags:</p>
<ul>
<li>
<p><em>Exception flags</em> report which exceptions occurred since last they were
reset.</p>
</li>
<li>
<p><em>Masking flags</em> can be used to mask (ignore) certain exceptions. By
default
these flags are all set to 1, so all exceptions are masked. When an
an exception is masked, the processor simply sets the exception flag and
continues the operation. If the exception is unmasked, the flag is also set
but additionally an exception handler is invoked.</p>
</li>
<li>
<p><em>Rounding mode flags</em> control the rounding mode of floating point
instructions.</p>
</li>
<li>
<p>The <em>denormals-are-zero mode flag</em> turns all numbers which would be
denormalized (exponent bits are all zeros) into zeros.</p>
</li>
</ul>
<h2 id="exception-flags" class="section-header"><a href="#exception-flags">Exception Flags</a></h2>
<ul>
<li>
<p><code>_MM_EXCEPT_INVALID</code>: An invalid operation was performed (e.g., dividing
Infinity by Infinity).</p>
</li>
<li>
<p><code>_MM_EXCEPT_DENORM</code>: An operation attempted to operate on a denormalized
number. Mainly this can cause loss of precision.</p>
</li>
<li>
<p><code>_MM_EXCEPT_DIV_ZERO</code>: Division by zero occured.</p>
</li>
<li>
<p><code>_MM_EXCEPT_OVERFLOW</code>: A numeric overflow exception occured, i.e., a
result was too large to be represented (e.g., an <code>f32</code> with absolute
value
greater than <code>2^128</code>).</p>
</li>
<li>
<p><code>_MM_EXCEPT_UNDERFLOW</code>: A numeric underflow exception occured, i.e., a
result was too small to be represented in a normalized way (e.g., an
<code>f32</code>
with absulte value smaller than <code>2^-126</code>.)</p>
</li>
<li>
<p><code>_MM_EXCEPT_INEXACT</code>: An inexact-result exception occured (a.k.a.
precision exception). This means some precision was lost due to rounding.
For example, the fraction <code>1/3</code> cannot be represented accurately in a
32 or 64 bit float and computing it would cause this exception to be
raised. Precision exceptions are very common, so they are usually masked.</p>
</li>
</ul>
<p>Exception flags can be read and set using the convenience functions
<code>_MM_GET_EXCEPTION_STATE</code> and <code>_MM_SET_EXCEPTION_STATE</code>. For example, to
check if an operation caused some overflow:</p>

<div class='information'><div class='tooltip ignore'>ⓘ<span class='tooltiptext'>This example is not tested</span></div></div><pre class="rust rust-example-rendered ignore">
<span class="ident">_MM_SET_EXCEPTION_STATE</span>(<span class="number">0</span>); <span class="comment">// clear all exception flags</span>
                            <span class="comment">// perform calculations</span>
<span class="kw">if</span> <span class="ident">_MM_GET_EXCEPTION_STATE</span>() <span class="op">&amp;</span> <span class="ident">_MM_EXCEPT_OVERFLOW</span> <span class="op">!=</span> <span class="number">0</span> {
    <span class="comment">// handle overflow</span>
}<a class="test-arrow" target="_blank" href="https://play.rust-lang.org/?code=%23!%5Ballow(unused)%5D%0Afn%20main()%20%7B%0A_MM_SET_EXCEPTION_STATE(0)%3B%20%2F%2F%20clear%20all%20exception%20flags%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20perform%20calculations%0Aif%20_MM_GET_EXCEPTION_STATE()%20%26%20_MM_EXCEPT_OVERFLOW%20!%3D%200%20%7B%0A%20%20%20%20%2F%2F%20handle%20overflow%0A%7D%0A%7D">Run</a></pre>
<h2 id="masking-flags" class="section-header"><a href="#masking-flags">Masking Flags</a></h2>
<p>There is one masking flag for each exception flag: <code>_MM_MASK_INVALID</code>,
<code>_MM_MASK_DENORM</code>, <code>_MM_MASK_DIV_ZERO</code>, <code>_MM_MASK_OVERFLOW</code>,
<code>_MM_MASK_UNDERFLOW</code>, <code>_MM_MASK_INEXACT</code>.</p>
<p>A single masking bit can be set via</p>

<div class='information'><div class='tooltip ignore'>ⓘ<span class='tooltiptext'>This example is not tested</span></div></div><pre class="rust rust-example-rendered ignore">
<span class="ident">_MM_SET_EXCEPTION_MASK</span>(<span class="ident">_MM_MASK_UNDERFLOW</span>);<a class="test-arrow" target="_blank" href="https://play.rust-lang.org/?code=%23!%5Ballow(unused)%5D%0Afn%20main()%20%7B%0A_MM_SET_EXCEPTION_MASK(_MM_MASK_UNDERFLOW)%3B%0A%7D">Run</a></pre>
<p>However, since mask bits are by default all set to 1, it is more common to
want to <em>disable</em> certain bits. For example, to unmask the underflow
exception, use:</p>

<div class='information'><div class='tooltip ignore'>ⓘ<span class='tooltiptext'>This example is not tested</span></div></div><pre class="rust rust-example-rendered ignore">
<span class="ident">_mm_setcsr</span>(<span class="ident">_mm_getcsr</span>() <span class="op">&amp;</span> <span class="op">!</span><span class="ident">_MM_MASK_UNDERFLOW</span>); <span class="comment">// unmask underflow</span>
<span class="ident">exception</span><a class="test-arrow" target="_blank" href="https://play.rust-lang.org/?code=%23!%5Ballow(unused)%5D%0Afn%20main()%20%7B%0A_mm_setcsr(_mm_getcsr()%20%26%20!_MM_MASK_UNDERFLOW)%3B%20%2F%2F%20unmask%20underflow%0Aexception%0A%7D">Run</a></pre>
<p>Warning: an unmasked exception will cause an exception handler to be
called.
The standard handler will simply terminate the process. So, in this case
any underflow exception would terminate the current process with something
like <code>signal: 8, SIGFPE: erroneous arithmetic operation</code>.</p>
<h2 id="rounding-mode" class="section-header"><a href="#rounding-mode">Rounding Mode</a></h2>
<p>The rounding mode is describe using two bits. It can be read and set using
the convenience wrappers <code>_MM_GET_ROUNDING_MODE()</code> and
<code>_MM_SET_ROUNDING_MODE(mode)</code>.</p>
<p>The rounding modes are:</p>
<ul>
<li>
<p><code>_MM_ROUND_NEAREST</code>: (default) Round to closest to the infinite precision
value. If two values are equally close, round to even (i.e., least
significant bit will be zero).</p>
</li>
<li>
<p><code>_MM_ROUND_DOWN</code>: Round toward negative Infinity.</p>
</li>
<li>
<p><code>_MM_ROUND_UP</code>: Round toward positive Infinity.</p>
</li>
<li>
<p><code>_MM_ROUND_TOWARD_ZERO</code>: Round towards zero (truncate).</p>
</li>
</ul>
<p>Example:</p>

<div class='information'><div class='tooltip ignore'>ⓘ<span class='tooltiptext'>This example is not tested</span></div></div><pre class="rust rust-example-rendered ignore">
<span class="ident">_MM_SET_ROUNDING_MODE</span>(<span class="ident">_MM_ROUND_DOWN</span>)<a class="test-arrow" target="_blank" href="https://play.rust-lang.org/?code=%23!%5Ballow(unused)%5D%0Afn%20main()%20%7B%0A_MM_SET_ROUNDING_MODE(_MM_ROUND_DOWN)%0A%7D">Run</a></pre>
<h2 id="denormals-are-zeroflush-to-zero-mode" class="section-header"><a href="#denormals-are-zeroflush-to-zero-mode">Denormals-are-zero/Flush-to-zero Mode</a></h2>
<p>If this bit is set, values that would be denormalized will be set to zero
instead. This is turned off by default.</p>
<p>You can read and enable/disable this mode via the helper functions
<code>_MM_GET_FLUSH_ZERO_MODE()</code> and <code>_MM_SET_FLUSH_ZERO_MODE()</code>:</p>

<div class='information'><div class='tooltip ignore'>ⓘ<span class='tooltiptext'>This example is not tested</span></div></div><pre class="rust rust-example-rendered ignore">
<span class="ident">_MM_SET_FLUSH_ZERO_MODE</span>(<span class="ident">_MM_FLUSH_ZERO_OFF</span>); <span class="comment">// turn off (default)</span>
<span class="ident">_MM_SET_FLUSH_ZERO_MODE</span>(<span class="ident">_MM_FLUSH_ZERO_ON</span>); <span class="comment">// turn on</span><a class="test-arrow" target="_blank" href="https://play.rust-lang.org/?code=%23!%5Ballow(unused)%5D%0Afn%20main()%20%7B%0A_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_OFF)%3B%20%2F%2F%20turn%20off%20(default)%0A_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON)%3B%20%2F%2F%20turn%20on%0A%7D">Run</a></pre>
<p><a href="https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_setcsr">Intel's documentation</a></p>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><aside id="help" class="hidden"><div><h1 class="hidden">Help</h1><div class="shortcuts"><h2>Keyboard Shortcuts</h2><dl><dt><kbd>?</kbd></dt><dd>Show this help dialog</dd><dt><kbd>S</kbd></dt><dd>Focus the search field</dd><dt><kbd>↑</kbd></dt><dd>Move up in search results</dd><dt><kbd>↓</kbd></dt><dd>Move down in search results</dd><dt><kbd>↹</kbd></dt><dd>Switch tab</dd><dt><kbd>&#9166;</kbd></dt><dd>Go to active search result</dd><dt><kbd>+</kbd></dt><dd>Expand all sections</dd><dt><kbd>-</kbd></dt><dd>Collapse all sections</dd></dl></div><div class="infos"><h2>Search Tricks</h2><p>Prefix searches with a type followed by a colon (e.g. <code>fn:</code>) to restrict the search to a given type.</p><p>Accepted types are: <code>fn</code>, <code>mod</code>, <code>struct</code>, <code>enum</code>, <code>trait</code>, <code>type</code>, <code>macro</code>, and <code>const</code>.</p><p>Search functions by type signature (e.g. <code>vec -> usize</code> or <code>* -> vec</code>)</p><p>Search multiple things at once by splitting your query with comma (e.g. <code>str,u8</code> or <code>String,struct:Vec,test</code>)</p></div></div></aside><script>window.rootPath = "../../../";window.currentCrate = "core";</script><script src="../../../aliases.js"></script><script src="../../../main.js"></script><script defer src="../../../search-index.js"></script></body></html>