Software > Coding
Realisierung von Sprungtabellen/switch() in m68k
(1/1)
simonsunnyboy:
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:
--- Code: ---switch(part)
{
case 0:
...
break;
case 1:
...
break;
}
--- Ende Code ---
Meine Idee für m68k wäre in etwa wie folgt:
--- Code: ---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
--- Ende Code ---
Ideen, Anregungen willkommen :)
ssb
guest164:
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)
Navigation
[0] Themen-Index
Zur normalen Ansicht wechseln