Forum: Compiler & IDEs AVR - möglichst effiziente Verzweigung


von Maxim (Gast)


Lesenswert?

Hallo,

abhängig von den zwei MSB eines Bytes soll gesprungen werden. Die 
Verzweigung muss möglichst schnell abgearbeitet werden.

REG0     | Sprungziel
----------------------
00xxxxxx | ROUT1
01xxxxxx | ROUT2
10xxxxxx | ROUT3
11xxxxxx | COMMAND

Die Wahrscheinlichkeit, dass ROUT1, 2 oder 3 auftreten ist gleich groß. 
COMMAND tritr im Vergleich dazu viel seltener auf.

Ich würde REG0 mit 11000000 UND-verknüpfen und dann mit CPI REG0, 
0/64/128 vergleichen und nach jedem Vergleich zu jeweiligem Sprunziel 
verzweigen.

Gibt es eine schnellere Variante?

von Johannes M. (johnny-m)


Lesenswert?

Hmmm, was hat das jetzt mit dem GCC zu tun?

Abgesehen davon: Wenn Du Deine Sprungmarken im Speicher so verteilen 
kannst, dass Du die beiden MSB des Bytes als Adresse (plus Offset) 
verwenden kannst, dann wäre ein indirekter Sprung (ijmp) vielleicht eine 
Maßnahme.

von Maxim (Gast)


Lesenswert?

Das ist möglich. Warum bin ich bloß nicht selber darauf gekommen.

Danke.

von Johannes M. (johnny-m)


Lesenswert?

Musst dann eben nur schauen, dass Du die beiden Bits irgendwie mit dem 
Z-Pointer verfuddelst. Ob das im Einzelfall konkret schneller ist als 
eine (kurze) Kette von Vergleichen, müsste man ausprobieren.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.