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