/* The dynamic shift library functions truncate the shift count to 5 bits.
   Verify that this is taken into account and no extra shift count
   truncations are generated before the library call.  */
/* { dg-do compile { target { ! has_dyn_shift } } }  */
/* { dg-options "-O1" } */
/* { dg-final { scan-assembler-not "and" } } */
/* { dg-final { scan-assembler-not "#31" } } */

int
test00 (unsigned int a, int* b, int c, int* d, unsigned int e)
{
  int s = 0;
  int i;
  for (i = 0; i < c; ++i)
    s += d[i] + b[i] + (e << (i & 31));
  return s;  
}

int
test01 (unsigned int a, int* b, int c, int* d, unsigned int e)
{
  int s = 0;
  int i;
  for (i = 0; i < c; ++i)
    s += d[i] + b[i] + (e >> (i & 31));
  return s;  
}

int
test03 (unsigned int a, unsigned int b)
{
  return b << (a & 31);
}

unsigned int
test04 (unsigned int a, int b)
{
  return a >> (b & 31);
}
