aboutsummaryrefslogtreecommitdiffstats
path: root/test/monniaux/math/rounding.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/monniaux/math/rounding.c')
-rw-r--r--test/monniaux/math/rounding.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/test/monniaux/math/rounding.c b/test/monniaux/math/rounding.c
index 4831c3d1..c2ce85e3 100644
--- a/test/monniaux/math/rounding.c
+++ b/test/monniaux/math/rounding.c
@@ -1,20 +1,36 @@
#include <stdio.h>
#include <fenv.h>
+#ifdef __K1C__
+#include <mppa_bare_runtime/k1c/registers.h>
+int fesetround(int rounding_mode) {
+ if (rounding_mode < 0 || rounding_mode > 3) return 1;
+ unsigned long long cs = __builtin_k1_get(K1_SFR_CS);
+ cs = (cs & ~(3 << 16)) | (rounding_mode << 16);
+ __builtin_k1_set(K1_SFR_CS, cs);
+ return 0;
+}
+
+int fegetround(void) {
+ unsigned long long cs = __builtin_k1_get(K1_SFR_CS);
+ return (cs >> 16) & 3;
+}
+#endif
+
#pragma STDC FENV_ACCESS ON
-double inverse(double x) {
- return 1.0 / x;
+double add(double x) {
+ return x+0.1;
}
int main() {
if (fesetround(FE_DOWNWARD)) {
printf("fesetround(FE_DOWNWARD) unsuccessful\n");
}
- double low = inverse(3.0);
+ double low = add(3.0);
if (fesetround(FE_UPWARD)) {
printf("fesetround(FE_UPWARD) unsuccessful\n");
}
- double high = inverse(3.0);
- printf("%d %a\n", low==high, high-low);
+ double high = add(3.0);
+ printf("%d %a %d\n", low==high, high-low, fegetround());
}