Menu

#520 TEBC: replace giant switch by computed goto

open
6
2007-11-09
2007-10-26
No

The attached patch optionally replaces the giant switch in TEBC by a computed goto (GCC extension, also available e.g. in sun cc).

This speeds up loops.bench by around 5% and the whole of tclbench by around 1% (on average) on my macosx powerpc.

if this proves to be worthwhile on other platforms, I will add autoconf machinery to detect if computed gotos are available, for now control use of computed gotos via
the USE_COMPUTED_GOTO #define at line 193

Discussion

  • Daniel A. Steffen

    patch to r1.339 of tclExecute.c

     
  • Daniel A. Steffen

    • priority: 5 --> 6
     
  • Daniel A. Steffen

    patch against HEAD

     
  • Daniel A. Steffen

    Logged In: YES
    user_id=90580
    Originator: YES

    updated patch attached:
    - now includes configure checks for computed goto and __builtin_expect availability
    - added configurable inlining of common code into the NEXT_INST_{F,V} macros according to TEBC_INLINE_LEVEL:
    0 no inlining
    1 inline cleanup code
    2 also inline async handler and other check code
    3 also inline peephole gotos
    4 also do indirect threading (direct computed goto to next instruction)
    (level 4 obviously only makes sense when computed gotos are available, but the others are effective for the giant switch as well).
    - configuration of inline level & computed goto use is currently manual via the defines at the top of tclExecute.c

    I see improved performance with inceasing inline level, for both giant switch and computed goto, with the biggest benefit from indirect threading (-DTEBC_INLINE_LEVEL=4 -DUSE_COMPUTED_GOTO=1); however code size does also significantly increase with inline level.

    tests done on a powerpc 7455, may well be different on other processors?

    detailed benchmark numbers forthcoming...

    File Added: tclExecute-TEBCinline-compgoto.diff