diff options
author | Damien George <damien.p.george@gmail.com> | 2015-01-06 12:51:39 +0000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2015-01-07 21:07:23 +0000 |
commit | 7ee91cf86136f4774a9143a3f745d37f314662da (patch) | |
tree | 87960f9f97d6123aa20f9faf53757482a2db7f64 /py/mpconfig.h | |
parent | b4b10fd350852e321624d74983cca286091b55a1 (diff) | |
download | micropython-7ee91cf86136f4774a9143a3f745d37f314662da.tar.gz micropython-7ee91cf86136f4774a9143a3f745d37f314662da.zip |
py: Add option to cache map lookup results in bytecode.
This is a simple optimisation inspired by JITing technology: we cache in
the bytecode (using 1 byte) the offset of the last successful lookup in
a map. This allows us next time round to check in that location in the
hash table (mp_map_t) for the desired entry, and if it's there use that
entry straight away. Otherwise fallback to a normal map lookup.
Works for LOAD_NAME, LOAD_GLOBAL, LOAD_ATTR and STORE_ATTR opcodes.
On a few tests it gives >90% cache hit and greatly improves speed of
code.
Disabled by default. Enabled for unix and stmhal ports.
Diffstat (limited to 'py/mpconfig.h')
-rw-r--r-- | py/mpconfig.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/py/mpconfig.h b/py/mpconfig.h index 0faa6a7282..491fa5ea5d 100644 --- a/py/mpconfig.h +++ b/py/mpconfig.h @@ -182,6 +182,13 @@ #define MICROPY_OPT_COMPUTED_GOTO (0) #endif +// Whether to cache result of map lookups in LOAD_NAME, LOAD_GLOBAL, LOAD_ATTR, +// STORE_ATTR bytecodes. Uses 1 byte extra RAM for each of these opcodes and +// uses a bit of extra code ROM, but greatly improves lookup speed. +#ifndef MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE +#define MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE (0) +#endif + /*****************************************************************************/ /* Python internal features */ |