diff mbox

x86: add AVX512_VPOPCNTDQ features

Message ID 1484032051-11619-1-git-send-email-he.chen@linux.intel.com
State New
Headers show

Commit Message

He Chen Jan. 10, 2017, 7:07 a.m. UTC
AVX512_VPOPCNTDQ: Vector POPCNT instructions for word and qwords.
variable precision.

Signed-off-by: He Chen <he.chen@linux.intel.com>
---
 target/i386/cpu.c | 2 +-
 target/i386/cpu.h | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

Comments

Eduardo Habkost Jan. 12, 2017, 5:10 p.m. UTC | #1
On Tue, Jan 10, 2017 at 03:07:31PM +0800, He Chen wrote:
> AVX512_VPOPCNTDQ: Vector POPCNT instructions for word and qwords.
> variable precision.
> 
> Signed-off-by: He Chen <he.chen@linux.intel.com>
> ---
>  target/i386/cpu.c | 2 +-
>  target/i386/cpu.h | 1 +
>  2 files changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/target/i386/cpu.c b/target/i386/cpu.c
> index b0640f1..ae900b5 100644
> --- a/target/i386/cpu.c
> +++ b/target/i386/cpu.c
> @@ -435,7 +435,7 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
>              NULL, "avx512vbmi", "umip", "pku",
>              "ospke", NULL, NULL, NULL,
>              NULL, NULL, NULL, NULL,
> -            NULL, NULL, NULL, NULL,
> +            NULL, NULL, "vpopcntdq", NULL,

The patches I see on linux-kernel use the "avx512_vpopcntdq"
name. Why not use "avx512-vpopcntdq" in QEMU to avoid confusion?


>              "la57", NULL, NULL, NULL,
>              NULL, NULL, "rdpid", NULL,
>              NULL, NULL, NULL, NULL,
> diff --git a/target/i386/cpu.h b/target/i386/cpu.h
> index a7f2f60..73edc60 100644
> --- a/target/i386/cpu.h
> +++ b/target/i386/cpu.h
> @@ -630,6 +630,7 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS];
>  #define CPUID_7_0_ECX_UMIP     (1U << 2)
>  #define CPUID_7_0_ECX_PKU      (1U << 3)
>  #define CPUID_7_0_ECX_OSPKE    (1U << 4)
> +#define CPUID_7_0_ECX_VPOPCNTDQ (1U << 14) /* POPCNT for vectors of DW/QW */
>  #define CPUID_7_0_ECX_LA57     (1U << 16)
>  #define CPUID_7_0_ECX_RDPID    (1U << 22)
>  
> -- 
> 2.7.4
> 
>
Paolo Bonzini Jan. 12, 2017, 6:18 p.m. UTC | #2
On 12/01/2017 18:10, Eduardo Habkost wrote:
> On Tue, Jan 10, 2017 at 03:07:31PM +0800, He Chen wrote:
>> AVX512_VPOPCNTDQ: Vector POPCNT instructions for word and qwords.
>> variable precision.
>>
>> Signed-off-by: He Chen <he.chen@linux.intel.com>
>> ---
>>  target/i386/cpu.c | 2 +-
>>  target/i386/cpu.h | 1 +
>>  2 files changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/target/i386/cpu.c b/target/i386/cpu.c
>> index b0640f1..ae900b5 100644
>> --- a/target/i386/cpu.c
>> +++ b/target/i386/cpu.c
>> @@ -435,7 +435,7 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
>>              NULL, "avx512vbmi", "umip", "pku",
>>              "ospke", NULL, NULL, NULL,
>>              NULL, NULL, NULL, NULL,
>> -            NULL, NULL, NULL, NULL,
>> +            NULL, NULL, "vpopcntdq", NULL,
> 
> The patches I see on linux-kernel use the "avx512_vpopcntdq"
> name. Why not use "avx512-vpopcntdq" in QEMU to avoid confusion?

Or without the dash too, for consistency with avx512vbmi.

Paolo

> 
>>              "la57", NULL, NULL, NULL,
>>              NULL, NULL, "rdpid", NULL,
>>              NULL, NULL, NULL, NULL,
>> diff --git a/target/i386/cpu.h b/target/i386/cpu.h
>> index a7f2f60..73edc60 100644
>> --- a/target/i386/cpu.h
>> +++ b/target/i386/cpu.h
>> @@ -630,6 +630,7 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS];
>>  #define CPUID_7_0_ECX_UMIP     (1U << 2)
>>  #define CPUID_7_0_ECX_PKU      (1U << 3)
>>  #define CPUID_7_0_ECX_OSPKE    (1U << 4)
>> +#define CPUID_7_0_ECX_VPOPCNTDQ (1U << 14) /* POPCNT for vectors of DW/QW */
>>  #define CPUID_7_0_ECX_LA57     (1U << 16)
>>  #define CPUID_7_0_ECX_RDPID    (1U << 22)
>>  
>> -- 
>> 2.7.4
>>
>>
>
Eduardo Habkost Jan. 12, 2017, 6:35 p.m. UTC | #3
On Thu, Jan 12, 2017 at 07:18:20PM +0100, Paolo Bonzini wrote:
> On 12/01/2017 18:10, Eduardo Habkost wrote:
> > On Tue, Jan 10, 2017 at 03:07:31PM +0800, He Chen wrote:
> >> AVX512_VPOPCNTDQ: Vector POPCNT instructions for word and qwords.
> >> variable precision.
> >>
> >> Signed-off-by: He Chen <he.chen@linux.intel.com>
> >> ---
> >>  target/i386/cpu.c | 2 +-
> >>  target/i386/cpu.h | 1 +
> >>  2 files changed, 2 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/target/i386/cpu.c b/target/i386/cpu.c
> >> index b0640f1..ae900b5 100644
> >> --- a/target/i386/cpu.c
> >> +++ b/target/i386/cpu.c
> >> @@ -435,7 +435,7 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
> >>              NULL, "avx512vbmi", "umip", "pku",
> >>              "ospke", NULL, NULL, NULL,
> >>              NULL, NULL, NULL, NULL,
> >> -            NULL, NULL, NULL, NULL,
> >> +            NULL, NULL, "vpopcntdq", NULL,
> > 
> > The patches I see on linux-kernel use the "avx512_vpopcntdq"
> > name. Why not use "avx512-vpopcntdq" in QEMU to avoid confusion?
> 
> Or without the dash too, for consistency with avx512vbmi.

I would agree if Linux was consistent and used "avx512vpopcntdq"
instead of "avx512_vpopcntdq". But if Linux choose to use
"avx512_vpopcntdq", I would like to use a compatible name in
QEMU.

Other software components are likely to use the same flag names
as Linux. If we use a different name, they will need to manually
translate the Linux names to QEMU names.
diff mbox

Patch

diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index b0640f1..ae900b5 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -435,7 +435,7 @@  static FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
             NULL, "avx512vbmi", "umip", "pku",
             "ospke", NULL, NULL, NULL,
             NULL, NULL, NULL, NULL,
-            NULL, NULL, NULL, NULL,
+            NULL, NULL, "vpopcntdq", NULL,
             "la57", NULL, NULL, NULL,
             NULL, NULL, "rdpid", NULL,
             NULL, NULL, NULL, NULL,
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
index a7f2f60..73edc60 100644
--- a/target/i386/cpu.h
+++ b/target/i386/cpu.h
@@ -630,6 +630,7 @@  typedef uint32_t FeatureWordArray[FEATURE_WORDS];
 #define CPUID_7_0_ECX_UMIP     (1U << 2)
 #define CPUID_7_0_ECX_PKU      (1U << 3)
 #define CPUID_7_0_ECX_OSPKE    (1U << 4)
+#define CPUID_7_0_ECX_VPOPCNTDQ (1U << 14) /* POPCNT for vectors of DW/QW */
 #define CPUID_7_0_ECX_LA57     (1U << 16)
 #define CPUID_7_0_ECX_RDPID    (1U << 22)