diff options
author | Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br> | 2021-12-17 17:57:12 +0100 |
---|---|---|
committer | Cédric Le Goater <clg@kaod.org> | 2021-12-17 17:57:12 +0100 |
commit | c3a824b0cf23f98353fa91c715fe4918432d7928 (patch) | |
tree | 27950607a47f2f2391b188f9d37ad41f44990bb3 /include/authz/base.h | |
parent | 83234b8289e64fc359a5bf02d886a333d65b8f8c (diff) | |
download | qemu-c3a824b0cf23f98353fa91c715fe4918432d7928.zip qemu-c3a824b0cf23f98353fa91c715fe4918432d7928.tar.gz qemu-c3a824b0cf23f98353fa91c715fe4918432d7928.tar.bz2 |
target/ppc: Fixed call to deferred exception
mtfsf, mtfsfi and mtfsb1 instructions call helper_float_check_status
after updating the value of FPSCR, but helper_float_check_status
checks fp_status and fp_status isn't updated based on FPSCR and
since the value of fp_status is reset earlier in the instruction,
it's always 0.
Because of this helper_float_check_status would change the FI bit to 0
as this bit checks if the last operation was inexact and
float_flag_inexact is always 0.
These instructions also don't throw exceptions correctly since
helper_float_check_status throw exceptions based on fp_status.
This commit created a new helper, helper_fpscr_check_status that checks
FPSCR value instead of fp_status and checks for a larger variety of
exceptions than do_float_check_status.
Since fp_status isn't used, gen_reset_fpstatus() was removed.
The hardware used to compare QEMU's behavior to was a Power9.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br>
Message-Id: <20211201163808.440385-2-lucas.araujo@eldorado.org.br>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
Diffstat (limited to 'include/authz/base.h')
0 files changed, 0 insertions, 0 deletions