http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45804
Summary: ARM: unnecessary sign extension
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: [email protected]
ReportedBy: [email protected]
In the following code gcc add an unnecessary uxth operation.
static inline uint16_t read16_be(const uint8_t *p)
{
uint16_t v;
__asm__("ldrh %0, %1" : "=r"(v) : "m"(*(const uint16_t *)p));
__asm__("rev16 %0, %0" : "+r"(v));
return v;
}
Many other people have experienced this issue:
http://article.gmane.org/gmane.comp.video.ffmpeg.cvs/33470
http://article.gmane.org/gmane.comp.video.ffmpeg.devel/106781
https://bugs.launchpad.net/gcc-linaro/+bug/634682