oui, j'ai oublié de préciser que je bosse sur une adaptation d'un jeu d'arcade, afin de tester en condition réelle, pour voir jusqu'où je peux aller en fait.
vince Le 03/07/2012 à 20:23 ce sont tes multiplications qui foutent la merde...
en plus, X*8, c'est mieux de le faire en X lshift 3 (qui s'écrit généralement X<<3 )
for(lecx=(grpx*8) ; lecx<(grpx*8)+8; lecx++)
ça serait plus rapide avec un
truc=grpx*8;for(lecx=truc ; lecx<truc+8; lecx++)
sinon à la première boucle il doit calculer grpx*8 et il le refait à chaque boucle dans le test...
vince Le 03/07/2012 à 20:28 chose à savoir sur les boucles : à chaque test, il ne faut pas avoir à refaire un calcul
vince Le 03/07/2012 à 20:30 je suis pas ingénieur non plus
et même si c'est ce qu'ils marquent sur les feuilles de paie, de statut toussa... j'ai jamais passé le diplome...
Pen^2 Le 03/07/2012 à 21:19 Lshift (L comme Left, je suppose)
En binaire, un décalage vers la gauche de n bits correspond à une multiplication par deux puissance n (de la même manière qu'ajouter n zéros à droite multiplie par dix puissance n en base décimale)
Or, 2^3=8, donc décaler un entier à gauche de trois bits retourne cet entier multiplié par 8.
Mais bon, en pratique j'imagine que ton compilateur applique déjà ce genre d'optimisations.
Zeph Le 03/07/2012 à 21:47 J'imagine que Pen^2 voulait dire que les multiplications par 2^N sont automatiquement optimisées en décalages de N bits par le compilateur et que ça ne sert donc à rien de rendre le code moins lisible en écrivant ce genre d'opération explicitement, ce en quoi je crayonne.
(par contre, ça n'est pas forcément vrai pour les décalages vers la droite, selon que le nombre est signé ou non)

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
Si c'est l'ancien compilo C pour la Lynx, il est pourri (mais vraiment), donc ça m'étonnerait pas du tout qu'il n'optimise pas les multiplications/division par 2N.

—
Zeroblog —
« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » —
Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » —
GT Turbo Maeel Le 04/07/2012 à 03:52 Oui c'est clairement ton code C qu'il faut revoir avant de passer en ASM.
C'est difficilement comprehensible.
Je n'ai pas regarde en details, pas facile de voir ce qui est faisable sans comprendre ce que tu souhaites faire, mais tu peux peut etre :
* sortir ton if (level==1) de la derniere boucle
* supprimer if (tile_x == 2+lecx) et l'incorporer dans la boucle lecx directement
* fusionner grpx et lecx.
* Te separer des multiplications, les * 7, *24, %29 en particulier (changement de l'algo, tableau pre-calcule, increment (comptey+=24), ...), c'est tres couteux sur la lynx
* Derouler ta boucle comptey
* Utiliser le type le plus petit possible pour tes donnees et variable et unsigned si possible, i.e. tes trucs de 0 a 6 ou 0 a 7 n'ont pas besoin d'etre int.
* Ne pas refaire les meme calculs 50 fois, i.e. ton grpx * 8, comptex * 24, &SCB[tlnb][ 0]
* Avoir des tableaux de taille en ^ 2.([comptex][comptey] a besoin d'etre calcule donc avec des tailles en ^2 les shifts sont utilisables)
Tu n'as que l'embarra du choix, pas necessairement utile de la passer en ASM maintenant.