1 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 void do_fld1 ( void* p ) 6 { 7 asm __volatile__("fninit"); 8 asm __volatile__("fld1"); 9 asm __volatile__("fstpl (%0)" : : "r" (p) : "memory" ); 10 } 11 12 void do_fldl2t ( void* p ) 13 { 14 asm __volatile__("fninit"); 15 asm __volatile__("fldl2t"); 16 asm __volatile__("fstpl (%0)" : : "r" (p) : "memory" ); 17 } 18 19 void do_fldl2e ( void* p ) 20 { 21 asm __volatile__("fninit"); 22 asm __volatile__("fldl2e"); 23 asm __volatile__("fstpl (%0)" : : "r" (p) : "memory" ); 24 } 25 26 void do_fldpi ( void* p ) 27 { 28 asm __volatile__("fninit"); 29 asm __volatile__("fldpi"); 30 asm __volatile__("fstpl (%0)" : : "r" (p) : "memory" ); 31 } 32 33 void do_fldlg2 ( void* p ) 34 { 35 asm __volatile__("fninit"); 36 asm __volatile__("fldlg2"); 37 asm __volatile__("fstpl (%0)" : : "r" (p) : "memory" ); 38 } 39 40 void do_fldln2 ( void* p ) 41 { 42 asm __volatile__("fninit"); 43 asm __volatile__("fldln2"); 44 asm __volatile__("fstpl (%0)" : : "r" (p) : "memory" ); 45 } 46 47 void do_fldz ( void* p ) 48 { 49 asm __volatile__("fninit"); 50 asm __volatile__("fldz"); 51 asm __volatile__("fstpl (%0)" : : "r" (p) : "memory" ); 52 } 53 54 typedef unsigned char UChar; 55 56 void foo ( void (*f)(void*), char* name ) 57 { 58 int i; 59 UChar* b = malloc(8); 60 f(b); 61 printf("%s IRConst_F64i(0x", name); 62 for (i = 7; i >= 0; i--) 63 printf("%02x", (int)b[i]); 64 printf(")\n"); 65 } 66 67 int main ( void ) 68 { 69 foo( do_fld1, "fld1 "); 70 foo( do_fldl2t, "fldl2t"); 71 foo( do_fldl2e, "fldl2e"); 72 foo( do_fldpi, "fldpi "); 73 foo( do_fldlg2, "fldlg2"); 74 foo( do_fldln2, "fldln2"); 75 foo( do_fldz, "fldz "); 76 return 0; 77 } 78