diff options
author | aurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162> | 2008-12-15 17:13:55 +0000 |
---|---|---|
committer | aurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162> | 2008-12-15 17:13:55 +0000 |
commit | e0147e41385d1ec2961d1300a135cb2c859b04bc (patch) | |
tree | 090a161aa08edfb75327e3303bc18d859b700fb1 /target-ppc/op_helper.c | |
parent | 05b936038f18763bbea7fa46f68b33c4a04637f2 (diff) |
target-ppc: fix fload_invalid_op_excp()
The argument is a value, not a flag. Update the tests accordingly. Also
set a correct default value for NaN.
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6047 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'target-ppc/op_helper.c')
-rw-r--r-- | target-ppc/op_helper.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/target-ppc/op_helper.c b/target-ppc/op_helper.c index 28cbc6fe52..2ba1e2bd98 100644 --- a/target-ppc/op_helper.c +++ b/target-ppc/op_helper.c @@ -671,15 +671,13 @@ static always_inline uint64_t fload_invalid_op_excp (int op) int ve; ve = fpscr_ve; - if (op & POWERPC_EXCP_FP_VXSNAN) { - /* Operation on signaling NaN */ + switch (op) { + case POWERPC_EXCP_FP_VXSNAN: env->fpscr |= 1 << FPSCR_VXSNAN; - } - if (op & POWERPC_EXCP_FP_VXSOFT) { - /* Software-defined condition */ + break; + case POWERPC_EXCP_FP_VXSOFT: env->fpscr |= 1 << FPSCR_VXSOFT; - } - switch (op & ~(POWERPC_EXCP_FP_VXSOFT | POWERPC_EXCP_FP_VXSNAN)) { + break; case POWERPC_EXCP_FP_VXISI: /* Magnitude subtraction of infinities */ env->fpscr |= 1 << FPSCR_VXISI; @@ -718,7 +716,7 @@ static always_inline uint64_t fload_invalid_op_excp (int op) env->fpscr &= ~((1 << FPSCR_FR) | (1 << FPSCR_FI)); if (ve == 0) { /* Set the result to quiet NaN */ - ret = UINT64_MAX; + ret = 0xFFF8000000000000ULL; env->fpscr &= ~(0xF << FPSCR_FPCC); env->fpscr |= 0x11 << FPSCR_FPCC; } @@ -729,7 +727,7 @@ static always_inline uint64_t fload_invalid_op_excp (int op) env->fpscr &= ~((1 << FPSCR_FR) | (1 << FPSCR_FI)); if (ve == 0) { /* Set the result to quiet NaN */ - ret = UINT64_MAX; + ret = 0xFFF8000000000000ULL; env->fpscr &= ~(0xF << FPSCR_FPCC); env->fpscr |= 0x11 << FPSCR_FPCC; } |