1 2#include <stdio.h> 3#include <stdlib.h> 4 5void do_fld1 ( void* p ) 6{ 7 asm __volatile__("fninit"); 8 asm __volatile__("fld1"); 9 asm __volatile__("fstpl (%0)" : : "r" (p) : "memory" ); 10} 11 12void do_fldl2t ( void* p ) 13{ 14 asm __volatile__("fninit"); 15 asm __volatile__("fldl2t"); 16 asm __volatile__("fstpl (%0)" : : "r" (p) : "memory" ); 17} 18 19void do_fldl2e ( void* p ) 20{ 21 asm __volatile__("fninit"); 22 asm __volatile__("fldl2e"); 23 asm __volatile__("fstpl (%0)" : : "r" (p) : "memory" ); 24} 25 26void do_fldpi ( void* p ) 27{ 28 asm __volatile__("fninit"); 29 asm __volatile__("fldpi"); 30 asm __volatile__("fstpl (%0)" : : "r" (p) : "memory" ); 31} 32 33void do_fldlg2 ( void* p ) 34{ 35 asm __volatile__("fninit"); 36 asm __volatile__("fldlg2"); 37 asm __volatile__("fstpl (%0)" : : "r" (p) : "memory" ); 38} 39 40void do_fldln2 ( void* p ) 41{ 42 asm __volatile__("fninit"); 43 asm __volatile__("fldln2"); 44 asm __volatile__("fstpl (%0)" : : "r" (p) : "memory" ); 45} 46 47void do_fldz ( void* p ) 48{ 49 asm __volatile__("fninit"); 50 asm __volatile__("fldz"); 51 asm __volatile__("fstpl (%0)" : : "r" (p) : "memory" ); 52} 53 54typedef unsigned char UChar; 55 56void 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 67int 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