qemu-cr16/target/hppa
Gabriel Brookman cea82f8cdd target/hppa: correct size bit parity for fmpyadd
For the fmpyadd instruction on the hppa architecture, there is a bit
used to specify whether the instruction is operating on a 32 bit or
64 bit floating point register. For most instructions, such a bit is 0
when operating on the smaller register and 1 when operating on the
larger register. However, according to page 6-57 of the PA-RISC 1.1
Architecture and Instruction Set Reference Manual, this convention is
reversed for the fmpyadd instruction specifically, meaning the bit is
1 for operations on 32 bit registers and 0 for 64 bit registers. See
also page 6-18 (fig. 6-8) and 6-19 (table 6-16), where the f field
for FMPYADD and FMPYSUB is documented. Previously, QEMU decoded this
operation as operating on the other size of register, leading to bugs
when translating the fmpyadd instruction. This patch fixes that issue.

Reported-by: Andreas Hüttel <andreas.huettel@ur.de>
Signed-off-by: Gabriel Brookman <brookmangabriel@gmail.com>
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/3096
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Acked-by: Helge Deller <deller@gmx.de>
Message-ID: <20251009-hppa-correct-fmpyadd-size-bit-decoding-v1-1-f63bb6c3290c@gmail.com>
[PMD: Add documentation refs mentioned by Andreas K. Huettel]
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
2025-10-16 17:07:27 +02:00
..
cpu-param.h tcg: Remove the TCG_GUEST_DEFAULT_MO definition globally 2025-04-23 15:07:32 -07:00
cpu-qom.h target: Move ArchCPUClass definition to 'cpu.h' 2023-11-07 13:08:48 +01:00
cpu.c add cpu_test_interrupt()/cpu_set_interrupt() helpers and use them tree wide 2025-08-29 12:48:14 +02:00
cpu.h target/hppa: Have hppa_form_gva*() return vaddr type 2025-10-16 17:07:27 +02:00
fpu_helper.c HPPA floating point exception handling fixes 2025-05-22 14:48:42 -04:00
gdbstub.c linux-user/hppa: Force all code addresses to PRIV_USER 2024-05-15 10:03:44 +02:00
helper.c target/hppa: Have hppa_form_gva*() return vaddr type 2025-10-16 17:07:27 +02:00
helper.h target/hppa: Implement space register hashing for 64-bit HP-UX 2025-01-31 10:05:24 +01:00
insns.decode target/hppa: correct size bit parity for fmpyadd 2025-10-16 17:07:27 +02:00
int_helper.c target/hppa: Copy instruction code into fr1 on FPU assist fault 2025-05-17 13:12:07 +02:00
Kconfig meson: Introduce target-specific Kconfig 2021-07-09 18:21:34 +02:00
machine.c target/migration: Inline VMSTATE_CPU() 2025-05-08 14:22:12 +02:00
mem_helper.c target/hppa: Have hppa_form_gva*() return vaddr type 2025-10-16 17:07:27 +02:00
meson.build meson: Rename target_softmmu_arch -> target_system_arch 2023-10-07 19:03:07 +02:00
op_helper.c include: Remove 'exec/exec-all.h' 2025-04-30 12:45:05 -07:00
sys_helper.c include: Remove 'exec/exec-all.h' 2025-04-30 12:45:05 -07:00
trace-events target/hppa: Use hwaddr type for HPPATLBEntry::pa 2025-10-16 17:07:27 +02:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
translate.c target/hppa: Replace MO_TE -> MO_BE 2025-10-16 17:07:27 +02:00