Browse Source

+ MMXSupport added to cpu unit
* mmx unit makes more use of cpu unit

florian 1 year ago
parent
commit
22e9033076
2 changed files with 31 additions and 22 deletions
  1. 30 21
      rtl/i386/cpu.pp
  2. 1 1
      rtl/i386/mmx.pp

+ 30 - 21
rtl/i386/cpu.pp

@@ -46,19 +46,20 @@ type
     { returns the contents of the cr0 register }
     { returns the contents of the cr0 register }
     function cr0 : longint;
     function cr0 : longint;
 
 
-    function CMOVSupport : boolean;inline;
-    function InterlockedCompareExchange128Support : boolean;
-    function AESSupport : boolean;inline;
+    function MMXSupport: boolean;inline;
+    function CMOVSupport: boolean;inline;
+    function InterlockedCompareExchange128Support: boolean;
+    function AESSupport: boolean;inline;
     function AVXSupport: boolean;inline;
     function AVXSupport: boolean;inline;
     function AVX2Support: boolean;inline;
     function AVX2Support: boolean;inline;
-    function AVX512FSupport: boolean;inline;    
-    function AVX512DQSupport: boolean;inline;    
-    function AVX512IFMASupport: boolean;inline;    
-    function AVX512PFSupport: boolean;inline;    
-    function AVX512ERSupport: boolean;inline;    
-    function AVX512CDSupport: boolean;inline;    
-    function AVX512BWSupport: boolean;inline;    
-    function AVX512VLSupport: boolean;inline;    
+    function AVX512FSupport: boolean;inline;
+    function AVX512DQSupport: boolean;inline;
+    function AVX512IFMASupport: boolean;inline;
+    function AVX512PFSupport: boolean;inline;
+    function AVX512ERSupport: boolean;inline;
+    function AVX512CDSupport: boolean;inline;
+    function AVX512BWSupport: boolean;inline;
+    function AVX512VLSupport: boolean;inline;
     function AVX512VBMISupport: boolean;inline;
     function AVX512VBMISupport: boolean;inline;
     function AVX512VBMI2Support: boolean;inline;
     function AVX512VBMI2Support: boolean;inline;
     function AVX512VNNISupport: boolean;inline;
     function AVX512VNNISupport: boolean;inline;
@@ -67,7 +68,7 @@ type
     function AVX512BITALGSupport: boolean;inline;
     function AVX512BITALGSupport: boolean;inline;
     function RDSEEDSupport: boolean;inline;
     function RDSEEDSupport: boolean;inline;
     function ADXSupport: boolean;inline;
     function ADXSupport: boolean;inline;
-    function SHASupport: boolean;inline;    
+    function SHASupport: boolean;inline;
     function FMASupport: boolean;inline;
     function FMASupport: boolean;inline;
     function POPCNTSupport: boolean;inline;
     function POPCNTSupport: boolean;inline;
     function LZCNTSupport: boolean;inline;
     function LZCNTSupport: boolean;inline;
@@ -91,6 +92,7 @@ type
 
 
 {$ASMMODE INTEL}
 {$ASMMODE INTEL}
     var
     var
+      _MMXSupport,
       _CMOVSupport,
       _CMOVSupport,
       _AESSupport,
       _AESSupport,
       _AVXSupport,
       _AVXSupport,
@@ -267,6 +269,7 @@ type
            begin
            begin
               maxcpuidvalue:=CPUID(0).eax;
               maxcpuidvalue:=CPUID(0).eax;
               cpuid1:=CPUID(1);
               cpuid1:=CPUID(1);
+              _MMXSupport:=(cpuid1.edx and $800000)<>0;
               _CMOVSupport:=(cpuid1.edx and $8000)<>0;
               _CMOVSupport:=(cpuid1.edx and $8000)<>0;
               _AESSupport:=(cpuid1.ecx and $2000000)<>0;
               _AESSupport:=(cpuid1.ecx and $2000000)<>0;
               _POPCNTSupport:=(cpuid1.ecx and $800000)<>0;
               _POPCNTSupport:=(cpuid1.ecx and $800000)<>0;
@@ -330,6 +333,12 @@ type
       end;
       end;
 
 
 
 
+    function MMXSupport: boolean;
+      begin
+        result:=_MMXSupport;
+      end;
+
+
     function CMOVSupport : boolean;
     function CMOVSupport : boolean;
       begin
       begin
         result:=_CMOVSupport;
         result:=_CMOVSupport;
@@ -366,37 +375,37 @@ type
       end;
       end;
 
 
 
 
-    function AVX512IFMASupport: boolean;inline;    
+    function AVX512IFMASupport: boolean;inline;
       begin
       begin
         result:=_AVX512IFMASupport;
         result:=_AVX512IFMASupport;
       end;
       end;
 
 
 
 
-    function AVX512PFSupport: boolean;inline;    
+    function AVX512PFSupport: boolean;inline;
       begin
       begin
         result:=_AVX512PFSupport;
         result:=_AVX512PFSupport;
       end;
       end;
 
 
 
 
-    function AVX512ERSupport: boolean;inline;    
+    function AVX512ERSupport: boolean;inline;
       begin
       begin
         result:=_AVX512ERSupport;
         result:=_AVX512ERSupport;
       end;
       end;
 
 
 
 
-    function AVX512CDSupport: boolean;inline;    
+    function AVX512CDSupport: boolean;inline;
       begin
       begin
         result:=_AVX512CDSupport;
         result:=_AVX512CDSupport;
       end;
       end;
 
 
 
 
-    function AVX512BWSupport: boolean;inline;    
+    function AVX512BWSupport: boolean;inline;
       begin
       begin
         result:=_AVX512BWSupport;
         result:=_AVX512BWSupport;
       end;
       end;
 
 
 
 
-    function AVX512VLSupport: boolean;inline;    
+    function AVX512VLSupport: boolean;inline;
       begin
       begin
         result:=_AVX512VLSupport;
         result:=_AVX512VLSupport;
       end;
       end;
@@ -426,13 +435,13 @@ type
       end;
       end;
 
 
 
 
-    function AVX512VNNISupport: boolean;inline;    
+    function AVX512VNNISupport: boolean;inline;
       begin
       begin
         result:=_AVX512VNNISupport;
         result:=_AVX512VNNISupport;
       end;
       end;
 
 
 
 
-    function AVX512BITALGSupport: boolean;inline;    
+    function AVX512BITALGSupport: boolean;inline;
       begin
       begin
         result:=_AVX512BITALGSupport;
         result:=_AVX512BITALGSupport;
       end;
       end;
@@ -450,7 +459,7 @@ type
       end;
       end;
 
 
 
 
-     function SHASupport: boolean;inline;    
+     function SHASupport: boolean;inline;
       begin
       begin
         result:=_SHASupport;
         result:=_SHASupport;
       end;
       end;

+ 1 - 1
rtl/i386/mmx.pp

@@ -87,7 +87,7 @@ unit mmx;
 
 
       begin
       begin
          { a cpu with without cpuid instruction supports never mmx }
          { a cpu with without cpuid instruction supports never mmx }
-         mmx_support:=cpuid_support and (CPUID(1).edx and (1 shl 23)<>0);
+         mmx_support:=MMXSupport;
       end;
       end;
 
 
     function amd_3d_support : boolean;
     function amd_3d_support : boolean;