Message ID | 1355815285-18550-1-git-send-email-jcmvbkbc@gmail.com |
---|---|
State | New |
Headers | show |
On Tue, Dec 18, 2012 at 7:21 AM, Max Filippov <jcmvbkbc@gmail.com> wrote: > Zero out tcg_ctx.gen_opc_instr_start for instructions representing the > last guest opcode in the TB. > > Cc: qemu-stable@nongnu.org > Signed-off-by: Max Filippov <jcmvbkbc@gmail.com> > --- > target-xtensa/translate.c | 8 +++++++- > 1 files changed, 7 insertions(+), 1 deletions(-) > > diff --git a/target-xtensa/translate.c b/target-xtensa/translate.c > index 5d8762c..d109a08 100644 > --- a/target-xtensa/translate.c > +++ b/target-xtensa/translate.c > @@ -3005,7 +3005,13 @@ static void gen_intermediate_code_internal( > gen_icount_end(tb, insn_count); > *tcg_ctx.gen_opc_ptr = INDEX_op_end; > > - if (!search_pc) { > + if (search_pc) { > + j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; > + lj++; > + while (lj <= j) { > + tcg_ctx.gen_opc_instr_start[lj++] = 0; > + } Instead of the loop, how about something like memset(&tcg_ctx.gen_opc_instr_start[lj], 0, j - lj)? > + } else { > tb->size = dc.pc - pc_start; > tb->icount = insn_count; > } > -- > 1.7.7.6 >
On Wed, Dec 19, 2012 at 11:45 PM, Blue Swirl <blauwirbel@gmail.com> wrote: > On Tue, Dec 18, 2012 at 7:21 AM, Max Filippov <jcmvbkbc@gmail.com> wrote: >> Zero out tcg_ctx.gen_opc_instr_start for instructions representing the >> last guest opcode in the TB. >> >> Cc: qemu-stable@nongnu.org >> Signed-off-by: Max Filippov <jcmvbkbc@gmail.com> >> --- >> target-xtensa/translate.c | 8 +++++++- >> 1 files changed, 7 insertions(+), 1 deletions(-) >> >> diff --git a/target-xtensa/translate.c b/target-xtensa/translate.c >> index 5d8762c..d109a08 100644 >> --- a/target-xtensa/translate.c >> +++ b/target-xtensa/translate.c >> @@ -3005,7 +3005,13 @@ static void gen_intermediate_code_internal( >> gen_icount_end(tb, insn_count); >> *tcg_ctx.gen_opc_ptr = INDEX_op_end; >> >> - if (!search_pc) { >> + if (search_pc) { >> + j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; >> + lj++; >> + while (lj <= j) { >> + tcg_ctx.gen_opc_instr_start[lj++] = 0; >> + } > > Instead of the loop, how about something like > memset(&tcg_ctx.gen_opc_instr_start[lj], 0, j - lj)? Off by one, j - lj + 1. Wanted to keep it looking as other instances, but can do it this way too. >> + } else { >> tb->size = dc.pc - pc_start; >> tb->icount = insn_count; >> } >> -- >> 1.7.7.6 >>
diff --git a/target-xtensa/translate.c b/target-xtensa/translate.c index 5d8762c..d109a08 100644 --- a/target-xtensa/translate.c +++ b/target-xtensa/translate.c @@ -3005,7 +3005,13 @@ static void gen_intermediate_code_internal( gen_icount_end(tb, insn_count); *tcg_ctx.gen_opc_ptr = INDEX_op_end; - if (!search_pc) { + if (search_pc) { + j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf; + lj++; + while (lj <= j) { + tcg_ctx.gen_opc_instr_start[lj++] = 0; + } + } else { tb->size = dc.pc - pc_start; tb->icount = insn_count; }
Zero out tcg_ctx.gen_opc_instr_start for instructions representing the last guest opcode in the TB. Cc: qemu-stable@nongnu.org Signed-off-by: Max Filippov <jcmvbkbc@gmail.com> --- target-xtensa/translate.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-)