mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
exec/memop: Adding signedness to quad definitions
Renaming defines for quad in their various forms so that their signedness is now explicit. Done using git grep as suggested by Philippe, with a bit of hand edition to keep assignments aligned. Signed-off-by: Frédéric Pétrot <frederic.petrot@univ-grenoble-alpes.fr> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-id: 20220106210108.138226-2-frederic.petrot@univ-grenoble-alpes.fr Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
committed by
Alistair Francis
parent
dfdb46a376
commit
fc313c6434
+15
-15
@@ -1885,9 +1885,9 @@ load_memop(const void *haddr, MemOp op)
|
||||
return (uint32_t)ldl_be_p(haddr);
|
||||
case MO_LEUL:
|
||||
return (uint32_t)ldl_le_p(haddr);
|
||||
case MO_BEQ:
|
||||
case MO_BEUQ:
|
||||
return ldq_be_p(haddr);
|
||||
case MO_LEQ:
|
||||
case MO_LEUQ:
|
||||
return ldq_le_p(haddr);
|
||||
default:
|
||||
qemu_build_not_reached();
|
||||
@@ -2081,16 +2081,16 @@ tcg_target_ulong helper_be_ldul_mmu(CPUArchState *env, target_ulong addr,
|
||||
uint64_t helper_le_ldq_mmu(CPUArchState *env, target_ulong addr,
|
||||
MemOpIdx oi, uintptr_t retaddr)
|
||||
{
|
||||
validate_memop(oi, MO_LEQ);
|
||||
return load_helper(env, addr, oi, retaddr, MO_LEQ, false,
|
||||
validate_memop(oi, MO_LEUQ);
|
||||
return load_helper(env, addr, oi, retaddr, MO_LEUQ, false,
|
||||
helper_le_ldq_mmu);
|
||||
}
|
||||
|
||||
uint64_t helper_be_ldq_mmu(CPUArchState *env, target_ulong addr,
|
||||
MemOpIdx oi, uintptr_t retaddr)
|
||||
{
|
||||
validate_memop(oi, MO_BEQ);
|
||||
return load_helper(env, addr, oi, retaddr, MO_BEQ, false,
|
||||
validate_memop(oi, MO_BEUQ);
|
||||
return load_helper(env, addr, oi, retaddr, MO_BEUQ, false,
|
||||
helper_be_ldq_mmu);
|
||||
}
|
||||
|
||||
@@ -2166,7 +2166,7 @@ uint32_t cpu_ldl_be_mmu(CPUArchState *env, abi_ptr addr,
|
||||
uint64_t cpu_ldq_be_mmu(CPUArchState *env, abi_ptr addr,
|
||||
MemOpIdx oi, uintptr_t ra)
|
||||
{
|
||||
return cpu_load_helper(env, addr, oi, MO_BEQ, helper_be_ldq_mmu);
|
||||
return cpu_load_helper(env, addr, oi, MO_BEUQ, helper_be_ldq_mmu);
|
||||
}
|
||||
|
||||
uint16_t cpu_ldw_le_mmu(CPUArchState *env, abi_ptr addr,
|
||||
@@ -2210,10 +2210,10 @@ store_memop(void *haddr, uint64_t val, MemOp op)
|
||||
case MO_LEUL:
|
||||
stl_le_p(haddr, val);
|
||||
break;
|
||||
case MO_BEQ:
|
||||
case MO_BEUQ:
|
||||
stq_be_p(haddr, val);
|
||||
break;
|
||||
case MO_LEQ:
|
||||
case MO_LEUQ:
|
||||
stq_le_p(haddr, val);
|
||||
break;
|
||||
default:
|
||||
@@ -2465,15 +2465,15 @@ void helper_be_stl_mmu(CPUArchState *env, target_ulong addr, uint32_t val,
|
||||
void helper_le_stq_mmu(CPUArchState *env, target_ulong addr, uint64_t val,
|
||||
MemOpIdx oi, uintptr_t retaddr)
|
||||
{
|
||||
validate_memop(oi, MO_LEQ);
|
||||
store_helper(env, addr, val, oi, retaddr, MO_LEQ);
|
||||
validate_memop(oi, MO_LEUQ);
|
||||
store_helper(env, addr, val, oi, retaddr, MO_LEUQ);
|
||||
}
|
||||
|
||||
void helper_be_stq_mmu(CPUArchState *env, target_ulong addr, uint64_t val,
|
||||
MemOpIdx oi, uintptr_t retaddr)
|
||||
{
|
||||
validate_memop(oi, MO_BEQ);
|
||||
store_helper(env, addr, val, oi, retaddr, MO_BEQ);
|
||||
validate_memop(oi, MO_BEUQ);
|
||||
store_helper(env, addr, val, oi, retaddr, MO_BEUQ);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2609,11 +2609,11 @@ uint32_t cpu_ldl_code(CPUArchState *env, abi_ptr addr)
|
||||
static uint64_t full_ldq_code(CPUArchState *env, target_ulong addr,
|
||||
MemOpIdx oi, uintptr_t retaddr)
|
||||
{
|
||||
return load_helper(env, addr, oi, retaddr, MO_TEQ, true, full_ldq_code);
|
||||
return load_helper(env, addr, oi, retaddr, MO_TEUQ, true, full_ldq_code);
|
||||
}
|
||||
|
||||
uint64_t cpu_ldq_code(CPUArchState *env, abi_ptr addr)
|
||||
{
|
||||
MemOpIdx oi = make_memop_idx(MO_TEQ, cpu_mmu_index(env, true));
|
||||
MemOpIdx oi = make_memop_idx(MO_TEUQ, cpu_mmu_index(env, true));
|
||||
return full_ldq_code(env, addr, oi, 0);
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ uint32_t cpu_ldl_be_mmuidx_ra(CPUArchState *env, abi_ptr addr,
|
||||
uint64_t cpu_ldq_be_mmuidx_ra(CPUArchState *env, abi_ptr addr,
|
||||
int mmu_idx, uintptr_t ra)
|
||||
{
|
||||
MemOpIdx oi = make_memop_idx(MO_BEQ | MO_UNALN, mmu_idx);
|
||||
MemOpIdx oi = make_memop_idx(MO_BEUQ | MO_UNALN, mmu_idx);
|
||||
return cpu_ldq_be_mmu(env, addr, oi, ra);
|
||||
}
|
||||
|
||||
@@ -72,7 +72,7 @@ uint32_t cpu_ldl_le_mmuidx_ra(CPUArchState *env, abi_ptr addr,
|
||||
uint64_t cpu_ldq_le_mmuidx_ra(CPUArchState *env, abi_ptr addr,
|
||||
int mmu_idx, uintptr_t ra)
|
||||
{
|
||||
MemOpIdx oi = make_memop_idx(MO_LEQ | MO_UNALN, mmu_idx);
|
||||
MemOpIdx oi = make_memop_idx(MO_LEUQ | MO_UNALN, mmu_idx);
|
||||
return cpu_ldq_le_mmu(env, addr, oi, ra);
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ void cpu_stl_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val,
|
||||
void cpu_stq_be_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint64_t val,
|
||||
int mmu_idx, uintptr_t ra)
|
||||
{
|
||||
MemOpIdx oi = make_memop_idx(MO_BEQ | MO_UNALN, mmu_idx);
|
||||
MemOpIdx oi = make_memop_idx(MO_BEUQ | MO_UNALN, mmu_idx);
|
||||
cpu_stq_be_mmu(env, addr, val, oi, ra);
|
||||
}
|
||||
|
||||
@@ -121,7 +121,7 @@ void cpu_stl_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint32_t val,
|
||||
void cpu_stq_le_mmuidx_ra(CPUArchState *env, abi_ptr addr, uint64_t val,
|
||||
int mmu_idx, uintptr_t ra)
|
||||
{
|
||||
MemOpIdx oi = make_memop_idx(MO_LEQ | MO_UNALN, mmu_idx);
|
||||
MemOpIdx oi = make_memop_idx(MO_LEUQ | MO_UNALN, mmu_idx);
|
||||
cpu_stq_le_mmu(env, addr, val, oi, ra);
|
||||
}
|
||||
|
||||
|
||||
@@ -294,7 +294,7 @@ uint64_t cpu_ldq_be_mmu(CPUArchState *env, abi_ptr addr,
|
||||
void *haddr;
|
||||
uint64_t ret;
|
||||
|
||||
validate_memop(oi, MO_BEQ);
|
||||
validate_memop(oi, MO_BEUQ);
|
||||
trace_guest_ld_before_exec(env_cpu(env), addr, oi);
|
||||
haddr = cpu_mmu_lookup(env, addr, oi, ra, MMU_DATA_LOAD);
|
||||
ret = ldq_be_p(haddr);
|
||||
@@ -339,7 +339,7 @@ uint64_t cpu_ldq_le_mmu(CPUArchState *env, abi_ptr addr,
|
||||
void *haddr;
|
||||
uint64_t ret;
|
||||
|
||||
validate_memop(oi, MO_LEQ);
|
||||
validate_memop(oi, MO_LEUQ);
|
||||
trace_guest_ld_before_exec(env_cpu(env), addr, oi);
|
||||
haddr = cpu_mmu_lookup(env, addr, oi, ra, MMU_DATA_LOAD);
|
||||
ret = ldq_le_p(haddr);
|
||||
@@ -392,7 +392,7 @@ void cpu_stq_be_mmu(CPUArchState *env, abi_ptr addr, uint64_t val,
|
||||
{
|
||||
void *haddr;
|
||||
|
||||
validate_memop(oi, MO_BEQ);
|
||||
validate_memop(oi, MO_BEUQ);
|
||||
trace_guest_st_before_exec(env_cpu(env), addr, oi);
|
||||
haddr = cpu_mmu_lookup(env, addr, oi, ra, MMU_DATA_STORE);
|
||||
stq_be_p(haddr, val);
|
||||
@@ -431,7 +431,7 @@ void cpu_stq_le_mmu(CPUArchState *env, abi_ptr addr, uint64_t val,
|
||||
{
|
||||
void *haddr;
|
||||
|
||||
validate_memop(oi, MO_LEQ);
|
||||
validate_memop(oi, MO_LEUQ);
|
||||
trace_guest_st_before_exec(env_cpu(env), addr, oi);
|
||||
haddr = cpu_mmu_lookup(env, addr, oi, ra, MMU_DATA_STORE);
|
||||
stq_le_p(haddr, val);
|
||||
|
||||
@@ -85,29 +85,29 @@ typedef enum MemOp {
|
||||
MO_UB = MO_8,
|
||||
MO_UW = MO_16,
|
||||
MO_UL = MO_32,
|
||||
MO_UQ = MO_64,
|
||||
MO_SB = MO_SIGN | MO_8,
|
||||
MO_SW = MO_SIGN | MO_16,
|
||||
MO_SL = MO_SIGN | MO_32,
|
||||
MO_Q = MO_64,
|
||||
|
||||
MO_LEUW = MO_LE | MO_UW,
|
||||
MO_LEUL = MO_LE | MO_UL,
|
||||
MO_LEUQ = MO_LE | MO_UQ,
|
||||
MO_LESW = MO_LE | MO_SW,
|
||||
MO_LESL = MO_LE | MO_SL,
|
||||
MO_LEQ = MO_LE | MO_Q,
|
||||
|
||||
MO_BEUW = MO_BE | MO_UW,
|
||||
MO_BEUL = MO_BE | MO_UL,
|
||||
MO_BEUQ = MO_BE | MO_UQ,
|
||||
MO_BESW = MO_BE | MO_SW,
|
||||
MO_BESL = MO_BE | MO_SL,
|
||||
MO_BEQ = MO_BE | MO_Q,
|
||||
|
||||
#ifdef NEED_CPU_H
|
||||
MO_TEUW = MO_TE | MO_UW,
|
||||
MO_TEUL = MO_TE | MO_UL,
|
||||
MO_TEUQ = MO_TE | MO_UQ,
|
||||
MO_TESW = MO_TE | MO_SW,
|
||||
MO_TESL = MO_TE | MO_SL,
|
||||
MO_TEQ = MO_TE | MO_Q,
|
||||
#endif
|
||||
|
||||
MO_SSIZE = MO_SIZE | MO_SIGN,
|
||||
|
||||
@@ -894,7 +894,7 @@ static inline void tcg_gen_qemu_ld32s(TCGv ret, TCGv addr, int mem_index)
|
||||
|
||||
static inline void tcg_gen_qemu_ld64(TCGv_i64 ret, TCGv addr, int mem_index)
|
||||
{
|
||||
tcg_gen_qemu_ld_i64(ret, addr, mem_index, MO_TEQ);
|
||||
tcg_gen_qemu_ld_i64(ret, addr, mem_index, MO_TEUQ);
|
||||
}
|
||||
|
||||
static inline void tcg_gen_qemu_st8(TCGv arg, TCGv addr, int mem_index)
|
||||
@@ -914,7 +914,7 @@ static inline void tcg_gen_qemu_st32(TCGv arg, TCGv addr, int mem_index)
|
||||
|
||||
static inline void tcg_gen_qemu_st64(TCGv_i64 arg, TCGv addr, int mem_index)
|
||||
{
|
||||
tcg_gen_qemu_st_i64(arg, addr, mem_index, MO_TEQ);
|
||||
tcg_gen_qemu_st_i64(arg, addr, mem_index, MO_TEUQ);
|
||||
}
|
||||
|
||||
void tcg_gen_atomic_cmpxchg_i32(TCGv_i32, TCGv, TCGv_i32, TCGv_i32,
|
||||
|
||||
+16
-16
@@ -286,7 +286,7 @@ static void gen_ldf(DisasContext *ctx, TCGv dest, TCGv addr)
|
||||
static void gen_ldg(DisasContext *ctx, TCGv dest, TCGv addr)
|
||||
{
|
||||
TCGv tmp = tcg_temp_new();
|
||||
tcg_gen_qemu_ld_i64(tmp, addr, ctx->mem_idx, MO_LEQ | UNALIGN(ctx));
|
||||
tcg_gen_qemu_ld_i64(tmp, addr, ctx->mem_idx, MO_LEUQ | UNALIGN(ctx));
|
||||
gen_helper_memory_to_g(dest, tmp);
|
||||
tcg_temp_free(tmp);
|
||||
}
|
||||
@@ -301,7 +301,7 @@ static void gen_lds(DisasContext *ctx, TCGv dest, TCGv addr)
|
||||
|
||||
static void gen_ldt(DisasContext *ctx, TCGv dest, TCGv addr)
|
||||
{
|
||||
tcg_gen_qemu_ld_i64(dest, addr, ctx->mem_idx, MO_LEQ | UNALIGN(ctx));
|
||||
tcg_gen_qemu_ld_i64(dest, addr, ctx->mem_idx, MO_LEUQ | UNALIGN(ctx));
|
||||
}
|
||||
|
||||
static void gen_load_fp(DisasContext *ctx, int ra, int rb, int32_t disp16,
|
||||
@@ -358,7 +358,7 @@ static void gen_stg(DisasContext *ctx, TCGv src, TCGv addr)
|
||||
{
|
||||
TCGv tmp = tcg_temp_new();
|
||||
gen_helper_g_to_memory(tmp, src);
|
||||
tcg_gen_qemu_st_i64(tmp, addr, ctx->mem_idx, MO_LEQ | UNALIGN(ctx));
|
||||
tcg_gen_qemu_st_i64(tmp, addr, ctx->mem_idx, MO_LEUQ | UNALIGN(ctx));
|
||||
tcg_temp_free(tmp);
|
||||
}
|
||||
|
||||
@@ -372,7 +372,7 @@ static void gen_sts(DisasContext *ctx, TCGv src, TCGv addr)
|
||||
|
||||
static void gen_stt(DisasContext *ctx, TCGv src, TCGv addr)
|
||||
{
|
||||
tcg_gen_qemu_st_i64(src, addr, ctx->mem_idx, MO_LEQ | UNALIGN(ctx));
|
||||
tcg_gen_qemu_st_i64(src, addr, ctx->mem_idx, MO_LEUQ | UNALIGN(ctx));
|
||||
}
|
||||
|
||||
static void gen_store_fp(DisasContext *ctx, int ra, int rb, int32_t disp16,
|
||||
@@ -1499,7 +1499,7 @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
|
||||
break;
|
||||
case 0x0B:
|
||||
/* LDQ_U */
|
||||
gen_load_int(ctx, ra, rb, disp16, MO_LEQ, 1, 0);
|
||||
gen_load_int(ctx, ra, rb, disp16, MO_LEUQ, 1, 0);
|
||||
break;
|
||||
case 0x0C:
|
||||
/* LDWU */
|
||||
@@ -1518,7 +1518,7 @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
|
||||
break;
|
||||
case 0x0F:
|
||||
/* STQ_U */
|
||||
gen_store_int(ctx, ra, rb, disp16, MO_LEQ, 1);
|
||||
gen_store_int(ctx, ra, rb, disp16, MO_LEUQ, 1);
|
||||
break;
|
||||
|
||||
case 0x10:
|
||||
@@ -2469,7 +2469,7 @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
|
||||
break;
|
||||
case 0x1:
|
||||
/* Quadword physical access (hw_ldq/p) */
|
||||
tcg_gen_qemu_ld_i64(va, addr, MMU_PHYS_IDX, MO_LEQ);
|
||||
tcg_gen_qemu_ld_i64(va, addr, MMU_PHYS_IDX, MO_LEUQ);
|
||||
break;
|
||||
case 0x2:
|
||||
/* Longword physical access with lock (hw_ldl_l/p) */
|
||||
@@ -2479,7 +2479,7 @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
|
||||
break;
|
||||
case 0x3:
|
||||
/* Quadword physical access with lock (hw_ldq_l/p) */
|
||||
tcg_gen_qemu_ld_i64(va, addr, MMU_PHYS_IDX, MO_LEQ);
|
||||
tcg_gen_qemu_ld_i64(va, addr, MMU_PHYS_IDX, MO_LEUQ);
|
||||
tcg_gen_mov_i64(cpu_lock_addr, addr);
|
||||
tcg_gen_mov_i64(cpu_lock_value, va);
|
||||
break;
|
||||
@@ -2508,7 +2508,7 @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
|
||||
break;
|
||||
case 0xB:
|
||||
/* Quadword virtual access with protection check (hw_ldq/w) */
|
||||
tcg_gen_qemu_ld_i64(va, addr, MMU_KERNEL_IDX, MO_LEQ);
|
||||
tcg_gen_qemu_ld_i64(va, addr, MMU_KERNEL_IDX, MO_LEUQ);
|
||||
break;
|
||||
case 0xC:
|
||||
/* Longword virtual access with alt access mode (hw_ldl/a)*/
|
||||
@@ -2524,7 +2524,7 @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
|
||||
case 0xF:
|
||||
/* Quadword virtual access with alternate access mode and
|
||||
protection checks (hw_ldq/wa) */
|
||||
tcg_gen_qemu_ld_i64(va, addr, MMU_USER_IDX, MO_LEQ);
|
||||
tcg_gen_qemu_ld_i64(va, addr, MMU_USER_IDX, MO_LEUQ);
|
||||
break;
|
||||
}
|
||||
tcg_temp_free(addr);
|
||||
@@ -2737,7 +2737,7 @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
|
||||
vb = load_gpr(ctx, rb);
|
||||
tmp = tcg_temp_new();
|
||||
tcg_gen_addi_i64(tmp, vb, disp12);
|
||||
tcg_gen_qemu_st_i64(va, tmp, MMU_PHYS_IDX, MO_LEQ);
|
||||
tcg_gen_qemu_st_i64(va, tmp, MMU_PHYS_IDX, MO_LEUQ);
|
||||
tcg_temp_free(tmp);
|
||||
break;
|
||||
case 0x2:
|
||||
@@ -2748,7 +2748,7 @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
|
||||
case 0x3:
|
||||
/* Quadword physical access with lock */
|
||||
ret = gen_store_conditional(ctx, ra, rb, disp12,
|
||||
MMU_PHYS_IDX, MO_LEQ);
|
||||
MMU_PHYS_IDX, MO_LEUQ);
|
||||
break;
|
||||
case 0x4:
|
||||
/* Longword virtual access */
|
||||
@@ -2838,7 +2838,7 @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
|
||||
break;
|
||||
case 0x29:
|
||||
/* LDQ */
|
||||
gen_load_int(ctx, ra, rb, disp16, MO_LEQ, 0, 0);
|
||||
gen_load_int(ctx, ra, rb, disp16, MO_LEUQ, 0, 0);
|
||||
break;
|
||||
case 0x2A:
|
||||
/* LDL_L */
|
||||
@@ -2846,7 +2846,7 @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
|
||||
break;
|
||||
case 0x2B:
|
||||
/* LDQ_L */
|
||||
gen_load_int(ctx, ra, rb, disp16, MO_LEQ, 0, 1);
|
||||
gen_load_int(ctx, ra, rb, disp16, MO_LEUQ, 0, 1);
|
||||
break;
|
||||
case 0x2C:
|
||||
/* STL */
|
||||
@@ -2854,7 +2854,7 @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
|
||||
break;
|
||||
case 0x2D:
|
||||
/* STQ */
|
||||
gen_store_int(ctx, ra, rb, disp16, MO_LEQ, 0);
|
||||
gen_store_int(ctx, ra, rb, disp16, MO_LEUQ, 0);
|
||||
break;
|
||||
case 0x2E:
|
||||
/* STL_C */
|
||||
@@ -2864,7 +2864,7 @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
|
||||
case 0x2F:
|
||||
/* STQ_C */
|
||||
ret = gen_store_conditional(ctx, ra, rb, disp16,
|
||||
ctx->mem_idx, MO_LEQ);
|
||||
ctx->mem_idx, MO_LEUQ);
|
||||
break;
|
||||
case 0x30:
|
||||
/* BR */
|
||||
|
||||
@@ -513,8 +513,8 @@ uint64_t HELPER(paired_cmpxchg64_le)(CPUARMState *env, uint64_t addr,
|
||||
uint64_t o0, o1;
|
||||
bool success;
|
||||
int mem_idx = cpu_mmu_index(env, false);
|
||||
MemOpIdx oi0 = make_memop_idx(MO_LEQ | MO_ALIGN_16, mem_idx);
|
||||
MemOpIdx oi1 = make_memop_idx(MO_LEQ, mem_idx);
|
||||
MemOpIdx oi0 = make_memop_idx(MO_LEUQ | MO_ALIGN_16, mem_idx);
|
||||
MemOpIdx oi1 = make_memop_idx(MO_LEUQ, mem_idx);
|
||||
|
||||
o0 = cpu_ldq_le_mmu(env, addr + 0, oi0, ra);
|
||||
o1 = cpu_ldq_le_mmu(env, addr + 8, oi1, ra);
|
||||
@@ -565,8 +565,8 @@ uint64_t HELPER(paired_cmpxchg64_be)(CPUARMState *env, uint64_t addr,
|
||||
uint64_t o0, o1;
|
||||
bool success;
|
||||
int mem_idx = cpu_mmu_index(env, false);
|
||||
MemOpIdx oi0 = make_memop_idx(MO_BEQ | MO_ALIGN_16, mem_idx);
|
||||
MemOpIdx oi1 = make_memop_idx(MO_BEQ, mem_idx);
|
||||
MemOpIdx oi0 = make_memop_idx(MO_BEUQ | MO_ALIGN_16, mem_idx);
|
||||
MemOpIdx oi1 = make_memop_idx(MO_BEUQ, mem_idx);
|
||||
|
||||
o1 = cpu_ldq_be_mmu(env, addr + 0, oi0, ra);
|
||||
o0 = cpu_ldq_be_mmu(env, addr + 8, oi1, ra);
|
||||
|
||||
@@ -117,13 +117,13 @@ void gen_aa32_st_i64(DisasContext *s, TCGv_i64 val, TCGv_i32 a32,
|
||||
static inline void gen_aa32_ld64(DisasContext *s, TCGv_i64 val,
|
||||
TCGv_i32 a32, int index)
|
||||
{
|
||||
gen_aa32_ld_i64(s, val, a32, index, MO_Q);
|
||||
gen_aa32_ld_i64(s, val, a32, index, MO_UQ);
|
||||
}
|
||||
|
||||
static inline void gen_aa32_st64(DisasContext *s, TCGv_i64 val,
|
||||
TCGv_i32 a32, int index)
|
||||
{
|
||||
gen_aa32_st_i64(s, val, a32, index, MO_Q);
|
||||
gen_aa32_st_i64(s, val, a32, index, MO_UQ);
|
||||
}
|
||||
|
||||
DO_GEN_LD(8u, MO_UB)
|
||||
|
||||
@@ -973,7 +973,7 @@ static void do_fp_st(DisasContext *s, int srcidx, TCGv_i64 tcg_addr, int size)
|
||||
|
||||
tcg_gen_ld_i64(tmphi, cpu_env, fp_reg_hi_offset(s, srcidx));
|
||||
|
||||
mop = s->be_data | MO_Q;
|
||||
mop = s->be_data | MO_UQ;
|
||||
tcg_gen_qemu_st_i64(be ? tmphi : tmplo, tcg_addr, get_mem_index(s),
|
||||
mop | (s->align_mem ? MO_ALIGN_16 : 0));
|
||||
tcg_gen_addi_i64(tcg_hiaddr, tcg_addr, 8);
|
||||
@@ -1007,7 +1007,7 @@ static void do_fp_ld(DisasContext *s, int destidx, TCGv_i64 tcg_addr, int size)
|
||||
tmphi = tcg_temp_new_i64();
|
||||
tcg_hiaddr = tcg_temp_new_i64();
|
||||
|
||||
mop = s->be_data | MO_Q;
|
||||
mop = s->be_data | MO_UQ;
|
||||
tcg_gen_qemu_ld_i64(be ? tmphi : tmplo, tcg_addr, get_mem_index(s),
|
||||
mop | (s->align_mem ? MO_ALIGN_16 : 0));
|
||||
tcg_gen_addi_i64(tcg_hiaddr, tcg_addr, 8);
|
||||
@@ -4099,10 +4099,10 @@ static void disas_ldst_tag(DisasContext *s, uint32_t insn)
|
||||
int i, n = (1 + is_pair) << LOG2_TAG_GRANULE;
|
||||
|
||||
tcg_gen_qemu_st_i64(tcg_zero, clean_addr, mem_index,
|
||||
MO_Q | MO_ALIGN_16);
|
||||
MO_UQ | MO_ALIGN_16);
|
||||
for (i = 8; i < n; i += 8) {
|
||||
tcg_gen_addi_i64(clean_addr, clean_addr, 8);
|
||||
tcg_gen_qemu_st_i64(tcg_zero, clean_addr, mem_index, MO_Q);
|
||||
tcg_gen_qemu_st_i64(tcg_zero, clean_addr, mem_index, MO_UQ);
|
||||
}
|
||||
tcg_temp_free_i64(tcg_zero);
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ static void neon_load_element64(TCGv_i64 var, int reg, int ele, MemOp mop)
|
||||
case MO_UL:
|
||||
tcg_gen_ld32u_i64(var, cpu_env, offset);
|
||||
break;
|
||||
case MO_Q:
|
||||
case MO_UQ:
|
||||
tcg_gen_ld_i64(var, cpu_env, offset);
|
||||
break;
|
||||
default:
|
||||
@@ -1830,7 +1830,7 @@ static bool do_prewiden_3d(DisasContext *s, arg_3diff *a,
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((a->vd & 1) || (src1_mop == MO_Q && (a->vn & 1))) {
|
||||
if ((a->vd & 1) || (src1_mop == MO_UQ && (a->vn & 1))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1910,7 +1910,7 @@ static bool do_prewiden_3d(DisasContext *s, arg_3diff *a,
|
||||
}; \
|
||||
int narrow_mop = a->size == MO_32 ? MO_32 | SIGN : -1; \
|
||||
return do_prewiden_3d(s, a, widenfn[a->size], addfn[a->size], \
|
||||
SRC1WIDE ? MO_Q : narrow_mop, \
|
||||
SRC1WIDE ? MO_UQ : narrow_mop, \
|
||||
narrow_mop); \
|
||||
}
|
||||
|
||||
|
||||
@@ -5087,7 +5087,7 @@ static void do_ldr(DisasContext *s, uint32_t vofs, int len, int rn, int imm)
|
||||
|
||||
t0 = tcg_temp_new_i64();
|
||||
for (i = 0; i < len_align; i += 8) {
|
||||
tcg_gen_qemu_ld_i64(t0, clean_addr, midx, MO_LEQ);
|
||||
tcg_gen_qemu_ld_i64(t0, clean_addr, midx, MO_LEUQ);
|
||||
tcg_gen_st_i64(t0, cpu_env, vofs + i);
|
||||
tcg_gen_addi_i64(clean_addr, clean_addr, 8);
|
||||
}
|
||||
@@ -5104,7 +5104,7 @@ static void do_ldr(DisasContext *s, uint32_t vofs, int len, int rn, int imm)
|
||||
gen_set_label(loop);
|
||||
|
||||
t0 = tcg_temp_new_i64();
|
||||
tcg_gen_qemu_ld_i64(t0, clean_addr, midx, MO_LEQ);
|
||||
tcg_gen_qemu_ld_i64(t0, clean_addr, midx, MO_LEUQ);
|
||||
tcg_gen_addi_i64(clean_addr, clean_addr, 8);
|
||||
|
||||
tp = tcg_temp_new_ptr();
|
||||
@@ -5177,7 +5177,7 @@ static void do_str(DisasContext *s, uint32_t vofs, int len, int rn, int imm)
|
||||
t0 = tcg_temp_new_i64();
|
||||
for (i = 0; i < len_align; i += 8) {
|
||||
tcg_gen_ld_i64(t0, cpu_env, vofs + i);
|
||||
tcg_gen_qemu_st_i64(t0, clean_addr, midx, MO_LEQ);
|
||||
tcg_gen_qemu_st_i64(t0, clean_addr, midx, MO_LEUQ);
|
||||
tcg_gen_addi_i64(clean_addr, clean_addr, 8);
|
||||
}
|
||||
tcg_temp_free_i64(t0);
|
||||
@@ -5199,7 +5199,7 @@ static void do_str(DisasContext *s, uint32_t vofs, int len, int rn, int imm)
|
||||
tcg_gen_addi_ptr(i, i, 8);
|
||||
tcg_temp_free_ptr(tp);
|
||||
|
||||
tcg_gen_qemu_st_i64(t0, clean_addr, midx, MO_LEQ);
|
||||
tcg_gen_qemu_st_i64(t0, clean_addr, midx, MO_LEUQ);
|
||||
tcg_gen_addi_i64(clean_addr, clean_addr, 8);
|
||||
tcg_temp_free_i64(t0);
|
||||
|
||||
@@ -5283,7 +5283,7 @@ static const MemOp dtype_mop[16] = {
|
||||
MO_UB, MO_UB, MO_UB, MO_UB,
|
||||
MO_SL, MO_UW, MO_UW, MO_UW,
|
||||
MO_SW, MO_SW, MO_UL, MO_UL,
|
||||
MO_SB, MO_SB, MO_SB, MO_Q
|
||||
MO_SB, MO_SB, MO_SB, MO_UQ
|
||||
};
|
||||
|
||||
#define dtype_msz(x) (dtype_mop[x] & MO_SIZE)
|
||||
|
||||
@@ -1170,11 +1170,11 @@ static bool trans_VLDR_VSTR_dp(DisasContext *s, arg_VLDR_VSTR_dp *a)
|
||||
addr = add_reg_for_lit(s, a->rn, offset);
|
||||
tmp = tcg_temp_new_i64();
|
||||
if (a->l) {
|
||||
gen_aa32_ld_i64(s, tmp, addr, get_mem_index(s), MO_Q | MO_ALIGN_4);
|
||||
gen_aa32_ld_i64(s, tmp, addr, get_mem_index(s), MO_UQ | MO_ALIGN_4);
|
||||
vfp_store_reg64(tmp, a->vd);
|
||||
} else {
|
||||
vfp_load_reg64(tmp, a->vd);
|
||||
gen_aa32_st_i64(s, tmp, addr, get_mem_index(s), MO_Q | MO_ALIGN_4);
|
||||
gen_aa32_st_i64(s, tmp, addr, get_mem_index(s), MO_UQ | MO_ALIGN_4);
|
||||
}
|
||||
tcg_temp_free_i64(tmp);
|
||||
tcg_temp_free_i32(addr);
|
||||
@@ -1322,12 +1322,12 @@ static bool trans_VLDM_VSTM_dp(DisasContext *s, arg_VLDM_VSTM_dp *a)
|
||||
for (i = 0; i < n; i++) {
|
||||
if (a->l) {
|
||||
/* load */
|
||||
gen_aa32_ld_i64(s, tmp, addr, get_mem_index(s), MO_Q | MO_ALIGN_4);
|
||||
gen_aa32_ld_i64(s, tmp, addr, get_mem_index(s), MO_UQ | MO_ALIGN_4);
|
||||
vfp_store_reg64(tmp, a->vd + i);
|
||||
} else {
|
||||
/* store */
|
||||
vfp_load_reg64(tmp, a->vd + i);
|
||||
gen_aa32_st_i64(s, tmp, addr, get_mem_index(s), MO_Q | MO_ALIGN_4);
|
||||
gen_aa32_st_i64(s, tmp, addr, get_mem_index(s), MO_UQ | MO_ALIGN_4);
|
||||
}
|
||||
tcg_gen_addi_i32(addr, addr, offset);
|
||||
}
|
||||
|
||||
@@ -1217,7 +1217,7 @@ void read_neon_element64(TCGv_i64 dest, int reg, int ele, MemOp memop)
|
||||
case MO_UL:
|
||||
tcg_gen_ld32u_i64(dest, cpu_env, off);
|
||||
break;
|
||||
case MO_Q:
|
||||
case MO_UQ:
|
||||
tcg_gen_ld_i64(dest, cpu_env, off);
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -1047,7 +1047,7 @@ static void gen_load64(DisasContext *dc, TCGv_i64 dst, TCGv addr)
|
||||
cris_store_direct_jmp(dc);
|
||||
}
|
||||
|
||||
tcg_gen_qemu_ld_i64(dst, addr, mem_index, MO_TEQ);
|
||||
tcg_gen_qemu_ld_i64(dst, addr, mem_index, MO_TEUQ);
|
||||
}
|
||||
|
||||
static void gen_load(DisasContext *dc, TCGv dst, TCGv addr,
|
||||
|
||||
@@ -1609,7 +1609,7 @@ static bool do_floadd(DisasContext *ctx, unsigned rt, unsigned rb,
|
||||
nullify_over(ctx);
|
||||
|
||||
tmp = tcg_temp_new_i64();
|
||||
do_load_64(ctx, tmp, rb, rx, scale, disp, sp, modify, MO_TEQ);
|
||||
do_load_64(ctx, tmp, rb, rx, scale, disp, sp, modify, MO_TEUQ);
|
||||
save_frd(rt, tmp);
|
||||
tcg_temp_free_i64(tmp);
|
||||
|
||||
@@ -1665,7 +1665,7 @@ static bool do_fstored(DisasContext *ctx, unsigned rt, unsigned rb,
|
||||
nullify_over(ctx);
|
||||
|
||||
tmp = load_frd(rt);
|
||||
do_store_64(ctx, tmp, rb, rx, scale, disp, sp, modify, MO_TEQ);
|
||||
do_store_64(ctx, tmp, rb, rx, scale, disp, sp, modify, MO_TEUQ);
|
||||
tcg_temp_free_i64(tmp);
|
||||
|
||||
return nullify_end(ctx);
|
||||
|
||||
@@ -67,7 +67,7 @@ void helper_cmpxchg8b(CPUX86State *env, target_ulong a0)
|
||||
{
|
||||
uintptr_t ra = GETPC();
|
||||
int mem_idx = cpu_mmu_index(env, false);
|
||||
MemOpIdx oi = make_memop_idx(MO_TEQ, mem_idx);
|
||||
MemOpIdx oi = make_memop_idx(MO_TEUQ, mem_idx);
|
||||
oldv = cpu_atomic_cmpxchgq_le_mmu(env, a0, cmpv, newv, oi, ra);
|
||||
}
|
||||
|
||||
|
||||
+18
-18
@@ -2719,23 +2719,23 @@ static void gen_jmp(DisasContext *s, target_ulong eip)
|
||||
|
||||
static inline void gen_ldq_env_A0(DisasContext *s, int offset)
|
||||
{
|
||||
tcg_gen_qemu_ld_i64(s->tmp1_i64, s->A0, s->mem_index, MO_LEQ);
|
||||
tcg_gen_qemu_ld_i64(s->tmp1_i64, s->A0, s->mem_index, MO_LEUQ);
|
||||
tcg_gen_st_i64(s->tmp1_i64, cpu_env, offset);
|
||||
}
|
||||
|
||||
static inline void gen_stq_env_A0(DisasContext *s, int offset)
|
||||
{
|
||||
tcg_gen_ld_i64(s->tmp1_i64, cpu_env, offset);
|
||||
tcg_gen_qemu_st_i64(s->tmp1_i64, s->A0, s->mem_index, MO_LEQ);
|
||||
tcg_gen_qemu_st_i64(s->tmp1_i64, s->A0, s->mem_index, MO_LEUQ);
|
||||
}
|
||||
|
||||
static inline void gen_ldo_env_A0(DisasContext *s, int offset)
|
||||
{
|
||||
int mem_index = s->mem_index;
|
||||
tcg_gen_qemu_ld_i64(s->tmp1_i64, s->A0, mem_index, MO_LEQ);
|
||||
tcg_gen_qemu_ld_i64(s->tmp1_i64, s->A0, mem_index, MO_LEUQ);
|
||||
tcg_gen_st_i64(s->tmp1_i64, cpu_env, offset + offsetof(ZMMReg, ZMM_Q(0)));
|
||||
tcg_gen_addi_tl(s->tmp0, s->A0, 8);
|
||||
tcg_gen_qemu_ld_i64(s->tmp1_i64, s->tmp0, mem_index, MO_LEQ);
|
||||
tcg_gen_qemu_ld_i64(s->tmp1_i64, s->tmp0, mem_index, MO_LEUQ);
|
||||
tcg_gen_st_i64(s->tmp1_i64, cpu_env, offset + offsetof(ZMMReg, ZMM_Q(1)));
|
||||
}
|
||||
|
||||
@@ -2743,10 +2743,10 @@ static inline void gen_sto_env_A0(DisasContext *s, int offset)
|
||||
{
|
||||
int mem_index = s->mem_index;
|
||||
tcg_gen_ld_i64(s->tmp1_i64, cpu_env, offset + offsetof(ZMMReg, ZMM_Q(0)));
|
||||
tcg_gen_qemu_st_i64(s->tmp1_i64, s->A0, mem_index, MO_LEQ);
|
||||
tcg_gen_qemu_st_i64(s->tmp1_i64, s->A0, mem_index, MO_LEUQ);
|
||||
tcg_gen_addi_tl(s->tmp0, s->A0, 8);
|
||||
tcg_gen_ld_i64(s->tmp1_i64, cpu_env, offset + offsetof(ZMMReg, ZMM_Q(1)));
|
||||
tcg_gen_qemu_st_i64(s->tmp1_i64, s->tmp0, mem_index, MO_LEQ);
|
||||
tcg_gen_qemu_st_i64(s->tmp1_i64, s->tmp0, mem_index, MO_LEUQ);
|
||||
}
|
||||
|
||||
static inline void gen_op_movo(DisasContext *s, int d_offset, int s_offset)
|
||||
@@ -4255,7 +4255,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
tcg_gen_mov_i64(cpu_regs[rm], s->tmp1_i64);
|
||||
} else {
|
||||
tcg_gen_qemu_st_i64(s->tmp1_i64, s->A0,
|
||||
s->mem_index, MO_LEQ);
|
||||
s->mem_index, MO_LEUQ);
|
||||
}
|
||||
#else
|
||||
goto illegal_op;
|
||||
@@ -4328,7 +4328,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
|
||||
gen_op_mov_v_reg(s, ot, s->tmp1_i64, rm);
|
||||
} else {
|
||||
tcg_gen_qemu_ld_i64(s->tmp1_i64, s->A0,
|
||||
s->mem_index, MO_LEQ);
|
||||
s->mem_index, MO_LEUQ);
|
||||
}
|
||||
tcg_gen_st_i64(s->tmp1_i64, cpu_env,
|
||||
offsetof(CPUX86State,
|
||||
@@ -5948,7 +5948,7 @@ static target_ulong disas_insn(DisasContext *s, CPUState *cpu)
|
||||
break;
|
||||
case 2:
|
||||
tcg_gen_qemu_ld_i64(s->tmp1_i64, s->A0,
|
||||
s->mem_index, MO_LEQ);
|
||||
s->mem_index, MO_LEUQ);
|
||||
gen_helper_fldl_FT0(cpu_env, s->tmp1_i64);
|
||||
break;
|
||||
case 3:
|
||||
@@ -5987,7 +5987,7 @@ static target_ulong disas_insn(DisasContext *s, CPUState *cpu)
|
||||
break;
|
||||
case 2:
|
||||
tcg_gen_qemu_ld_i64(s->tmp1_i64, s->A0,
|
||||
s->mem_index, MO_LEQ);
|
||||
s->mem_index, MO_LEUQ);
|
||||
gen_helper_fldl_ST0(cpu_env, s->tmp1_i64);
|
||||
break;
|
||||
case 3:
|
||||
@@ -6009,7 +6009,7 @@ static target_ulong disas_insn(DisasContext *s, CPUState *cpu)
|
||||
case 2:
|
||||
gen_helper_fisttll_ST0(s->tmp1_i64, cpu_env);
|
||||
tcg_gen_qemu_st_i64(s->tmp1_i64, s->A0,
|
||||
s->mem_index, MO_LEQ);
|
||||
s->mem_index, MO_LEUQ);
|
||||
break;
|
||||
case 3:
|
||||
default:
|
||||
@@ -6035,7 +6035,7 @@ static target_ulong disas_insn(DisasContext *s, CPUState *cpu)
|
||||
case 2:
|
||||
gen_helper_fstl_ST0(s->tmp1_i64, cpu_env);
|
||||
tcg_gen_qemu_st_i64(s->tmp1_i64, s->A0,
|
||||
s->mem_index, MO_LEQ);
|
||||
s->mem_index, MO_LEUQ);
|
||||
break;
|
||||
case 3:
|
||||
default:
|
||||
@@ -6104,13 +6104,13 @@ static target_ulong disas_insn(DisasContext *s, CPUState *cpu)
|
||||
break;
|
||||
case 0x3d: /* fildll */
|
||||
tcg_gen_qemu_ld_i64(s->tmp1_i64, s->A0,
|
||||
s->mem_index, MO_LEQ);
|
||||
s->mem_index, MO_LEUQ);
|
||||
gen_helper_fildll_ST0(cpu_env, s->tmp1_i64);
|
||||
break;
|
||||
case 0x3f: /* fistpll */
|
||||
gen_helper_fistll_ST0(s->tmp1_i64, cpu_env);
|
||||
tcg_gen_qemu_st_i64(s->tmp1_i64, s->A0,
|
||||
s->mem_index, MO_LEQ);
|
||||
s->mem_index, MO_LEUQ);
|
||||
gen_helper_fpop(cpu_env);
|
||||
break;
|
||||
default:
|
||||
@@ -7932,10 +7932,10 @@ static target_ulong disas_insn(DisasContext *s, CPUState *cpu)
|
||||
gen_lea_modrm(env, s, modrm);
|
||||
if (CODE64(s)) {
|
||||
tcg_gen_qemu_ld_i64(cpu_bndl[reg], s->A0,
|
||||
s->mem_index, MO_LEQ);
|
||||
s->mem_index, MO_LEUQ);
|
||||
tcg_gen_addi_tl(s->A0, s->A0, 8);
|
||||
tcg_gen_qemu_ld_i64(cpu_bndu[reg], s->A0,
|
||||
s->mem_index, MO_LEQ);
|
||||
s->mem_index, MO_LEUQ);
|
||||
} else {
|
||||
tcg_gen_qemu_ld_i64(cpu_bndl[reg], s->A0,
|
||||
s->mem_index, MO_LEUL);
|
||||
@@ -8039,10 +8039,10 @@ static target_ulong disas_insn(DisasContext *s, CPUState *cpu)
|
||||
gen_lea_modrm(env, s, modrm);
|
||||
if (CODE64(s)) {
|
||||
tcg_gen_qemu_st_i64(cpu_bndl[reg], s->A0,
|
||||
s->mem_index, MO_LEQ);
|
||||
s->mem_index, MO_LEUQ);
|
||||
tcg_gen_addi_tl(s->A0, s->A0, 8);
|
||||
tcg_gen_qemu_st_i64(cpu_bndu[reg], s->A0,
|
||||
s->mem_index, MO_LEQ);
|
||||
s->mem_index, MO_LEUQ);
|
||||
} else {
|
||||
tcg_gen_qemu_st_i64(cpu_bndl[reg], s->A0,
|
||||
s->mem_index, MO_LEUL);
|
||||
|
||||
@@ -774,7 +774,7 @@ static void do_cas2l(CPUM68KState *env, uint32_t regs, uint32_t a1, uint32_t a2,
|
||||
uintptr_t ra = GETPC();
|
||||
#if defined(CONFIG_ATOMIC64)
|
||||
int mmu_idx = cpu_mmu_index(env, 0);
|
||||
MemOpIdx oi = make_memop_idx(MO_BEQ, mmu_idx);
|
||||
MemOpIdx oi = make_memop_idx(MO_BEUQ, mmu_idx);
|
||||
#endif
|
||||
|
||||
if (parallel) {
|
||||
|
||||
@@ -1001,20 +1001,20 @@ static void gen_ldst_pair(DisasContext *ctx, uint32_t opc, int rd,
|
||||
gen_reserved_instruction(ctx);
|
||||
return;
|
||||
}
|
||||
tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx, MO_TEQ);
|
||||
tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx, MO_TEUQ);
|
||||
gen_store_gpr(t1, rd);
|
||||
tcg_gen_movi_tl(t1, 8);
|
||||
gen_op_addr_add(ctx, t0, t0, t1);
|
||||
tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx, MO_TEQ);
|
||||
tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx, MO_TEUQ);
|
||||
gen_store_gpr(t1, rd + 1);
|
||||
break;
|
||||
case SDP:
|
||||
gen_load_gpr(t1, rd);
|
||||
tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, MO_TEQ);
|
||||
tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, MO_TEUQ);
|
||||
tcg_gen_movi_tl(t1, 8);
|
||||
gen_op_addr_add(ctx, t0, t0, t1);
|
||||
gen_load_gpr(t1, rd + 1);
|
||||
tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, MO_TEQ);
|
||||
tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, MO_TEUQ);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
@@ -2578,7 +2578,7 @@ static void decode_micromips32_opc(CPUMIPSState *env, DisasContext *ctx)
|
||||
case SCD:
|
||||
check_insn(ctx, ISA_MIPS3);
|
||||
check_mips_64(ctx);
|
||||
gen_st_cond(ctx, rt, rs, offset, MO_TEQ, false);
|
||||
gen_st_cond(ctx, rt, rs, offset, MO_TEUQ, false);
|
||||
break;
|
||||
#endif
|
||||
case LD_EVA:
|
||||
|
||||
+29
-29
@@ -2031,7 +2031,7 @@ static void gen_ld(DisasContext *ctx, uint32_t opc,
|
||||
gen_store_gpr(t0, rt);
|
||||
break;
|
||||
case OPC_LD:
|
||||
tcg_gen_qemu_ld_tl(t0, t0, mem_idx, MO_TEQ |
|
||||
tcg_gen_qemu_ld_tl(t0, t0, mem_idx, MO_TEUQ |
|
||||
ctx->default_tcg_memop_mask);
|
||||
gen_store_gpr(t0, rt);
|
||||
break;
|
||||
@@ -2053,7 +2053,7 @@ static void gen_ld(DisasContext *ctx, uint32_t opc,
|
||||
}
|
||||
tcg_gen_shli_tl(t1, t1, 3);
|
||||
tcg_gen_andi_tl(t0, t0, ~7);
|
||||
tcg_gen_qemu_ld_tl(t0, t0, mem_idx, MO_TEQ);
|
||||
tcg_gen_qemu_ld_tl(t0, t0, mem_idx, MO_TEUQ);
|
||||
tcg_gen_shl_tl(t0, t0, t1);
|
||||
t2 = tcg_const_tl(-1);
|
||||
tcg_gen_shl_tl(t2, t2, t1);
|
||||
@@ -2077,7 +2077,7 @@ static void gen_ld(DisasContext *ctx, uint32_t opc,
|
||||
}
|
||||
tcg_gen_shli_tl(t1, t1, 3);
|
||||
tcg_gen_andi_tl(t0, t0, ~7);
|
||||
tcg_gen_qemu_ld_tl(t0, t0, mem_idx, MO_TEQ);
|
||||
tcg_gen_qemu_ld_tl(t0, t0, mem_idx, MO_TEUQ);
|
||||
tcg_gen_shr_tl(t0, t0, t1);
|
||||
tcg_gen_xori_tl(t1, t1, 63);
|
||||
t2 = tcg_const_tl(0xfffffffffffffffeull);
|
||||
@@ -2093,7 +2093,7 @@ static void gen_ld(DisasContext *ctx, uint32_t opc,
|
||||
t1 = tcg_const_tl(pc_relative_pc(ctx));
|
||||
gen_op_addr_add(ctx, t0, t0, t1);
|
||||
tcg_temp_free(t1);
|
||||
tcg_gen_qemu_ld_tl(t0, t0, mem_idx, MO_TEQ);
|
||||
tcg_gen_qemu_ld_tl(t0, t0, mem_idx, MO_TEUQ);
|
||||
gen_store_gpr(t0, rt);
|
||||
break;
|
||||
#endif
|
||||
@@ -2224,7 +2224,7 @@ static void gen_st(DisasContext *ctx, uint32_t opc, int rt,
|
||||
switch (opc) {
|
||||
#if defined(TARGET_MIPS64)
|
||||
case OPC_SD:
|
||||
tcg_gen_qemu_st_tl(t1, t0, mem_idx, MO_TEQ |
|
||||
tcg_gen_qemu_st_tl(t1, t0, mem_idx, MO_TEUQ |
|
||||
ctx->default_tcg_memop_mask);
|
||||
break;
|
||||
case OPC_SDL:
|
||||
@@ -2334,7 +2334,7 @@ static void gen_flt_ldst(DisasContext *ctx, uint32_t opc, int ft,
|
||||
case OPC_LDC1:
|
||||
{
|
||||
TCGv_i64 fp0 = tcg_temp_new_i64();
|
||||
tcg_gen_qemu_ld_i64(fp0, t0, ctx->mem_idx, MO_TEQ |
|
||||
tcg_gen_qemu_ld_i64(fp0, t0, ctx->mem_idx, MO_TEUQ |
|
||||
ctx->default_tcg_memop_mask);
|
||||
gen_store_fpr64(ctx, fp0, ft);
|
||||
tcg_temp_free_i64(fp0);
|
||||
@@ -2344,7 +2344,7 @@ static void gen_flt_ldst(DisasContext *ctx, uint32_t opc, int ft,
|
||||
{
|
||||
TCGv_i64 fp0 = tcg_temp_new_i64();
|
||||
gen_load_fpr64(ctx, fp0, ft);
|
||||
tcg_gen_qemu_st_i64(fp0, t0, ctx->mem_idx, MO_TEQ |
|
||||
tcg_gen_qemu_st_i64(fp0, t0, ctx->mem_idx, MO_TEUQ |
|
||||
ctx->default_tcg_memop_mask);
|
||||
tcg_temp_free_i64(fp0);
|
||||
}
|
||||
@@ -3092,7 +3092,7 @@ static inline void gen_pcrel(DisasContext *ctx, int opc, target_ulong pc,
|
||||
check_mips_64(ctx);
|
||||
offset = sextract32(ctx->opcode << 3, 0, 21);
|
||||
addr = addr_add(ctx, (pc & ~0x7), offset);
|
||||
gen_r6_ld(addr, rs, ctx->mem_idx, MO_TEQ);
|
||||
gen_r6_ld(addr, rs, ctx->mem_idx, MO_TEUQ);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
@@ -4344,10 +4344,10 @@ static void gen_loongson_lswc2(DisasContext *ctx, int rt,
|
||||
case OPC_GSLQ:
|
||||
t1 = tcg_temp_new();
|
||||
gen_base_offset_addr(ctx, t0, rs, lsq_offset);
|
||||
tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx, MO_TEQ |
|
||||
tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx, MO_TEUQ |
|
||||
ctx->default_tcg_memop_mask);
|
||||
gen_base_offset_addr(ctx, t0, rs, lsq_offset + 8);
|
||||
tcg_gen_qemu_ld_tl(t0, t0, ctx->mem_idx, MO_TEQ |
|
||||
tcg_gen_qemu_ld_tl(t0, t0, ctx->mem_idx, MO_TEUQ |
|
||||
ctx->default_tcg_memop_mask);
|
||||
gen_store_gpr(t1, rt);
|
||||
gen_store_gpr(t0, lsq_rt1);
|
||||
@@ -4357,10 +4357,10 @@ static void gen_loongson_lswc2(DisasContext *ctx, int rt,
|
||||
check_cp1_enabled(ctx);
|
||||
t1 = tcg_temp_new();
|
||||
gen_base_offset_addr(ctx, t0, rs, lsq_offset);
|
||||
tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx, MO_TEQ |
|
||||
tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx, MO_TEUQ |
|
||||
ctx->default_tcg_memop_mask);
|
||||
gen_base_offset_addr(ctx, t0, rs, lsq_offset + 8);
|
||||
tcg_gen_qemu_ld_tl(t0, t0, ctx->mem_idx, MO_TEQ |
|
||||
tcg_gen_qemu_ld_tl(t0, t0, ctx->mem_idx, MO_TEUQ |
|
||||
ctx->default_tcg_memop_mask);
|
||||
gen_store_fpr64(ctx, t1, rt);
|
||||
gen_store_fpr64(ctx, t0, lsq_rt1);
|
||||
@@ -4370,11 +4370,11 @@ static void gen_loongson_lswc2(DisasContext *ctx, int rt,
|
||||
t1 = tcg_temp_new();
|
||||
gen_base_offset_addr(ctx, t0, rs, lsq_offset);
|
||||
gen_load_gpr(t1, rt);
|
||||
tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, MO_TEQ |
|
||||
tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, MO_TEUQ |
|
||||
ctx->default_tcg_memop_mask);
|
||||
gen_base_offset_addr(ctx, t0, rs, lsq_offset + 8);
|
||||
gen_load_gpr(t1, lsq_rt1);
|
||||
tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, MO_TEQ |
|
||||
tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, MO_TEUQ |
|
||||
ctx->default_tcg_memop_mask);
|
||||
tcg_temp_free(t1);
|
||||
break;
|
||||
@@ -4383,11 +4383,11 @@ static void gen_loongson_lswc2(DisasContext *ctx, int rt,
|
||||
t1 = tcg_temp_new();
|
||||
gen_base_offset_addr(ctx, t0, rs, lsq_offset);
|
||||
gen_load_fpr64(ctx, t1, rt);
|
||||
tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, MO_TEQ |
|
||||
tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, MO_TEUQ |
|
||||
ctx->default_tcg_memop_mask);
|
||||
gen_base_offset_addr(ctx, t0, rs, lsq_offset + 8);
|
||||
gen_load_fpr64(ctx, t1, lsq_rt1);
|
||||
tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, MO_TEQ |
|
||||
tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, MO_TEUQ |
|
||||
ctx->default_tcg_memop_mask);
|
||||
tcg_temp_free(t1);
|
||||
break;
|
||||
@@ -4467,7 +4467,7 @@ static void gen_loongson_lswc2(DisasContext *ctx, int rt,
|
||||
}
|
||||
tcg_gen_shli_tl(t1, t1, 3);
|
||||
tcg_gen_andi_tl(t0, t0, ~7);
|
||||
tcg_gen_qemu_ld_tl(t0, t0, ctx->mem_idx, MO_TEQ);
|
||||
tcg_gen_qemu_ld_tl(t0, t0, ctx->mem_idx, MO_TEUQ);
|
||||
tcg_gen_shl_tl(t0, t0, t1);
|
||||
t2 = tcg_const_tl(-1);
|
||||
tcg_gen_shl_tl(t2, t2, t1);
|
||||
@@ -4489,7 +4489,7 @@ static void gen_loongson_lswc2(DisasContext *ctx, int rt,
|
||||
}
|
||||
tcg_gen_shli_tl(t1, t1, 3);
|
||||
tcg_gen_andi_tl(t0, t0, ~7);
|
||||
tcg_gen_qemu_ld_tl(t0, t0, ctx->mem_idx, MO_TEQ);
|
||||
tcg_gen_qemu_ld_tl(t0, t0, ctx->mem_idx, MO_TEUQ);
|
||||
tcg_gen_shr_tl(t0, t0, t1);
|
||||
tcg_gen_xori_tl(t1, t1, 63);
|
||||
t2 = tcg_const_tl(0xfffffffffffffffeull);
|
||||
@@ -4642,7 +4642,7 @@ static void gen_loongson_lsdc2(DisasContext *ctx, int rt,
|
||||
if (rd) {
|
||||
gen_op_addr_add(ctx, t0, cpu_gpr[rd], t0);
|
||||
}
|
||||
tcg_gen_qemu_ld_tl(t0, t0, ctx->mem_idx, MO_TEQ |
|
||||
tcg_gen_qemu_ld_tl(t0, t0, ctx->mem_idx, MO_TEUQ |
|
||||
ctx->default_tcg_memop_mask);
|
||||
gen_store_gpr(t0, rt);
|
||||
break;
|
||||
@@ -4664,7 +4664,7 @@ static void gen_loongson_lsdc2(DisasContext *ctx, int rt,
|
||||
if (rd) {
|
||||
gen_op_addr_add(ctx, t0, cpu_gpr[rd], t0);
|
||||
}
|
||||
tcg_gen_qemu_ld_tl(t0, t0, ctx->mem_idx, MO_TEQ |
|
||||
tcg_gen_qemu_ld_tl(t0, t0, ctx->mem_idx, MO_TEUQ |
|
||||
ctx->default_tcg_memop_mask);
|
||||
gen_store_fpr64(ctx, t0, rt);
|
||||
break;
|
||||
@@ -4693,7 +4693,7 @@ static void gen_loongson_lsdc2(DisasContext *ctx, int rt,
|
||||
case OPC_GSSDX:
|
||||
t1 = tcg_temp_new();
|
||||
gen_load_gpr(t1, rt);
|
||||
tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, MO_TEQ |
|
||||
tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, MO_TEUQ |
|
||||
ctx->default_tcg_memop_mask);
|
||||
tcg_temp_free(t1);
|
||||
break;
|
||||
@@ -4709,7 +4709,7 @@ static void gen_loongson_lsdc2(DisasContext *ctx, int rt,
|
||||
case OPC_GSSDXC1:
|
||||
t1 = tcg_temp_new();
|
||||
gen_load_fpr64(ctx, t1, rt);
|
||||
tcg_gen_qemu_st_i64(t1, t0, ctx->mem_idx, MO_TEQ |
|
||||
tcg_gen_qemu_st_i64(t1, t0, ctx->mem_idx, MO_TEUQ |
|
||||
ctx->default_tcg_memop_mask);
|
||||
tcg_temp_free(t1);
|
||||
break;
|
||||
@@ -11330,7 +11330,7 @@ static void gen_flt3_ldst(DisasContext *ctx, uint32_t opc,
|
||||
check_cp1_registers(ctx, fd);
|
||||
{
|
||||
TCGv_i64 fp0 = tcg_temp_new_i64();
|
||||
tcg_gen_qemu_ld_i64(fp0, t0, ctx->mem_idx, MO_TEQ);
|
||||
tcg_gen_qemu_ld_i64(fp0, t0, ctx->mem_idx, MO_TEUQ);
|
||||
gen_store_fpr64(ctx, fp0, fd);
|
||||
tcg_temp_free_i64(fp0);
|
||||
}
|
||||
@@ -11341,7 +11341,7 @@ static void gen_flt3_ldst(DisasContext *ctx, uint32_t opc,
|
||||
{
|
||||
TCGv_i64 fp0 = tcg_temp_new_i64();
|
||||
|
||||
tcg_gen_qemu_ld_i64(fp0, t0, ctx->mem_idx, MO_TEQ);
|
||||
tcg_gen_qemu_ld_i64(fp0, t0, ctx->mem_idx, MO_TEUQ);
|
||||
gen_store_fpr64(ctx, fp0, fd);
|
||||
tcg_temp_free_i64(fp0);
|
||||
}
|
||||
@@ -11361,7 +11361,7 @@ static void gen_flt3_ldst(DisasContext *ctx, uint32_t opc,
|
||||
{
|
||||
TCGv_i64 fp0 = tcg_temp_new_i64();
|
||||
gen_load_fpr64(ctx, fp0, fs);
|
||||
tcg_gen_qemu_st_i64(fp0, t0, ctx->mem_idx, MO_TEQ);
|
||||
tcg_gen_qemu_st_i64(fp0, t0, ctx->mem_idx, MO_TEUQ);
|
||||
tcg_temp_free_i64(fp0);
|
||||
}
|
||||
break;
|
||||
@@ -11371,7 +11371,7 @@ static void gen_flt3_ldst(DisasContext *ctx, uint32_t opc,
|
||||
{
|
||||
TCGv_i64 fp0 = tcg_temp_new_i64();
|
||||
gen_load_fpr64(ctx, fp0, fs);
|
||||
tcg_gen_qemu_st_i64(fp0, t0, ctx->mem_idx, MO_TEQ);
|
||||
tcg_gen_qemu_st_i64(fp0, t0, ctx->mem_idx, MO_TEUQ);
|
||||
tcg_temp_free_i64(fp0);
|
||||
}
|
||||
break;
|
||||
@@ -12187,7 +12187,7 @@ static void gen_mipsdsp_ld(DisasContext *ctx, uint32_t opc,
|
||||
break;
|
||||
#if defined(TARGET_MIPS64)
|
||||
case OPC_LDX:
|
||||
tcg_gen_qemu_ld_tl(t0, t0, ctx->mem_idx, MO_TEQ);
|
||||
tcg_gen_qemu_ld_tl(t0, t0, ctx->mem_idx, MO_TEUQ);
|
||||
gen_store_gpr(t0, rd);
|
||||
break;
|
||||
#endif
|
||||
@@ -14403,7 +14403,7 @@ static void decode_opc_special3_r6(CPUMIPSState *env, DisasContext *ctx)
|
||||
#endif
|
||||
#if defined(TARGET_MIPS64)
|
||||
case R6_OPC_SCD:
|
||||
gen_st_cond(ctx, rt, rs, imm, MO_TEQ, false);
|
||||
gen_st_cond(ctx, rt, rs, imm, MO_TEUQ, false);
|
||||
break;
|
||||
case R6_OPC_LLD:
|
||||
gen_ld(ctx, op1, rt, rs, imm);
|
||||
@@ -15843,7 +15843,7 @@ static bool decode_opc_legacy(CPUMIPSState *env, DisasContext *ctx)
|
||||
check_insn_opc_user_only(ctx, INSN_R5900);
|
||||
}
|
||||
check_mips_64(ctx);
|
||||
gen_st_cond(ctx, rt, rs, imm, MO_TEQ, false);
|
||||
gen_st_cond(ctx, rt, rs, imm, MO_TEUQ, false);
|
||||
break;
|
||||
case OPC_BNVC: /* OPC_BNEZALC, OPC_BNEC, OPC_DADDI */
|
||||
if (ctx->insn_flags & ISA_MIPS_R6) {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user