Optimierer

Der Luna-Compiler/Assembler enthält viele verschiedene Stufen in unterschiedlichen Prozessbereichen, welche den aus dem Quelltext erzeugten Zwischencode und den erzeugten Assemblercode optimieren. Hierbei wird der erzeugte Maschinencode auf Geschwindigkeit und Größe während des Kompiliervorgangs nachbearbeitet.

Die verschiedenen Optimierungsstufen bestehen aus Analysen über die Zugriffe von Speicherbereichen, Sprüngen und arithmetischen oder logischen Operationen. Weiterhin werden Sprunganweisungen und Unterprogrammaufrufe möglichst mit direkter Adressierung durch die kürzere und schnellere relative Adressierung ersetzt. Vergleiche werden so umstrukturiert, dass sie schnell erfolgen können. Berechnungen werden aufgelöst und zusammengefasst bzw. so weit wie möglich reduziert.

Eine weitere Optimierungsstufe ist die Mustererkennung. Diese analysiert beispielsweise geladene Werte in Registern. Sie erkennt bestimmte Strukturen und kann ihre logische Abfolge analysieren. Dies verhindert das ein bereits geladener Zeiger in einer nachfolgenden Anweisungsgruppe erneut geladen wird. Sie erkennt also, ob bestimmte Registerwerte zwischenzeitlich durch den Programmverlauf geändert wurden.

Die Optimierungsstufen sind per Vorgabe eingeschaltet. Sie können mittels Compiler-Kommandozeilenoption komplett oder mittels pragma für Teilbereiche deaktiviert werden.