double fmod_native(double x, double y)
{
double ptr(double,double);
static char machine_code[] = {
0x55, // push ebp
0x8B, 0xEC, // mov ebp, esp
0xDD, 0x45, 0x10, // fld qword ptr [ebp+0x10]
0xDD, 0x45, 0x08, // fld qword ptr [ebp+0x08]
0xD9, 0xF8, // fprem
0xDD, 0x5D, 0xF8, // fstp qword ptr [ebp-0x08]
0xDD, 0xD8, // fstp st(0)
0xDD, 0x45, 0xF8, // fld qword ptr [ebp-0x08]
0x5D, // pop ebp
0xC3 // ret
};
ptr = machine_code;
ptr(x, y);
}
void main()
{
printf("fmod(7.0, 5.0) = %f", fmod_native(7.0, 5.0));
}