(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
optimize-bswapdi-3.c
       1  /* { dg-do compile } */
       2  /* { dg-require-effective-target bswap } */
       3  /* { dg-require-effective-target stdint_types } */
       4  /* { dg-options "-O2 -fdump-tree-bswap" } */
       5  /* { dg-additional-options "-mzarch" { target s390*-*-* } } */
       6  
       7  #include <stdint.h>
       8  
       9  unsigned char data[8];
      10  
      11  struct uint64_st {
      12    unsigned char u0, u1, u2, u3, u4, u5, u6, u7;
      13  };
      14  
      15  uint64_t read_le64_1 (void)
      16  {
      17    return (uint64_t) data[0] | ((uint64_t) data[1] << 8)
      18  	 | ((uint64_t) data[2] << 16) | ((uint64_t) data[3] << 24)
      19  	 | ((uint64_t) data[4] << 32) | ((uint64_t) data[5] << 40)
      20  	 | ((uint64_t) data[6] << 48) | ((uint64_t) data[7] << 56);
      21  }
      22  
      23  uint64_t read_le64_2 (struct uint64_st data)
      24  {
      25    return (uint64_t) data.u0 | ((uint64_t) data.u1 << 8)
      26  	 | ((uint64_t) data.u2 << 16) | ((uint64_t) data.u3 << 24)
      27  	 | ((uint64_t) data.u4 << 32) | ((uint64_t) data.u5 << 40)
      28  	 | ((uint64_t) data.u6 << 48) | ((uint64_t) data.u7 << 56);
      29  }
      30  
      31  uint64_t read_le64_3 (unsigned char *data)
      32  {
      33    return (uint64_t) *data | ((uint64_t) *(data + 1) << 8)
      34  	 | ((uint64_t) *(data + 2) << 16) | ((uint64_t) *(data + 3) << 24)
      35  	 | ((uint64_t) *(data + 4) << 32) | ((uint64_t) *(data + 5) << 40)
      36  	 | ((uint64_t) *(data + 6) << 48) | ((uint64_t) *(data + 7) << 56);
      37  }
      38  
      39  uint64_t read_be64_1 (void)
      40  {
      41    return (uint64_t) data[7] | ((uint64_t) data[6] << 8)
      42  	 | ((uint64_t) data[5] << 16) | ((uint64_t) data[4] << 24)
      43  	 | ((uint64_t) data[3] << 32) | ((uint64_t) data[2] << 40)
      44  	 | ((uint64_t) data[1] << 48) | ((uint64_t) data[0] << 56);
      45  }
      46  
      47  uint64_t read_be64_2 (struct uint64_st data)
      48  {
      49    return (uint64_t) data.u7 | ((uint64_t) data.u6 << 8)
      50  	 | ((uint64_t) data.u5 << 16) | ((uint64_t) data.u4 << 24)
      51  	 | ((uint64_t) data.u3 << 32) | ((uint64_t) data.u2 << 40)
      52  	 | ((uint64_t) data.u1 << 48) | ((uint64_t) data.u0 << 56);
      53  }
      54  
      55  uint64_t read_be64_3 (unsigned char *data)
      56  {
      57    return (uint64_t) *(data + 7) | ((uint64_t) *(data + 6) << 8)
      58  	 | ((uint64_t) *(data + 5) << 16) | ((uint64_t) *(data + 4) << 24)
      59  	 | ((uint64_t) *(data + 3) << 32) | ((uint64_t) *(data + 2) << 40)
      60  	 | ((uint64_t) *(data + 1) << 48) | ((uint64_t) *data << 56);
      61  }
      62  
      63  /* { dg-final { scan-tree-dump-times "64 bit load in target endianness found at" 3 "bswap" } } */
      64  /* { dg-final { scan-tree-dump-times "64 bit bswap implementation found at" 3 "bswap" } } */