(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
insv_2.c
       1  /* { dg-do run { target aarch64*-*-* } } */
       2  /* { dg-options "-O2 --save-temps -fno-inline" } */
       3  /* { dg-require-effective-target aarch64_big_endian } */
       4  
       5  extern void abort (void);
       6  
       7  typedef struct bitfield
       8  {
       9    unsigned short eight: 8;
      10    unsigned short four: 4;
      11    unsigned short five: 5;
      12    unsigned short seven: 7;
      13    unsigned int sixteen: 16;
      14  } bitfield;
      15  
      16  bitfield
      17  bfi1 (bitfield a)
      18  {
      19    /* { dg-final { scan-assembler "bfi\tx\[0-9\]+, x\[0-9\]+, 56, 8" } } */
      20    a.eight = 3;
      21    return a;
      22  }
      23  
      24  bitfield
      25  bfi2 (bitfield a)
      26  {
      27    /* { dg-final { scan-assembler "bfi\tx\[0-9\]+, x\[0-9\]+, 43, 5" } } */
      28    a.five = 7;
      29    return a;
      30  }
      31  
      32  bitfield
      33  movk (bitfield a)
      34  {
      35    /* { dg-final { scan-assembler "movk\tx\[0-9\]+, 0x1d6b, lsl 16" } } */
      36    a.sixteen = 7531;
      37    return a;
      38  }
      39  
      40  bitfield
      41  set1 (bitfield a)
      42  {
      43    /* { dg-final { scan-assembler "orr\tx\[0-9\]+, x\[0-9\]+, 272678883688448" } } */
      44    a.five = 0x1f;
      45    return a;
      46  }
      47  
      48  bitfield
      49  set0 (bitfield a)
      50  {
      51    /* { dg-final { scan-assembler "and\tx\[0-9\]+, x\[0-9\]+, -272678883688449" } } */
      52    a.five = 0;
      53    return a;
      54  }
      55  
      56  
      57  int
      58  main (int argc, char** argv)
      59  {
      60    static bitfield a;
      61    bitfield b = bfi1 (a);
      62    bitfield c = bfi2 (b);
      63    bitfield d = movk (c);
      64  
      65    if (d.eight != 3)
      66      abort ();
      67  
      68    if (d.five != 7)
      69      abort ();
      70  
      71    if (d.sixteen != 7531)
      72      abort ();
      73  
      74    d = set1 (d);
      75    if (d.five != 0x1f)
      76      abort ();
      77  
      78    d = set0 (d);
      79    if (d.five != 0)
      80      abort ();
      81  
      82    return 0;
      83  }
      84