cvs commit: src/sys/sys cdefs.h

Matthew Dillon dillon at
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() :-).

					Matthew Dillon 
					<dillon at xxxxxxxxxxxxx>

#define __usereg        __attribute__((regparm(3)))

__usereg int
fubar(int a, int b)
    return(a + b);

int x, y, z;

    z = fubar(x, y);

    Outputs the following assembly:

        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

        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


More information about the Commits mailing list