/ChibiOS_2.4.0/ext/Libraries/CMSIS/Documentation/DSP_Lib/html/arm__math_8h_source.html
HTML | 3817 lines | 3811 code | 2 blank | 4 comment | 0 complexity | f7b3eca46d63f63bd8e5afb289f8226b MD5 | raw file
Possible License(s): GPL-3.0
Large files files are truncated, but you can click here to view the full file
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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"/>
- <title>CMSIS DSP Software Library: arm_math.h Source File</title>
- <link href="tabs.css" rel="stylesheet" type="text/css"/>
- <link href="search/search.css" rel="stylesheet" type="text/css"/>
- <script type="text/javaScript" src="search/search.js"></script>
- <link href="doxygen.css" rel="stylesheet" type="text/css"/>
- </head>
- <body onload='searchBox.OnSelectItem(0);'>
- <!-- Generated by Doxygen 1.7.2 -->
- <script type="text/javascript"><!--
- var searchBox = new SearchBox("searchBox", "search",false,'Search');
- --></script>
- <div class="navigation" id="top">
- <div class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Main Page</span></a></li>
- <li><a href="modules.html"><span>Modules</span></a></li>
- <li><a href="annotated.html"><span>Data Structures</span></a></li>
- <li class="current"><a href="files.html"><span>Files</span></a></li>
- <li><a href="examples.html"><span>Examples</span></a></li>
- <li id="searchli">
- <div id="MSearchBox" class="MSearchBoxInactive">
- <span class="left">
- <img id="MSearchSelect" src="search/mag_sel.png"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- alt=""/>
- <input type="text" id="MSearchField" value="Search" accesskey="S"
- onfocus="searchBox.OnSearchFieldFocus(true)"
- onblur="searchBox.OnSearchFieldFocus(false)"
- onkeyup="searchBox.OnSearchFieldChange(event)"/>
- </span><span class="right">
- <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
- </span>
- </div>
- </li>
- </ul>
- </div>
- <div class="tabs2">
- <ul class="tablist">
- <li><a href="files.html"><span>File List</span></a></li>
- <li><a href="globals.html"><span>Globals</span></a></li>
- </ul>
- </div>
- <div class="header">
- <div class="headertitle">
- <h1>arm_math.h</h1> </div>
- </div>
- <div class="contents">
- <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>
- <a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2010 ARM Limited. All rights reserved. </span>
- <a name="l00003"></a>00003 <span class="comment"> * </span>
- <a name="l00004"></a>00004 <span class="comment"> * $Date: 15. July 2011 </span>
- <a name="l00005"></a>00005 <span class="comment"> * $Revision: V1.0.10 </span>
- <a name="l00006"></a>00006 <span class="comment"> * </span>
- <a name="l00007"></a>00007 <span class="comment"> * Project: CMSIS DSP Library </span>
- <a name="l00008"></a>00008 <span class="comment"> * Title: arm_math.h</span>
- <a name="l00009"></a>00009 <span class="comment"> * </span>
- <a name="l00010"></a>00010 <span class="comment"> * Description: Public header file for CMSIS DSP Library</span>
- <a name="l00011"></a>00011 <span class="comment"> * </span>
- <a name="l00012"></a>00012 <span class="comment"> * Target Processor: Cortex-M4/Cortex-M3/Cortex-M0</span>
- <a name="l00013"></a>00013 <span class="comment"> * </span>
- <a name="l00014"></a>00014 <span class="comment"> * Version 1.0.10 2011/7/15 </span>
- <a name="l00015"></a>00015 <span class="comment"> * Big Endian support added and Merged M0 and M3/M4 Source code. </span>
- <a name="l00016"></a>00016 <span class="comment"> * </span>
- <a name="l00017"></a>00017 <span class="comment"> * Version 1.0.3 2010/11/29 </span>
- <a name="l00018"></a>00018 <span class="comment"> * Re-organized the CMSIS folders and updated documentation. </span>
- <a name="l00019"></a>00019 <span class="comment"> * </span>
- <a name="l00020"></a>00020 <span class="comment"> * Version 1.0.2 2010/11/11 </span>
- <a name="l00021"></a>00021 <span class="comment"> * Documentation updated. </span>
- <a name="l00022"></a>00022 <span class="comment"> * </span>
- <a name="l00023"></a>00023 <span class="comment"> * Version 1.0.1 2010/10/05 </span>
- <a name="l00024"></a>00024 <span class="comment"> * Production release and review comments incorporated. </span>
- <a name="l00025"></a>00025 <span class="comment"> * </span>
- <a name="l00026"></a>00026 <span class="comment"> * Version 1.0.0 2010/09/20 </span>
- <a name="l00027"></a>00027 <span class="comment"> * Production release and review comments incorporated. </span>
- <a name="l00028"></a>00028 <span class="comment"> * -------------------------------------------------------------------- */</span>
- <a name="l00029"></a>00029
- <a name="l00251"></a>00251 <span class="preprocessor">#ifndef _ARM_MATH_H</span>
- <a name="l00252"></a>00252 <span class="preprocessor"></span><span class="preprocessor">#define _ARM_MATH_H</span>
- <a name="l00253"></a>00253 <span class="preprocessor"></span>
- <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>
- <a name="l00255"></a>00255
- <a name="l00256"></a>00256 <span class="preprocessor">#if defined (ARM_MATH_CM4)</span>
- <a name="l00257"></a>00257 <span class="preprocessor"></span><span class="preprocessor"> #include "core_cm4.h"</span>
- <a name="l00258"></a>00258 <span class="preprocessor">#elif defined (ARM_MATH_CM3)</span>
- <a name="l00259"></a>00259 <span class="preprocessor"></span><span class="preprocessor"> #include "core_cm3.h"</span>
- <a name="l00260"></a>00260 <span class="preprocessor">#elif defined (ARM_MATH_CM0)</span>
- <a name="l00261"></a>00261 <span class="preprocessor"></span><span class="preprocessor"> #include "core_cm0.h"</span>
- <a name="l00262"></a>00262 <span class="preprocessor">#else</span>
- <a name="l00263"></a>00263 <span class="preprocessor"></span><span class="preprocessor">#include "ARMCM4.h"</span>
- <a name="l00264"></a>00264 <span class="preprocessor">#warning "Define either ARM_MATH_CM4 OR ARM_MATH_CM3...By Default building on ARM_MATH_CM4....."</span>
- <a name="l00265"></a>00265 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
- <a name="l00266"></a>00266 <span class="preprocessor"></span>
- <a name="l00267"></a>00267 <span class="preprocessor">#undef __CMSIS_GENERIC </span><span class="comment">/* enable NVIC and Systick functions */</span>
- <a name="l00268"></a>00268 <span class="preprocessor">#include "string.h"</span>
- <a name="l00269"></a>00269 <span class="preprocessor"> #include "math.h"</span>
- <a name="l00270"></a>00270 <span class="preprocessor">#ifdef __cplusplus</span>
- <a name="l00271"></a>00271 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span>
- <a name="l00272"></a>00272 {
- <a name="l00273"></a>00273 <span class="preprocessor">#endif</span>
- <a name="l00274"></a>00274 <span class="preprocessor"></span>
- <a name="l00275"></a>00275
- <a name="l00280"></a><a class="code" href="arm__math_8h.html#aad77ae594e95c5af6ae4129bd6a483c2">00280</a> <span class="preprocessor">#define DELTA_Q31 (0x100)</span>
- <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>
- <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>
- <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>
- <a name="l00284"></a>00284 <span class="preprocessor"></span>
- <a name="l00289"></a><a class="code" href="arm__math_8h.html#a032503e76d6f69bc67e99e909c8125da">00289</a> <span class="preprocessor">#define TABLE_SIZE 256</span>
- <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>
- <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>
- <a name="l00292"></a>00292 <span class="preprocessor"></span>
- <a name="l00296"></a>00296 <span class="comment">/* 1.31(q31) Fixed value of 2/360 */</span>
- <a name="l00297"></a>00297 <span class="comment">/* -1 to +1 is divided into 360 values so total spacing is (2/360) */</span>
- <a name="l00298"></a><a class="code" href="arm__math_8h.html#a1339e9abc11a3870e0c04f822a62166a">00298</a> <span class="preprocessor">#define INPUT_SPACING 0xB60B61</span>
- <a name="l00299"></a>00299 <span class="preprocessor"></span>
- <a name="l00300"></a>00300
- <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>
- <a name="l00306"></a>00306 {
- <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,
- <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,
- <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,
- <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,
- <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,
- <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,
- <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
- <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>;
- <a name="l00315"></a>00315
- <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>;
- <a name="l00320"></a>00320
- <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>;
- <a name="l00325"></a>00325
- <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>;
- <a name="l00330"></a>00330
- <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>;
- <a name="l00335"></a>00335
- <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>;
- <a name="l00340"></a>00340
- <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>;
- <a name="l00345"></a>00345
- <a name="l00349"></a><a class="code" href="arm__math_8h.html#a9de2e0a5785be82866bcb96012282248">00349</a> <span class="preprocessor">#define __SIMD32(addr) (*(int32_t **) & (addr))</span>
- <a name="l00350"></a>00350 <span class="preprocessor"></span>
- <a name="l00351"></a>00351 <span class="preprocessor">#if defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0)</span>
- <a name="l00352"></a>00352 <span class="preprocessor"></span>
- <a name="l00355"></a>00355 <span class="preprocessor">#define __PKHBT(ARG1, ARG2, ARG3) ( (((int32_t)(ARG1) << 0) & (int32_t)0x0000FFFF) | \</span>
- <a name="l00356"></a>00356 <span class="preprocessor"> (((int32_t)(ARG2) << ARG3) & (int32_t)0xFFFF0000) )</span>
- <a name="l00357"></a>00357 <span class="preprocessor"></span>
- <a name="l00358"></a>00358 <span class="preprocessor">#endif</span>
- <a name="l00359"></a>00359 <span class="preprocessor"></span>
- <a name="l00360"></a>00360
- <a name="l00364"></a>00364 <span class="preprocessor">#ifndef ARM_MATH_BIG_ENDIAN</span>
- <a name="l00365"></a>00365 <span class="preprocessor"></span>
- <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) << 0) & (int32_t)0x000000FF) | \</span>
- <a name="l00367"></a>00367 <span class="preprocessor"> (((int32_t)(v1) << 8) & (int32_t)0x0000FF00) | \</span>
- <a name="l00368"></a>00368 <span class="preprocessor"> (((int32_t)(v2) << 16) & (int32_t)0x00FF0000) | \</span>
- <a name="l00369"></a>00369 <span class="preprocessor"> (((int32_t)(v3) << 24) & (int32_t)0xFF000000) )</span>
- <a name="l00370"></a>00370 <span class="preprocessor"></span><span class="preprocessor">#else </span>
- <a name="l00371"></a>00371 <span class="preprocessor"></span>
- <a name="l00372"></a>00372 <span class="preprocessor">#define __PACKq7(v0,v1,v2,v3) ( (((int32_t)(v3) << 0) & (int32_t)0x000000FF) | \</span>
- <a name="l00373"></a>00373 <span class="preprocessor"> (((int32_t)(v2) << 8) & (int32_t)0x0000FF00) | \</span>
- <a name="l00374"></a>00374 <span class="preprocessor"> (((int32_t)(v1) << 16) & (int32_t)0x00FF0000) | \</span>
- <a name="l00375"></a>00375 <span class="preprocessor"> (((int32_t)(v0) << 24) & (int32_t)0xFF000000) )</span>
- <a name="l00376"></a>00376 <span class="preprocessor"></span>
- <a name="l00377"></a>00377 <span class="preprocessor">#endif</span>
- <a name="l00378"></a>00378 <span class="preprocessor"></span>
- <a name="l00379"></a>00379
- <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>(
- <a name="l00384"></a>00384 q63_t x)
- <a name="l00385"></a>00385 {
- <a name="l00386"></a>00386 <span class="keywordflow">return</span> ((q31_t) (x >> 32) != ((q31_t) x >> 31)) ?
- <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 >> 63)))) : (q31_t) x;
- <a name="l00388"></a>00388 }
- <a name="l00389"></a>00389
- <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>(
- <a name="l00394"></a>00394 q63_t x)
- <a name="l00395"></a>00395 {
- <a name="l00396"></a>00396 <span class="keywordflow">return</span> ((q31_t) (x >> 32) != ((q31_t) x >> 31)) ?
- <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 >> 63)))) : (q15_t) (x >> 15);
- <a name="l00398"></a>00398 }
- <a name="l00399"></a>00399
- <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>(
- <a name="l00404"></a>00404 q31_t x)
- <a name="l00405"></a>00405 {
- <a name="l00406"></a>00406 <span class="keywordflow">return</span> ((q31_t) (x >> 24) != ((q31_t) x >> 23)) ?
- <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 >> 31)))) : (q7_t) x;
- <a name="l00408"></a>00408 }
- <a name="l00409"></a>00409
- <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>(
- <a name="l00414"></a>00414 q31_t x)
- <a name="l00415"></a>00415 {
- <a name="l00416"></a>00416 <span class="keywordflow">return</span> ((q31_t) (x >> 16) != ((q31_t) x >> 15)) ?
- <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 >> 31)))) : (q15_t) x;
- <a name="l00418"></a>00418 }
- <a name="l00419"></a>00419
- <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>(
- <a name="l00425"></a>00425 q63_t x,
- <a name="l00426"></a>00426 q31_t y)
- <a name="l00427"></a>00427 {
- <a name="l00428"></a>00428 <span class="keywordflow">return</span> ((((q63_t) (x & 0x00000000FFFFFFFF) * y) >> 32) +
- <a name="l00429"></a>00429 (((q63_t) (x >> 32) * y)));
- <a name="l00430"></a>00430 }
- <a name="l00431"></a>00431
- <a name="l00432"></a>00432
- <a name="l00433"></a>00433 <span class="preprocessor">#if defined (ARM_MATH_CM0) && defined ( __CC_ARM )</span>
- <a name="l00434"></a>00434 <span class="preprocessor"></span><span class="preprocessor">#define __CLZ __clz</span>
- <a name="l00435"></a>00435 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
- <a name="l00436"></a>00436 <span class="preprocessor"></span>
- <a name="l00437"></a>00437 <span class="preprocessor">#if defined (ARM_MATH_CM0) && ((defined (__ICCARM__)) ||(defined (__GNUC__)) || defined (__TASKING__) )</span>
- <a name="l00438"></a>00438 <span class="preprocessor"></span>
- <a name="l00439"></a>00439 uint32_t __CLZ(q31_t data);
- <a name="l00440"></a>00440
- <a name="l00441"></a>00441
- <a name="l00442"></a>00442 <span class="keyword">static</span> __INLINE uint32_t __CLZ(q31_t data)
- <a name="l00443"></a>00443 {
- <a name="l00444"></a>00444 uint32_t count = 0;
- <a name="l00445"></a>00445 uint32_t mask = 0x80000000;
- <a name="l00446"></a>00446
- <a name="l00447"></a>00447 <span class="keywordflow">while</span>((data & mask) == 0)
- <a name="l00448"></a>00448 {
- <a name="l00449"></a>00449 count += 1u;
- <a name="l00450"></a>00450 mask = mask >> 1u;
- <a name="l00451"></a>00451 }
- <a name="l00452"></a>00452
- <a name="l00453"></a>00453 <span class="keywordflow">return</span>(count);
- <a name="l00454"></a>00454
- <a name="l00455"></a>00455 }
- <a name="l00456"></a>00456
- <a name="l00457"></a>00457 <span class="preprocessor">#endif </span>
- <a name="l00458"></a>00458 <span class="preprocessor"></span>
- <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>(
- <a name="l00464"></a>00464 q31_t in,
- <a name="l00465"></a>00465 q31_t * dst,
- <a name="l00466"></a>00466 q31_t * pRecipTable)
- <a name="l00467"></a>00467 {
- <a name="l00468"></a>00468
- <a name="l00469"></a>00469 uint32_t out, tempVal;
- <a name="l00470"></a>00470 uint32_t index, i;
- <a name="l00471"></a>00471 uint32_t signBits;
- <a name="l00472"></a>00472
- <a name="l00473"></a>00473 <span class="keywordflow">if</span>(in > 0)
- <a name="l00474"></a>00474 {
- <a name="l00475"></a>00475 signBits = __CLZ(in) - 1;
- <a name="l00476"></a>00476 }
- <a name="l00477"></a>00477 <span class="keywordflow">else</span>
- <a name="l00478"></a>00478 {
- <a name="l00479"></a>00479 signBits = __CLZ(-in) - 1;
- <a name="l00480"></a>00480 }
- <a name="l00481"></a>00481
- <a name="l00482"></a>00482 <span class="comment">/* Convert input sample to 1.31 format */</span>
- <a name="l00483"></a>00483 in = in << signBits;
- <a name="l00484"></a>00484
- <a name="l00485"></a>00485 <span class="comment">/* calculation of index for initial approximated Val */</span>
- <a name="l00486"></a>00486 index = (uint32_t) (in >> 24u);
- <a name="l00487"></a>00487 index = (index & <a class="code" href="arm__math_8h.html#a29f839928f4752b73c8858d6dbb55294">INDEX_MASK</a>);
- <a name="l00488"></a>00488
- <a name="l00489"></a>00489 <span class="comment">/* 1.31 with exp 1 */</span>
- <a name="l00490"></a>00490 out = pRecipTable[index];
- <a name="l00491"></a>00491
- <a name="l00492"></a>00492 <span class="comment">/* calculation of reciprocal value */</span>
- <a name="l00493"></a>00493 <span class="comment">/* running approximation for two iterations */</span>
- <a name="l00494"></a>00494 <span class="keywordflow">for</span> (i = 0u; i < 2u; i++)
- <a name="l00495"></a>00495 {
- <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) >> 31u);
- <a name="l00497"></a>00497 tempVal = 0x7FFFFFFF - tempVal;
- <a name="l00498"></a>00498 <span class="comment">/* 1.31 with exp 1 */</span>
- <a name="l00499"></a>00499 <span class="comment">//out = (q31_t) (((q63_t) out * tempVal) >> 30u);</span>
- <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) >> 30u);
- <a name="l00501"></a>00501 }
- <a name="l00502"></a>00502
- <a name="l00503"></a>00503 <span class="comment">/* write output */</span>
- <a name="l00504"></a>00504 *dst = out;
- <a name="l00505"></a>00505
- <a name="l00506"></a>00506 <span class="comment">/* return num of signbits of out = 1/in value */</span>
- <a name="l00507"></a>00507 <span class="keywordflow">return</span> (signBits + 1u);
- <a name="l00508"></a>00508
- <a name="l00509"></a>00509 }
- <a name="l00510"></a>00510
- <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>(
- <a name="l00515"></a>00515 q15_t in,
- <a name="l00516"></a>00516 q15_t * dst,
- <a name="l00517"></a>00517 q15_t * pRecipTable)
- <a name="l00518"></a>00518 {
- <a name="l00519"></a>00519
- <a name="l00520"></a>00520 uint32_t out = 0, tempVal = 0;
- <a name="l00521"></a>00521 uint32_t index = 0, i = 0;
- <a name="l00522"></a>00522 uint32_t signBits = 0;
- <a name="l00523"></a>00523
- <a name="l00524"></a>00524 <span class="keywordflow">if</span>(in > 0)
- <a name="l00525"></a>00525 {
- <a name="l00526"></a>00526 signBits = __CLZ(in) - 17;
- <a name="l00527"></a>00527 }
- <a name="l00528"></a>00528 <span class="keywordflow">else</span>
- <a name="l00529"></a>00529 {
- <a name="l00530"></a>00530 signBits = __CLZ(-in) - 17;
- <a name="l00531"></a>00531 }
- <a name="l00532"></a>00532
- <a name="l00533"></a>00533 <span class="comment">/* Convert input sample to 1.15 format */</span>
- <a name="l00534"></a>00534 in = in << signBits;
- <a name="l00535"></a>00535
- <a name="l00536"></a>00536 <span class="comment">/* calculation of index for initial approximated Val */</span>
- <a name="l00537"></a>00537 index = in >> 8;
- <a name="l00538"></a>00538 index = (index & <a class="code" href="arm__math_8h.html#a29f839928f4752b73c8858d6dbb55294">INDEX_MASK</a>);
- <a name="l00539"></a>00539
- <a name="l00540"></a>00540 <span class="comment">/* 1.15 with exp 1 */</span>
- <a name="l00541"></a>00541 out = pRecipTable[index];
- <a name="l00542"></a>00542
- <a name="l00543"></a>00543 <span class="comment">/* calculation of reciprocal value */</span>
- <a name="l00544"></a>00544 <span class="comment">/* running approximation for two iterations */</span>
- <a name="l00545"></a>00545 <span class="keywordflow">for</span> (i = 0; i < 2; i++)
- <a name="l00546"></a>00546 {
- <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) >> 15);
- <a name="l00548"></a>00548 tempVal = 0x7FFF - tempVal;
- <a name="l00549"></a>00549 <span class="comment">/* 1.15 with exp 1 */</span>
- <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) >> 14);
- <a name="l00551"></a>00551 }
- <a name="l00552"></a>00552
- <a name="l00553"></a>00553 <span class="comment">/* write output */</span>
- <a name="l00554"></a>00554 *dst = out;
- <a name="l00555"></a>00555
- <a name="l00556"></a>00556 <span class="comment">/* return num of signbits of out = 1/in value */</span>
- <a name="l00557"></a>00557 <span class="keywordflow">return</span> (signBits + 1);
- <a name="l00558"></a>00558
- <a name="l00559"></a>00559 }
- <a name="l00560"></a>00560
- <a name="l00561"></a>00561
- <a name="l00562"></a>00562 <span class="comment">/*</span>
- <a name="l00563"></a>00563 <span class="comment"> * @brief C custom defined intrinisic function for only M0 processors</span>
- <a name="l00564"></a>00564 <span class="comment"> */</span>
- <a name="l00565"></a>00565 <span class="preprocessor">#if defined(ARM_MATH_CM0)</span>
- <a name="l00566"></a>00566 <span class="preprocessor"></span>
- <a name="l00567"></a>00567 <span class="keyword">static</span> __INLINE q31_t __SSAT(
- <a name="l00568"></a>00568 q31_t x,
- <a name="l00569"></a>00569 uint32_t y)
- <a name="l00570"></a>00570 {
- <a name="l00571"></a>00571 int32_t posMax, negMin;
- <a name="l00572"></a>00572 uint32_t i;
- <a name="l00573"></a>00573
- <a name="l00574"></a>00574 posMax = 1;
- <a name="l00575"></a>00575 <span class="keywordflow">for</span> (i = 0; i < (y - 1); i++)
- <a name="l00576"></a>00576 {
- <a name="l00577"></a>00577 posMax = posMax * 2;
- <a name="l00578"></a>00578 }
- <a name="l00579"></a>00579
- <a name="l00580"></a>00580 <span class="keywordflow">if</span>(x > 0)
- <a name="l00581"></a>00581 {
- <a name="l00582"></a>00582 posMax = (posMax - 1);
- <a name="l00583"></a>00583
- <a name="l00584"></a>00584 <span class="keywordflow">if</span>(x > posMax)
- <a name="l00585"></a>00585 {
- <a name="l00586"></a>00586 x = posMax;
- <a name="l00587"></a>00587 }
- <a name="l00588"></a>00588 }
- <a name="l00589"></a>00589 <span class="keywordflow">else</span>
- <a name="l00590"></a>00590 {
- <a name="l00591"></a>00591 negMin = -posMax;
- <a name="l00592"></a>00592
- <a name="l00593"></a>00593 <span class="keywordflow">if</span>(x < negMin)
- <a name="l00594"></a>00594 {
- <a name="l00595"></a>00595 x = negMin;
- <a name="l00596"></a>00596 }
- <a name="l00597"></a>00597 }
- <a name="l00598"></a>00598 <span class="keywordflow">return</span> (x);
- <a name="l00599"></a>00599
- <a name="l00600"></a>00600
- <a name="l00601"></a>00601 }
- <a name="l00602"></a>00602
- <a name="l00603"></a>00603 <span class="preprocessor">#endif </span><span class="comment">/* end of ARM_MATH_CM0 */</span>
- <a name="l00604"></a>00604
- <a name="l00605"></a>00605
- <a name="l00606"></a>00606
- <a name="l00607"></a>00607 <span class="comment">/*</span>
- <a name="l00608"></a>00608 <span class="comment"> * @brief C custom defined intrinsic function for M3 and M0 processors</span>
- <a name="l00609"></a>00609 <span class="comment"> */</span>
- <a name="l00610"></a>00610 <span class="preprocessor">#if defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0)</span>
- <a name="l00611"></a>00611 <span class="preprocessor"></span>
- <a name="l00612"></a>00612 <span class="comment">/*</span>
- <a name="l00613"></a>00613 <span class="comment"> * @brief C custom defined QADD8 for M3 and M0 processors</span>
- <a name="l00614"></a>00614 <span class="comment"> */</span>
- <a name="l00615"></a>00615 <span class="keyword">static</span> __INLINE q31_t __QADD8(
- <a name="l00616"></a>00616 q31_t x,
- <a name="l00617"></a>00617 q31_t y)
- <a name="l00618"></a>00618 {
- <a name="l00619"></a>00619
- <a name="l00620"></a>00620 q31_t sum;
- <a name="l00621"></a>00621 q7_t r, s, t, u;
- <a name="l00622"></a>00622
- <a name="l00623"></a>00623 r = (char) x;
- <a name="l00624"></a>00624 s = (char) y;
- <a name="l00625"></a>00625
- <a name="l00626"></a>00626 r = __SSAT((q31_t) (r + s), 8);
- <a name="l00627"></a>00627 s = __SSAT(((q31_t) (((x << 16) >> 24) + ((y << 16) >> 24))), 8);
- <a name="l00628"></a>00628 t = __SSAT(((q31_t) (((x << 8) >> 24) + ((y << 8) >> 24))), 8);
- <a name="l00629"></a>00629 u = __SSAT(((q31_t) ((x >> 24) + (y >> 24))), 8);
- <a name="l00630"></a>00630
- <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 << 24) & 0xFF000000) | (((q31_t) t << 16) & 0x00FF0000) |
- <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 << 8) & 0x0000FF00) | (r & 0x000000FF);
- <a name="l00633"></a>00633
- <a name="l00634"></a>00634 <span class="keywordflow">return</span> sum;
- <a name="l00635"></a>00635
- <a name="l00636"></a>00636 }
- <a name="l00637"></a>00637
- <a name="l00638"></a>00638 <span class="comment">/*</span>
- <a name="l00639"></a>00639 <span class="comment"> * @brief C custom defined QSUB8 for M3 and M0 processors</span>
- <a name="l00640"></a>00640 <span class="comment"> */</span>
- <a name="l00641"></a>00641 <span class="keyword">static</span> __INLINE q31_t __QSUB8(
- <a name="l00642"></a>00642 q31_t x,
- <a name="l00643"></a>00643 q31_t y)
- <a name="l00644"></a>00644 {
- <a name="l00645"></a>00645
- <a name="l00646"></a>00646 q31_t sum;
- <a name="l00647"></a>00647 q31_t r, s, t, u;
- <a name="l00648"></a>00648
- <a name="l00649"></a>00649 r = (char) x;
- <a name="l00650"></a>00650 s = (char) y;
- <a name="l00651"></a>00651
- <a name="l00652"></a>00652 r = __SSAT((r - s), 8);
- <a name="l00653"></a>00653 s = __SSAT(((q31_t) (((x << 16) >> 24) - ((y << 16) >> 24))), 8) << 8;
- <a name="l00654"></a>00654 t = __SSAT(((q31_t) (((x << 8) >> 24) - ((y << 8) >> 24))), 8) << 16;
- <a name="l00655"></a>00655 u = __SSAT(((q31_t) ((x >> 24) - (y >> 24))), 8) << 24;
- <a name="l00656"></a>00656
- <a name="l00657"></a>00657 sum =
- <a name="l00658"></a>00658 (u & 0xFF000000) | (t & 0x00FF0000) | (s & 0x0000FF00) | (r & 0x000000FF);
- <a name="l00659"></a>00659
- <a name="l00660"></a>00660 <span class="keywordflow">return</span> sum;
- <a name="l00661"></a>00661 }
- <a name="l00662"></a>00662
- <a name="l00663"></a>00663 <span class="comment">/*</span>
- <a name="l00664"></a>00664 <span class="comment"> * @brief C custom defined QADD16 for M3 and M0 processors</span>
- <a name="l00665"></a>00665 <span class="comment"> */</span>
- <a name="l00666"></a>00666
- <a name="l00667"></a>00667 <span class="comment">/*</span>
- <a name="l00668"></a>00668 <span class="comment"> * @brief C custom defined QADD16 for M3 and M0 processors</span>
- <a name="l00669"></a>00669 <span class="comment"> */</span>
- <a name="l00670"></a>00670 <span class="keyword">static</span> __INLINE q31_t __QADD16(
- <a name="l00671"></a>00671 q31_t x,
- <a name="l00672"></a>00672 q31_t y)
- <a name="l00673"></a>00673 {
- <a name="l00674"></a>00674
- <a name="l00675"></a>00675 q31_t sum;
- <a name="l00676"></a>00676 q31_t r, s;
- <a name="l00677"></a>00677
- <a name="l00678"></a>00678 r = (short) x;
- <a name="l00679"></a>00679 s = (short) y;
- <a name="l00680"></a>00680
- <a name="l00681"></a>00681 r = __SSAT(r + s, 16);
- <a name="l00682"></a>00682 s = __SSAT(((q31_t) ((x >> 16) + (y >> 16))), 16) << 16;
- <a name="l00683"></a>00683
- <a name="l00684"></a>00684 sum = (s & 0xFFFF0000) | (r & 0x0000FFFF);
- <a name="l00685"></a>00685
- <a name="l00686"></a>00686 <span class="keywordflow">return</span> sum;
- <a name="l00687"></a>00687
- <a name="l00688"></a>00688 }
- <a name="l00689"></a>00689
- <a name="l00690"></a>00690 <span class="comment">/*</span>
- <a name="l00691"></a>00691 <span class="comment"> * @brief C custom defined SHADD16 for M3 and M0 processors</span>
- <a name="l00692"></a>00692 <span class="comment"> */</span>
- <a name="l00693"></a>00693 <span class="keyword">static</span> __INLINE q31_t __SHADD16(
- <a name="l00694"></a>00694 q31_t x,
- <a name="l00695"></a>00695 q31_t y)
- <a name="l00696"></a>00696 {
- <a name="l00697"></a>00697
- <a name="l00698"></a>00698 q31_t sum;
- <a name="l00699"></a>00699 q31_t r, s;
- <a name="l00700"></a>00700
- <a name="l00701"></a>00701 r = (short) x;
- <a name="l00702"></a>00702 s = (short) y;
- <a name="l00703"></a>00703
- <a name="l00704"></a>00704 r = ((r >> 1) + (s >> 1));
- <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 >> 17) + (y >> 17))) << 16;
- <a name="l00706"></a>00706
- <a name="l00707"></a>00707 sum = (s & 0xFFFF0000) | (r & 0x0000FFFF);
- <a name="l00708"></a>00708
- <a name="l00709"></a>00709 <span class="keywordflow">return</span> sum;
- <a name="l00710"></a>00710
- <a name="l00711"></a>00711 }
- <a name="l00712"></a>00712
- <a name="l00713"></a>00713 <span class="comment">/*</span>
- <a name="l00714"></a>00714 <span class="comment"> * @brief C custom defined QSUB16 for M3 and M0 processors</span>
- <a name="l00715"></a>00715 <span class="comment"> */</span>
- <a name="l00716"></a>00716 <span class="keyword">static</span> __INLINE q31_t __QSUB16(
- <a name="l00717"></a>00717 q31_t x,
- <a name="l00718"></a>00718 q31_t y)
- <a name="l00719"></a>00719 {
- <a name="l00720"></a>00720
- <a name="l00721"></a>00721 q31_t sum;
- <a name="l00722"></a>00722 q31_t r, s;
- <a name="l00723"></a>00723
- <a name="l00724"></a>00724 r = (short) x;
- <a name="l00725"></a>00725 s = (short) y;
- <a name="l00726"></a>00726
- <a name="l00727"></a>00727 r = __SSAT(r - s, 16);
- <a name="l00728"></a>00728 s = __SSAT(((q31_t) ((x >> 16) - (y >> 16))), 16) << 16;
- <a name="l00729"></a>00729
- <a name="l00730"></a>00730 sum = (s & 0xFFFF0000) | (r & 0x0000FFFF);
- <a name="l00731"></a>00731
- <a name="l00732"></a>00732 <span class="keywordflow">return</span> sum;
- <a name="l00733"></a>00733 }
- <a name="l00734"></a>00734
- <a name="l00735"></a>00735 <span class="comment">/*</span>
- <a name="l00736"></a>00736 <span class="comment"> * @brief C custom defined SHSUB16 for M3 and M0 processors</span>
- <a name="l00737"></a>00737 <span class="comment"> */</span>
- <a name="l00738"></a>00738 <span class="keyword">static</span> __INLINE q31_t __SHSUB16(
- <a name="l00739"></a>00739 q31_t x,
- <a name="l00740"></a>00740 q31_t y)
- <a name="l00741"></a>00741 {
- <a name="l00742"></a>00742
- <a name="l00743"></a>00743 q31_t diff;
- <a name="l00744"></a>00744 q31_t r, s;
- <a name="l00745"></a>00745
- <a name="l00746"></a>00746 r = (short) x;
- <a name="l00747"></a>00747 s = (short) y;
- <a name="l00748"></a>00748
- <a name="l00749"></a>00749 r = ((r >> 1) - (s >> 1));
- <a name="l00750"></a>00750 s = (((x >> 17) - (y >> 17)) << 16);
- <a name="l00751"></a>00751
- <a name="l00752"></a>00752 diff = (s & 0xFFFF0000) | (r & 0x0000FFFF);
- <a name="l00753"></a>00753
- <a name="l00754"></a>00754 <span class="keywordflow">return</span> diff;
- <a name="l00755"></a>00755 }
- <a name="l00756"></a>00756
- <a name="l00757"></a>00757 <span class="comment">/*</span>
- <a name="l00758"></a>00758 <span class="comment"> * @brief C custom defined QASX for M3 and M0 processors</span>
- <a name="l00759"></a>00759 <span class="comment"> */</span>
- <a name="l00760"></a>00760 <span class="keyword">static</span> __INLINE q31_t __QASX(
- <a name="l00761"></a>00761 q31_t x,
- <a name="l00762"></a>00762 q31_t y)
- <a name="l00763"></a>00763 {
- <a name="l00764"></a>00764
- <a name="l00765"></a>00765 q31_t sum = 0;
- <a name="l00766"></a>00766
- <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 >> 16) + (<span class="keywordtype">short</span>) y))) << 16) +
- <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 >> 16)));
- <a name="l00769"></a>00769
- <a name="l00770"></a>00770 <span class="keywordflow">return</span> sum;
- <a name="l00771"></a>00771 }
- <a name="l00772"></a>00772
- <a name="l00773"></a>00773 <span class="comment">/*</span>
- <a name="l00774"></a>00774 <span class="comment"> * @brief C custom defined SHASX for M3 and M0 processors</span>
- <a name="l00775"></a>00775 <span class="comment"> */</span>
- <a name="l00776"></a>00776 <span class="keyword">static</span> __INLINE q31_t __SHASX(
- <a name="l00777"></a>00777 q31_t x,
- <a name="l00778"></a>00778 q31_t y)
- <a name="l00779"></a>00779 {
- <a name="l00780"></a>00780
- <a name="l00781"></a>00781 q31_t sum;
- <a name="l00782"></a>00782 q31_t r, s;
- <a name="l00783"></a>00783
- <a name="l00784"></a>00784 r = (short) x;
- <a name="l00785"></a>00785 s = (short) y;
- <a name="l00786"></a>00786
- <a name="l00787"></a>00787 r = ((r >> 1) - (y >> 17));
- <a name="l00788"></a>00788 s = (((x >> 17) + (s >> 1)) << 16);
- <a name="l00789"></a>00789
- <a name="l00790"></a>00790 sum = (s & 0xFFFF0000) | (r & 0x0000FFFF);
- <a name="l00791"></a>00791
- <a name="l00792"></a>00792 <span class="keywordflow">return</span> sum;
- <a name="l00793"></a>00793 }
- <a name="l00794"></a>00794
- <a name="l00795"></a>00795
- <a name="l00796"></a>00796 <span class="comment">/*</span>
- <a name="l00797"></a>00797 <span class="comment"> * @brief C custom defined QSAX for M3 and M0 processors</span>
- <a name="l00798"></a>00798 <span class="comment"> */</span>
- <a name="l00799"></a>00799 <span class="keyword">static</span> __INLINE q31_t __QSAX(
- <a name="l00800"></a>00800 q31_t x,
- <a name="l00801"></a>00801 q31_t y)
- <a name="l00802"></a>00802 {
- <a name="l00803"></a>00803
- <a name="l00804"></a>00804 q31_t sum = 0;
- <a name="l00805"></a>00805
- <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 >> 16) - (<span class="keywordtype">short</span>) y))) << 16) +
- <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 >> 16)));
- <a name="l00808"></a>00808
- <a name="l00809"></a>00809 <span class="keywordflow">return</span> sum;
- <a name="l00810"></a>00810 }
- <a name="l00811"></a>00811
- <a name="l00812"></a>00812 <span class="comment">/*</span>
- <a name="l00813"></a>00813 <span class="comment"> * @brief C custom defined SHSAX for M3 and M0 processors</span>
- <a name="l00814"></a>00814 <span class="comment"> */</span>
- <a name="l00815"></a>00815 <span class="keyword">static</span> __INLINE q31_t __SHSAX(
- <a name="l00816"></a>00816 q31_t x,
- <a name="l00817"></a>00817 q31_t y)
- <a name="l00818"></a>00818 {
- <a name="l00819"></a>00819
- <a name="l00820"></a>00820 q31_t sum;
- <a name="l00821"></a>00821 q31_t r, s;
- <a name="l00822"></a>00822
- <a name="l00823"></a>00823 r = (short) x;
- <a name="l00824"></a>00824 s = (short) y;
- <a name="l00825"></a>00825
- <a name="l00826"></a>00826 r = ((r >> 1) + (y >> 17));
- <a name="l00827"></a>00827 s = (((x >> 17) - (s >> 1)) << 16);
- <a name="l00828"></a>00828
- <a name="l00829"></a>00829 sum = (s & 0xFFFF0000) | (r & 0x0000FFFF);
- <a name="l00830"></a>00830
- <a name="l00831"></a>00831 <span class="keywordflow">return</span> sum;
- <a name="l00832"></a>00832 }
- <a name="l00833"></a>00833
- <a name="l00834"></a>00834 <span class="comment">/*</span>
- <a name="l00835"></a>00835 <span class="comment"> * @brief C custom defined SMUSDX for M3 and M0 processors</span>
- <a name="l00836"></a>00836 <span class="comment"> */</span>
- <a name="l00837"></a>00837 <span class="keyword">static</span> __INLINE q31_t __SMUSDX(
- <a name="l00838"></a>00838 q31_t x,
- <a name="l00839"></a>00839 q31_t y)
- <a name="l00840"></a>00840 {
- <a name="l00841"></a>00841
- <a name="l00842"></a>00842 <span class="keywordflow">return</span> ((q31_t)(((<span class="keywordtype">short</span>) x * (<span class="keywordtype">short</span>) (y >> 16)) -
- <a name="l00843"></a>00843 ((<span class="keywordtype">short</span>) (x >> 16) * (<span class="keywordtype">short</span>) y)));
- <a name="l00844"></a>00844 }
- <a name="l00845"></a>00845
- <a name="l00846"></a>00846 <span class="comment">/*</span>
- <a name="l00847"></a>00847 <span class="comment"> * @brief C custom defined SMUADX for M3 and M0 processors</span>
- <a name="l00848"></a>00848 <span class="comment"> */</span>
- <a name="l00849"></a>00849 <span class="keyword">static</span> __INLINE q31_t __SMUADX(
- <a name="l00850"></a>00850 q31_t x,
- <a name="l00851"></a>00851 q31_t y)
- <a name="l00852"></a>00852 {
- <a name="l00853"></a>00853
- <a name="l00854"></a>00854 <span class="keywordflow">return</span> ((q31_t)(((<span class="keywordtype">short</span>) x * (<span class="keywordtype">short</span>) (y >> 16)) +
- <a name="l00855"></a>00855 ((<span class="keywordtype">short</span>) (x >> 16) * (<span class="keywordtype">short</span>) y)));
- <a name="l00856"></a>00856 }
- <a name="l00857"></a>00857
- <a name="l00858"></a>00858 <span class="comment">/*</span>
- <a name="l00859"></a>00859 <span class="comment"> * @brief C custom defined QADD for M3 and M0 processors</span>
- <a name="l00860"></a>00860 <span class="comment"> */</span>
- <a name="l00861"></a>00861 <span class="keyword">static</span> __INLINE q31_t __QADD(
- <a name="l00862"></a>00862 q31_t x,
- <a name="l00863"></a>00863 q31_t y)
- <a name="l00864"></a>00864 {
- <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);
- <a name="l00866"></a>00866 }
- <a name="l00867"></a>00867
- <a name="l00868"></a>00868 <span class="comment">/*</span>
- <a name="l00869"></a>00869 <span class="comment"> * @brief C custom defined QSUB for M3 and M0 processors</span>
- <a name="l00870"></a>00870 <span class="comment"> */</span>
- <a name="l00871"></a>00871 <span class="keyword">static</span> __INLINE q31_t __QSUB(
- <a name="l00872"></a>00872 q31_t x,
- <a name="l00873"></a>00873 q31_t y)
- <a name="l00874"></a>00874 {
- <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);
- <a name="l00876"></a>00876 }
- <a name="l00877"></a>00877
- <a name="l00878"></a>00878 <span class="comment">/*</span>
- <a name="l00879"></a>00879 <span class="comment"> * @brief C custom defined SMLAD for M3 and M0 processors</span>
- <a name="l00880"></a>00880 <span class="comment"> */</span>
- <a name="l00881"></a>00881 <span class="keyword">static</span> __INLINE q31_t __SMLAD(
- <a name="l00882"></a>00882 q31_t x,
- <a name="l00883"></a>00883 q31_t y,
- <a name="l00884"></a>00884 q31_t sum)
- <a name="l00885"></a>00885 {
- <a name="l00886"></a>00886
- <a name="l00887"></a>00887 <span class="keywordflow">return</span> (sum + ((<span class="keywordtype">short</span>) (x >> 16) * (<span class="keywordtype">short</span>) (y >> 16)) +
- <a name="l00888"></a>00888 ((<span class="keywordtype">short</span>) x * (<span class="keywordtype">short</span>) y));
- <a name="l00889"></a>00889 }
- <a name="l00890"></a>00890
- <a name="l00891"></a>00891 <span class="comment">/*</span>
- <a name="l00892"></a>00892 <span class="comment"> * @brief C custom defined SMLADX for M3 and M0 processors</span>
- <a name="l00893"></a>00893 <span class="comment"> */</span>
- <a name="l00894"></a>00894 <span class="keyword">static</span> __INLINE q31_t __SMLADX(
- <a name="l00895"></a>00895 q31_t x,
- <a name="l00896"></a>00896 q31_t y,
- <a name="l00897"></a>00897 q31_t …
Large files files are truncated, but you can click here to view the full file