qemu-devel.nongnu.org archive mirror
 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 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).