target/mips: Fix gen_mxu_s32ldd_s32lddr
There were two bugs here: (1) the required endianness was not present in the MemOp, and (2) we were not providing a zero-extended input to the bswap as semantics required. The best fix is to fold the bswap into the memory operation, producing the desired result directly. Acked-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
b983a0e172
commit
92ecfab50e
@ -857,12 +857,8 @@ static void gen_mxu_s32ldd_s32lddr(DisasContext *ctx)
|
||||
tcg_gen_ori_tl(t1, t1, 0xFFFFF000);
|
||||
}
|
||||
tcg_gen_add_tl(t1, t0, t1);
|
||||
tcg_gen_qemu_ld_tl(t1, t1, ctx->mem_idx, MO_SL);
|
||||
tcg_gen_qemu_ld_tl(t1, t1, ctx->mem_idx, MO_TESL ^ (sel * MO_BSWAP));
|
||||
|
||||
if (sel == 1) {
|
||||
/* S32LDDR */
|
||||
tcg_gen_bswap32_tl(t1, t1, TCG_BSWAP_IZ | TCG_BSWAP_OZ);
|
||||
}
|
||||
gen_store_mxu_gpr(t1, XRa);
|
||||
|
||||
tcg_temp_free(t0);
|
||||
|
Loading…
Reference in New Issue
Block a user