Article View: be.comp.programming
Article #4998Re: caller-save vs. callee-save registers
From: Bart Vandewoestyne
Date: Sun, 08 Jun 2003 20:52
Date: Sun, 08 Jun 2003 20:52
51 lines
3811 bytes
3811 bytes
Nicolas Barbier wrote: > >>"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:" > > Deze vraag is nogal dubbelzinnig, betekent "doing this" in de laatste vraag > "wat je doet volgens het antwoord op de eerste vraag" of "als het antwoord > op de eerste vraag ja is"? Inderdaad... dubbelzinnigheid alom... bemerk dat ik dus die vraag wel degelijk NIET zelf heb geformuleerd he :-) > Ik zal hier eens even mijn ad hoc aangeleerde compiler-kennis gaan > bovenhalen ;-) : > > Welke van deze twee het beste resultaat gaat opleveren hangt af van hoeveel > registers die "several functions calls" nodig hebben. Als die ooit het > callee-save register gaan storen, dan had je het even goed zelf kunnen doen > (dan doe je het gegarandeerd maar 1 keer) (en je stopt het dus in een > caller-save register), maar als ze het nooit nodig hebben, dan bespaar je > de store als je het in een callee-save register stopt. > > Maw: gebruiken de opgeroepen functies weinig registers, stop je gegevens > dan in callee-save registers. Anders stop je ze in caller-save registers, > en je store't ze voordat je de functies oproept. > > Als je niet aan "interprocedural" optimalisatie kan doen (omdat je de code > van de opgeroepen functies niet bij de hand hebt, bv omdat ze in een andere > compilatie-unit zitten), veronderstel ik dat de meeste compilers gaan > aannemen dat de opgeroepen functies veel registers gebruiken en daarom zo > veel mogelijk live variabelen in caller-save registers gaan stoppen. Inderdaad, dat zal het zijn! Aan de hand van een mailtje naar een vriend kwam ik zo ook ongeveer tot die conclusie. Alles zal dus inderdaad afhangen van de callees... als deze het register van b niet blijken nodig te hebben omdat ze heel weinig registers gebruiken, dan kan je die b in een callee-save register stoppen en dan de callees toch geen store/fetch-werk laten doen omdat ze het reg van b toch niet nodig hebben. Blijkt echter dat het register van b ook zal nodig zijn voor de callees, dan zet je b denk ik ook best in een caller-save register, al zal het wschl niet veel verschil uitmaken dan... Ma ik had dus in mijn redenering niet gedacht aan de 'hoeveelheid' registers die de callees eventueel kunnen nodig hebben. Bedankt om me daar op te wijzen! Greetzzz, mc303
Technical Details
Message-ID:
<3EE3A20D.60600@pandora.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-03!sn-xit-01!sn-xit-08!supernews.com!news.tele.dk!news.tele.dk!small.news.tele.dk!proxad.net!nerim.net!aotearoa.belnet.be!naxos.belnet.be!news.belnet.be!not-for-mailReferences:
<3EE3920E.6214CC7A@pandora.be> <3ee39eb1$0$6523$afc38c87@sisyphus.news.be.easynet.net>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: fcea4,cf0ff94794bfc79f X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2003-06-08 13:52:32 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-03!sn-xit-01!sn-xit-08!supernews.com!news.tele.dk!news.tele.dk!small.news.tele.dk!proxad.net!nerim.net!aotearoa.belnet.be!naxos.belnet.be!news.belnet.be!not-for-mail From: Bart Vandewoestyne <Bart.VandewoestyneNOSPAM@pandora.be> Newsgroups: be.comp.programming Subject: Re: caller-save vs. callee-save registers Date: Sun, 08 Jun 2003 22:52:29 +0200 Organization: KULeuvenNet Lines: 52 Message-ID: <3EE3A20D.60600@pandora.be> References: <3EE3920E.6214CC7A@pandora.be> <3ee39eb1$0$6523$afc38c87@sisyphus.news.be.easynet.net> NNTP-Posting-Host: seven.kulnet.kuleuven.ac.be Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Trace: naxos.belnet.be 1055105550 23266 134.58.127.12 (8 Jun 2003 20:52:30 GMT) X-Complaints-To: abuse@belnet.be NNTP-Posting-Date: Sun, 8 Jun 2003 20:52:30 +0000 (UTC) User-Agent: Mozilla/5.0 (Windows; U; WinNT; en; rv:1.0.2) Gecko/20030311 Beonex/0.8.2-stable X-Accept-Language: en-us, en Cache-Post-Path: seven.kulnet.kuleuven.ac.be!unknown@localhost X-Cache: nntpcache 2.4.0b5 (see http://www.nntpcache.org/)