microblaze: Add support for fcmp.un
authorEdgar E. Iglesias <edgar.iglesias@petalogix.com>
Thu, 9 Sep 2010 20:05:48 +0000 (22:05 +0200)
committerEdgar E. Iglesias <edgar.iglesias@gmail.com>
Thu, 9 Sep 2010 20:05:48 +0000 (22:05 +0200)
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@petalogix.com>
target-microblaze/op_helper.c

index 294e08c..3d2b313 100644 (file)
@@ -297,8 +297,22 @@ uint32_t helper_fdiv(uint32_t a, uint32_t b)
 
 uint32_t helper_fcmp_un(uint32_t a, uint32_t b)
 {
-    cpu_abort(env, "Unsupported fcmp.un\n");
-    return 0;
+    CPU_FloatU fa, fb;
+    uint32_t r = 0;
+
+    fa.l = a;
+    fb.l = b;
+
+    if (float32_is_signaling_nan(fa.f) || float32_is_signaling_nan(fb.f)) {
+        update_fpu_flags(float_flag_invalid);
+        r = 1;
+    }
+
+    if (float32_is_nan(fa.f) || float32_is_nan(fb.f)) {
+        r = 1;
+    }
+
+    return r;
 }
 
 uint32_t helper_fcmp_lt(uint32_t a, uint32_t b)