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).

Reply via email to