qemu/target/ppc
Peter Maydell 28f13bccbe fpu: allow flushing of output denormals to be after rounding
Currently we handle flushing of output denormals in uncanon_normal
always before we deal with rounding.  This works for architectures
that detect tininess before rounding, but is usually not the right
place when the architecture detects tininess after rounding.  For
example, for x86 the SDM states that the MXCSR FTZ control bit causes
outputs to be flushed to zero "when it detects a floating-point
underflow condition".  This means that we mustn't flush to zero if
the input is such that after rounding it is no longer tiny.

At least one of our guest architectures does underflow detection
after rounding but flushing of denormals before rounding (MIPS MSA);
this means we need to have a config knob for this that is separate
from our existing tininess_before_rounding setting.

Add an ftz_detection flag.  For consistency with
tininess_before_rounding, we make it default to "detect ftz after
rounding"; this means that we need to explicitly set the flag to
"detect ftz before rounding" on every existing architecture that sets
flush_to_zero, so that this commit has no behaviour change.
(This means more code change here but for the long term a less
confusing API.)

For several architectures the current behaviour is either
definitely or possibly wrong; annotate those with TODO comments.
These architectures are definitely wrong (and should detect
ftz after rounding):
 * x86
 * Alpha

For these architectures the spec is unclear:
 * MIPS (for non-MSA)
 * RX
 * SH4

PA-RISC makes ftz detection IMPDEF, but we aren't setting the
"tininess before rounding" setting that we ought to.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
2025-02-11 16:22:07 +00:00
..
translate target/ppc: Fix lxvx/stxvx facility check 2024-09-22 06:55:21 +02:00
arch_dump.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
compat.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
cpu-models.c target/ppc: Add Power11 DD2.0 processor 2024-11-04 09:12:42 +10:00
cpu-models.h target/ppc: Add Power11 DD2.0 processor 2024-11-04 09:12:42 +10:00
cpu-param.h target/*: Remove TARGET_LONG_BITS from cpu-param.h 2025-02-08 12:41:33 -08:00
cpu-qom.h target/ppc: Use GDBFeature for dynamic XML 2024-02-28 09:09:25 +00:00
cpu.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
cpu.h accel/tcg: Move gen_intermediate_code to TCGCPUOps.translate_core 2024-12-24 08:32:15 -08:00
cpu_init.c fpu: allow flushing of output denormals to be after rounding 2025-02-11 16:22:07 +00:00
cpu_init.h target/ppc: Add Power11 DD2.0 processor 2024-11-04 09:12:42 +10:00
dfp_helper.c target/ppc: replace assert(0) with g_assert_not_reached() 2024-09-24 13:53:35 +02:00
excp_helper.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
fpu_helper.c target/ppc: Use env->fp_status in helper_compute_fprf functions 2024-12-11 15:31:03 +00:00
gdbstub.c target/ppc: Fix GDB register indexing on secondary CPUs 2024-03-30 18:50:24 +10:00
helper.h target/ppc: Move VSX fp compare insns to decodetree. 2024-07-26 09:51:33 +10:00
helper_regs.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
helper_regs.h target/ppc: Fix PMU hflags calculation 2023-06-10 10:19:24 -03:00
insn32.decode target/ppc: Move VSX fp compare insns to decodetree. 2024-07-26 09:51:33 +10:00
insn64.decode target/ppc: Implemented [pm]xvbf16ger2* 2022-05-26 17:11:33 -03:00
int_helper.c target/ppc: Move VMX integer add/sub saturate insns to decodetree. 2024-07-26 09:51:33 +10:00
internal.h target/ppc: Add a function to check for page protection bit 2024-05-24 09:43:13 +10:00
Kconfig ppc: switch boards to "default y" 2024-05-03 15:47:47 +02:00
kvm.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
kvm_ppc.h include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
machine.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
mem_helper.c target/ppc: Move VSX vector with length storage access insns to decodetree. 2024-07-26 09:51:33 +10:00
meson.build target/ppc: Move out BookE and related MMU functions from mmu_common.c 2024-05-24 09:43:13 +10:00
misc_helper.c target/ppc: Fix mtDPDES targeting SMT siblings 2024-11-04 09:08:28 +10:00
mmu-book3s-v3.c target/ppc/mmu-radix64: Remove externally unused parts from header 2024-07-26 09:51:34 +10:00
mmu-book3s-v3.h target/ppc: Remove includes from mmu-book3s-v3.h 2024-07-26 09:51:34 +10:00
mmu-booke.c target/ppc: Move out BookE and related MMU functions from mmu_common.c 2024-05-24 09:43:13 +10:00
mmu-booke.h target/ppc: Move out BookE and related MMU functions from mmu_common.c 2024-05-24 09:43:13 +10:00
mmu-books.h target/ppc: introduce mmu-books.h 2021-07-09 10:38:19 +10:00
mmu-hash32.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
mmu-hash32.h target/ppc/mmu-hash32.c: Move get_pteg_offset32() to the header 2024-07-26 09:51:34 +10:00
mmu-hash64.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
mmu-hash64.h target/ppc: Unexport some functions from mmu-book3s-v3.h 2024-07-26 09:51:34 +10:00
mmu-radix64.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
mmu-radix64.h target/ppc/mmu-radix64: Remove externally unused parts from header 2024-07-26 09:51:34 +10:00
mmu_common.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
mmu_helper.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
power8-pmu-regs.c.inc target/ppc: Add new hflags to support BHRB 2024-05-24 08:57:50 +10:00
power8-pmu.c target/ppc: Add recording of taken branches to BHRB 2024-05-24 09:33:06 +10:00
power8-pmu.h target/ppc: Add recording of taken branches to BHRB 2024-05-24 09:33:06 +10:00
ppc-qmp-cmds.c target/ppc: Prefer fast cpu_env() over slower CPU QOM cast macro 2024-03-12 12:04:24 +01:00
spr_common.h target/ppc: Implement SPRC/SPRD SPRs 2024-05-24 09:34:40 +10:00
tcg-stub.c hw/ppc/spapr_hcall: Allow elision of softmmu_resize_hpt_prep 2024-02-23 23:24:42 +10:00
timebase_helper.c ppc/pnv: Add POWER10 ChipTOD quirk for big-core 2024-07-26 09:21:06 +10:00
trace-events target/ppc: Improve KVM hypercall trace 2022-04-20 18:00:30 -03:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
translate.c accel/tcg: Move gen_intermediate_code to TCGCPUOps.translate_core 2024-12-24 08:32:15 -08:00
user_only_helper.c target/ppc: Prefer fast cpu_env() over slower CPU QOM cast macro 2024-03-12 12:04:24 +01:00