Alors, ZOlive:
>est-ce que c'est vraiment le plus rapide?
1. Tu peux optimiser:
add.l #$x*4,a4
move.l (a4),a4
en:
move.l $x*4(a4),a4
2. Tu peux faire ce que fait
TIGCC avec
OPTIMIZE_ROM_CALLS:
move.l $c8,a5
tout au début du programme. Puis, il ne te reste qu'a faire:
move.l $x*4(a5),a0
jsr (a0)
Tu peux aussi utiliser
a4 plutôt que
a5, mais l'idée est de garder le contenu de
$c8 dans le registre que tu utilises et mettre l'adresse de la fonction dans
a0 qui de toute façon sera détruit par le ROM call.
>QU'EST-CE QU'IL FAUT FAIRE POUR QUITTER NORMALEMENT EN NOSTUB???
Il faut sauvegarder les registres modifiés.
1. La solution la plus facile:
movem.l d0-d7/a0-a6,-(a7)
tout au début du programme et:
movem.l (a7)+,d0-d7/a0-a6
tout à la fin
2. En fait, tu as le droit de modifier
d0-d2 et
a0-a1, donc il suffit de faire:
movem.l d3-d7/a2-a6,-(a7)
tout au début du programme et:
movem.l (a7)+,d3-d7/a2-a6
tout à la fin
3. Tu peux utiliser un
movem ou des
moves pour les registres que tu modifies uniquement. Par exemple, si tu n'utilises que
a1,
d2,
a4 et
a5, sachant que tu as le droit de modifier
a1 et
d2, il suffit de faire:
movem.l a4/a5,-(a7)
tout au début du programme et:
movem.l (a7)+,a4/a5
tout à la fin
Et si tu n'utilises que
a1,
d2 et
a4, sachant que tu as le droit de modifier
a1 et
d2, il suffit de faire:
move.l a4,-(a7)
tout au début du programme et:
move.l (a7)+,a4
tout à la fin
(Ici, il y a un seul registre, donc pas besoin de
movem.)