target/mips: fpu: Demacro CLASS.<D|S>

This is just a cosmetic change to enable tools like gcov, gdb,
callgrind, etc. to better display involved source code.

Reviewed-by: Aleksandar Rikalo <aleksandar.rikalo@syrmia.com>
Signed-off-by: Aleksandar Markovic <aleksandar.qemu.devel@gmail.com>
Message-Id: <20200518200920.17344-12-aleksandar.qemu.devel@gmail.com>
This commit is contained in:
Aleksandar Markovic 2020-05-18 22:09:10 +02:00
parent 32574f1d1c
commit 0bd99ac77c
1 changed files with 68 additions and 2 deletions

View File

@ -1165,10 +1165,76 @@ uint ## bits ## _t helper_float_ ## name(CPUMIPSState *env, \
return float_ ## name(arg, &env->active_fpu.fp_status); \
}
FLOAT_CLASS(class_s, 32)
FLOAT_CLASS(class_d, 64)
#undef FLOAT_CLASS
uint64_t float_class_d(uint64_t arg, float_status *status)
{
if (float64_is_signaling_nan(arg, status)) {
return FLOAT_CLASS_SIGNALING_NAN;
} else if (float64_is_quiet_nan(arg, status)) {
return FLOAT_CLASS_QUIET_NAN;
} else if (float64_is_neg(arg)) {
if (float64_is_infinity(arg)) {
return FLOAT_CLASS_NEGATIVE_INFINITY;
} else if (float64_is_zero(arg)) {
return FLOAT_CLASS_NEGATIVE_ZERO;
} else if (float64_is_zero_or_denormal(arg)) {
return FLOAT_CLASS_NEGATIVE_SUBNORMAL;
} else {
return FLOAT_CLASS_NEGATIVE_NORMAL;
}
} else {
if (float64_is_infinity(arg)) {
return FLOAT_CLASS_POSITIVE_INFINITY;
} else if (float64_is_zero(arg)) {
return FLOAT_CLASS_POSITIVE_ZERO;
} else if (float64_is_zero_or_denormal(arg)) {
return FLOAT_CLASS_POSITIVE_SUBNORMAL;
} else {
return FLOAT_CLASS_POSITIVE_NORMAL;
}
}
}
uint64_t helper_float_class_d(CPUMIPSState *env, uint64_t arg)
{
return float_class_d(arg, &env->active_fpu.fp_status);
}
uint32_t float_class_s(uint32_t arg, float_status *status)
{
if (float32_is_signaling_nan(arg, status)) {
return FLOAT_CLASS_SIGNALING_NAN;
} else if (float32_is_quiet_nan(arg, status)) {
return FLOAT_CLASS_QUIET_NAN;
} else if (float32_is_neg(arg)) {
if (float32_is_infinity(arg)) {
return FLOAT_CLASS_NEGATIVE_INFINITY;
} else if (float32_is_zero(arg)) {
return FLOAT_CLASS_NEGATIVE_ZERO;
} else if (float32_is_zero_or_denormal(arg)) {
return FLOAT_CLASS_NEGATIVE_SUBNORMAL;
} else {
return FLOAT_CLASS_NEGATIVE_NORMAL;
}
} else {
if (float32_is_infinity(arg)) {
return FLOAT_CLASS_POSITIVE_INFINITY;
} else if (float32_is_zero(arg)) {
return FLOAT_CLASS_POSITIVE_ZERO;
} else if (float32_is_zero_or_denormal(arg)) {
return FLOAT_CLASS_POSITIVE_SUBNORMAL;
} else {
return FLOAT_CLASS_POSITIVE_NORMAL;
}
}
}
uint32_t helper_float_class_s(CPUMIPSState *env, uint32_t arg)
{
return float_class_s(arg, &env->active_fpu.fp_status);
}
/* binary operations */
uint64_t helper_float_add_d(CPUMIPSState *env,