/* { dg-do compile } */
/* { dg-options "-march=rv32imafdc_zfa -mabi=ilp32d" { target { rv32 } } } */
/* { dg-options "-march=rv64imafdc_zfa -mabi=lp64d" { target { rv64 } } } */

void foo_float32 ()
{
  volatile float a;
  a = -1.0;
  a = 1.1754944e-38;
  a = 1.0/(1 << 16);
  a = 1.0/(1 << 15);
  a = 1.0/(1 << 8);
  a = 1.0/(1 << 7);
  a = 1.0/(1 << 4);
  a = 1.0/(1 << 3);
  a = 1.0/(1 << 2);
  a = 0.3125;
  a = 0.375;
  a = 0.4375;
  a = 0.5;
  a = 0.625;
  a = 0.75;
  a = 0.875;
  a = 1.0;
  a = 1.25;
  a = 1.5;
  a = 1.75;
  a = 2.0;
  a = 2.5;
  a = 3.0;
  a = 1.0*(1 << 2);
  a = 1.0*(1 << 3);
  a = 1.0*(1 << 4);
  a = 1.0*(1 << 7);
  a = 1.0*(1 << 8);
  a = 1.0*(1 << 15);
  a = 1.0*(1 << 16);
  a = __builtin_inff ();
  a = __builtin_nanf ("");
}

void foo_double64 ()
{
  volatile double a;
  a = -1.0;
  a = 2.2250738585072014e-308;
  a = 1.0/(1 << 16);
  a = 1.0/(1 << 15);
  a = 1.0/(1 << 8);
  a = 1.0/(1 << 7);
  a = 1.0/(1 << 4);
  a = 1.0/(1 << 3);
  a = 1.0/(1 << 2);
  a = 0.3125;
  a = 0.375;
  a = 0.4375;
  a = 0.5;
  a = 0.625;
  a = 0.75;
  a = 0.875;
  a = 1.0;
  a = 1.25;
  a = 1.5;
  a = 1.75;
  a = 2.0;
  a = 2.5;
  a = 3.0;
  a = 1.0*(1 << 2);
  a = 1.0*(1 << 3);
  a = 1.0*(1 << 4);
  a = 1.0*(1 << 7);
  a = 1.0*(1 << 8);
  a = 1.0*(1 << 15);
  a = 1.0*(1 << 16);
  a = __builtin_inf ();
  a = __builtin_nan ("");
}

/* { dg-final { scan-assembler-times {\mfli\.s\M} 32 } } */
/* { dg-final { scan-assembler-times {\mfli\.d\M} 32 } } */