Differences

This shows you the differences between two versions of the page.

Link to this comparison view

cpl:labs:05 [2016/10/29 13:19]
bogdan.nitulescu [Exerciții de laborator (10p)]
cpl:labs:05 [2017/11/01 06:59] (current)
bogdan.nitulescu [Exerciții de laborator (10p)]
Line 68: Line 68:
 ==== Introducere în API-ul de C++ ==== ==== Introducere în API-ul de C++ ====
  
-Pentru a obține reprezentarea în memorie a IR-ului din exemplu puteți folosi codul din arhiva de sarcini {{:​cpl:​labs:​lab5_cpl.zip|}}. După cum se poate observa, pentru a putea folosi API-ul C++ vor fi necesare ​includerea mai multor headere. În plus, ar fi bine să folosiți și namespace-ul llvm:+Pentru a obține reprezentarea în memorie a IR-ului din exemplu puteți folosi codul din arhiva de sarcini {{:​cpl:​labs:​lab5_cpl.zip|}}. După cum se poate observa, pentru a putea folosi API-ul C++ va fi necesară ​includerea mai multor headere. În plus, ar fi bine să folosiți și namespace-ul llvm:
 <code cpp>​using namespace llvm;</​code>​ <code cpp>​using namespace llvm;</​code>​
  
Line 158: Line 158:
 În general, expresiile constante sunt folosite pentru valori care vor fi constante în executabilul final, dar nu pot fi calculate încă (de exemplu pentru că se bazează pe adresa unei variabile globale, care este stabilită mult mai târziu în cadrul procesului de compilare). În general, expresiile constante sunt folosite pentru valori care vor fi constante în executabilul final, dar nu pot fi calculate încă (de exemplu pentru că se bazează pe adresa unei variabile globale, care este stabilită mult mai târziu în cadrul procesului de compilare).
  
-De regulă subclasele lui ''​Value''​ pun la dispoziție una sau mai multe metode statice ''​Create''​ care se pot folosi pentru a obține obiecte de acel tip. Există însă și excepții, pentru care va trebui ​să folosiți ​direct constructorul.+De regulă subclasele lui ''​Value''​ pun la dispoziție una sau mai multe metode statice ''​Create''​ care se pot folosi pentru a obține obiecte de acel tip. Există însă și excepții, pentru care trebuie folosit direct constructorul. Pentru un API uniform e recomandat ​să folosiți ​clasa [[http://​llvm.org/​doxygen/​classllvm_1_1IRBuilder.html | IRBuilder]].
  
 Ierarhia de valori ușurează lucrul cu orice combinații de instrucțiuni sau constante. De exemplu, o instrucțiune de adunare poate folosi ca operanzi fie un argument al funcției și o constantă, fie o constantă și rezultatul unei instrucțiuni anterioare, fie rezultatele a două instrucțiuni anterioare, și așa mai departe. Pentru a folosi rezultatul unei instrucțiuni ca operand, pur și simplu folosiți instanța acelei instrucțiuni:​ Ierarhia de valori ușurează lucrul cu orice combinații de instrucțiuni sau constante. De exemplu, o instrucțiune de adunare poate folosi ca operanzi fie un argument al funcției și o constantă, fie o constantă și rezultatul unei instrucțiuni anterioare, fie rezultatele a două instrucțiuni anterioare, și așa mai departe. Pentru a folosi rezultatul unei instrucțiuni ca operand, pur și simplu folosiți instanța acelei instrucțiuni:​
Line 220: Line 220:
 === Exercițiul 6 - apel printf (2p) === === Exercițiul 6 - apel printf (2p) ===
  
-Apelul funcției printf va primi 4 argumente: formatul + cele 3 valori care trebuie printate (2 constante și rezultatului apelului functiei ''​sum''​). Pentru a transmite ca parametru formatul, ​va trebui să îi calculați adresa folosind o constantă ​de tip GetElementPointer.+Apelul funcției printf va primi 4 argumente: formatul + cele 3 valori care trebuie printate (2 constante și rezultatului apelului functiei ''​sum''​). Pentru a transmite ca parametru formatul, ​veti folosi referinta intoarsa ​de llvm::​IRBuilder::​CreateGlobalStringPtr,​ din exercitiul anterior.
 ===== BONUS ===== ===== BONUS =====
 === contains === === contains ===
cpl/labs/05.1477736346.txt.gz · Last modified: 2016/10/29 13:19 by bogdan.nitulescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0