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: | ||||
Description: |
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 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 das added on 2007-10-26 11:23:11: File Added - 251380: tclExecute-compgoto.diff |