(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
rev16_1.c
       1  /* { dg-options "-O2" } */
       2  /* { dg-do run } */
       3  
       4  extern void abort (void);
       5  
       6  typedef unsigned int __u32;
       7  
       8  __u32
       9  __rev16_32_alt (__u32 x)
      10  {
      11    return (((__u32)(x) & (__u32)0xff00ff00UL) >> 8)
      12           | (((__u32)(x) & (__u32)0x00ff00ffUL) << 8);
      13  }
      14  
      15  __u32
      16  __rev16_32 (__u32 x)
      17  {
      18    return (((__u32)(x) & (__u32)0x00ff00ffUL) << 8)
      19           | (((__u32)(x) & (__u32)0xff00ff00UL) >> 8);
      20  }
      21  
      22  typedef unsigned long long __u64;
      23  
      24  __u64
      25  __rev16_64_alt (__u64 x)
      26  {
      27    return (((__u64)(x) & (__u64)0xff00ff00ff00ff00UL) >> 8)
      28           | (((__u64)(x) & (__u64)0x00ff00ff00ff00ffUL) << 8);
      29  }
      30  
      31  __u64
      32  __rev16_64 (__u64 x)
      33  {
      34    return (((__u64)(x) & (__u64)0x00ff00ff00ff00ffUL) << 8)
      35           | (((__u64)(x) & (__u64)0xff00ff00ff00ff00UL) >> 8);
      36  }
      37  
      38  int
      39  main (void)
      40  {
      41    volatile __u32 in32 = 0x12345678;
      42    volatile __u32 expected32 = 0x34127856;
      43    volatile __u64 in64 = 0x1234567890abcdefUL;
      44    volatile __u64 expected64 = 0x34127856ab90efcdUL;
      45  
      46    if (__rev16_32 (in32) != expected32)
      47      abort ();
      48  
      49    if (__rev16_32_alt (in32) != expected32)
      50      abort ();
      51  
      52    if (__rev16_64 (in64) != expected64)
      53      abort ();
      54  
      55    if (__rev16_64_alt (in64) != expected64)
      56      abort ();
      57  
      58    return 0;
      59  }