🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #4995

caller-save vs. callee-save registers

#4995
From: Bart Vandewoestyne
Date: Sun, 08 Jun 2003 19:44
66 lines
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-mail

Show 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/)