[cpl] [Tema 4] Task 5 - apeluri de functii

Alexandru Guduleasa alexandru.guduleasa at gmail.com
Wed Dec 30 21:08:38 EET 2015


Pentru toate apelurile de funcție se creează un nod de tipul CplCall în
graf.
Pattern-urile pentru acest nod sunt adăugate; în urma lor veți obține o
instrucțiune BLI (dacă se sare la un label) sau o pseudo-instrucțiune CALLR
(Call Register).

În C, apelurile de funcții directe apar când se apelează o funcție folosind
numele acesteia.
Apelurile indirecte apar când folosim pointeri către funcții.

ISA-ul nu conține o instrucțiune, de tip call, care să sară la o adresă
aflată intr-un registru și care să seteze LR-ul.
Pseudo-instrucțiunea CALR modelează această funcționalitate in timpul
generării de cod.

Pentru prima parte a task-ului 5, puteți pune un assert că operandul 0 este
registru.

Spor
Alex


2015-12-30 20:18 GMT+02:00 Georgiana Diana via cpl <cpl at cursuri.cs.pub.ro>:

> Actually, in CplPatterns.td vad ca doar cu registru se apeleaza CALLR :D
>
>  def : Pat<(CplCall IntRegs:$ra), (CALLR IntRegs:$ra)>;
>
> 2015-12-30 20:02 GMT+02:00 Georgiana Diana <geodiana93 at gmail.com>:
>
>> Buna,
>> In task-ul 5 scrie asa:
>>
>> "Pentru apeluri de funcție indirecte (cu adresa funcției într-un
>> registru)  ..."
>>
>> Apelurile de functii pot fi si directe, cu adresa printr-un operand
>> imediat ? Cu alte cuvinte, pentru CALLR, ar trebui sa consideram eroare
>> daca operandul de pe pozitia 0 nu este registru ?
>>
>> Georgiana
>>
>> --
>> *Georgiana Diana Ciocirdel*
>> Polytechnic University of Bucharest,
>> Computer Science
>>
>
>
>
> --
> *Georgiana Diana Ciocirdel*
> Polytechnic University of Bucharest,
> Computer Science
>
> _______________________________________________
> cpl mailing list
> cpl at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/cpl
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/cpl/attachments/20151230/9cc7f186/attachment.html>


More information about the cpl mailing list