| Ticket UUID: | 1820448 | ||
| Title: | TEBC: replace giant switch by computed goto | ||
| Type: | Patch | Created on: | 2007-10-26 04:23:11 |
| Submitter: | das | Assigned to: | msofer |
| Subsystem: | 47. Bytecode Compiler | Severity: | |
| Priority: | 6 | Last modified: | 2007-11-10 02:18:33 |
| Status: | Open | Closed by: | |
| Resolution: | None | Closed on: | |
| Version: | None | ||
| 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-10-26 11:23:11:
File Added - 251380: tclExecute-compgoto.diff 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
| ||||
Attachments:
- tclExecute-TEBCinline-compgoto.diff [download] added by das on 2007-11-10 02:18:33. [details]
- tclExecute-compgoto.diff [download] added by das on 2007-10-26 11:23:11. [details]
