summaryrefslogtreecommitdiffstatshomepage
path: root/py/objint.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-06-01 12:32:28 +0100
committerDamien George <damien.p.george@gmail.com>2014-06-01 12:32:28 +0100
commitc60a261ef03f906ae1973f93c63169a5236f0b1f (patch)
tree352a544dae11dbe9226ea26e4b3c377dc5899952 /py/objint.c
parentc7969857f4df078d7e0ce80fc5154d3469b3dddf (diff)
downloadmicropython-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