qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH V4 03/18] target-i386: support a20 mask for NEC


From: Jamie Lokier
Subject: Re: [Qemu-devel] [PATCH V4 03/18] target-i386: support a20 mask for NEC PC-9812
Date: Tue, 22 Dec 2009 22:05:56 +0000
User-agent: Mutt/1.5.13 (2006-08-11)

TAKEDA, toshiya wrote:
> @@ -940,7 +966,15 @@ void cpu_x86_set_a20(CPUX86State *env, int a20_state)
>          /* when a20 is changed, all the MMU mappings are invalid, so
>             we must flush everything */
>          tlb_flush(env, 1);
> -        env->a20_mask = ~(1 << 20) | (a20_state << 20);
> +        if (env->private_features & PRIVATE_FEATURE_PC98_A20MASK) {
> +            if (a20_state) {
> +                env->a20_mask = ~0x0;
> +            } else {
> +                env->a20_mask = 0xfffff;
> +            }
> +        } else {
> +            env->a20_mask = ~(1 << 20) | (a20_state << 20);
> +        }
>      }
>  }

It seems strange to mix different styles in that way.  How about this,
which I think makes the PC98 vs. PC difference clearer too:

    if (a20_state) {
        env->a20_mask = ~0x0;
    } else if (env->private_features & PRIVATE_FEATURE_PC98_A20MASK) {
        env->a20_mask = (1 << 20) - 1;  /* A20 masks all bits >= 20. */
    } else {
        env->a20_mask = ~(1 << 20);     /* A20 masks only bit 20. */
    }

(When I say clearer, it's not _that_ obvious that these or the
original expressions store the right thing into "uint64
env->a20_mask", given these expressions are all of type "int", but, in
fact, they do owing to C type promotion rules.  Same for the save/load
state).

-- Jamie




reply via email to

[Prev in Thread] Current Thread [Next in Thread]