j´ai posé cette question sur cdj, mais j´ai pas eu de réponse. je sais pas si c´est passé inapercu ou si personne ne sait.
une petite questoin d´effet de bord :
Ma librairie, fournie des fonctions mathématiques simple mais imprécise ( et puis lente). Ce qui fait qu´ailleurs dans le code quand j´ai besoin de fonction du style sqrt ou cosinus j´utilise math.h.
Mais je me suis dit que réécrire ces fonction est très simple avec le FPU, juste quelques lignes d´assembleur et c´est fait.
Bon, mon problème c´est si je charge un nombre dans la pile du FPU je la modifie, je risque peut-être d´en faire sortir quelque chose qui y était.
Est-ce qu´il faut donc je sauvegarde avant la pile et que je la restore après ( c´est long), où alors le compilo qui utilisera ma lib ( VC ou mingw pour information) vera que je modifie le pile et fera gaffe à ça tout seul ?
sachant qu´à la fin je remet la pile dans son état initial sauf si j´ai fait sortir des éléments par le " haut" de la pile.
En peu après et quelques tests plus tard . ..
j´ai regardé comment c´était écrit dans math.h ( enfin dans la lib qu´il utilise) et j´ai pas tout a fait compris ( j´ai regardé pour la fonction fmod) : apparement il ne sauvegarde pas le registre FPU ( il fait même plutot peu d´opération dessus ( mais quelques une qui donne l´impression d´être inutle ( il charge les opérande dans le mauvais sens alors ensuite il les inverse).
Par contre et il fait des dizaines d´opération que je n´ai pas suivit en modifiant tout un tas de valeurs un peu partout.
Je veux dire, est ce qu´il y a réellement quelque chose à controler quand on fait ce genre d´opération ou passer les bon arguments suffit.
Pour information je vous mets la fonction que j´utilise pour fmod :
double fmod(double x, double y)
{
__asm
{
FLD y;
FLD x;
FPREM; ST(0)=ST(0) mod ST(1)
FSTP x;
FFREE ST(0);
FINCSTP;
}
return x;
}
bon si quelqu´un a une réponse pour l´une de ces questions, ou une idée ou une piste...
Merci beaucoup d´avance.