Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Jan 1999 16:33:12 -0800 (PST)
From:      Matthew Dillon <dillon@apollo.backplane.com>
To:        Peter Jeremy <peter.jeremy@auss2.alcatel.com.au>
Cc:        current@FreeBSD.ORG
Subject:   Re: indent(1) and style(9) (was: btokup() macro in sys/malloc.h)
Message-ID:  <199901290033.QAA12211@apollo.backplane.com>
References:   <99Jan29.074452est.40330@border.alcanet.com.au>

next in thread | previous in thread | raw e-mail | index | archive | help
:Luigi Rizzo <luigi@labinfo.iet.unipi.it>
:>not speaking about vinum, but to me, the indentation of 8 char and
:...
:
:According to most of the coding standards I've read, readability
:(and hence maintainability) come before efficiency.  That said, I
:agree that efficiency _is_ an issue within the kernel's critical
:paths (the TCP/IP code being one).
:
:Judicious use of inline functions (and macros) should help move
:code to the left - and may even make it more understandable.
:
:Peter

    More then judicious use -- inlines are an incredible advantage.  Most
    people don't realize that GCC will optimize constant arguments through
    an inline call.  Try this:

static __inline
fubar(int c)
{
    if (c & 1)
        ++c;
    if (c & 2)
        ++c;
    return(c);
}

void
fubar2(void)
{
    volatile int x;

    x = fubar(0);
    x = fubar(1);
    x = fubar(2);
    x = fubar(3);
}

    % cc -S -O2 x.c
    % cat x.s

fubar2:
        pushl %ebp
        movl %esp,%ebp
        subl $4,%esp
        xorl %eax,%eax		<----- fubar (0)
        movl %eax,-4(%ebp)
        movl $3,-4(%ebp)	<----- fubar (1)
        movl $3,-4(%ebp)	<----- fubar (2)
        movl $4,-4(%ebp)	<----- fubar (3)
        leave
        ret

    For some good examples of inlines and inherent optimizeable code,
    take a look at vm/vm_page.h.

    For example, look at vm_page_sleep_busy() keeping in mind that the
    also_m_busy and msg arguments are usually constants.

    Another example:  vm_page_protect(), where 'prot' is usually passed
    as a constant. 

    For that matter, we could probably inline a good chunk of the smaller
    pmap_*() functions as well, such as pmap_page_protect ( currently in
    i386/i386/pmap.c ).  This would get rid of an entire subroutine call
    layer without reducing readability at all.

					-Matt
					Matthew Dillon 
					<dillon@backplane.com>


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199901290033.QAA12211>