begin process at 2012 05 30 17:07:02
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Algorithme

 > 

Compression, Split & Cryptage

 > 

script C++


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

script C++

vendredi 15 avril 2011 à 16:59:35 | script C++

elhajjajireda

Bonjour
si le vous plait est ce qu'il y a quelqu'un qui peut m'aider à comprendre ce code et surtout celui de la fonction MCheckCpu() et MCpuid()



#include "MUtils.h"

//~ static int WithMmxSseUse= 0;

using namespace std;

namespace local_vis_eric
{
void Memms() { // ==> should be done after MMX and before FPU calculations <==
#ifdef ARCH_X86
emms();
#endif
}


int MExists(const char* FileName) {
FILE* File;
if ((File=fopen(FileName,"r"))== NULL) return 0;
fclose(File);
return 1;
}
const char* MExistingFileName(const char* PrefixSuffix, int Number) {
static char FileName[1024];
if (PrefixSuffix== NULL || !strlen(PrefixSuffix))
return NULL;
int i, iMax= strlen(PrefixSuffix);
for (i=0; i< iMax; i++)
if (PrefixSuffix[i]=='*')
break;
if (i== iMax)
return NULL;
sprintf(FileName,"%s", PrefixSuffix);
sprintf(FileName+i,"%d%s", int(Number), PrefixSuffix+i+1);
if (MExists(FileName)) return FileName;
sprintf(FileName+i,"0%d%s", int(Number), PrefixSuffix+i+1);
if (MExists(FileName)) return FileName;
sprintf(FileName+i,"00%d%s", int(Number), PrefixSuffix+i+1);
if (MExists(FileName)) return FileName;
sprintf(FileName+i,"000%d%s", int(Number), PrefixSuffix+i+1);
if (MExists(FileName)) return FileName;
sprintf(FileName+i,"0000%d%s", int(Number), PrefixSuffix+i+1);
if (MExists(FileName)) return FileName;
return NULL;
}


#include <sys/time.h>

double MTime() {
//struct timeval tv;
//gettimeofday(&tv, (struct timezone *)NULL);
return 0.0;
}

double MTime2()
{
//struct tms buffer;
//(void) times(&buffer);
//double NbClkTck=sysconf(_SC_CLK_TCK);
return 0.0;
}





int MCpuid() { // This function is from the GNU mpeg2dec source.
// Copyright (C) 1999-2001 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
#ifdef ARCH_X86
uint32_t eax, ebx, ecx, edx;
int AMD;
uint32_t caps;

#define cpuid(op,eax,ebx,ecx,edx) \
asm ("cpuid" \
: "=a" (eax), \
"=b" (ebx), \
"=c" (ecx), \
"=d" (edx) \
: "a" (op) \
: "cc")

asm ("pushfl\n\t"
"popl %0\n\t"
"movl %0,%1\n\t"
"xorl $0x200000,%0\n\t"
"pushl %0\n\t"
"popfl\n\t"
"pushfl\n\t"
"popl %0"
: "=a" (eax),
"=b" (ebx)
:
: "cc");

if (eax == ebx) /* no cpuid */
return 0;
cpuid (0x0000int MCpuid() { // This function is from the GNU mpeg2dec source.
// Copyright (C) 1999-2001 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
#ifdef ARCH_X86
uint32_t eax, ebx, ecx, edx;
int AMD;
uint32_t caps;

#define cpuid(op,eax,ebx,ecx,edx) \
asm ("cpuid" \
: "=a" (eax), \
"=b" (ebx), \
"=c" (ecx), \
"=d" (edx) \
: "a" (op) \
: "cc")

asm ("pushfl\n\t"
"popl %0\n\t"
"movl %0,%1\n\t"
"xorl $0x200000,%0\n\t"
"pushl %0\n\t"
"popfl\n\t"
"pushfl\n\t"
"popl %0"
: "=a" (eax),
"=b" (ebx)
:
: "cc");

if (eax == ebx) /* no cpuid */
return 0;
cpuid (0x00000000, eax, ebx, ecx, edx);
if (!eax) /* vendor string only */
return 0;
AMD = (ebx == 0x68747541) && (ecx == 0x444d4163) && (edx == 0x69746e65);
cpuid (0x00000001, eax, ebx, ecx, edx);
if (! (edx & 0x00800000)) /* no MMX */
return 0;
caps = M_MM_ACCEL_X86_MMX;
if (edx & 0x02000000) /* SSE - identical to AMD MMX extensions */
caps = M_MM_ACCEL_X86_MMX | M_MM_ACCEL_X86_MMXEXT;
cpuid (0x80000000, eax, ebx, ecx, edx);
if (eax < 0x80000001) /* no extended capabilities */
return caps;
cpuid (0x80000001, eax, ebx, ecx, edx);
if (edx & 0x80000000)
caps |= M_MM_ACCEL_X86_3DNOW;
if (AMD && (edx & 0x00400000)) /* AMD MMX extensions */
caps |= M_MM_ACCEL_X86_MMXEXT;
return caps;
#endif
return 0;
};

void MCheckCpu() {
assert(sizeof(char)== 1);
assert(sizeof(short)== 2);
assert(sizeof(int)== 4);
assert(sizeof*/00000, eax, ebx, ecx, edx);
if (eax < 0x80000001) /* no extended capabilities */
return caps;
cpuid (0x80000001, eax, ebx, ecx, edx);
if (edx & 0x80000000)
caps |= M_MM_ACCEL_X86_3DNOW;
if (AMD && (edx & 0x00400000)) /* AMD MMX extensions */
caps |= M_MM_ACCEL_X86_MMXEXT;
return caps;
#endif
return 0;
};

void MCheckCpu() {
assert(sizeof(char)== 1);
assert(sizeof(short)== 2);
assert(sizeof(int)== 4);
assert(sizeof(float)== 4);
assert(sizeof(double)== 8);
assert(sizeof(long long)== 8);
assert((MCpuid()&(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT))==
(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT));
(float)== 4);
assert(sizeof(double)== 8);
assert(sizeof(long long)== 8);
assert((MCpuid()&(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT))==
(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT));
0000, eax, ebx, ecx, edx);
if (!eax) /* vendor string only */
return 0;
AMD = (ebx == 0x68747541) && (ecx == 0x444d4163) && (edx == 0x69746e65);
cpuid (0x00000001, eax, ebx, ecx, edx);
if (! (edx & 0x00800000)) /* no MMX */
return 0;
caps = M_MM_ACCEL_X86_MMX;
if (edx & 0x02000000) /* SSE - identical to AMD MMX extensions */
caps = M_MM_ACCEL_X86_MMX | M_MM_ACCEL_X86_MMXEXT;
cpuid (0x80000000, eax, ebx, ecx, edx);
if (eax < 0x80000001) /* no extended capabilities */
return caps;
cpuid (0x80000001, eax, ebx, ecx, edx);
if (edx & 0x80000000)
caps |= M_MM_ACCEL_X86_3DNOW;
if (AMD && (edx & 0x00400000)) /* AMD MMX extensions */
caps |= M_MM_ACCEL_X86_MMXEXT;
return caps;
#endif
return 0;
};

void MCheckCpu() {
assert(sizeof(char)== 1);
assert(sizeof(short)== 2);
assert(sizeof(int)== 4);
assert(sizeof(float)== 4);
assert(sizeof(double)== 8);
assert(sizeof(long long)== 8);
assert((MCpuid()&(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT))==
(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT));

return 0;
caps = M_MM_ACCEL_X86_MMX;
if (edx & 0x02000000) /* SSE - identical to AMD MMX extensions */
caps = M_MM_ACCEL_X86_MMX | M_MM_ACCEL_X86_MMXEXT;
cpuid (0x80000000, eax, ebx, ecx, edx);
if (eax < 0x80000001) /* no extended capabilities */
return caps;
cpuid (0x80000001, eax, ebx, ecx, edx);
if (edx & 0x80000000)
caps |= M_MM_ACCEL_X86_3DNOW;
if (AMD && (edx & 0x00400000)) /* AMD MMX extensions */
caps |= M_MM_ACCEL_X86_MMXEXT;
return caps;
#endif
return 0;
};

void MCheckCpu() {
assert(sizeof(char)== 1);
assert(sizeof(short)== 2);
assert(sizeof(int)== 4);
assert(sizeof(float)== 4);
assert(sizeof(double)== 8);
assert(sizeof(long long)== 8);
assert((MCpuid()&(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT))==
(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT));
0000, eax, ebx, ecx, edx);
if (!eax) /* vendor string only */
return 0;
AMD = (ebx == 0x68747541) && (ecx == 0x444d4163) && (edx == 0x69746e65);
cpuid (0x00000001, eax, ebx, ecx, edx);
if (! (edx & 0x00800000)) /* no MMX */
return 0;
caps = M_MM_ACCEL_X86_MMX;
if (edx & 0x02000000) /* SSE - identical to AMD MMX extensions */
caps = M_MM_ACCEL_X86_MMX | M_MM_ACCEL_X86_MMXEXT;
cpuid (0x80000000, eax, ebx, ecx, edx);
if (eax < 0x80000001) /* no extended capabilities */
return caps;
cpuid (0x80000001, eax, ebx, ecx, edx);
if (edx & 0x80000000)
caps |= M_MM_ACCEL_X86_3DNOW;
if (AMD && (edx & 0x00400000)) /* AMD MMX extensions */
caps |= M_MM_ACCEL_X86_MMXEXT;
return caps;
#endif
return 0;
};

void MCheckCpu() {
assert(sizeof(char)== 1);
assert(sizeof(short)== 2);
assert(sizeof(int)== 4);
assert(sizeof(float)== 4);
assert(sizeof(double)== 8);
assert(sizeof(long long)== 8);
assert((MCpuid()&(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT))==
(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT));
(float)== 4);
assert(sizeof(double)== 8);
assert(sizeof(long long)== 8);
assert((MCpuid()&(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT))==
(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT));
0000, eax, ebx, ecx, edx);
if (!eax) /* vendor string only */
return 0;
AMD = (ebx == 0x68747541) && (ecx == 0x444d4163) && (edx == 0x69746e65);
cpuid (0x00000001, eax, ebx, ecx, edx);
if (! (edx & 0x00800000)) /* no MMX */
return 0;
caps = M_MM_ACCEL_X86_MMX;
if (edx & 0x02000000) /* SSE - identical to AMD MMX extensions */
caps = M_MM_ACCEL_X86_MMX | M_MM_ACCEL_X86_MMXEXT;
cpuid (0x80000000, eax, ebx, ecx, edx);
if (eax < 0x80000001) /* no extended capabilities */
return caps;
cpuid (0x80000001, eax, ebx, ecx, edx);
if (edx & 0x80000000)
caps |= M_MM_ACCEL_X86_3DNOW;
if (AMD && (edx & 0x00400000)) /* AMD MMX extensions */
caps |= M_MM_ACCEL_X86_MMXEXT;
return caps;
#endif
return 0;
};

void MCheckCpu() {
assert(sizeof(char)== 1);
assert(sizeof(short)== 2);
assert(sizeof(int)== 4);
assert(sizeof(float)== 4);
assert(sizeof(double)== 8);
assert(sizeof(long long)== 8);
assert((MCpuid()&(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT))==
(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT));
//assert(sseUse==2);
//~ WithMmxSseUse= 1;
}
//~ int MWithMmxSseUse() {return WithMmxSseUse; };
int MWithMmxSseUse() {return sseUse; };
//~ void MSetWithMmxSseUse(int w) { std::cout << " Settings SSE " << w << std::endl;WithMmxSseUse=w;}

}
vendredi 15 avril 2011 à 18:12:59 | Re : script C++

CptPingu

Administrateur CodeS-SourceS
Évite les "using namespace", voir: [ Lien ]

A noter pour ceux qui prennent le thread en route, qu'il y a un rapport avec la question posée ici:
http://www.cppfrance.com/forum/sujet-PORTAGE-PROJET-CPLUSPLUS-LINUX-VERS-WINDOWS_1512482.aspx#9

J'ai l'impression que ce code check le type de cpu que tu as. Sûrement pour vérifier qu'il a le droit d'utiliser certaines instructions qui ne sont pas présentes (ou différentes) sur certains processeurs.
Tu devrais poster cette question sur le forum asm, ils répondront sans doute mieux que moi.

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
vendredi 15 avril 2011 à 21:56:45 | Re : script C++

elhajjajireda

ok merci , mais comment je peus transmettre cette discutions sur ce salon de asm ?
vendredi 15 avril 2011 à 22:07:24 | Re : script C++

CptPingu

Administrateur CodeS-SourceS
Poste une nouvelle question sur le forum asm.

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question


Cette discussion est classée dans : mm, edx, assert, x86, accel


Répondre à ce message

Sujets en rapport avec ce message

Comment inclure un fichier ds un seul et mm executable puis l'extraire? [ par Xanders ] .°o0oO$: XandersBonjour à tous! Voila je vous explique, j'aimerai inclure dans mon executable des fichiers (quelconque exe, jpg ou autre) que j'extrai Comment inclure un fichier ds un seul et mm executable puis l'extraire? [ par Xanders ] .°o0oO$: XandersBonjour à tous! Voila je vous explique, j'aimerai inclure dans mon executable des fichiers (quelconque exe, jpg ou autre) que j'extrai I NEED SOMEBODY HELP [ par lerilcy ] Mon programme coupe des fichiers en part egales puis les recompose dans un 2eme temps.Un peu comme les compresseurs type RZsplit Winrar... A la compil Dll (et ui, tjr la mm chose) [ par sebastienbro ] G un problème ! G fé une dll en c++ (ki d'ailleur, ne marche pas). L est sensé etre utilisé avec vb, mais voila : vb apelle la premiere fonction expor Conversion string en date [ par jpeg ] j'aimerai convertir (en C++ standard, sans MFC) une chaine de caractère de n'importe quel format (DD/MM/YYYY ou DD/MM/YYYY hh:mm ou YYYYMMDD ou ....) SONDAGE !!! RSVP !!! [ par Guidelor ] Bonjour Ca serait cool si le plus de monde possibles pouvait répondre à ma petite question !!!Existe-t-il un fichier.log sur votre ordinateur qui affi ASSERT ? [ par tsanti ] Dans InitDeviceObjectJe vérouille 1 fois le Vertex Buffer, je récupère la hauteur du Mesh,je dévérouille.Ensuite je traite les informations de hauteur flickering, selectObject(CBitmap *pBitmap) et ASSERT [ par Tropdemalaveclesapi ] Salut à tous,tout d'abord je tiens à m'excuser de ne pas avoir répondu aux mails de certains mais je n'avais absolument pas d'Internet, si, si on peut Pb la qd mm ! [ par Joky ] Euh Comment ça se fait que y'as plus de sourceEt n'oubliez jamais...French Smile :-) gtk(mm) dessiner avec de l'alpha [ par Ricool ] Bonjour,J'ai une petite question sur l'apha et gtk (gdk).Je dois dessiner des courbes qui se superpose (coube composée de rectangle plein). Je veuxles


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,181 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales