Compilatoare. Generarea codului obiect

Σχετικά έγγραφα
Compilatoare. Generarea codului obiect

Metode iterative pentru probleme neliniare - contractii

Curs 10 Funcţii reale de mai multe variabile reale. Limite şi continuitate.


5.4. MULTIPLEXOARE A 0 A 1 A 2

Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor

Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor X) functia f 1

Curs 4 Serii de numere reale

(a) se numeşte derivata parţială a funcţiei f în raport cu variabila x i în punctul a.

Limbaje de Programare Curs 3 Iteraţia. Reprezentare internă. Operatori pe biţi

5. FUNCŢII IMPLICITE. EXTREME CONDIŢIONATE.

Teme de implementare in Matlab pentru Laboratorul de Metode Numerice

riptografie şi Securitate

Metode de interpolare bazate pe diferenţe divizate

Integrala nedefinită (primitive)

MARCAREA REZISTOARELOR

a n (ζ z 0 ) n. n=1 se numeste partea principala iar seria a n (z z 0 ) n se numeste partea

Curs 14 Funcţii implicite. Facultatea de Hidrotehnică Universitatea Tehnică "Gh. Asachi"

Analiza în curent continuu a schemelor electronice Eugenie Posdărăscu - DCE SEM 1 electronica.geniu.ro

III. Reprezentarea informaţiei în sistemele de calcul

Subiecte Clasa a VII-a

a. 11 % b. 12 % c. 13 % d. 14 %

Planul determinat de normală şi un punct Ecuaţia generală Plane paralele Unghi diedru Planul determinat de 3 puncte necoliniare

5.5. REZOLVAREA CIRCUITELOR CU TRANZISTOARE BIPOLARE

V O. = v I v stabilizator

Aplicaţii ale principiului I al termodinamicii la gazul ideal

Curs 1 Şiruri de numere reale

DISTANŢA DINTRE DOUĂ DREPTE NECOPLANARE

V.7. Condiţii necesare de optimalitate cazul funcţiilor diferenţiabile

III. Serii absolut convergente. Serii semiconvergente. ii) semiconvergentă dacă este convergentă iar seria modulelor divergentă.

Valori limită privind SO2, NOx şi emisiile de praf rezultate din operarea LPC în funcţie de diferite tipuri de combustibili

Conice. Lect. dr. Constantin-Cosmin Todea. U.T. Cluj-Napoca

Curs 2 Şiruri de numere reale

Foarte formal, destinatarul ocupă o funcţie care trebuie folosită în locul numelui

Esalonul Redus pe Linii (ERL). Subspatii.


Examen AG. Student:... Grupa:... ianuarie 2011

Sisteme diferenţiale liniare de ordinul 1

R R, f ( x) = x 7x+ 6. Determinați distanța dintre punctele de. B=, unde x și y sunt numere reale.

Fig Impedanţa condensatoarelor electrolitice SMD cu Al cu electrolit semiuscat în funcţie de frecvenţă [36].

Laborator 1: INTRODUCERE ÎN ALGORITMI. Întocmit de: Claudia Pârloagă. Îndrumător: Asist. Drd. Gabriel Danciu

ANEXA 4. OPERAŢII ARITMETICE IMPLEMENTĂRI

SERII NUMERICE. Definiţia 3.1. Fie (a n ) n n0 (n 0 IN) un şir de numere reale şi (s n ) n n0

Asupra unei inegalităţi date la barajul OBMJ 2006

Criptosisteme cu cheie publică III

2. Circuite logice 2.4. Decodoare. Multiplexoare. Copyright Paul GASNER

Laborator 11. Mulţimi Julia. Temă

Analiza bivariata a datelor

Componente şi Circuite Electronice Pasive. Laborator 3. Divizorul de tensiune. Divizorul de curent

III.2.2. Reprezentarea în virgulă mobilă

SEMINAR 14. Funcţii de mai multe variabile (continuare) ( = 1 z(x,y) x = 0. x = f. x + f. y = f. = x. = 1 y. y = x ( y = = 0

Definiţia generală Cazul 1. Elipsa şi hiperbola Cercul Cazul 2. Parabola Reprezentari parametrice ale conicelor Tangente la conice

Codificatorul SN74148 este un codificator zecimal-bcd de trei biţi (fig ). Figura Codificatorul integrat SN74148

Instructiunea while. Forma generala: while (expresie) instructiune;

TEMA 9: FUNCȚII DE MAI MULTE VARIABILE. Obiective:

Arhitectura Calculatoarelor. Fizică - Informatică an II. 2. Circuite logice. Copyright Paul GASNER 1

Lucrarea de laborator nr. 2

1.3 Baza a unui spaţiu vectorial. Dimensiune

2. Circuite logice 2.5. Sumatoare şi multiplicatoare. Copyright Paul GASNER

Laborator 4 suport teoretic Tipuri de date utilizate în limbajul de programare C.

RĂSPUNS Modulul de rezistenţă este o caracteristică geometrică a secţiunii transversale, scrisă faţă de una dintre axele de inerţie principale:,

4. Măsurarea tensiunilor şi a curenţilor electrici. Voltmetre electronice analogice

Seminariile Capitolul X. Integrale Curbilinii: Serii Laurent şi Teorema Reziduurilor

1 INTRODUCERE - ORGANIZAREA UNUI COMPILATOR ELEMENTE DE TEORIA LIMBAJELOR FORMALE... 7

COLEGIUL NATIONAL CONSTANTIN CARABELLA TARGOVISTE. CONCURSUL JUDETEAN DE MATEMATICA CEZAR IVANESCU Editia a VI-a 26 februarie 2005.

Capitolul 4 Amplificatoare elementare

28. SUPRADEFINIREA OPERATORILOR

Integrale cu parametru

Subiecte Clasa a VIII-a

Orice izometrie f : (X, d 1 ) (Y, d 2 ) este un homeomorfism. (Y = f(x)).

Πού μπορώ να βρω τη φόρμα για ; Unde pot găsi un formular pentru? Για να ρωτήσετε που μπορείτε να βρείτε μια φόρμα

Olimpiada Naţională de Matematică Etapa locală Clasa a IX-a M 1

Stabilizator cu diodă Zener

Programarea Calculatoarelor

Compilatoare. Curs 4 Analiza semantica

CIRCUITE LOGICE CU TB

Profesor Blaga Mirela-Gabriela DREAPTA

Curs 2 DIODE. CIRCUITE DR

CARACTERISTICILE LIMBAJULUI DE PROGRAMARE

2.1 Sfera. (EGS) ecuaţie care poartă denumirea de ecuaţia generală asferei. (EGS) reprezintă osferă cu centrul în punctul. 2 + p 2

Capitolul 4. Integrale improprii Integrale cu limite de integrare infinite

SEMINARUL 3. Cap. II Serii de numere reale. asociat seriei. (3n 5)(3n 2) + 1. (3n 2)(3n+1) (3n 2) (3n + 1) = a

* K. toate K. circuitului. portile. Considerând această sumă pentru toate rezistoarele 2. = sl I K I K. toate rez. Pentru o bobină: U * toate I K K 1

Principiul Inductiei Matematice.

MULTIMEA NUMERELOR REALE

, semestrul 2. Curs 2

Ovidiu Gabriel Avădănei, Florin Mihai Tufescu,

Sortare. 29 martie Utilizarea şi programarea calculatoarelor. Curs 16

Εμπορική αλληλογραφία Ηλεκτρονική Αλληλογραφία

1.7. AMPLIFICATOARE DE PUTERE ÎN CLASA A ŞI AB

BARAJ DE JUNIORI,,Euclid Cipru, 28 mai 2012 (barajul 3)

Ταξίδι Γενικά. Γενικά - Τα απαραίτητα. Γενικά - Συνομιλία. Παράκληση για βοήθεια. Ερώτηση σε πρόσωπο αν μιλά αγγλικά

Problema a II - a (10 puncte) Diferite circuite electrice

6 n=1. cos 2n. 6 n=1. n=1. este CONV (fiind seria armonică pentru α = 6 > 1), rezultă

Noţiuni introductive

2. Circuite logice 2.2. Diagrame Karnaugh. Copyright Paul GASNER 1

Universitatea din Bucureşti Facultatea de Matematică şi Informatică. Algebră (1)

CIRCUITE INTEGRATE MONOLITICE DE MICROUNDE. MMIC Monolithic Microwave Integrated Circuit

Componente şi Circuite Electronice Pasive. Laborator 4. Măsurarea parametrilor mărimilor electrice

Seminar 5 Analiza stabilității sistemelor liniare

Transcript:

Compilatoare Generarea codului obiect

Generarea codului intermediar Cod intermediar vs. cod obiect Reduce diferenta semantica cod sursa cod obiect Acelasi compilator pe mai multe procesoare Acelasi compilator pentru mai multe limbaje Unele optimizari se fac mai simplu pe limbaj intermediar Se pot utiliza arbori sau limbaj pentru masina virtuala Cel mai frecvent folosit quadruples, three-address code - max. 3 operanzi/instructiune id1:= id2 op id3 id1:= op id2 id1:= val id1:= &id2 id1:= * id2 * id1:= id2 id1:= id2[id3] goto id if id1 oprel id2 goto id3 { op este un operator binar aritmetic sau logic} { op este un operator unar aritmetic sau logic} { val este un scalar sau o constanta } { adresa unui obiect in memorie } { citire din memorie via pointer } { scriere din memorie via pointer } { id2 adresa unui array, id2 index in array } { oprel este un operator relational }

Nivelul codului intermediar HIR mentine structura limbajului MIR tinde sa fie independent de limbaj si masina LIR e dependent de masina

Mai mult de 3 operanzi Pentru apelul de subprograme se utilizează o secvenţă de instrucţiuni de forma: param id.1 param id.2... param id.n call id, n Expresiile cu mai mult de 3 operanzi se despart in expresii elementare

Evaluarea de expresii Expresiile cu mai mult de 3 operanzi se despart in expresii elementare d=b 2-4ac Pe masinile load-store creeaza un nou temporar pentru fiecare rezultat intermediar Se presupune deocamdata ca exista un numar infinit de registri Se poate lucra cu un numar finit prin tehnici simple de alocare, dar e mai bine sa lasam un pas special de optimizare sa se ocupe de asta Index: nr. instructiunii care a produs valoarea Generarea se face printr-o traversare a arborelui sintactic = d - b * b * * 4 a c t1:= b * b t2:= 4 * a t3:= t2 * c t4:= t1 t2 d := t4

Expresii pe masinile cu stiva Instructiuni cu 0 adrese: push, pop, aritmetice; operatiile binare scot doua valori de pe stiva, pun la loc una Pe masinile cu stiva: Pt a evalua o variabila incarca valoarea Pt a evalua o constanta push valoarea Pt a evalua o expresie Evalueaza stanga Evalueaza dreapta Aplica operatorul = d - b * b Load b Dupl Mult Load a Push 4 Mult Load c Mult Sub Store d * * 4 a c

Tipuri simple Integer atentie la cross-compiling Caractere tipuri de codificari; Unicode Floating point Reprezentare standard (IEEE 754) Valori speciale: ±0, ±inf, NotANumber Overflow, dar si underflow Care este cel mai mic numar pozitiv reprezentabil? Numere denormalizate Rotunjire, trunchiere, si aritmetica pe intervale

Tipuri compuse A:array(L1..L1+M-1, L2..L2+N-1) of integer; A[i,j] e de fapt tmp=(i-l1)*n+j-l2; A[tmp] Se poate tine A-L1*N-L2 in symbol table, accesam direct in functie de i si j Atribuirea devine de fapt o bucla dubla / memcpy char a[2][3] char *a[2] a a a[1][1] a[1][1]

Aliniere, padding A:record (structuri) se aloca memorie secvential pentru campurile structurii; de obicei, se aliniaza; nu ne putem baza pe layout c1 i c2 struct { char c1; int i; char c2}; Bit fields c1 c2 i1 i2 struct { char c1:6; char c2:6; short i1:6; short i2:6;};

Generarea de cod pentru atribuire Genereaza adresa partii stangi Variabila (tip scalar? poate fi tinuta in registru) Membru (expresie cu. ) Adresa structurii + offsetul in cadrul structurii. Element (expresie cu [] ) Adresa array + valoare index * dimensiune element. Genereaza valoarea partii drepte Atribuie (*addr)=val Se presupune ca am transformat deja casturile implicite in casturi explicite

Generarea de cod pentru if if cond then then_statements else else_statements; end if; t1 = cond if not t1 goto else_label {quadruples for then_statements} goto endif_label else_label: {quadruples for else_statements} endif_label: Genereaza etichete Genereaza instructiuni pentru nodurile fii Plaseaza etichete in cod (poate avea nevoie de etichete si pt then -> cand?) Daca avem elif, e practic else if ; eticheta de endif poate fi mostenita de la parinte

Evaluarea booleana partiala Se trateaza expresiile booleene ca instructiuni de tip if then else If(B1 B2) S1 else S2 => if(b1) goto S1 else if (B2) S1 else S2; If(B1&&B2) S1 else S2 => if(b1) then if(b2) then S1 else goto S2 else S2; Practic, se mostenesc etichetele de then si else de la if-ul parinte

Generarea de cod pt. while while (cond) { start_loop: if (!cond) goto end_loop s1; quadruples for s1 if (cond2) break; if (cond2) goto end_loop s2; quadruples for s2 if (cond3) continue; if (cond3) goto start_loop s3; quadruples for s3 }; goto start_loop end_loop: Genereaza doua etichete: start_loop, end_loop Restul codului ca mai sus

Alte tipuri de bucle Bucle numerice Semantica: bucla nu se executa daca intervalul variabilei e vid deci testul se executa initial E de fapt o bucla while: For J in expr1..expr2 -> J=expr1; while(j<=expr2){ ;J++;} Trebuie avut grija la continue J++ se executa in acest caz! Bucle repeat until Sunt bucle while, dar se copiaza o data corpul buclei inaintea ei

Plasarea testului la sfarsit K in expr1.. Expr2 loop t1 = expr1 t2 = expr2 K = t1-1 goto test_label start_label: S1; quadruples for S1 end loop; test_label: K = K + 1 if K <= t2 goto start_label end_label: Generarea de bucle hardware Procesoare cu o instructiune de loop Se detecteaza secventa de mai sus in codul intermediar

Generarea de cod pentru switch Daca intervalul e mic si majoritatea cazurilor sunt definite, se poate creea tabela de salt ca vector de etichete case x is when up: y := 0; when down : y := 1; end case; table label1, label2 jumpi table+x label1: y = 0 goto end_case label2: y = 1 goto end_case end_case: Altfel, se foloseste o serie de if-uri

Operatii complexe Ridicarea la putere cazurile simple pot fi tratate eficient x 2 = x*x; x 4 =x 2 *x 2 (strength reduction) Cazurile complicate apel de functii de biblioteca Tipurile care nu sunt suportate nativ tot prin functii de biblioteca Intrinsici operatii complexe la nivel inalt, simple la nivelul codului obiect DSP (mac), bitscan, instr. vectoriale

Generatoare de generatoare de cod Setul de instructiuni asamblare poate fi reprezentat ca un set de reguli de rescriere a arborelui sintactic Sablon, nod nou, cost, actiune replacement <- template (cost) = {action} Codul asamblare e generat in procesul de reducere al arborelui la un singur nod Alg. care cauta acoperirea de cost minim generator de generator de cod. Setul de reguli ( gramatica ) = schema de traducere a arborelui

Exemplu: reguli Regula Instructiune Cost reg r1 const c mov r1, c 2 reg r1 read (a) mov r1, a 2 λ write a := (reg r1) mov a, r1 2+r1 λ write (reg r1) := (reg r2) mov [r1], r2 1+r1+r 2 reg r1 read (reg r2) mov r1, [r2] 1+r2 reg r1 read ((const c) + (reg r2)) mov r1,c[r2] 2+r2 reg r1 (reg r1) + (read ((const c) + (reg r2))) add r1,c[r2] 2+r1+r 2 reg r1 (reg r1) + (reg r2) add r1, r2 1+r1+r 2 reg r1 (const 1) + (reg r1) inc r1 1+r1

Reguli, rescriere arbore

Exemplu arbore a[i] = b + 1 write a, i > pe stiva (fp + offset) b -> in.data + + const 1 read b + read const off_a fp + const off_i fp

Cum se face generarea de cod Intr-un prim pas, se acopera arborele cu sabloane, a.i. sa se obtina un cost minim In al doilea pas, se executa codul asociat cu sabloanele care va produce programul in limbaj de asamblare. Descrierea e similara cu gramaticile pt. parsare dar algoritmul e fundamental diferit!

Generare de cod Arbore Regula Instructiuni Cost const off_a reg r1 const off_a mov r1, off_a 2 const off_a + fp reg r1 (reg r1) + (reg fp) mov r1, off_a add r1, fp 3 read + reg r2 read (reg r1) mov r1, off_i add r1, fp mov r2, [r1] 4 const off_i fp reg r2 read ((const off_i) + (reg fp)) mov r2, off_i[fp] 2

Generare de cod Arbore Regula Instructiuni Cost + + const off_a fp read + const off_i fp reg r1 (reg r1) + (read ((const c) + (reg r2))) reg r1 (reg r1) + (reg r2) mov r1, off_a add r1, fp add r1, off_i[fp] mov r1, off_a add r1, fp mov r2, off_i[fp] add r1,r2 5 6 + reg r3 (reg r3) + (reg r4) mov r3, 1 mov r4, b add r3, r4 5 const 1 read b reg r3 (const 1) + (reg r3) mov r3,b inc r3 3

Generare de cod Arbore Instructiuni Cost write + + const 1 + read const off_a fp + read b mov r1, off_a add r1, fp add r1, off_i[fp] mov r3,b inc r3 mov[r1],r3 9 const off_i fp

Algoritmul de generare de cod Acoperirea optima e formata din acoperirea optima a fiilor + costul aplicarii unui sablon Principiul optimalitatii programare dinamica Cautati iburg, lburg

Memoria la runtime Variabilele locale, parametrii in cadrul de stiva local Variabilele globale, statice in memorie (alocate static) Alocarea dinamica (new, malloc) in heap

Cadrul de stiva Stack Pointer Frame Pointer Cand este nevoie de fp? Conventii de apel Parametri Valori intoarse Caller / Callee saved Cine curăţă stiva?

Legatura statica procedure f var x:integer; begin h; end; procedure g; begin read(x); end; procedure h; begin g; end;

Apelarea procedurilor 1. Asamblarea argumentelor ce trebuie transferate procedurii si pasarea controlului. Fiecare argument este evaluat si pus in registrul sau locatia de pe stiva corespunzatoare. Cum se trimit structuri prin valoare? Se salveaza in memorie registrii caller saved folositi. Daca este necesar, se calculeaza legatura statica a procedurii apelate Se salveaza adresa de intoarcere si se executa un salt la adresa codului procedurii (de obicei o instructiune call face aceste lucruri)

Apelarea procedurilor 2. Prologul procedurii este executat la intrarea in procedura. Creaza cadrul de stiva si stabileste mediul necesar adresarii. Se salveaza vechiul fp, vechiul sp devine noul fp, si se calculeaza noul sp Se salveaza in memorie registrii callee saved folositi. 3. Se executa procedura, care la randul ei poate apela alte proceduri Proceduri frunza nu mai apeleaza alte proceduri. Optimizari?

Apelarea procedurilor 4. Epilogul procedurii este executat la iesirea din procedura. Restaureaza mediul de adresare si reda controlul apelantului. Valoarea care trebuie intoarsa se pune in locul corespunzator (daca procedura intoarce o valoare) Intoarcerea structurilor pointer la struct! Registrii salvati de procedura apelata sunt restaurati din memorie Se restaureaza vechiul sp si vechiul fp Se incarca adresa de revenire si se executa un salt la aceasta adresa (de obicei, o instructiune ret face acest lucru)

Apelarea procedurilor 5. Codul din procedura apelanta termina restaurarea mediului său şi continuă execuţia: Registrii salvati de catre procedura apelanta sunt restaurati din memorie Se foloseste valoarea intoarsa de procedura apelata

Politici de apel Prin valoare Prin referinta Prin rezultat Prin valoare-rezultat Prin nume