#include <stdio.h> #include <math.h> #include <stdlib.h> float no1,no2,no3,no4,no5,no6,no7; float result,resultd,resultld; float *float_memory; long double ldx = 88888888888888888888.88, ldy = 9999999999999999999.99; double x = 100.345, y = 25.7789; /* marks FPU stack as empty */ void empty_fpu_stack() { asm ("ffree %st(1) \n\t" "ffree %st(2) \n\t" "ffree %st(3) \n\t" "ffree %st(4) \n\t" "ffree %st(5) \n\t" "ffree %st(6) \n\t" "ffree %st(7)"); } /* initialization of floats */ void init_floats() { no1 = 10.45; no2 = 20.77; no3 = 156.89874646; no4 = 14.56; no5 = 11.11; no6 = 66.77; no7 = 88.88; float_memory = malloc(sizeof(float) * 4); *float_memory = 256.256; *(float_memory + 1) = 356.356; *(float_memory + 2) = 456.456; *(float_memory + 3) = 556.556; } int main() { init_floats(); empty_fpu_stack(); /* BEGIN I387-FLOAT-REVERSE */ asm("nop"); /* TEST ENV */ asm ("fsave %0" : "=m"(*float_memory) : ); asm ("frstor %0" : : "m"(*float_memory)); asm ("fstsw %ax"); /* test eax register */ asm ("fld1"); asm ("fldl2t"); asm ("fldl2e"); asm ("fldpi"); asm ("fldlg2"); asm ("fldln2"); asm ("fldz"); asm ("nop"); return 1; /* END I387-FLOAT-REVERSE */ } |