/* { dg-do run { target aarch64*-*-* } } */
/* { dg-options "-O2 --save-temps -fno-inline" } */
/* { dg-require-effective-target aarch64_big_endian } */

extern void abort (void);

typedef struct bitfield
{
  unsigned short eight: 8;
  unsigned short four: 4;
  unsigned short five: 5;
  unsigned short seven: 7;
  unsigned int sixteen: 16;
} bitfield;

bitfield
bfi1 (bitfield a)
{
  /* { dg-final { scan-assembler "bfi\tx\[0-9\]+, x\[0-9\]+, 56, 8" } } */
  a.eight = 3;
  return a;
}

bitfield
bfi2 (bitfield a)
{
  /* { dg-final { scan-assembler "bfi\tx\[0-9\]+, x\[0-9\]+, 43, 5" } } */
  a.five = 7;
  return a;
}

bitfield
movk (bitfield a)
{
  /* { dg-final { scan-assembler "movk\tx\[0-9\]+, 0x1d6b, lsl 16" } } */
  a.sixteen = 7531;
  return a;
}

bitfield
set1 (bitfield a)
{
  /* { dg-final { scan-assembler "orr\tx\[0-9\]+, x\[0-9\]+, 272678883688448" } } */
  a.five = 0x1f;
  return a;
}

bitfield
set0 (bitfield a)
{
  /* { dg-final { scan-assembler "and\tx\[0-9\]+, x\[0-9\]+, -272678883688449" } } */
  a.five = 0;
  return a;
}


int
main (int argc, char** argv)
{
  static bitfield a;
  bitfield b = bfi1 (a);
  bitfield c = bfi2 (b);
  bitfield d = movk (c);

  if (d.eight != 3)
    abort ();

  if (d.five != 7)
    abort ();

  if (d.sixteen != 7531)
    abort ();

  d = set1 (d);
  if (d.five != 0x1f)
    abort ();

  d = set0 (d);
  if (d.five != 0)
    abort ();

  return 0;
}

