(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
ashltidisi.c
       1  /* { dg-do run } */
       2  /* { dg-options "-O2 -save-temps" } */
       3  
       4  extern void abort (void);
       5  
       6  #define GEN_TEST_CASE(x, y, z)\
       7  __uint128_t __attribute__ ((noinline))\
       8  ushift_##x##_##z (unsigned y data)\
       9  {\
      10    return (__uint128_t) data << x;\
      11  }\
      12  __int128_t __attribute__ ((noinline)) \
      13  shift_##x##_##z (y data) \
      14  {\
      15    return (__int128_t) data << x;\
      16  }
      17  
      18  GEN_TEST_CASE (53, int, i)
      19  GEN_TEST_CASE (3, long long, ll)
      20  GEN_TEST_CASE (13, long long, ll)
      21  GEN_TEST_CASE (53, long long, ll)
      22  
      23  int
      24  main (int argc, char **argv)
      25  {
      26  
      27  #define SHIFT_CHECK(x, y, z, p) \
      28  	if (ushift_##y##_##p (x)\
      29  	    != ((__uint128_t) (unsigned z) x << y)) \
      30  	  abort ();\
      31  	if (shift_##y##_##p (x)\
      32  	    != ((__uint128_t) (signed z) x << y)) \
      33  	  abort ();
      34  
      35    SHIFT_CHECK (0x12345678, 53, int, i)
      36    SHIFT_CHECK (0xcafecafe, 53, int, i)
      37  
      38    SHIFT_CHECK (0x1234567890abcdefLL, 3, long long, ll)
      39    SHIFT_CHECK (0x1234567890abcdefLL, 13, long long, ll)
      40    SHIFT_CHECK (0x1234567890abcdefLL, 53, long long, ll)
      41    SHIFT_CHECK (0xcafecafedeaddeadLL, 3, long long, ll)
      42    SHIFT_CHECK (0xcafecafedeaddeadLL, 13, long long, ll)
      43    SHIFT_CHECK (0xcafecafedeaddeadLL, 53, long long, ll)
      44  
      45    return 0;
      46  }
      47  
      48  /* { dg-final { scan-assembler-times "asr" 3 } } */
      49  /* { dg-final { scan-assembler-not "extr\t" } } */