qemu-e2k/target/ppc
Matthieu Bucchianeri 8dcdb535d7 target/ppc: Fix SPE unavailable exception triggering
When emulating certain floating point instructions or vector instructions on
PowerPC machines, QEMU did not properly generate the SPE/Embedded Floating-
Point Unavailable interrupt. See the buglink further below for references to
the relevant NXP documentation.

This patch fixes the behavior of some evfs* instructions that were
incorrectly emitting the interrupt.

More importantly, this patch fixes the behavior of several efd* and ev*
instructions that were not generating the interrupt. Triggering the
interrupt for these instructions fixes lazy FPU/vector context switching on
some operating systems like Linux.

Without this patch, the result of some double-precision arithmetic could be
corrupted due to the lack of proper saving and restoring of the upper
32-bit part of the general-purpose registers.

Buglink: https://bugs.launchpad.net/qemu/+bug/1888918
Buglink: https://bugs.launchpad.net/qemu/+bug/1611394
Signed-off-by: Matthieu Bucchianeri <matthieu.bucchianeri@leostella.com>
Message-Id: <20200727175553.32276-1-matthieu.bucchianeri@leostella.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2020-08-12 13:16:27 +10:00
..
translate target/ppc: Fix SPE unavailable exception triggering 2020-08-12 13:16:27 +10:00
arch_dump.c
compat.c error: Eliminate error_propagate() with Coccinelle, part 1 2020-07-10 15:18:08 +02:00
cpu-models.c
cpu-models.h
cpu-param.h
cpu-qom.h x86 and machine queue for 5.0 soft freeze 2020-03-19 14:22:46 +00:00
cpu.c
cpu.h target/ppc: Enable Power ISA 3.1 2020-08-12 13:16:27 +10:00
dfp_helper.c
excp_helper.c ppc/spapr: Add hotremovable flag on DIMM LMBs on drmem_v2 2020-05-27 15:29:36 +10:00
fpu_helper.c target/ppc: Fix typo in comments 2020-02-21 09:15:04 +11:00
gdbstub.c gdbstub: Introduce gdb_get_float64() to get 64-bit float registers 2020-05-06 09:29:26 +01:00
helper_regs.h
helper.h target/ppc: add vmulh{su}d instructions 2020-08-12 13:16:27 +10:00
int_helper.c target/ppc: add vmulh{su}d instructions 2020-08-12 13:16:27 +10:00
internal.h
kvm_ppc.h pseries: fix kvmppc_set_fwnmi() 2020-07-27 11:09:25 +10:00
kvm-stub.c
kvm.c pseries: fix kvmppc_set_fwnmi() 2020-07-27 11:09:25 +10:00
machine.c
Makefile.objs
mem_helper.c target/ppc: Use probe_write for DCBZ 2020-02-03 11:33:11 +11:00
mfrom_table_gen.c
mfrom_table.inc.c target/ppc: Style fixes for mfrom_table.inc.c & mfrom_table_gen.c 2019-04-26 10:42:38 +10:00
misc_helper.c target/ppc: add support for Hypervisor Facility Unavailable Exception 2020-02-02 14:07:57 +11:00
mmu_helper.c target: Remove unnecessary CPU() cast 2020-05-15 07:08:14 +02:00
mmu-book3s-v3.c
mmu-book3s-v3.h
mmu-hash32.c
mmu-hash32.h
mmu-hash64.c error: Strip trailing '\n' from error string arguments (again) 2020-07-24 12:56:44 +02:00
mmu-hash64.h
mmu-radix64.c target/ppc: Fix argument to ppc_radix64_partition_scoped_xlate() again 2020-05-27 15:29:36 +10:00
mmu-radix64.h target/ppc: Pass const pointer to ppc_radix64_get_prot_amr() 2020-05-27 15:29:36 +10:00
monitor.c
timebase_helper.c hw/ppc: Take QEMU lock when calling ppc_dcr_read/write() 2020-03-24 11:56:37 +11:00
trace-events target/ppc: Handle NMI guest exit 2020-02-03 11:33:10 +11:00
translate_init.inc.c target/ppc: Enable Power ISA 3.1 2020-08-12 13:16:27 +10:00
translate.c target/ppc: add byte-reverse br[dwh] instructions 2020-08-12 13:16:27 +10:00
user_only_helper.c