Article View: be.comp.programming
Article #4995caller-save vs. callee-save registers
From: Bart Vandewoestyne
Date: Sun, 08 Jun 2003 19:44
Date: Sun, 08 Jun 2003 19:44
66 lines
3738 bytes
3738 bytes
Ik snap wel wat caller-save en callee-save registers zijn, maar mij is
het niet echt duidelijk waarom dit onderscheid juist wordt gemaakt.
In mijn handboek (1) worden 2 voorbeelden vermeld, het eerste gaat als
volgt en denk ik nog te snappen:
void h(int y) {
int x;
x = y+1;
f(y);
f(2);
}
Mijn boek zegt hier "If local variabele x is never live across a
procedure call, it is properly kept in a caller-save register.
Explain how doing this would speed up the program above."
Het antwoord daarop is volgens mij dat aangezien de caller (zijnde h)
hier weet dat x niet gebruikt wordt na het oproepen van f, dat je dan
best x in een caller-save register stopt en dat je dan de caller dat
register TOCH NIET laat saven en daarmee een store uitspaart. Mocht
je x in een callee-save register gestopt hebben, dan zouden de twee
oproepen van f telkens het register van x gesaved en teruggezet
hebben.
Maar nu komt mijn boek ook nog af met volgend voorbeeld:
"If local variabele b is live across more than one procedure call, is
it kept in a callee-save register? Explain how doing this would speed
up the following program:"
int f(int a) {
int b;
b = a +1;
g();
h(b);
return b+2;
}
Hier wordt b dus wel nog gebruikt na het oproepen van g en h. Ik denk
wel dat je b hier in een callee-save register moet stoppen, want op
pag. 130 vermeld mijn boek: "..., if the caller has a local variabele
i that is needed before and after several function calls, it may put i
in some callee-save register r_i and, save r_i just once (upon entry
to f) and fetch it back just once (before returning from f)."
En dat snap ik nu eens niet goed se... Als je die b in een
callee-save register stopt, dan zal toch telkens bij het oproepen van
g en h dat register gesaved worden? M.a.w. dus extra veel fetches en
stores? Zou je niet eerder moeten zeggen dat je b in een caller-save
register moet stoppen omdat je het register van b dan maar 1 keer moet
laten bewaren door de caller (f) en slechts 1 keer moet terugzetten
vlak voor je returnt?
I'm confused...
Greetzzz,
mc303
(1) Modern compiler implementation in C - Andrew W. Appel
--
Ing. Bart Vandewoestyne Bart.Vandewoestyne_at_pandora.be
Hugo Verrieststraat 48 GSM: +32 (0)478 397 697
B-8550 Zwevegem http://users.pandora.be/vandewoestyne
----------------------------------------------------------------------
"Any fool can know, the point is to understand." - Albert Einstein
Technical Details
Message-ID:
<3EE3920E.6214CC7A@pandora.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-04!sn-xit-01!sn-xit-09!supernews.com!news.maxwell.syr.edu!newsfeed.vmunix.org!aotearoa.belnet.be!naxos.belnet.be!news.belnet.be!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: fcea4,cf0ff94794bfc79f,start X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2003-06-08 12:44:21 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-04!sn-xit-01!sn-xit-09!supernews.com!news.maxwell.syr.edu!newsfeed.vmunix.org!aotearoa.belnet.be!naxos.belnet.be!news.belnet.be!not-for-mail From: Bart Vandewoestyne <Bart.VandewoestyneNOSPAM@pandora.be> Newsgroups: be.comp.programming Subject: caller-save vs. callee-save registers Date: Sun, 08 Jun 2003 21:44:14 +0200 Organization: MyHome Lines: 66 Message-ID: <3EE3920E.6214CC7A@pandora.be> Reply-To: Bart.Vandewoestyne@pandora.be NNTP-Posting-Host: seven.kulnet.kuleuven.ac.be Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Trace: naxos.belnet.be 1055101459 20382 134.58.127.12 (8 Jun 2003 19:44:19 GMT) X-Complaints-To: abuse@belnet.be NNTP-Posting-Date: Sun, 8 Jun 2003 19:44:19 +0000 (UTC) X-Mailer: Mozilla 4.77 [en] (X11; U; Linux 2.4.18 i686) X-Accept-Language: nl-BE, nl, en, de Cache-Post-Path: seven.kulnet.kuleuven.ac.be!unknown@localhost X-Cache: nntpcache 2.4.0b5 (see http://www.nntpcache.org/)