Logicielsmoto.com http://www.logicielsmoto.com/phpBB/ |
|
Optimisation d'algorithmes arithmetiques http://www.logicielsmoto.com/phpBB/viewtopic.php?f=3&t=199 |
Page 1 sur 1 |
Auteur: | Tomix3 [ 30 Aoû 2006, 09:28 ] |
Sujet du message: | Optimisation d'algorithmes arithmetiques |
Je reprends ici les histoires de racine carree, de division, voire d'autre chose... Je posterai ma racine carree 16 bits quand je rentrerai chez moi. Y a pas mal d'optimisation a voir dessus, a mon avis. a+ Seg. |
Auteur: | PulkoMandy [ 07 Fév 2011, 22:49 ] |
Sujet du message: | |
Hop c'est encore moi Je cherche un moyen rapide (si possible) de calculer 1<<n (ou 2^n) sur 16 bits. J'ai une solution sur 8 bits (je ne sais pas si c'est la plus efficace...) : Code: ORCC 1 ; set carry
loop ASL B DECA BHS loop Mais sur 16 bits je sais pas trop comment m'y prendre. Je ne sais pas s'il est plus malin de faire A=B=2 puis MUL;TFR B,A tant que n!=0, ou si une solution à base de ASL A;ASL B serait plus efficace. D'autres idées ? |
Auteur: | gilles [ 08 Fév 2011, 23:53 ] |
Sujet du message: | |
et une petite table de 16 entrées genre matable DC.B 00,01 DC.B 00,02 ... DC.B $80,00 un ASLB pour multiplier par 2 , un U qui pointe au debut de la table puis un LDX [U,B] (ou un truc qui s'en rapproche, enfin un truc indexé...). ca doit pas faire lourd en cycles et ca prend grosso modo 40 octets. |
Auteur: | PulkoMandy [ 09 Fév 2011, 08:12 ] |
Sujet du message: | |
Ah oui c'est pas bête ça J'vais essayer .. |
Auteur: | Samuel Devulder [ 03 Oct 2017, 18:03 ] |
Sujet du message: | Re: Optimisation d'algorithmes arithmetiques |
Au travers de mes essais de code je suis tombé sur une astuce intéressante. J'avais un résultat intermédiaire dont le bit Z(ero) du registre de condition m'intéressait un peu plus loin dans le code. Or les instructions en chemin détruisent très vite ce bit Z. Exemple Code: cmpb #$AA ldb #$55 ; ou n'importe quoi qui change Z beq XXXX ; <== mais basé sur la valeur du cmpb J'ai bien pensé faire un "pshs cc/puls cc" pour récupérer le bit Z plus loin, mais c'est plutot lent. En fait j'ai trouvé un truc qui me plait bien et que je vous partage ici Code: cmpb #$AA Le NEGB transfert le contenu du bit Z (en fait son inverse) dans la carry qui elle resiste bien plus longtemps, permettant d'utiliser un BCC à la place du BEQ à la fin.NEGB ; CC=0 ssi Z==1 ldb #$55 ; CC est inchangé bcc XXXX ; <== tester CC ici revient à tester la valeur de Z juste avant le NEGB C'est rigolo, non? |
Page 1 sur 1 | Heures au format UTC + 1 heure |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |