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
    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
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.

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/