Program to check values of x87 constants.


git-svn-id: svn://svn.valgrind.org/vex/trunk@704 8f6e269a-dfd6-0310-a8e1-e2731360e62c
diff --git a/test/fpconst.c b/test/fpconst.c
new file mode 100644
index 0000000..c6ebdc3
--- /dev/null
+++ b/test/fpconst.c
@@ -0,0 +1,77 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+
+void do_fld1 ( void* p )
+{
+   asm __volatile__("fninit");
+   asm __volatile__("fld1");
+   asm __volatile__("fstpl (%0)" : : "r" (p) : "memory" );
+}
+
+void do_fldl2t ( void* p )
+{
+   asm __volatile__("fninit");
+   asm __volatile__("fldl2t");
+   asm __volatile__("fstpl (%0)" : : "r" (p) : "memory" );
+}
+
+void do_fldl2e ( void* p )
+{
+   asm __volatile__("fninit");
+   asm __volatile__("fldl2e");
+   asm __volatile__("fstpl (%0)" : : "r" (p) : "memory" );
+}
+
+void do_fldpi ( void* p )
+{
+   asm __volatile__("fninit");
+   asm __volatile__("fldpi");
+   asm __volatile__("fstpl (%0)" : : "r" (p) : "memory" );
+}
+
+void do_fldlg2 ( void* p )
+{
+   asm __volatile__("fninit");
+   asm __volatile__("fldlg2");
+   asm __volatile__("fstpl (%0)" : : "r" (p) : "memory" );
+}
+
+void do_fldln2 ( void* p )
+{
+   asm __volatile__("fninit");
+   asm __volatile__("fldln2");
+   asm __volatile__("fstpl (%0)" : : "r" (p) : "memory" );
+}
+
+void do_fldz ( void* p )
+{
+   asm __volatile__("fninit");
+   asm __volatile__("fldz");
+   asm __volatile__("fstpl (%0)" : : "r" (p) : "memory" );
+}
+
+typedef  unsigned char  UChar;
+
+void foo ( void (*f)(void*), char* name )
+{
+  int i;
+  UChar* b = malloc(8);
+  f(b);
+  printf("%s IRConst_F64i(0x", name);
+  for (i = 7; i >= 0; i--)
+    printf("%02x", (int)b[i]);
+  printf(")\n");
+}
+
+int main ( void )
+{
+  foo( do_fld1,   "fld1  ");
+  foo( do_fldl2t, "fldl2t");
+  foo( do_fldl2e, "fldl2e");
+  foo( do_fldpi,  "fldpi ");
+  foo( do_fldlg2, "fldlg2");
+  foo( do_fldln2, "fldln2");
+  foo( do_fldz,   "fldz  ");
+  return 0;
+}