Developpez.com - Delphi
X

Choisissez d'abord la catégorieensuite la rubrique :

Nono40.developpez.com
Le petit coin du web de Nono40
SOURCES TESTS DELPHI WIN32 AUTOMATISMES DELPHI .NET QUICK-REPORT
Retour à l'accueil
68 - TEST PRESENCE DE SSE SSE2 ET 3DNOW

PRÉSENTATION : Tester si les instructions SSE SSE2 ou 3DNow sont disponibles sur le processeur.
ZIP : Téléchargez le zip APERÇUS :

NOTES :

CODE :
Unit Unit1;
//
// Sujet : Lecture des flags processeur avec pour application
//         la détermination du support SSE SSE2 et 3DNow
//
// Par Nono40 : http://nono40.developpez.com  http://nono40.fr.st
//              mailto:nono40@fr.st
//
// Le 10/11/2003
//

Interface

Uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

Type
  TForm1 = Class(TForm)
    cSSE: TCheckBox;
    cSSE2: TCheckBox;
    c3DNow: TCheckBox;
    Procedure FormCreate(Sender: TObject);
  Private
    { Déclarations privées }
  Public
    { Déclarations publiques }
  End;

Var
  Form1: TForm1;

Implementation

{$R *.dfm}
Function LireFlagsProcesseur:Cardinal;Register;
// Résultat dans EAX
Asm
  PUSH  EBX
  PUSH  EDI

  // Test de la possiblité d'utiliser CPUID
  // Cette méthode est directement tirée de la doc Intel
  PUSHFD               // Obtentions des Etats actuels
  POP   EAX
  MOV   ECX,EAX        // Sauvegarde...
  XOR   EAX, 200000h   // Changement du bit ID
  PUSH  EAX            // Sauvegarde des Etats dans le proc
  POPFD                //
  PUSHFD               // Obtentions des Etats actuels
  POP   EAX            //
  XOR   EAX,ECX        // Test si le bit ID a été conservé
  JE    @@ERREUR       // Fin si le processeur ne supporte pas CPUID

  // La "fonction" 0 demande le numéro maximum de fonction
  // utilisable.
  MOV   EAX,0          // Fonctin 0 de CPUID
  CPUID
  CMP   EAX,1          // On veut la fonction 1 seulement
  JB    @@ERREUR       // Non supportée

  // Lecture des flags
  MOV   EAX,1          // Fonctin 1 de CPUID
  CPUID
  MOV   EAX,EDX        // Flags contenus dans EDX
  JMP   @@Fin

@@ERREUR:
  XOR   EAX,EAX

@@Fin:
  POP   EDI
  POP   EBX
End;

Function LireFlagsEtendusProcesseur:Cardinal;Register;
// Résultat dans EAX
Asm
  PUSH  EBX
  PUSH  EDI

  // Test de la possiblité d'utiliser CPUID
  // Cette méthode est directement tirée de la doc Intel
  PUSHFD               // Obtentions des Etats actuels
  POP   EAX
  MOV   ECX,EAX        // Sauvegarde...
  XOR   EAX, 200000h   // Changement du bit ID
  PUSH  EAX            // Sauvegarde des Etats dans le proc
  POPFD                //
  PUSHFD               // Obtentions des Etats actuels
  POP   EAX            //
  XOR   EAX,ECX        // Test si le bit ID a été conservé
  JE    @@ERREUR       // Fin si le processeur ne supporte pas CPUID

  // La "fonction" 0 demande le numéro maximum de fonction
  // utilisable.
  MOV   EAX,0          // Fonctin 0 de CPUID
  CPUID
  CMP   EAX,$80000001  // On veut la fonction étendue $80000001
  JB    @@ERREUR       // Non supportée

  // Lecture des flags
  MOV   EAX,$80000001  // Fonctin 1 de CPUID
  CPUID
  MOV   EAX,EDX        // Flags contenus dans EDX
  JMP   @@Fin

@@ERREUR:
  XOR   EAX,EAX

@@Fin:
  POP   EDI
  POP   EBX
End;

Function SupporteSEE:Boolean;Register;
Asm
  CALL  LireFlagsProcesseur // Lecture des flags
  SHR   EAX,25              // On ne garde que le bit 25
  AND   EAX,1               // dans le bit 0 de EAX
End;

Function SupporteSEE2:Boolean;Register;
Asm
  CALL  LireFlagsProcesseur // Lecture des flags
  SHR   EAX,26              // On ne garde que le bit 26
  AND   EAX,1               // dans le bit 0 de EAX
End;

Function Supporte3DNow:Boolean;Register;
Asm
  CALL  LireFlagsEtendusProcesseur // Lecture des flags etendus
  SHR   EAX,31              // On ne garde que le bit 31
  AND   EAX,1               // dans le bit 0 de EAX
End;

Procedure TForm1.FormCreate(Sender: TObject);
Begin
  cSSE.Checked := SupporteSEE;
  cSSE2.Checked := SupporteSEE2;
End;

end.

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2003 Bruno Guérangé. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Responsables bénévoles de la rubrique Delphi : Gilles Vasseur - Alcatîz -