qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] linux-user: Add AT_HWCAP2 for aarch64-linux-use


From: Laurent Vivier
Subject: Re: [Qemu-devel] [PATCH] linux-user: Add AT_HWCAP2 for aarch64-linux-user
Date: Fri, 23 Aug 2019 17:34:28 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0

Le 09/08/2019 à 19:11, Richard Henderson a écrit :
> Add the HWCAP2_* bits from kernel version v5.3-rc3.
> Enable the bits corresponding to ARMv8.5-CondM and ARMv8.5-FRINT.
> 
> Signed-off-by: Richard Henderson <address@hidden>
> ---
>  linux-user/elfload.c | 31 +++++++++++++++++++++++++++----
>  1 file changed, 27 insertions(+), 4 deletions(-)
> ---
> 
> The HWCAP2_FLAGM2 and HWCAP2_FRINT bits came in during the 
> last merge window and will be in the upcoming v5.3 release.
> We don't yet implement any of the other extensions that make
> up the rest of the HWCAP2 bits.
> 
> 
> r~
> 
> 
> diff --git a/linux-user/elfload.c b/linux-user/elfload.c
> index bd43c4817d..4fd2f46f18 100644
> --- a/linux-user/elfload.c
> +++ b/linux-user/elfload.c
> @@ -606,9 +606,23 @@ enum {
>      ARM_HWCAP_A64_SB            = 1 << 29,
>      ARM_HWCAP_A64_PACA          = 1 << 30,
>      ARM_HWCAP_A64_PACG          = 1UL << 31,
> +
> +    ARM_HWCAP2_A64_DCPODP       = 1 << 0,
> +    ARM_HWCAP2_A64_SVE2         = 1 << 1,
> +    ARM_HWCAP2_A64_SVEAES       = 1 << 2,
> +    ARM_HWCAP2_A64_SVEPMULL     = 1 << 3,
> +    ARM_HWCAP2_A64_SVEBITPERM   = 1 << 4,
> +    ARM_HWCAP2_A64_SVESHA3      = 1 << 5,
> +    ARM_HWCAP2_A64_SVESM4       = 1 << 6,
> +    ARM_HWCAP2_A64_FLAGM2       = 1 << 7,
> +    ARM_HWCAP2_A64_FRINT        = 1 << 8,
>  };
>  
> -#define ELF_HWCAP get_elf_hwcap()
> +#define ELF_HWCAP   get_elf_hwcap()
> +#define ELF_HWCAP2  get_elf_hwcap2()
> +
> +#define GET_FEATURE_ID(feat, hwcap) \
> +    do { if (cpu_isar_feature(feat, cpu)) { hwcaps |= hwcap; } } while (0)
>  
>  static uint32_t get_elf_hwcap(void)
>  {
> @@ -620,8 +634,6 @@ static uint32_t get_elf_hwcap(void)
>      hwcaps |= ARM_HWCAP_A64_CPUID;
>  
>      /* probe for the extra features */
> -#define GET_FEATURE_ID(feat, hwcap) \
> -    do { if (cpu_isar_feature(feat, cpu)) { hwcaps |= hwcap; } } while (0)
>  
>      GET_FEATURE_ID(aa64_aes, ARM_HWCAP_A64_AES);
>      GET_FEATURE_ID(aa64_pmull, ARM_HWCAP_A64_PMULL);
> @@ -644,11 +656,22 @@ static uint32_t get_elf_hwcap(void)
>      GET_FEATURE_ID(aa64_sb, ARM_HWCAP_A64_SB);
>      GET_FEATURE_ID(aa64_condm_4, ARM_HWCAP_A64_FLAGM);
>  
> -#undef GET_FEATURE_ID
> +    return hwcaps;
> +}
> +
> +static uint32_t get_elf_hwcap2(void)
> +{
> +    ARMCPU *cpu = ARM_CPU(thread_cpu);
> +    uint32_t hwcaps = 0;
> +
> +    GET_FEATURE_ID(aa64_condm_5, ARM_HWCAP2_A64_FLAGM2);
> +    GET_FEATURE_ID(aa64_frint, ARM_HWCAP2_A64_FRINT);
>  
>      return hwcaps;
>  }
>  
> +#undef GET_FEATURE_ID
> +
>  #endif /* not TARGET_AARCH64 */
>  #endif /* TARGET_ARM */
>  
> 

Applied to my linux-user branch.

Thanks,
Laurent



reply via email to

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