All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: edgar.iglesias@xilinx.com
Subject: [PATCH v2 25/76] target/microblaze: Split out MSR[C] to its own variable
Date: Fri, 28 Aug 2020 07:18:38 -0700	[thread overview]
Message-ID: <20200828141929.77854-26-richard.henderson@linaro.org> (raw)
In-Reply-To: <20200828141929.77854-1-richard.henderson@linaro.org>

Having the MSR[C] bit separate will improve arithmetic that operates
on the carry bit.  Having mb_cpu_read_msr() populate MSR[CC] will
prevent the carry copy not matching the carry bit.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 target/microblaze/cpu.h       | 19 +++++++-
 linux-user/elfload.c          |  2 +-
 target/microblaze/cpu.c       |  4 +-
 target/microblaze/gdbstub.c   |  4 +-
 target/microblaze/helper.c    | 58 +++++++++++-----------
 target/microblaze/translate.c | 91 +++++++++++------------------------
 6 files changed, 82 insertions(+), 96 deletions(-)

diff --git a/target/microblaze/cpu.h b/target/microblaze/cpu.h
index 7708c9a3d3..7066878ac7 100644
--- a/target/microblaze/cpu.h
+++ b/target/microblaze/cpu.h
@@ -236,7 +236,8 @@ struct CPUMBState {
     uint32_t imm;
     uint32_t regs[32];
     uint32_t pc;
-    uint32_t msr;
+    uint32_t msr;    /* All bits of MSR except MSR[C] and MSR[CC] */
+    uint32_t msr_c;  /* MSR[C], in low bit; other bits must be 0 */
     uint64_t ear;
     uint32_t esr;
     uint32_t fsr;
@@ -327,6 +328,22 @@ hwaddr mb_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr);
 int mb_cpu_gdb_read_register(CPUState *cpu, GByteArray *buf, int reg);
 int mb_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg);
 
+static inline uint32_t mb_cpu_read_msr(const CPUMBState *env)
+{
+    /* Replicate MSR[C] to MSR[CC]. */
+    return env->msr | (env->msr_c * (MSR_C | MSR_CC));
+}
+
+static inline void mb_cpu_write_msr(CPUMBState *env, uint32_t val)
+{
+    env->msr_c = (val >> 2) & 1;
+    /*
+     * Clear both MSR[C] and MSR[CC] from the saved copy.
+     * MSR_PVR is not writable and is always clear.
+     */
+    env->msr = val & ~(MSR_C | MSR_CC | MSR_PVR);
+}
+
 void mb_tcg_init(void);
 /* you can call this signal handler from your SIGBUS and SIGSEGV
    signal handlers to inform the virtual CPU of exceptions. non zero
diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index bbfb665321..98af4fe7e0 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -1033,7 +1033,7 @@ static void elf_core_copy_regs(target_elf_gregset_t *regs, const CPUMBState *env
     }
 
     (*regs)[pos++] = tswapreg(env->pc);
-    (*regs)[pos++] = tswapreg(env->msr);
+    (*regs)[pos++] = tswapreg(mb_cpu_read_msr(env));
     (*regs)[pos++] = 0;
     (*regs)[pos++] = tswapreg(env->ear);
     (*regs)[pos++] = 0;
diff --git a/target/microblaze/cpu.c b/target/microblaze/cpu.c
index 0eac068570..1eabf5cc3f 100644
--- a/target/microblaze/cpu.c
+++ b/target/microblaze/cpu.c
@@ -121,9 +121,9 @@ static void mb_cpu_reset(DeviceState *dev)
 
 #if defined(CONFIG_USER_ONLY)
     /* start in user mode with interrupts enabled.  */
-    env->msr = MSR_EE | MSR_IE | MSR_VM | MSR_UM;
+    mb_cpu_write_msr(env, MSR_EE | MSR_IE | MSR_VM | MSR_UM);
 #else
-    env->msr = 0;
+    mb_cpu_write_msr(env, 0);
     mmu_init(&env->mmu);
     env->mmu.c_mmu = 3;
     env->mmu.c_mmu_tlb_access = 3;
diff --git a/target/microblaze/gdbstub.c b/target/microblaze/gdbstub.c
index 9cba9d2215..08d6a0e807 100644
--- a/target/microblaze/gdbstub.c
+++ b/target/microblaze/gdbstub.c
@@ -62,7 +62,7 @@ int mb_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n)
         val = env->pc;
         break;
     case GDB_MSR:
-        val = env->msr;
+        val = mb_cpu_read_msr(env);
         break;
     case GDB_EAR:
         val = env->ear;
@@ -118,7 +118,7 @@ int mb_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
         env->pc = tmp;
         break;
     case GDB_MSR:
-        env->msr = tmp;
+        mb_cpu_write_msr(env, tmp);
         break;
     case GDB_EAR:
         env->ear = tmp;
diff --git a/target/microblaze/helper.c b/target/microblaze/helper.c
index b2373f6a23..9a95456401 100644
--- a/target/microblaze/helper.c
+++ b/target/microblaze/helper.c
@@ -112,12 +112,11 @@ void mb_cpu_do_interrupt(CPUState *cs)
 {
     MicroBlazeCPU *cpu = MICROBLAZE_CPU(cs);
     CPUMBState *env = &cpu->env;
-    uint32_t t;
+    uint32_t t, msr = mb_cpu_read_msr(env);
 
     /* IMM flag cannot propagate across a branch and into the dslot.  */
     assert(!((env->iflags & D_FLAG) && (env->iflags & IMM_FLAG)));
     assert(!(env->iflags & (DRTI_FLAG | DRTE_FLAG | DRTB_FLAG)));
-/*    assert(env->msr & (MSR_EE)); Only for HW exceptions.  */
     env->res_addr = RES_ADDR_NONE;
     switch (cs->exception_index) {
         case EXCP_HW_EXCP:
@@ -136,11 +135,12 @@ void mb_cpu_do_interrupt(CPUState *cs)
             }
 
             /* Disable the MMU.  */
-            t = (env->msr & (MSR_VM | MSR_UM)) << 1;
-            env->msr &= ~(MSR_VMS | MSR_UMS | MSR_VM | MSR_UM);
-            env->msr |= t;
+            t = (msr & (MSR_VM | MSR_UM)) << 1;
+            msr &= ~(MSR_VMS | MSR_UMS | MSR_VM | MSR_UM);
+            msr |= t;
             /* Exception in progress.  */
-            env->msr |= MSR_EIP;
+            msr |= MSR_EIP;
+            mb_cpu_write_msr(env, msr);
 
             qemu_log_mask(CPU_LOG_INT,
                           "hw exception at pc=%x ear=%" PRIx64 " "
@@ -178,11 +178,12 @@ void mb_cpu_do_interrupt(CPUState *cs)
             }
 
             /* Disable the MMU.  */
-            t = (env->msr & (MSR_VM | MSR_UM)) << 1;
-            env->msr &= ~(MSR_VMS | MSR_UMS | MSR_VM | MSR_UM);
-            env->msr |= t;
+            t = (msr & (MSR_VM | MSR_UM)) << 1;
+            msr &= ~(MSR_VMS | MSR_UMS | MSR_VM | MSR_UM);
+            msr |= t;
             /* Exception in progress.  */
-            env->msr |= MSR_EIP;
+            msr |= MSR_EIP;
+            mb_cpu_write_msr(env, msr);
 
             qemu_log_mask(CPU_LOG_INT,
                           "exception at pc=%x ear=%" PRIx64 " iflags=%x\n",
@@ -193,11 +194,11 @@ void mb_cpu_do_interrupt(CPUState *cs)
             break;
 
         case EXCP_IRQ:
-            assert(!(env->msr & (MSR_EIP | MSR_BIP)));
-            assert(env->msr & MSR_IE);
+            assert(!(msr & (MSR_EIP | MSR_BIP)));
+            assert(msr & MSR_IE);
             assert(!(env->iflags & D_FLAG));
 
-            t = (env->msr & (MSR_VM | MSR_UM)) << 1;
+            t = (msr & (MSR_VM | MSR_UM)) << 1;
 
 #if 0
 #include "disas/disas.h"
@@ -212,21 +213,20 @@ void mb_cpu_do_interrupt(CPUState *cs)
                     && (!strcmp("netif_rx", sym)
                         || !strcmp("process_backlog", sym))) {
 
-                    qemu_log(
-                         "interrupt at pc=%x msr=%x %x iflags=%x sym=%s\n",
-                         env->pc, env->msr, t, env->iflags,
-                         sym);
+                    qemu_log("interrupt at pc=%x msr=%x %x iflags=%x sym=%s\n",
+                             env->pc, msr, t, env->iflags, sym);
 
                     log_cpu_state(cs, 0);
                 }
             }
 #endif
             qemu_log_mask(CPU_LOG_INT,
-                         "interrupt at pc=%x msr=%x %x iflags=%x\n",
-                         env->pc, env->msr, t, env->iflags);
+                          "interrupt at pc=%x msr=%x %x iflags=%x\n",
+                          env->pc, msr, t, env->iflags);
 
-            env->msr &= ~(MSR_VMS | MSR_UMS | MSR_VM | MSR_UM | MSR_IE);
-            env->msr |= t;
+            msr &= ~(MSR_VMS | MSR_UMS | MSR_VM | MSR_UM | MSR_IE);
+            msr |= t;
+            mb_cpu_write_msr(env, msr);
 
             env->regs[14] = env->pc;
             env->pc = cpu->cfg.base_vectors + 0x10;
@@ -237,20 +237,22 @@ void mb_cpu_do_interrupt(CPUState *cs)
         case EXCP_HW_BREAK:
             assert(!(env->iflags & IMM_FLAG));
             assert(!(env->iflags & D_FLAG));
-            t = (env->msr & (MSR_VM | MSR_UM)) << 1;
+            t = (msr & (MSR_VM | MSR_UM)) << 1;
             qemu_log_mask(CPU_LOG_INT,
                           "break at pc=%x msr=%x %x iflags=%x\n",
-                          env->pc, env->msr, t, env->iflags);
+                          env->pc, msr, t, env->iflags);
             log_cpu_state_mask(CPU_LOG_INT, cs, 0);
-            env->msr &= ~(MSR_VMS | MSR_UMS | MSR_VM | MSR_UM);
-            env->msr |= t;
-            env->msr |= MSR_BIP;
+            msr &= ~(MSR_VMS | MSR_UMS | MSR_VM | MSR_UM);
+            msr |= t;
+            msr |= MSR_BIP;
             if (cs->exception_index == EXCP_HW_BREAK) {
                 env->regs[16] = env->pc;
-                env->msr |= MSR_BIP;
+                msr |= MSR_BIP;
                 env->pc = cpu->cfg.base_vectors + 0x18;
-            } else
+            } else {
                 env->pc = env->btarget;
+            }
+            mb_cpu_write_msr(env, msr);
             break;
         default:
             cpu_abort(cs, "unhandled exception type=%d\n",
diff --git a/target/microblaze/translate.c b/target/microblaze/translate.c
index e709884f2d..0c9b4ffa5a 100644
--- a/target/microblaze/translate.c
+++ b/target/microblaze/translate.c
@@ -56,6 +56,7 @@
 static TCGv_i32 cpu_R[32];
 static TCGv_i32 cpu_pc;
 static TCGv_i32 cpu_msr;
+static TCGv_i32 cpu_msr_c;
 static TCGv_i32 cpu_imm;
 static TCGv_i32 cpu_btaken;
 static TCGv_i32 cpu_btarget;
@@ -150,30 +151,6 @@ static void gen_goto_tb(DisasContext *dc, int n, target_ulong dest)
     }
 }
 
-static void read_carry(DisasContext *dc, TCGv_i32 d)
-{
-    tcg_gen_shri_i32(d, cpu_msr, 31);
-}
-
-/*
- * write_carry sets the carry bits in MSR based on bit 0 of v.
- * v[31:1] are ignored.
- */
-static void write_carry(DisasContext *dc, TCGv_i32 v)
-{
-    /* Deposit bit 0 into MSR_C and the alias MSR_CC.  */
-    tcg_gen_deposit_i32(cpu_msr, cpu_msr, v, 2, 1);
-    tcg_gen_deposit_i32(cpu_msr, cpu_msr, v, 31, 1);
-}
-
-static void write_carryi(DisasContext *dc, bool carry)
-{
-    TCGv_i32 t0 = tcg_temp_new_i32();
-    tcg_gen_movi_i32(t0, carry);
-    write_carry(dc, t0);
-    tcg_temp_free_i32(t0);
-}
-
 /*
  * Returns true if the insn an illegal operation.
  * If exceptions are enabled, an exception is raised.
@@ -243,11 +220,7 @@ static void dec_add(DisasContext *dc)
 
             if (c) {
                 /* c - Add carry into the result.  */
-                cf = tcg_temp_new_i32();
-
-                read_carry(dc, cf);
-                tcg_gen_add_i32(cpu_R[dc->rd], cpu_R[dc->rd], cf);
-                tcg_temp_free_i32(cf);
+                tcg_gen_add_i32(cpu_R[dc->rd], cpu_R[dc->rd], cpu_msr_c);
             }
         }
         return;
@@ -257,21 +230,15 @@ static void dec_add(DisasContext *dc)
     /* Extract carry.  */
     cf = tcg_temp_new_i32();
     if (c) {
-        read_carry(dc, cf);
+        tcg_gen_mov_i32(cf, cpu_msr_c);
     } else {
         tcg_gen_movi_i32(cf, 0);
     }
 
+    gen_helper_carry(cpu_msr_c, cpu_R[dc->ra], *(dec_alu_op_b(dc)), cf);
     if (dc->rd) {
-        TCGv_i32 ncf = tcg_temp_new_i32();
-        gen_helper_carry(ncf, cpu_R[dc->ra], *(dec_alu_op_b(dc)), cf);
         tcg_gen_add_i32(cpu_R[dc->rd], cpu_R[dc->ra], *(dec_alu_op_b(dc)));
         tcg_gen_add_i32(cpu_R[dc->rd], cpu_R[dc->rd], cf);
-        write_carry(dc, ncf);
-        tcg_temp_free_i32(ncf);
-    } else {
-        gen_helper_carry(cf, cpu_R[dc->ra], *(dec_alu_op_b(dc)), cf);
-        write_carry(dc, cf);
     }
     tcg_temp_free_i32(cf);
 }
@@ -309,11 +276,7 @@ static void dec_sub(DisasContext *dc)
 
             if (c) {
                 /* c - Add carry into the result.  */
-                cf = tcg_temp_new_i32();
-
-                read_carry(dc, cf);
-                tcg_gen_add_i32(cpu_R[dc->rd], cpu_R[dc->rd], cf);
-                tcg_temp_free_i32(cf);
+                tcg_gen_add_i32(cpu_R[dc->rd], cpu_R[dc->rd], cpu_msr_c);
             }
         }
         return;
@@ -324,7 +287,7 @@ static void dec_sub(DisasContext *dc)
     cf = tcg_temp_new_i32();
     na = tcg_temp_new_i32();
     if (c) {
-        read_carry(dc, cf);
+        tcg_gen_mov_i32(cf, cpu_msr_c);
     } else {
         tcg_gen_movi_i32(cf, 1);
     }
@@ -332,16 +295,10 @@ static void dec_sub(DisasContext *dc)
     /* d = b + ~a + c. carry defaults to 1.  */
     tcg_gen_not_i32(na, cpu_R[dc->ra]);
 
+    gen_helper_carry(cpu_msr_c, na, *(dec_alu_op_b(dc)), cf);
     if (dc->rd) {
-        TCGv_i32 ncf = tcg_temp_new_i32();
-        gen_helper_carry(ncf, na, *(dec_alu_op_b(dc)), cf);
         tcg_gen_add_i32(cpu_R[dc->rd], na, *(dec_alu_op_b(dc)));
         tcg_gen_add_i32(cpu_R[dc->rd], cpu_R[dc->rd], cf);
-        write_carry(dc, ncf);
-        tcg_temp_free_i32(ncf);
-    } else {
-        gen_helper_carry(cf, na, *(dec_alu_op_b(dc)), cf);
-        write_carry(dc, cf);
     }
     tcg_temp_free_i32(cf);
     tcg_temp_free_i32(na);
@@ -429,16 +386,26 @@ static void dec_xor(DisasContext *dc)
         tcg_gen_xor_i32(cpu_R[dc->rd], cpu_R[dc->ra], *(dec_alu_op_b(dc)));
 }
 
-static inline void msr_read(DisasContext *dc, TCGv_i32 d)
+static void msr_read(DisasContext *dc, TCGv_i32 d)
 {
-    tcg_gen_mov_i32(d, cpu_msr);
+    TCGv_i32 t;
+
+    /* Replicate the cpu_msr_c boolean into the proper bit and the copy. */
+    t = tcg_temp_new_i32();
+    tcg_gen_muli_i32(t, cpu_msr_c, MSR_C | MSR_CC);
+    tcg_gen_or_i32(d, cpu_msr, t);
+    tcg_temp_free_i32(t);
 }
 
-static inline void msr_write(DisasContext *dc, TCGv_i32 v)
+static void msr_write(DisasContext *dc, TCGv_i32 v)
 {
     dc->cpustate_changed = 1;
-    /* PVR bit is not writable, and is never set. */
-    tcg_gen_andi_i32(cpu_msr, v, ~MSR_PVR);
+
+    /* Install MSR_C.  */
+    tcg_gen_extract_i32(cpu_msr_c, v, 2, 1);
+
+    /* Clear MSR_C and MSR_CC; MSR_PVR is not writable, and is always clear. */
+    tcg_gen_andi_i32(cpu_msr, v, ~(MSR_C | MSR_CC | MSR_PVR));
 }
 
 static void dec_msr(DisasContext *dc)
@@ -778,8 +745,8 @@ static void dec_bit(DisasContext *dc)
             t0 = tcg_temp_new_i32();
 
             LOG_DIS("src r%d r%d\n", dc->rd, dc->ra);
-            tcg_gen_andi_i32(t0, cpu_msr, MSR_CC);
-            write_carry(dc, cpu_R[dc->ra]);
+            tcg_gen_shli_i32(t0, cpu_msr_c, 31);
+            tcg_gen_andi_i32(cpu_msr_c, cpu_R[dc->ra], 1);
             if (dc->rd) {
                 tcg_gen_shri_i32(cpu_R[dc->rd], cpu_R[dc->ra], 1);
                 tcg_gen_or_i32(cpu_R[dc->rd], cpu_R[dc->rd], t0);
@@ -792,8 +759,7 @@ static void dec_bit(DisasContext *dc)
             /* srl.  */
             LOG_DIS("srl r%d r%d\n", dc->rd, dc->ra);
 
-            /* Update carry. Note that write carry only looks at the LSB.  */
-            write_carry(dc, cpu_R[dc->ra]);
+            tcg_gen_andi_i32(cpu_msr_c, cpu_R[dc->ra], 1);
             if (dc->rd) {
                 if (op == 0x41)
                     tcg_gen_shri_i32(cpu_R[dc->rd], cpu_R[dc->ra], 1);
@@ -1042,7 +1008,7 @@ static void dec_load(DisasContext *dc)
 
     if (ex) { /* lwx */
         /* no support for AXI exclusive so always clear C */
-        write_carryi(dc, 0);
+        tcg_gen_movi_i32(cpu_msr_c, 0);
     }
 
     tcg_temp_free(addr);
@@ -1093,7 +1059,7 @@ static void dec_store(DisasContext *dc)
         /* swx does not throw unaligned access errors, so force alignment */
         tcg_gen_andi_tl(addr, addr, ~3);
 
-        write_carryi(dc, 1);
+        tcg_gen_movi_i32(cpu_msr_c, 1);
         swx_skip = gen_new_label();
         tcg_gen_brcond_tl(TCG_COND_NE, cpu_res_addr, addr, swx_skip);
 
@@ -1108,7 +1074,7 @@ static void dec_store(DisasContext *dc)
                                    mop);
 
         tcg_gen_brcond_i32(TCG_COND_NE, cpu_res_val, tval, swx_skip);
-        write_carryi(dc, 0);
+        tcg_gen_movi_i32(cpu_msr_c, 0);
         tcg_temp_free_i32(tval);
     }
 
@@ -1851,6 +1817,7 @@ void mb_tcg_init(void)
 
         SP(pc),
         SP(msr),
+        SP(msr_c),
         SP(imm),
         SP(iflags),
         SP(btaken),
-- 
2.25.1



  parent reply	other threads:[~2020-08-28 14:27 UTC|newest]

Thread overview: 92+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-28 14:18 [PATCH v2 00/76] target/microblaze improvements Richard Henderson
2020-08-28 14:18 ` [PATCH v2 01/76] tests/tcg: Add microblaze to arches filter Richard Henderson
2020-08-31 17:32   ` Philippe Mathieu-Daudé
2020-08-28 14:18 ` [PATCH v2 02/76] tests/tcg: Do not require FE_TOWARDZERO Richard Henderson
2020-08-31 17:31   ` Philippe Mathieu-Daudé
2020-08-28 14:18 ` [PATCH v2 03/76] tests/tcg: Do not require FE_* exception bits Richard Henderson
2020-08-31 17:30   ` Philippe Mathieu-Daudé
2020-08-28 14:18 ` [PATCH v2 04/76] target/microblaze: Tidy gdbstub Richard Henderson
2020-08-28 14:18 ` [PATCH v2 05/76] target/microblaze: Split out PC from env->sregs Richard Henderson
2020-08-28 14:18 ` [PATCH v2 06/76] target/microblaze: Split out MSR " Richard Henderson
2020-08-28 14:18 ` [PATCH v2 07/76] target/microblaze: Split out EAR " Richard Henderson
2020-08-31 20:50   ` Philippe Mathieu-Daudé
2020-08-28 14:18 ` [PATCH v2 08/76] target/microblaze: Split out ESR " Richard Henderson
2020-08-28 14:18 ` [PATCH v2 09/76] target/microblaze: Split out FSR " Richard Henderson
2020-08-31 20:51   ` Philippe Mathieu-Daudé
2020-08-28 14:18 ` [PATCH v2 10/76] target/microblaze: Split out BTR " Richard Henderson
2020-08-31 20:53   ` Philippe Mathieu-Daudé
2020-08-28 14:18 ` [PATCH v2 11/76] target/microblaze: Split out EDR " Richard Henderson
2020-08-28 14:18 ` [PATCH v2 12/76] target/microblaze: Split the cpu_SR array Richard Henderson
2020-08-28 14:18 ` [PATCH v2 13/76] target/microblaze: Fix width of PC and BTARGET Richard Henderson
2020-08-28 14:18 ` [PATCH v2 14/76] target/microblaze: Fix width of MSR Richard Henderson
2020-08-28 14:18 ` [PATCH v2 15/76] target/microblaze: Fix width of ESR Richard Henderson
2020-08-28 14:18 ` [PATCH v2 16/76] target/microblaze: Fix width of FSR Richard Henderson
2020-08-28 14:18 ` [PATCH v2 17/76] target/microblaze: Fix width of BTR Richard Henderson
2020-08-28 14:18 ` [PATCH v2 18/76] target/microblaze: Fix width of EDR Richard Henderson
2020-08-28 14:18 ` [PATCH v2 19/76] target/microblaze: Remove cpu_ear Richard Henderson
2020-08-28 14:18 ` [PATCH v2 20/76] target/microblaze: Tidy raising of exceptions Richard Henderson
2020-08-28 14:18 ` [PATCH v2 21/76] target/microblaze: Mark raise_exception as noreturn Richard Henderson
2020-08-28 14:18 ` [PATCH v2 22/76] target/microblaze: Remove helper_debug and env->debug Richard Henderson
2020-08-28 14:18 ` [PATCH v2 23/76] target/microblaze: Rename env_* tcg variables to cpu_* Richard Henderson
2020-08-31 21:11   ` Philippe Mathieu-Daudé
2020-08-28 14:18 ` [PATCH v2 24/76] target/microblaze: Tidy mb_tcg_init Richard Henderson
2020-08-28 14:18 ` Richard Henderson [this message]
2020-08-28 14:18 ` [PATCH v2 26/76] target/microblaze: Use DISAS_NORETURN Richard Henderson
2020-08-28 14:18 ` [PATCH v2 27/76] target/microblaze: Check singlestep_enabled in gen_goto_tb Richard Henderson
2020-08-31 13:54   ` Edgar E. Iglesias
2020-08-31 14:55     ` Richard Henderson
2020-08-28 14:18 ` [PATCH v2 28/76] target/microblaze: Convert to DisasContextBase Richard Henderson
2020-08-28 14:18 ` [PATCH v2 29/76] target/microblaze: Convert to translator_loop Richard Henderson
2020-08-28 14:18 ` [PATCH v2 30/76] target/microblaze: Remove SIM_COMPAT Richard Henderson
2020-08-28 14:18 ` [PATCH v2 31/76] target/microblaze: Remove DISAS_GNU Richard Henderson
2020-08-28 14:18 ` [PATCH v2 32/76] target/microblaze: Remove empty D macros Richard Henderson
2020-08-31 21:14   ` Philippe Mathieu-Daudé
2020-08-28 14:18 ` [PATCH v2 33/76] target/microblaze: Remove LOG_DIS Richard Henderson
2020-08-28 14:18 ` [PATCH v2 34/76] target/microblaze: Ensure imm constant is always available Richard Henderson
2020-08-28 14:18 ` [PATCH v2 35/76] target/microblaze: Add decodetree infrastructure Richard Henderson
2020-08-28 14:18 ` [PATCH v2 36/76] target/microblaze: Convert dec_add to decodetree Richard Henderson
2020-08-28 14:18 ` [PATCH v2 37/76] target/microblaze: Convert dec_sub " Richard Henderson
2020-08-28 14:18 ` [PATCH v2 38/76] target/microblaze: Implement cmp and cmpu inline Richard Henderson
2020-08-28 14:18 ` [PATCH v2 39/76] target/microblaze: Convert dec_pattern to decodetree Richard Henderson
2020-08-28 14:18 ` [PATCH v2 40/76] target/microblaze: Convert dec_and, dec_or, dec_xor " Richard Henderson
2020-08-28 14:18 ` [PATCH v2 41/76] target/microblaze: Convert dec_mul " Richard Henderson
2020-08-28 14:18 ` [PATCH v2 42/76] target/microblaze: Convert dec_div " Richard Henderson
2020-08-28 14:18 ` [PATCH v2 43/76] target/microblaze: Unwind properly when raising divide-by-zero Richard Henderson
2020-08-28 14:18 ` [PATCH v2 44/76] target/microblaze: Convert dec_bit to decodetree Richard Henderson
2020-08-28 14:18 ` [PATCH v2 45/76] target/microblaze: Convert dec_barrel " Richard Henderson
2020-08-28 14:18 ` [PATCH v2 46/76] target/microblaze: Convert dec_imm " Richard Henderson
2020-08-28 14:19 ` [PATCH v2 47/76] target/microblaze: Convert dec_fpu " Richard Henderson
2020-08-28 14:19 ` [PATCH v2 48/76] target/microblaze: Fix cpu unwind for fpu exceptions Richard Henderson
2020-08-28 14:19 ` [PATCH v2 49/76] target/microblaze: Mark fpu helpers TCG_CALL_NO_WG Richard Henderson
2020-08-28 14:19 ` [PATCH v2 50/76] target/microblaze: Replace MSR_EE_FLAG with MSR_EE Richard Henderson
2020-08-31 21:09   ` Philippe Mathieu-Daudé
2020-08-28 14:19 ` [PATCH v2 51/76] target/microblaze: Cache mem_index in DisasContext Richard Henderson
2020-08-28 14:19 ` [PATCH v2 52/76] target/microblaze: Fix cpu unwind for stackprot Richard Henderson
2020-08-28 14:19 ` [PATCH v2 53/76] target/microblaze: Convert dec_load and dec_store to decodetree Richard Henderson
2020-08-28 14:19 ` [PATCH v2 54/76] target/microblaze: Assert no overlap in flags making up tb_flags Richard Henderson
2020-08-28 14:19 ` [PATCH v2 55/76] target/microblaze: Move bimm to BIMM_FLAG Richard Henderson
2020-08-28 14:19 ` [PATCH v2 56/76] target/microblaze: Fix no-op mb_cpu_transaction_failed Richard Henderson
2020-08-28 14:19 ` [PATCH v2 57/76] target/microblaze: Store "current" iflags in insn_start Richard Henderson
2020-08-28 14:19 ` [PATCH v2 58/76] tcg: Add tcg_get_insn_start_param Richard Henderson
2020-08-28 14:19 ` [PATCH v2 59/76] target/microblaze: Use cc->do_unaligned_access Richard Henderson
2020-08-28 14:19 ` [PATCH v2 60/76] target/microblaze: Replace clear_imm with tb_flags_to_set Richard Henderson
2020-08-28 14:19 ` [PATCH v2 61/76] target/microblaze: Replace delayed_branch " Richard Henderson
2020-08-28 14:19 ` [PATCH v2 62/76] target/microblaze: Tidy mb_cpu_dump_state Richard Henderson
2020-08-31 21:08   ` Philippe Mathieu-Daudé
2020-08-31 22:16     ` Richard Henderson
2020-08-31 22:25       ` Philippe Mathieu-Daudé
2020-08-28 14:19 ` [PATCH v2 63/76] target/microblaze: Convert brk and brki to decodetree Richard Henderson
2020-08-28 14:19 ` [PATCH v2 64/76] target/microblaze: Convert mbar " Richard Henderson
2020-08-28 14:19 ` [PATCH v2 65/76] target/microblaze: Reorganize branching Richard Henderson
2020-08-28 14:19 ` [PATCH v2 66/76] target/microblaze: Convert dec_br to decodetree Richard Henderson
2020-08-28 14:19 ` [PATCH v2 67/76] target/microblaze: Convert dec_bcc " Richard Henderson
2020-08-28 14:19 ` [PATCH v2 68/76] target/microblaze: Convert dec_rts " Richard Henderson
2020-08-28 14:19 ` [PATCH v2 69/76] target/microblaze: Tidy do_rti, do_rtb, do_rte Richard Henderson
2020-08-28 14:19 ` [PATCH v2 70/76] target/microblaze: Convert msrclr, msrset to decodetree Richard Henderson
2020-08-28 14:19 ` [PATCH v2 71/76] target/microblaze: Convert dec_msr " Richard Henderson
2020-08-28 14:19 ` [PATCH v2 72/76] target/microblaze: Convert dec_stream " Richard Henderson
2020-08-28 14:19 ` [PATCH v2 73/76] target/microblaze: Remove last of old decoder Richard Henderson
2020-08-28 14:19 ` [PATCH v2 74/76] target/microblaze: Remove cpu_R[0] Richard Henderson
2020-08-28 14:19 ` [PATCH v2 75/76] target/microblaze: Add flags markup to some helpers Richard Henderson
2020-08-28 14:19 ` [PATCH v2 76/76] target/microblaze: Reduce linux-user address space to 32-bit Richard Henderson
2020-08-31 14:14 ` [PATCH v2 00/76] target/microblaze improvements Edgar E. Iglesias

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=20200828141929.77854-26-richard.henderson@linaro.org \
    --to=richard.henderson@linaro.org \
    --cc=edgar.iglesias@xilinx.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.