[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] target/i386: fix translation for icount mode
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH] target/i386: fix translation for icount mode |
Date: |
Thu, 20 Sep 2018 16:03:26 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 |
On 20/09/2018 09:17, Pavel Dovgalyuk wrote:
> This patch fixes the checking of boundary crossing instructions.
> In icount mode only first instruction of the block may cross
> the page boundary to keep the translation deterministic.
> These conditions already existed, but compared the wrong variable.
>
> Signed-off-by: Pavel Dovgalyuk <address@hidden>
> ---
> target/i386/translate.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/target/i386/translate.c b/target/i386/translate.c
> index 1f9d1d9..c946bc4 100644
> --- a/target/i386/translate.c
> +++ b/target/i386/translate.c
> @@ -8510,10 +8510,10 @@ static void i386_tr_translate_insn(DisasContextBase
> *dcbase, CPUState *cpu)
> chance to happen */
> dc->base.is_jmp = DISAS_TOO_MANY;
> } else if ((tb_cflags(dc->base.tb) & CF_USE_ICOUNT)
> - && ((dc->base.pc_next & TARGET_PAGE_MASK)
> - != ((dc->base.pc_next + TARGET_MAX_INSN_SIZE - 1)
> + && ((pc_next & TARGET_PAGE_MASK)
> + != ((pc_next + TARGET_MAX_INSN_SIZE - 1)
> & TARGET_PAGE_MASK)
> - || (dc->base.pc_next & ~TARGET_PAGE_MASK) == 0)) {
> + || (pc_next & ~TARGET_PAGE_MASK) == 0)) {
> /* Do not cross the boundary of the pages in icount mode,
> it can cause an exception. Do it only when boundary is
> crossed by the first instruction in the block.
>
Queued, but perhaps this check should be applied to the generic code?...
Paolo