1 2 3 4 5 6 7 8 9 10 11 12
#include <math.h> double remainder(double x, double y) { unsigned short fpsr; // fprem1 does not introduce excess precision into x do __asm__ ("fprem1; fnstsw %%ax" : "+t"(x), "=a"(fpsr) : "u"(y)); while (fpsr & 0x400); return x; } weak_alias(remainder, drem);