@samitouri / QOSamiQemu / commits / a3521772cb

target/ppc: Move isync instruction to decodetree

Moving the following instructions to decodetree specification : isync The changes were verified by validating that the tcg ops generated by those instructions remain the same, which were captured with the '-d in_asm,op' flag. Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com> Reviewed-by: Nikhil Kumar Singh <nikhilks@linux.ibm.com> Reviewed-by: Glenn Miles <milesg@linux.ibm.com> Reviewed-by: Amit Machhiwal <amachhiw@linux.ibm.com> Signed-off-by: Chinmay Rath <rathc@linux.ibm.com> Tested-by: Aniket Sahu <asahu1x@linux.ibm.com> Link: https://lore.kernel.org/qemu-devel/20260827133010.278889-14-rathc@linux.ibm.com Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>

Ojaswin Mujoo committed Aug 27, 2026 at 18:59 UTC a3521772cbaaf8b5a06605c8288b044fbfb0c878
3 files changed +18 -15
target/ppc/insn32.decode
+1
@@ -1470,6 +1470,7 @@ MSGSYNC 011111 ----- ----- ----- 1101110110 -
1470 @X_sync ...... .. l:3 ... sc:2 ..... .......... . &X_sync
1471 SYNC 011111 -- ... --- .. ----- 1001010110 - @X_sync
1472 EIEIO 011111 ----- ----- ----- 1101010110 -
1473 +ISYNC 010011 ----- ----- ----- 0010010110 -
1474
1475 # Condition Register Field Instruction
1476
target/ppc/translate.c
-15
@@ -2727,20 +2727,6 @@ static inline void gen_check_tlb_flush(DisasContext *ctx, bool global)
2727 static inline void gen_check_tlb_flush(DisasContext *ctx, bool global) { }
2728 #endif
2729
2730 -/* isync */
2731 -static void gen_isync(DisasContext *ctx)
2732 -{
2733 - /*
2734 - * We need to check for a pending TLB flush. This can only happen in
2735 - * kernel mode however so check MSR_PR
2736 - */
2737 - if (!ctx->pr) {
2738 - gen_check_tlb_flush(ctx, false);
2739 - }
2740 - tcg_gen_mb(TCG_MO_ALL | TCG_BAR_SC);
2741 - ctx->base.is_jmp = DISAS_EXIT_UPDATE;
2742 -}
2743 -
2730 /* wait */
2731 static void gen_wait(DisasContext *ctx)
2732 {
@@ -5364,7 +5350,6 @@ GEN_HANDLER(lswi, 0x1F, 0x15, 0x12, 0x00000001, PPC_STRING),
5350 GEN_HANDLER(lswx, 0x1F, 0x15, 0x10, 0x00000001, PPC_STRING),
5351 GEN_HANDLER(stswi, 0x1F, 0x15, 0x16, 0x00000001, PPC_STRING),
5352 GEN_HANDLER(stswx, 0x1F, 0x15, 0x14, 0x00000001, PPC_STRING),
5367 -GEN_HANDLER(isync, 0x13, 0x16, 0x04, 0x03FFF801, PPC_MEM),
5353 /* ISA v3.0 changed the extended opcode from 62 to 30 */
5354 GEN_HANDLER(wait, 0x1F, 0x1E, 0x01, 0x039FF801, PPC_WAIT),
5355 GEN_HANDLER_E(wait, 0x1F, 0x1E, 0x00, 0x039CF801, PPC_NONE, PPC2_ISA300),
target/ppc/translate/storage-ctrl-impl.c.inc
+17
@@ -155,6 +155,23 @@ static bool trans_SLBFEE(DisasContext *ctx, arg_SLBFEE *a)
155 return true;
156 }
157
158 +static bool trans_ISYNC(DisasContext *ctx, arg_ISYNC *a)
159 +{
160 + REQUIRE_INSNS_FLAGS(ctx, MEM);
161 +
162 + /*
163 + * We need to check for a pending TLB flush. This can only happen in
164 + * kernel mode however so check MSR_PR
165 + */
166 + if (!ctx->pr) {
167 + gen_check_tlb_flush(ctx, false);
168 + }
169 + tcg_gen_mb(TCG_MO_ALL | TCG_BAR_SC);
170 + ctx->base.is_jmp = DISAS_EXIT_UPDATE;
171 +
172 + return true;
173 +}
174 +
175 static bool trans_SLBSYNC(DisasContext *ctx, arg_SLBSYNC *a)
176 {
177 REQUIRE_64BIT(ctx);