123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796 |
- <?xml version="1.0" encoding="utf-8" ?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <!-- This file is generated by Nim. -->
- <html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en" data-theme="auto">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>std/sysatomics</title>
- <!-- Google fonts -->
- <link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
- <link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
- <!-- Favicon -->
- <link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
- <link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
- <!-- CSS -->
- <link rel="stylesheet" type="text/css" href="nimdoc.out.css?v=2.3.1">
- <!-- JS -->
- <script type="text/javascript" src="dochack.js?v=2.3.1"></script>
- </head>
- <body>
- <div class="document" id="documentId">
- <div class="container">
- <h1 class="title">std/sysatomics</h1>
- <div class="row">
- <div class="three columns">
- <div class="theme-select-wrapper">
- <label for="theme-select">Theme: </label>
- <select id="theme-select" onchange="setTheme(this.value)">
- <option value="auto">🌗 Match OS</option>
- <option value="dark">🌑 Dark</option>
- <option value="light">🌕 Light</option>
- </select>
- </div>
- <div id="global-links">
- <ul class="simple-boot">
- <li><a href="manual.html">Manual</a></li>
- <li><a href="lib.html">Standard library</a></li>
- <li> <a id="indexLink" href="theindex.html">Index</a></li>
- <li><a href="compiler/theindex.html">Compiler docs</a></li>
- <li><a href="https://nim-lang.github.io/fusion/theindex.html">Fusion docs</a></li>
- <li><a href="https://nim-lang.github.io/Nim/">devel</a>, <a href="https://nim-lang.org/documentation.html">stable</a></li>
- </ul>
- </div>
- <div id="searchInputDiv">
- Search: <input type="search" id="searchInput"
- oninput="search()" />
- </div>
-
- <ul class="simple simple-toc" id="toc-list">
- <li>
- <details open>
- <summary><a class="reference reference-toplevel" href="#7" id="57">Types</a></summary>
- <ul class="simple simple-toc-section">
- <li><a class="reference" href="#AtomMemModel" title="AtomMemModel = distinct cint">AtomMemModel</a></li>
- <li><a class="reference" href="#AtomType" title="AtomType = SomeNumber | pointer | ptr | char | bool">AtomType</a></li>
- </ul>
- </details>
- </li>
- <li>
- <details open>
- <summary><a class="reference reference-toplevel" href="#8" id="58">Vars</a></summary>
- <ul class="simple simple-toc-section">
- <li><a class="reference" href="#ATOMIC_ACQ_REL" title="ATOMIC_ACQ_REL {.importc: "__ATOMIC_ACQ_REL", nodecl.}: AtomMemModel">ATOMIC_ACQ_REL</a></li>
- <li><a class="reference" href="#ATOMIC_ACQUIRE" title="ATOMIC_ACQUIRE {.importc: "__ATOMIC_ACQUIRE", nodecl.}: AtomMemModel">ATOMIC_ACQUIRE</a></li>
- <li><a class="reference" href="#ATOMIC_CONSUME" title="ATOMIC_CONSUME {.importc: "__ATOMIC_CONSUME", nodecl.}: AtomMemModel">ATOMIC_CONSUME</a></li>
- <li><a class="reference" href="#ATOMIC_RELAXED" title="ATOMIC_RELAXED {.importc: "__ATOMIC_RELAXED", nodecl.}: AtomMemModel">ATOMIC_RELAXED</a></li>
- <li><a class="reference" href="#ATOMIC_RELEASE" title="ATOMIC_RELEASE {.importc: "__ATOMIC_RELEASE", nodecl.}: AtomMemModel">ATOMIC_RELEASE</a></li>
- <li><a class="reference" href="#ATOMIC_SEQ_CST" title="ATOMIC_SEQ_CST {.importc: "__ATOMIC_SEQ_CST", nodecl.}: AtomMemModel">ATOMIC_SEQ_CST</a></li>
- </ul>
- </details>
- </li>
- <li>
- <details open>
- <summary><a class="reference reference-toplevel" href="#12" id="62">Procs</a></summary>
- <ul class="simple simple-toc-section">
- <ul class="simple nested-toc-section">atomicAddFetch
- <li><a class="reference" href="#atomicAddFetch%2Cptr.T%2CT%2CAtomMemModel" title="atomicAddFetch[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T">atomicAddFetch[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicAlwaysLockFree
- <li><a class="reference" href="#atomicAlwaysLockFree%2Cint%2Cpointer" title="atomicAlwaysLockFree(size: int; p: pointer): bool">atomicAlwaysLockFree(size: int; p: pointer): bool</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicAndFetch
- <li><a class="reference" href="#atomicAndFetch%2Cptr.T%2CT%2CAtomMemModel" title="atomicAndFetch[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T">atomicAndFetch[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicClear
- <li><a class="reference" href="#atomicClear%2Cpointer%2CAtomMemModel" title="atomicClear(p: pointer; mem: AtomMemModel)">atomicClear(p: pointer; mem: AtomMemModel)</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicCompareExchange
- <li><a class="reference" href="#atomicCompareExchange%2Cptr.T%2Cptr.T%2Cptr.T%2Cbool%2CAtomMemModel%2CAtomMemModel" title="atomicCompareExchange[T: AtomType](p, expected, desired: ptr T; weak: bool;
- success_memmodel: AtomMemModel;
- failure_memmodel: AtomMemModel): bool">atomicCompareExchange[T: AtomType](p, expected, desired: ptr T; weak: bool;
- success_memmodel: AtomMemModel;
- failure_memmodel: AtomMemModel): bool</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicCompareExchangeN
- <li><a class="reference" href="#atomicCompareExchangeN%2Cptr.T%2Cptr.T%2CT%2Cbool%2CAtomMemModel%2CAtomMemModel" title="atomicCompareExchangeN[T: AtomType](p, expected: ptr T; desired: T; weak: bool;
- success_memmodel: AtomMemModel;
- failure_memmodel: AtomMemModel): bool">atomicCompareExchangeN[T: AtomType](p, expected: ptr T; desired: T; weak: bool;
- success_memmodel: AtomMemModel;
- failure_memmodel: AtomMemModel): bool</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicDec
- <li><a class="reference" href="#atomicDec%2Cint%2Cint" title="atomicDec(memLoc: var int; x: int = 1): int">atomicDec(memLoc: var int; x: int = 1): int</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicExchange
- <li><a class="reference" href="#atomicExchange%2Cptr.T%2Cptr.T%2Cptr.T%2CAtomMemModel" title="atomicExchange[T: AtomType](p, val, ret: ptr T; mem: AtomMemModel)">atomicExchange[T: AtomType](p, val, ret: ptr T; mem: AtomMemModel)</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicExchangeN
- <li><a class="reference" href="#atomicExchangeN%2Cptr.T%2CT%2CAtomMemModel" title="atomicExchangeN[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T">atomicExchangeN[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicFetchAdd
- <li><a class="reference" href="#atomicFetchAdd%2Cptr.T%2CT%2CAtomMemModel" title="atomicFetchAdd[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T">atomicFetchAdd[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicFetchAnd
- <li><a class="reference" href="#atomicFetchAnd%2Cptr.T%2CT%2CAtomMemModel" title="atomicFetchAnd[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T">atomicFetchAnd[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicFetchNand
- <li><a class="reference" href="#atomicFetchNand%2Cptr.T%2CT%2CAtomMemModel" title="atomicFetchNand[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T">atomicFetchNand[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicFetchOr
- <li><a class="reference" href="#atomicFetchOr%2Cptr.T%2CT%2CAtomMemModel" title="atomicFetchOr[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T">atomicFetchOr[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicFetchSub
- <li><a class="reference" href="#atomicFetchSub%2Cptr.T%2CT%2CAtomMemModel" title="atomicFetchSub[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T">atomicFetchSub[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicFetchXor
- <li><a class="reference" href="#atomicFetchXor%2Cptr.T%2CT%2CAtomMemModel" title="atomicFetchXor[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T">atomicFetchXor[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicInc
- <li><a class="reference" href="#atomicInc%2Cint%2Cint" title="atomicInc(memLoc: var int; x: int = 1): int">atomicInc(memLoc: var int; x: int = 1): int</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicIsLockFree
- <li><a class="reference" href="#atomicIsLockFree%2Cint%2Cpointer" title="atomicIsLockFree(size: int; p: pointer): bool">atomicIsLockFree(size: int; p: pointer): bool</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicLoad
- <li><a class="reference" href="#atomicLoad%2Cptr.T%2Cptr.T%2CAtomMemModel" title="atomicLoad[T: AtomType](p, ret: ptr T; mem: AtomMemModel)">atomicLoad[T: AtomType](p, ret: ptr T; mem: AtomMemModel)</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicLoadN
- <li><a class="reference" href="#atomicLoadN%2Cptr.T%2CAtomMemModel" title="atomicLoadN[T: AtomType](p: ptr T; mem: AtomMemModel): T">atomicLoadN[T: AtomType](p: ptr T; mem: AtomMemModel): T</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicNandFetch
- <li><a class="reference" href="#atomicNandFetch%2Cptr.T%2CT%2CAtomMemModel" title="atomicNandFetch[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T">atomicNandFetch[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicOrFetch
- <li><a class="reference" href="#atomicOrFetch%2Cptr.T%2CT%2CAtomMemModel" title="atomicOrFetch[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T">atomicOrFetch[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicSignalFence
- <li><a class="reference" href="#atomicSignalFence%2CAtomMemModel" title="atomicSignalFence(mem: AtomMemModel)">atomicSignalFence(mem: AtomMemModel)</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicStore
- <li><a class="reference" href="#atomicStore%2Cptr.T%2Cptr.T%2CAtomMemModel" title="atomicStore[T: AtomType](p, val: ptr T; mem: AtomMemModel)">atomicStore[T: AtomType](p, val: ptr T; mem: AtomMemModel)</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicStoreN
- <li><a class="reference" href="#atomicStoreN%2Cptr.T%2CT%2CAtomMemModel" title="atomicStoreN[T: AtomType](p: ptr T; val: T; mem: AtomMemModel)">atomicStoreN[T: AtomType](p: ptr T; val: T; mem: AtomMemModel)</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicSubFetch
- <li><a class="reference" href="#atomicSubFetch%2Cptr.T%2CT%2CAtomMemModel" title="atomicSubFetch[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T">atomicSubFetch[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicTestAndSet
- <li><a class="reference" href="#atomicTestAndSet%2Cpointer%2CAtomMemModel" title="atomicTestAndSet(p: pointer; mem: AtomMemModel): bool">atomicTestAndSet(p: pointer; mem: AtomMemModel): bool</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicThreadFence
- <li><a class="reference" href="#atomicThreadFence%2CAtomMemModel" title="atomicThreadFence(mem: AtomMemModel)">atomicThreadFence(mem: AtomMemModel)</a></li>
- </ul>
- <ul class="simple nested-toc-section">atomicXorFetch
- <li><a class="reference" href="#atomicXorFetch%2Cptr.T%2CT%2CAtomMemModel" title="atomicXorFetch[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T">atomicXorFetch[T: AtomType](p: ptr T; val: T; mem: AtomMemModel): T</a></li>
- </ul>
- <ul class="simple nested-toc-section">cas
- <li><a class="reference" href="#cas%2Cptr.T%2CT%2CT" title="cas[T: bool | int | ptr](p: ptr T; oldValue, newValue: T): bool">cas[T: bool | int | ptr](p: ptr T; oldValue, newValue: T): bool</a></li>
- </ul>
- <ul class="simple nested-toc-section">cpuRelax
- <li><a class="reference" href="#cpuRelax" title="cpuRelax()">cpuRelax()</a></li>
- </ul>
- </ul>
- </details>
- </li>
- <li>
- <details open>
- <summary><a class="reference reference-toplevel" href="#18" id="68">Templates</a></summary>
- <ul class="simple simple-toc-section">
- <ul class="simple nested-toc-section">fence
- <li><a class="reference" href="#fence.t" title="fence()">fence()</a></li>
- </ul>
- </ul>
- </details>
- </li>
- </ul>
- </div>
- <div class="nine columns" id="content">
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L1" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L1" class="link-seesrc" target="_blank" >Edit</a>
- <div id="tocRoot"></div>
- <div class="deprecation-message">
- <b>Deprecated:</b> use `std/atomics` instead
- </div>
- <p class="module-desc">Perform the operation return the new value, all memory models are validPerform the operation return the old value, all memory models are valid</p>
- <div class="section" id="7">
- <h1><a class="toc-backref" href="#7">Types</a></h1>
- <dl class="item">
- <div id="AtomMemModel">
- <dt><pre><a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a> <span class="Other">=</span> <span class="Keyword">distinct</span> <a href="ctypes.html#cint"><span class="Identifier">cint</span></a></pre></dt>
- <dd>
-
-
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L26" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L26" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- <div id="AtomType">
- <dt><pre><a href="sysatomics.html#AtomType"><span class="Identifier">AtomType</span></a> <span class="Other">=</span> <a href="system.html#SomeNumber"><span class="Identifier">SomeNumber</span></a> <span class="Operator">|</span> <a href="system.html#pointer"><span class="Identifier">pointer</span></a> <span class="Operator">|</span> <span class="Keyword">ptr</span> <span class="Operator">|</span> <a href="system.html#char"><span class="Identifier">char</span></a> <span class="Operator">|</span> <a href="system.html#bool"><span class="Identifier">bool</span></a></pre></dt>
- <dd>
-
- Type Class representing valid types for use with atomic procs
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L22" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L22" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </dl>
- </div>
- <div class="section" id="8">
- <h1><a class="toc-backref" href="#8">Vars</a></h1>
- <dl class="item">
- <div id="ATOMIC_ACQ_REL">
- <dt><pre><a href="sysatomics.html#ATOMIC_ACQ_REL"><span class="Identifier">ATOMIC_ACQ_REL</span></a> {.<span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__ATOMIC_ACQ_REL"</span><span class="Other">,</span> <span class="Identifier">nodecl</span>.}<span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a></pre></dt>
- <dd>
-
- Full barrier in both directions and synchronizes with acquire loads and release stores in another thread.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L41" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L41" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- <div id="ATOMIC_ACQUIRE">
- <dt><pre><a href="sysatomics.html#ATOMIC_ACQUIRE"><span class="Identifier">ATOMIC_ACQUIRE</span></a> {.<span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__ATOMIC_ACQUIRE"</span><span class="Other">,</span> <span class="Identifier">nodecl</span>.}<span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a></pre></dt>
- <dd>
-
- Barrier to hoisting of code and synchronizes with release (or stronger) semantic stores from another thread.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L33" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L33" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- <div id="ATOMIC_CONSUME">
- <dt><pre><a href="sysatomics.html#ATOMIC_CONSUME"><span class="Identifier">ATOMIC_CONSUME</span></a> {.<span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__ATOMIC_CONSUME"</span><span class="Other">,</span> <span class="Identifier">nodecl</span>.}<span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a></pre></dt>
- <dd>
-
- Data dependency only for both barrier and synchronization with another thread.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L30" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L30" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- <div id="ATOMIC_RELAXED">
- <dt><pre><a href="sysatomics.html#ATOMIC_RELAXED"><span class="Identifier">ATOMIC_RELAXED</span></a> {.<span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__ATOMIC_RELAXED"</span><span class="Other">,</span> <span class="Identifier">nodecl</span>.}<span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a></pre></dt>
- <dd>
-
- No barriers or synchronization.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L28" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L28" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- <div id="ATOMIC_RELEASE">
- <dt><pre><a href="sysatomics.html#ATOMIC_RELEASE"><span class="Identifier">ATOMIC_RELEASE</span></a> {.<span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__ATOMIC_RELEASE"</span><span class="Other">,</span> <span class="Identifier">nodecl</span>.}<span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a></pre></dt>
- <dd>
-
- Barrier to sinking of code and synchronizes with acquire (or stronger) semantic loads from another thread.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L37" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L37" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- <div id="ATOMIC_SEQ_CST">
- <dt><pre><a href="sysatomics.html#ATOMIC_SEQ_CST"><span class="Identifier">ATOMIC_SEQ_CST</span></a> {.<span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__ATOMIC_SEQ_CST"</span><span class="Other">,</span> <span class="Identifier">nodecl</span>.}<span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a></pre></dt>
- <dd>
-
- Full barrier in both directions and synchronizes with acquire loads and release stores in all threads.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L45" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L45" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </dl>
- </div>
- <div class="section" id="12">
- <h1><a class="toc-backref" href="#12">Procs</a></h1>
- <dl class="item">
- <div id="atomicAddFetch-procs-all">
- <div id="atomicAddFetch,ptr.T,T,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicAddFetch%2Cptr.T%2CT%2CAtomMemModel"><span class="Identifier">atomicAddFetch</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <a href="sysatomics.html#AtomType"><span class="Identifier">AtomType</span></a><span class="Other">]</span><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <span class="Keyword">ptr</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">val</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">mem</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_add_fetch"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
-
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L103" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L103" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicAlwaysLockFree-procs-all">
- <div id="atomicAlwaysLockFree,int,pointer">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicAlwaysLockFree%2Cint%2Cpointer"><span class="Identifier">atomicAlwaysLockFree</span></a><span class="Other">(</span><span class="Identifier">size</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a><span class="Other">;</span> <span class="Identifier">p</span><span class="Other">:</span> <a href="system.html#pointer"><span class="Identifier">pointer</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_always_lock_free"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- This built-in function returns true if objects of size bytes always generate lock free atomic instructions for the target architecture. size must resolve to a compile-time constant and the result also resolves to a compile-time constant. ptr is an optional pointer to the object that may be used to determine alignment. A value of 0 indicates typical alignment should be used. The compiler may also ignore this parameter.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L153" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L153" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicAndFetch-procs-all">
- <div id="atomicAndFetch,ptr.T,T,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicAndFetch%2Cptr.T%2CT%2CAtomMemModel"><span class="Identifier">atomicAndFetch</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <a href="sysatomics.html#AtomType"><span class="Identifier">AtomType</span></a><span class="Other">]</span><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <span class="Keyword">ptr</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">val</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">mem</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_and_fetch"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
-
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L109" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L109" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicClear-procs-all">
- <div id="atomicClear,pointer,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicClear%2Cpointer%2CAtomMemModel"><span class="Identifier">atomicClear</span></a><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <a href="system.html#pointer"><span class="Identifier">pointer</span></a><span class="Other">;</span> <span class="Identifier">mem</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span> {.<span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_clear"</span><span class="Other">,</span>
- <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- This built-in function performs an atomic clear operation at p. After the operation, at p contains 0. ATOMIC_RELAXED, ATOMIC_SEQ_CST, ATOMIC_RELEASE
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L137" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L137" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicCompareExchange-procs-all">
- <div id="atomicCompareExchange,ptr.T,ptr.T,ptr.T,bool,AtomMemModel,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicCompareExchange%2Cptr.T%2Cptr.T%2Cptr.T%2Cbool%2CAtomMemModel%2CAtomMemModel"><span class="Identifier">atomicCompareExchange</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <a href="sysatomics.html#AtomType"><span class="Identifier">AtomType</span></a><span class="Other">]</span><span class="Other">(</span><span class="Identifier">p</span><span class="Other">,</span> <span class="Identifier">expected</span><span class="Other">,</span> <span class="Identifier">desired</span><span class="Other">:</span> <span class="Keyword">ptr</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">weak</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a><span class="Other">;</span>
- <span class="Identifier">success_memmodel</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">;</span>
- <span class="Identifier">failure_memmodel</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_compare_exchange"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- This proc implements the generic version of atomic_compare_exchange. The proc is virtually identical to atomic_compare_exchange_n, except the desired value is also a pointer.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L95" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L95" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicCompareExchangeN-procs-all">
- <div id="atomicCompareExchangeN,ptr.T,ptr.T,T,bool,AtomMemModel,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicCompareExchangeN%2Cptr.T%2Cptr.T%2CT%2Cbool%2CAtomMemModel%2CAtomMemModel"><span class="Identifier">atomicCompareExchangeN</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <a href="sysatomics.html#AtomType"><span class="Identifier">AtomType</span></a><span class="Other">]</span><span class="Other">(</span><span class="Identifier">p</span><span class="Other">,</span> <span class="Identifier">expected</span><span class="Other">:</span> <span class="Keyword">ptr</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">desired</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">;</span>
- <span class="Identifier">weak</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a><span class="Other">;</span> <span class="Identifier">success_memmodel</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">;</span> <span class="Identifier">failure_memmodel</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_compare_exchange_n"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
- <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- This proc implements an atomic compare and exchange operation. This compares the contents at p with the contents at expected and if equal, writes desired at p. If they are not equal, the current contents at p is written into expected. Weak is true for weak compare_exchange, and false for the strong variation. Many targets only offer the strong variation and ignore the parameter. When in doubt, use the strong variation. True is returned if desired is written at p and the execution is considered to conform to the memory model specified by success_memmodel. There are no restrictions on what memory model can be used here. False is returned otherwise, and the execution is considered to conform to failure_memmodel. This memory model cannot be __ATOMIC_RELEASE nor __ATOMIC_ACQ_REL. It also cannot be a stronger model than that specified by success_memmodel.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L79" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L79" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicDec-procs-all">
- <div id="atomicDec,int,int">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicDec%2Cint%2Cint"><span class="Identifier">atomicDec</span></a><span class="Other">(</span><span class="Identifier">memLoc</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="system.html#int"><span class="Identifier">int</span></a><span class="Other">;</span> <span class="Identifier">x</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a> <span class="Other">=</span> <span class="DecNumber">1</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a> {.<span class="Identifier">inline</span><span class="Other">,</span> <span class="Identifier">discardable</span><span class="Other">,</span>
- <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- Atomically decrements the integer by some <tt class="docutils literal"><span class="pre"><span class="Identifier">x</span></span></tt>. It returns the new value.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L278" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L278" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicExchange-procs-all">
- <div id="atomicExchange,ptr.T,ptr.T,ptr.T,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicExchange%2Cptr.T%2Cptr.T%2Cptr.T%2CAtomMemModel"><span class="Identifier">atomicExchange</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <a href="sysatomics.html#AtomType"><span class="Identifier">AtomType</span></a><span class="Other">]</span><span class="Other">(</span><span class="Identifier">p</span><span class="Other">,</span> <span class="Identifier">val</span><span class="Other">,</span> <span class="Identifier">ret</span><span class="Other">:</span> <span class="Keyword">ptr</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">mem</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_exchange"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- This is the generic version of an atomic exchange. It stores the contents at val at p. The original value at p is copied into ret.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L74" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L74" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicExchangeN-procs-all">
- <div id="atomicExchangeN,ptr.T,T,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicExchangeN%2Cptr.T%2CT%2CAtomMemModel"><span class="Identifier">atomicExchangeN</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <a href="sysatomics.html#AtomType"><span class="Identifier">AtomType</span></a><span class="Other">]</span><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <span class="Keyword">ptr</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">val</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">mem</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_exchange_n"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- This proc implements an atomic exchange operation. It writes val at p, and returns the previous contents at p. ATOMIC_RELAXED, ATOMIC_SEQ_CST, ATOMIC_ACQUIRE, ATOMIC_RELEASE, ATOMIC_ACQ_REL
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L68" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L68" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicFetchAdd-procs-all">
- <div id="atomicFetchAdd,ptr.T,T,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicFetchAdd%2Cptr.T%2CT%2CAtomMemModel"><span class="Identifier">atomicFetchAdd</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <a href="sysatomics.html#AtomType"><span class="Identifier">AtomType</span></a><span class="Other">]</span><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <span class="Keyword">ptr</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">val</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">mem</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_fetch_add"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
-
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L117" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L117" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicFetchAnd-procs-all">
- <div id="atomicFetchAnd,ptr.T,T,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicFetchAnd%2Cptr.T%2CT%2CAtomMemModel"><span class="Identifier">atomicFetchAnd</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <a href="sysatomics.html#AtomType"><span class="Identifier">AtomType</span></a><span class="Other">]</span><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <span class="Keyword">ptr</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">val</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">mem</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_fetch_and"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
-
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L123" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L123" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicFetchNand-procs-all">
- <div id="atomicFetchNand,ptr.T,T,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicFetchNand%2Cptr.T%2CT%2CAtomMemModel"><span class="Identifier">atomicFetchNand</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <a href="sysatomics.html#AtomType"><span class="Identifier">AtomType</span></a><span class="Other">]</span><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <span class="Keyword">ptr</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">val</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">mem</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_fetch_nand"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
-
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L127" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L127" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicFetchOr-procs-all">
- <div id="atomicFetchOr,ptr.T,T,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicFetchOr%2Cptr.T%2CT%2CAtomMemModel"><span class="Identifier">atomicFetchOr</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <a href="sysatomics.html#AtomType"><span class="Identifier">AtomType</span></a><span class="Other">]</span><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <span class="Keyword">ptr</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">val</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">mem</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_fetch_or"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
-
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L121" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L121" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicFetchSub-procs-all">
- <div id="atomicFetchSub,ptr.T,T,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicFetchSub%2Cptr.T%2CT%2CAtomMemModel"><span class="Identifier">atomicFetchSub</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <a href="sysatomics.html#AtomType"><span class="Identifier">AtomType</span></a><span class="Other">]</span><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <span class="Keyword">ptr</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">val</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">mem</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_fetch_sub"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
-
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L119" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L119" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicFetchXor-procs-all">
- <div id="atomicFetchXor,ptr.T,T,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicFetchXor%2Cptr.T%2CT%2CAtomMemModel"><span class="Identifier">atomicFetchXor</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <a href="sysatomics.html#AtomType"><span class="Identifier">AtomType</span></a><span class="Other">]</span><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <span class="Keyword">ptr</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">val</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">mem</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_fetch_xor"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
-
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L125" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L125" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicInc-procs-all">
- <div id="atomicInc,int,int">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicInc%2Cint%2Cint"><span class="Identifier">atomicInc</span></a><span class="Other">(</span><span class="Identifier">memLoc</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="system.html#int"><span class="Identifier">int</span></a><span class="Other">;</span> <span class="Identifier">x</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a> <span class="Other">=</span> <span class="DecNumber">1</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a> {.<span class="Identifier">inline</span><span class="Other">,</span> <span class="Identifier">discardable</span><span class="Other">,</span>
- <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- Atomically increments the integer by some <tt class="docutils literal"><span class="pre"><span class="Identifier">x</span></span></tt>. It returns the new value.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L267" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L267" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicIsLockFree-procs-all">
- <div id="atomicIsLockFree,int,pointer">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicIsLockFree%2Cint%2Cpointer"><span class="Identifier">atomicIsLockFree</span></a><span class="Other">(</span><span class="Identifier">size</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a><span class="Other">;</span> <span class="Identifier">p</span><span class="Other">:</span> <a href="system.html#pointer"><span class="Identifier">pointer</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_is_lock_free"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- This built-in function returns true if objects of size bytes always generate lock free atomic instructions for the target architecture. If it is not known to be lock free a call is made to a runtime routine named __atomic_is_lock_free. ptr is an optional pointer to the object that may be used to determine alignment. A value of 0 indicates typical alignment should be used. The compiler may also ignore this parameter.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L162" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L162" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicLoad-procs-all">
- <div id="atomicLoad,ptr.T,ptr.T,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicLoad%2Cptr.T%2Cptr.T%2CAtomMemModel"><span class="Identifier">atomicLoad</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <a href="sysatomics.html#AtomType"><span class="Identifier">AtomType</span></a><span class="Other">]</span><span class="Other">(</span><span class="Identifier">p</span><span class="Other">,</span> <span class="Identifier">ret</span><span class="Other">:</span> <span class="Keyword">ptr</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">mem</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_load"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- This is the generic version of an atomic load. It returns the contents at p in ret.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L55" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L55" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicLoadN-procs-all">
- <div id="atomicLoadN,ptr.T,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicLoadN%2Cptr.T%2CAtomMemModel"><span class="Identifier">atomicLoadN</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <a href="sysatomics.html#AtomType"><span class="Identifier">AtomType</span></a><span class="Other">]</span><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <span class="Keyword">ptr</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">mem</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_load_n"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- This proc implements an atomic load operation. It returns the contents at p. ATOMIC_RELAXED, ATOMIC_SEQ_CST, ATOMIC_ACQUIRE, ATOMIC_CONSUME.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L50" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L50" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicNandFetch-procs-all">
- <div id="atomicNandFetch,ptr.T,T,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicNandFetch%2Cptr.T%2CT%2CAtomMemModel"><span class="Identifier">atomicNandFetch</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <a href="sysatomics.html#AtomType"><span class="Identifier">AtomType</span></a><span class="Other">]</span><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <span class="Keyword">ptr</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">val</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">mem</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_nand_fetch"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
-
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L113" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L113" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicOrFetch-procs-all">
- <div id="atomicOrFetch,ptr.T,T,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicOrFetch%2Cptr.T%2CT%2CAtomMemModel"><span class="Identifier">atomicOrFetch</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <a href="sysatomics.html#AtomType"><span class="Identifier">AtomType</span></a><span class="Other">]</span><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <span class="Keyword">ptr</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">val</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">mem</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_or_fetch"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
-
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L107" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L107" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicSignalFence-procs-all">
- <div id="atomicSignalFence,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicSignalFence%2CAtomMemModel"><span class="Identifier">atomicSignalFence</span></a><span class="Other">(</span><span class="Identifier">mem</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span> {.<span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_signal_fence"</span><span class="Other">,</span>
- <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- This built-in function acts as a synchronization fence between a thread and signal handlers based in the same thread. All memory orders are valid.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L148" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L148" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicStore-procs-all">
- <div id="atomicStore,ptr.T,ptr.T,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicStore%2Cptr.T%2Cptr.T%2CAtomMemModel"><span class="Identifier">atomicStore</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <a href="sysatomics.html#AtomType"><span class="Identifier">AtomType</span></a><span class="Other">]</span><span class="Other">(</span><span class="Identifier">p</span><span class="Other">,</span> <span class="Identifier">val</span><span class="Other">:</span> <span class="Keyword">ptr</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">mem</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_store"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- This is the generic version of an atomic store. It stores the value of val at p
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L64" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L64" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicStoreN-procs-all">
- <div id="atomicStoreN,ptr.T,T,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicStoreN%2Cptr.T%2CT%2CAtomMemModel"><span class="Identifier">atomicStoreN</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <a href="sysatomics.html#AtomType"><span class="Identifier">AtomType</span></a><span class="Other">]</span><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <span class="Keyword">ptr</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">val</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">mem</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_store_n"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- This proc implements an atomic store operation. It writes val at p. ATOMIC_RELAXED, ATOMIC_SEQ_CST, and ATOMIC_RELEASE.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L59" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L59" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicSubFetch-procs-all">
- <div id="atomicSubFetch,ptr.T,T,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicSubFetch%2Cptr.T%2CT%2CAtomMemModel"><span class="Identifier">atomicSubFetch</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <a href="sysatomics.html#AtomType"><span class="Identifier">AtomType</span></a><span class="Other">]</span><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <span class="Keyword">ptr</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">val</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">mem</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_sub_fetch"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
-
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L105" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L105" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicTestAndSet-procs-all">
- <div id="atomicTestAndSet,pointer,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicTestAndSet%2Cpointer%2CAtomMemModel"><span class="Identifier">atomicTestAndSet</span></a><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <a href="system.html#pointer"><span class="Identifier">pointer</span></a><span class="Other">;</span> <span class="Identifier">mem</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_test_and_set"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- This built-in function performs an atomic test-and-set operation on the byte at p. The byte is set to some implementation defined nonzero "set" value and the return value is true if and only if the previous contents were "set". All memory models are valid.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L130" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L130" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicThreadFence-procs-all">
- <div id="atomicThreadFence,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicThreadFence%2CAtomMemModel"><span class="Identifier">atomicThreadFence</span></a><span class="Other">(</span><span class="Identifier">mem</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span> {.<span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_thread_fence"</span><span class="Other">,</span>
- <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
- This built-in function acts as a synchronization fence between threads based on the specified memory model. All memory orders are valid.
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L143" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L143" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="atomicXorFetch-procs-all">
- <div id="atomicXorFetch,ptr.T,T,AtomMemModel">
- <dt><pre><span class="Keyword">proc</span> <a href="#atomicXorFetch%2Cptr.T%2CT%2CAtomMemModel"><span class="Identifier">atomicXorFetch</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <a href="sysatomics.html#AtomType"><span class="Identifier">AtomType</span></a><span class="Other">]</span><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <span class="Keyword">ptr</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">val</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">mem</span><span class="Other">:</span> <a href="sysatomics.html#AtomMemModel"><span class="Identifier">AtomMemModel</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span> {.
- <span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">"__atomic_xor_fetch"</span><span class="Other">,</span> <span class="Identifier">nodecl</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
-
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L111" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L111" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="cas-procs-all">
- <div id="cas,ptr.T,T,T">
- <dt><pre><span class="Keyword">proc</span> <a href="#cas%2Cptr.T%2CT%2CT"><span class="Identifier">cas</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> <span class="Operator">|</span> <a href="system.html#int"><span class="Identifier">int</span></a> <span class="Operator">|</span> <span class="Keyword">ptr</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">p</span><span class="Other">:</span> <span class="Keyword">ptr</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">oldValue</span><span class="Other">,</span> <span class="Identifier">newValue</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a></pre></dt>
- <dd>
-
-
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L346" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L346" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- <div id="cpuRelax-procs-all">
- <div id="cpuRelax">
- <dt><pre><span class="Keyword">proc</span> <a href="#cpuRelax"><span class="Identifier">cpuRelax</span></a><span class="Other">(</span><span class="Other">)</span> {.<span class="Identifier">inline</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
- <dd>
-
-
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L358" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L358" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- </dl>
- </div>
- <div class="section" id="18">
- <h1><a class="toc-backref" href="#18">Templates</a></h1>
- <dl class="item">
- <div id="fence-templates-all">
- <div id="fence.t">
- <dt><pre><span class="Keyword">template</span> <a href="#fence.t"><span class="Identifier">fence</span></a><span class="Other">(</span><span class="Other">)</span></pre></dt>
- <dd>
-
-
- <a href="https://github.com/nim-lang/Nim/tree/devel/lib/std/sysatomics.nim#L171" class="link-seesrc" target="_blank">Source</a>
- <a href="https://github.com/nim-lang/Nim/edit/devel/lib/std/sysatomics.nim#L171" class="link-seesrc" target="_blank" >Edit</a>
- </dd>
- </div>
- </div>
- </dl>
- </div>
- </div>
- </div>
- <div class="twelve-columns footer">
- <span class="nim-sprite"></span>
- <br>
- <small style="color: var(--hint);">Made with Nim. Generated: 2025-03-15 14:13:42 UTC</small>
- </div>
- </div>
- </div>
- <script defer data-domain="nim-lang.org" src="https://plausible.io/js/plausible.js"></script>
-
- </body>
- </html>
|