5 x 4 = 6912
Posté le 24/11/2021 22:25
Bonjour à tous,
Avec ce bon titre putaclic j'attire du monde afin de, je l'espère, trouver la raison de ce "bug".
J'ai du code qui tourne en boucle, sans timer (volontairement utilisé en tout cas) qui me renvoie, de façon assez aléatoire de calcul totalement aberrants.
Aléatoire dans le sens où , mon code tourne pendant x frames nickel, et puis d'un coup PAF ! j'ai une valeur aberrante qui surgit.
En isolant le code je suis arrivé à trouvé l'endroit du code exact
int w
int h
int nbw_tex
...
if ((w >> 3) + (h * nbw_tex) > 32*32)
{
debug_pop("sup %i", (w >> 3) + (h * nbw_tex));
debug_pop("sup %i %i %i", w, h, nbw_tex);
debug_pop("sup %i", h * nbw_tex);
}
J'ai isolé la valeur aberrante avec un if, la valeur ne doit pas pouvoir dépasser 32x32 (taille d'une texture)
Or, le code me renvoie les valeurs suivantes :
>>>6912
>>>5 5 4
>>>6912
Autrement dit h * nbw_tex = 5*4 = 6912
J'obtiens aussi le pattern suivant
>>>425201761
>>>15 14 4
>>>425201760
On remarque que lorsque w>>3 = 0 j'ai des nombres autour de 6000 et quand w>>3 = 1 j'ai des nombres autour de 425201760.
Alors, soit j'ai pas les yeux en face des trous, soit le processeur est en carton
Vous auriez une idée ?
Citer : Posté le 24/11/2021 22:29 | #
les << et >> manipule les bits d'une variable, je suis pas si c'est volontaire mais un un bit décalé ça multiplie par 2 ou divisse par 2 (pour un X << 1)
Ajouté le 24/11/2021 à 22:33 :
https://zestedesavoir.com/tutoriels/755/le-langage-c-1/notions-avancees/manipulation-des-bits/
Citer : Posté le 24/11/2021 22:38 | #
Je suis au courant, c'est volontaire, c'est une optimisation de la division par 8
Citer : Posté le 24/11/2021 22:42 | #
bah, la on dirait que tu as multiplié, sinon si c’est un float ça marchera pas, les valeurs sont codé différamment
Citer : Posté le 25/11/2021 03:51 | #
J'ai essayé quelques manipulations binaires pour voir si j'arrivais à identifier un schéma et rien de mon côté. C'est pour quelle plateforme ? Est-ce que tu as tenté de lire l'assembleur généré par le compilateur pour voir si une instruction est pas utilisée incorrectement, ou tenté d'utiliser des unsigned voir si c'est pas le bit de signe qui fait des siennes ?
Mon blog ⋅ Mes autres projets
Citer : Posté le 25/11/2021 06:52 | #
À tous les coups c'est une interruption qui modifie mach/macl... même si j'ai déjà corrigé un tel bug et je vois pas quelle interruption ferait une multiplication dans le coin.
Dans tous les cas ça doit bien être le même bug que celui que je suis en train de chasser... rien que le "après X frames PAF" est un énorme indice.
Citer : Posté le 25/11/2021 13:53 | #
Très bien, si besoin je peux partager le code si ça peut permettre d'isoler plus facilement le bug
@Cake : j'ai pensé a du unsigned mais j'ai rien trouvé de ce côté là
@Lephé : dans ce cas, je fais comme si il n'y avait pas de bug en espérant une correction de ta part Lephé
Citer : Posté le 25/11/2021 13:55 | #
Je sais d'où viens le problème Lephe, dans le fichier gint/src/kernel/inth.S, ligne 137, tu restaures mach puis macl alors que ça devrais être l'inverse (?)
Citer : Posté le 25/11/2021 14:02 | #
HA HA HA ! Elle est excellente celle-là. Beau coup d’œil de lynx Yatis, merci.
Citer : Posté le 25/11/2021 16:36 | #
Super Yatis, j'ai fait la modif moi même de inth.S et je te confirme que je n'ai plus de bug
Tu me dois une soirée complète de debuggage Lephé Haha
Citer : Posté le 25/11/2021 16:59 | #
Le bug est extrêmement fourbe à trouver hein ?
Heureusement que j'avais du toucher aux gestionnaires d'interruptions quand j'avais voulus ajouter les threads dans gint (à savoir que je risque d'en reparler dans les prochaines semaines) et que je me sois souvenue que MACL et MACH (les registres utilisés pour les multiplications) étaient utilisés là. C'est juste improbable en fait
Citer : Posté le 25/11/2021 17:04 | #
Et puis le truc quoi, je les ai mis dans le bon ordre sur SH4 mais pas sur SH3. Vraiment merci Yatis x)
Aussi y'a une probabilité non-nulle pour que ce soit aussi à l'origine de l'autre problème de crash Ninestars. Je te dis ce soir.
Citer : Posté le 25/11/2021 21:26 | #
10 coups de fouet pour Lephenixnoir
Vitesse des fonctions en Basic Casio | 7 days CPC | Casio Universal Wiki | Tutoriel Basic Casio
>>> Give me a click Brother <<< >>> Teste mon générateur de mots nouveaux <<<
>>> Random Youtube Video <<<
Citer : Posté le 25/11/2021 22:28 | #
En même temps l'avatar de 9* est une éponge, c'est normal que ce soit lui qui essuie les plâtres !
La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Citer : Posté le 26/11/2021 06:41 | #
Passe sur une calto SH4 Ninestars, il reste plus que toi
Citer : Posté le 26/11/2021 08:19 | #
Haha Neotux, elle est pas mal celle là
C’est prévu justement Lephé, je rachète à Neotux celle qu'il a tout fraîchement gagné
C’est que je l'aime ma SH3 de la seconde... c’est sentimental j'ai passé tellement d'heure dessus que j'ai pas envie de m'en séparé au premier nouveau processeur venu