(in dutch)

> Instructieselectie werkt nu aardig maar wat mij nog onduidelijk is, is hoe
> je bij het aanroepen van een andere functie code genereert om de
> callee-saved registers te bewaren: je weet immers nog niet welke dat zijn,
> want de RA komt pas na IS.

Precies. En daarom wil je dat overlaten aan RA. De overlay definitie voor de jal instructie is als volgt gedefinieerd:

  jal(lab, ra, use) =
    OPER(["    jal    ", L(1)], use, CallerSavedRegisters, [lab, ra]) 
Dit betekent dat de CallerSavedRegisters (zie MIPS-registers.r) overschreven kunnen worden. Dit is genoeg om aan RA te melden dat de callersavedregisters niet gebruikt kunnen worden waarden te bewaren die moet leven na de procedure aanroep. `use' is een lijst met registers die `gebruikt' wordt door de jal instructie. Dit is noidg om te zorgen dat de waarden in de parameter registers blijven leven tot de instructie wordt uitgevoerd. lab is het label van de aangeroepen functie. ra is het label van het return adres. Dit moet je genereren na het aanroepen van jal
   SEQ(jal("f", "a_0", [TEMP("a_1")]), label("a_0"))
om te zorgen dat de control flow duidelijk is voor RA.

Als je deze informatie verstrekt zal RA zorgen dat de registers zo gekozen worden dat ze niet in een callersaved register zitten als ze een functie aanroep moet overleven. Als dat het niet aanders kan zal RA een register spillen en ruimte op de stack alloceren.

De callee-saved registers moet je aan het begin van een functie aanroep moven naar een temp en aan het einde weer terug. Als het register niet nodig is wordt de move gecoalesced anders worden er spill instructies gegenereerd.

Hoop dat het zo duidelijk is. Appel vertelt dit ook in de sectie over CALLER-SAVE AND CALLEE-SAVE REGISTERS in hoofdstuk 11 sectie 3.

-- EelcoVisser - 10 Jan 2002

Revision: r1.2 - 15 Sep 2002 - 15:54 - EelcoVisser
Tiger > CompilerPackages > IRToASM > CallerSavedRegisters
Copyright © 1999-2020 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback