Leopold Toetsch <[EMAIL PROTECTED]> wrote:
> 3) Inspect the delegated method or MMD sub and save only the needed
> register range.
Have this now running here locally and tested:
$ ./bench -b=^over
Numbers are relative to the first one. (lower is better)
p-j-Oc p-C-Oc perl-th perl python ruby
overload 100% 126% 300% 257% - -
This[1] doubles the overload benchmark performance. The "my_mul" function
uses (changes) only integer regs, so 128 bytes are saved now instead of
640. Object vtable method delegation will also be faster.
Cachgrind reports these numbers:
CVS: I refs: 1,070,689,038
D refs: 666,860,918
D1 misses: 4,030,633
now I refs: 464,016,706
D refs: 316,245,506
D1 misses: 1,530,816
Cache misses are still to high.
perl 5.8.0:
I refs: 1,189,527,716
D refs: 724,919,542
D1 misses: 24,844
leo
[1] not alone. dod_register_pmc() of the return continuation in
Parrot_runops_fromc() isn't really necessary. The old continuation is on
the CPU stack. The passed continuation is in the registers. I was a bit
too pessimistic, when coding this.