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

Re: [Xen-devel] [PATCH 09/10] tools/x86emul: Advertise more CPUID features for testing purposes



>>> On 27.03.17 at 11:56, <andrew.cooper3@xxxxxxxxxx> wrote:
> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> ---
> CC: Jan Beulich <JBeulich@xxxxxxxx>
> CC: George Dunlap <george.dunlap@xxxxxxxxxxxxx>
> CC: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
> CC: Wei Liu <wei.liu2@xxxxxxxxxx>
> ---
>  tools/tests/x86_emulator/x86_emulate.c | 41 
> ++++++++++++++++++++++++----------
>  1 file changed, 29 insertions(+), 12 deletions(-)
> 
> diff --git a/tools/tests/x86_emulator/x86_emulate.c 
> b/tools/tests/x86_emulator/x86_emulate.c
> index cea0595..2c49954 100644
> --- a/tools/tests/x86_emulator/x86_emulate.c
> +++ b/tools/tests/x86_emulator/x86_emulate.c
> @@ -73,20 +73,37 @@ int emul_test_cpuid(
>           : "a" (leaf), "c" (subleaf));
>  
>      /*
> -     * The emulator doesn't itself use MOVBE, so we can always run the
> -     * respective tests.
> +     * Some instructions and features can be emulated without specific
> +     * hardware support.  These features are unconditionally reported here,
> +     * for testing and fuzzing-coverage purposes.
>       */
> -    if ( leaf == 1 )
> -        res->c |= 1U << 22;
> -
> -    /*
> -     * The emulator doesn't itself use ADCX/ADOX/RDPID, so we can always 
> run
> -     * the respective tests.
> -     */
> -    if ( leaf == 7 && subleaf == 0 )
> +    switch ( leaf )
>      {
> -        res->b |= 1U << 19;
> -        res->c |= 1U << 22;
> +    case 1:
> +        res->c |= 1U << 22; /* MOVBE */
> +        break;
> +
> +    case 7:
> +        switch ( subleaf )
> +        {
> +        case 0:
> +            res->b |= 1U << 11; /* rtm */

Upper case?

> +            res->b |= 1U << 19; /* ADCX/ADOX */
> +            res->b |= 1U << 20; /* STAC/CLAC */

SMAP?

> +            res->b |= 1U << 24; /* CLWB */
> +
> +            res->c |= 1U << 22; /* RDPID */
> +            break;
> +        }
> +        break;
> +
> +    case 0x80000001:
> +        res->c |= 1U << 4; /* cr8_legacy */

I think this one is AMD-only, just like ...

> +        if ( ctxt->vendor == X86_VENDOR_AMD )
> +            res->c |= 1U << 7; /* misalignsse */

... this.

And what about LAHF_LM, LZCNT, and CLFLUSH{,OPT}?

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.