2470
gen_sradi(ctx, 1);
2471
}
2472
2473
-/* extswsli & extswsli. */
2474
-static inline void gen_extswsli(DisasContext *ctx, int n)
2475
-{
2476
- int sh = SH(ctx->opcode) + (n << 5);
2477
- TCGv dst = cpu_gpr[rA(ctx->opcode)];
2478
- TCGv src = cpu_gpr[rS(ctx->opcode)];
2479
-
2480
- tcg_gen_ext32s_tl(dst, src);
2481
- tcg_gen_shli_tl(dst, dst, sh);
2482
- if (unlikely(Rc(ctx->opcode) != 0)) {
2483
- gen_set_Rc0(ctx, dst);
2484
- }
2485
-}
2486
-
2487
-static void gen_extswsli0(DisasContext *ctx)
2488
-{
2489
- gen_extswsli(ctx, 0);
2490
-}
2491
-
2492
-static void gen_extswsli1(DisasContext *ctx)
2493
-{
2494
- gen_extswsli(ctx, 1);
2495
-}
2496
-
2473
/* srd & srd. */
2474
static void gen_srd(DisasContext *ctx)
2475
{
5726
return true;
5727
}
5728
5729
+static bool trans_EXTSWSLI(DisasContext *ctx, arg_XS *a)
5730
+{
5731
+ REQUIRE_64BIT(ctx);
5732
+ REQUIRE_INSNS_FLAGS2(ctx, ISA300);
5733
+
5734
+ /* Mimic legacy behavior: operate directly on dst */
5735
+ tcg_gen_ext32s_tl(cpu_gpr[a->ra], cpu_gpr[a->rs]);
5736
+ tcg_gen_shli_tl(cpu_gpr[a->ra], cpu_gpr[a->ra], a->sh);
5737
+
5738
+ if (unlikely(a->rc)) {
5739
+ gen_set_Rc0(ctx, cpu_gpr[a->ra]);
5740
+ }
5741
+ return true;
5742
+}
5743
+
5744
#include "translate/fixedpoint-impl.c.inc"
5745
5746
#include "translate/fp-impl.c.inc"
5841
GEN_HANDLER2(sradi0, "sradi", 0x1F, 0x1A, 0x19, 0x00000000, PPC_64B),
5842
GEN_HANDLER2(sradi1, "sradi", 0x1F, 0x1B, 0x19, 0x00000000, PPC_64B),
5843
GEN_HANDLER(srd, 0x1F, 0x1B, 0x10, 0x00000000, PPC_64B),
5853
-GEN_HANDLER2_E(extswsli0, "extswsli", 0x1F, 0x1A, 0x1B, 0x00000000,
5854
- PPC_NONE, PPC2_ISA300),
5855
-GEN_HANDLER2_E(extswsli1, "extswsli", 0x1F, 0x1B, 0x1B, 0x00000000,
5856
- PPC_NONE, PPC2_ISA300),
5844
#endif
5845
/* handles lfdp, lxsd, lxssp */
5846
GEN_HANDLER_E(dform39, 0x39, 0xFF, 0xFF, 0x00000000, PPC_NONE, PPC2_ISA205),