/* Load Doubleword Pair. */
static bool trans_ldp(DisasContext *ctx, arg_ldp *a)
{
+ MemOp memop = MO_SQ | mo_endian(ctx);
+
REQUIRE_XMIPSLSP(ctx);
REQUIRE_64_OR_128BIT(ctx);
TCGv addr = tcg_temp_new();
tcg_gen_addi_tl(addr, src, a->imm_y);
- tcg_gen_qemu_ld_tl(dest0, addr, ctx->mem_idx, MO_TE | MO_SQ);
+ tcg_gen_qemu_ld_tl(dest0, addr, ctx->mem_idx, memop);
gen_set_gpr(ctx, a->rd, dest0);
tcg_gen_addi_tl(addr, addr, 8);
- tcg_gen_qemu_ld_tl(dest1, addr, ctx->mem_idx, MO_TE | MO_SQ);
+ tcg_gen_qemu_ld_tl(dest1, addr, ctx->mem_idx, memop);
gen_set_gpr(ctx, a->rs3, dest1);
return true;
/* Load Word Pair. */
static bool trans_lwp(DisasContext *ctx, arg_lwp *a)
{
+ MemOp memop = MO_SL | mo_endian(ctx);
+
REQUIRE_XMIPSLSP(ctx);
TCGv src = get_gpr(ctx, a->rs1, EXT_NONE);
TCGv addr = tcg_temp_new();
tcg_gen_addi_tl(addr, src, a->imm_x);
- tcg_gen_qemu_ld_tl(dest0, addr, ctx->mem_idx, MO_TE | MO_SL);
+ tcg_gen_qemu_ld_tl(dest0, addr, ctx->mem_idx, memop);
gen_set_gpr(ctx, a->rd, dest0);
tcg_gen_addi_tl(addr, addr, 4);
- tcg_gen_qemu_ld_tl(dest1, addr, ctx->mem_idx, MO_TE | MO_SL);
+ tcg_gen_qemu_ld_tl(dest1, addr, ctx->mem_idx, memop);
gen_set_gpr(ctx, a->rs3, dest1);
return true;
/* Store Doubleword Pair. */
static bool trans_sdp(DisasContext *ctx, arg_sdp *a)
{
+ MemOp memop = MO_UQ | mo_endian(ctx);
+
REQUIRE_XMIPSLSP(ctx);
REQUIRE_64_OR_128BIT(ctx);
TCGv addr = tcg_temp_new();
tcg_gen_addi_tl(addr, src, a->imm_w);
- tcg_gen_qemu_st_tl(data0, addr, ctx->mem_idx, MO_TE | MO_UQ);
+ tcg_gen_qemu_st_tl(data0, addr, ctx->mem_idx, memop);
tcg_gen_addi_tl(addr, addr, 8);
- tcg_gen_qemu_st_tl(data1, addr, ctx->mem_idx, MO_TE | MO_UQ);
+ tcg_gen_qemu_st_tl(data1, addr, ctx->mem_idx, memop);
return true;
}
/* Store Word Pair. */
static bool trans_swp(DisasContext *ctx, arg_swp *a)
{
+ MemOp memop = MO_SL | mo_endian(ctx);
+
REQUIRE_XMIPSLSP(ctx);
TCGv src = get_gpr(ctx, a->rs1, EXT_NONE);
TCGv addr = tcg_temp_new();
tcg_gen_addi_tl(addr, src, a->imm_v);
- tcg_gen_qemu_st_tl(data0, addr, ctx->mem_idx, MO_TE | MO_SL);
+ tcg_gen_qemu_st_tl(data0, addr, ctx->mem_idx, memop);
tcg_gen_addi_tl(addr, addr, 4);
- tcg_gen_qemu_st_tl(data1, addr, ctx->mem_idx, MO_TE | MO_SL);
+ tcg_gen_qemu_st_tl(data1, addr, ctx->mem_idx, memop);
return true;
}