qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Richard Henderson <rth@twiddle.net>
To: qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org, mark.cave-ayland@ilande.co.uk
Subject: [Qemu-devel] [PULL 14/24] target-sparc: Introduce gen_check_align
Date: Tue, 12 Jul 2016 12:02:08 -0700	[thread overview]
Message-ID: <1468350138-9736-15-git-send-email-rth@twiddle.net> (raw)
In-Reply-To: <1468350138-9736-1-git-send-email-rth@twiddle.net>

Tested-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
 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 885fa58..e7120f8 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);
@@ -5079,18 +5068,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);
@@ -5203,15 +5185,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.7.4

  parent reply	other threads:[~2016-07-12 19:03 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-12 19:01 [Qemu-devel] [PULL 00/24] target-sparc improvements Richard Henderson
2016-07-12 19:01 ` [Qemu-devel] [PULL 01/24] target-sparc: Mark more flags for helpers Richard Henderson
2016-07-12 19:01 ` [Qemu-devel] [PULL 02/24] target-sparc: Remove softint as a TCG global Richard Henderson
2016-07-12 19:01 ` [Qemu-devel] [PULL 03/24] target-sparc: Store mmu index in TB flags Richard Henderson
2016-07-12 19:01 ` [Qemu-devel] [PULL 04/24] target-sparc: Create gen_exception Richard Henderson
2016-07-12 19:01 ` [Qemu-devel] [PULL 05/24] target-sparc: Unify asi handling between 32 and 64-bit Richard Henderson
2016-07-12 19:02 ` [Qemu-devel] [PULL 06/24] target-sparc: Store %asi in TB flags Richard Henderson
2016-07-12 19:02 ` [Qemu-devel] [PULL 07/24] target-sparc: Introduce get_asi Richard Henderson
2016-07-12 19:02 ` [Qemu-devel] [PULL 08/24] target-sparc: Pass TCGMemOp to gen_ld/st_asi Richard Henderson
2016-07-12 19:02 ` [Qemu-devel] [PULL 09/24] target-sparc: Import linux/arch/sparc/include/uapi/asm/asi.h Richard Henderson
2016-07-12 19:02 ` [Qemu-devel] [PULL 10/24] target-sparc: Add UA2005 defines to asi.h Richard Henderson
2016-07-12 19:02 ` [Qemu-devel] [PULL 11/24] target-sparc: Use defines from asi.h Richard Henderson
2016-07-12 19:02 ` [Qemu-devel] [PULL 12/24] target-sparc: Directly implement easy ld/st asis Richard Henderson
2016-07-12 19:02 ` [Qemu-devel] [PULL 13/24] target-sparc: Use QT0 to return results from ldda Richard Henderson
2016-07-12 19:02 ` Richard Henderson [this message]
2016-07-12 19:02 ` [Qemu-devel] [PULL 15/24] target-sparc: Directly implement easy ldd/std asis Richard Henderson
2016-07-12 19:02 ` [Qemu-devel] [PULL 16/24] target-sparc: Fix obvious error in ASI_M_BFILL Richard Henderson
2016-07-12 19:02 ` [Qemu-devel] [PULL 17/24] target-sparc: Pass TCGMemOp constants to helper_ld/st_asi Richard Henderson
2016-07-12 19:02 ` [Qemu-devel] [PULL 18/24] target-sparc: Directly implement easy ldf/stf asis Richard Henderson
2016-07-12 19:02 ` [Qemu-devel] [PULL 19/24] target-sparc: Directly implement block and short " Richard Henderson
2016-07-12 19:02 ` [Qemu-devel] [PULL 20/24] target-sparc: Remove helper_ldf_asi, helper_stf_asi Richard Henderson
2016-07-12 19:02 ` [Qemu-devel] [PULL 21/24] target-sparc: Use explicit writes to cpu_fsr Richard Henderson
2016-07-12 19:02 ` [Qemu-devel] [PULL 22/24] target-sparc: Use cpu_fsr in stfsr Richard Henderson
2016-07-12 19:02 ` [Qemu-devel] [PULL 23/24] target-sparc: Use cpu_loop_exit_restore from helper_check_ieee_exceptions Richard Henderson
2016-07-12 19:02 ` [Qemu-devel] [PULL 24/24] target-sparc: Elide duplicate updates to fprs Richard Henderson
2016-07-14 10:48 ` [Qemu-devel] [PULL 00/24] target-sparc improvements Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1468350138-9736-15-git-send-email-rth@twiddle.net \
    --to=rth@twiddle.net \
    --cc=mark.cave-ayland@ilande.co.uk \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).