/* { dg-require-effective-target int32plus } */

void
sample_move_d32u24_sS (char *dst, float *src, unsigned long nsamples,
		       unsigned long dst_skip)
{
  long long y;
  while (nsamples--)
    {
      y = (long long) (*src * 8388608.0f) << 8;
      if (y > 2147483647) {
	*(int *) dst = 2147483647;
      } else if (y < -2147483647 - 1) {
	*(int *) dst = -2147483647 - 1;
      } else {
	*(int *) dst = (int) y;
      }
      dst += dst_skip;
      src++;
    }
}
