diff options
-rw-r--r-- | target-microblaze/op_helper.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/target-microblaze/op_helper.c b/target-microblaze/op_helper.c index 294e08c253..3d2b313fb3 100644 --- a/target-microblaze/op_helper.c +++ b/target-microblaze/op_helper.c @@ -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) |