Tcl Source Code

View Ticket
Bounty program for improvements to Tcl and certain Tcl packages.
Ticket UUID: 1820448
Title: TEBC: replace giant switch by computed goto
Type: Patch Version: None
Submitter: das Created on: 2007-10-26 04:23:11
Subsystem: 47. Bytecode Compiler Assigned To: msofer
Priority: 6 Severity:
Status: Open Last Modified: 2007-11-10 02:18:33
Resolution: None Closed By:
    Closed on:
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
User Comments: das added on 2007-11-10 02:18:33:
File Added - 253600: tclExecute-TEBCinline-compgoto.diff

Logged In: YES 
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

das added on 2007-10-26 11:23:11:
File Added - 251380: tclExecute-compgoto.diff