CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C++/asm] problème stupide

dnob700
dnob700
Niveau 10
13 mai 2005 à 23:52:38

j´ai un problème qui est vraiment stupide mais je ne vois pas de moyen de le contourner :

j´ai écrit en asm des fonction mathématique pour ma lib mais qui sont plus lentes du fait du passage des arguments qui doit se faire d´abord dans la pile du programme avant d´être fait dans la pile du FPU.

La solution que j´ai trouvé à ce problème est d´écrire ma fonction qui ne prendrait aucun argument et d´écrire une macro qui se chargerait de pousser ses argument directement dans la pile du FPU avant d´appeler ma fonction.

Le seul problème c´est que pour pousser les argument dans la pile du FPU il faut de l´asm inline hors sur une seule ligne ( contrainte imposé par l´écriture de macro) je ne peut mettre qu´une instruction asm.
j´ai essayé des astuce dans le genre :

  1. define pow(x,y) ( __asm {FLD y},__asm{FLD x},SPC_pow())

mais ça ne vas pas.

si quelqu´un avait une idée ça me serait très utile.

merci.

pouky10
pouky10
Niveau 6
14 mai 2005 à 01:48:12

Je ne connais pas l´asm, mais sais tu que si tu fais \ ou / tu peux étendre la macro sur plusieur ligne.

Lapintade
Lapintade
Niveau 30
14 mai 2005 à 11:46:54

Il faut comprendre d´ou vient la comptraine.
Le fait de faire un define, va simplement te remplacer du texte par un autre pendant le preprocess.
Essaie ce que dit pouky10, c´est pas bete.

LGV
LGV
Niveau 28
14 mai 2005 à 14:30:18

et je confirme que ça marche tres bien...

dnob700
dnob700
Niveau 10
14 mai 2005 à 21:10:56

merci beacoup.
comme quoi même quand on pense connaitre les bases il reste toujours quelquechose à apprendre.

Ca m´a permis de pas mal progresser, mais voici ce que ça donne :

double SPC_pow();

  1. define pow(x,y) __asm {FLD y} \

__asm {FLD x} \
SPC_pow()

le problème c´est que maintenant j´aimerais récupérerla valeur renvoyé par la fonction SPC_pow()

pour ça j´ai pensé à utiliser les parenthèse ( __asm{FLD y},...,SPC_pow()) seulement il semble qu´il ne vuille pas que j´utilise le mot clef asm à l´intérier des parenthèse ( ce qui ne m´étonne qu´à moitié.

donc même si je ne rêve pas de pouvoir utilser ça à l´intérieur d´une expression normale j´aimerais bien savoir si vous n´avez pas di´dée sur le sujet.

D´ailleur au passage j´ai compris pourquoi il est si difficile d´aller plus vite que la bibliothèque math.h ( je fait 1.2e-3 secondes pour 10 000 exponentiations là où ça lui en prend 2.7 mais c´est emporté de haute lutte) car en fait les compilo moderne ( VC++ et gcc en tout cas)considère les fonction de math.h plutot comme des mots clef du langage et les fonctions sont implémentées dans le compilateur et pas dans une lib ce qui fait qu´il y a une optimisation qui est bien meilleur que tout ce dont on pourrait rêver ( pas de passage des arguments, tout en ayant une structure plus souple que si c´était des fonction inliner avec les problèmes d´optimisation que ça entraine).

pouky10
pouky10
Niveau 6
16 mai 2005 à 23:04:19

Pouvez-vous me donnez un tutoriel où on peut apprendre l´asm, du moins celui pour le c++ et un tuto pour faire de l´asm en c++?

roger_barry
roger_barry
Niveau 10
16 mai 2005 à 23:49:07

Sur developpez il y a un tuto d´asm.

dnob700
dnob700
Niveau 10
17 mai 2005 à 00:05:16

bof, je suis jamais tombé sur quelque chose d´agrable et simple comme tuto asm.

JE crois que c´est vraiment le domaine où une fois que t´as pigé les bases tu doit apprendre seul en codant. Moi pour ça j´ai utilisé la doc d´Intel que je te recommande ( en cherchant un peu ( beaucoup) tu dois pouvoir la trouver sur leur site), elle décrit toute les instructions pour un processeur donné ( disont le P4 pour les docs récente).

pouky10
pouky10
Niveau 6
17 mai 2005 à 00:12:14

Et si jai un amd atlon, ca fonctionne?

roger_barry
roger_barry
Niveau 10
17 mai 2005 à 00:17:21

Non vaq falloir t´aprenne l´assembleur pour ce type de processeur, mais finalement je sais pas trop . .. Athlon il fait des processeur de la famille des x86?

pouky10
pouky10
Niveau 6
17 mai 2005 à 00:28:47

Aucune idée

dnob700
dnob700
Niveau 10
17 mai 2005 à 19:56:02

mais si les proco d´amd et d´intel ont quelques différences que des programmes spécialisé exploite. Mais globalement pour que les programme tourne sur les deux processeur, ils utilisent le même jeux d´instruction ( enfin les pentium et les athlon et quelques autre dit efectivement x86).

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment