cvs commit: src/sys/sys cdefs.h
Matthew Dillon
dillon at apollo.backplane.com
Wed Aug 27 10:29:41 PDT 2003
: NOTE: No source files have been modified to make use of the __usereg
: macro yet. This process can be automated, because the maximum number
: of arguments that apply to this macro is 3.
:
: Reviewed by: Matt
:
: Revision Changes Path
: 1.5 +51 -0 src/sys/sys/cdefs.h
Though I will note that use of this macro will be fairly restricted,
at least initially, since it involves an incompatible ABI change for
the functions it is applied to. I don't want people to go __usereg
crazy in the source tree!
It kinda brings me back to my Amiga days where regargs were used
extensively to good effect. For IA32, however, due to the fewer
registers that are available, use of regargs should be restricted to
small 'leaf' functions only... things like bcopy(), and *NOT* things like,
say, tcp_input() :-).
-Matt
Matthew Dillon
<dillon at xxxxxxxxxxxxx>
/*
* TEST.C
*/
#define __usereg __attribute__((regparm(3)))
__usereg int
fubar(int a, int b)
{
return(a + b);
}
int x, y, z;
main()
{
z = fubar(x, y);
}
Outputs the following assembly:
fubar:
pushl %ebp << would be removed by -fomit-frame-pointer
movl %esp,%ebp << would be removed by -fomit-frame-pointer
addl %edx,%eax
leave << would be removed by -fomit-frame-pointer
ret
main:
pushl %ebp
movl %esp,%ebp
subl $8,%esp
movl y,%edx << arguments to function
movl x,%eax
call fubar << function call
movl %eax,z << return value
leave
ret
More information about the Commits
mailing list