--- /dev/null
+#include "test.h"
+#include <math.h>
+#include <stdint.h>
+#include <fenv.h>
+#include <stdio.h>
+#include <float.h>
+
+
+void test_fenv()
+{
+ int r;
+
+ r = fesetround(FE_UPWARD);
+ if (r != 0)
+ error("fesetround %d\n", r);
+ r = fegetround();
+ if (r != FE_UPWARD)
+ error("fegetround %x wanted %x\n", r, FE_UPWARD);
+ r = fesetround(FE_TONEAREST);
+ if (r != 0)
+ error("fesetround %d\n", r);
+ r = fegetround();
+ if (r != FE_TONEAREST)
+ error("fegetround %x wanted %x\n", r, FE_TONEAREST);
+}
+
+void test_fenv_except()
+{
+ int i,r;
+
+ for (i = 0; i < 64; i++) {
+ feclearexcept(FE_ALL_EXCEPT);
+
+ r = feraiseexcept(i);
+ if (r)
+ error("feraise %d returned %d\n", i, r);
+ r = fetestexcept(FE_ALL_EXCEPT);
+ if (r != i)
+ error("feraise want %d got %d\n", i, r);
+ }
+}
+
+void bench_feraiseexcept(int N)
+{
+ int i;
+ for (i = 0; i < N; i++) {
+ feraiseexcept(i&63);
+ }
+}
+
+void bench_fesetround(int N)
+{
+ int i;
+ int r = 0;
+
+ for (i = 0; i < N; i++) {
+ r ^= 0x400;
+ fesetround(r);
+ }
+}