Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "arm_math.h"
00025
00053 void arm_max_f32(
00054 float32_t * pSrc,
00055 uint32_t blockSize,
00056 float32_t * pResult,
00057 uint32_t * pIndex)
00058 {
00059 float32_t maxVal1, maxVal2, out;
00060 uint32_t blkCnt, outIndex, count;
00061
00062
00063 count = 0u;
00064
00065 outIndex = 0u;
00066
00067 out = *pSrc++;
00068
00069
00070
00071 blkCnt = (blockSize - 1u) >> 2u;
00072
00073 while(blkCnt > 0u)
00074 {
00075
00076 maxVal1 = pSrc[0];
00077
00078 maxVal2 = pSrc[1];
00079
00080
00081 if(out < maxVal1)
00082 {
00083
00084 out = maxVal1;
00085 outIndex = count + 1u;
00086 }
00087
00088 maxVal1 = pSrc[2];
00089
00090
00091 if(out < maxVal2)
00092 {
00093
00094 out = maxVal2;
00095 outIndex = count + 2u;
00096 }
00097
00098 maxVal2 = pSrc[3];
00099
00100
00101 if(out < maxVal1)
00102 {
00103
00104 out = maxVal1;
00105 outIndex = count + 3u;
00106 }
00107
00108
00109 if(out < maxVal2)
00110 {
00111
00112 out = maxVal2;
00113 outIndex = count + 4u;
00114 }
00115
00116 count += 4u;
00117
00118 pSrc += 4u;
00119
00120
00121 blkCnt--;
00122 }
00123
00124
00125 blkCnt = (blockSize - 1u) % 4u;
00126
00127 while(blkCnt > 0u)
00128 {
00129
00130 maxVal1 = *pSrc++;
00131
00132
00133 if(out < maxVal1)
00134 {
00135
00136 out = maxVal1;
00137 outIndex = blockSize - blkCnt;
00138 }
00139
00140
00141
00142 blkCnt--;
00143
00144 }
00145
00146
00147 *pResult = out;
00148 *pIndex = outIndex;
00149 }
00150