PageRenderTime 71ms CodeModel.GetById 28ms RepoModel.GetById 0ms app.codeStats 2ms

/lib/lpc/Core/CMSIS/Documentation/DSP_Lib/html/arm__math_8h_source.html

https://bitbucket.org/shadewind/nixiefirmware
HTML | 3817 lines | 3811 code | 2 blank | 4 comment | 0 complexity | f7b3eca46d63f63bd8e5afb289f8226b MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
  5. <title>CMSIS DSP Software Library: arm_math.h Source File</title>
  6. <link href="tabs.css" rel="stylesheet" type="text/css"/>
  7. <link href="search/search.css" rel="stylesheet" type="text/css"/>
  8. <script type="text/javaScript" src="search/search.js"></script>
  9. <link href="doxygen.css" rel="stylesheet" type="text/css"/>
  10. </head>
  11. <body onload='searchBox.OnSelectItem(0);'>
  12. <!-- Generated by Doxygen 1.7.2 -->
  13. <script type="text/javascript"><!--
  14. var searchBox = new SearchBox("searchBox", "search",false,'Search');
  15. --></script>
  16. <div class="navigation" id="top">
  17. <div class="tabs">
  18. <ul class="tablist">
  19. <li><a href="index.html"><span>Main&#160;Page</span></a></li>
  20. <li><a href="modules.html"><span>Modules</span></a></li>
  21. <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
  22. <li class="current"><a href="files.html"><span>Files</span></a></li>
  23. <li><a href="examples.html"><span>Examples</span></a></li>
  24. <li id="searchli">
  25. <div id="MSearchBox" class="MSearchBoxInactive">
  26. <span class="left">
  27. <img id="MSearchSelect" src="search/mag_sel.png"
  28. onmouseover="return searchBox.OnSearchSelectShow()"
  29. onmouseout="return searchBox.OnSearchSelectHide()"
  30. alt=""/>
  31. <input type="text" id="MSearchField" value="Search" accesskey="S"
  32. onfocus="searchBox.OnSearchFieldFocus(true)"
  33. onblur="searchBox.OnSearchFieldFocus(false)"
  34. onkeyup="searchBox.OnSearchFieldChange(event)"/>
  35. </span><span class="right">
  36. <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
  37. </span>
  38. </div>
  39. </li>
  40. </ul>
  41. </div>
  42. <div class="tabs2">
  43. <ul class="tablist">
  44. <li><a href="files.html"><span>File&#160;List</span></a></li>
  45. <li><a href="globals.html"><span>Globals</span></a></li>
  46. </ul>
  47. </div>
  48. <div class="header">
  49. <div class="headertitle">
  50. <h1>arm_math.h</h1> </div>
  51. </div>
  52. <div class="contents">
  53. <a href="arm__math_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* ---------------------------------------------------------------------- </span>
  54. <a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2010 ARM Limited. All rights reserved. </span>
  55. <a name="l00003"></a>00003 <span class="comment"> * </span>
  56. <a name="l00004"></a>00004 <span class="comment"> * $Date: 15. July 2011 </span>
  57. <a name="l00005"></a>00005 <span class="comment"> * $Revision: V1.0.10 </span>
  58. <a name="l00006"></a>00006 <span class="comment"> * </span>
  59. <a name="l00007"></a>00007 <span class="comment"> * Project: CMSIS DSP Library </span>
  60. <a name="l00008"></a>00008 <span class="comment"> * Title: arm_math.h</span>
  61. <a name="l00009"></a>00009 <span class="comment"> * </span>
  62. <a name="l00010"></a>00010 <span class="comment"> * Description: Public header file for CMSIS DSP Library</span>
  63. <a name="l00011"></a>00011 <span class="comment"> * </span>
  64. <a name="l00012"></a>00012 <span class="comment"> * Target Processor: Cortex-M4/Cortex-M3/Cortex-M0</span>
  65. <a name="l00013"></a>00013 <span class="comment"> * </span>
  66. <a name="l00014"></a>00014 <span class="comment"> * Version 1.0.10 2011/7/15 </span>
  67. <a name="l00015"></a>00015 <span class="comment"> * Big Endian support added and Merged M0 and M3/M4 Source code. </span>
  68. <a name="l00016"></a>00016 <span class="comment"> * </span>
  69. <a name="l00017"></a>00017 <span class="comment"> * Version 1.0.3 2010/11/29 </span>
  70. <a name="l00018"></a>00018 <span class="comment"> * Re-organized the CMSIS folders and updated documentation. </span>
  71. <a name="l00019"></a>00019 <span class="comment"> * </span>
  72. <a name="l00020"></a>00020 <span class="comment"> * Version 1.0.2 2010/11/11 </span>
  73. <a name="l00021"></a>00021 <span class="comment"> * Documentation updated. </span>
  74. <a name="l00022"></a>00022 <span class="comment"> * </span>
  75. <a name="l00023"></a>00023 <span class="comment"> * Version 1.0.1 2010/10/05 </span>
  76. <a name="l00024"></a>00024 <span class="comment"> * Production release and review comments incorporated. </span>
  77. <a name="l00025"></a>00025 <span class="comment"> * </span>
  78. <a name="l00026"></a>00026 <span class="comment"> * Version 1.0.0 2010/09/20 </span>
  79. <a name="l00027"></a>00027 <span class="comment"> * Production release and review comments incorporated. </span>
  80. <a name="l00028"></a>00028 <span class="comment"> * -------------------------------------------------------------------- */</span>
  81. <a name="l00029"></a>00029
  82. <a name="l00251"></a>00251 <span class="preprocessor">#ifndef _ARM_MATH_H</span>
  83. <a name="l00252"></a>00252 <span class="preprocessor"></span><span class="preprocessor">#define _ARM_MATH_H</span>
  84. <a name="l00253"></a>00253 <span class="preprocessor"></span>
  85. <a name="l00254"></a><a class="code" href="arm__math_8h.html#a87c3b351c33a90de11a2f23e67867a8a">00254</a> <span class="preprocessor">#define __CMSIS_GENERIC </span><span class="comment">/* disable NVIC and Systick functions */</span>
  86. <a name="l00255"></a>00255
  87. <a name="l00256"></a>00256 <span class="preprocessor">#if defined (ARM_MATH_CM4)</span>
  88. <a name="l00257"></a>00257 <span class="preprocessor"></span><span class="preprocessor"> #include &quot;core_cm4.h&quot;</span>
  89. <a name="l00258"></a>00258 <span class="preprocessor">#elif defined (ARM_MATH_CM3)</span>
  90. <a name="l00259"></a>00259 <span class="preprocessor"></span><span class="preprocessor"> #include &quot;core_cm3.h&quot;</span>
  91. <a name="l00260"></a>00260 <span class="preprocessor">#elif defined (ARM_MATH_CM0)</span>
  92. <a name="l00261"></a>00261 <span class="preprocessor"></span><span class="preprocessor"> #include &quot;core_cm0.h&quot;</span>
  93. <a name="l00262"></a>00262 <span class="preprocessor">#else</span>
  94. <a name="l00263"></a>00263 <span class="preprocessor"></span><span class="preprocessor">#include &quot;ARMCM4.h&quot;</span>
  95. <a name="l00264"></a>00264 <span class="preprocessor">#warning &quot;Define either ARM_MATH_CM4 OR ARM_MATH_CM3...By Default building on ARM_MATH_CM4.....&quot;</span>
  96. <a name="l00265"></a>00265 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
  97. <a name="l00266"></a>00266 <span class="preprocessor"></span>
  98. <a name="l00267"></a>00267 <span class="preprocessor">#undef __CMSIS_GENERIC </span><span class="comment">/* enable NVIC and Systick functions */</span>
  99. <a name="l00268"></a>00268 <span class="preprocessor">#include &quot;string.h&quot;</span>
  100. <a name="l00269"></a>00269 <span class="preprocessor"> #include &quot;math.h&quot;</span>
  101. <a name="l00270"></a>00270 <span class="preprocessor">#ifdef __cplusplus</span>
  102. <a name="l00271"></a>00271 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span>
  103. <a name="l00272"></a>00272 {
  104. <a name="l00273"></a>00273 <span class="preprocessor">#endif</span>
  105. <a name="l00274"></a>00274 <span class="preprocessor"></span>
  106. <a name="l00275"></a>00275
  107. <a name="l00280"></a><a class="code" href="arm__math_8h.html#aad77ae594e95c5af6ae4129bd6a483c2">00280</a> <span class="preprocessor">#define DELTA_Q31 (0x100)</span>
  108. <a name="l00281"></a><a class="code" href="arm__math_8h.html#a663277ff19ad0b409fb98b64b2c2750b">00281</a> <span class="preprocessor"></span><span class="preprocessor">#define DELTA_Q15 0x5</span>
  109. <a name="l00282"></a><a class="code" href="arm__math_8h.html#a29f839928f4752b73c8858d6dbb55294">00282</a> <span class="preprocessor"></span><span class="preprocessor">#define INDEX_MASK 0x0000003F</span>
  110. <a name="l00283"></a><a class="code" href="arm__math_8h.html#a598a3330b3c21701223ee0ca14316eca">00283</a> <span class="preprocessor"></span><span class="preprocessor">#define PI 3.14159265358979f</span>
  111. <a name="l00284"></a>00284 <span class="preprocessor"></span>
  112. <a name="l00289"></a><a class="code" href="arm__math_8h.html#a032503e76d6f69bc67e99e909c8125da">00289</a> <span class="preprocessor">#define TABLE_SIZE 256</span>
  113. <a name="l00290"></a><a class="code" href="arm__math_8h.html#a8407c9e1347d10e3bcf0a7014f1fb2ff">00290</a> <span class="preprocessor"></span><span class="preprocessor">#define TABLE_SPACING_Q31 0x800000</span>
  114. <a name="l00291"></a><a class="code" href="arm__math_8h.html#a60b0142af7be007902142add27919b82">00291</a> <span class="preprocessor"></span><span class="preprocessor">#define TABLE_SPACING_Q15 0x80</span>
  115. <a name="l00292"></a>00292 <span class="preprocessor"></span>
  116. <a name="l00296"></a>00296 <span class="comment">/* 1.31(q31) Fixed value of 2/360 */</span>
  117. <a name="l00297"></a>00297 <span class="comment">/* -1 to +1 is divided into 360 values so total spacing is (2/360) */</span>
  118. <a name="l00298"></a><a class="code" href="arm__math_8h.html#a1339e9abc11a3870e0c04f822a62166a">00298</a> <span class="preprocessor">#define INPUT_SPACING 0xB60B61</span>
  119. <a name="l00299"></a>00299 <span class="preprocessor"></span>
  120. <a name="l00300"></a>00300
  121. <a name="l00305"></a><a class="code" href="arm__math_8h.html#a5e459c6409dfcd2927bb8a57491d7cf6">00305</a> <span class="keyword">typedef</span> <span class="keyword">enum</span>
  122. <a name="l00306"></a>00306 {
  123. <a name="l00307"></a><a class="code" href="arm__math_8h.html#a5e459c6409dfcd2927bb8a57491d7cf6a9f8b2a10bd827fb4600e77d455902eb0">00307</a> <a class="code" href="arm__math_8h.html#a5e459c6409dfcd2927bb8a57491d7cf6a9f8b2a10bd827fb4600e77d455902eb0">ARM_MATH_SUCCESS</a> = 0,
  124. <a name="l00308"></a><a class="code" href="arm__math_8h.html#a5e459c6409dfcd2927bb8a57491d7cf6a74897e18d4b8f62b12a7d8a01dd2bb35">00308</a> <a class="code" href="arm__math_8h.html#a5e459c6409dfcd2927bb8a57491d7cf6a74897e18d4b8f62b12a7d8a01dd2bb35">ARM_MATH_ARGUMENT_ERROR</a> = -1,
  125. <a name="l00309"></a><a class="code" href="arm__math_8h.html#a5e459c6409dfcd2927bb8a57491d7cf6a9ae74d7f8a53aec0512ae8f0a421e0e1">00309</a> <a class="code" href="arm__math_8h.html#a5e459c6409dfcd2927bb8a57491d7cf6a9ae74d7f8a53aec0512ae8f0a421e0e1">ARM_MATH_LENGTH_ERROR</a> = -2,
  126. <a name="l00310"></a><a class="code" href="arm__math_8h.html#a5e459c6409dfcd2927bb8a57491d7cf6a7071b92f1f6bc3c5c312a237ea91105b">00310</a> <a class="code" href="arm__math_8h.html#a5e459c6409dfcd2927bb8a57491d7cf6a7071b92f1f6bc3c5c312a237ea91105b">ARM_MATH_SIZE_MISMATCH</a> = -3,
  127. <a name="l00311"></a><a class="code" href="arm__math_8h.html#a5e459c6409dfcd2927bb8a57491d7cf6ac55996aaf19245238a8f57a91aeaefcc">00311</a> <a class="code" href="arm__math_8h.html#a5e459c6409dfcd2927bb8a57491d7cf6ac55996aaf19245238a8f57a91aeaefcc">ARM_MATH_NANINF</a> = -4,
  128. <a name="l00312"></a><a class="code" href="arm__math_8h.html#a5e459c6409dfcd2927bb8a57491d7cf6a91509ea9c819dbd592ac13a6b05382dc">00312</a> <a class="code" href="arm__math_8h.html#a5e459c6409dfcd2927bb8a57491d7cf6a91509ea9c819dbd592ac13a6b05382dc">ARM_MATH_SINGULAR</a> = -5,
  129. <a name="l00313"></a><a class="code" href="arm__math_8h.html#a5e459c6409dfcd2927bb8a57491d7cf6a09457f2be656b35015fd6d36202fa376">00313</a> <a class="code" href="arm__math_8h.html#a5e459c6409dfcd2927bb8a57491d7cf6a09457f2be656b35015fd6d36202fa376">ARM_MATH_TEST_FAILURE</a> = -6
  130. <a name="l00314"></a>00314 } <a class="code" href="arm__math_8h.html#a5e459c6409dfcd2927bb8a57491d7cf6" title="Error status returned by some functions in the library.">arm_status</a>;
  131. <a name="l00315"></a>00315
  132. <a name="l00319"></a><a class="code" href="arm__math_8h.html#ae541b6f232c305361e9b416fc9eed263">00319</a> <span class="keyword">typedef</span> int8_t <a class="code" href="arm__math_8h.html#ae541b6f232c305361e9b416fc9eed263" title="8-bit fractional data type in 1.7 format.">q7_t</a>;
  133. <a name="l00320"></a>00320
  134. <a name="l00324"></a><a class="code" href="arm__math_8h.html#ab5a8fb21a5b3b983d5f54f31614052ea">00324</a> <span class="keyword">typedef</span> int16_t <a class="code" href="arm__math_8h.html#ab5a8fb21a5b3b983d5f54f31614052ea" title="16-bit fractional data type in 1.15 format.">q15_t</a>;
  135. <a name="l00325"></a>00325
  136. <a name="l00329"></a><a class="code" href="arm__math_8h.html#adc89a3547f5324b7b3b95adec3806bc0">00329</a> <span class="keyword">typedef</span> int32_t <a class="code" href="arm__math_8h.html#adc89a3547f5324b7b3b95adec3806bc0" title="32-bit fractional data type in 1.31 format.">q31_t</a>;
  137. <a name="l00330"></a>00330
  138. <a name="l00334"></a><a class="code" href="arm__math_8h.html#a5aea1cb12fc02d9d44c8abf217eaa5c6">00334</a> <span class="keyword">typedef</span> int64_t <a class="code" href="arm__math_8h.html#a5aea1cb12fc02d9d44c8abf217eaa5c6" title="64-bit fractional data type in 1.63 format.">q63_t</a>;
  139. <a name="l00335"></a>00335
  140. <a name="l00339"></a><a class="code" href="arm__math_8h.html#a4611b605e45ab401f02cab15c5e38715">00339</a> <span class="keyword">typedef</span> <span class="keywordtype">float</span> <a class="code" href="arm__math_8h.html#a4611b605e45ab401f02cab15c5e38715" title="32-bit floating-point type definition.">float32_t</a>;
  141. <a name="l00340"></a>00340
  142. <a name="l00344"></a><a class="code" href="arm__math_8h.html#ac55f3ae81b5bc9053760baacf57e47f4">00344</a> <span class="keyword">typedef</span> <span class="keywordtype">double</span> <a class="code" href="arm__math_8h.html#ac55f3ae81b5bc9053760baacf57e47f4" title="64-bit floating-point type definition.">float64_t</a>;
  143. <a name="l00345"></a>00345
  144. <a name="l00349"></a><a class="code" href="arm__math_8h.html#a9de2e0a5785be82866bcb96012282248">00349</a> <span class="preprocessor">#define __SIMD32(addr) (*(int32_t **) &amp; (addr))</span>
  145. <a name="l00350"></a>00350 <span class="preprocessor"></span>
  146. <a name="l00351"></a>00351 <span class="preprocessor">#if defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0)</span>
  147. <a name="l00352"></a>00352 <span class="preprocessor"></span>
  148. <a name="l00355"></a>00355 <span class="preprocessor">#define __PKHBT(ARG1, ARG2, ARG3) ( (((int32_t)(ARG1) &lt;&lt; 0) &amp; (int32_t)0x0000FFFF) | \</span>
  149. <a name="l00356"></a>00356 <span class="preprocessor"> (((int32_t)(ARG2) &lt;&lt; ARG3) &amp; (int32_t)0xFFFF0000) )</span>
  150. <a name="l00357"></a>00357 <span class="preprocessor"></span>
  151. <a name="l00358"></a>00358 <span class="preprocessor">#endif</span>
  152. <a name="l00359"></a>00359 <span class="preprocessor"></span>
  153. <a name="l00360"></a>00360
  154. <a name="l00364"></a>00364 <span class="preprocessor">#ifndef ARM_MATH_BIG_ENDIAN</span>
  155. <a name="l00365"></a>00365 <span class="preprocessor"></span>
  156. <a name="l00366"></a><a class="code" href="arm__math_8h.html#a3ebff224ad44c217fde9f530342e2960">00366</a> <span class="preprocessor">#define __PACKq7(v0,v1,v2,v3) ( (((int32_t)(v0) &lt;&lt; 0) &amp; (int32_t)0x000000FF) | \</span>
  157. <a name="l00367"></a>00367 <span class="preprocessor"> (((int32_t)(v1) &lt;&lt; 8) &amp; (int32_t)0x0000FF00) | \</span>
  158. <a name="l00368"></a>00368 <span class="preprocessor"> (((int32_t)(v2) &lt;&lt; 16) &amp; (int32_t)0x00FF0000) | \</span>
  159. <a name="l00369"></a>00369 <span class="preprocessor"> (((int32_t)(v3) &lt;&lt; 24) &amp; (int32_t)0xFF000000) )</span>
  160. <a name="l00370"></a>00370 <span class="preprocessor"></span><span class="preprocessor">#else </span>
  161. <a name="l00371"></a>00371 <span class="preprocessor"></span>
  162. <a name="l00372"></a>00372 <span class="preprocessor">#define __PACKq7(v0,v1,v2,v3) ( (((int32_t)(v3) &lt;&lt; 0) &amp; (int32_t)0x000000FF) | \</span>
  163. <a name="l00373"></a>00373 <span class="preprocessor"> (((int32_t)(v2) &lt;&lt; 8) &amp; (int32_t)0x0000FF00) | \</span>
  164. <a name="l00374"></a>00374 <span class="preprocessor"> (((int32_t)(v1) &lt;&lt; 16) &amp; (int32_t)0x00FF0000) | \</span>
  165. <a name="l00375"></a>00375 <span class="preprocessor"> (((int32_t)(v0) &lt;&lt; 24) &amp; (int32_t)0xFF000000) )</span>
  166. <a name="l00376"></a>00376 <span class="preprocessor"></span>
  167. <a name="l00377"></a>00377 <span class="preprocessor">#endif</span>
  168. <a name="l00378"></a>00378 <span class="preprocessor"></span>
  169. <a name="l00379"></a>00379
  170. <a name="l00383"></a><a class="code" href="arm__math_8h.html#ad7373e53d3c2e1adfeafc8c2e9720b5c">00383</a> <span class="keyword">static</span> __INLINE q31_t <a class="code" href="arm__math_8h.html#ad7373e53d3c2e1adfeafc8c2e9720b5c" title="Clips Q63 to Q31 values.">clip_q63_to_q31</a>(
  171. <a name="l00384"></a>00384 q63_t x)
  172. <a name="l00385"></a>00385 {
  173. <a name="l00386"></a>00386 <span class="keywordflow">return</span> ((q31_t) (x &gt;&gt; 32) != ((q31_t) x &gt;&gt; 31)) ?
  174. <a name="l00387"></a>00387 ((0x7FFFFFFF ^ ((<a class="code" href="arm__math_8h.html#adc89a3547f5324b7b3b95adec3806bc0" title="32-bit fractional data type in 1.31 format.">q31_t</a>) (x &gt;&gt; 63)))) : (q31_t) x;
  175. <a name="l00388"></a>00388 }
  176. <a name="l00389"></a>00389
  177. <a name="l00393"></a><a class="code" href="arm__math_8h.html#aa6f1e5d0d276f42217e75f071ca84a2e">00393</a> <span class="keyword">static</span> __INLINE q15_t <a class="code" href="arm__math_8h.html#aa6f1e5d0d276f42217e75f071ca84a2e" title="Clips Q63 to Q15 values.">clip_q63_to_q15</a>(
  178. <a name="l00394"></a>00394 q63_t x)
  179. <a name="l00395"></a>00395 {
  180. <a name="l00396"></a>00396 <span class="keywordflow">return</span> ((q31_t) (x &gt;&gt; 32) != ((q31_t) x &gt;&gt; 31)) ?
  181. <a name="l00397"></a>00397 ((0x7FFF ^ ((<a class="code" href="arm__math_8h.html#ab5a8fb21a5b3b983d5f54f31614052ea" title="16-bit fractional data type in 1.15 format.">q15_t</a>) (x &gt;&gt; 63)))) : (q15_t) (x &gt;&gt; 15);
  182. <a name="l00398"></a>00398 }
  183. <a name="l00399"></a>00399
  184. <a name="l00403"></a><a class="code" href="arm__math_8h.html#aa9918ce19228b0d4f072fb84776eabc1">00403</a> <span class="keyword">static</span> __INLINE q7_t <a class="code" href="arm__math_8h.html#aa9918ce19228b0d4f072fb84776eabc1" title="Clips Q31 to Q7 values.">clip_q31_to_q7</a>(
  185. <a name="l00404"></a>00404 q31_t x)
  186. <a name="l00405"></a>00405 {
  187. <a name="l00406"></a>00406 <span class="keywordflow">return</span> ((q31_t) (x &gt;&gt; 24) != ((q31_t) x &gt;&gt; 23)) ?
  188. <a name="l00407"></a>00407 ((0x7F ^ ((<a class="code" href="arm__math_8h.html#ae541b6f232c305361e9b416fc9eed263" title="8-bit fractional data type in 1.7 format.">q7_t</a>) (x &gt;&gt; 31)))) : (q7_t) x;
  189. <a name="l00408"></a>00408 }
  190. <a name="l00409"></a>00409
  191. <a name="l00413"></a><a class="code" href="arm__math_8h.html#a4af3ca330e14587289518e6565fd04bd">00413</a> <span class="keyword">static</span> __INLINE q15_t <a class="code" href="arm__math_8h.html#a4af3ca330e14587289518e6565fd04bd" title="Clips Q31 to Q15 values.">clip_q31_to_q15</a>(
  192. <a name="l00414"></a>00414 q31_t x)
  193. <a name="l00415"></a>00415 {
  194. <a name="l00416"></a>00416 <span class="keywordflow">return</span> ((q31_t) (x &gt;&gt; 16) != ((q31_t) x &gt;&gt; 15)) ?
  195. <a name="l00417"></a>00417 ((0x7FFF ^ ((<a class="code" href="arm__math_8h.html#ab5a8fb21a5b3b983d5f54f31614052ea" title="16-bit fractional data type in 1.15 format.">q15_t</a>) (x &gt;&gt; 31)))) : (q15_t) x;
  196. <a name="l00418"></a>00418 }
  197. <a name="l00419"></a>00419
  198. <a name="l00424"></a><a class="code" href="arm__math_8h.html#a642a29d71f7951a7f6c0b797c300b711">00424</a> <span class="keyword">static</span> __INLINE q63_t <a class="code" href="arm__math_8h.html#a642a29d71f7951a7f6c0b797c300b711" title="Multiplies 32 X 64 and returns 32 bit result in 2.30 format.">mult32x64</a>(
  199. <a name="l00425"></a>00425 q63_t x,
  200. <a name="l00426"></a>00426 q31_t y)
  201. <a name="l00427"></a>00427 {
  202. <a name="l00428"></a>00428 <span class="keywordflow">return</span> ((((q63_t) (x &amp; 0x00000000FFFFFFFF) * y) &gt;&gt; 32) +
  203. <a name="l00429"></a>00429 (((q63_t) (x &gt;&gt; 32) * y)));
  204. <a name="l00430"></a>00430 }
  205. <a name="l00431"></a>00431
  206. <a name="l00432"></a>00432
  207. <a name="l00433"></a>00433 <span class="preprocessor">#if defined (ARM_MATH_CM0) &amp;&amp; defined ( __CC_ARM )</span>
  208. <a name="l00434"></a>00434 <span class="preprocessor"></span><span class="preprocessor">#define __CLZ __clz</span>
  209. <a name="l00435"></a>00435 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
  210. <a name="l00436"></a>00436 <span class="preprocessor"></span>
  211. <a name="l00437"></a>00437 <span class="preprocessor">#if defined (ARM_MATH_CM0) &amp;&amp; ((defined (__ICCARM__)) ||(defined (__GNUC__)) || defined (__TASKING__) )</span>
  212. <a name="l00438"></a>00438 <span class="preprocessor"></span>
  213. <a name="l00439"></a>00439 uint32_t __CLZ(q31_t data);
  214. <a name="l00440"></a>00440
  215. <a name="l00441"></a>00441
  216. <a name="l00442"></a>00442 <span class="keyword">static</span> __INLINE uint32_t __CLZ(q31_t data)
  217. <a name="l00443"></a>00443 {
  218. <a name="l00444"></a>00444 uint32_t count = 0;
  219. <a name="l00445"></a>00445 uint32_t mask = 0x80000000;
  220. <a name="l00446"></a>00446
  221. <a name="l00447"></a>00447 <span class="keywordflow">while</span>((data &amp; mask) == 0)
  222. <a name="l00448"></a>00448 {
  223. <a name="l00449"></a>00449 count += 1u;
  224. <a name="l00450"></a>00450 mask = mask &gt;&gt; 1u;
  225. <a name="l00451"></a>00451 }
  226. <a name="l00452"></a>00452
  227. <a name="l00453"></a>00453 <span class="keywordflow">return</span>(count);
  228. <a name="l00454"></a>00454
  229. <a name="l00455"></a>00455 }
  230. <a name="l00456"></a>00456
  231. <a name="l00457"></a>00457 <span class="preprocessor">#endif </span>
  232. <a name="l00458"></a>00458 <span class="preprocessor"></span>
  233. <a name="l00463"></a><a class="code" href="arm__math_8h.html#a43140f04ca94c2a7394e7a222e2d8fb4">00463</a> <span class="keyword">static</span> __INLINE uint32_t <a class="code" href="arm__math_8h.html#a43140f04ca94c2a7394e7a222e2d8fb4" title="Function to Calculates 1/in(reciprocal) value of Q31 Data type.">arm_recip_q31</a>(
  234. <a name="l00464"></a>00464 q31_t in,
  235. <a name="l00465"></a>00465 q31_t * dst,
  236. <a name="l00466"></a>00466 q31_t * pRecipTable)
  237. <a name="l00467"></a>00467 {
  238. <a name="l00468"></a>00468
  239. <a name="l00469"></a>00469 uint32_t out, tempVal;
  240. <a name="l00470"></a>00470 uint32_t index, i;
  241. <a name="l00471"></a>00471 uint32_t signBits;
  242. <a name="l00472"></a>00472
  243. <a name="l00473"></a>00473 <span class="keywordflow">if</span>(in &gt; 0)
  244. <a name="l00474"></a>00474 {
  245. <a name="l00475"></a>00475 signBits = __CLZ(in) - 1;
  246. <a name="l00476"></a>00476 }
  247. <a name="l00477"></a>00477 <span class="keywordflow">else</span>
  248. <a name="l00478"></a>00478 {
  249. <a name="l00479"></a>00479 signBits = __CLZ(-in) - 1;
  250. <a name="l00480"></a>00480 }
  251. <a name="l00481"></a>00481
  252. <a name="l00482"></a>00482 <span class="comment">/* Convert input sample to 1.31 format */</span>
  253. <a name="l00483"></a>00483 in = in &lt;&lt; signBits;
  254. <a name="l00484"></a>00484
  255. <a name="l00485"></a>00485 <span class="comment">/* calculation of index for initial approximated Val */</span>
  256. <a name="l00486"></a>00486 index = (uint32_t) (in &gt;&gt; 24u);
  257. <a name="l00487"></a>00487 index = (index &amp; <a class="code" href="arm__math_8h.html#a29f839928f4752b73c8858d6dbb55294">INDEX_MASK</a>);
  258. <a name="l00488"></a>00488
  259. <a name="l00489"></a>00489 <span class="comment">/* 1.31 with exp 1 */</span>
  260. <a name="l00490"></a>00490 out = pRecipTable[index];
  261. <a name="l00491"></a>00491
  262. <a name="l00492"></a>00492 <span class="comment">/* calculation of reciprocal value */</span>
  263. <a name="l00493"></a>00493 <span class="comment">/* running approximation for two iterations */</span>
  264. <a name="l00494"></a>00494 <span class="keywordflow">for</span> (i = 0u; i &lt; 2u; i++)
  265. <a name="l00495"></a>00495 {
  266. <a name="l00496"></a>00496 tempVal = (<a class="code" href="arm__math_8h.html#adc89a3547f5324b7b3b95adec3806bc0" title="32-bit fractional data type in 1.31 format.">q31_t</a>) (((q63_t) in * out) &gt;&gt; 31u);
  267. <a name="l00497"></a>00497 tempVal = 0x7FFFFFFF - tempVal;
  268. <a name="l00498"></a>00498 <span class="comment">/* 1.31 with exp 1 */</span>
  269. <a name="l00499"></a>00499 <span class="comment">//out = (q31_t) (((q63_t) out * tempVal) &gt;&gt; 30u);</span>
  270. <a name="l00500"></a>00500 out = (<a class="code" href="arm__math_8h.html#adc89a3547f5324b7b3b95adec3806bc0" title="32-bit fractional data type in 1.31 format.">q31_t</a>) <a class="code" href="arm__math_8h.html#ad7373e53d3c2e1adfeafc8c2e9720b5c" title="Clips Q63 to Q31 values.">clip_q63_to_q31</a>(((q63_t) out * tempVal) &gt;&gt; 30u);
  271. <a name="l00501"></a>00501 }
  272. <a name="l00502"></a>00502
  273. <a name="l00503"></a>00503 <span class="comment">/* write output */</span>
  274. <a name="l00504"></a>00504 *dst = out;
  275. <a name="l00505"></a>00505
  276. <a name="l00506"></a>00506 <span class="comment">/* return num of signbits of out = 1/in value */</span>
  277. <a name="l00507"></a>00507 <span class="keywordflow">return</span> (signBits + 1u);
  278. <a name="l00508"></a>00508
  279. <a name="l00509"></a>00509 }
  280. <a name="l00510"></a>00510
  281. <a name="l00514"></a><a class="code" href="arm__math_8h.html#a1c66e370a6ae91aaafbaec5e979198d7">00514</a> <span class="keyword">static</span> __INLINE uint32_t <a class="code" href="arm__math_8h.html#a1c66e370a6ae91aaafbaec5e979198d7" title="Function to Calculates 1/in(reciprocal) value of Q15 Data type.">arm_recip_q15</a>(
  282. <a name="l00515"></a>00515 q15_t in,
  283. <a name="l00516"></a>00516 q15_t * dst,
  284. <a name="l00517"></a>00517 q15_t * pRecipTable)
  285. <a name="l00518"></a>00518 {
  286. <a name="l00519"></a>00519
  287. <a name="l00520"></a>00520 uint32_t out = 0, tempVal = 0;
  288. <a name="l00521"></a>00521 uint32_t index = 0, i = 0;
  289. <a name="l00522"></a>00522 uint32_t signBits = 0;
  290. <a name="l00523"></a>00523
  291. <a name="l00524"></a>00524 <span class="keywordflow">if</span>(in &gt; 0)
  292. <a name="l00525"></a>00525 {
  293. <a name="l00526"></a>00526 signBits = __CLZ(in) - 17;
  294. <a name="l00527"></a>00527 }
  295. <a name="l00528"></a>00528 <span class="keywordflow">else</span>
  296. <a name="l00529"></a>00529 {
  297. <a name="l00530"></a>00530 signBits = __CLZ(-in) - 17;
  298. <a name="l00531"></a>00531 }
  299. <a name="l00532"></a>00532
  300. <a name="l00533"></a>00533 <span class="comment">/* Convert input sample to 1.15 format */</span>
  301. <a name="l00534"></a>00534 in = in &lt;&lt; signBits;
  302. <a name="l00535"></a>00535
  303. <a name="l00536"></a>00536 <span class="comment">/* calculation of index for initial approximated Val */</span>
  304. <a name="l00537"></a>00537 index = in &gt;&gt; 8;
  305. <a name="l00538"></a>00538 index = (index &amp; <a class="code" href="arm__math_8h.html#a29f839928f4752b73c8858d6dbb55294">INDEX_MASK</a>);
  306. <a name="l00539"></a>00539
  307. <a name="l00540"></a>00540 <span class="comment">/* 1.15 with exp 1 */</span>
  308. <a name="l00541"></a>00541 out = pRecipTable[index];
  309. <a name="l00542"></a>00542
  310. <a name="l00543"></a>00543 <span class="comment">/* calculation of reciprocal value */</span>
  311. <a name="l00544"></a>00544 <span class="comment">/* running approximation for two iterations */</span>
  312. <a name="l00545"></a>00545 <span class="keywordflow">for</span> (i = 0; i &lt; 2; i++)
  313. <a name="l00546"></a>00546 {
  314. <a name="l00547"></a>00547 tempVal = (<a class="code" href="arm__math_8h.html#ab5a8fb21a5b3b983d5f54f31614052ea" title="16-bit fractional data type in 1.15 format.">q15_t</a>) (((q31_t) in * out) &gt;&gt; 15);
  315. <a name="l00548"></a>00548 tempVal = 0x7FFF - tempVal;
  316. <a name="l00549"></a>00549 <span class="comment">/* 1.15 with exp 1 */</span>
  317. <a name="l00550"></a>00550 out = (<a class="code" href="arm__math_8h.html#ab5a8fb21a5b3b983d5f54f31614052ea" title="16-bit fractional data type in 1.15 format.">q15_t</a>) (((q31_t) out * tempVal) &gt;&gt; 14);
  318. <a name="l00551"></a>00551 }
  319. <a name="l00552"></a>00552
  320. <a name="l00553"></a>00553 <span class="comment">/* write output */</span>
  321. <a name="l00554"></a>00554 *dst = out;
  322. <a name="l00555"></a>00555
  323. <a name="l00556"></a>00556 <span class="comment">/* return num of signbits of out = 1/in value */</span>
  324. <a name="l00557"></a>00557 <span class="keywordflow">return</span> (signBits + 1);
  325. <a name="l00558"></a>00558
  326. <a name="l00559"></a>00559 }
  327. <a name="l00560"></a>00560
  328. <a name="l00561"></a>00561
  329. <a name="l00562"></a>00562 <span class="comment">/*</span>
  330. <a name="l00563"></a>00563 <span class="comment"> * @brief C custom defined intrinisic function for only M0 processors</span>
  331. <a name="l00564"></a>00564 <span class="comment"> */</span>
  332. <a name="l00565"></a>00565 <span class="preprocessor">#if defined(ARM_MATH_CM0)</span>
  333. <a name="l00566"></a>00566 <span class="preprocessor"></span>
  334. <a name="l00567"></a>00567 <span class="keyword">static</span> __INLINE q31_t __SSAT(
  335. <a name="l00568"></a>00568 q31_t x,
  336. <a name="l00569"></a>00569 uint32_t y)
  337. <a name="l00570"></a>00570 {
  338. <a name="l00571"></a>00571 int32_t posMax, negMin;
  339. <a name="l00572"></a>00572 uint32_t i;
  340. <a name="l00573"></a>00573
  341. <a name="l00574"></a>00574 posMax = 1;
  342. <a name="l00575"></a>00575 <span class="keywordflow">for</span> (i = 0; i &lt; (y - 1); i++)
  343. <a name="l00576"></a>00576 {
  344. <a name="l00577"></a>00577 posMax = posMax * 2;
  345. <a name="l00578"></a>00578 }
  346. <a name="l00579"></a>00579
  347. <a name="l00580"></a>00580 <span class="keywordflow">if</span>(x &gt; 0)
  348. <a name="l00581"></a>00581 {
  349. <a name="l00582"></a>00582 posMax = (posMax - 1);
  350. <a name="l00583"></a>00583
  351. <a name="l00584"></a>00584 <span class="keywordflow">if</span>(x &gt; posMax)
  352. <a name="l00585"></a>00585 {
  353. <a name="l00586"></a>00586 x = posMax;
  354. <a name="l00587"></a>00587 }
  355. <a name="l00588"></a>00588 }
  356. <a name="l00589"></a>00589 <span class="keywordflow">else</span>
  357. <a name="l00590"></a>00590 {
  358. <a name="l00591"></a>00591 negMin = -posMax;
  359. <a name="l00592"></a>00592
  360. <a name="l00593"></a>00593 <span class="keywordflow">if</span>(x &lt; negMin)
  361. <a name="l00594"></a>00594 {
  362. <a name="l00595"></a>00595 x = negMin;
  363. <a name="l00596"></a>00596 }
  364. <a name="l00597"></a>00597 }
  365. <a name="l00598"></a>00598 <span class="keywordflow">return</span> (x);
  366. <a name="l00599"></a>00599
  367. <a name="l00600"></a>00600
  368. <a name="l00601"></a>00601 }
  369. <a name="l00602"></a>00602
  370. <a name="l00603"></a>00603 <span class="preprocessor">#endif </span><span class="comment">/* end of ARM_MATH_CM0 */</span>
  371. <a name="l00604"></a>00604
  372. <a name="l00605"></a>00605
  373. <a name="l00606"></a>00606
  374. <a name="l00607"></a>00607 <span class="comment">/*</span>
  375. <a name="l00608"></a>00608 <span class="comment"> * @brief C custom defined intrinsic function for M3 and M0 processors</span>
  376. <a name="l00609"></a>00609 <span class="comment"> */</span>
  377. <a name="l00610"></a>00610 <span class="preprocessor">#if defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0)</span>
  378. <a name="l00611"></a>00611 <span class="preprocessor"></span>
  379. <a name="l00612"></a>00612 <span class="comment">/*</span>
  380. <a name="l00613"></a>00613 <span class="comment"> * @brief C custom defined QADD8 for M3 and M0 processors</span>
  381. <a name="l00614"></a>00614 <span class="comment"> */</span>
  382. <a name="l00615"></a>00615 <span class="keyword">static</span> __INLINE q31_t __QADD8(
  383. <a name="l00616"></a>00616 q31_t x,
  384. <a name="l00617"></a>00617 q31_t y)
  385. <a name="l00618"></a>00618 {
  386. <a name="l00619"></a>00619
  387. <a name="l00620"></a>00620 q31_t sum;
  388. <a name="l00621"></a>00621 q7_t r, s, t, u;
  389. <a name="l00622"></a>00622
  390. <a name="l00623"></a>00623 r = (char) x;
  391. <a name="l00624"></a>00624 s = (char) y;
  392. <a name="l00625"></a>00625
  393. <a name="l00626"></a>00626 r = __SSAT((q31_t) (r + s), 8);
  394. <a name="l00627"></a>00627 s = __SSAT(((q31_t) (((x &lt;&lt; 16) &gt;&gt; 24) + ((y &lt;&lt; 16) &gt;&gt; 24))), 8);
  395. <a name="l00628"></a>00628 t = __SSAT(((q31_t) (((x &lt;&lt; 8) &gt;&gt; 24) + ((y &lt;&lt; 8) &gt;&gt; 24))), 8);
  396. <a name="l00629"></a>00629 u = __SSAT(((q31_t) ((x &gt;&gt; 24) + (y &gt;&gt; 24))), 8);
  397. <a name="l00630"></a>00630
  398. <a name="l00631"></a>00631 sum = (((<a class="code" href="arm__math_8h.html#adc89a3547f5324b7b3b95adec3806bc0" title="32-bit fractional data type in 1.31 format.">q31_t</a>) u &lt;&lt; 24) &amp; 0xFF000000) | (((q31_t) t &lt;&lt; 16) &amp; 0x00FF0000) |
  399. <a name="l00632"></a>00632 (((<a class="code" href="arm__math_8h.html#adc89a3547f5324b7b3b95adec3806bc0" title="32-bit fractional data type in 1.31 format.">q31_t</a>) s &lt;&lt; 8) &amp; 0x0000FF00) | (r &amp; 0x000000FF);
  400. <a name="l00633"></a>00633
  401. <a name="l00634"></a>00634 <span class="keywordflow">return</span> sum;
  402. <a name="l00635"></a>00635
  403. <a name="l00636"></a>00636 }
  404. <a name="l00637"></a>00637
  405. <a name="l00638"></a>00638 <span class="comment">/*</span>
  406. <a name="l00639"></a>00639 <span class="comment"> * @brief C custom defined QSUB8 for M3 and M0 processors</span>
  407. <a name="l00640"></a>00640 <span class="comment"> */</span>
  408. <a name="l00641"></a>00641 <span class="keyword">static</span> __INLINE q31_t __QSUB8(
  409. <a name="l00642"></a>00642 q31_t x,
  410. <a name="l00643"></a>00643 q31_t y)
  411. <a name="l00644"></a>00644 {
  412. <a name="l00645"></a>00645
  413. <a name="l00646"></a>00646 q31_t sum;
  414. <a name="l00647"></a>00647 q31_t r, s, t, u;
  415. <a name="l00648"></a>00648
  416. <a name="l00649"></a>00649 r = (char) x;
  417. <a name="l00650"></a>00650 s = (char) y;
  418. <a name="l00651"></a>00651
  419. <a name="l00652"></a>00652 r = __SSAT((r - s), 8);
  420. <a name="l00653"></a>00653 s = __SSAT(((q31_t) (((x &lt;&lt; 16) &gt;&gt; 24) - ((y &lt;&lt; 16) &gt;&gt; 24))), 8) &lt;&lt; 8;
  421. <a name="l00654"></a>00654 t = __SSAT(((q31_t) (((x &lt;&lt; 8) &gt;&gt; 24) - ((y &lt;&lt; 8) &gt;&gt; 24))), 8) &lt;&lt; 16;
  422. <a name="l00655"></a>00655 u = __SSAT(((q31_t) ((x &gt;&gt; 24) - (y &gt;&gt; 24))), 8) &lt;&lt; 24;
  423. <a name="l00656"></a>00656
  424. <a name="l00657"></a>00657 sum =
  425. <a name="l00658"></a>00658 (u &amp; 0xFF000000) | (t &amp; 0x00FF0000) | (s &amp; 0x0000FF00) | (r &amp; 0x000000FF);
  426. <a name="l00659"></a>00659
  427. <a name="l00660"></a>00660 <span class="keywordflow">return</span> sum;
  428. <a name="l00661"></a>00661 }
  429. <a name="l00662"></a>00662
  430. <a name="l00663"></a>00663 <span class="comment">/*</span>
  431. <a name="l00664"></a>00664 <span class="comment"> * @brief C custom defined QADD16 for M3 and M0 processors</span>
  432. <a name="l00665"></a>00665 <span class="comment"> */</span>
  433. <a name="l00666"></a>00666
  434. <a name="l00667"></a>00667 <span class="comment">/*</span>
  435. <a name="l00668"></a>00668 <span class="comment"> * @brief C custom defined QADD16 for M3 and M0 processors</span>
  436. <a name="l00669"></a>00669 <span class="comment"> */</span>
  437. <a name="l00670"></a>00670 <span class="keyword">static</span> __INLINE q31_t __QADD16(
  438. <a name="l00671"></a>00671 q31_t x,
  439. <a name="l00672"></a>00672 q31_t y)
  440. <a name="l00673"></a>00673 {
  441. <a name="l00674"></a>00674
  442. <a name="l00675"></a>00675 q31_t sum;
  443. <a name="l00676"></a>00676 q31_t r, s;
  444. <a name="l00677"></a>00677
  445. <a name="l00678"></a>00678 r = (short) x;
  446. <a name="l00679"></a>00679 s = (short) y;
  447. <a name="l00680"></a>00680
  448. <a name="l00681"></a>00681 r = __SSAT(r + s, 16);
  449. <a name="l00682"></a>00682 s = __SSAT(((q31_t) ((x &gt;&gt; 16) + (y &gt;&gt; 16))), 16) &lt;&lt; 16;
  450. <a name="l00683"></a>00683
  451. <a name="l00684"></a>00684 sum = (s &amp; 0xFFFF0000) | (r &amp; 0x0000FFFF);
  452. <a name="l00685"></a>00685
  453. <a name="l00686"></a>00686 <span class="keywordflow">return</span> sum;
  454. <a name="l00687"></a>00687
  455. <a name="l00688"></a>00688 }
  456. <a name="l00689"></a>00689
  457. <a name="l00690"></a>00690 <span class="comment">/*</span>
  458. <a name="l00691"></a>00691 <span class="comment"> * @brief C custom defined SHADD16 for M3 and M0 processors</span>
  459. <a name="l00692"></a>00692 <span class="comment"> */</span>
  460. <a name="l00693"></a>00693 <span class="keyword">static</span> __INLINE q31_t __SHADD16(
  461. <a name="l00694"></a>00694 q31_t x,
  462. <a name="l00695"></a>00695 q31_t y)
  463. <a name="l00696"></a>00696 {
  464. <a name="l00697"></a>00697
  465. <a name="l00698"></a>00698 q31_t sum;
  466. <a name="l00699"></a>00699 q31_t r, s;
  467. <a name="l00700"></a>00700
  468. <a name="l00701"></a>00701 r = (short) x;
  469. <a name="l00702"></a>00702 s = (short) y;
  470. <a name="l00703"></a>00703
  471. <a name="l00704"></a>00704 r = ((r &gt;&gt; 1) + (s &gt;&gt; 1));
  472. <a name="l00705"></a>00705 s = ((<a class="code" href="arm__math_8h.html#adc89a3547f5324b7b3b95adec3806bc0" title="32-bit fractional data type in 1.31 format.">q31_t</a>) ((x &gt;&gt; 17) + (y &gt;&gt; 17))) &lt;&lt; 16;
  473. <a name="l00706"></a>00706
  474. <a name="l00707"></a>00707 sum = (s &amp; 0xFFFF0000) | (r &amp; 0x0000FFFF);
  475. <a name="l00708"></a>00708
  476. <a name="l00709"></a>00709 <span class="keywordflow">return</span> sum;
  477. <a name="l00710"></a>00710
  478. <a name="l00711"></a>00711 }
  479. <a name="l00712"></a>00712
  480. <a name="l00713"></a>00713 <span class="comment">/*</span>
  481. <a name="l00714"></a>00714 <span class="comment"> * @brief C custom defined QSUB16 for M3 and M0 processors</span>
  482. <a name="l00715"></a>00715 <span class="comment"> */</span>
  483. <a name="l00716"></a>00716 <span class="keyword">static</span> __INLINE q31_t __QSUB16(
  484. <a name="l00717"></a>00717 q31_t x,
  485. <a name="l00718"></a>00718 q31_t y)
  486. <a name="l00719"></a>00719 {
  487. <a name="l00720"></a>00720
  488. <a name="l00721"></a>00721 q31_t sum;
  489. <a name="l00722"></a>00722 q31_t r, s;
  490. <a name="l00723"></a>00723
  491. <a name="l00724"></a>00724 r = (short) x;
  492. <a name="l00725"></a>00725 s = (short) y;
  493. <a name="l00726"></a>00726
  494. <a name="l00727"></a>00727 r = __SSAT(r - s, 16);
  495. <a name="l00728"></a>00728 s = __SSAT(((q31_t) ((x &gt;&gt; 16) - (y &gt;&gt; 16))), 16) &lt;&lt; 16;
  496. <a name="l00729"></a>00729
  497. <a name="l00730"></a>00730 sum = (s &amp; 0xFFFF0000) | (r &amp; 0x0000FFFF);
  498. <a name="l00731"></a>00731
  499. <a name="l00732"></a>00732 <span class="keywordflow">return</span> sum;
  500. <a name="l00733"></a>00733 }
  501. <a name="l00734"></a>00734
  502. <a name="l00735"></a>00735 <span class="comment">/*</span>
  503. <a name="l00736"></a>00736 <span class="comment"> * @brief C custom defined SHSUB16 for M3 and M0 processors</span>
  504. <a name="l00737"></a>00737 <span class="comment"> */</span>
  505. <a name="l00738"></a>00738 <span class="keyword">static</span> __INLINE q31_t __SHSUB16(
  506. <a name="l00739"></a>00739 q31_t x,
  507. <a name="l00740"></a>00740 q31_t y)
  508. <a name="l00741"></a>00741 {
  509. <a name="l00742"></a>00742
  510. <a name="l00743"></a>00743 q31_t diff;
  511. <a name="l00744"></a>00744 q31_t r, s;
  512. <a name="l00745"></a>00745
  513. <a name="l00746"></a>00746 r = (short) x;
  514. <a name="l00747"></a>00747 s = (short) y;
  515. <a name="l00748"></a>00748
  516. <a name="l00749"></a>00749 r = ((r &gt;&gt; 1) - (s &gt;&gt; 1));
  517. <a name="l00750"></a>00750 s = (((x &gt;&gt; 17) - (y &gt;&gt; 17)) &lt;&lt; 16);
  518. <a name="l00751"></a>00751
  519. <a name="l00752"></a>00752 diff = (s &amp; 0xFFFF0000) | (r &amp; 0x0000FFFF);
  520. <a name="l00753"></a>00753
  521. <a name="l00754"></a>00754 <span class="keywordflow">return</span> diff;
  522. <a name="l00755"></a>00755 }
  523. <a name="l00756"></a>00756
  524. <a name="l00757"></a>00757 <span class="comment">/*</span>
  525. <a name="l00758"></a>00758 <span class="comment"> * @brief C custom defined QASX for M3 and M0 processors</span>
  526. <a name="l00759"></a>00759 <span class="comment"> */</span>
  527. <a name="l00760"></a>00760 <span class="keyword">static</span> __INLINE q31_t __QASX(
  528. <a name="l00761"></a>00761 q31_t x,
  529. <a name="l00762"></a>00762 q31_t y)
  530. <a name="l00763"></a>00763 {
  531. <a name="l00764"></a>00764
  532. <a name="l00765"></a>00765 q31_t sum = 0;
  533. <a name="l00766"></a>00766
  534. <a name="l00767"></a>00767 sum = ((sum + <a class="code" href="arm__math_8h.html#a4af3ca330e14587289518e6565fd04bd" title="Clips Q31 to Q15 values.">clip_q31_to_q15</a>((q31_t) ((<span class="keywordtype">short</span>) (x &gt;&gt; 16) + (<span class="keywordtype">short</span>) y))) &lt;&lt; 16) +
  535. <a name="l00768"></a>00768 <a class="code" href="arm__math_8h.html#a4af3ca330e14587289518e6565fd04bd" title="Clips Q31 to Q15 values.">clip_q31_to_q15</a>((q31_t) ((<span class="keywordtype">short</span>) x - (<span class="keywordtype">short</span>) (y &gt;&gt; 16)));
  536. <a name="l00769"></a>00769
  537. <a name="l00770"></a>00770 <span class="keywordflow">return</span> sum;
  538. <a name="l00771"></a>00771 }
  539. <a name="l00772"></a>00772
  540. <a name="l00773"></a>00773 <span class="comment">/*</span>
  541. <a name="l00774"></a>00774 <span class="comment"> * @brief C custom defined SHASX for M3 and M0 processors</span>
  542. <a name="l00775"></a>00775 <span class="comment"> */</span>
  543. <a name="l00776"></a>00776 <span class="keyword">static</span> __INLINE q31_t __SHASX(
  544. <a name="l00777"></a>00777 q31_t x,
  545. <a name="l00778"></a>00778 q31_t y)
  546. <a name="l00779"></a>00779 {
  547. <a name="l00780"></a>00780
  548. <a name="l00781"></a>00781 q31_t sum;
  549. <a name="l00782"></a>00782 q31_t r, s;
  550. <a name="l00783"></a>00783
  551. <a name="l00784"></a>00784 r = (short) x;
  552. <a name="l00785"></a>00785 s = (short) y;
  553. <a name="l00786"></a>00786
  554. <a name="l00787"></a>00787 r = ((r &gt;&gt; 1) - (y &gt;&gt; 17));
  555. <a name="l00788"></a>00788 s = (((x &gt;&gt; 17) + (s &gt;&gt; 1)) &lt;&lt; 16);
  556. <a name="l00789"></a>00789
  557. <a name="l00790"></a>00790 sum = (s &amp; 0xFFFF0000) | (r &amp; 0x0000FFFF);
  558. <a name="l00791"></a>00791
  559. <a name="l00792"></a>00792 <span class="keywordflow">return</span> sum;
  560. <a name="l00793"></a>00793 }
  561. <a name="l00794"></a>00794
  562. <a name="l00795"></a>00795
  563. <a name="l00796"></a>00796 <span class="comment">/*</span>
  564. <a name="l00797"></a>00797 <span class="comment"> * @brief C custom defined QSAX for M3 and M0 processors</span>
  565. <a name="l00798"></a>00798 <span class="comment"> */</span>
  566. <a name="l00799"></a>00799 <span class="keyword">static</span> __INLINE q31_t __QSAX(
  567. <a name="l00800"></a>00800 q31_t x,
  568. <a name="l00801"></a>00801 q31_t y)
  569. <a name="l00802"></a>00802 {
  570. <a name="l00803"></a>00803
  571. <a name="l00804"></a>00804 q31_t sum = 0;
  572. <a name="l00805"></a>00805
  573. <a name="l00806"></a>00806 sum = ((sum + <a class="code" href="arm__math_8h.html#a4af3ca330e14587289518e6565fd04bd" title="Clips Q31 to Q15 values.">clip_q31_to_q15</a>((q31_t) ((<span class="keywordtype">short</span>) (x &gt;&gt; 16) - (<span class="keywordtype">short</span>) y))) &lt;&lt; 16) +
  574. <a name="l00807"></a>00807 <a class="code" href="arm__math_8h.html#a4af3ca330e14587289518e6565fd04bd" title="Clips Q31 to Q15 values.">clip_q31_to_q15</a>((q31_t) ((<span class="keywordtype">short</span>) x + (<span class="keywordtype">short</span>) (y &gt;&gt; 16)));
  575. <a name="l00808"></a>00808
  576. <a name="l00809"></a>00809 <span class="keywordflow">return</span> sum;
  577. <a name="l00810"></a>00810 }
  578. <a name="l00811"></a>00811
  579. <a name="l00812"></a>00812 <span class="comment">/*</span>
  580. <a name="l00813"></a>00813 <span class="comment"> * @brief C custom defined SHSAX for M3 and M0 processors</span>
  581. <a name="l00814"></a>00814 <span class="comment"> */</span>
  582. <a name="l00815"></a>00815 <span class="keyword">static</span> __INLINE q31_t __SHSAX(
  583. <a name="l00816"></a>00816 q31_t x,
  584. <a name="l00817"></a>00817 q31_t y)
  585. <a name="l00818"></a>00818 {
  586. <a name="l00819"></a>00819
  587. <a name="l00820"></a>00820 q31_t sum;
  588. <a name="l00821"></a>00821 q31_t r, s;
  589. <a name="l00822"></a>00822
  590. <a name="l00823"></a>00823 r = (short) x;
  591. <a name="l00824"></a>00824 s = (short) y;
  592. <a name="l00825"></a>00825
  593. <a name="l00826"></a>00826 r = ((r &gt;&gt; 1) + (y &gt;&gt; 17));
  594. <a name="l00827"></a>00827 s = (((x &gt;&gt; 17) - (s &gt;&gt; 1)) &lt;&lt; 16);
  595. <a name="l00828"></a>00828
  596. <a name="l00829"></a>00829 sum = (s &amp; 0xFFFF0000) | (r &amp; 0x0000FFFF);
  597. <a name="l00830"></a>00830
  598. <a name="l00831"></a>00831 <span class="keywordflow">return</span> sum;
  599. <a name="l00832"></a>00832 }
  600. <a name="l00833"></a>00833
  601. <a name="l00834"></a>00834 <span class="comment">/*</span>
  602. <a name="l00835"></a>00835 <span class="comment"> * @brief C custom defined SMUSDX for M3 and M0 processors</span>
  603. <a name="l00836"></a>00836 <span class="comment"> */</span>
  604. <a name="l00837"></a>00837 <span class="keyword">static</span> __INLINE q31_t __SMUSDX(
  605. <a name="l00838"></a>00838 q31_t x,
  606. <a name="l00839"></a>00839 q31_t y)
  607. <a name="l00840"></a>00840 {
  608. <a name="l00841"></a>00841
  609. <a name="l00842"></a>00842 <span class="keywordflow">return</span> ((q31_t)(((<span class="keywordtype">short</span>) x * (<span class="keywordtype">short</span>) (y &gt;&gt; 16)) -
  610. <a name="l00843"></a>00843 ((<span class="keywordtype">short</span>) (x &gt;&gt; 16) * (<span class="keywordtype">short</span>) y)));
  611. <a name="l00844"></a>00844 }
  612. <a name="l00845"></a>00845
  613. <a name="l00846"></a>00846 <span class="comment">/*</span>
  614. <a name="l00847"></a>00847 <span class="comment"> * @brief C custom defined SMUADX for M3 and M0 processors</span>
  615. <a name="l00848"></a>00848 <span class="comment"> */</span>
  616. <a name="l00849"></a>00849 <span class="keyword">static</span> __INLINE q31_t __SMUADX(
  617. <a name="l00850"></a>00850 q31_t x,
  618. <a name="l00851"></a>00851 q31_t y)
  619. <a name="l00852"></a>00852 {
  620. <a name="l00853"></a>00853
  621. <a name="l00854"></a>00854 <span class="keywordflow">return</span> ((q31_t)(((<span class="keywordtype">short</span>) x * (<span class="keywordtype">short</span>) (y &gt;&gt; 16)) +
  622. <a name="l00855"></a>00855 ((<span class="keywordtype">short</span>) (x &gt;&gt; 16) * (<span class="keywordtype">short</span>) y)));
  623. <a name="l00856"></a>00856 }
  624. <a name="l00857"></a>00857
  625. <a name="l00858"></a>00858 <span class="comment">/*</span>
  626. <a name="l00859"></a>00859 <span class="comment"> * @brief C custom defined QADD for M3 and M0 processors</span>
  627. <a name="l00860"></a>00860 <span class="comment"> */</span>
  628. <a name="l00861"></a>00861 <span class="keyword">static</span> __INLINE q31_t __QADD(
  629. <a name="l00862"></a>00862 q31_t x,
  630. <a name="l00863"></a>00863 q31_t y)
  631. <a name="l00864"></a>00864 {
  632. <a name="l00865"></a>00865 <span class="keywordflow">return</span> <a class="code" href="arm__math_8h.html#ad7373e53d3c2e1adfeafc8c2e9720b5c" title="Clips Q63 to Q31 values.">clip_q63_to_q31</a>((q63_t) x + y);
  633. <a name="l00866"></a>00866 }
  634. <a name="l00867"></a>00867
  635. <a name="l00868"></a>00868 <span class="comment">/*</span>
  636. <a name="l00869"></a>00869 <span class="comment"> * @brief C custom defined QSUB for M3 and M0 processors</span>
  637. <a name="l00870"></a>00870 <span class="comment"> */</span>
  638. <a name="l00871"></a>00871 <span class="keyword">static</span> __INLINE q31_t __QSUB(
  639. <a name="l00872"></a>00872 q31_t x,
  640. <a name="l00873"></a>00873 q31_t y)
  641. <a name="l00874"></a>00874 {
  642. <a name="l00875"></a>00875 <span class="keywordflow">return</span> <a class="code" href="arm__math_8h.html#ad7373e53d3c2e1adfeafc8c2e9720b5c" title="Clips Q63 to Q31 values.">clip_q63_to_q31</a>((q63_t) x - y);
  643. <a name="l00876"></a>00876 }
  644. <a name="l00877"></a>00877
  645. <a name="l00878"></a>00878 <span class="comment">/*</span>
  646. <a name="l00879"></a>00879 <span class="comment"> * @brief C custom defined SMLAD for M3 and M0 processors</span>
  647. <a name="l00880"></a>00880 <span class="comment"> */</span>
  648. <a name="l00881"></a>00881 <span class="keyword">static</span> __INLINE q31_t __SMLAD(
  649. <a name="l00882"></a>00882 q31_t x,
  650. <a name="l00883"></a>00883 q31_t y,
  651. <a name="l00884"></a>00884 q31_t sum)
  652. <a name="l00885"></a>00885 {
  653. <a name="l00886"></a>00886
  654. <a name="l00887"></a>00887 <span class="keywordflow">return</span> (sum + ((<span class="keywordtype">short</span>) (x &gt;&gt; 16) * (<span class="keywordtype">short</span>) (y &gt;&gt; 16)) +
  655. <a name="l00888"></a>00888 ((<span class="keywordtype">short</span>) x * (<span class="keywordtype">short</span>) y));
  656. <a name="l00889"></a>00889 }
  657. <a name="l00890"></a>00890
  658. <a name="l00891"></a>00891 <span class="comment">/*</span>
  659. <a name="l00892"></a>00892 <span class="comment"> * @brief C custom defined SMLADX for M3 and M0 processors</span>
  660. <a name="l00893"></a>00893 <span class="comment"> */</span>
  661. <a name="l00894"></a>00894 <span class="keyword">static</span> __INLINE q31_t __SMLADX(
  662. <a name="l00895"></a>00895 q31_t x,
  663. <a name="l00896"></a>00896 q31_t y,
  664. <a name="l00897"></a>00897 q31_t

Large files files are truncated, but you can click here to view the full file