Arm Community
Site
Search
User
Site
Search
User
Support forums
Arm Development Studio forum
Mixed-type division in DSP lib
Jump...
Cancel
Locked
Locked
Replies
2 replies
Subscribers
119 subscribers
Views
2988 views
Users
0 members are here
Options
Share
More actions
Cancel
Related
How was your experience today?
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
Bryan Audiffred
over 12 years ago
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
Emilien Kofman
over 12 years ago
Note: This was originally posted on 3rd December 2012 at
http://forums.arm.com
Hi Bryan,
I was wondering the exact same thing as I got wrong results in my application... I ran the same kind of division with gcc and I also got a wrong result. Once I added the cast to blockSize it worked correctly.
Would this be related to "6.3.1.8 Usual arithmetic conversions" (C99) :
"[...] Otherwise, if the operand that has unsigned integer type has rank greater or
equal to the rank of the type of the other operand, then the operand with
signed integer type is converted to the type of the operand with unsigned
integer type."
Anyone knows if I'm doing it wrong or if the CMSIS routines need this cast?
Best regards,
--
Emilien
Cancel
Vote up
0
Vote down
Cancel
Dr. Paul Beckmann
over 12 years ago
Note: This was originally posted on 3rd December 2012 at
http://forums.arm.com
Hi Bryan and Emilien,
Thanks for reporting this issue with the CMSIS library. This is indeed a bug and the signed sum result is converted to unsigned. We'll get this fixed in the next release of the CMSIS library.
-Paul
Cancel
Vote up
0
Vote down
Cancel