qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/2] target-xtensa: fix extui and gen_check_loop_end
@ 2012-09-20 22:59 Max Filippov
  2012-09-20 22:59 ` [Qemu-devel] [PATCH 1/2] target-xtensa: fix extui shift amount Max Filippov
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Max Filippov @ 2012-09-20 22:59 UTC (permalink / raw)
  To: qemu-devel; +Cc: Max Filippov, Peter Maydell, Aurelien Jarno, Richard Henderson

Max Filippov (2):
  target-xtensa: fix extui shift amount
  target-xtensa: don't emit extra tcg_gen_goto_tb

 target-xtensa/translate.c |   28 ++++++++++++++++++++++++----
 1 files changed, 24 insertions(+), 4 deletions(-)

-- 
1.7.7.6

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

* [Qemu-devel] [PATCH 1/2] target-xtensa: fix extui shift amount
  2012-09-20 22:59 [Qemu-devel] [PATCH 0/2] target-xtensa: fix extui and gen_check_loop_end Max Filippov
@ 2012-09-20 22:59 ` Max Filippov
  2012-09-21  0:02   ` Richard Henderson
  2012-09-20 22:59 ` [Qemu-devel] [PATCH 2/2] target-xtensa: don't emit extra tcg_gen_goto_tb Max Filippov
  2012-09-20 23:09 ` [Qemu-devel] [PATCH 0/2] target-xtensa: fix extui and gen_check_loop_end malc
  2 siblings, 1 reply; 5+ messages in thread
From: Max Filippov @ 2012-09-20 22:59 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, qemu-stable, Max Filippov, Aurelien Jarno,
	Richard Henderson

extui opcode only uses lowermost op1 bit for sa4.

Reported-by: malc <av1474@comtv.ru>
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Cc: qemu-stable <qemu-stable@nongnu.org>
---
 target-xtensa/translate.c |   24 +++++++++++++++++++++---
 1 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/target-xtensa/translate.c b/target-xtensa/translate.c
index 1900bd5..7a1c528 100644
--- a/target-xtensa/translate.c
+++ b/target-xtensa/translate.c
@@ -1778,12 +1778,30 @@ static void disas_xtensa_insn(DisasContext *dc)
         case 5:
             gen_window_check2(dc, RRR_R, RRR_T);
             {
-                int shiftimm = RRR_S | (OP1 << 4);
+                int shiftimm = RRR_S | ((OP1 & 1) << 4);
                 int maskimm = (1 << (OP2 + 1)) - 1;
 
                 TCGv_i32 tmp = tcg_temp_new_i32();
-                tcg_gen_shri_i32(tmp, cpu_R[RRR_T], shiftimm);
-                tcg_gen_andi_i32(cpu_R[RRR_R], tmp, maskimm);
+
+                if (shiftimm) {
+                    tcg_gen_shri_i32(tmp, cpu_R[RRR_T], shiftimm);
+                } else {
+                    tcg_gen_mov_i32(tmp, cpu_R[RRR_T]);
+                }
+
+                switch (maskimm) {
+                case 0xff:
+                    tcg_gen_ext8u_i32(cpu_R[RRR_R], tmp);
+                    break;
+
+                case 0xffff:
+                    tcg_gen_ext16u_i32(cpu_R[RRR_R], tmp);
+                    break;
+
+                default:
+                    tcg_gen_andi_i32(cpu_R[RRR_R], tmp, maskimm);
+                    break;
+                }
                 tcg_temp_free(tmp);
             }
             break;
-- 
1.7.7.6

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

* [Qemu-devel] [PATCH 2/2] target-xtensa: don't emit extra tcg_gen_goto_tb
  2012-09-20 22:59 [Qemu-devel] [PATCH 0/2] target-xtensa: fix extui and gen_check_loop_end Max Filippov
  2012-09-20 22:59 ` [Qemu-devel] [PATCH 1/2] target-xtensa: fix extui shift amount Max Filippov
@ 2012-09-20 22:59 ` Max Filippov
  2012-09-20 23:09 ` [Qemu-devel] [PATCH 0/2] target-xtensa: fix extui and gen_check_loop_end malc
  2 siblings, 0 replies; 5+ messages in thread
From: Max Filippov @ 2012-09-20 22:59 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, qemu-stable, Max Filippov, Aurelien Jarno,
	Richard Henderson

Unconditional gen_check_loop_end at the end of disas_xtensa_insn
can emit tcg_gen_goto_tb with slot id already used in the TB (e.g. when
TB ends at LEND with a branch).

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Cc: qemu-stable <qemu-stable@nongnu.org>
---
 target-xtensa/translate.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/target-xtensa/translate.c b/target-xtensa/translate.c
index 7a1c528..b6643eb 100644
--- a/target-xtensa/translate.c
+++ b/target-xtensa/translate.c
@@ -2520,7 +2520,9 @@ static void disas_xtensa_insn(DisasContext *dc)
         break;
     }
 
-    gen_check_loop_end(dc, 0);
+    if (dc->is_jmp == DISAS_NEXT) {
+        gen_check_loop_end(dc, 0);
+    }
     dc->pc = dc->next_pc;
 
     return;
-- 
1.7.7.6

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

* Re: [Qemu-devel] [PATCH 0/2] target-xtensa: fix extui and gen_check_loop_end
  2012-09-20 22:59 [Qemu-devel] [PATCH 0/2] target-xtensa: fix extui and gen_check_loop_end Max Filippov
  2012-09-20 22:59 ` [Qemu-devel] [PATCH 1/2] target-xtensa: fix extui shift amount Max Filippov
  2012-09-20 22:59 ` [Qemu-devel] [PATCH 2/2] target-xtensa: don't emit extra tcg_gen_goto_tb Max Filippov
@ 2012-09-20 23:09 ` malc
  2 siblings, 0 replies; 5+ messages in thread
From: malc @ 2012-09-20 23:09 UTC (permalink / raw)
  To: Max Filippov; +Cc: Peter Maydell, qemu-devel, Aurelien Jarno, Richard Henderson

On Fri, 21 Sep 2012, Max Filippov wrote:

> Max Filippov (2):
>   target-xtensa: fix extui shift amount
>   target-xtensa: don't emit extra tcg_gen_goto_tb
> 
>  target-xtensa/translate.c |   28 ++++++++++++++++++++++++----
>  1 files changed, 24 insertions(+), 4 deletions(-)
> 

Applied, thanks.

-- 
mailto:av1474@comtv.ru

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

* Re: [Qemu-devel] [PATCH 1/2] target-xtensa: fix extui shift amount
  2012-09-20 22:59 ` [Qemu-devel] [PATCH 1/2] target-xtensa: fix extui shift amount Max Filippov
@ 2012-09-21  0:02   ` Richard Henderson
  0 siblings, 0 replies; 5+ messages in thread
From: Richard Henderson @ 2012-09-21  0:02 UTC (permalink / raw)
  To: Max Filippov; +Cc: Peter Maydell, qemu-devel, Aurelien Jarno, qemu-stable

On 09/20/2012 03:59 PM, Max Filippov wrote:
> +                if (shiftimm) {
> +                    tcg_gen_shri_i32(tmp, cpu_R[RRR_T], shiftimm);
> +                } else {
> +                    tcg_gen_mov_i32(tmp, cpu_R[RRR_T]);
> +                }

tcg_gen_shri_i32 will perform this conditional already.

> +                switch (maskimm) {
> +                case 0xff:
> +                    tcg_gen_ext8u_i32(cpu_R[RRR_R], tmp);
> +                    break;
> +
> +                case 0xffff:
> +                    tcg_gen_ext16u_i32(cpu_R[RRR_R], tmp);
> +                    break;

And while this optimization happens eventually, we should
change tcg-op.h to make sure it happens in tcg_gen_andi.


r~

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

end of thread, other threads:[~2012-09-21  0:02 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-09-20 22:59 [Qemu-devel] [PATCH 0/2] target-xtensa: fix extui and gen_check_loop_end Max Filippov
2012-09-20 22:59 ` [Qemu-devel] [PATCH 1/2] target-xtensa: fix extui shift amount Max Filippov
2012-09-21  0:02   ` Richard Henderson
2012-09-20 22:59 ` [Qemu-devel] [PATCH 2/2] target-xtensa: don't emit extra tcg_gen_goto_tb Max Filippov
2012-09-20 23:09 ` [Qemu-devel] [PATCH 0/2] target-xtensa: fix extui and gen_check_loop_end malc

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).