Message ID | CAMo8Bf+eOWuyPfrN6W4aWr9FNpoBU+M7FC1AoOD49_O2G1h1Gw@mail.gmail.com |
---|---|
State | New |
Headers | show |
On 09/19/2012 05:29 PM, Max Filippov wrote:
> Not all tcg backends can handle that.
*No* tcg backends can handle that.
If we fix the bug wherein i386 clobbers the goto_tb target
during re-translation you'll see the crash there too.
And we were just talking about enhancing --enable-debug-tcg
to detect this case...
r~
On Thu, Sep 20, 2012 at 6:03 PM, Richard Henderson <rth@twiddle.net> wrote: > On 09/19/2012 05:29 PM, Max Filippov wrote: >> Not all tcg backends can handle that. > > *No* tcg backends can handle that. > > If we fix the bug wherein i386 clobbers the goto_tb target > during re-translation you'll see the crash there too. Ok, I will document it in the places that I know. > And we were just talking about enhancing --enable-debug-tcg > to detect this case... I can try to do it too as my homework (:
On Thu, 20 Sep 2012, Max Filippov wrote: > On Wed, Sep 19, 2012 at 11:53 PM, Richard Henderson <rth@twiddle.net> wrote: > > On 09/19/2012 11:30 AM, Peter Maydell wrote: > >> ...but on the other hand that ought to work for PPC too, so > >> presumably my analysis is wrong somewhere. > > > > It isn't. It's a target-xtensa bug. > > [..snip..] > > This code is generated when TB ends on LEND > (zero-overhead loop ending) with branching instruction. > So, in addition to 3 way branch there's extra looping code > generated by unconditional gen_check_loop_end(dc, 0); > at the end of disas_xtensa_insn. I was pretty sure that this > dead code would make no harm. --enable-debug-tcg says > nothing on x86_64 host. The following should fix that: It does, once the commit message is fixed i can apply it. > > -- >8 -- > From: Max Filippov <jcmvbkbc@gmail.com> > Date: Thu, 20 Sep 2012 04:07:20 +0400 > Subject: [PATCH] target-xtensa: don't emit extra gen_check_loop_end > > 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). Not all tcg backends can handle that. > > Signed-off-by: Max Filippov <jcmvbkbc@gmail.com> > --- > 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 63b37b3..57a2b6f 100644 > --- a/target-xtensa/translate.c > +++ b/target-xtensa/translate.c > @@ -2502,7 +2502,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; >
diff --git a/target-xtensa/translate.c b/target-xtensa/translate.c index 63b37b3..57a2b6f 100644 --- a/target-xtensa/translate.c +++ b/target-xtensa/translate.c @@ -2502,7 +2502,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;