Im Sommersemester 2004 galt es, wie schon viele Jahre davor, im Rahmen der Übung Übersetzerbau einen codeerzeugenden Compiler zu schreiben und zu optimieren. Ich möchte hier ein paar der von mir eingesetzten naheliegenden und weniger naheliegenden Tricks vorstellen.
Das Rückgaberegister | |
---|---|
Ich habe so geschwollen formuliert "die Nummerierung der Register beginnt bei 0". Ja und, wir verwenden Register 0 ja gar nicht als Arbeitsregister! Stimmt, doch das werden wir gleich ändern. 0 ist unser Rückgaberegister und als solches in jeder Funktion präsent. Zumindest in unserem Mini-Compiler, der keine void-Funktionen kennt. Hier sehen wir: Es hat sich ausgezahlt, den Registercheck mit -1 zu machen. Noch besser, man tut das gleich von Anfang an, im Gegensatz zu mir... ;-) 21 int free_registers[]= { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; In der Registerbibliothek ändert sich nicht viel, das Knoten einhängen darf allerdings auch nicht vergessen werden: 21 treenodep newRegLeaf(int regnr) { Wir sehen hier auch gleich: Bei mir haben Konstanten und Register die gleiche Operation. Könnte man aufsplitten, wäre im BURG angenehmer zu Optimieren. Habe ich aber nicht gemacht, passiert bei mir alles in node_xxx() und funktioniert recht effizient. |
Einfaches Beispiel: add | |
---|---|
Wir haben kaum was optimiert (eigentlich nichts) und haben doch schon Code, der ziemlich "tight" ist. So soll es sein. Hier als Beispiel der von add erzeugte Code: Anmerkung: Im Sommersemester 2004 gab es eine Typunterscheidung, die geprüft werden muß (blbs). Bit 0 gelöscht: Zahl, Bit 0 gesetzt: Liste. ==========> Eingabe von /usr/ftp/pub/ublu/test/code/c5.xin: Konsequenz: Für add ist der Code bereits maximal optimiert. Dazu tragen allerdings natürlich auch die Routinen print_add_* bei, die ich im folgenden vorstellen möchte. |
Comments - Make a comment |
The comments are owned by the poster. We are not responsible for its content.
|
AdministrativeTexts
updated by freddiemac1993, 2013-06-14
wiki
Re: adventures
created by brittdavis10, 2012-02-23 (1 rply, 3 views)
thread
Re: how to run phpwebsite...
created by alexander, 2011-08-25 (2 rpls, 3607 views)
thread
Re: Forum tags
created by HaroldFaragher, 2011-08-22 (3 rpls, 8488 views)
thread