1570af302Sopenharmony_ci#include <math.h>
2570af302Sopenharmony_ci
3570af302Sopenharmony_cidouble fmod(double x, double y)
4570af302Sopenharmony_ci{
5570af302Sopenharmony_ci	unsigned short fpsr;
6570af302Sopenharmony_ci	// fprem does not introduce excess precision into x
7570af302Sopenharmony_ci	do __asm__ ("fprem; fnstsw %%ax" : "+t"(x), "=a"(fpsr) : "u"(y));
8570af302Sopenharmony_ci	while (fpsr & 0x400);
9570af302Sopenharmony_ci	return x;
10570af302Sopenharmony_ci}
11