123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- #include "arm_math.h"
- void arm_max_f32(
- float32_t * pSrc,
- uint32_t blockSize,
- float32_t * pResult,
- uint32_t * pIndex)
- {
- #if defined (ARM_MATH_DSP)
-
- float32_t maxVal1, maxVal2, out;
- uint32_t blkCnt, outIndex, count;
-
- count = 0U;
-
- outIndex = 0U;
-
- out = *pSrc++;
-
- blkCnt = (blockSize - 1U) >> 2U;
- while (blkCnt > 0U)
- {
-
- maxVal1 = *pSrc++;
- maxVal2 = *pSrc++;
-
- if (out < maxVal1)
- {
-
- out = maxVal1;
- outIndex = count + 1U;
- }
-
- if (out < maxVal2)
- {
-
- out = maxVal2;
- outIndex = count + 2U;
- }
-
- maxVal1 = *pSrc++;
- maxVal2 = *pSrc++;
-
- if (out < maxVal1)
- {
-
- out = maxVal1;
- outIndex = count + 3U;
- }
-
- if (out < maxVal2)
- {
-
- out = maxVal2;
- outIndex = count + 4U;
- }
- count += 4U;
-
- blkCnt--;
- }
-
- blkCnt = (blockSize - 1U) % 4U;
- #else
-
- float32_t maxVal1, out;
- uint32_t blkCnt, outIndex;
-
- outIndex = 0U;
-
- out = *pSrc++;
- blkCnt = (blockSize - 1U);
- #endif
- while (blkCnt > 0U)
- {
-
- maxVal1 = *pSrc++;
-
- if (out < maxVal1)
- {
-
- out = maxVal1;
- outIndex = blockSize - blkCnt;
- }
-
- blkCnt--;
- }
-
- *pResult = out;
- *pIndex = outIndex;
- }
|