[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] hvf: guard xgetbv call.
From: |
Richard Henderson |
Subject: |
Re: [PATCH] hvf: guard xgetbv call. |
Date: |
Sun, 10 Jan 2021 08:34:40 -1000 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 |
On 1/9/21 3:46 PM, Roman Bolshakov wrote:
> +static int xgetbv(uint32_t cpuid_ecx, uint32_t idx, uint64_t *xcr)
> {
> - uint32_t eax, edx;
> + uint32_t xcrl, xcrh;
>
> - __asm__ volatile ("xgetbv"
> - : "=a" (eax), "=d" (edx)
> - : "c" (xcr));
> + if (cpuid_ecx && CPUID_EXT_OSXSAVE) {
> + /* The xgetbv instruction is not available to older versions of
> + * the assembler, so we encode the instruction manually.
> + */
> + asm(".byte 0x0f, 0x01, 0xd0" : "=a" (xcrl), "=d" (xcrh) : "c" (idx));
>
> - return (((uint64_t)edx) << 32) | eax;
> + *xcr = (((uint64_t)xcrh) << 32) | xcrl;
> + return 0;
> + }
> +
> + return 1;
> }
Not to bikeshed too much, but this looks like it should return bool, and true
on success, not the other way around.
r~
- Re: [PATCH] hvf: guard xgetbv call., Roman Bolshakov, 2021/01/09
- Re: [PATCH] hvf: guard xgetbv call., Peter Maydell, 2021/01/09
- Re: [PATCH] hvf: guard xgetbv call., Roman Bolshakov, 2021/01/09
- Re: [PATCH] hvf: guard xgetbv call.,
Richard Henderson <=
- Re: [PATCH] hvf: guard xgetbv call., Richard Henderson, 2021/01/10
- Re: [PATCH] hvf: guard xgetbv call., Roman Bolshakov, 2021/01/10
- Re: [PATCH] hvf: guard xgetbv call., Richard Henderson, 2021/01/11
- Re: [PATCH] hvf: guard xgetbv call., Roman Bolshakov, 2021/01/12
- Re: [PATCH] hvf: guard xgetbv call., Richard Henderson, 2021/01/12