1

Serai t-il possible de trouver sur le Net une doc sur l'optimisation des instructions pour gagner en taille et en vitesse. J'ai bien celle sur leur temps d'éxécution mais bon...

En lisant différents topics, j'ai trouvé plein de petits trucs. mais je chercherai une synthèse de tout çagrin

2

avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

3

Mercigrin

4

Encore une petit problème d'optimisation. Bon, j'y vais:

Remplacement de muls.w #30,d1 par:

asl.w #5,d1
sub 6(a7),d1
sub 6(a7),d1

en clair: d1.w=d1.w*30
avec 6(a7) correspondant à d1.w

Je voudrais savoir si il n'y a pas mieux comme optimisation ou si tout simplement ca n'optimise pas du toutsmile

Si y'en a qui fréquente les libs d'affichage de sprites, c ce qu'on est obligé de mettre pour faire 30*y...

Merci de votre attentioncool

5

Je precise, c en VITESSE que je veut optimiser!!!!
Pour quelques octets de plus ou de moin...

6

Ze best en vitesse :
 add.w   d1,d1
 move.w  d1,d0
 asl.w   #4,d1
 sub.w   d0,d1

Ca correspond à :
 d1+= d1;
 d0= d1;
 d1*= 16;
 d1-= d0;


Pour information, il faut passer par la lecture de tables précalculées si on veut aller encore plus vite.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

7

Bien vu mais plutô torduttongue

ca me fait du 18/24 cycles contre 22/32

8

>> Bien vu mais plutô tordu
confus t'as voulu un code optimisé !
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

9

Mais j'ai rien dit, c du bon codegrin

10

Est ce que quelqu'un pourrai me donner les temps d'éxecutions des intructions suivantes:

adda
suba
movea
cmpa

Car dans la doc que j'ai, il n'y a rien (à croire que celui qu'il l'a fait en voulait aux instructions finissant par 'a'grin donc toutes celles qui impliquent des registres an)

11

Bon ta doc n'a vraiment pas l'air terrible roll Voici la mienne :

SHIZUKA a le plaisir de vous présenter cette table des cycles du 68000
réalisée en deux portions de soirées avec les aides appréciables de:

craft2 ( stedi )
disque dur ( ouaaaah la vitesse )
"guide des instructions du 68000 , vol 2 de NACHTMANN chez PUBLITRONIC "

merci de diffuser cette table sans modifier l'en tête

calcul de l'adresse effective

                b/w     l

dn              0       0
an              0       0
(an)            4       8
(an)+           4       8
-(an)           6       10
d16(an)         8       12
d8(an,xi)       10      14
abs.w           8       12
abs.l           12      16
d16(pc) 8       12
d8(pc,x1)       10      14
imm             4       8


move.b et move.w

            dn   an   (an)   (an)+   -(an)   d16(an)  d8(an,xi)   abs.w   abs.l 
dn           4    4    8      8        8       12       14         12      16
an           4    4    8      8        8       12       14         12      16
(an)         8    8    12     12       12      16       18         16      20
(an)+        8    8    12     12       12      16       18         16      20
-(an)        10   10   14     14       14      18       20         18      22
d16(an)      12   12   16     16       16      20       22         20      24
d8(an,xi)    14   14   18     18       18      22       24         22      26
abs.w        12   12   16     16       16      20       22         20      24
abs.l        16   16   20     20       20      24       26         24      28
d16(pc)      12   12   16     16       16      20       22         20      24
d8(pc,x1)    14   14   18     18       18      22       24         22      26
imm          8     8   12     12       12      16       18         16      20

move.l

            dn   an   (an)   (an)+   -(an)   d16(an)  d8(an,xi)   abs.w   abs.l 
dn           4    4    12     12       12      16       18         16      20
an           4    4    12     12       12      16       18         16      20
(an)         12   12   20     20       20      24       26         24      28
(an)+        12   12   20     20       20      24       26         24      28
-(an)        14   14   22     22       22      26       28         26      30
d16(an)      16   16   24     24       24      28       30         28      32 
d8(an,xi)    18   18   26     26       26      30       32         30      34
abs.w        16   16   24     24       24      28       30         28      32
abs.l        20   20   28     28       28      32       34         32      36
d16(pc)      16   16   24     24       24      28       30         28      32
d8(pc,x1)    18   18   26     26       26      30       32         30      34
imm          12   12   20     20       20      24       26         24      28



                op(ea),an       op(ea),dn       op dn,(m)

add.b           -               4+              8+
add.w           8+              4+              8+
add.l           6+&             6+&             12+
and.b           -               4+              8+
and.w           -               4+              8+
and.l           -               6+&             12+
cmp.b           -               4+              -
cmp.w           6+              4+              -
cmp.l           6+              6+              -
divs            -               158+*           -
divu            -               140+*           -
eor.b           -               4+              8+
eor.w           -               4+              8+
eor.l           -               8+              12+
muls            -               70+*            -
mulu            -               70+*            -
or.b            -               4+              8+
or.w            -               4+              8+
or.l            -               6+&             12+
sub.b           -               4+              8+
sub.w           8+              4+              8+
sub.l           6+&             6+&             12+



+ = rajouter le temps de calcul de l'adresse effective
& = raouter 2 périodes d horloge pour les modes an dn et immédiat
* = durée max


                op #,dn         op #,an         op #,m

addi.b          8               -               12+
addi.w          8               -               12+
addi.l          16              -               20+
addq.b          4               -               8+
addq.w          4               8               8+
addq.l          8               8               12+
andi.b          8               -               12+
andi.w          8               -               12+
andi.l          16              -               20+
cmpi.b          8               -               8+
cmpi.w          8               -               8+
cmpi.l          14              -               12+
eori.b          8               -               12+
eori.w          8               -               12+
eori.l          16              -               20+
moveq           4               -               -
ori.b           8               -               12+
ori.w           8               -               12+
ori.l           16              -               20+
subi.b          8               -               12+
subi.w          8               -               12+
subi.l          16              -               20+
subq.b          4               -               8+
subq.w          4               8               8+
subq.l          8               8               12+

+ = rajouter le temps de calcul de l'adresse effective


                registre        mémoire

clr.b               4             8+
clr.w               4             8+
clr.l               6             12+
nbcd                6             8+
neg.b               4             8+
neg.w               4             8+
neg.l               6             12+
negx.b              4             8+
negx.w              4             8+
negx.l              6             12+
not.b               4             8+
not.w               4             8+
not.l               6             12+
scc ( cc=0 )        4             8+
scc ( cc=1 )        6             8+
tas                 4             10+
tst.b               4             4+
tst.w               4             4+
tst.l               4             4+

+ = rajouter le temps de calcul de l'adresse effective


                   registres      memoire

asr.b  & asl.b        6+2n
asr.w  & asl.w        6+2n          8+
asr.l  & asl.l        8+2n
lsr.b  & lsl.b        6+2n
lsr.w  & lsl.w        6+2n          8+
lsr.l  & lsl.l        8+2n
ror.b  & rol.b        6+2n
ror.w  & rol.w        6+2n          8+
ror.l  & rol.l        8+2n
roxr.b & roxl.b       6+2n
roxr.w & roxl.w       6+2n          8+
roxr.l & roxl.l       8+2n


+ = rajouter le temps de calcul de l'adresse effective
n est le nombre de rotations ou de décalages successifs

          dynamique     dynamique       statique        statique
          registre      mmemoire        registre        memoire

bchg.b        -            8+              -              12+
bchg.l        8*           -               12*            -
bclr.b        -            8+              -              12+
bclr.l        10*          -               14*            -
bset.b        -            8+              -              12+
bset.l        8*           -               12*            -
btst.b        -            4+              -              8+
btst.l        6            -               10             -


+ = rajouter le temps de calcul de l'adresse effective
* = durée max


              branchement       pas de
              effectué          branchement

bcc.s              10             8
bcc.l              10             12
bra.s              10             -
bra.l              10             -
bsr.s              18             -
bsr.l              18             -
dbcc cc=1          -              12
dbcc cc=0          10             14




         (an)  (an)+  -(an)   16(an) d8(an,xi)  abs.w  abs.l d16(pc) d8(pc,xi)

jmp        8      -     -       10      14        10      12     10     14      
jsr        16     -     -       18      22        18      20     18     22
lea        4      -     -       8       12        8       12     8      12
pea        12     -     -       16      20        16      20     16     20
movem.w    12+4n  12+4n -       16+4n   18+4n     16+4n   20+4n  16+4n  18+4n
(m->r)       
movem.l    12+8n  12+8n -       16+8n   18+8n     16+8n   20+8n  16+8n  18+8n
(m->r)
movem.w    8+4n   -     8+4n    12+4n   14+4n     12+4n   16+4n  -      -
(r->m)
movem.l    8+8n   -     8+8n     12+8n  14+8n     12+8n   16+8n  -      -
(r->m)


n est le nombre de transferts de registra à effectuer


             op dn,dn      op m,m

addx.b          4            18
addx.w          4            18
addx.l          8            30
cmpm.b          -            12
cmpm.w          -            12
cmpm.l          -            20
subx.b          4            18
subx.w          4            18
subx.l          8            30
abcd            6            18
sbcd            6            18



                68000           68000
                r->m            m->r

movep.w          16               16
movep.l          24               24



                        68000           68000
                        registre        mémoire

andi to ccr                20              -
andi to sr                 20              -
chk ( sans trap )          10              -
eori to ccr                20              -
eori to sr                 20              -
exg                        6               -
ext                        4               -
link                       16              -
move to ccr                12              12&
move to sr                 12              12&
move from sr               6               8&
move usp                   4               -
nop                        4               -
ori to ccr                 20              -
ori to sr                  20              -
reset                      132             -
rte                        20              -
rtr                        20              -
rts                        16              -
stop                       4               -
swap                       4               -
trapv ( sans trap )        4               -
unlk                       12              -

& = rajouter le temps de calcul de l'adresse effective


                           68000

erreur adresse             50
erreur de bus              50
instruction chk            44+*
instruction illegal        34
interruption               44#
violation de privilège     34
trace                      34
trap                       38
trapvs                     34


+ rajouter l temps de calcul de l'adresse effective
* durée max
# 4 périodes d'horloge incluses pour le cycle d'interruption
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

12

pour les temps de cycle, la doc de motorola : http://e-www.motorola.com/brdata/PDFDB/docs/MC68000UM.pdf
section "16 bit instruction execution times"

13

Elle est mortelle ta docgni et mieu présenté que la mienne.

14

J'AI RIEN DITmad c exactement la même que la mienne en mieux présenté, C TOUT!!!!

Il n'y a aucune trace de ADDA, SUBA, MOVEA, CMPArage

Poutant elles sont connues c instructionsconfus

15

Bon, j'ai tendence à m'enerver facilement donc, je me calmecool

je suppose que ADDA correspond à ADD
SUBA correspond à SUB
CMPA correspond à CMP
et MOVEA correspond à MOVE

(si j'ai bien lu la doc Motorola) mais alors pkoi avoir fait c instructions si ce n'est que la restriction de la destination en Anconfus

16

arf d'accord grin c'est ton tuto ASM qui n'est pas génial alors.

Il aurait dû t'apprendre que adda c'est add vers un registre d'adresse, qu'A68k transforme tout seul les add.x y,an en adda.x y,an roll
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

17

Thibaut c'est le même fichier que j'utilise. Mais je trouve que la partie sur bchg/bset/bclr/btst n'est pas très claire. 'entendent quoi par dynamique registre/dynamique mémoire/statique registre/statique mémoire?

Boogerman

Bouger, travailler, manger et se reposer, c'est la devise de la tortue!

18

boomerang> A propos de dynamique et statique:

dynamique registre -> Dn,Dn
dynamique mémoire -> Dn,mem
statique registre -> #n,Dn
statique mémoire -> #n,mem

Je crois que c ça car statique: qui ne peut être changé
dynamique: peut être changé (donc un registre en sourcegrin)

J'ai vu juste????

19

ouaip !
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

20

guigui17 a écrit :
Est ce que quelqu'un pourrai me donner les temps d'éxecutions des intructions suivantes:

adda
suba
movea
cmpa

Car dans la doc que j'ai, il n'y a rien (à croire que celui qu'il l'a fait en voulait aux instructions finissant par 'a'grin donc toutes celles qui impliquent des registres an)


N'importe quoi...
C'est marqué, normalement... sinon, regarde sur mon site wink
Site : http://www.phareaway.com/
Membre du groupe Phare Away et webmaster du site

21

Oui, c marqué sur la doc Motorola, mais moi, je parlais du fichier txt. (cf post 14)

22

guigui17 a écrit :
boomerang> A propos de dynamique et statique:

dynamique registre -> Dn,Dn
dynamique mémoire -> Dn,mem
statique registre -> #n,Dn
statique mémoire -> #n,mem

Je crois que c ça car statique: qui ne peut être changé
dynamique: peut être changé (donc un registre en sourcegrin)
J'ai vu juste????


Donc le Dn,x est plus rapide que le #n,x?
J'aurais plutôt pensé le contraire.

Quelqu'un sait combien de bits sont utilisés du Dn dans bclr/chr/set/tst Dn,x?
Boogerman

Bouger, travailler, manger et se reposer, c'est la devise de la tortue!

23

3 quand l'opération est effectuée sur la mémoire
5 quand c'est sur un registre
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

24

Dn est plus rapide que #n car la lecture dans un registre (donc dans la mémoire interne du proc) est plus rapide que la lecture octet par octet dans la mémoire RAM ou ROM.

C physique!

25

Cool j'ai pigé. Merci
Boogerman

Bouger, travailler, manger et se reposer, c'est la devise de la tortue!

26

Complément de réponse:

en ce qui concerne bchg,bset,bclr,btst:

soit c OBLIGATOIREMENT un LONG-MOT pour b*** Dn,x

Donc b***.l Dn,x

Et OBLIGATOIREMENT un octet pour la mémoire en source:

Donc b***.b mem,x

27

Je précise que adda est en réalité add, au même titre qu'on pourrait faire une instruction addd pour add x,dn triso, alors que addi est une instruction différente (qui permet de faire addi.w #x,<ea>, alors que add n'accepte que add rn,<ea> et add <ea>,rn)

guigui17> c le contraire, le x est la 1è opérande smile

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

28

Puisqu'on y est grin

dynamique dynamique statique statique
registre mmemoire registre memoire
bclr.l 10* - 14* -

* = durée max

Quelqu'un peut donner une estimation de la durée max en fonction du bit que l'on clr. Ponctuellement, je veux savoir pour quel n il vaut mieux faire:

andi.b #0b11...0...11,reg ;le 0 se trouve dans le bit n

au lieu de:

bclr.b #n,reg

Boogerman

Bouger, travailler, manger et se reposer, c'est la devise de la tortue!

29

I don't know couic

Peut-être y a-t-il la réponse là-bas : http://e-www.motorola.com/brdata/PDFDB/docs/MC68000UM.pdf
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

30

sur mon site il y a les vitesses, mais je en sais si il y en a une particulière pour les opérations sur les bits en fonction des bits...

D'ailleurs, add n'est pas adda... Pollux, essaie de programmer proprement wink... C'ets pas parce que les compilo comprennent que c'est la même chose... D'accord, la base add est la même - 1101 - mais la suite est différente. c'ets obligatoirement 011 ou 111, ce qui ne se trouve pas dans la liste usuelle...
Site : http://www.phareaway.com/
Membre du groupe Phare Away et webmaster du site