/* { dg-do run } */
/* { dg-options "-O2 --save-temps -fno-inline" } */

extern void abort (void);
typedef unsigned int u32;

u32
ngc_si (u32 a, u32 b, u32 c, u32 d)
{
  a = -b - (c < d);
  return a;
}

typedef unsigned long long u64;

u64
ngc_si_tst (u64 a, u32 b, u32 c, u32 d)
{
  a = -b - (c < d);
  return a;
}

u64
ngc_di (u64 a, u64 b, u64 c, u64 d)
{
  a = -b - (c < d);
  return a;
}

int
main ()
{
  int x;
  u64 y;

  x = ngc_si (29, 4, 5, 4);
  if (x != -4)
    abort ();

  x = ngc_si (1024, 2, 20, 13);
  if (x != -2)
    abort ();

  y = ngc_si_tst (0x130000029ll, 32, 50, 12);
  if (y != 0xffffffe0)
    abort ();

  y = ngc_si_tst (0x5000500050005ll, 21, 2, 14);
  if (y != 0xffffffea)
    abort ();

  y = ngc_di (0x130000029ll, 0x320000004ll, 0x505050505ll, 0x123123123ll);
  if (y != 0xfffffffcdffffffc)
    abort ();

  y = ngc_di (0x5000500050005ll,
	      0x2111211121112ll, 0x0000000002020ll, 0x1414575046477ll);
  if (y != 0xfffdeeedeeedeeed)
    abort ();

  return 0;
}

/* { dg-final { scan-assembler-times "ngc\tw\[0-9\]+, w\[0-9\]+" 2 } } */
/* { dg-final { scan-assembler-times "ngc\tx\[0-9\]+, x\[0-9\]+" 1 } } */
