[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 14/24] target-sparc: Introduce gen_check_align
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH v3 14/24] target-sparc: Introduce gen_check_align |
Date: |
Wed, 1 Jun 2016 22:57:10 -0700 |
Signed-off-by: Richard Henderson <address@hidden>
---
target-sparc/translate.c | 48 +++++++++++++-----------------------------------
1 file changed, 13 insertions(+), 35 deletions(-)
diff --git a/target-sparc/translate.c b/target-sparc/translate.c
index 0917486..7d10578 100644
--- a/target-sparc/translate.c
+++ b/target-sparc/translate.c
@@ -1058,6 +1058,13 @@ static void gen_exception(DisasContext *dc, int which)
dc->is_br = 1;
}
+static void gen_check_align(TCGv addr, int mask)
+{
+ TCGv_i32 r_mask = tcg_const_i32(mask);
+ gen_helper_check_align(cpu_env, addr, r_mask);
+ tcg_temp_free_i32(r_mask);
+}
+
static inline void gen_mov_pc_npc(DisasContext *dc)
{
if (dc->npc == JUMP_PC) {
@@ -4696,8 +4703,6 @@ static void disas_sparc_insn(DisasContext * dc, unsigned
int insn)
#endif
#ifdef TARGET_SPARC64
} else if (xop == 0x39) { /* V9 return */
- TCGv_i32 r_const;
-
save_state(dc);
cpu_src1 = get_src1(dc, insn);
cpu_tmp0 = get_temp_tl(dc);
@@ -4715,9 +4720,7 @@ static void disas_sparc_insn(DisasContext * dc, unsigned
int insn)
}
gen_helper_restore(cpu_env);
gen_mov_pc_npc(dc);
- r_const = tcg_const_i32(3);
- gen_helper_check_align(cpu_env, cpu_tmp0, r_const);
- tcg_temp_free_i32(r_const);
+ gen_check_align(cpu_tmp0, 3);
tcg_gen_mov_tl(cpu_npc, cpu_tmp0);
dc->npc = DYNAMIC_PC;
goto jmp_insn;
@@ -4740,16 +4743,12 @@ static void disas_sparc_insn(DisasContext * dc,
unsigned int insn)
switch (xop) {
case 0x38: /* jmpl */
{
- TCGv t;
- TCGv_i32 r_const;
-
- t = gen_dest_gpr(dc, rd);
+ TCGv t = gen_dest_gpr(dc, rd);
tcg_gen_movi_tl(t, dc->pc);
gen_store_gpr(dc, rd, t);
+
gen_mov_pc_npc(dc);
- r_const = tcg_const_i32(3);
- gen_helper_check_align(cpu_env, cpu_tmp0, r_const);
- tcg_temp_free_i32(r_const);
+ gen_check_align(cpu_tmp0, 3);
gen_address_mask(dc, cpu_tmp0);
tcg_gen_mov_tl(cpu_npc, cpu_tmp0);
dc->npc = DYNAMIC_PC;
@@ -4758,14 +4757,10 @@ static void disas_sparc_insn(DisasContext * dc,
unsigned int insn)
#if !defined(CONFIG_USER_ONLY) && !defined(TARGET_SPARC64)
case 0x39: /* rett, V9 return */
{
- TCGv_i32 r_const;
-
if (!supervisor(dc))
goto priv_insn;
gen_mov_pc_npc(dc);
- r_const = tcg_const_i32(3);
- gen_helper_check_align(cpu_env, cpu_tmp0, r_const);
- tcg_temp_free_i32(r_const);
+ gen_check_align(cpu_tmp0, 3);
tcg_gen_mov_tl(cpu_npc, cpu_tmp0);
dc->npc = DYNAMIC_PC;
gen_helper_rett(cpu_env);
@@ -4861,14 +4856,8 @@ static void disas_sparc_insn(DisasContext * dc, unsigned
int insn)
if (rd & 1)
goto illegal_insn;
else {
- TCGv_i32 r_const;
TCGv_i64 t64;
- save_state(dc);
- r_const = tcg_const_i32(7);
- /* XXX remove alignment check */
- gen_helper_check_align(cpu_env, cpu_addr, r_const);
- tcg_temp_free_i32(r_const);
gen_address_mask(dc, cpu_addr);
t64 = tcg_temp_new_i64();
tcg_gen_qemu_ld64(t64, cpu_addr, dc->mem_idx);
@@ -5076,18 +5065,11 @@ static void disas_sparc_insn(DisasContext * dc,
unsigned int insn)
if (rd & 1)
goto illegal_insn;
else {
- TCGv_i32 r_const;
TCGv_i64 t64;
TCGv lo;
- save_state(dc);
gen_address_mask(dc, cpu_addr);
- r_const = tcg_const_i32(7);
- /* XXX remove alignment check */
- gen_helper_check_align(cpu_env, cpu_addr, r_const);
- tcg_temp_free_i32(r_const);
lo = gen_load_gpr(dc, rd + 1);
-
t64 = tcg_temp_new_i64();
tcg_gen_concat_tl_i64(t64, lo, cpu_val);
tcg_gen_qemu_st64(t64, cpu_addr, dc->mem_idx);
@@ -5200,15 +5182,11 @@ static void disas_sparc_insn(DisasContext * dc,
unsigned int insn)
break;
case 0x36: /* V9 stqfa */
{
- TCGv_i32 r_const;
-
CHECK_FPU_FEATURE(dc, FLOAT128);
if (gen_trap_ifnofpu(dc)) {
goto jmp_insn;
}
- r_const = tcg_const_i32(7);
- gen_helper_check_align(cpu_env, cpu_addr, r_const);
- tcg_temp_free_i32(r_const);
+ gen_check_align(cpu_addr, 7);
gen_stf_asi(dc, cpu_addr, insn, 16, QFPREG(rd));
}
break;
--
2.5.5
- [Qemu-devel] [PATCH v3 02/24] target-sparc: Remove softint as a TCG global, (continued)
- [Qemu-devel] [PATCH v3 02/24] target-sparc: Remove softint as a TCG global, Richard Henderson, 2016/06/02
- [Qemu-devel] [PATCH v3 08/24] target-sparc: Pass TCGMemOp to gen_ld/st_asi, Richard Henderson, 2016/06/02
- [Qemu-devel] [PATCH v3 05/24] target-sparc: Unify asi handling between 32 and 64-bit, Richard Henderson, 2016/06/02
- [Qemu-devel] [PATCH v3 03/24] target-sparc: Store mmu index in TB flags, Richard Henderson, 2016/06/02
- [Qemu-devel] [PATCH v3 01/24] target-sparc: Mark more flags for helpers, Richard Henderson, 2016/06/02
- [Qemu-devel] [PATCH v3 07/24] target-sparc: Introduce get_asi, Richard Henderson, 2016/06/02
- [Qemu-devel] [PATCH v3 04/24] target-sparc: Create gen_exception, Richard Henderson, 2016/06/02
- [Qemu-devel] [PATCH v3 10/24] target-sparc: Add UA2011 defines to asi.h, Richard Henderson, 2016/06/02
- [Qemu-devel] [PATCH v3 19/24] target-sparc: Directly implement block and short ldf/stf asis, Richard Henderson, 2016/06/02
- [Qemu-devel] [PATCH v3 09/24] target-sparc: Import linux/arch/sparc/include/uapi/asm/asi.h, Richard Henderson, 2016/06/02
- [Qemu-devel] [PATCH v3 14/24] target-sparc: Introduce gen_check_align,
Richard Henderson <=
- [Qemu-devel] [PATCH v3 17/24] target-sparc: Pass TCGMemOp constants to helper_ld/st_asi, Richard Henderson, 2016/06/02
- [Qemu-devel] [PATCH v3 13/24] target-sparc: Use QT0 to return results from ldda, Richard Henderson, 2016/06/02
- [Qemu-devel] [PATCH v3 18/24] target-sparc: Directly implement easy ldf/stf asis, Richard Henderson, 2016/06/02
- [Qemu-devel] [PATCH v3 11/24] target-sparc: Use defines from asi.h, Richard Henderson, 2016/06/02
- [Qemu-devel] [PATCH v3 12/24] target-sparc: Directly implement easy ld/st asis, Richard Henderson, 2016/06/02
- [Qemu-devel] [PATCH v3 16/24] target-sparc: Fix obvious error in ASI_M_BFILL, Richard Henderson, 2016/06/02
- [Qemu-devel] [PATCH v3 23/24] target-sparc: Use cpu_loop_exit_restore from helper_check_ieee_exceptions, Richard Henderson, 2016/06/02
- [Qemu-devel] [PATCH v3 22/24] target-sparc: Use cpu_fsr in stfsr, Richard Henderson, 2016/06/02
- [Qemu-devel] [PATCH v3 15/24] target-sparc: Directly implement easy ldd/std asis, Richard Henderson, 2016/06/02
- [Qemu-devel] [PATCH v3 20/24] target-sparc: Remove helper_ldf_asi, helper_stf_asi, Richard Henderson, 2016/06/02