[Python-Dev] Accessing globals without dict lookup

Neil Schemenauer nas@python.ca
Tue, 12 Feb 2002 13:27:24 -0800


Tim Peters wrote:
>     if (normal)
>         do normal stuff
>     else do exceptional stuff
> 
> Most dumb compilers on platforms that care use a "forward branches probably
> aren't taken, backward branches probably are" heuristic for setting
> branch-prediction hints in the machine code; and on platforms that don't
> care it's usually faster to fall through than to change the program counter
> anyway.

I seem to remember someone saying that GCC generated better code for:

        if (exceptional) {
            do exceptional things
            break / return / goto
        }
        do normal things
   
Is GCC in the dumb category?  Also, the Linux is starting to use this
set of macros more often:

    /* Somewhere in the middle of the GCC 2.96 development cycle, we
     * implemented a mechanism by which the user can annotate likely
     * branch directions and expect the blocks to be reordered
     * appropriately.  Define __builtin_expect to nothing for earlier
     * compilers.  */

    #if __GNUC__ == 2 && __GNUC_MINOR__ < 96
    #define __builtin_expect(x, expected_value) (x)
    #endif

    #define likely(x)       __builtin_expect((x),1)
    #define unlikely(x)     __builtin_expect((x),0)

For example:

    if (likely(normal))
        do normal stuff
    else do exceptional stuff

I don't have GCC >= 2.96 otherwise I would have tried sprinkling some of
those macros in ceval and testing the effect.

  Neil