/* { dg-options "-msoft-float -mips2" } */ typedef long int __int32_t; typedef long unsigned int __uint32_t; typedef union { double value; struct { __uint32_t msw; __uint32_t lsw; } parts; } ieee_double_shape_type; double __ieee754_fmod (double x, double y, int z, int xx) { __int32_t n, hx, hy, hz, ix, iy, sx, i; __uint32_t lx, ly, lz; ieee_double_shape_type ew_u; ew_u.value = (x); (lx) = ew_u.parts.lsw; ew_u.value = (y); (hy) = ew_u.parts.msw; (ly) = ew_u.parts.lsw; if (hy == 0 || hx >= 0x7ff00000) return (x * y); if (z) { if ((hx < hy) || (lx < ly)) return x; lz = lx - ly; lx = lz + lz; } ieee_double_shape_type iw_u; iw_u.parts.lsw = (lx); return iw_u.value; }