From: Nicholas Piggin <npiggin@gmail.com>
To: qemu-ppc@nongnu.org
Cc: Nicholas Piggin <npiggin@gmail.com>,
qemu-devel@nongnu.org, Fabiano Rosas <farosas@suse.de>,
Daniel Henrique Barboza <danielhb413@gmail.com>
Subject: [PATCH v2 5/6] target/ppc: Add SRR1 prefix indication to interrupt handlers
Date: Mon, 27 Mar 2023 23:12:17 +1000 [thread overview]
Message-ID: <20230327131218.2721044-5-npiggin@gmail.com> (raw)
In-Reply-To: <20230327131218.2721044-1-npiggin@gmail.com>
ISA v3.1 introduced prefix instructions. Among the changes, various
synchronous interrupts report whether they were caused by a prefix
instruction in (H)SRR1.
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
Since v1:
- Use insns_flags instead of excp_model [Fabiano review]
target/ppc/excp_helper.c | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c
index 6ac003bcd5..4e119c4dfc 100644
--- a/target/ppc/excp_helper.c
+++ b/target/ppc/excp_helper.c
@@ -1346,12 +1346,21 @@ static bool books_vhyp_handles_hv_excp(PowerPCCPU *cpu)
return false;
}
+static bool is_prefix_excp(CPUPPCState *env, uint32_t insn)
+{
+ if (!(env->insns_flags2 & PPC2_ISA310)) {
+ return false;
+ }
+ return ((insn & 0xfc000000) == 0x04000000);
+}
+
static void powerpc_excp_books(PowerPCCPU *cpu, int excp)
{
CPUState *cs = CPU(cpu);
CPUPPCState *env = &cpu->env;
target_ulong msr, new_msr, vector;
int srr0, srr1, lev = -1;
+ uint32_t insn = 0;
/* new srr1 value excluding must-be-zero bits */
msr = env->msr & ~0x783f0000ULL;
@@ -1390,6 +1399,29 @@ static void powerpc_excp_books(PowerPCCPU *cpu, int excp)
vector |= env->excp_prefix;
+ switch (excp) {
+ case POWERPC_EXCP_MCHECK:
+ case POWERPC_EXCP_DSI:
+ case POWERPC_EXCP_DSEG:
+ case POWERPC_EXCP_ALIGN:
+ case POWERPC_EXCP_PROGRAM:
+ case POWERPC_EXCP_FPU:
+ case POWERPC_EXCP_TRACE:
+ case POWERPC_EXCP_HDSI:
+ case POWERPC_EXCP_HV_EMU:
+ case POWERPC_EXCP_VPU:
+ case POWERPC_EXCP_VSXU:
+ case POWERPC_EXCP_FU:
+ case POWERPC_EXCP_HV_FU:
+ insn = ppc_ldl_code(env, env->nip);
+ if (is_prefix_excp(env, insn)) {
+ msr |= PPC_BIT(34);
+ }
+ break;
+ default:
+ break;
+ }
+
switch (excp) {
case POWERPC_EXCP_MCHECK: /* Machine check exception */
if (!FIELD_EX64(env->msr, MSR, ME)) {
--
2.37.2
next prev parent reply other threads:[~2023-03-27 13:13 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-27 13:12 [PATCH v2 1/6] target/ppc: Fix width of some 32-bit SPRs Nicholas Piggin
2023-03-27 13:12 ` [PATCH v2 2/6] target/ppc: Better CTRL SPR implementation Nicholas Piggin
2023-03-27 13:12 ` [PATCH v2 3/6] target/ppc: Fix instruction loading endianness in alignment interrupt Nicholas Piggin
2023-03-31 21:27 ` Fabiano Rosas
2023-05-23 18:11 ` Anushree Mathur
2023-03-27 13:12 ` [PATCH v2 4/6] target/ppc: Alignment faults do not set DSISR in ISA v3.0 onward Nicholas Piggin
2023-03-31 21:25 ` Fabiano Rosas
2023-03-27 13:12 ` Nicholas Piggin [this message]
2023-03-31 21:26 ` [PATCH v2 5/6] target/ppc: Add SRR1 prefix indication to interrupt handlers Fabiano Rosas
2023-03-27 13:12 ` [PATCH v2 6/6] target/ppc: Implement HEIR SPR Nicholas Piggin
2023-03-29 5:51 ` Michael Neuling
2023-04-02 2:48 ` Nicholas Piggin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230327131218.2721044-5-npiggin@gmail.com \
--to=npiggin@gmail.com \
--cc=danielhb413@gmail.com \
--cc=farosas@suse.de \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.