All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/5] TriCore bugfixes
@ 2015-05-05 17:46 Bastian Koppelmann
  2015-05-05 17:46 ` [Qemu-devel] [PATCH 1/5] target-tricore: Fix LOOP using wrong register for compare Bastian Koppelmann
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Bastian Koppelmann @ 2015-05-05 17:46 UTC (permalink / raw)
  To: qemu-devel

Hi,

here is a round of bugfixes for the TriCore, which are mostly one liner.

Cheers,
Bastian

Bastian Koppelmann (5):
  target-tricore: Fix LOOP using wrong register for compare
  target-tricore: fix SLR_LD_W and SLR_LD_W_POSTINC insn being a 2 byte
    memory access insted of 4
  target-tricore: fix BO_OFF10_SEXT calculating the wrong offset
  target-tricore: fix rslcx restoring the upper context instead of the
    lower
  target-tricore: fix rfe not restoring the PC

 target-tricore/op_helper.c       | 3 ++-
 target-tricore/translate.c       | 6 +++---
 target-tricore/tricore-opcodes.h | 2 +-
 3 files changed, 6 insertions(+), 5 deletions(-)

-- 
2.3.7

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH 1/5] target-tricore: Fix LOOP using wrong register for compare
  2015-05-05 17:46 [Qemu-devel] [PATCH 0/5] TriCore bugfixes Bastian Koppelmann
@ 2015-05-05 17:46 ` Bastian Koppelmann
  2015-05-05 17:47 ` [Qemu-devel] [PATCH 2/5] target-tricore: fix SLR_LD_W and SLR_LD_W_POSTINC insn being a 2 byte memory access insted of 4 Bastian Koppelmann
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Bastian Koppelmann @ 2015-05-05 17:46 UTC (permalink / raw)
  To: qemu-devel

Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de>
---
 target-tricore/translate.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/target-tricore/translate.c b/target-tricore/translate.c
index 54a48cd..d2cd640 100644
--- a/target-tricore/translate.c
+++ b/target-tricore/translate.c
@@ -3440,7 +3440,7 @@ static void gen_compute_branch(DisasContext *ctx, uint32_t opc, int r1,
         break;
     case OPCM_32_BRR_LOOP:
         if (MASK_OP_BRR_OP2(ctx->opcode) == OPC2_32_BRR_LOOP) {
-            gen_loop(ctx, r1, offset * 2);
+            gen_loop(ctx, r2, offset * 2);
         } else {
             /* OPC2_32_BRR_LOOPU */
             gen_goto_tb(ctx, 0, ctx->pc + offset * 2);
-- 
2.3.7

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH 2/5] target-tricore: fix SLR_LD_W and SLR_LD_W_POSTINC insn being a 2 byte memory access insted of 4
  2015-05-05 17:46 [Qemu-devel] [PATCH 0/5] TriCore bugfixes Bastian Koppelmann
  2015-05-05 17:46 ` [Qemu-devel] [PATCH 1/5] target-tricore: Fix LOOP using wrong register for compare Bastian Koppelmann
@ 2015-05-05 17:47 ` Bastian Koppelmann
  2015-05-05 17:47 ` [Qemu-devel] [PATCH 3/5] target-tricore: fix BO_OFF10_SEXT calculating the wrong offset Bastian Koppelmann
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Bastian Koppelmann @ 2015-05-05 17:47 UTC (permalink / raw)
  To: qemu-devel

Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de>
---
 target-tricore/translate.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/target-tricore/translate.c b/target-tricore/translate.c
index d2cd640..663b2a0 100644
--- a/target-tricore/translate.c
+++ b/target-tricore/translate.c
@@ -3745,10 +3745,10 @@ static void decode_slr_opc(DisasContext *ctx, int op1)
         tcg_gen_addi_tl(cpu_gpr_a[r2], cpu_gpr_a[r2], 2);
         break;
     case OPC1_16_SLR_LD_W:
-        tcg_gen_qemu_ld_tl(cpu_gpr_d[r1], cpu_gpr_a[r2], ctx->mem_idx, MO_LESW);
+        tcg_gen_qemu_ld_tl(cpu_gpr_d[r1], cpu_gpr_a[r2], ctx->mem_idx, MO_LESL);
         break;
     case OPC1_16_SLR_LD_W_POSTINC:
-        tcg_gen_qemu_ld_tl(cpu_gpr_d[r1], cpu_gpr_a[r2], ctx->mem_idx, MO_LESW);
+        tcg_gen_qemu_ld_tl(cpu_gpr_d[r1], cpu_gpr_a[r2], ctx->mem_idx, MO_LESL);
         tcg_gen_addi_tl(cpu_gpr_a[r2], cpu_gpr_a[r2], 4);
         break;
     }
-- 
2.3.7

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH 3/5] target-tricore: fix BO_OFF10_SEXT calculating the wrong offset
  2015-05-05 17:46 [Qemu-devel] [PATCH 0/5] TriCore bugfixes Bastian Koppelmann
  2015-05-05 17:46 ` [Qemu-devel] [PATCH 1/5] target-tricore: Fix LOOP using wrong register for compare Bastian Koppelmann
  2015-05-05 17:47 ` [Qemu-devel] [PATCH 2/5] target-tricore: fix SLR_LD_W and SLR_LD_W_POSTINC insn being a 2 byte memory access insted of 4 Bastian Koppelmann
@ 2015-05-05 17:47 ` Bastian Koppelmann
  2015-05-05 17:47 ` [Qemu-devel] [PATCH 4/5] target-tricore: fix rslcx restoring the upper context instead of the lower Bastian Koppelmann
  2015-05-05 17:47 ` [Qemu-devel] [PATCH 5/5] target-tricore: fix rfe not restoring the PC Bastian Koppelmann
  4 siblings, 0 replies; 6+ messages in thread
From: Bastian Koppelmann @ 2015-05-05 17:47 UTC (permalink / raw)
  To: qemu-devel

The lower part of the combined offset was sign extended and could lead to
wrong results.

Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de>
---
 target-tricore/tricore-opcodes.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/target-tricore/tricore-opcodes.h b/target-tricore/tricore-opcodes.h
index d3a9bc1..2291f75 100644
--- a/target-tricore/tricore-opcodes.h
+++ b/target-tricore/tricore-opcodes.h
@@ -107,7 +107,7 @@
 /* BO Format */
 #define MASK_OP_BO_OFF10(op)   (MASK_BITS_SHIFT(op, 16, 21) + \
                                (MASK_BITS_SHIFT(op, 28, 31) << 6))
-#define MASK_OP_BO_OFF10_SEXT(op)   (MASK_BITS_SHIFT_SEXT(op, 16, 21) + \
+#define MASK_OP_BO_OFF10_SEXT(op)   (MASK_BITS_SHIFT(op, 16, 21) + \
                                     (MASK_BITS_SHIFT_SEXT(op, 28, 31) << 6))
 #define MASK_OP_BO_OP2(op)     MASK_BITS_SHIFT(op, 22, 27)
 #define MASK_OP_BO_S2(op)      MASK_BITS_SHIFT(op, 12, 15)
-- 
2.3.7

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH 4/5] target-tricore: fix rslcx restoring the upper context instead of the lower
  2015-05-05 17:46 [Qemu-devel] [PATCH 0/5] TriCore bugfixes Bastian Koppelmann
                   ` (2 preceding siblings ...)
  2015-05-05 17:47 ` [Qemu-devel] [PATCH 3/5] target-tricore: fix BO_OFF10_SEXT calculating the wrong offset Bastian Koppelmann
@ 2015-05-05 17:47 ` Bastian Koppelmann
  2015-05-05 17:47 ` [Qemu-devel] [PATCH 5/5] target-tricore: fix rfe not restoring the PC Bastian Koppelmann
  4 siblings, 0 replies; 6+ messages in thread
From: Bastian Koppelmann @ 2015-05-05 17:47 UTC (permalink / raw)
  To: qemu-devel

Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de>
---
 target-tricore/op_helper.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/target-tricore/op_helper.c b/target-tricore/op_helper.c
index 9907e07..011f09f 100644
--- a/target-tricore/op_helper.c
+++ b/target-tricore/op_helper.c
@@ -2581,7 +2581,7 @@ void helper_rslcx(CPUTriCoreState *env)
          ((env->PCXI & MASK_PCXI_PCXO) << 6);
     /* {new_PCXI, A[11], A[10], A[11], D[8], D[9], D[10], D[11], A[12],
         A[13], A[14], A[15], D[12], D[13], D[14], D[15]} = M(EA, 16 * word); */
-    restore_context_upper(env, ea, &new_PCXI, &env->gpr_a[11]);
+    restore_context_lower(env, ea, &new_PCXI, &env->gpr_a[11]);
     /* M(EA, word) = FCX; */
     cpu_stl_data(env, ea, env->FCX);
     /* M(EA, word) = FCX; */
-- 
2.3.7

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH 5/5] target-tricore: fix rfe not restoring the PC
  2015-05-05 17:46 [Qemu-devel] [PATCH 0/5] TriCore bugfixes Bastian Koppelmann
                   ` (3 preceding siblings ...)
  2015-05-05 17:47 ` [Qemu-devel] [PATCH 4/5] target-tricore: fix rslcx restoring the upper context instead of the lower Bastian Koppelmann
@ 2015-05-05 17:47 ` Bastian Koppelmann
  4 siblings, 0 replies; 6+ messages in thread
From: Bastian Koppelmann @ 2015-05-05 17:47 UTC (permalink / raw)
  To: qemu-devel

Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de>
---
 target-tricore/op_helper.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/target-tricore/op_helper.c b/target-tricore/op_helper.c
index 011f09f..1c23aeb 100644
--- a/target-tricore/op_helper.c
+++ b/target-tricore/op_helper.c
@@ -2458,6 +2458,7 @@ void helper_rfe(CPUTriCoreState *env)
     if (!cdc_zero(&(env->PSW)) && (env->PSW & MASK_PSW_CDE)) {
         /* raise MNG trap */
     }
+    env->PC = env->gpr_a[11] & ~0x1;
     /* ICR.IE = PCXI.PIE; */
     env->ICR = (env->ICR & ~MASK_ICR_IE) + ((env->PCXI & MASK_PCXI_PIE) >> 15);
     /* ICR.CCPN = PCXI.PCPN; */
-- 
2.3.7

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-05-05 17:47 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-05-05 17:46 [Qemu-devel] [PATCH 0/5] TriCore bugfixes Bastian Koppelmann
2015-05-05 17:46 ` [Qemu-devel] [PATCH 1/5] target-tricore: Fix LOOP using wrong register for compare Bastian Koppelmann
2015-05-05 17:47 ` [Qemu-devel] [PATCH 2/5] target-tricore: fix SLR_LD_W and SLR_LD_W_POSTINC insn being a 2 byte memory access insted of 4 Bastian Koppelmann
2015-05-05 17:47 ` [Qemu-devel] [PATCH 3/5] target-tricore: fix BO_OFF10_SEXT calculating the wrong offset Bastian Koppelmann
2015-05-05 17:47 ` [Qemu-devel] [PATCH 4/5] target-tricore: fix rslcx restoring the upper context instead of the lower Bastian Koppelmann
2015-05-05 17:47 ` [Qemu-devel] [PATCH 5/5] target-tricore: fix rfe not restoring the PC Bastian Koppelmann

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.