From 39627cbdfb488c9dd0653f576737448098284226 Mon Sep 17 00:00:00 2001 From: florian Date: Sat, 5 Mar 2022 20:35:15 +0100 Subject: [PATCH] + AVX512VBMISupport and AVX512VBMI2Support --- rtl/i386/cpu.pp | 18 ++++++++++++++++++ rtl/x86_64/cpu.pp | 18 ++++++++++++++++++ tests/test/units/cpu/tcpu1.pp | 22 ++++++++++++++++++++++ 3 files changed, 58 insertions(+) diff --git a/rtl/i386/cpu.pp b/rtl/i386/cpu.pp index 3569c8d0a0..921b05f561 100644 --- a/rtl/i386/cpu.pp +++ b/rtl/i386/cpu.pp @@ -43,6 +43,8 @@ unit cpu; function AVX512CDSupport: boolean;inline; function AVX512BWSupport: boolean;inline; function AVX512VLSupport: boolean;inline; + function AVX512VBMISupport: boolean;inline; + function AVX512VBMI2Support: boolean;inline; function AVX512VNNISupport: boolean;inline; function AVX512BITALGSupport: boolean;inline; function RDSEEDSupport: boolean;inline; @@ -80,6 +82,8 @@ unit cpu; _AVX512CDSupport, _AVX512BWSupport, _AVX512VLSupport, + _AVX512VBMISupport, + _AVX512VBMI2Support, _AVX512VNNISupport, _AVX512BITALGSupport, _RDSEEDSupport, @@ -267,6 +271,8 @@ unit cpu; _AVX512ERSupport:=(_ebx and $8000000)<>0; _AVX512CDSupport:=(_ebx and $10000000)<>0; _AVX512BWSupport:=(_ebx and $40000000)<>0; + _AVX512VBMISupport:=(_ecx and $00000002)<>0; + _AVX512VBMI2Support:=(_ecx and $00000040)<>0; _AVX512VNNISupport:=(_ecx and $00000800)<>0; _AVX512BITALGSupport:=(_ecx and $00001000)<>0; _SHASupport:=(_ebx and $20000000)<>0; @@ -353,6 +359,18 @@ unit cpu; end; + function AVX512VBMISupport: boolean;inline; + begin + result:=_AVX512VBMISupport; + end; + + + function AVX512VBMI2Support: boolean;inline; + begin + result:=_AVX512VBMI2Support; + end; + + function AVX512VNNISupport: boolean;inline; begin result:=_AVX512VNNISupport; diff --git a/rtl/x86_64/cpu.pp b/rtl/x86_64/cpu.pp index 039c2c68d8..97ad4ae244 100644 --- a/rtl/x86_64/cpu.pp +++ b/rtl/x86_64/cpu.pp @@ -40,6 +40,8 @@ unit cpu; function AVX512CDSupport: boolean;inline; function AVX512BWSupport: boolean;inline; function AVX512VLSupport: boolean;inline; + function AVX512VBMISupport: boolean;inline; + function AVX512VBMI2Support: boolean;inline; function AVX512VNNISupport: boolean;inline; function AVX512BITALGSupport: boolean;inline; function RDSEEDSupport: boolean;inline; @@ -79,6 +81,8 @@ unit cpu; _AVX512CDSupport, _AVX512BWSupport, _AVX512VLSupport, + _AVX512VBMISupport, + _AVX512VBMI2Support, _AVX512VNNISupport, _AVX512BITALGSupport, _RDSEEDSupport, @@ -243,6 +247,8 @@ unit cpu; _SHASupport:=(_ebx and $20000000)<>0; _AVX512BWSupport:=(_ebx and $40000000)<>0; _AVX512VLSupport:=(_ebx and $80000000)<>0; + _AVX512VBMISupport:=(_ecx and $00000002)<>0; + _AVX512VBMI2Support:=(_ecx and $00000040)<>0; _AVX512VNNISupport:=(_ecx and $00000800)<>0; _AVX512BITALGSupport:=(_ecx and $00001000)<>0; _BMI1Support:=(_ebx and $8)<>0; @@ -324,6 +330,18 @@ unit cpu; end; + function AVX512VBMISupport: boolean;inline; + begin + result:=_AVX512VBMISupport; + end; + + + function AVX512VBMI2Support: boolean;inline; + begin + result:=_AVX512VBMI2Support; + end; + + function AVX512VNNISupport: boolean;inline; begin result:=_AVX512VNNISupport; diff --git a/tests/test/units/cpu/tcpu1.pp b/tests/test/units/cpu/tcpu1.pp index 28a28bf604..a12a7894c9 100644 --- a/tests/test/units/cpu/tcpu1.pp +++ b/tests/test/units/cpu/tcpu1.pp @@ -57,6 +57,28 @@ begin end else writeln('no'); + write('AVX512VBMI support: '); + if AVX512VBMISupport then + begin + writeln('yes'); + asm + vpxor %ymm0,%ymm0,%ymm0 + vpermi2b %zmm0,%zmm0,%zmm0 + end; + end + else + writeln('no'); + write('AVX512VBMI2 support: '); + if AVX512VBMI2Support then + begin + writeln('yes'); + asm + vpxor %ymm0,%ymm0,%ymm0 + vpexpandw %zmm0,%zmm0 + end; + end + else + writeln('no'); write('FMA support: '); if FMASupport then begin