http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56024
Bug #: 56024 Summary: ARM NEON polynomial types behave as if signed Classification: Unclassified Product: gcc Version: 4.8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c AssignedTo: unassig...@gcc.gnu.org ReportedBy: tim.northo...@arm.com (Apologies for any broken conventions, this is my first GCC bug). The ARM NEON intrinsic header arm_neon.h defines two scalar types poly8_t and poly16_t. The existence of these types is at least implicit in the vget_lane and vset_lane intrinsics. However on GCC they seem to be treated as "signed" in some sense with extremely dodgy mathematical consequences. For example: poly8_t p = 0x80; poly16_t q = (poly16_t)p; The polynomial "q" has the value 0xff80. This means that the cast has converted the polynomial "x^7" into "x^15 + x^14 + ... + x^7". This behaviour is also incompatible with the ARM compiler's implementation of these types (they are typedefs from the obvious unsigned types there).