This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug inline-asm/41538] New: Mixing ARM/NEON intrinsic variables and inline assembly


Trying to peg C intrinsic variables (for ARM/NEON) to a specific 128-bit
register (e.g. q0-q15) does not work at all.  For example,

   register int16x8_t v0 asm ("q0");  // q0=d0-d1
   register int16x8_t v1 asm ("q1");  // q1=d2-d3

is totally ignored yet compiles without warning.  If I try the front door,

   int16x8x2_t v8;

   asm volatile (
      "vmulq.s16 q2, %1, %2\n\t"
      "vshrn.i16 %0, q2, #13\n\t"
      : "=r" (v0) 
      : "r" (v8.val[0]), "r" (v8.val[1])
      : "d4", "d5", "q2"
      );

it tries to use r registers.  See the error:

        /tmp/ccmAG4Ya.s:321: Error: Neon double or quad precision register
expected -
        `vmulq.s16 q2,r2,r8'
        /tmp/ccmAG4Ya.s:322: Error: bad instruction
        `vshln.i16 r2,q2,#1'

This makes mixing C and inline assembly nearly impossible for NEON code.


-- 
           Summary: Mixing ARM/NEON intrinsic variables and inline assembly
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: major
          Priority: P3
         Component: inline-asm
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: gmcgrath at yahoo dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41538


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]