about summary refs log tree commit diff
path: root/sysdeps/m68k/fpu/fl.h
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/m68k/fpu/fl.h')
-rw-r--r--sysdeps/m68k/fpu/fl.h41
1 files changed, 41 insertions, 0 deletions
diff --git a/sysdeps/m68k/fpu/fl.h b/sysdeps/m68k/fpu/fl.h
new file mode 100644
index 0000000000..098e880601
--- /dev/null
+++ b/sysdeps/m68k/fpu/fl.h
@@ -0,0 +1,41 @@
+/* Floating-point constants for the 68881.
+   Copyright (C) 1992 Free Software Foundation, Inc.  */
+
+/* IGNORE($ This is used internally in the library.  */
+#include <sysdeps/ieee754/fl.h>
+/* ansidecl.m4 here inserts the ieee file.  Kludge o rama.
+   $) ENDCOMMENT INCLUDE($sysdeps/ieee754/fl.h$) STARTCOMMENT */
+
+#ifndef	__need_HUGE_VAL
+
+#ifdef	__GNUC__
+
+#undef	FLT_ROUNDS
+
+/* Interrogate the 68881 to find the current rounding mode.  */
+
+static __const __inline int
+DEFUN_VOID(__flt_rounds)
+{
+  unsigned long int __fpcr;
+  __asm("fmove%.l fpcr, %0" : "=g" (__fpcr));
+  switch (__fpcr & (1 | 2))
+    {
+    case 0:
+      return _FLT_ROUNDS_TONEAREST;
+    case 1:
+      return _FLT_ROUNDS_TOZERO;
+    case 2:
+      return _FLT_ROUNDS_TONEGINF;
+    case 3:
+      return _FLT_ROUNDS_TOPOSINF;
+    default:
+      return _FLT_ROUNDS_INDETERMINATE;
+    }
+}
+
+#define	FLT_ROUNDS	(__flt_rounds())
+
+#endif	/* GCC.  */
+
+#endif	/* Don't need HUGE_VAL.  */