diff options
author | Damien George <damien.p.george@gmail.com> | 2014-06-01 12:32:28 +0100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-06-01 12:32:28 +0100 |
commit | c60a261ef03f906ae1973f93c63169a5236f0b1f (patch) | |
tree | 352a544dae11dbe9226ea26e4b3c377dc5899952 /py/objint.c | |
parent | c7969857f4df078d7e0ce80fc5154d3469b3dddf (diff) | |
download | micropython-c60a261ef03f906ae1973f93c63169a5236f0b1f.tar.gz micropython-c60a261ef03f906ae1973f93c63169a5236f0b1f.zip |
py, vm: Replace save_ip, save_sp with code_state->{ip, sp}.
This may seem a bit of a risky change, in that it may introduce crazy
bugs with respect to volatile variables in the VM loop. But, I think it
should be fine: code_state points to some external memory, so the
compiler should always read/write to that memory when accessing the
ip/sp variables (ie not put them in registers).
Anyway, it passes all tests and improves on all efficiency fronts: about
2-4% faster (64-bit unix), 16 bytes less stack space per call (64-bit
unix) and slightly less executable size (unix and stmhal).
The reason it's more efficient is save_ip and save_sp were volatile
variables, so were anyway stored on the stack (in memory, not regs).
Thus converting them to code_state->{ip, sp} doesn't cost an extra
memory dereference (except maybe to get code_state, but that can be put
in a register and then made more efficient for other uses of it).
Diffstat (limited to 'py/objint.c')
0 files changed, 0 insertions, 0 deletions