* [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
* 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
* [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