diff --git a/qemu/target-mips/translate.c b/qemu/target-mips/translate.c index 17e57955..d8253e94 100644 --- a/qemu/target-mips/translate.c +++ b/qemu/target-mips/translate.c @@ -4696,7 +4696,16 @@ static void gen_align(DisasContext *ctx, int opc, int rd, int rs, int rt, t0 = tcg_temp_new(tcg_ctx); gen_load_gpr(ctx, t0, rt); if (bp == 0) { - tcg_gen_mov_tl(tcg_ctx, *cpu_gpr[rd], t0); + switch (opc) { + case OPC_ALIGN: + tcg_gen_ext32s_tl(tcg_ctx, *cpu_gpr[rd], t0); + break; +#if defined(TARGET_MIPS64) + case OPC_DALIGN: + tcg_gen_mov_tl(tcg_ctx, *cpu_gpr[rd], t0); + break; +#endif + } } else { TCGv t1 = tcg_temp_new(tcg_ctx); gen_load_gpr(ctx, t1, rs);