Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( )

Ähnliche Präsentationen


Präsentation zum Thema: "Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( )"—  Präsentation transkript:

1 Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( )

2 1 Seminar Übersetzung von künstlichen Sprachen SS09 1. Abgrenzung, Motivation, Einordnung 2. Grundlagen 3. Code-Repräsentation 4. Code-Erzeugung 5. Fazit und weiterführende Themen

3 2 Seminar Übersetzung von künstlichen Sprachen SS09 1. Abgrenzung, Motivation, Einordnung 2. Grundlagen 3. Code-Repräsentation 4. Code-Erzeugung 5. Fazit und weiterführende Themen

4 3 Seminar Übersetzung von künstlichen Sprachen SS09 Abgrenzung und Motivation Effizienz durch Automatisierung

5 4 Seminar Übersetzung von künstlichen Sprachen SS09 Einordnung innerhalb des Kompilierungsprozesses

6 5 Seminar Übersetzung von künstlichen Sprachen SS09 Einordnung innerhalb des Kompilierungsprozesses

7 6 Seminar Übersetzung von künstlichen Sprachen SS09 Einordnung innerhalb des Kompilierungsprozesses 1.

8 7 Seminar Übersetzung von künstlichen Sprachen SS09 Einordnung innerhalb des Kompilierungsprozesses

9 8 Seminar Übersetzung von künstlichen Sprachen SS09 1. Abgrenzung, Motivation, Einordnung 2. Grundlagen * Zielgrößen * Entwurfsfaktoren * Kernaufgaben * Referenzmaschine 3. Code-Repräsentation 4. Code-Erzeugung 5. Fazit und weiterführende Themen

10 9 Seminar Übersetzung von künstlichen Sprachen SS09 Zielgrößen Semantische Korrektheit Laufzeiteffizienz Virtuelle Speichernutzung Physische Speichernutzung Kompilierzeit Heuristiken für komplexe Optimierungsprobleme konträr

11 10 Seminar Übersetzung von künstlichen Sprachen SS09 Speicherhierarchie

12 11 Seminar Übersetzung von künstlichen Sprachen SS09 Speicherhierarchie

13 12 Seminar Übersetzung von künstlichen Sprachen SS09 Registerverwendung Aufgaben Registerzuteilung Registerauswahl Ziel Totale Lade- und Speicherzeiten minimieren Architekturparameter Registeranzahl Kernaufgabe Registerverwendung

14 13 Seminar Übersetzung von künstlichen Sprachen SS09 Instruktionsselektion Aufgabe Auswahl von Instruktionskombination Ziel Minimiere totale Instruktionskosten! Beispiel Zwischencode: a := a + 1 Zielcode: LD R, a ADD R, R, #1 ST a, R Architekturparameter Befehlssatz Kernaufgabe Instruktionsselektion LD R, a INC a ST a, R

15 14 Seminar Übersetzung von künstlichen Sprachen SS09 Architekturparameter Anzahl der Prozessorkerne Kernaufgabe Instruktionsanordnung Aufgabe Befehlsfolgen reorganisieren Ziele Code-Vereinfachung Bessere Registerausnutzung Parallelisierung unabhängiger Befehle

16 15 Seminar Übersetzung von künstlichen Sprachen SS09 Instruction Set Architecture (ISA) Complex Instruction Set Computer (CISC) Reduced Set Computer (RISC) Very Long Instruction Word (VLIW) Architekturparameter Registeranzahl Befehlssatz Anzahl der Prozessorkerne Kernaufgaben Registerzuteilung Instruktionsselektion Instruktionsanordnung Kernaufgaben und ISA

17 16 Seminar Übersetzung von künstlichen Sprachen SS09 Abstrakte Zielmaschine - Zielsprache Notation für Operationen: Bsp.: MULR 3, R 1, R 2 OP,,, mit = R i | { Kleinbuchstabe } = R i | { Kleinbuchstabe } | # { Ziffer } OP = ADD | SUB | MUL | DIV Ausnahmen: LDR, x STx, R

18 17 Seminar Übersetzung von künstlichen Sprachen SS09 Abstrakte Zielmaschine Definition Zielsprache Universalregister: R 1, …,R n Administrative Register separat Adressierungen

19 18 Seminar Übersetzung von künstlichen Sprachen SS09 1. Abgrenzung, Motivation, Einordnung 2. Grundlagen 3. Code-Repräsentation * Basisblöcke * Flussgraphen * DAG 4. Code-Erzeugung 5. Fazit und weiterführende Themen

20 19 Seminar Übersetzung von künstlichen Sprachen SS09 Code-Repräsentation: Basisblöcke Strukturierung des Zwischencodes Kontrollfluss Variablenverwendung Basisblock Minimale Sequenz von Instruktionen Blockanfänge definiert durch: a)Die erste Instruktion des Zwischencodes. b)Jede direkte Nachfolge-Instruktion eines Sprunges. c)Jede Zielinstruktion eines (bedingen oder unbedingten) Sprungbefehls.

21 20 Seminar Übersetzung von künstlichen Sprachen SS09 Code-Repräsentation: Basisblöcke Beispiel a) Die erste Instruktion des Zwischencodes.

22 21 Seminar Übersetzung von künstlichen Sprachen SS09 Code-Repräsentation: Basisblöcke Beispiel a) Die erste Instruktion des Zwischencodes.

23 22 Seminar Übersetzung von künstlichen Sprachen SS09 Code-Repräsentation: Basisblöcke Beispiel b) Jede direkte Nachfolge-Instruktion eines Sprunges.

24 23 Seminar Übersetzung von künstlichen Sprachen SS09 Code-Repräsentation: Basisblöcke Beispiel b) Jede direkte Nachfolge-Instruktion eines Sprunges.

25 24 Seminar Übersetzung von künstlichen Sprachen SS09 Code-Repräsentation: Basisblöcke Beispiel c) Jede Zielinstruktion eines (bedingen oder unbedingten) Sprungbefehls.

26 25 Seminar Übersetzung von künstlichen Sprachen SS09 Code-Repräsentation: Basisblöcke Beispiel c) Jede Zielinstruktion eines (bedingen oder unbedingten) Sprungbefehls.

27 26 Seminar Übersetzung von künstlichen Sprachen SS09 Code-Repräsentation: Basisblöcke Ergebnis

28 27 Seminar Übersetzung von künstlichen Sprachen SS09 Code-Repräsentation: Flussgraphen Flussgraph gerichteter, zyklischer Graph G=(V,E) mit Knotenmenge V: Menge aller Basisblöcke (Block als Blackbox) Kantenmenge E: e(B i, B j ) Є E genau dann, wenn: a)B j folgt direkt auf B i in der Programmfolge und B i ohne unbedingten Sprung. b)B j ist Ziel eines Sprungbefehls.

29 28 Seminar Übersetzung von künstlichen Sprachen SS09 Code-Repräsentation: Flussgraphen Beispiel: a) B j folgt direkt auf B i in der Programmfolge und B i enthält keinen unbedingten Sprung.

30 29 Seminar Übersetzung von künstlichen Sprachen SS09 Code-Repräsentation: Flussgraphen Beispiel: b) B j ist Ziel eines Sprungbefehls.

31 30 Seminar Übersetzung von künstlichen Sprachen SS09 Code-Repräsentation: Blockoptimierung mit DAG Innendarstellung eines Blocks gerichteter, azyklischer Graph (DAG) Ziele Registerausnutzung verbessern Code-Vereinfachung Toten Code eliminieren Elemente Initiale Variable Operation Label

32 31 Seminar Übersetzung von künstlichen Sprachen SS09 Code-Repräsentation: Blockoptimierung mit DAG DAG-Konstruktion 1.a := b * c 2.c := a + d 3.b := a * b Erzeuge - Blatt / Blätter - Operationssymbol - Kanten - Label

33 32 Seminar Übersetzung von künstlichen Sprachen SS09 Code-Repräsentation: Blockoptimierung mit DAG DAG-Konstruktion 1.a := b * c 2.c := a + d 3.b := a * b Erzeuge - Blatt / Blätter - Operationssymbol - Kanten - Label

34 33 Seminar Übersetzung von künstlichen Sprachen SS09 Code-Repräsentation: Blockoptimierung mit DAG DAG-Konstruktion 1.a := b * c 2.c := a + d 3.b := a * b Erzeuge - Blatt / Blätter - Operationssymbol - Kanten - Label

35 34 Seminar Übersetzung von künstlichen Sprachen SS09 Code-Repräsentation: Blockoptimierung mit DAG Code-Vereinfachung, d 1.a := b * c 2.c := a + d 3.b := a * b 4.d := a + d 1.a := b * c 2.c := a + d 3.b := a * b 4.d := c Erzeuge - Blätter - Operationssymbol - Kanten - Label

36 35 Seminar Übersetzung von künstlichen Sprachen SS09 Code-Repräsentation: Blockoptimierung mit DAG Lebendigkeit von Variablen Eine Variable x ist lebendig in Anweisung A i (1 i < n), wenn: x in Anweisung A 1 ein Wert zugewiesen wird, x in Anweisung A n als Operand benutzt bzw. gelesen wird, x zwischen A 1 und A n kein Wert zugewiesen wird. x hat bei A i die nächste Verwendung in A n, wenn A n der erste Lesezugriff auf x nach A 1 ist. Eine am Basisblockende lebendige Variable heißt live on exit.

37 36 Seminar Übersetzung von künstlichen Sprachen SS09 Code-Repräsentation: Blockoptimierung mit DAG Toter Code Instruktionen mit nicht benötigten Ergebnissen Beispiel c, d nicht live on exit

38 37 Seminar Übersetzung von künstlichen Sprachen SS09 1. Abgrenzung, Motivation, Einordnung 2. Grundlagen 3. Code-Repräsentation 4. Code-Erzeugung * Elementare Code-Erzeugung * Globale Registerzuteilung * Optimale Code-Erzeugung * Peephole-Optimierung 5. Fazit und weiterführende Themen

39 38 Seminar Übersetzung von künstlichen Sprachen SS09 Elementare Code-Erzeugung Register-Deskriptor Zuordnungen: Register Variablennamen Adressen-Deskriptor Zuordnungen: Variablen Speicheradresse Annahmen für Zielmaschine LD und ST explizit keine globalen Register Variablen mit nächster Verwendung am Blockanfang zu laden live on exit-Variablen zu speichern

40 39 Seminar Übersetzung von künstlichen Sprachen SS09 Elementare Code-Erzeugung Hilfsfunktion getReg getReg(B) mit Drei-Adress-Befehl B Für a := b OP c Lade nötige Variablen Führe den Befehl OP R a, R b, R c aus. Fallunterscheidungen für Code-Erzeugung 1.LD R, a 2.ST a, R 3.a := b OP c 4.a := b

41 40 Seminar Übersetzung von künstlichen Sprachen SS09 Elementare Code-Erzeugung Register-DeskriptorAdress-Deskriptor ¬live on exitlive on exit Zwischencode ZielcodeRegelR1R1 R2R2 R3R3 abcd Beispiel: a := b * c

42 41 Seminar Übersetzung von künstlichen Sprachen SS09 Elementare Code-Erzeugung Register- Deskriptor Adress-Deskriptor ¬lebendig Blockende lebendig Blockende Zwischencode ZielcodeRegelR1R1 R2R2 R3R3 abcd 1.a := b * cbcd 2.LD R 1, b1bb,R 1 cd 3.LD R 2, c1bcb,R 1 c, R 2 d 4.a := b OP c (mit den Registern R a, R b, R c ) 4.1 Falls b bzw. c nicht im Register, führe LD R b, b bzw. LD R c, c aus. […] 1.LD R, a 1.1 Der Inhalt von R im Register-Deskriptor ist durch a zu ersetzen 1.2 Füge im Adress-Deskriptor R zu a hinzu.

43 42 Seminar Übersetzung von künstlichen Sprachen SS09 Elementare Code-Erzeugung Register- Deskriptor Adress-Deskriptor ¬lebendig Blockende lebendig Blockende Zwischencode ZielcodeRegelR1R1 R2R2 R3R3 abcd 1.a := b * cbcd 2.LD R 1, b1bb,R 1 cd 3.LD R 2, c1bcb,R 1 c, R 2 d 4.MUL R 2, R 1, R 2 3bc, aR2R2 b,R 1 c, R 2 d 4. a := b OP c (mit den Registern R a, R b, R c ) 4.1 Falls b bzw. c nicht im Register, führe LD R b, b bzw. LD R c, c aus. 4.2 Der Inhalt von R a im Register-Deskriptor ist durch a zu ersetzen. 4.3 Der Inhalt von a im Adress-Deskriptor ist durch R a zu ersetzen. 4.4 Entferne R a von allen anderen Variablen im Adress-Deskriptor.

44 43 Seminar Übersetzung von künstlichen Sprachen SS09 Elementare Code-Erzeugung Register- Deskriptor Adress-Deskriptor ¬lebendig Blockende lebendig Blockende Zwischencode ZielcodeRegelR1R1 R2R2 R3R3 abcd 4.MUL R 2, R 1, R 2 3baR2R2 b,R 1 c, R 2 d 5.EXIT 6.ST a, R 2 caa, R 2 b, R 1 cd 2.ST a, R Der Inhalt von a im Adress-Deskriptor ist durch R zu ersetzen.

45 44 Seminar Übersetzung von künstlichen Sprachen SS09 Globale Register Problem Viele Hauptspeicherzugriffe ST a, R 1 LD R 1, a Lösung ST a, R 1 LD R 1, a Problem ST a, R 1 if … then goto … LD R 1, a

46 45 Seminar Übersetzung von künstlichen Sprachen SS09 Globale Register Beispiel Betrachte Variable b Lesezugriff LD R, a

47 46 Seminar Übersetzung von künstlichen Sprachen SS09 Globale Register Beispiel Betrachte Variable b Lesezugriff LD R, a Schreibzugriff live on exit Lösung Registerinhalte überdauern Basisblöcke Registerzuteilung? Bewertung:

48 47 Seminar Übersetzung von künstlichen Sprachen SS09 Graphfärbung Problem Register voll Registerauswahl? Lebensspanne für ideelle Register Hier: Graph 2-fach färbbar Kollisionen unvermeidbar Zwischenspeicherung

49 48 Seminar Übersetzung von künstlichen Sprachen SS09 Instruktionsselektion Idee: Alternative Instruktionskombinationen

50 49 Seminar Übersetzung von künstlichen Sprachen SS09 Optimale Code-Erzeugung Ziel Code mit minimaler Registeranzahl Berücksichtigt Registerzuteilung Registerauswahl Instruktionsanordnung Basis Directed Acyclic Graph (DAG) Procedere: 1.Annotiere Ershov-Nummern an Graph-Knoten 2.Führe Generierungsalgorithmus aus

51 50 Seminar Übersetzung von künstlichen Sprachen SS09 Optimale Code-Erzeugung Ershov-Nummer für Knoten v: val(v) =

52 51 Seminar Übersetzung von künstlichen Sprachen SS09 Optimale Code-Erzeugung Ershov-Nummer für Knoten v: val(v) = 11 1

53 52 Seminar Übersetzung von künstlichen Sprachen SS09 Optimale Code-Erzeugung Ershov-Nummer für Knoten v: val(v) =

54 53 Seminar Übersetzung von künstlichen Sprachen SS09 Optimale Code-Erzeugung Ershov-Nummer für Knoten v: val(v) =

55 54 Seminar Übersetzung von künstlichen Sprachen SS09 Optimale Code-Erzeugung gencode(v, b) 1.if v hat Kindknoten v l, v r mit label(v l ) = label(v r ) then 1.1k := label(v l ) 1.2R b+k := gencode(v r, b+1) 1.3R b+k-1 := gencode(v l, b) 1.4print(name(v), R b+k, R b+k-1, R b+k ) 2.else if v hat Kindknoten v l, v r mit label(v l ) < label(v r ) then 2.1k := label(v r ) 2.2R b+k-1 := gencode(v r, b) 2.3m := label(v l ) 2.4R b+m-1 := gencode(v l, b) 2.5print(name(v), R b+k-1, R b+m-1, R b+k-1 ) 3.else if v hat Kindknoten v l, v r mit label(v l ) > label(v r ) then 3.1k := label(v l ) 3.2R b+k-1 := gencode(v l, b) 3.3m := label(v r ) 3.4R b+m-1 := gencode(v r, b) 3.5print(name(v), R b+k-1, R b+k-1, R b+m-1 ) 4.else // v ist Blattknoten 4.1print(LD, R b, name(v)) gencode-Algorithmus fRegelCodevbvlvl vrvr kR1R1 R2R2 R3R3 a)k := label(v 1 )v1v1 1v2v2 v3v3 3 b)R 3 := gencode(v 1, 1)v1v1 1v2v2 v3v k := label(v 2 )v1v1 1v2v2 v3v R 3 := gencode(v 3, 2)v1v1 1v2v2 v3v k := label(v 4 )v3v3 2v4v4 v5v R 3 := gencode(v 4, 2)v3v3 2v4v4 v5v k := label(v 6 )v4v4 2v6v6 v7v R 3 := gencode(v 7, 3)v7v print(LD, R 3, c)v7v7 3--1c0c0 1.3R 2 := gencode(v 6, 2)v6v6 2--1c0c0 4.1print(LD, R 2, b)v6v6 2--1b0b0 c0c0 1.4print(MUL, R 3, R 2, R 3 )v4v4 2v6v6 v7v7 1b0b0 a 3.3m := label(v 5 ) // m := 1v3v3 2v4v4 v5v5 2b0b0 a 3.4R 2 := gencode(v 5, 2)v3v3 2v4v4 v5v5 2b0b0 a 4.1print(LD, R 2, d)v5v5 2--1d0d0 a 3.5print(ADD, R 3, R 2, R 3 )v3v3 2v4v4 v5v5 2d0d0 d 1.3R 2 := gencode(v 2, 1)v1v1 1v2v2 v3v3 2d0d0 d 2.1k := label(v 4 )v2v2 1v6v6 v4v4 2d0d0 d 2.2R 2 := gencode(v 4, 2)v2v2 1v6v6 v4v4 2d0d0 d Beispiel

56 55 Seminar Übersetzung von künstlichen Sprachen SS09 gencode Optimale Code-Erzeugung RegelCodevbvlvl vrvr kR1R1 R2R2 R3R3 LD R 3, c LD R 2, b

57 56 Seminar Übersetzung von künstlichen Sprachen SS09 Optimale Code-Erzeugung MUL, R 3, R 2, R

58 57 Seminar Übersetzung von künstlichen Sprachen SS09 Optimale Code-Erzeugung

59 58 Seminar Übersetzung von künstlichen Sprachen SS09 … c := a * b d := a + d e := c + d a := b * c ST a, R 1 LD R 1, a c := a * b d := a + d e := c + d … Problem Komplexität Idee Lokale Suche im Gucklock Beispiel Viele Hauptspeicherzugriffe ST a, R 1 LD R 1, a Peephole Optimization

60 59 Seminar Übersetzung von künstlichen Sprachen SS09 1. Abgrenzung, Motivation, Einordnung 2. Grundlagen 3. Code-Repräsentation * Basisblöcke * Flussgraphen 4. Code-Erzeugung 5. Fazit und weiterführende Themen

61 60 Seminar Übersetzung von künstlichen Sprachen SS09 Fazit Gelöst Elementare Codeerzeugung Erzeugung mit minimaler Registeranzahl Ansätze Registerverwendung Instruktionsselektion Instruktionsanordnung Offen Erweiterte Heuristiken Parallelisierung Just-In-Time-Compilation

62 61 Seminar Übersetzung von künstlichen Sprachen SS09 Diskussion

63 62 Seminar Übersetzung von künstlichen Sprachen SS09 Code-Repräsentation DAG-Konstruktion Für jeden Drei-Adress-Befehl der Form a := b OP c eines Basisblocks B: 1.Suche nach Vorkommen von b und c in Blättern, Knoten und Labels des Graphs (dies entspricht einer vorigen Benutzung der Variablen). Erzeuge für nicht existierende Variablen neue Blätter mit ihrem Variablennamen und dem Index 0 als Kennzeichnung der Erstverwendung. 2.Erzeuge für OP einen Knoten mit dem Operationssymbol und setze b als linken, c als rechten Kindknoten für OP. 3.Füge a als Label an OP an. BACKUP

64 63 Seminar Übersetzung von künstlichen Sprachen SS09 Elementare Code-Erzeugung Eintragung in die Deskriptoren 1.LD R, a 1.1 Der Inhalt von R im Register-Deskriptor ist durch a zu ersetzen. 1.2 Füge im Adress-Deskriptor R zu a hinzu. 2.ST a, R Der Inhalt von a im Adress-Deskriptor ist durch R zu ersetzen. 3.a := b OP c (mit den Registern R a, R b, R c ) 3.1Falls b bzw. c nicht im Register, führe LD R b, b bzw. LD R c, c aus. 3.2Der Inhalt von Ra im Register-Deskriptor ist durch a zu ersetzen. 3.3Der Inhalt von a im Adress-Deskriptor ist durch R a zu ersetzen. 3.4Entferne R a von allen anderen Variablen im Adress-Deskriptor. 4.a := b (mit den Registern R a, R b ) 4.1Falls b nicht im Register, führe LD R b, b aus (siehe 1.). 4.2Der Inhalt von R b im Register-Deskriptor ist durch a zu ergänzen. 4.3Der Inhalt von a im Adress-Deskriptor ist durch R b zu ersetzen. BACKUP

65 64 Seminar Übersetzung von künstlichen Sprachen SS09 Elementare Code-Erzeugung Register-DeskriptorAdress-Deskriptor ¬lebendig Blockende lebendig Blockende Zwischencode ZielcodeRegelR1R1 R2R2 R3R3 abcd 1.a := b * cbcd 2.LD R 1, b1bb,R 1 cd 3.LD R 2, c1bcb,R 1 c,R 2 d 4.MUL R 2, R 1, R 2 3baR2R2 b,R 1 c,R 2 d 5.c := a + d 6.LD R 3, d1badR2R2 b,R 1 cR3R3 7.ADD R 3, R 2, R 3 3bacR2R2 b,R 1 R3R3 R3R3 8.EXIT 9.ST c, R 1 cac,dR2R2 bc,R 1 R3R3 10.ST d, R 3 cac,dR2R2 bc,R 1 d,R 3 BACKUP

66 65 Seminar Übersetzung von künstlichen Sprachen SS09 Elementare Code-Erzeugung Register-DeskriptorAdress-Deskriptor ¬lebendig Blockende lebendig Blockende Zwischencode ZielcodeRegelR1R1 R2R2 R3R3 abcd 10.ST d, R 3 cac,dR2R2 bc,R 1 d,R MUL R 1, R 2, R 1 3cac,dR2R2 b,R1b,R1 R1R1 R3R3 12.EXIT 13.ST c, R 1 cac,dR2R2 bc,R 1 R3R3 14.ST d, R 3 cac,dR2R2 bc,R 1 d,R 3 15.cd BACKUP

67 66 Seminar Übersetzung von künstlichen Sprachen SS09 BACKUP Optimale Codeerzeugung Funktionsaufruf: a)k := label(v root ) b)R k := gencode(v root, 1) Funktionsdeklaration: gencode(v, b) 1.if v hat Kindknoten v l, v r mit label(v l ) = label(v r ) then 1.1.k := label(v l ) 1.2.R b+k := gencode(v r, b+1) 1.3.R b+k-1 := gencode(v l, b) 1.4.print(name(v), R b+k, R b+k-1, R b+k ) 2.else if v hat Kindknoten v l, v r mit label(v l ) < label(v r ) then 2.1.k := label(v r ) 2.2.R b+k-1 := gencode(v r, b) 2.3.m := label(v l ) 2.4.R b+m-1 := gencode(v l, b) 2.5.print(name(v), R b+k-1, R b+m-1, R b+k-1 ) 3.else if v hat Kindknoten v l, v r mit label(v l ) > label(v r ) then 3.1.k := label(v l ) 3.2.R b+k-1 := gencode(v l, b) 3.3.m := label(v r ) 3.4.R b+m-1 := gencode(v r, b) 3.5.print(name(v), R b+k-1, R b+k-1, R b+m-1 ) 4.else // v ist Blattknoten 4.1.print(LD, R b, name(v))

68 67 Seminar Übersetzung von künstlichen Sprachen SS09 BACKUP Optimale Codeerzeugung RegelCodevbvlvl vrvr kR1R1 R2R2 R3R3 a)k := label(v 1 )v1v1 1v2v2 v3v3 3 b)R 3 := gencode(v 1, 1)v1v1 1v2v2 v3v k := label(v 2 )v1v1 1v2v2 v3v R 3 := gencode(v 3, 2)v1v1 1v2v2 v3v k := label(v 4 )v3v3 2v4v4 v5v R 3 := gencode(v 4, 2)v3v3 2v4v4 v5v k := label(v 6 )v4v4 2v6v6 v7v R 3 := gencode(v 7, 3)v7v print(LD, R 3, c)v7v7 3--1c0c0 1.3R 2 := gencode(v 6, 2)v6v6 2--1c0c0 4.1print(LD, R 2, b)v6v6 2--1b0b0 c0c0 1.4print(MUL, R 3, R 2, R 3 )v4v4 2v6v6 v7v7 1b0b0 a 3.3m := label(v 5 ) // m := 1v3v3 2v4v4 v5v5 2b0b0 a 3.4R 2 := gencode(v 5, 2)v3v3 2v4v4 v5v5 2b0b0 a 4.1print(LD, R 2, d)v5v5 2--1d0d0 a 3.5print(ADD, R 3, R 2, R 3 )v3v3 2v4v4 v5v5 2d0d0 d 1.3R 2 := gencode(v 2, 1)v1v1 1v2v2 v3v3 2d0d0 d 2.1k := label(v 4 )v2v2 1v6v6 v4v4 2d0d0 d 2.2R 2 := gencode(v 4, 2)v2v2 1v6v6 v4v4 2d0d0 d

69 68 Seminar Übersetzung von künstlichen Sprachen SS09 BACKUP Optimale Codeerzeugung …… siehe Schritte 6-12 mit b=1 ………….……… 2.3m := label(v 6 ) // m := 1v2v2 1v6v6 v4v4 2b0b0 ad 2.4R 1 := gencode(v 6, 1)v2v2 1v6v6 v4v4 2b0b0 ad 4.1print(LD, R 1, b)v6v6 1--1b0b0 ad 2.5print(MUL, R 2, R 1, R 2 )v2v2 1v6v6 v4v4 2b0b0 cd 1.4print(ADD, R 3, R 2, R 3 )v1v1 1v2v2 v3v3 2b0b0 ce


Herunterladen ppt "Seminar Übersetzung von künstlichen Sprachen SS09 Code-Erzeugung Arne Kostulski ( )"

Ähnliche Präsentationen


Google-Anzeigen