atari-home.de - Foren
Software => Coding => Thema gestartet von: simonsunnyboy am Fr 16.01.2009, 08:30:47
-
Ich überlege zur Zeit wie man halbwegs effizient ein switch() Statement in m68k abbildet.
Die Idee ist, dass eine Variable part besagt, welcher case-Fall aufgerufen werden soll.
Im Prinzip geht es um die Realisierung eines Endlichen Automaten...
in C etwa das folgende:
switch(part)
{
case 0:
...
break;
case 1:
...
break;
}
Meine Idee für m68k wäre in etwa wie folgt:
mainloop:
lea jump_table,a0
move.l #part,d0
movea.l 0(a0,d0),a0
jmp (a0)
...
jump_table:
dc.l part1,part2,part3,part4
part1:
...
jmp mainloop
part2:
...
jmp mainloop
part: ds.l 1
Ideen, Anregungen willkommen :)
ssb
-
Hallo Matthias,
bin auf deine Frage leider erst etwas spät gestoßen...
Ich mache das auf jeden Fall genauso wie du es vorgeschlagen hast. Nur solltest du d0 noch mit 4 multiplizieren damit es auch funktioniert. ;)
Wenn deine Sprungtabelle nicht mehr als 128 Bytes vom Aufruf entfernt ist, kannst du es auch noch ein kleines bischen beschleunigen.
move.l jump_table(pc,d0),a0
jmp (a0)