Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Universität Dortmund ANSI-C Compiler für die PIC18-Architektur

Ähnliche Präsentationen


Präsentation zum Thema: "Universität Dortmund ANSI-C Compiler für die PIC18-Architektur"—  Präsentation transkript:

1 Universität Dortmund ANSI-C Compiler für die PIC18-Architektur
Betreuer Jens Wagner Lars Wehmeyer Teilnehmer Detlev Bartsch Pedram Hadjian Torsten Denno Nico Karnatz Andreas Klapschus André Kernchen Marcus Ladwig Michael Patzer Matthias Reck Christoph Schlagbaum Daniel Smolinski Thorsten Wilmer Teilanforderungen an die PG: Entwicklung einer Software, die Programme in der Hochspache ANSI-C in die Maschinensprache des verwendeten Mikrocontrollers überführt Hierzu wurden der Projektgruppe mit freundlicher Genehmigung des ICD (Informatik Centrum Dortmund) das Compiler-Frontend LANCE und die Backend-datenstruktur LLIR zur nicht-kommerziellen Verwendung zur Verfügung gestellt Realisierung des Compilers: void main () { int A[10]; int i,j,temp; int n=10; for (i=n-2; i>=0; i--) {for (j=0; j<=i;j++) {if (A[j]>A[j+1]) {temp = A[j]; A[j] = A[j+1]; A[j+1]=temp; } Eingabe eines ANSI-C Programmes Beispiel: Bubble Sort ... /* $ {if (A[j]>A[j+1])$ */ t10 = (char *)A_3; t9 = j_6 * 2; t8 = t10 + t9; t11 = (int *)t8; t12 = j_6 + 1; t15 = (char *)A_3; t14 = t12 * 2; t13 = t15 + t14; t16 = (int *)t13; t17 = *t11 > *t16; t36 = !t17; if (t36) goto LL5; Ausgabe in 3-Adress Code 90 IR-Statements Erzeugung einer assemblernahen Zwischenrepräsentation durch das Compiler-Frontend LANCE Visualisierung der Datenflussbäume mittels xvcg Durchführung architekturunspezifischer Optimierungen Ansi-C Frontend LANCE ( ICD ) ... # MULTIPLICATION acc: cs_MULT(acc,cs_INTCONST) { $cost[0].cost=2+$cost[2].cost;} = { $action[2](); EmitMULLW(CS_EXPVAL($3)); EmitMOVF(NewPR(PHREG_PRODL),0,0); }; # ADDITION (ACC,INT) acc: cs_PLUS(acc,cs_INTCONST) { $cost[0].cost=1+$cost[2].cost;} EmitADDLW(CS_EXPVAL($3)); Erstellung einer architektur- Spezifischen Beschreibung *** LANCE V2.0 - IR optimization script *** * Running SSA * Running constant folding * Running constant propagation * Running reassociation * Running symbol table cleanup * Running jump optimization * Running loop invariant code motion * Running induction variable elimination * Running global common subexpression elimination * Running dead code elimination * Running copy propagation * Running local common subexpression elimination *** Optimization script done *** Erzeugung eines Codeselektors anhand der Baumgrammatik Mittels OLIVE . . . Überdeckung der Datenflussbäume durch Befehlsmuster . . . Einsparung von 47 IR-Statements ! Low-level intermediate Representation LLIR3 ( ICD ) PICBACK, basierend auf der Erzeugung einer Assembler-Datei durch das von der Projekt-Gruppe erstellte Compiler-Backend PICBACK ... _main_LL6: LFSR 0,v_5 MOVFF INDF0,v_4 _main_LL4: MOVF v_2,0,0 MULLW .4 MOVF PRODL,0,0 MOVWF v_6,0 MOVF v_4,0,0 ADDLW .4 LFSR 0,v_6 ADDWF FSR0L,1,0 CLRF WREG,0 ADDWFC FSR0H,1,0 ... : FA : FFD02F : FFD027 : FFD017 : EF04F094 : BBD168 : D59E026ED8CF03F061 : F2A4F5EF08F0F2948C72 E9CF04F0EACF73 : F0E1CF06F0E2CF07F003EE4AF : E844E926000EEA22EECFE1FFEFCFE2FF1D : C0E6FF03C0E6FFE0CFE6FFF3CFE6FF14 Durchführung einer Registerallokation durch Graphfärbealgorithmen ... _main_LL6: LFSR 0,v_5 MOVFF INDF0,v_4 _main_LL4: MOVF v_2,0,0 MULLW .4 MOVF PRODL,0,0 MOVWF v_6,0 MOVF v_4,0,0 ADDLW .4 LFSR 0,v_6 ADDWF FSR0L,1,0 CLRF WREG,0 ADDWFC FSR0H,1,0 META-Assemblercode Im Beispiel sind Register noch virtuell Reduktion der Anzahl der Register von 10 virtuellen auf 7 physikalische MPLab erzeugte Hex-Datei, die auf den Prozessor übertragen wird Lehrstuhl 12 ls12-www.cs.uni-dortmund.de/rock PG ROCK 2002/2003 © PG RoCK 2003 André Kernchen


Herunterladen ppt "Universität Dortmund ANSI-C Compiler für die PIC18-Architektur"

Ähnliche Präsentationen


Google-Anzeigen