aboutsummaryrefslogtreecommitdiff
path: root/target/ppc/translate.c
diff options
context:
space:
mode:
Diffstat (limited to 'target/ppc/translate.c')
-rw-r--r--target/ppc/translate.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/target/ppc/translate.c b/target/ppc/translate.c
index bcd36d5353..4132f67bb1 100644
--- a/target/ppc/translate.c
+++ b/target/ppc/translate.c
@@ -6170,7 +6170,12 @@ static void gen_msgclr(DisasContext *ctx)
GEN_PRIV;
#else
CHK_HV;
- gen_helper_msgclr(cpu_env, cpu_gpr[rB(ctx->opcode)]);
+ /* 64-bit server processors compliant with arch 2.x */
+ if (ctx->insns_flags & PPC_SEGMENT_64B) {
+ gen_helper_book3s_msgclr(cpu_env, cpu_gpr[rB(ctx->opcode)]);
+ } else {
+ gen_helper_msgclr(cpu_env, cpu_gpr[rB(ctx->opcode)]);
+ }
#endif /* defined(CONFIG_USER_ONLY) */
}
@@ -6180,10 +6185,24 @@ static void gen_msgsnd(DisasContext *ctx)
GEN_PRIV;
#else
CHK_HV;
- gen_helper_msgsnd(cpu_gpr[rB(ctx->opcode)]);
+ /* 64-bit server processors compliant with arch 2.x */
+ if (ctx->insns_flags & PPC_SEGMENT_64B) {
+ gen_helper_book3s_msgsnd(cpu_gpr[rB(ctx->opcode)]);
+ } else {
+ gen_helper_msgsnd(cpu_gpr[rB(ctx->opcode)]);
+ }
#endif /* defined(CONFIG_USER_ONLY) */
}
+static void gen_msgsync(DisasContext *ctx)
+{
+#if defined(CONFIG_USER_ONLY)
+ GEN_PRIV;
+#else
+ CHK_HV;
+#endif /* defined(CONFIG_USER_ONLY) */
+ /* interpreted as no-op */
+}
#if defined(TARGET_PPC64)
static void gen_maddld(DisasContext *ctx)
@@ -6664,6 +6683,8 @@ GEN_HANDLER2_E(msgsnd, "msgsnd", 0x1F, 0x0E, 0x06, 0x03ff0001,
PPC_NONE, PPC2_PRCNTL),
GEN_HANDLER2_E(msgclr, "msgclr", 0x1F, 0x0E, 0x07, 0x03ff0001,
PPC_NONE, PPC2_PRCNTL),
+GEN_HANDLER2_E(msgsync, "msgsync", 0x1F, 0x16, 0x1B, 0x00000000,
+ PPC_NONE, PPC2_PRCNTL),
GEN_HANDLER(wrtee, 0x1F, 0x03, 0x04, 0x000FFC01, PPC_WRTEE),
GEN_HANDLER(wrteei, 0x1F, 0x03, 0x05, 0x000E7C01, PPC_WRTEE),
GEN_HANDLER(dlmzb, 0x1F, 0x0E, 0x02, 0x00000000, PPC_440_SPEC),