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.

Reply via email to