@@ -4241,29 +4241,23 @@ void helper_fcos(void)
void helper_fxam_ST0(void)
{
- CPU_LDoubleU temp;
- int expdif;
-
- temp.d = ST0;
-
env->fpus &= (~0x4700); /* (C3,C2,C1,C0) <-- 0000 */
- if (SIGND(temp))
+
+ if (floatx80_is_neg(ST0)) {
env->fpus |= 0x200; /* C1 <-- 1 */
+ }
/* XXX: test fptags too */
- expdif = EXPD(temp);
- if (expdif == MAXEXPD) {
- if (MANTD(temp) == 0x8000000000000000ULL)
- env->fpus |= 0x500 /*Infinity*/;
- else
- env->fpus |= 0x100 /*NaN*/;
- } else if (expdif == 0) {
- if (MANTD(temp) == 0)
- env->fpus |= 0x4000 /*Zero*/;
- else
- env->fpus |= 0x4400 /*Denormal*/;
+ if (floatx80_is_infinity(ST0)) {
+ env->fpus |= 0x500; /* (C3,C2,C0) <-- 011 */
+ } else if (floatx80_is_any_nan(ST0)) {
+ env->fpus |= 0x100; /* (C3,C2,C0) <-- 001 */
+ } else if (floatx80_is_zero(ST0)) {
+ env->fpus |= 0x4000; /* (C3,C2,C0) <-- 100 */
+ } else if (floatx80_is_zero_or_denormal(ST0)) {
+ env->fpus |= 0x4400; /* (C3,C2,C0) <-- 110 */
} else {
- env->fpus |= 0x400;
+ env->fpus |= 0x400; /* (C3,C2,C0) <-- 010 */
}
}
Rewrite helper_fxam_ST0() using only softfloat functions. Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> --- target-i386/op_helper.c | 30 ++++++++++++------------------ 1 files changed, 12 insertions(+), 18 deletions(-)