From: Jeffrey A Law <law@cygnus.com>
To: Philipp Rumpf <prumpf@suse.de>
Cc: Matthew Wilcox <Matthew.Wilcox@genedata.com>,
parisc-linux@thepuffingroup.com
Subject: Re: [parisc-linux] HPUX syscall ABI?
Date: Sun, 01 Aug 1999 22:12:27 -0600 [thread overview]
Message-ID: <31287.933567147@upchuck.cygnus.com> (raw)
In-Reply-To: Your message of Mon, 02 Aug 1999 05:32:39 +0200. <19990802053239.N13236@suse.de>
In message <19990802053239.N13236@suse.de>you write:
> > For those interested; Linux syscalls now take the syscall number in r20,
> > take arguments in r26-r21, zero r1, r19-r26, r29 and r31 on exit, preserv
> e
> > r3-r18, r27(dp) and r30(sp), clobber r2 and return the result in r28.
>
> sounds rather strange but as long as gcc takes it as inline assembly ...
>
> > ObRant: Why on earth define a register to be caller-saves but not allow i
> t
> > to contain an argument? Why force it onto the stack?
>
> An ABI that would specify too many argument registers would force the
caller
> to load them before the call and the callee to save them again because both
> would need the additional argument registers.
At function entry the compiler copies all parameters passed in registers into
pseudo-registers.
Those pseudo registers are then subject to normal register allocation. ie,
the compiler can allocate it into a call saved register, into a stack slot
(and bring it into a register where needed) or into a call clobbered register
and save/restore it around calls based on which of the options minimizes
cost.
In fact, if you examine the PA64 ABI, it uses %r19-%r26 for parameters,
%r28 for the structure value return address and %r29 for the outgoing arg
pointer, %r2 for the return address, %r1 is a scratch for long calls. That
leaves just %r31 as the only call-clobbered register which is not uses for
passing parameters or not clobbered on the call path itself.
There's no benefit to not using those call clobbered registers for parameter
passing other than to save a little stack space (you have a register flush to
fixed areas in the frame inside varargs/stdarg functions).
jeff
next prev parent reply other threads:[~1999-08-02 4:12 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
1999-08-01 19:50 [parisc-linux] HPUX syscall ABI? Matthew Wilcox
1999-08-02 3:32 ` Philipp Rumpf
1999-08-02 4:12 ` Jeffrey A Law [this message]
1999-08-02 4:21 ` Philipp Rumpf
1999-08-02 4:27 ` Jeffrey A Law
1999-08-02 6:08 ` LaMont Jones
1999-08-02 6:26 ` Matthew Wilcox
1999-08-02 8:36 ` LaMont Jones
1999-08-02 16:50 ` Jerry Huck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=31287.933567147@upchuck.cygnus.com \
--to=law@cygnus.com \
--cc=Matthew.Wilcox@genedata.com \
--cc=parisc-linux@thepuffingroup.com \
--cc=prumpf@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.