433 lines
59 KiB
HTML
433 lines
59 KiB
HTML
<!-- HTML header for doxygen 1.9.1-->
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
|
<meta name="generator" content="Doxygen 1.15.0"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
<title>L4Re Operating System Framework: l4/util/bitops.h Source File</title>
|
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="jquery.js"></script>
|
|
<script type="text/javascript" src="dynsections.js"></script>
|
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="navtreedata.js"></script>
|
|
<script type="text/javascript" src="navtree.js"></script>
|
|
<script type="text/javascript" src="cookie.js"></script>
|
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
|
<script type="text/javascript" src="search/search.js"></script>
|
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
|
|
<link href="l4re-awesome.css" rel="stylesheet" type="text/css"/>
|
|
</head>
|
|
<body>
|
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
<div id="titlearea">
|
|
<table cellspacing="0" cellpadding="0">
|
|
<tbody>
|
|
<tr style="height: 56px;">
|
|
<td id="projectlogo"><img alt="Logo" src="L4Re_rgb_logo_quer_hg_h55.png"/></td>
|
|
<td id="projectalign" style="padding-left: 0.5em;">
|
|
<div id="projectname">L4Re Operating System Framework
|
|
</div>
|
|
<div id="projectbrief">Interface and Usage Documentation</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Generated by Doxygen 1.15.0 -->
|
|
<script type="text/javascript">
|
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
|
</script>
|
|
<script type="text/javascript">
|
|
$(function() { codefold.init(); });
|
|
</script>
|
|
<script type="text/javascript" src="menudata.js"></script>
|
|
<script type="text/javascript" src="menu.js"></script>
|
|
<script type="text/javascript">
|
|
$(function() {
|
|
initMenu('',true,false,'search.php','Search',true);
|
|
$(function() { init_search(); });
|
|
});
|
|
</script>
|
|
<div id="main-nav"></div>
|
|
</div><!-- top -->
|
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
|
<div id="nav-tree">
|
|
<div id="nav-tree-contents">
|
|
<div id="nav-sync" class="sync"></div>
|
|
</div>
|
|
</div>
|
|
<div id="splitbar" style="-moz-user-select:none;"
|
|
class="ui-resizable-handle">
|
|
</div>
|
|
</div>
|
|
<script type="text/javascript">
|
|
$(function(){initNavTree('bitops_8h_source.html','',''); });
|
|
</script>
|
|
<div id="container">
|
|
<div id="doc-content">
|
|
<!-- window showing the filter options -->
|
|
<div id="MSearchSelectWindow"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
</div>
|
|
|
|
<!-- iframe showing the search results (closed by default) -->
|
|
<div id="MSearchResultsWindow">
|
|
<div id="MSearchResults">
|
|
<div class="SRPage">
|
|
<div id="SRIndex">
|
|
<div id="SRResults"></div>
|
|
<div class="SRStatus" id="Loading">Loading...</div>
|
|
<div class="SRStatus" id="Searching">Searching...</div>
|
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="header">
|
|
<div class="headertitle"><div class="title">bitops.h</div></div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
<a href="bitops_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*****************************************************************************/</span></div>
|
|
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">/*</span></div>
|
|
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * (c) 2000-2009 Author(s)</span></div>
|
|
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> * economic rights: Technische Universität Dresden (Germany)</span></div>
|
|
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * License: see LICENSE.spdx (in this directory or the directories above)</span></div>
|
|
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> */</span></div>
|
|
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div>
|
|
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment">/*****************************************************************************/</span></div>
|
|
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef __L4UTIL__INCLUDE__BITOPS_H__</span></div>
|
|
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define __L4UTIL__INCLUDE__BITOPS_H__</span></div>
|
|
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
|
|
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment">/* L4 includes */</span></div>
|
|
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#include <<a class="code" href="l4_2sys_2l4int_8h.html">l4/sys/l4int.h</a>></span></div>
|
|
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include <<a class="code" href="compiler_8h.html">l4/sys/compiler.h</a>></span></div>
|
|
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span></div>
|
|
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="bitops_8h.html#ae04f8fdb0ba7298bd9622fdeaec84af1"> 24</a></span><span class="preprocessor">#define l4util_test_and_clear_bit(b, dest) l4util_btr(b, dest)</span></div>
|
|
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#define l4util_test_and_set_bit(b, dest) l4util_bts(b, dest)</span></div>
|
|
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#define l4util_test_and_change_bit(b, dest) l4util_btc(b, dest)</span></div>
|
|
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#define l4util_log2(word) l4util_bsr(word)</span></div>
|
|
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
|
|
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment">/*****************************************************************************</span></div>
|
|
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment"> *** Prototypes</span></div>
|
|
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment"> *****************************************************************************/</span></div>
|
|
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div>
|
|
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><a class="code hl_define" href="group__l4sys__defines.html#ga5f022ce5422df9cc6ed415e2bfc90f59">L4_BEGIN_DECLS</a></div>
|
|
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span></div>
|
|
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span></div>
|
|
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">void</span></div>
|
|
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><a class="code hl_function" href="group__l4util__bitops.html#ga1e5017ce33e0af71dc00a526ffa46f0b">l4util_set_bit</a>(<span class="keywordtype">int</span> b, <span class="keyword">volatile</span> <a class="code hl_typedef" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> * dest);</div>
|
|
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span></div>
|
|
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">void</span></div>
|
|
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><a class="code hl_function" href="group__l4util__bitops.html#gab1ab1fd14748d27abd7862942b5ae46b">l4util_clear_bit</a>(<span class="keywordtype">int</span> b, <span class="keyword">volatile</span> <a class="code hl_typedef" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> * dest);</div>
|
|
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span></div>
|
|
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">void</span></div>
|
|
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><a class="code hl_function" href="group__l4util__bitops.html#gaf84c2a88f1ff6e02fd813a5c8c8210ea">l4util_complement_bit</a>(<span class="keywordtype">int</span> b, <span class="keyword">volatile</span> <a class="code hl_typedef" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> * dest);</div>
|
|
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span></div>
|
|
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">int</span></div>
|
|
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><a class="code hl_function" href="group__l4util__bitops.html#gab7c484d395cb55509f16ad13adff2e92">l4util_test_bit</a>(<span class="keywordtype">int</span> b, <span class="keyword">const</span> <span class="keyword">volatile</span> <a class="code hl_typedef" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> * dest);</div>
|
|
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span></div>
|
|
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">int</span></div>
|
|
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><a class="code hl_function" href="group__l4util__bitops.html#gaa19a970e0ccba655837ac519d5adfdf0">l4util_bts</a>(<span class="keywordtype">int</span> b, <span class="keyword">volatile</span> <a class="code hl_typedef" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> * dest);</div>
|
|
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span></div>
|
|
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">int</span></div>
|
|
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><a class="code hl_function" href="group__l4util__bitops.html#ga54de534dc4cb8daba99590f38edfd12c">l4util_btr</a>(<span class="keywordtype">int</span> b, <span class="keyword">volatile</span> <a class="code hl_typedef" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> * dest);</div>
|
|
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span></div>
|
|
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">int</span></div>
|
|
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><a class="code hl_function" href="group__l4util__bitops.html#ga473ec530a3eb2d06a2d13a9df3184229">l4util_btc</a>(<span class="keywordtype">int</span> b, <span class="keyword">volatile</span> <a class="code hl_typedef" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> * dest);</div>
|
|
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span></div>
|
|
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">int</span></div>
|
|
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span><a class="code hl_function" href="group__l4util__bitops.html#ga530be11fa91000db4c4539558e115bd2">l4util_bsr</a>(<a class="code hl_typedef" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> word);</div>
|
|
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span></div>
|
|
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">int</span></div>
|
|
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><a class="code hl_function" href="group__l4util__bitops.html#ga3906818d29569abd0c82fc7ec35687f7">l4util_bsf</a>(<a class="code hl_typedef" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> word);</div>
|
|
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span></div>
|
|
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">int</span></div>
|
|
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span><a class="code hl_function" href="group__l4util__bitops.html#ga6372526aa85a7f0d425ab706aa5e29d0">l4util_find_first_set_bit</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> * dest, <a class="code hl_typedef" href="group__l4__basic__types.html#ga08c1e83a068ded7add134b188cd44967">l4_size_t</a> size);</div>
|
|
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span></div>
|
|
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">int</span></div>
|
|
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span><a class="code hl_function" href="group__l4util__bitops.html#gaac1a9ad2db5efada47175656682e0eb7">l4util_find_first_zero_bit</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> * dest, <a class="code hl_typedef" href="group__l4__basic__types.html#ga08c1e83a068ded7add134b188cd44967">l4_size_t</a> size);</div>
|
|
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> </div>
|
|
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span></div>
|
|
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">int</span></div>
|
|
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span><a class="code hl_function" href="group__l4util__bitops.html#ga30375b2869622616b5b5957261e9cb64">l4util_next_power2</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> val);</div>
|
|
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> </div>
|
|
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span><a class="code hl_define" href="group__l4sys__defines.html#ga7b3d88f2118cbb7b8057a860dbdd0381">L4_END_DECLS</a></div>
|
|
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> </div>
|
|
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span><span class="comment">/*****************************************************************************</span></div>
|
|
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span><span class="comment"> *** Implementation of specific version</span></div>
|
|
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span><span class="comment"> *****************************************************************************/</span></div>
|
|
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> </div>
|
|
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span><span class="preprocessor">#include <l4/util/bitops_arch.h></span></div>
|
|
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> </div>
|
|
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span><span class="comment">/*****************************************************************************</span></div>
|
|
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span><span class="comment"> *** Generic implementations</span></div>
|
|
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span><span class="comment"> *****************************************************************************/</span></div>
|
|
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> </div>
|
|
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span><span class="preprocessor">#ifndef __L4UTIL_BITOPS_HAVE_ARCH_SET_BIT</span></div>
|
|
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span><span class="preprocessor">#include <<a class="code" href="l4_2util_2atomic_8h.html">l4/util/atomic.h</a>></span></div>
|
|
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">void</span></div>
|
|
<div class="foldopen" id="foldopen00207" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"><a class="line" href="group__l4util__bitops.html#ga1e5017ce33e0af71dc00a526ffa46f0b"> 207</a></span><a class="code hl_function" href="group__l4util__bitops.html#ga1e5017ce33e0af71dc00a526ffa46f0b">l4util_set_bit</a>(<span class="keywordtype">int</span> b, <span class="keyword">volatile</span> <a class="code hl_typedef" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> * dest)</div>
|
|
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span>{</div>
|
|
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <a class="code hl_typedef" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> oldval, newval;</div>
|
|
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> </div>
|
|
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> dest += b / (<span class="keyword">sizeof</span>(*dest) * 8); <span class="comment">/* advance dest to the proper element */</span></div>
|
|
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> b &= <span class="keyword">sizeof</span>(*dest) * 8 - 1; <span class="comment">/* modulo; cut off all upper bits */</span></div>
|
|
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> </div>
|
|
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">do</span></div>
|
|
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> {</div>
|
|
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> oldval = *dest;</div>
|
|
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> newval = oldval | (1UL << b);</div>
|
|
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> }</div>
|
|
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">while</span> (!<a class="code hl_function" href="group__l4util__atomic.html#ga929dc4219f96656545bb658d95b0c7c2">l4util_cmpxchg</a>(dest, oldval, newval));</div>
|
|
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span><span class="preprocessor">#endif</span></div>
|
|
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> </div>
|
|
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span><span class="preprocessor">#ifndef __L4UTIL_BITOPS_HAVE_ARCH_CLEAR_BIT</span></div>
|
|
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span><span class="preprocessor">#include <<a class="code" href="l4_2util_2atomic_8h.html">l4/util/atomic.h</a>></span></div>
|
|
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">void</span></div>
|
|
<div class="foldopen" id="foldopen00226" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"><a class="line" href="group__l4util__bitops.html#gab1ab1fd14748d27abd7862942b5ae46b"> 226</a></span><a class="code hl_function" href="group__l4util__bitops.html#gab1ab1fd14748d27abd7862942b5ae46b">l4util_clear_bit</a>(<span class="keywordtype">int</span> b, <span class="keyword">volatile</span> <a class="code hl_typedef" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> * dest)</div>
|
|
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span>{</div>
|
|
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> <a class="code hl_typedef" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> oldval, newval;</div>
|
|
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> </div>
|
|
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> dest += b / (<span class="keyword">sizeof</span>(*dest) * 8);</div>
|
|
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> b &= <span class="keyword">sizeof</span>(*dest) * 8 - 1;</div>
|
|
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> </div>
|
|
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">do</span></div>
|
|
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> {</div>
|
|
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> oldval = *dest;</div>
|
|
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> newval = oldval & ~(1UL << b);</div>
|
|
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> }</div>
|
|
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">while</span> (!<a class="code hl_function" href="group__l4util__atomic.html#ga929dc4219f96656545bb658d95b0c7c2">l4util_cmpxchg</a>(dest, oldval, newval));</div>
|
|
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span><span class="preprocessor">#endif</span></div>
|
|
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> </div>
|
|
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span><span class="preprocessor">#ifndef __L4UTIL_BITOPS_HAVE_ARCH_TEST_BIT</span></div>
|
|
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">int</span></div>
|
|
<div class="foldopen" id="foldopen00244" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"><a class="line" href="group__l4util__bitops.html#gab7c484d395cb55509f16ad13adff2e92"> 244</a></span><a class="code hl_function" href="group__l4util__bitops.html#gab7c484d395cb55509f16ad13adff2e92">l4util_test_bit</a>(<span class="keywordtype">int</span> b, <span class="keyword">const</span> <span class="keyword">volatile</span> <a class="code hl_typedef" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> * dest)</div>
|
|
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span>{</div>
|
|
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> dest += b / (<span class="keyword">sizeof</span>(*dest) * 8);</div>
|
|
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> b &= <span class="keyword">sizeof</span>(*dest) * 8 - 1;</div>
|
|
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> </div>
|
|
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">return</span> (*dest >> b) & 1;</div>
|
|
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span><span class="preprocessor">#endif</span></div>
|
|
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> </div>
|
|
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span><span class="preprocessor">#ifndef __L4UTIL_BITOPS_HAVE_ARCH_BIT_TEST_AND_SET</span></div>
|
|
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span><span class="preprocessor">#include <<a class="code" href="l4_2util_2atomic_8h.html">l4/util/atomic.h</a>></span></div>
|
|
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">int</span></div>
|
|
<div class="foldopen" id="foldopen00256" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"><a class="line" href="group__l4util__bitops.html#gaa19a970e0ccba655837ac519d5adfdf0"> 256</a></span><a class="code hl_function" href="group__l4util__bitops.html#gaa19a970e0ccba655837ac519d5adfdf0">l4util_bts</a>(<span class="keywordtype">int</span> b, <span class="keyword">volatile</span> <a class="code hl_typedef" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> * dest)</div>
|
|
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span>{</div>
|
|
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> <a class="code hl_typedef" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> oldval, newval;</div>
|
|
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> </div>
|
|
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> dest += b / (<span class="keyword">sizeof</span>(*dest) * 8);</div>
|
|
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> b &= <span class="keyword">sizeof</span>(*dest) * 8 - 1;</div>
|
|
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> </div>
|
|
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">do</span></div>
|
|
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> {</div>
|
|
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> oldval = *dest;</div>
|
|
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> newval = oldval | (1UL << b);</div>
|
|
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> }</div>
|
|
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">while</span> (!<a class="code hl_function" href="group__l4util__atomic.html#ga929dc4219f96656545bb658d95b0c7c2">l4util_cmpxchg</a>(dest, oldval, newval));</div>
|
|
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> </div>
|
|
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <span class="comment">/* Return old bit */</span></div>
|
|
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> <span class="keywordflow">return</span> (oldval >> b) & 1;</div>
|
|
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span><span class="preprocessor">#endif</span></div>
|
|
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> </div>
|
|
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span><span class="preprocessor">#ifndef __L4UTIL_BITOPS_HAVE_ARCH_BIT_TEST_AND_RESET</span></div>
|
|
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span><span class="preprocessor">#include <<a class="code" href="l4_2util_2atomic_8h.html">l4/util/atomic.h</a>></span></div>
|
|
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">int</span></div>
|
|
<div class="foldopen" id="foldopen00278" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"><a class="line" href="group__l4util__bitops.html#ga54de534dc4cb8daba99590f38edfd12c"> 278</a></span><a class="code hl_function" href="group__l4util__bitops.html#ga54de534dc4cb8daba99590f38edfd12c">l4util_btr</a>(<span class="keywordtype">int</span> b, <span class="keyword">volatile</span> <a class="code hl_typedef" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> * dest)</div>
|
|
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span>{</div>
|
|
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <a class="code hl_typedef" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> oldval, newval;</div>
|
|
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> </div>
|
|
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> dest += b / (<span class="keyword">sizeof</span>(*dest) * 8);</div>
|
|
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> b &= <span class="keyword">sizeof</span>(*dest) * 8 - 1;</div>
|
|
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> </div>
|
|
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">do</span></div>
|
|
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> {</div>
|
|
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> oldval = *dest;</div>
|
|
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> newval = oldval & ~(1UL << b);</div>
|
|
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> }</div>
|
|
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">while</span> (!<a class="code hl_function" href="group__l4util__atomic.html#ga929dc4219f96656545bb658d95b0c7c2">l4util_cmpxchg</a>(dest, oldval, newval));</div>
|
|
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> </div>
|
|
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> <span class="comment">/* Return old bit */</span></div>
|
|
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> <span class="keywordflow">return</span> (oldval >> b) & 1;</div>
|
|
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span><span class="preprocessor">#endif</span></div>
|
|
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> </div>
|
|
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span><span class="preprocessor">#ifndef __L4UTIL_BITOPS_HAVE_ARCH_BIT_SCAN_REVERSE</span></div>
|
|
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">int</span></div>
|
|
<div class="foldopen" id="foldopen00299" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"><a class="line" href="group__l4util__bitops.html#ga530be11fa91000db4c4539558e115bd2"> 299</a></span><a class="code hl_function" href="group__l4util__bitops.html#ga530be11fa91000db4c4539558e115bd2">l4util_bsr</a>(<a class="code hl_typedef" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> word)</div>
|
|
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span>{</div>
|
|
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> <span class="keywordtype">int</span> i;</div>
|
|
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> </div>
|
|
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">if</span> (!word)</div>
|
|
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> <span class="keywordflow">return</span> -1;</div>
|
|
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> </div>
|
|
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">for</span> (i = 8 * <span class="keyword">sizeof</span>(word) - 1; i >= 0; i--)</div>
|
|
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> <span class="keywordflow">if</span> ((1UL << i) & word)</div>
|
|
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">return</span> i;</div>
|
|
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> </div>
|
|
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> __builtin_unreachable();</div>
|
|
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span><span class="preprocessor">#endif</span></div>
|
|
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> </div>
|
|
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span><span class="preprocessor">#ifndef __L4UTIL_BITOPS_HAVE_ARCH_BIT_SCAN_FORWARD</span></div>
|
|
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">int</span></div>
|
|
<div class="foldopen" id="foldopen00316" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"><a class="line" href="group__l4util__bitops.html#ga3906818d29569abd0c82fc7ec35687f7"> 316</a></span><a class="code hl_function" href="group__l4util__bitops.html#ga3906818d29569abd0c82fc7ec35687f7">l4util_bsf</a>(<a class="code hl_typedef" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> word)</div>
|
|
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span>{</div>
|
|
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;</div>
|
|
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> </div>
|
|
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">if</span> (!word)</div>
|
|
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">return</span> -1;</div>
|
|
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> </div>
|
|
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> <span class="keywordflow">for</span> (i = 0; i < <span class="keyword">sizeof</span>(word) * 8; i++)</div>
|
|
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> <span class="keywordflow">if</span> ((1UL << i) & word)</div>
|
|
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> <span class="keywordflow">return</span> i;</div>
|
|
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> </div>
|
|
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> __builtin_unreachable();</div>
|
|
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span><span class="preprocessor">#endif</span></div>
|
|
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> </div>
|
|
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span><span class="preprocessor">#ifndef __L4UTIL_BITOPS_HAVE_ARCH_FIND_FIRST_ZERO_BIT</span></div>
|
|
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">int</span></div>
|
|
<div class="foldopen" id="foldopen00333" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"><a class="line" href="group__l4util__bitops.html#gaac1a9ad2db5efada47175656682e0eb7"> 333</a></span><a class="code hl_function" href="group__l4util__bitops.html#gaac1a9ad2db5efada47175656682e0eb7">l4util_find_first_zero_bit</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> * dest, <a class="code hl_typedef" href="group__l4__basic__types.html#ga08c1e83a068ded7add134b188cd44967">l4_size_t</a> size)</div>
|
|
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span>{</div>
|
|
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> <a class="code hl_typedef" href="group__l4__basic__types.html#ga08c1e83a068ded7add134b188cd44967">l4_size_t</a> i, j;</div>
|
|
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *v = (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>*)dest;</div>
|
|
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> </div>
|
|
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> <span class="keywordflow">if</span> (!size)</div>
|
|
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> <span class="keywordflow">return</span> 0;</div>
|
|
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> </div>
|
|
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> size = (size + 31) & ~0x1f; <span class="comment">/* Grmbl: adapt to x86 implementation... */</span></div>
|
|
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> </div>
|
|
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">for</span> (i = j = 0; i < size; i++, j++)</div>
|
|
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> {</div>
|
|
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> <span class="keywordflow">if</span> (j >= <span class="keyword">sizeof</span>(*v) * 8)</div>
|
|
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> {</div>
|
|
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> j = 0;</div>
|
|
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> v++;</div>
|
|
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> }</div>
|
|
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> <span class="keywordflow">if</span> (!((1UL << j) & *v))</div>
|
|
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> <span class="keywordflow">return</span> i;</div>
|
|
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> }</div>
|
|
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">return</span> size + 1;</div>
|
|
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span><span class="preprocessor">#endif</span></div>
|
|
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> </div>
|
|
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span><span class="preprocessor">#ifndef __L4UTIL_BITOPS_HAVE_ARCH_COMPLEMENT_BIT</span></div>
|
|
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">void</span></div>
|
|
<div class="foldopen" id="foldopen00359" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"><a class="line" href="group__l4util__bitops.html#gaf84c2a88f1ff6e02fd813a5c8c8210ea"> 359</a></span><a class="code hl_function" href="group__l4util__bitops.html#gaf84c2a88f1ff6e02fd813a5c8c8210ea">l4util_complement_bit</a>(<span class="keywordtype">int</span> b, <span class="keyword">volatile</span> <a class="code hl_typedef" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> * dest)</div>
|
|
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span>{</div>
|
|
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> dest += b / (<span class="keyword">sizeof</span>(*dest) * 8);</div>
|
|
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> b &= <span class="keyword">sizeof</span>(*dest) * 8 - 1;</div>
|
|
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> </div>
|
|
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> *dest ^= 1UL << b;</div>
|
|
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span><span class="preprocessor">#endif</span></div>
|
|
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> </div>
|
|
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span><span class="comment">/*</span></div>
|
|
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span><span class="comment"> * Adapted from:</span></div>
|
|
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span><span class="comment"> * http://en.wikipedia.org/wiki/Power_of_two#Algorithm_to_find_the_next-highest_power_of_two</span></div>
|
|
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span><span class="comment"> */</span></div>
|
|
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">int</span></div>
|
|
<div class="foldopen" id="foldopen00373" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"><a class="line" href="group__l4util__bitops.html#ga30375b2869622616b5b5957261e9cb64"> 373</a></span><a class="code hl_function" href="group__l4util__bitops.html#ga30375b2869622616b5b5957261e9cb64">l4util_next_power2</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> val)</div>
|
|
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span>{</div>
|
|
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> <span class="keywordtype">unsigned</span> i;</div>
|
|
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> </div>
|
|
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> <span class="keywordflow">if</span> (val == 0)</div>
|
|
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">return</span> 1;</div>
|
|
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> </div>
|
|
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> val--;</div>
|
|
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> <span class="keywordflow">for</span> (i=1; i < <span class="keyword">sizeof</span>(<span class="keywordtype">unsigned</span> long)*8; i<<=1)</div>
|
|
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> val = val | val >> i;</div>
|
|
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> </div>
|
|
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> <span class="keywordflow">return</span> val+1;</div>
|
|
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> </div>
|
|
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> </div>
|
|
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span><span class="comment">/* Non-implemented version, catch with a linker warning */</span></div>
|
|
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> </div>
|
|
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span><span class="keyword">extern</span> <span class="keywordtype">int</span> __this_l4util_bitops_function_is_not_implemented_for_this_arch__sorry(<span class="keywordtype">void</span>);</div>
|
|
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> </div>
|
|
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span><span class="preprocessor">#ifndef __L4UTIL_BITOPS_HAVE_ARCH_BIT_TEST_AND_COMPLEMENT</span></div>
|
|
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">int</span></div>
|
|
<div class="foldopen" id="foldopen00394" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"><a class="line" href="group__l4util__bitops.html#ga473ec530a3eb2d06a2d13a9df3184229"> 394</a></span><a class="code hl_function" href="group__l4util__bitops.html#ga473ec530a3eb2d06a2d13a9df3184229">l4util_btc</a>(<span class="keywordtype">int</span> b, <span class="keyword">volatile</span> <a class="code hl_typedef" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> * dest)</div>
|
|
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span>{ (void)b; (void)dest; __this_l4util_bitops_function_is_not_implemented_for_this_arch__sorry(); <span class="keywordflow">return</span> 0; }</div>
|
|
</div>
|
|
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span><span class="preprocessor">#endif</span></div>
|
|
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> </div>
|
|
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span><span class="preprocessor">#ifndef __L4UTIL_BITOPS_HAVE_ARCH_FIND_FIRST_SET_BIT</span></div>
|
|
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span><a class="code hl_define" href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a> <span class="keywordtype">int</span></div>
|
|
<div class="foldopen" id="foldopen00400" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"><a class="line" href="group__l4util__bitops.html#ga6372526aa85a7f0d425ab706aa5e29d0"> 400</a></span><a class="code hl_function" href="group__l4util__bitops.html#ga6372526aa85a7f0d425ab706aa5e29d0">l4util_find_first_set_bit</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> * dest, <a class="code hl_typedef" href="group__l4__basic__types.html#ga08c1e83a068ded7add134b188cd44967">l4_size_t</a> size)</div>
|
|
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span>{ (void)dest; (void)size; __this_l4util_bitops_function_is_not_implemented_for_this_arch__sorry(); <span class="keywordflow">return</span> 0; }</div>
|
|
</div>
|
|
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span><span class="preprocessor">#endif</span></div>
|
|
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> </div>
|
|
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span><span class="preprocessor">#endif </span><span class="comment">/* ! __L4UTIL__INCLUDE__BITOPS_H__ */</span><span class="preprocessor"></span></div>
|
|
<div class="ttc" id="acompiler_8h_html"><div class="ttname"><a href="compiler_8h.html">compiler.h</a></div><div class="ttdoc">L4 compiler related defines.</div></div>
|
|
<div class="ttc" id="agroup__l4__basic__types_html_ga08c1e83a068ded7add134b188cd44967"><div class="ttname"><a href="group__l4__basic__types.html#ga08c1e83a068ded7add134b188cd44967">l4_size_t</a></div><div class="ttdeci">unsigned int l4_size_t</div><div class="ttdoc">Unsigned size type.</div><div class="ttdef"><b>Definition</b> <a href="arm_2l4_2sys_2l4int_8h_source.html#l00024">l4int.h:24</a></div></div>
|
|
<div class="ttc" id="agroup__l4__basic__types_html_ga1c2c4b333f75b1d05b59855910f2b9cb"><div class="ttname"><a href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a></div><div class="ttdeci">unsigned long l4_umword_t</div><div class="ttdoc">Unsigned machine word.</div><div class="ttdef"><b>Definition</b> <a href="l4_2sys_2l4int_8h_source.html#l00040">l4int.h:40</a></div></div>
|
|
<div class="ttc" id="agroup__l4sys__defines_html_ga427377e23e3680dc178035d391b2ca45"><div class="ttname"><a href="group__l4sys__defines.html#ga427377e23e3680dc178035d391b2ca45">L4_INLINE</a></div><div class="ttdeci">#define L4_INLINE</div><div class="ttdoc">L4 Inline function attribute.</div><div class="ttdef"><b>Definition</b> <a href="compiler_8h_source.html#l00051">compiler.h:51</a></div></div>
|
|
<div class="ttc" id="agroup__l4sys__defines_html_ga5f022ce5422df9cc6ed415e2bfc90f59"><div class="ttname"><a href="group__l4sys__defines.html#ga5f022ce5422df9cc6ed415e2bfc90f59">L4_BEGIN_DECLS</a></div><div class="ttdeci">#define L4_BEGIN_DECLS</div><div class="ttdoc">Start section with C types and functions.</div><div class="ttdef"><b>Definition</b> <a href="compiler_8h_source.html#l00165">compiler.h:165</a></div></div>
|
|
<div class="ttc" id="agroup__l4sys__defines_html_ga7b3d88f2118cbb7b8057a860dbdd0381"><div class="ttname"><a href="group__l4sys__defines.html#ga7b3d88f2118cbb7b8057a860dbdd0381">L4_END_DECLS</a></div><div class="ttdeci">#define L4_END_DECLS</div><div class="ttdoc">End section with C types and functions.</div><div class="ttdef"><b>Definition</b> <a href="compiler_8h_source.html#l00166">compiler.h:166</a></div></div>
|
|
<div class="ttc" id="agroup__l4util__atomic_html_ga929dc4219f96656545bb658d95b0c7c2"><div class="ttname"><a href="group__l4util__atomic.html#ga929dc4219f96656545bb658d95b0c7c2">l4util_cmpxchg</a></div><div class="ttdeci">int l4util_cmpxchg(volatile l4_umword_t *dest, l4_umword_t cmp_val, l4_umword_t new_val)</div><div class="ttdoc">Atomic compare and exchange (machine wide fields).</div><div class="ttdef"><b>Definition</b> <a href="l4_2util_2atomic_8h_source.html#l00379">atomic.h:379</a></div></div>
|
|
<div class="ttc" id="agroup__l4util__bitops_html_ga1e5017ce33e0af71dc00a526ffa46f0b"><div class="ttname"><a href="group__l4util__bitops.html#ga1e5017ce33e0af71dc00a526ffa46f0b">l4util_set_bit</a></div><div class="ttdeci">void l4util_set_bit(int b, volatile l4_umword_t *dest)</div><div class="ttdoc">Set bit in memory.</div><div class="ttdef"><b>Definition</b> <a href="#l00207">bitops.h:207</a></div></div>
|
|
<div class="ttc" id="agroup__l4util__bitops_html_ga30375b2869622616b5b5957261e9cb64"><div class="ttname"><a href="group__l4util__bitops.html#ga30375b2869622616b5b5957261e9cb64">l4util_next_power2</a></div><div class="ttdeci">int l4util_next_power2(unsigned long val)</div><div class="ttdoc">Find the next power of 2 for a given number.</div><div class="ttdef"><b>Definition</b> <a href="#l00373">bitops.h:373</a></div></div>
|
|
<div class="ttc" id="agroup__l4util__bitops_html_ga3906818d29569abd0c82fc7ec35687f7"><div class="ttname"><a href="group__l4util__bitops.html#ga3906818d29569abd0c82fc7ec35687f7">l4util_bsf</a></div><div class="ttdeci">int l4util_bsf(l4_umword_t word)</div><div class="ttdoc">Bit scan forward.</div><div class="ttdef"><b>Definition</b> <a href="#l00316">bitops.h:316</a></div></div>
|
|
<div class="ttc" id="agroup__l4util__bitops_html_ga473ec530a3eb2d06a2d13a9df3184229"><div class="ttname"><a href="group__l4util__bitops.html#ga473ec530a3eb2d06a2d13a9df3184229">l4util_btc</a></div><div class="ttdeci">int l4util_btc(int b, volatile l4_umword_t *dest)</div><div class="ttdoc">Bit test and complement.</div><div class="ttdef"><b>Definition</b> <a href="#l00394">bitops.h:394</a></div></div>
|
|
<div class="ttc" id="agroup__l4util__bitops_html_ga530be11fa91000db4c4539558e115bd2"><div class="ttname"><a href="group__l4util__bitops.html#ga530be11fa91000db4c4539558e115bd2">l4util_bsr</a></div><div class="ttdeci">int l4util_bsr(l4_umword_t word)</div><div class="ttdoc">Bit scan reverse.</div><div class="ttdef"><b>Definition</b> <a href="#l00299">bitops.h:299</a></div></div>
|
|
<div class="ttc" id="agroup__l4util__bitops_html_ga54de534dc4cb8daba99590f38edfd12c"><div class="ttname"><a href="group__l4util__bitops.html#ga54de534dc4cb8daba99590f38edfd12c">l4util_btr</a></div><div class="ttdeci">int l4util_btr(int b, volatile l4_umword_t *dest)</div><div class="ttdoc">Bit test and reset.</div><div class="ttdef"><b>Definition</b> <a href="#l00278">bitops.h:278</a></div></div>
|
|
<div class="ttc" id="agroup__l4util__bitops_html_ga6372526aa85a7f0d425ab706aa5e29d0"><div class="ttname"><a href="group__l4util__bitops.html#ga6372526aa85a7f0d425ab706aa5e29d0">l4util_find_first_set_bit</a></div><div class="ttdeci">int l4util_find_first_set_bit(const void *dest, l4_size_t size)</div><div class="ttdoc">Find the first set bit in a memory region.</div><div class="ttdef"><b>Definition</b> <a href="#l00400">bitops.h:400</a></div></div>
|
|
<div class="ttc" id="agroup__l4util__bitops_html_gaa19a970e0ccba655837ac519d5adfdf0"><div class="ttname"><a href="group__l4util__bitops.html#gaa19a970e0ccba655837ac519d5adfdf0">l4util_bts</a></div><div class="ttdeci">int l4util_bts(int b, volatile l4_umword_t *dest)</div><div class="ttdoc">Bit test and set.</div><div class="ttdef"><b>Definition</b> <a href="#l00256">bitops.h:256</a></div></div>
|
|
<div class="ttc" id="agroup__l4util__bitops_html_gaac1a9ad2db5efada47175656682e0eb7"><div class="ttname"><a href="group__l4util__bitops.html#gaac1a9ad2db5efada47175656682e0eb7">l4util_find_first_zero_bit</a></div><div class="ttdeci">int l4util_find_first_zero_bit(const void *dest, l4_size_t size)</div><div class="ttdoc">Find the first zero bit in a memory region.</div><div class="ttdef"><b>Definition</b> <a href="#l00333">bitops.h:333</a></div></div>
|
|
<div class="ttc" id="agroup__l4util__bitops_html_gab1ab1fd14748d27abd7862942b5ae46b"><div class="ttname"><a href="group__l4util__bitops.html#gab1ab1fd14748d27abd7862942b5ae46b">l4util_clear_bit</a></div><div class="ttdeci">void l4util_clear_bit(int b, volatile l4_umword_t *dest)</div><div class="ttdoc">Clear bit in memory.</div><div class="ttdef"><b>Definition</b> <a href="#l00226">bitops.h:226</a></div></div>
|
|
<div class="ttc" id="agroup__l4util__bitops_html_gab7c484d395cb55509f16ad13adff2e92"><div class="ttname"><a href="group__l4util__bitops.html#gab7c484d395cb55509f16ad13adff2e92">l4util_test_bit</a></div><div class="ttdeci">int l4util_test_bit(int b, const volatile l4_umword_t *dest)</div><div class="ttdoc">Test bit (return value of bit).</div><div class="ttdef"><b>Definition</b> <a href="#l00244">bitops.h:244</a></div></div>
|
|
<div class="ttc" id="agroup__l4util__bitops_html_gaf84c2a88f1ff6e02fd813a5c8c8210ea"><div class="ttname"><a href="group__l4util__bitops.html#gaf84c2a88f1ff6e02fd813a5c8c8210ea">l4util_complement_bit</a></div><div class="ttdeci">void l4util_complement_bit(int b, volatile l4_umword_t *dest)</div><div class="ttdoc">Complement bit in memory.</div><div class="ttdef"><b>Definition</b> <a href="#l00359">bitops.h:359</a></div></div>
|
|
<div class="ttc" id="al4_2sys_2l4int_8h_html"><div class="ttname"><a href="l4_2sys_2l4int_8h.html">l4int.h</a></div><div class="ttdoc">Fixed sized integer types, generic version.</div></div>
|
|
<div class="ttc" id="al4_2util_2atomic_8h_html"><div class="ttname"><a href="l4_2util_2atomic_8h.html">atomic.h</a></div><div class="ttdoc">atomic operations header and generic implementations</div></div>
|
|
</div><!-- fragment --></div><!-- contents -->
|
|
</div><!-- doc-content -->
|
|
</div><!-- container -->
|
|
<!-- HTML footer for doxygen 1.9.1-->
|
|
<!-- start footer part -->
|
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
|
<ul>
|
|
<li class="navelem"><b>l4</b></li><li class="navelem"><b>util</b></li><li class="navelem"><a href="bitops_8h.html">bitops.h</a></li>
|
|
<li class="footer">Generated on <span class="timestamp"></span> for L4Re Operating System Framework by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.15.0 </li>
|
|
</ul>
|
|
</div>
|
|
</body>
|
|
</html>
|