Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
6242 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4  5  6
Auteur Sujet :

Fantastique les compilateurs d'aujourd'hui

n°843231
bjone
Insert booze to continue
Posté le 06-09-2004 à 12:17:51  profilanswer
 

Reprise du message précédent :
yep :jap: (mais j'ai précisé hautement)

mood
Publicité
Posté le 06-09-2004 à 12:17:51  profilanswer
 

n°843234
chrisbk
-
Posté le 06-09-2004 à 12:19:04  profilanswer
 

tout ca pour dire qu'on devrait lancer un boycott massif des x86 et faire pression pour avoir un truc qui ressemble enfin a qqchose :o

n°843250
christophe​_d13
L'efficacité à tout prix.
Posté le 06-09-2004 à 12:36:20  profilanswer
 

bjone> Désolé.
chrisbk> Rien ne t'empèche de développer sur PPC ou RISC.

n°843252
chrisbk
-
Posté le 06-09-2004 à 12:38:13  profilanswer
 

christophe_d13 a écrit :


chrisbk> Rien ne t'empèche de développer sur PPC ou RISC.


 
si [:sisicaivrai] (deja rien que le fait que j'ai pas de PPC ou de RISC et que le budget actuel est, heuh, disons....restreint)


Message édité par chrisbk le 06-09-2004 à 12:38:43
n°843256
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 06-09-2004 à 12:42:08  profilanswer
 

chrisbk a écrit :

si [:sisicaivrai] (deja rien que le fait que j'ai pas de PPC ou de RISC et que le budget actuel est, heuh, disons....restreint)


pas besoin de PPC ou de RISC :o
tu prends WinUAE, PhxAss, et tu possèdes potentiellement une des meilleures architectures que je connaisse, celle que j'ai pris le plus de plaisir à coder en assembleur : l'architecture 680x0

n°843261
Mr Mala
Posté le 06-09-2004 à 12:47:26  profilanswer
 

Harkonnen a écrit :


tu prends WinUAE, PhxAss, et tu possèdes potentiellement une des meilleures architectures que je connaisse, celle que j'ai pris le plus de plaisir à coder en assembleur : l'architecture 680x0


 
 :love: ... je n'ai rien d'autre à ajouter ...

n°843310
christophe​_d13
L'efficacité à tout prix.
Posté le 06-09-2004 à 13:48:02  profilanswer
 

Ma meilleure archi de dvlp (très spécifique) : Les DSP !
Dont les DSP16.
Mais je m'éclate quand même en x86.
 
chrisbk> Tu peux toujours te trouver un Falcon.

n°843422
Kristoph
Posté le 06-09-2004 à 15:26:54  profilanswer
 

Les calculatrices à pile, c'est le top. On est beaucoup performant avec pour faire des calculs :D
 
( troll HP48-TI92 inside ;) )

n°843443
prorel
Posté le 06-09-2004 à 15:48:47  profilanswer
 

Harkonnen a écrit :

vi vi, bien sur ! amuse toi à réaliser une itération de Mandelbrot avec la FPU du premier coup, sans te chier dessus avec les différents empilements [:joce]


et tu as vu ce que genere un compilateur bien optimisé?
ptet qu'il joue justement sur les piles
 
j'ai trouvé un exemple sur un autre forum assez connu:) de la generation d'operations arithmetiques
 
il s'agit d'un extrait d'un exemple de calcul en flottant et en integer
avec le code asm generé

----- float ----  
; 113  :   floatResult -= floatCnst;  
 
  00040 d9 45 f4  fld  DWORD PTR _floatResult$[ebp]  
  00043 d8 65 ec  fsub  DWORD PTR _floatCnst$[ebp]  
  00046 d9 55 f4  fst  DWORD PTR _floatResult$[ebp]  
 
; 114  :   floatResult += floatCnst;  
 
  00049 d8 45 ec  fadd  DWORD PTR _floatCnst$[ebp]  
  0004c d9 55 f4  fst  DWORD PTR _floatResult$[ebp]  
 
; 115  :   floatResult /= floatCnst;  
 
  0004f d8 75 ec  fdiv  DWORD PTR _floatCnst$[ebp]  
  00052 d9 55 f4  fst  DWORD PTR _floatResult$[ebp]  
 
; 116  :   floatResult *= floatCnst;  
 
  00055 d8 4d ec  fmul  DWORD PTR _floatCnst$[ebp]  
  00058 d9 5d f4  fstp  DWORD PTR _floatResult$[ebp]  
--------------------------  
 
 
------------int ----------------  
; 85   :   intResult -= intCnst;  
 
  0003d 8b 4d f4  mov  ecx, DWORD PTR _intResult$[ebp]  
  00040 2b 4d ec  sub  ecx, DWORD PTR _intCnst$[ebp]  
  00043 89 4d f4  mov  DWORD PTR _intResult$[ebp], ecx  
 
; 86   :   intResult += intCnst;  
 
  00046 8b 55 f4  mov  edx, DWORD PTR _intResult$[ebp]  
  00049 03 55 ec  add  edx, DWORD PTR _intCnst$[ebp]  
  0004c 89 55 f4  mov  DWORD PTR _intResult$[ebp], edx  
 
; 87   :   intResult *= intCnst;  
 
  0004f 8b 45 f4  mov  eax, DWORD PTR _intResult$[ebp]  
  00052 0f af 45 ec  imul  eax, DWORD PTR _intCnst$[ebp]  
  00056 89 45 f4  mov  DWORD PTR _intResult$[ebp], eax  
 
; 88   :   intResult /= intCnst;  
 
  00059 8b 45 f4  mov  eax, DWORD PTR _intResult$[ebp]  
  0005c 99   cdq  
  0005d f7 7d ec  idiv  DWORD PTR _intCnst$[ebp]  
  00060 89 45 f4  mov  DWORD PTR _intResult$[ebp], eax  
-----------------------  
 

n°843447
prorel
Posté le 06-09-2004 à 15:51:00  profilanswer
 

christophe_d13 a écrit :

prorel> tu la programmes souvent la FPU ?

Citation :

coproc etait separé


D'où l'instruction wait.


oui pourquoi??
par exemple un prog de visualisation d'objets 3D en assembleur (a l'epoque sous dos3.11 avec carte galaxie)

mood
Publicité
Posté le 06-09-2004 à 15:51:00  profilanswer
 

n°843448
prorel
Posté le 06-09-2004 à 15:51:39  profilanswer
 

chrisbk a écrit :

non c'est de la merdasse :o
je le crierais sous tous les toits jusqu'a ma mort :o


et tu fais comment toi??

n°843482
christophe​_d13
L'efficacité à tout prix.
Posté le 06-09-2004 à 16:32:29  profilanswer
 

prorel> Pas terrible le code... Il est trop linéaire et surtout sur la FPU il est très lent.
L'intérêt de la FPU, c'est de jouer avec ses registres via fxch et de pipeliné à mort les instructions (décalage dans le temps, sachant que le résultat escompté ne sera pas présent avec 2 ou 3 cycles).
 
Un petit exemple...

Code :
  1. fld dword ptr [esi+eax*4]           //  RAA         fMulVV      fMulVU      fMulUV      fMulUU
  2. fld dword ptr [esi+ecx*4]           //  RAB         RAA         fMulVV      fMulVU      fMulUV      fMulUU
  3. fld dword ptr [esi+edi*4]           //  RBA         RAB         RAA         fMulVV      fMulVU      fMulUV      fMulUU
  4. fld dword ptr [esi+ebx*4]           //  RBB         RBA         RAB         RAA         fMulVV      fMulVU      fMulUV      fMulUU
  5. fxch st(3)                          //  RAA         RBA         RAB         RBB         fMulVV      fMulVU      fMulUV      fMulUU
  6. fmul st(0), st(7)                   //  RAA*fMulUU  RBA         RAB         RBB         fMulVV      fMulVU      fMulUV      fMulUU
  7. fxch st(2)                          //  RAB         RBA         RAA*fMulUU  RBB         fMulVV      fMulVU      fMulUV      fMulUU
  8. fmul st(0), st(6)                   //  RAB*fMulUV  RBA         RAA*fMulUU  RBB         fMulVV      fMulVU      fMulUV      fMulUU
  9. fxch st(1)                          //  RBA         RAB*fMulUV  RAA*fMulUU  RBB         fMulVV      fMulVU      fMulUV      fMulUU
  10. fmul st(0), st(5)                   //  RBA*fMulVU  RAB*fMulUV  RAA*fMulUU  RBB         fMulVV      fMulVU      fMulUV      fMulUU
  11. fxch st(3)                          //  RBB         RAB*fMulUV  RAA*fMulUU  RBA*fMulVU  fMulVV      fMulVU      fMulUV      fMulUU
  12. fmul st(0), st(4)                   //  RBB*fMulVV  RAB*fMulUV  RAA*fMulUU  RBA*fMulVU  fMulVV      fMulVU      fMulUV      fMulUU
  13. fxch st(2)                          //  RAA*fMulUU  RAB*fMulUV  RBB*fMulVV  RBA*fMulVU  fMulVV      fMulVU      fMulUV      fMulUU
  14. faddp st(1), st(0)                  //  fRAA+fRAB   RBB*fMulVV  RBA*fMulVU  fMulVV      fMulVU      fMulUV      fMulUU
  15. fxch st(2)                          //  RBA*fMulVU  RBB*fMulVV  fRAA+fRAB   fMulVV      fMulVU      fMulUV      fMulUU
  16. faddp st(1), st(0)                  //  fRBA+fRBB   fRAA+fRAB   fMulVV      fMulVU      fMulUV      fMulUU
  17. fxch st(1)                          //  fRAA+fRAB   fRBA+fRBB   fMulVV      fMulVU      fMulUV      fMulUU
  18. faddp st(1), st(0)                  //  fR          fMulVV      fMulVU      fMulUV      fMulUU
  19. fistp dword ptr bChannelData        //  fMulVV      fMulVU      fMulUV      fMulUU


Up> C'est un des 4 canaux d'une de mes routines de ré-échantillonnage.
Mais les 3 autres canaux sont tous plus ou moins différent puisque à la fin, la pile est vidé sans faire le flush.


Message édité par christophe_d13 le 06-09-2004 à 16:33:41
n°843489
prorel
Posté le 06-09-2004 à 16:35:07  profilanswer
 

christophe_d13 a écrit :

prorel> Pas terrible le code... Il est trop linéaire et surtout sur la FPU il est très lent.
L'intérêt de la FPU, c'est de jouer avec ses registres via fxch et de pipeliné à mort les instructions (décalage dans le temps, sachant que le résultat escompté ne sera pas présent avec 2 ou 3 cycles).
 
 


 
ben c'est juste un exemple simple de ce que peut generer VC++, d'ailleurs j'ai vu que sur ce forum, ils ont optimisé leurs declarations, en plus il s'agitr d'un test comparatig entre les differentes plateforme sur des tests d'execution d'operations arithmetiques simples (d'ou l'utilisation d'un C le plus santard possible)
 
et si j'ai repris l'exemple, c'est juste pour montrer que meme le complilateur peut jouer avec la pile


Message édité par prorel le 06-09-2004 à 16:39:32
n°843494
christophe​_d13
L'efficacité à tout prix.
Posté le 06-09-2004 à 16:37:00  profilanswer
 

Tout à fait d'accord.
Mais hélas, il ne sera jamais aussi puissant que notre cerveau. Et dans certains cas, il est même plus lent que la transcription ligne-à-ligne directe.

n°843501
prorel
Posté le 06-09-2004 à 16:40:40  profilanswer
 

ah tu sais par arrport a notre cerveau, la seule force d'une machine c'est la fiabilité de sa memoire, c'est tout

n°843507
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 06-09-2004 à 16:43:39  profilanswer
 

prorel a écrit :

j'ai trouvé un exemple sur un autre forum assez connu:) de la generation d'operations arithmetiques
 
il s'agit d'un extrait d'un exemple de calcul en flottant et en integer
avec le code asm generé


c'est quoi le forum que j'y aille jamais ? [:petrus75]
parce qu'un code pourri comme ça, je suis sur que même en décompilant un executable VB, j'en obtiens pas du comme ça [:petrus75]
y'a rien de parallélisé, c'est hyper lent, bref, c'est d'la merde [:petrus75]
 
edit: [:benou_grilled]


Message édité par Harkonnen le 06-09-2004 à 16:44:20
n°843518
christophe​_d13
L'efficacité à tout prix.
Posté le 06-09-2004 à 16:49:29  profilanswer
 

A mon avis, le code est généré en mode Debug.

n°843526
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 06-09-2004 à 16:56:24  profilanswer
 

christophe_d13 a écrit :

A mon avis, le code est généré en mode Debug.

Clair, je peux pas imaginer que VC++ ponde un truc pareil !
Je testerais sur le 7.1 ce soir

n°843544
AthlonSold​ier
Feel the power
Posté le 06-09-2004 à 17:12:10  profilanswer
 

Taz a écrit :

putain c'est vrai que faut en vouloir pour faire une capture comme ça en jpg. avant de vouloir optimiser le code de ton voisin, commence  la poutre qui est dans ton oeil :o


 :heink:  
I didn't understand  :??:

n°843555
prorel
Posté le 06-09-2004 à 17:23:28  profilanswer
 

Harkonnen a écrit :

c'est quoi le forum que j'y aille jamais ? [:petrus75]
parce qu'un code pourri comme ça, je suis sur que même en décompilant un executable VB, j'en obtiens pas du comme ça [:petrus75]
y'a rien de parallélisé, c'est hyper lent, bref, c'est d'la merde [:petrus75]
 
edit: [:benou_grilled]


j'ai cru comprendre que le but du topic labas, etait surtout de comparer les vitesses des plateformes, pas les qualités des compilos
 
en plus j'ai pris la 2eme page alors qu'ils en etaient a 8 pages, donc je presume qu'ils ont du ameliorer le test
 
quand a paralleliser 4 operations faites pour etre traité sequentiellement, a moins d'avoir une boule de cristal, je ne vois pas bien ce que ca vient foutre la-dedans


Message édité par prorel le 07-09-2004 à 07:36:26
n°843784
bjone
Insert booze to continue
Posté le 06-09-2004 à 23:02:34  profilanswer
 

AthlonSoldier a écrit :

:heink:  
I didn't understand  :??:


png

n°843863
AthlonSold​ier
Feel the power
Posté le 07-09-2004 à 07:25:57  profilanswer
 


Je sais j'y avais pensé vu la grande quantité de blanc  :p  
Mais j'avais deja fait le JPG et j'etais entrain de l'upload...  :sleep:

n°843882
christophe​_d13
L'efficacité à tout prix.
Posté le 07-09-2004 à 08:41:52  profilanswer
 

prorel a écrit :

j'ai cru comprendre que le but du topic labas, etait surtout de comparer les vitesses des plateformes, pas les qualités des compilos
 
quand a paralleliser 4 operations faites pour etre traité sequentiellement, a moins d'avoir une boule de cristal, je ne vois pas bien ce que ca vient foutre la-dedans


C'est justement le but du compilateur de tester de milliers (millions ? milliards ?) de possibilités pour garder la plus efficace selon le profil de génération du code choisi (vitesse, taille...)
Dans ce petit jeu, le compilo d'intel est particulièrement efficace.

n°844295
prorel
Posté le 07-09-2004 à 16:01:28  profilanswer
 

c'est clair, mais comme on ne sait meme pas quel compilo ils ont utilisé, on ne peut rien en dire

n°846047
chrisbk
-
Posté le 09-09-2004 à 15:25:09  profilanswer
 

prorel a écrit :

et tu as vu ce que genere un compilateur bien optimisé?
ptet qu'il joue justement sur les piles
 
j'ai trouvé un exemple sur un autre forum assez connu:) de la generation d'operations arithmetiques
 
il s'agit d'un extrait d'un exemple de calcul en flottant et en integer
avec le code asm generé

----- float ----  
; 113  :   floatResult -= floatCnst;  
 
  00040 d9 45 f4  fld  DWORD PTR _floatResult$[ebp]  
  00043 d8 65 ec  fsub  DWORD PTR _floatCnst$[ebp]  
  00046 d9 55 f4  fst  DWORD PTR _floatResult$[ebp]  
 
; 114  :   floatResult += floatCnst;  
 
  00049 d8 45 ec  fadd  DWORD PTR _floatCnst$[ebp]  
  0004c d9 55 f4  fst  DWORD PTR _floatResult$[ebp]  
 
; 115  :   floatResult /= floatCnst;  
 
  0004f d8 75 ec  fdiv  DWORD PTR _floatCnst$[ebp]  
  00052 d9 55 f4  fst  DWORD PTR _floatResult$[ebp]  
 
; 116  :   floatResult *= floatCnst;  
 
  00055 d8 4d ec  fmul  DWORD PTR _floatCnst$[ebp]  
  00058 d9 5d f4  fstp  DWORD PTR _floatResult$[ebp]  
--------------------------  
 
 
------------int ----------------  
; 85   :   intResult -= intCnst;  
 
  0003d 8b 4d f4  mov  ecx, DWORD PTR _intResult$[ebp]  
  00040 2b 4d ec  sub  ecx, DWORD PTR _intCnst$[ebp]  
  00043 89 4d f4  mov  DWORD PTR _intResult$[ebp], ecx  
 
; 86   :   intResult += intCnst;  
 
  00046 8b 55 f4  mov  edx, DWORD PTR _intResult$[ebp]  
  00049 03 55 ec  add  edx, DWORD PTR _intCnst$[ebp]  
  0004c 89 55 f4  mov  DWORD PTR _intResult$[ebp], edx  
 
; 87   :   intResult *= intCnst;  
 
  0004f 8b 45 f4  mov  eax, DWORD PTR _intResult$[ebp]  
  00052 0f af 45 ec  imul  eax, DWORD PTR _intCnst$[ebp]  
  00056 89 45 f4  mov  DWORD PTR _intResult$[ebp], eax  
 
; 88   :   intResult /= intCnst;  
 
  00059 8b 45 f4  mov  eax, DWORD PTR _intResult$[ebp]  
  0005c 99   cdq  
  0005d f7 7d ec  idiv  DWORD PTR _intCnst$[ebp]  
  00060 89 45 f4  mov  DWORD PTR _intResult$[ebp], eax  
-----------------------  
 




 
ptain, mais c'est du code debug ca :/ y'a pas moins parlant
 
 

n°846053
chrisbk
-
Posté le 09-09-2004 à 15:26:55  profilanswer
 

Harkonnen a écrit :

Clair, je peux pas imaginer que VC++ ponde un truc pareil !
Je testerais sur le 7.1 ce soir


 
videmment que c'est du debug [:petrus75]
 
a votre avis les louloutes, pourquoi le compilo se fait chier a reecrire a chaque fois la variable "destination" d'une expression en mémoire ? pour la beauté du sport ? ou peut etre pour que lorsque l'utilisateur fasse des set next statements dans le debuggueur ca partent pas en couille ?
 
meme mon premier compilo tout pourri, sans alloc de registre autre que "bah heuh, si y'en a un de libre je le prends sinon j'en vire un au bol" faisait mieux que ca


Message édité par chrisbk le 09-09-2004 à 15:31:09
n°846106
prorel
Posté le 09-09-2004 à 16:07:05  profilanswer
 

:D :D
 
c'est vraiment n'importe quoi
vous devriez vous recycler dans la voyance, car vous etes tres fort la dedans: rien qu'avec un extrait de 8 lignes d'un prog en C, sans meme connaitre ni les options de compil, ni les declarations, vous etes capable de sortir des conneries plus grosses que vous
 
je vous laisse continuer, vous etes trop comiques :)

n°846117
chrisbk
-
Posté le 09-09-2004 à 16:11:23  profilanswer
 

prorel a écrit :


c'est vraiment n'importe quoi
vous devriez vous recycler dans la voyance, car vous etes tres fort la dedans: rien qu'avec un extrait de 8 lignes d'un prog en C, sans meme connaitre ni les options de compil, ni les declarations, vous etes capable de sortir des conneries plus grosses que vous


 
si c'est a moi que tu parles : ta gueule

n°846121
prorel
Posté le 09-09-2004 à 16:13:52  profilanswer
 

:D :D

n°846125
chrisbk
-
Posté le 09-09-2004 à 16:16:19  profilanswer
 

ca veut dire quoi ca ?

n°846138
prorel
Posté le 09-09-2004 à 16:22:25  profilanswer
 

t'as raison, continue a nous faire rire
 

n°846142
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 09-09-2004 à 16:24:59  profilanswer
 

prorel a écrit :

t'as raison, continue a nous faire rire

tu sais, le père bk il a pas l'air comme ça, mais il a pas mal fait joujou avec visual C++ et son code généré ! il est en train de faire un langage de script qui s'interface avec Visual, personnellement, s'il dit que c'est du debug, je lui fais davantage confiance qu'à quelqu'un qui passe son temps à balancer des trucs, sans avancer la moindre preuve
 
edit: et chris_d13 a l'air d'avoir pas mal de bouteille aussi, donc idem


Message édité par Harkonnen le 09-09-2004 à 16:28:28
n°846143
chrisbk
-
Posté le 09-09-2004 à 16:25:11  profilanswer
 

Faire rire un ane, j'avoue avoir esperer mieux comme destin.
 
Cela dit, ne va pas croire que ton avis m'interesse. La médiocrité dont tu as fait preuve depuis ton arrivée est constante, ta mauvaise foi va crescendo et ta nullité dors et déja maximale.  
 
 

n°846147
chrisbk
-
Posté le 09-09-2004 à 16:29:36  profilanswer
 

je suis trop bon, voila ce que sors VS7.1


intResult -= intCnst;  
004157EC 8B 45 F8         mov         eax,dword ptr [intResult]  
004157EF 2B 45 EC         sub         eax,dword ptr [intCnst]  
004157F2 89 45 F8         mov         dword ptr [intResult],eax  
 intResult += intCnst;  
004157F5 8B 45 F8         mov         eax,dword ptr [intResult]  
004157F8 03 45 EC         add         eax,dword ptr [intCnst]  
004157FB 89 45 F8         mov         dword ptr [intResult],eax  
 intResult *= intCnst;  
004157FE 8B 45 F8         mov         eax,dword ptr [intResult]  
00415801 0F AF 45 EC      imul        eax,dword ptr [intCnst]  
00415805 89 45 F8         mov         dword ptr [intResult],eax  
 intResult /= intCnst;  
00415808 8B 45 F8         mov         eax,dword ptr [intResult]  
0041580B 99               cdq              
0041580C F7 7D EC         idiv        eax,dword ptr [intCnst]  
0041580F 89 45 F8         mov         dword ptr [intResult],eax


 
Grand jeu :
1/ Cherche les ressemblances entre ce code et le code posté plus haut
2/ Devine en quel mode j'ai compilé ca
 

n°846152
prorel
Posté le 09-09-2004 à 16:37:34  profilanswer
 

Harkonnen a écrit :

tu sais, le père bk il a pas l'air comme ça, mais il a pas mal fait joujou avec visual C++ et son code généré ! il est en train de faire un langage de script qui s'interface avec Visual, personnellement, s'il dit que c'est du debug, je lui fais davantage confiance qu'à quelqu'un qui passe son temps à balancer des trucs, sans avancer la moindre preuve
 
edit: et chris_d13 a l'air d'avoir pas mal de bouteille aussi, donc idem


 
moi je vous laisse parler, ca m'amuse de voir comment qq peut partir dans des hypothese farfelues, pour essayer de jouer au grand, quand il saura la verité, je pense qu'il va y avoir un grand moment de sollitude pour le soi-disant crack en informatique
 
allez je vous donne deja une piste, c'est du vc6 et non du vc7
et 2eme piste: sur ce premier jet, il y avait une erreur de declaration
 
coté chris_d13, a priori il n'est pas aussi affirmatif :D que l'extralucide, et ce qu'il dit est sensé, lui au moins


Message édité par prorel le 09-09-2004 à 16:38:40
n°846155
chrisbk
-
Posté le 09-09-2004 à 16:45:39  profilanswer
 

je me bornerais a signaler que vc6 date d'avant 1998 (donc niveau "compilo d'aujourd'hui", tu repasseras, merci) (c'est dans le titre du topic, si tu trouves pas d'ou je sors ca) et qu'il dispose d'un mode release. (enfin si tu fous tout en volatile aussi, hein, faut pas s'etonner)

n°846157
prorel
Posté le 09-09-2004 à 16:46:14  profilanswer
 

chrisbk a écrit :

je suis trop bon, voila ce que sors VS7.1*
...
Grand jeu :
1/ Cherche les ressemblances entre ce code et le code posté plus haut
2/ Devine en quel mode j'ai compilé ca


 
pour une fois essaye d'avoir un minimum de rigueur, et donne les options choisies pour la complie et l'origine de ta source (listing vc, desassembleur, windebug, etc, ??)

n°846159
chrisbk
-
Posté le 09-09-2004 à 16:48:58  profilanswer
 

prorel a écrit :

pour une fois essaye d'avoir un minimum de rigueur, et donne les options choisies pour la complie et l'origine de ta source (listing vc, desassembleur, windebug, etc, ??)


 
Code source :

Code :
  1. int intResult=0, intCnst = 15;
  2. intResult -= intCnst; 
  3. intResult += intCnst; 
  4. intResult *= intCnst; 
  5. intResult /= intCnst;


 
Provenance du post :
clic droit->go to disassembly
 
option de compilation : mode debug standart (rien changé)
 

n°846162
prorel
Posté le 09-09-2004 à 16:51:16  profilanswer
 

chrisbk a écrit :

je me bornerais a signaler que vc6 date d'avant 1998 (donc niveau "compilo d'aujourd'hui", tu repasseras, merci) (c'est dans le titre du topic, si tu trouves pas d'ou je sors ca) et qu'il dispose d'un mode release. (enfin si tu fous tout en volatile aussi, hein, faut pas s'etonner)
moi ce qui m'etonne c'est que tu puisse faire des affirmations peremptoires sans rien savoir de du contenu du source en "C", de la methode utilisé, ni des options choisies


 
et alors, c'est pas parcequ'il existe une version 7 qu'il est interdit de compiler avec la v6, c'est n'importe quoi là!!
si le mec n'a que la v6, c'est son droit!!
surtout si comme moi, il a horreur de .net, rien que ca, justifie amplement le fait de ne pas utiliser la VS7

n°846169
prorel
Posté le 09-09-2004 à 16:57:04  profilanswer
 

chrisbk a écrit :

Code source :

Code :
  1. int intResult=0, intCnst = 15;
  2. intResult -= intCnst; 
  3. intResult += intCnst; 
  4. intResult *= intCnst; 
  5. intResult /= intCnst;


 
Provenance du post :
clic droit->go to disassembly
 
option de compilation : mode debug standart (rien changé)


 
pour etre plus precis, ces operations sont dans une boucle for i, donc utilisation des registres d'une autre façon
mais c'est un detail, maintenant montre nous en compile "release"??, pour voir la difference
 
et dans ton test, tu n'a pas mis les operations en flottant, car c'est aussi interressant de voir comment il fait avec le fpu
l'inforamtique c'est precis, il ne faut pas faire de l'a_peu_pres


Message édité par prorel le 09-09-2004 à 16:59:25
n°846181
christophe​_d13
L'efficacité à tout prix.
Posté le 09-09-2004 à 17:10:53  profilanswer
 

Pour illustrer ce topic.
 

Code :
  1. int TestCompilation ( void )
  2. {
  3.     int intResult=0, intCnst = 15;
  4.     int i,n;
  5.     n = rand();
  6.     for (i=0;i<n;i++)
  7.     {
  8.         intResult -= intCnst; 
  9.         intResult += intCnst; 
  10.         intResult *= intCnst; 
  11.         intResult /= intCnst;
  12.     }
  13.     return intResult;
  14. }


 
La transcription en ASM par VC++ 6 (SP5+PP5)
Optimisation maximale pour la vitesse (et d'autres options spécifiques dans les options)
 

Code :
  1. ; 319  : {
  2. push esi
  3. ; 320  :     int intResult=0, intCnst = 15;
  4. xor esi, esi
  5. ; 321  :     int i,n;
  6. ; 322  :
  7. ; 323  :     n = rand();
  8. call _rand
  9. ; 324  :     for (i=0;i<n;i++)
  10. test eax, eax
  11. jle SHORT $L69005
  12. push edi
  13. mov edi, eax
  14. $L68682:
  15. ; 325  :     {
  16. ; 326  :         intResult -= intCnst; 
  17. ; 327  :         intResult += intCnst; 
  18. ; 328  :         intResult *= intCnst; 
  19. lea eax, DWORD PTR [esi+esi*2]
  20. lea ecx, DWORD PTR [eax+eax*4]
  21. ; 329  :         intResult /= intCnst;
  22. mov eax, -2004318071   ; 88888889H
  23. imul ecx
  24. add edx, ecx
  25. sar edx, 3
  26. mov eax, edx
  27. shr eax, 31     ; 0000001fH
  28. add edx, eax
  29. dec edi
  30. mov esi, edx
  31. jne SHORT $L68682
  32. pop edi
  33. $L69005:
  34. ; 330  :     }
  35. ; 331  :
  36. ; 332  :     return intResult;
  37. mov eax, esi
  38. pop esi
  39. ; 333  : }
  40. ret 0

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  6

Aller à :
Ajouter une réponse
 

Sujets relatifs
Compilateurs, librairies, projets... comment organiser ses dossiers?Compilateurs...
Livres sur la conception des compilateurs / cours / ouvrage en ligneles Compilateurs, Editeurs, IDE pour le Java [listing inside]
Comment recuperer la date d'aujourd'hui et la foutre en CString ?Commencez en c++ Réferences ? compilateurs ?
[MA VIE] tin aujourd'hui j'ai pris une leçon d'humilité !!!phpBB 2 final sort aujourd'hui
Compilateurs inside[C++] Anomalies compilateurs
Plus de sujets relatifs à : Fantastique les compilateurs d'aujourd'hui


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)