This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Mixed-type division in DSP lib

Note: This was originally posted on 30th November 2012 at http://forums.arm.com

Some of the ARM CMSIS routines employ mixed-type division without explicit casting.  See below.  The last line is a q31_t/uint32_t operation.  I could not find an explicit behavior for this situation in a recent C standard, but I believe both operands would be converted to unsigned using the K&R rules.  My compiler is indeed providing the UDIV instruction which gives erroneous results if sum is negative.  

Is this a code issue or compiler implementation issue?

***********************


void arm_mean_q15(
  q15_t * pSrc,
  uint32_t blockSize,
  q15_t * pResult)
{
  q31_t sum = 0;                              /* Temporary result storage */
  ...

  *pResult = (q15_t) (sum / blockSize);
}

Regards,
Bryan
Parents Reply Children
No data