https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64997

            Bug ID: 64997
           Summary: [AArch64] Illegal EON on SIMD registers
           Product: gcc
           Version: 5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: alalaw01 at gcc dot gnu.org

Testcase:

#include <arm_neon.h>
#define force_simd(V1) asm volatile ("mov %d0, %1.d[0]" \
            : "=w"(V1)                                     \
            : "w"(V1)                                      \
            : /* No clobbers */)

int foo(int64x1_t val4, int64x1_t val6, int64x1_t val7)
{
  int64x1_t val5 = vbic_s64 (val4,
                             veor_s64 (val6,
                                       vsri_n_s64 (val6, val7, 13)));
  force_simd (val5);
  return vget_lane_s64 (val5, 0) == 0 ? 1 : 0;
}

generates an illegal assembly instruction (eon v1, v3, v1 -- EON works only on
General-Purpose Registers) at -O1 and higher.

Reply via email to